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

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

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

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

  2. #2

    По умолчанию

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

  3. #3

    По умолчанию

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

  4. #4

    По умолчанию

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

  5. #5

    По умолчанию

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

  6. #6

    По умолчанию

    И, если можно, все-таки, в каких случаях используется функция server.SendAndReceiveData (спрашивал выше #454).

  7. #7

    По умолчанию

    Цитата Сообщение от OlegGEORG Посмотреть сообщение
    И, если можно, все-таки, в каких случаях используется функция server.SendAndReceiveData (спрашивал выше #454).
    Когда нужно получить чистую строку, а уже потом парсить ее вручную.
    Спасибо.

  8. #8

    По умолчанию

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

  9. #9

    По умолчанию

    Добрый день!
    Веду опрос устройства с периодичностью 1 сек. тегом с помощью функции server.SendAndReceiveDataByMask
    в скрипте - функция function OnRead(). Работает.
    Для инициализации устройства для однократного выполнения тот же самый код записываю в тег
    в функцию function OnInit(). Данные не отсылаются. Пробовал записать в функцию function OnInit() устройства,
    тоже ничего.
    Что делаю неправильно?

  10. #10

    По умолчанию

    Цитата Сообщение от OlegGEORG Посмотреть сообщение
    Добрый день!
    Веду опрос устройства с периодичностью 1 сек. тегом с помощью функции server.SendAndReceiveDataByMask
    в скрипте - функция function OnRead(). Работает.
    Для инициализации устройства для однократного выполнения тот же самый код записываю в тег
    в функцию function OnInit(). Данные не отсылаются. Пробовал записать в функцию function OnInit() устройства,
    тоже ничего.
    Что делаю неправильно?
    Так нельзя делать, в этот момент порт еще не открыт.
    Нужно все делать в цикле OnRead.
    Создаете вне функций переменную, например Start инициализируете ее False. В OnRead проверяете - если false, то выполняете нужный вам запрос. Запрос корректно выполнен - взводим Start в true.
    Спасибо.

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

Ваши права

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