Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 22

Тема: Запрос по маске в MasterOPC Server

  1. #11

    По умолчанию

    Уже даже не знаю как это комментировать...
    Никакого пробела нет - его добавляет сервер в лог, чтобы визуально различать байты.
    Конвертировать 30 30 30 ... в число смысла нет - потому что это не число. Вам с помощью маски нужно преобразование в строку, а уже полученную строку преобразовывать в число функцией tonumber.
    Спасибо.

  2. #12

    По умолчанию

    Цитата Сообщение от SCADAMaster Посмотреть сообщение
    Уже даже не знаю как это комментировать...
    Никакого пробела нет - его добавляет сервер в лог, чтобы визуально различать байты.
    Конвертировать 30 30 30 ... в число смысла нет - потому что это не число. Вам с помощью маски нужно преобразование в строку, а уже полученную строку преобразовывать в число функцией tonumber.
    Спасибо! Я теперь знаю, что пробела нет, для меня это было вообще не очевидно, так как при опросе по стандартным функциям в логе Запроса команда идет без пробела, это меня и смущало. Подобной задачей я занимаюсь первый раз и открываю для себя много нового, поэтому не удивляйтесь подобным вопросам.
    Тогда получается для ответа от сервера в виде 3A 30 38 30 33 30 32 32 31 34 30 30 30 30 30 30 30 30 30 0D 0A, маска должна быть destmask={"string:22","string:16","string:4"}; --маска принимаемого запроса
    UPD.
    Я тут наугад попробовал поменять маску destmask={"string:11","string:8","string:2"}; обработал tonumber, затем в функцию приведенную для примера в справке ToFloat и заработало.
    Оказывается, для меня было не очевидно, что string:11 это количество элементов, а не количество символов. В самом первом примере Руководства было string:1 и там был только один символ для инициализации команды, это меня и спутало. В руководстве это описано на странице 57 для int16, но эту информацию я как то упустил.
    Спасибо большое за поддержку!

  3. #13

    По умолчанию

    Добрый день! Появилась задача записи float числа в прибор. В справке приведен пример перевода через server.SendAndReceiveDataByMask и результатом в виде таблицы. Как следует поступить дальше с таблицей? Для теста обработал результат таблицы tostring и в сервере установил тип данных string и записал результат в тег. Результатом после запуска сервера для числа 12.3 стало table: 0x0ab31c60, причем последние три символа постоянно меняются. Кроме того если воспользоваться онлайн калькулятором то число 12.3 будет 0x4144cccd. Подскажите как дальше быть.

  4. #14

    По умолчанию

    А зачем так делать? Вы можете просто маску указать и все ОРС - сам преобразует как надо.
    Если вам это нужно сделать для подсчета контрольной суммы, то лучше просто сделать для этого внешнюю функцию которая вызывается с помощью 7 и 8 аргумента функции SendAndReciveDataByMask (посмотрите справку - там это описано)
    Спасибо.

  5. #15

    По умолчанию

    Цитата Сообщение от SCADAMaster Посмотреть сообщение
    А зачем так делать? Вы можете просто маску указать и все ОРС - сам преобразует как надо.
    Если вам это нужно сделать для подсчета контрольной суммы, то лучше просто сделать для этого внешнюю функцию которая вызывается с помощью 7 и 8 аргумента функции SendAndReciveDataByMask (посмотрите справку - там это описано)
    То есть достаточно указать маску "float" в маске отправляемого запроса? Просто в таблицу добавляются такого формата данные для преобразования в ASCII символы
    send[2] = string.format ("%02X",0x08) и я думал что мое float число должно быть так добавлено
    send[7]= string.format ("%08X",число на запись);

  6. #16

    По умолчанию

    Насчет ASCII - пока не будут преобразовываться. Как раз это мы сейчас исправляем. Как исправим - да, будет нормально.
    Спасибо.

  7. #17

    По умолчанию

    Цитата Сообщение от SCADAMaster Посмотреть сообщение
    Насчет ASCII - пока не будут преобразовываться. Как раз это мы сейчас исправляем. Как исправим - да, будет нормально.
    Понятно, спасибо. Может есть какой иной пример перевода float to hex на языке Lua? То что я нашел используют функции math.floor, math.mod но ОРС сервер их видимо не использует и выдает ошибку скрипта. https://coderoad.ru/18886447/%D0%9F%...BD%D0%B8%D0%B5

  8. #18

    По умолчанию

    У меня в принципе получилось по первому коду в ссылке (функция function float2hex (n)), далее string.format("%x",float2hex(12.3)), результат 4144cccс что соответствует 12.2999992

  9. #19

    По умолчанию

    Добрый день! Существует ли возможность опроса устройства при подачи питания на него, если ОРС сервер уже запущен? То есть ОРС сервер работает, опрашивает датчики, и тут мы решаем без перезапуска сервера задействовать еще устройства, теги которых опрашиваются в сервере. У меня в итоге ОРС сервер останавливается из за ошибок с криптах
    Ошибки скрипта:
    12-08-2021 12:04:42.760 Max capacity:BronkHorst.Device1.Max capacity >> [string "--[[(R)BronkHorst.Device1.Max capacity]]-- In..."]:3: bad argument #1 to 'BitAnd' (number expected, got nil)
    stack traceback:
    [C]: at 0x00873ad0
    [C]: in function 'BitAnd'
    [string "--[[(R)BronkHorst.Device1.Max capacity]]-- In..."]:3: in function 'ToFloat'
    [string "--[[(R)BronkHorst.Device1.Max capacity]]-- In..."]:42: in function <[string "--[[(R)BronkHorst.Device1.Max capacity]]-- In..."]:18>
    12-08-2021 12:04:42.155 Measure:BronkHorst.Device1.Measure >> [string "--[[(R)BronkHorst.Device1.Measure]]-- Initial..."]:3: bad argument #1 to 'BitAnd' (number expected, got nil)
    stack traceback:
    [C]: at 0x00873ad0
    [C]: in function 'BitAnd'
    [string "--[[(R)BronkHorst.Device1.Measure]]-- Initial..."]:3: in function 'ToFloat'
    [string "--[[(R)BronkHorst.Device1.Measure]]-- Initial..."]:42: in function <[string "--[[(R)BronkHorst.Device1.Measure]]-- Initial..."]:18>

    А само устройство отвечает подобным образом
    Ответ устройства:
    12-08-2021 12:04:42.760 BronkHorst:evice1COM6) Rx: [0067] 0D 0A 0D 0A 2A 2A 2A 2A 2A 20 42 48 54 20 4D 42 43 33 43 20 45 4C 20 50 52 45 53 54 49 47 45 20 56 32 2E 30 32 62 20 4E 6F 76 20 31 35 20 32 30 31 38 20 31 32 3A 30 31 3A 30 37 20 2A 2A 2A 2A 2A 0D 0A
    12-08-2021 12:04:42.156 BronkHorst:evice1COM6) Tx: [0017] 3A 30 36 30 33 30 34 30 31 34 44 30 31 34 44 0D 0A
    12-08-2021 12:04:42.155 BronkHorst:evice1COM6) Rx: [0001] 00
    12-08-2021 12:04:41.766 BronkHorst:evice1COM6) Tx: [0017] 3A 30 36 30 33 30 34 32 31 34 30 32 31 34 30 0D 0A

    Ответ устройства ***** BHT MBC3C EL PRESTIGE V2.02b Nov 15 2018 12:01:07 - очевидно его модель, прошивка и текущее время.
    Если сымитировать обрыв провода данных - вытащить преобразователь USB-RS232 из компьютера, то проблем нет, данные затем снова начинают приходить (повторен цикл опроса устройства как в руководстве).
    Спасибо.

  10. #20

    По умолчанию

    Если у вас скрипт не упадет, то все будет работать.
    Нужно тщательно обрабатывать принимаемые данные - убеждаться что верная контрольная сумма, что в таблице столько элементов сколько ожидается, что при преобразовании из строки в число не получился nil и т.д.
    Спасибо.

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Похожие темы

  1. MULTI-PROTOCOL MASTEROPC SERVER
    от oleg1821 в разделе Master SCADA 3
    Ответов: 19
    Последнее сообщение: 13.11.2018, 07:38
  2. MasterOPC Server теряет связь
    от Михаил85 в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 05.10.2018, 08:26
  3. Universal MasterOPC Server и TeamViewer
    от a_gricaj в разделе OPC Серверы
    Ответов: 0
    Последнее сообщение: 06.05.2018, 15:43
  4. Modbus Universal MasterOPC Server и ВКТ-7
    от Alex Tulaev в разделе Master SCADA 3
    Ответов: 5
    Последнее сообщение: 03.03.2017, 09:55

Ваши права

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