В справке:
Руководство по языку Lua 5.1 > Примеры и полезности > Примеры расчета контрольных сумм >CRC-CCITT
В справке:
Руководство по языку Lua 5.1 > Примеры и полезности > Примеры расчета контрольных сумм >CRC-CCITT
Спасибо.
Вопрос был про OPC сервер - в нем скриптовый язык на Lua.
Спасибо.
Спасибо за подсказку
Столкнулся с проблемой! Есть программа написанная на Qt. Она взаимодействует с Modbus Universal MasterOPC по протоколу TCP. В одном из тегов реализованная следующая функция:
function OnWrite()
local srcdata = {0}
local srcmask = {"int16:10"}
local srclen = 1;
local dstdata = {}
local dstmask = {"byte", "uint32:1:3210", "float:1:3210", "float:1:3210", "float:1:3210"};--количество элементов – 5, чередование старшим байтов вперед
err, dstdata, dstlen = modbus.ExtFunction(68, srclen, srcmask, srcdata, dstmask);
-- dstlen = dstlen - 1;
server.Message( "dstlen = ", dstlen, " err = ", err, " ", dstdata[1], dstdata[2], dstdata[3]);
end
Осуществляю запрос в прибор. Приходит запрос в программу правильно. Ответ от программы приходит тоже правильный заданной длинны и правильного содержания. Тем не менее функция ExtFunction не может в принятой последовательности выделить 5 значений. Отправленная и принятая последовательности приведены ниже:
29-01-2019 11:35:55.047 modbus::modbus_miko10.10.10.97:2323) Rx: [0025] 00 00 00 00 00 13 0A 44 01 00 00 00 00 41 25 A5 BA 40 A9 6D FF 00 00 00 00 - строка ответ содержащее 5 значений
29-01-2019 11:35:55.047 modbus::modbus_miko10.10.10.97:2323) Tx: [0010] 00 00 00 00 00 04 0A 44 00 00 - строка запроса, содержащая в качестве передаваемого параметра - 0, размерность два байта
Точнее она не определяет ни одного значения
После запуска скрипта в Modbus Universal MasterOPC, отправляю следующий запрос:
Tx: [0010] 00 00 00 00 00 04 0A 44 00 00. Клиент принимает данный запрос обрабатывает и отправляет ответ. В информационном окне в Modbus Universal MasterOPC ответ отображается (и он является верным) и выделен зеленным цветом:
Rx: [0025] 00 00 00 00 00 13 0A 44 01 00 00 00 00 41 25 A5 BA 40 A9 6D FF 00 00 00 00.
согласно заданному шаблону dstmask = {"byte", "uint32:1:3210", "float:1:3210", "float:1:3210", "float:1:3210"}, Modbus Universal MasterOPC должен после последовательности 00 00 00 00 00 13 0A 44 выделить в полученном ответе 5 элементов. Тем не менее
modbus.ExtFunction возвращает нулевую ошибку, длину равную 1 и пустой dstdata. Вопрос заключается в том, почему Modbus Universal MasterOPC принимает ответ (и отображает его верное), но при этом dstdata пустой.
Скрипт писался согласно примерам приведенным в Помощи к программе.
Пришлите лог обмена с устройством. Для этого в свойствах сервера включите запись журнала и всех его событий размер лога задайте равным 10000. Запустите режим исполнения и воспроизведите ошибку. Лог пишется в папку:
c:\ProgramData\InSAT\MasterOPC Universal Modbus Server\SERVERLOGS\
Лог заархивируйте и вышлите нам, также пришлите вашу конфигурацию ОРС сервера.
Спасибо.
Оправил Лог и картинку с настройками OPC сервера
настройки.png