Здравствуйте!
Стоит система PLC - OPC - SCADA связь по Modbus TCP/IP.
Для формирования отчета времени включения-выключения насоса написан код:
begin
if run_fc.AsBool = false then
vrOff.Value := Now //время выключения насоса
else
vrOn.Value := Now; //время включения насоса
end.
Пока связь устойчивая отчет формируется отлично:
Начало Конец
08:40:21 10:47:41
11:30:02 15:20:00
15:40:36 19:24:05
но когда связь пропадает, а потом появляется (при этом насос отключен), то в отчете появляются лишние строки (время включения остается неизменным, время выключения меняется):
Начало Конец
08:40:21 10:47:41
11:30:02 15:20:00
15:40:36 19:24:05
15:40:36 19:24:24
15:40:36 19:26:18
15:40:36 19:26:28
Подскажите пожалуйста, как можно избавиться от этого эффекта? Может какой триггер прописать?
Здравствуйте!
Скорее всего, лишние строки появляются в исходных данных из-за неопределенных (нет связи) состояний внешнего тега run_fc.
Исключить ложные переходы для тега run_fc (нет связи -> 0, нет связи -> 1) можно сохраняя его значения во внутренней переменной run_fc_1.
Скрипт по изменению внешнего тега:
begin
run_fc_1.Value := run_fc.Value; // присвоить текущее состояние насоса внутренней переменной
end.
Скрипт по изменению внутренней переменной:
begin
if run_fc_1.AsBool then vrOn.Value := Now // время включения насоса
else vrOff.Value := Now; // время выключения насоса
end.
Djakov, решение должно быть примерно такое:
1. Дважды кликнуть бэнд данных по заголовку;
2. В открывшемся окне на вкладке "Фильтры" добавить новый фильтр. В списке фильтра выбрать "Выражение";
3. Код выражения должен быть таким:
PreviousIsNull(Данные, "Value") ? true : ((double)Previous(Данные, "Value") != (double)Данные.Value)
, где Данные - имя источника данных. Value - колонка в источнике данных в которой нужно исключить повторяющиеся значения.