Есть ли пример скрипта, сравнивающий значение Master со значением полученным от опроса Slave? Если не равно то, записывать данные как ошибку. Равно продолжать работу.
Вид для печати
Есть ли пример скрипта, сравнивающий значение Master со значением полученным от опроса Slave? Если не равно то, записывать данные как ошибку. Равно продолжать работу.
В смысле у вас два узла, мастер и слейв и вам нужно сравнить два значения?
да. два узла. Если ошибка, то записать ошибку в другой третий узел
server.ReadTag. Читаете теги, сравниваете значения, затем server.Writetag - пишите.
Описание функций есть в справке
ValueErr=0
function OnInit()
end
-- Uninitialization
function OnClose()
end
-- Processing
function OnAfterReading()
slave=server.ReadTag("Slave.A1.RW");
master=server.ReadTag("Master.A1.RW");
if (slave==master)then
server.Writetag (ValueErr, ?)
end
Что писать в ? знаке
признак качества - 192 можно или OPC_QUALITY_GOOD
function OnAfterReading()
slave=server.ReadTag("Slave.A1.RW");
master=server.ReadTag("Master.A1.RW");
if slave == master then
server.Writetag (?, OPC_QUALITY_GOOD);
else
server.Writetag (?, OPC_QUALITY_BAD);
return;
end;
end
end
А какое значение писать, где знак вопроса?
Значение которое вы хотите записать в тег.
а мне нужна только проверка, если равны, то продолжать работу. Если нет, то выдать ошибку и записать в другой тег
Пишите в тег True если не равны и False если равны. True и будет вашей ошибкой.
Скрипт следует вызывать либо в мастере либо в слейве? Или и там и там?
Сделайте в мастере
-- Initialization
function OnInit()
end
-- Uninitialization
function OnClose()
end
-- Processing
function OnBeforeReading()
end
-- Processing
function OnAfterReading()
slave=server.ReadTag("Slave.A1.RW");
master=server.ReadTag("Master.A1.RW");
if slave == master then
server.Writetag (false, OPC_QUALITY_GOOD);
else
server.Writetag (True, OPC_QUALITY_GOOD);
return;
end;
end
Выдает следующее сообщение: 24-04-2019 08:40:47.437 A1:A1 >> [string "--[[(I)Master.A1]]-- Initialization..."]:15: attempt to call field 'Writetag' (a nil value)
У вас WriteTag неправильно написан - регистр играет роль.
Посмотрите как написано в списке функций