PDA

Просмотр полной версии : MasterOPC Скрипт



EVgenSca
23.04.2019, 11:21
Есть ли пример скрипта, сравнивающий значение Master со значением полученным от опроса Slave? Если не равно то, записывать данные как ошибку. Равно продолжать работу.

SCADAMaster
23.04.2019, 11:35
В смысле у вас два узла, мастер и слейв и вам нужно сравнить два значения?

EVgenSca
23.04.2019, 11:48
да. два узла. Если ошибка, то записать ошибку в другой третий узел

SCADAMaster
23.04.2019, 12:10
server.ReadTag. Читаете теги, сравниваете значения, затем server.Writetag - пишите.
Описание функций есть в справке

EVgenSca
23.04.2019, 12:51
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
Что писать в ? знаке

SCADAMaster
23.04.2019, 13:11
признак качества - 192 можно или OPC_QUALITY_GOOD

EVgenSca
23.04.2019, 13:20
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
А какое значение писать, где знак вопроса?

SCADAMaster
23.04.2019, 13:22
Значение которое вы хотите записать в тег.

EVgenSca
23.04.2019, 13:43
а мне нужна только проверка, если равны, то продолжать работу. Если нет, то выдать ошибку и записать в другой тег

SCADAMaster
23.04.2019, 14:46
Пишите в тег True если не равны и False если равны. True и будет вашей ошибкой.

EVgenSca
23.04.2019, 15:07
Скрипт следует вызывать либо в мастере либо в слейве? Или и там и там?

SCADAMaster
23.04.2019, 15:27
Сделайте в мастере

EVgenSca
24.04.2019, 04:40
-- 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)

SCADAMaster
24.04.2019, 08:25
У вас WriteTag неправильно написан - регистр играет роль.
Посмотрите как написано в списке функций