Должна работать.
Нет необходимости выносить отдельный узел. Разместите server.SetNodeToOnOff() в тег типа ServerOnly, в скрипт "Перед записью". Тогда он будет исполнятся, даже если узел выключен.
Должна работать.
Нет необходимости выносить отдельный узел. Разместите 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).
Да, все верно.
Спасибо.
Добрый день.
В Руководстве по языку Lua 5.1 для MasterOPC Universal Modbus Server написано, что функция server.SendAndReceiveDataByMask в скрипте должна находиться на уровне узла (узла COM). В руководстве пользователя
при реализации собственных протоколов приведен пример для протокола Rnet, где данная функция расположена в теге.
Или я что-то путаю. Как сделать правильно? Правильно ли будет разместить эту функцию в скрипте узла, расчет CRC в скрипте устройства, а в тегах все остальное?
Добрый день!
Не работает функция err,buf,len = server.SendAndReceiveData(srcbuf,srclen,dstlen).
Вот код в теге:
function OnRead()
-- инициилизация устройства
local send={1,2,3,4,5,6}; --кадр запроса
local Length=table.maxn(send); --вычисление длины запроса в байтах
local srcbuf="";
srcbuf=server.TableToString(send); --байты данных строки для посылки
server.Message("srcbuf-данные для передачи ",srcbuf);
local srclen=table.maxn(send); --количество байт данных с учетом байта CRC
server.Message("srclen-длина данных в байтах ",srclen);
local dstlen=20; --длина принимаемых данных
local err,len;
local buf="";
--запрос к устройству
server.Message("srcbuf-данные для передачи окончательные",srcbuf);
server.Message("srclen-длина данных в байтах окончательная ",srclen);
err,buf,len = server.SendAndReceiveData(srcbuf,srclen,dstlen); --посылаем и принимаем байты от устройства
--[[Входные параметры: srcbuf-данные для передачи, srclen-длина данных в байтах, dstlen-длина принимаемых данных.
err=TRUE при ошибке выполнения функции, buf – строка с принятыми данными (nil, если приема не было),
len – длина buf.--]]
--принят ответ. Проверим контрольную сумму
end
Вот лог:
[02.01.2017 18:23:51.230] Inf : Server:MasterOPC Universal Modbus Server Demo 32 Build - 3.2.20
[02.01.2017 18:23:51.231] Inf : Server:Cтарт конфигурации C:\ProgramData\InSAT\MasterOPC Universal Modbus Server\SERVERCFG\OPC_PRIBOR.mbp
[02.01.2017 18:23:51.245] SCRIPT : <<ПортCOM.Прибор5.Вход>> : ПортCOM.Прибор5.Вход:srcbuf-данные для передачи 123456
[02.01.2017 18:23:51.245] SCRIPT : <<ПортCOM.Прибор5.Вход>> : ПортCOM.Прибор5.Вход:srclen-длина данных в байтах 6
[02.01.2017 18:23:51.245] SCRIPT : <<ПортCOM.Прибор5.Вход>> : ПортCOM.Прибор5.Вход:srcbuf-данные для передачи окончательные123456
[02.01.2017 18:23:51.245] SCRIPT : <<ПортCOM.Прибор5.Вход>> : ПортCOM.Прибор5.Вход:srclen-длина данных в байтах окончательная 6
[02.01.2017 18:23:51.247] Inf : ПортCOM:Порт 1 открыт
[02.01.2017 18:23:51.247] TRACE : (COM1) Tx: [0006] 06 01 31 01 32 01
[02.01.2017 18:24:02.356] Inf : ПортCOM:Порт 1 закрыт
[02.01.2017 18:24:02.769] Inf : Server:Завершение работы
В порт уходят другие данные. В чем проблема не понятно.