Видно в шестой версии сдвигов по данному вопросу не произошло. Понадобилось реализовать следующий алгоритм: 1. Обнулить счетчик (I7080); 2. Сформировать измерительное окно с помощью платы счетчиков установленной в компьютере; 3. По закрытию измерительного окна считать данные со счетчика; и повторить цикл...
Проблема одна - я не могу определить момент считывания данных со счетчика, если они на конец цикла совпали со значением на предыдущем цикле. Мне приходится делать паузу в 3 секунды, чтобы гарантированно получить новые данные с 46-ти счетчиков (это в три раза большее время, чем мне хотелось бы). То же самое касается выходных каналов (например сброса счетчика, хотя в данной конкретной ситуации это не очень важно) - я бы не хотел менять его значение, а отрабатывать текущее. Отрабатывать то его я могу, но факт отработки зафиксировать не получается, т.к. время изменения канала не изменяется при его отработке. Так вот, я считаю что это не верно! Раз уж данные опросили, то они актуальны на момент опроса и время канала должно измениться. Конечно при этом некорректно называть его временем изменения, ну введите тогда ещё один атрибут - время отработки! (или счетчик отработок)
Короче, нужен какой-то атрибут указывающий на отработку канала. EXEC не годится! Он практически не отлавливается, - если отработка происходит быстрее времени пересчета узла, то часть каналов не видит его изменения.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1) Формировать по закрытию окна свой собственный флаг в канале. 2) Ловить EXEC на Input'е не нужно - если там 0 после пункта №1 - это уже означает, что упешно отработан. Тогда можно и свой собственный флаг сбросить в ноль до следующей операции.
Posted by Kramarenko Stanislav (Участник № / Member № 119) on :
Т.е. можно сделать так: (?) 1) определяем конец измерительного окна 2) программа трансляции в каждом канале счетчика устанавливает своему счетчику EXEC:=1 и флаг "отработка":=1 3) далее, если [(EXEC==0) and ("отработка"==1)], то "отработка":=0 и новые данные готовы.