Доброго времени суток! Подскажите пожалуйста, в чем может быть проблема? В ОРС сервере добавил устройство и два тега к нему:
ТРМ210:
Адрес 10 (0х0А)
Время ответа 1000
Период опроса 2000
Тег1 (уставка):
адрес 2 (0х0002)
ReadWrite
Тип данных в устройстве int16
в сервере float
перестановка байтов в значении 10325476
Скрипт чтения:
Код:
function OnRead()
local ust, q, dp_val, dp_q;
ust, q=server.ReadTagByRelativeName("уставка");
dp_val, dp_q=server.ReadTagByRelativeName("dp");
if dp_q==OPC_QUALITY_GOOD and dp_val>=0 and dp_val<=3 then
ust=ust/10^dp_val;
server.WriteCurrentTag(ust, q);
end;
end
Скрипт записи:
Код:
function OnWrite()
local ust, ust2, q, dp_val, dp_q;
ust, q=server.ReadCurrentTag();
ust2=ust;
dp_val, dp_q=server.ReadTagByRelativeName("dp");
if dp_q==OPC_QUALITY_GOOD and dp_val>=0 and dp_val<=3 then
ust=ust*10^dp_val;
server.WriteCurrentTagToDevice(ust, q); --новое значение занесем в устройство
server.WriteCurrentTag(ust2, q); --не изменённое еще значение занесем в тег на opc-сервере
end;
end
Тег2 (dp):
адрес 514 (0х0202)
тип данных в устройстве int16
... в сервере int32
ReadOnly
Перестановка 10325476
Считывается все корректно, но при попытке записать в уставку новое значение, статус меняется на BAD (Ошибка в процедуре записи, недопустимая величина в поле данных запроса)