Доброго всем воскресного дня.
Как писал ранее была задумка в ПР200х8 реализовать макрос подсчета фильтроцикла. И нашлось время и я это сделал. Сначала подумал обрезать значения в период промывки при смене режимов колонны. Кто помнит мы берем сигнал с нашего моторчика управляющего клапаном и делаем из него дискретный сигнал 0/1 ...но коль я хочу смотреть кубатуру между регенерациями мне эти 4 импульса работы моторчика при переходах с режима на режим как бы не нужны...и я уже написал макрос что если значения меньше 1000 литров то их не запоминать...и у меня бы получился бы стройный рядок цифр в виде значений фильтроцикла...но потом подумал для эксперимента все же оставлю и их. Можно было сделать два регистра в который бы писалось и так и так...но это уже сейчас в голову мысль пришла...если надо будет это сделать одно строчка кода в макросе...
Повторюсь вот у нас циклограмма с дискретного входа ПР200х8.
2025-03-30_10-58-52.png
И у нас поступают значения со счетчика в виде импульсов -1 импульс -1 литр (у кого-то может будет 1\10 все зависит от счетчика)... и соответственно наш макрос при очередном импульсе от моторчика колонн сначала записывает накопленную кубатуру в регистр Фильтроцикл 2 и потом происходит его обнуление и новый подсчет до следующего импульса работы моторчика колоны умягчения...и так мы получаем сколько воды прошло через счетчик на каждом этапе регенерации...
Вот так можно в Мастерскада 3.12 посмотреть на цифровые значения по каждому каналу...можно их выгрузить в ексель можно из них сделать тренд...новые тренды добавляются на полотно в один клик...но вот чтобы их было удобно анализировать надо еще подумать (иногда их удобнее перед отображением масштабировать потому что сравнивать значения 10 и 6000 на общем тренде не совсем удобно...надо применять определённые настройки чтобы либо шкалы были разные...либо само значение поделить так на...100...тогда оно поместится в наш диапазон 0...100 (сейчас... 150)
2025-03-30_10-54-16.png
И вот наш итог работы макроса в ПР200х8. Мы видим большие значения больше 1000 это наш фильтроцикл между регенерациями...сколько воды прошло через счетчик потребителю. А вот с маленькими значениями...тут пока есть нюанс...это тоже сколько прошло воды потребителю в момент регенерации без учета сколько воды было затрачено на саму регенерацию так как сам счетчик установлен уже после колонны умягчения...а у нас там ещё и угольная колонна периодически регенерируется...логично надо переставлять счетчик...или мы всё-таки добавим второй...
Кому интересен проект в программе Овен лоджик прикладываю свои труды...
2025-03-30_11-37-57.png_________2025-03-30_12-03-36.png
Код:
function_block functionblock5 //имя функционального блока
var_input //объявление входных переменных
U : bool; //входная переменная с типом данных bool
U2 : bool; //входная переменная с типом данных bool
N : udint; //входная переменная для значения счетчика после сброса
end_var
var_output //объявление выходных переменных
Q : udint; //выход счетчика фильтроцикла
Q2 : udint; //выход значение фильтроцикла
end_var
var //объявление локальных переменных
CounterValue : udint; //переменная для текущего значения счетчика
RTrig_1: SYS.RTRIG; // тригер счета импульсов со счетчика воды
RT_out :bool;//выход тригер счета импульсов со счетчика воды
RTrig_2: SYS.RTRIG; //тригер записи в ячейку памяти значения фильтроцикла
RT_out2 :bool;//выход тригер записи в ячейку памяти значения фильтроцикла
end_var
CounterValue := N;
RTrig_1(I := U, Q => RT_out);// Тригер счета импульсов со счетчика воды
RTrig_2(I := U2, Q => RT_out2);//Тригер записи в ячейку памяти значения фильтроцикла
if RT_out then
CounterValue := (CounterValue + 1);//счет фильтроцикла от каждого импульса счетчика воды
end_if
if RT_out2 then
Q2 := CounterValue;//Запись значение фильтроцикла в ячейку памяти при начале работы моторчика
CounterValue := 0;// Обнуление счетчика фильтроцикла при начале работы моторчика
end_if
Q := CounterValue;//Выход счетчика фильтроцикла для SCADA
end_function_block