Можно ли настроить MasterOPC так, что бы он каждый цикл "опроса" принудительно записывал значение WriteOnly переменной в устройство, даже если она не изменилась?
Можно ли настроить MasterOPC так, что бы он каждый цикл "опроса" принудительно записывал значение WriteOnly переменной в устройство, даже если она не изменилась?
Можно через скрипт.
Включите скрипт После чтения, и проводите запись последовательно двумя командами:
server.WriteCurrentTag(val,qual);
server.WriteCurrentTagToDevice(val,qual);
Спасибо.
Это точно работает? Я специально указал для тега WriteOnly.
И что подставить в качестве val, чтобы бралось текущее записываемое значение?
Последний раз редактировалось ASo; 04.12.2014 в 18:20.
Как выяснилось сейчас через WriteCurrentTag не работает. Это ошибка - мы ее исправим в следующей версии (планируем выпустить завтра или в начале недели).
Можно также сделать в уже имеющейся версии при помощи функций WriteTagByRelativeName:
server.WriteTagByRelativeName("ИмяТега",10,192);
server.WriteTagByRelativeNameToDevice("ИмяТега",10 ,192);
Спасибо.
На самом деле, у меня получилось через ReadCurrentTag с последующей записью считанного значения через WriteCurrentTagToDevice. Это логично - считали тег (значение в сервере) - записали в устройство.
Появился один доп. вопрос. Хочется при старте серевера считать стартовое значение с этого или иного регистра и присвоить тегу. Но только один раз, при старте. Вопрос - можно вставлять modbus.ReadHolding.... в процедуру Init или это надо делать основной процедуре, вводя переменную для отслеживания старта?
В OnInit запросы не выполняются.
Поэтому нужно выполнить запрос в OnRead, а затем установить флаг что чтение выполнение и больше запрос не выполнять.
Спасибо.
Где надо объявлять "флажковую" переменную? Глобальную или локальную для всего скрипта? Или локальную для метода?
Ну вы можете в самом начале скрипта объявить переменную:
StartFlag=false;
затем в OnRead проверить:
if StartFlag==false then
--код запроса
StartFlag=true;
end;
Спасибо.