Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 14

Тема: Конвертирование Float в Int а затем в Hex в MasterOPC Universal Modbus Server

  1. #1

    По умолчанию Конвертирование Float в Int а затем в Hex в MasterOPC Universal Modbus Server

    Добрый день! Помогите пожалуйста со скриптом для конвертации float числа сначала в int16 затем в hex и обратно. В мануале по оборудованию приведены диапазоны работы, плюс есть пара примеров запроса в прибор.
    -50.0 to 150.0 oC= FE0Ch to 5DCh (0.1oC/dig)
    -20.0 to 90.0 oC= FF38h to 384h
    10 to 40LPM=Ah to 28h (1L/min/dig)
    2.6 to 10.6GPM=1Ah to 6Ah
    По сайту https://www.scadacore.com/tools/prog...hex-converter/ я понял что нужно именно "INT16 - Big Endian (AB)" и INT16 - Little Endian (BA)". Для некоторых примеров float число увеличивается в 10 раз.
    В справке MasterOPC Universal Modbus Server есть пример конвертации float to hex и есть приписка "Аналогичным образом можно делать преобразования любых чисел - float, double, int32, int16" - но у меня к сожалению ничего не получилось - менял маски запроса/ответа -все равно получал 8 символов вместо 4.

  2. #2

    По умолчанию

    Не совсем понятно что вы хотите сделать. Зачем вам нужно HEX числа получать?
    Если вы собираетесь слать данные в порт, то просто составьте маску в запросе SendAndReciveDataByMask - она сама все преобразует.
    Спасибо.

  3. #3

    По умолчанию

    Цитата Сообщение от SCADAMaster Посмотреть сообщение
    Не совсем понятно что вы хотите сделать. Зачем вам нужно HEX числа получать?
    Если вы собираетесь слать данные в порт, то просто составьте маску в запросе SendAndReciveDataByMask - она сама все преобразует.
    То есть вы имеете ввиду: вставить в таблицу отправки float число, а в маске прописать int16:10? Или вы же говорите про пример из справки?

  4. #4

    По умолчанию

    В маске вы прописываете "float:3210:1", а функция сама в HEX все преобразует.
    Посмотрите примеры в справке
    https://support.mps-soft.ru/ModbusHe...eivedatabymask
    Спасибо.

  5. #5

    По умолчанию

    Цитата Сообщение от SCADAMaster Посмотреть сообщение
    В маске вы прописываете "float:3210:1", а функция сама в HEX все преобразует.
    Посмотрите примеры в справке
    https://support.mps-soft.ru/ModbusHe...eivedatabymask
    Что то не выходит. Например я хочу преобразовать число "-20.0", но я не получаю того результата как приводится в мануале на устройство "FF38".

  6. #6

    По умолчанию

    Пришлите лог обмена с устройством. Для этого в свойствах сервера включите запись журнала и всех его событий размер лога задайте равным 10000. Начиная с версии 4.2.24 у каждого устройства добавлена настройка "Журнал" - включите запись у проблемного устройства, и также включите запись всех действий. Запустите режим исполнения и воспроизведите ошибку. Лог пишется в папку:
    c:\Users\All Users\InSAT\MasterOPC Universal Modbus Server\SERVERLOGS\
    Лог заархивируйте и вышлите нам, также пришлите вашу конфигурацию ОРС сервера.
    Укажите путь к тегу, где вы разместили скрипт.
    Спасибо.

  7. #7

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    -20.0 видимо в 0.1папугаях то есть -200 папугаев. Т.е 65536-200 в рамках 16 6ит. 65336 в калькуляторе переведите в hex
    Да вы правы. Мне это вариант как раз вечером в голову пришел, что не зря онлайн конвекторы мне из FF38 не -20.0, а -200 выдавали и я сам отметил что число в 10 раз увеличивается. Проверил - так и есть, SendAndReciveDataByMask отрабатывает правильно - получил FF38 из -200. Побежал скорее на форум писать, а тут уже все решено. Спасибо!

  8. #8

    По умолчанию

    Подскажите пожалуйста, как конвертировать из hex в dec в Lua. Функция tonumber(0xFF38,10) возвращает 65336, а надо -200. Нужно получить Decimal from signed 2's complement (3 digits) как например с сайта https://www.rapidtables.com/convert/...o-decimal.html

  9. #9

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    FF38 as signed 16 bit = -200
    FF38 as unsigned 16 bit = 65336
    К сожалению, не знаю как это использовать в скрипте Lua.

  10. #10

    По умолчанию

    Цитата Сообщение от fizhimik Посмотреть сообщение
    Подскажите пожалуйста, как конвертировать из hex в dec в Lua. Функция tonumber(0xFF38,10) возвращает 65336, а надо -200. Нужно получить Decimal from signed 2's complement (3 digits) как например с сайта https://www.rapidtables.com/convert/...o-decimal.html
    Зачем вам это нужно? Это же просто визуальное представление числа.
    Спасибо.

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Modbus Universal MasterOPC Server и ВКТ-7
    от Alex Tulaev в разделе Master SCADA 3
    Ответов: 5
    Последнее сообщение: 03.03.2017, 09:55
  2. СПК105 и MasterOPC Universal Modbus Server
    от janettow в разделе СПК1хх
    Ответов: 36
    Последнее сообщение: 30.07.2015, 09:24
  3. Modbus Universal MasterOPC Server
    от jus в разделе Master SCADA 3
    Ответов: 21
    Последнее сообщение: 26.02.2015, 11:35
  4. Подключение ПЛК-100 к MasterOPC Universal Modbus Server
    от Слава1 в разделе Master SCADA 3
    Ответов: 14
    Последнее сообщение: 08.06.2012, 00:34
  5. Modbus Universal MasterOPC Server и ПЛК мастер
    от smk1635 в разделе Master SCADA 3
    Ответов: 7
    Последнее сообщение: 13.09.2011, 22:22

Ваши права

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