Страница 45 из 111 ПерваяПервая ... 3543444546475595 ... ПоследняяПоследняя
Показано с 441 по 450 из 1109

Тема: Modbus Universal MasterOPC Server новый OPC сервер от компании ИнСАТ

  1. #441

    По умолчанию

    Да, все верно.
    Спасибо.

  2. #442

    По умолчанию

    Добрый день.
    В Руководстве по языку Lua 5.1 для MasterOPC Universal Modbus Server написано, что функция server.SendAndReceiveDataByMask в скрипте должна находиться на уровне узла (узла COM). В руководстве пользователя
    при реализации собственных протоколов приведен пример для протокола Rnet, где данная функция расположена в теге.
    Или я что-то путаю. Как сделать правильно? Правильно ли будет разместить эту функцию в скрипте узла, расчет CRC в скрипте устройства, а в тегах все остальное?

  3. #443

    По умолчанию

    Функцию можно размещать где угодно.

    Цитата Сообщение от OlegGEORG Посмотреть сообщение
    Правильно ли будет разместить эту функцию в скрипте узла, расчет CRC в скрипте устройства, а в тегах все остальное?
    Уж лучше тогда и функцию и расчет суммы на уровне устройства
    Спасибо.

  4. #444

    По умолчанию

    Добрый день!
    Не работает функция err,buf,len = server.SendAndReceiveData(srcbuf,srclen,dstlen).
    Вот код в теге:
    function OnRead()
    -- инициилизация устройства
    local send={1,2,3,4,5,6}; --кадр запроса
    local Length=table.maxn(send); --вычисление длины запроса в байтах
    local srcbuf="";
    srcbuf=server.TableToString(send); --байты данных строки для посылки
    server.Message("srcbuf-данные для передачи ",srcbuf);
    local srclen=table.maxn(send); --количество байт данных с учетом байта CRC
    server.Message("srclen-длина данных в байтах ",srclen);
    local dstlen=20; --длина принимаемых данных
    local err,len;
    local buf="";
    --запрос к устройству
    server.Message("srcbuf-данные для передачи окончательные",srcbuf);
    server.Message("srclen-длина данных в байтах окончательная ",srclen);
    err,buf,len = server.SendAndReceiveData(srcbuf,srclen,dstlen); --посылаем и принимаем байты от устройства
    --[[Входные параметры: srcbuf-данные для передачи, srclen-длина данных в байтах, dstlen-длина принимаемых данных.
    err=TRUE при ошибке выполнения функции, buf – строка с принятыми данными (nil, если приема не было),
    len – длина buf.--]]
    --принят ответ. Проверим контрольную сумму
    end

    Вот лог:
    [02.01.2017 18:23:51.230] Inf : Server:MasterOPC Universal Modbus Server Demo 32 Build - 3.2.20
    [02.01.2017 18:23:51.231] Inf : Server:Cтарт конфигурации C:\ProgramData\InSAT\MasterOPC Universal Modbus Server\SERVERCFG\OPC_PRIBOR.mbp
    [02.01.2017 18:23:51.245] SCRIPT : <<ПортCOM.Прибор5.Вход>> : ПортCOM.Прибор5.Вход:srcbuf-данные для передачи 123456
    [02.01.2017 18:23:51.245] SCRIPT : <<ПортCOM.Прибор5.Вход>> : ПортCOM.Прибор5.Вход:srclen-длина данных в байтах 6
    [02.01.2017 18:23:51.245] SCRIPT : <<ПортCOM.Прибор5.Вход>> : ПортCOM.Прибор5.Вход:srcbuf-данные для передачи окончательные123456
    [02.01.2017 18:23:51.245] SCRIPT : <<ПортCOM.Прибор5.Вход>> : ПортCOM.Прибор5.Вход:srclen-длина данных в байтах окончательная 6
    [02.01.2017 18:23:51.247] Inf : ПортCOM:Порт 1 открыт
    [02.01.2017 18:23:51.247] TRACE : (COM1) Tx: [0006] 06 01 31 01 32 01
    [02.01.2017 18:24:02.356] Inf : ПортCOM:Порт 1 закрыт
    [02.01.2017 18:24:02.769] Inf : Server:Завершение работы

    В порт уходят другие данные. В чем проблема не понятно.

  5. #445

    По умолчанию

    Выше пример без CRC:
    local srclen=table.maxn(send); --количество байт данных

  6. #446

    По умолчанию

    Если нужно посылать в порт числа, то лучше использовать sendandrecivedatabymask.
    Ознакомьтесь с этой документацией:
    http://www.insat.ru/products/Univers...ver_API_UG.pdf
    Спасибо.

  7. #447

    По умолчанию

    Добрый день!
    Да, server.SendAndReceiveDataByMask() работает. Хотел упростить себе задачу и не использовать
    маски преобразования. Поэтому решил использовать server.SendAndReceiveData.
    Тогда в каких случаях используется функция server.SendAndReceiveData, все-таки интересно?

  8. #448

    По умолчанию

    И еще вопрос.
    Код из примера:
    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="" - не понятно что.
    Т.е. получается - понятие "строка" имеет разные значения ?

  9. #449

    По умолчанию

    Имеется ли к Modbus Universal MasterOPC Server конфигурация на Промышленный датчик (преобразователь) влажности и температуры воздуха ОВЕН ПВТ100? Ссылка на конфигурации для различных устройств на сайте insat.ru не работает.
    Спасибо.

  10. #450

    По умолчанию

    Цитата Сообщение от OlegGEORG Посмотреть сообщение
    Т.е. получается - понятие "строка" имеет разные значения ?
    Данный аргумент - это строка из всех символом принятых байт.
    Для подсчета контрольной суммы, как правило, нужно использовать массив байт. А массивы между узлами не передаются, поэтому и преобразуются в строку. Посмотрите в документации пример 4 документации.
    Цитата Сообщение от OlegGEORG Посмотреть сообщение
    Имеется ли к Modbus Universal MasterOPC Server конфигурация на Промышленный датчик (преобразователь) влажности и температуры воздуха ОВЕН ПВТ100?
    Готовой конфигурации нет, но учитывая что там всего 10 регистров, вы можете легко сделать ее самостоятельно штатными функциями сервера
    Спасибо.

Страница 45 из 111 ПерваяПервая ... 3543444546475595 ... ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •