Скажу сразу, что пытаюсь использовать ОРС сервер извращённым способомВ скрипте Устройства читаю регистры Modbus
function OnAfterReading()
local w={}
local err
err,w = modbus.ReadInputRegistersAsInt16(0,12,true,"103254 76" );
local Address = server.GetCurrentDeviceAddress( );
server.RunFunctionFromNode("SetData",0,w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[10],w[11],w[12],Address,err);
end
и затем переписываю эти значения в теги Сервера.
В Устройствах никаких тегов нет. Получается этакий мультиплексор. Используя 13 тегов (12 значений и номер устройства), я опрашиваю 12 устройств по 12 каналов в каждом. При таком способе признак качества я должен формировать сам, а отследить потерю связи невозможно. Функция OnAfterReading() при обрыве связи вызываться перестаёт.
Для контроля такой ситуации подошло бы что-то типа OnServerError(), тем более, что продукт позиционируется как платформа для разработки сервера с поддержкой разработки протоколов связи с разными устройствами. При таком подходе значения ОРС тегов придётся формировать программно, включая признак качества. Или я не прав?
p.s. Надеюсь, попытка использовать 144 канала, вместо максимальных 32 бесплатных, в данном случае не криминал![]()




В скрипте Устройства читаю регистры Modbus
Ответить с цитированием
