Выше пример без CRC:
local srclen=table.maxn(send); --количество байт данных
Выше пример без CRC:
local srclen=table.maxn(send); --количество байт данных
Если нужно посылать в порт числа, то лучше использовать sendandrecivedatabymask.
Ознакомьтесь с этой документацией:
http://www.insat.ru/products/Univers...ver_API_UG.pdf
Спасибо.
Добрый день!
Да, server.SendAndReceiveDataByMask() работает. Хотел упростить себе задачу и не использовать
маски преобразования. Поэтому решил использовать server.SendAndReceiveData.
Тогда в каких случаях используется функция server.SendAndReceiveData, все-таки интересно?
И еще вопрос.
Код из примера:
local err,len,lenbuf;
local bufs=""; --строка принятых байт
err,dest,len,bufs,lenbuf=server.SendAndReceiveData ByMask...
Т.е. bufs - строка принятых байт. Раз это строка, то ее вроде можно сразу отправить на подсчет CRC.
Но в примере строку преобразуем в таблицу, а таблицу опять в строку для отправки на подсчет CRC:
--преобразование из строки в таблицу байт
local buf={}; --таблица принятых байт
for i = 1, lenbuf, 1 do
table.insert (buf,string.byte(bufs,i));
end
s = server.TableToString(buf); --вызов функции для подсчета контрольной суммы CRC=server.RunFunctionFromDevice("CRCsum",1,s,lenb uf-1); и т.д.
И вот строка s получается с нормальными данными, полученными от устройства.
И на самом деле, без этого двойного преобразования не работает. Принятые данные local bufs="" - не понятно что.
Т.е. получается - понятие "строка" имеет разные значения ?
Данный аргумент - это строка из всех символом принятых байт.
Для подсчета контрольной суммы, как правило, нужно использовать массив байт. А массивы между узлами не передаются, поэтому и преобразуются в строку. Посмотрите в документации пример 4 документации.
Готовой конфигурации нет, но учитывая что там всего 10 регистров, вы можете легко сделать ее самостоятельно штатными функциями сервера
Спасибо.
И, если можно, все-таки, в каких случаях используется функция server.SendAndReceiveData (спрашивал выше #454).
Имеется ли к Modbus Universal MasterOPC Server конфигурация на Промышленный датчик (преобразователь) влажности и температуры воздуха ОВЕН ПВТ100? Ссылка на конфигурации для различных устройств на сайте insat.ru не работает.
Спасибо.
Добрый день!
Веду опрос устройства с периодичностью 1 сек. тегом с помощью функции server.SendAndReceiveDataByMask
в скрипте - функция function OnRead(). Работает.
Для инициализации устройства для однократного выполнения тот же самый код записываю в тег
в функцию function OnInit(). Данные не отсылаются. Пробовал записать в функцию function OnInit() устройства,
тоже ничего.
Что делаю неправильно?
Спасибо.