Все таки есть или нет возможность отловить событие чтения HDA-тега клиентом?
Периодически читать весь массив значений как-то нехорошо![]()
Нет, нельзя.
Читайте определенное количество записей при старте.
А дальше можно читать не весь архив, а только свежую часть - сохранить время последней считанной записи и читать с нее.
Спасибо.
Добрый день!
Подскажите пожалуйста, есть ли возможность по значению дискретного тега включать в работу и выключать коммуникационный узел, отвечающий за GSM-модем? То есть, необходимо раз в час прочитать несколько значений с удаленного счетчика. Предполагаю, что при появлении этой необходимости, нужно включить узел в работу, чтобы модем установил соединение, прочитать значения в SCADA-систему, а затем выключить узел (модем через некоторое время разорвет соединение из-за отсутствия обмена данных). Попытался сделать это следующим образом:
В узле GSM-модема "Port" (COM-порт) в скрипт добавил функцию:
function Control(b)
if b==true then
server.SetNodeToOnOff(true);
else
server.SetNodeToOnOff(false);
end;
return "OK"
end
Также добавил вспомогательный программный узел - программное устройство - тег "server only" (это собственно флажок чтения данных из счетчика) со скриптом "после чтения тега":
function OnRead()
local res;
val,q=server.ReadCurrentTag();
res=server.RunFunctionFromNodeByName("Port","Contr ol",1,val);
end
Но не работает такая конструкция...
Должна работать.
Нет необходимости выносить отдельный узел. Разместите server.SetNodeToOnOff() в тег типа ServerOnly, в скрипт "Перед записью". Тогда он будет исполнятся, даже если узел выключен.
Спасибо.
Большое спасибо! Все заработало!
OPC HDA возвращает качество тега 0x000400C0. Так и должно быть? В спецификациях что-то не нашел.
Вообще это хороший признак качества, но с каким-то оттенком.
Вы сами его формируете? Как вы его определили?
Спасибо.
Вот и я об этом. По идее должно быть C0, но это в принципе качество для OPC DA. Вообще OPC HDA качество какая-то мутная тема.
У нас используется несколько OPC HDA серверов разных производителей, все они возвращают при GOOD - C0.
На вашем сервере настроил HDA. Качество сам в скрипте формирую, по вашим примерам (C0). Скада (не MasterSCADA, другого производителя) все читает и пишет в свою БД, только качество BAD.
А 0x000400C0 я увидел под отладчиком, когда начал разбираться в чем дело (у нас есть исходники OPC HDA и OPC DA клиентов для используемой скада, уже не раз они выручали - почему-то несмотря на стандарты каждый программист OPC-сервера считает своим долгом привнести что-то своё).
Сами понимаете что для себя проблему решили, хотелось уточнить - может неправильно интерпретируем коды качества?
Кажется разобрался.
0004 - необработанные (raw) данные, 00C0 - признак GOOD (как в OPC DA).