Просмотр полной версии : Принудительная запись в MasterOPC
Можно ли настроить MasterOPC так, что бы он каждый цикл "опроса" принудительно записывал значение WriteOnly переменной в устройство, даже если она не изменилась?
SCADAMaster
04.12.2014, 18:07
Можно через скрипт.
Включите скрипт После чтения, и проводите запись последовательно двумя командами:
server.WriteCurrentTag(val,qual);
server.WriteCurrentTagToDevice(val,qual);
Это точно работает? Я специально указал для тега WriteOnly.
И что подставить в качестве val, чтобы бралось текущее записываемое значение?
SCADAMaster
04.12.2014, 21:06
Как выяснилось сейчас через WriteCurrentTag не работает. Это ошибка - мы ее исправим в следующей версии (планируем выпустить завтра или в начале недели).
Можно также сделать в уже имеющейся версии при помощи функций WriteTagByRelativeName:
server.WriteTagByRelativeName("ИмяТега",10,192);
server.WriteTagByRelativeNameToDevice("ИмяТега",10,192);
На самом деле, у меня получилось через ReadCurrentTag с последующей записью считанного значения через WriteCurrentTagToDevice. Это логично - считали тег (значение в сервере) - записали в устройство.
Появился один доп. вопрос. Хочется при старте серевера считать стартовое значение с этого или иного регистра и присвоить тегу. Но только один раз, при старте. Вопрос - можно вставлять modbus.ReadHolding.... в процедуру Init или это надо делать основной процедуре, вводя переменную для отслеживания старта?
SCADAMaster
04.12.2014, 21:50
В OnInit запросы не выполняются.
Поэтому нужно выполнить запрос в OnRead, а затем установить флаг что чтение выполнение и больше запрос не выполнять.
Где надо объявлять "флажковую" переменную? Глобальную или локальную для всего скрипта? Или локальную для метода?
SCADAMaster
05.12.2014, 11:06
Ну вы можете в самом начале скрипта объявить переменную:
StartFlag=false;
затем в OnRead проверить:
if StartFlag==false then
--код запроса
StartFlag=true;
end;
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot