This is topic Использование 16-ти битных регистров in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
Здравствуйте. Есть устройство с 8 дискретными каналами, поддерживающее обмен по Modbus. Хочу использовать Modbus TCP.
Первым шагом для знакомства с Modbus TCP выбрал: Опросить устройство и получить информацию, например о серийном номере. Для этого у меня есть 16-ти битный адрес регистра - 0x1000.
Использую компонент группы источников MODBUS Rin_Word(4). Не понимаю, что указывать в параметрах: Номер порта - если правильно понял, то это только для COM портов (то есть оставляем 0x0) Адрес - адрес контроллера в формате HEX (0, …, FF); Имеет ли этот адрес какое то отношение к 16-ти битным регистрам? Именно здесь я должен вбивать адрес "участка", к которому хочу обратиться в устройстве? Канал - у меня 8 каналов, но ведь я хочу получить общую информацию об устройстве (оставлять 0х0?)
И ещё: 1) Длина серийного номера в документации устройства указана как 2х4 (в байтах), char. То есть в канале CALL и экране я должен создать аргументы типа String? 2) Так как все замеряемые параметры, которые я должен извлечь, подключаясь к своему устройству, в документации содержат адреса регистров в виде "0x100C" или "A+0x5С", где начальный адрес каждого блока A = 0x2000 + (N × 0x200), где N – номер канала (0..7), то могу ли я использовать их(адреса) в Вашей среде Trace Mode?
Posted by Nico (Участник № / Member № 5342) on :
- нет - канал номер регистра = 0x1000 - 1 регистр = 16 бит(2 байта )
Posted by vg (Участник № / Member № 8172) on :
Благодарю за ответ, но ничего не понял из него.
Posted by Nico (Участник № / Member № 5342) on :
-в слое источники создается источник ModbUS С НУЖНЫМ адресом регистра - посмотреть видео урок
Posted by vg (Участник № / Member № 8172) on :
Благодарю, с этим разобрался.
Встал вопрос: Modbus TCP. Использую Rout_Word(3) для извлечения данных. Интересующий параметр занимает 4 байта. Один компонент источника Modbus "извлекает" 2 байта и на выходе получается абракадабра (например для IP-адреса).
В "панели МРВ" профайлера вижу, что значения из устройства достаются в шестнадцатиричной (реальное и входное значения) или двоичной форме (по битам).
Каким образом вывести, например, IP-адрес (4 байта) или нецелое число (4 байта) в одном ГЭ Текст?
Posted by Nico (Участник № / Member № 5342) on :
-а зачем его извлекать если IP-адрес есть в настройках и его можно посмотреть через системные переменные TM -привязать псевдо-команду (Rout_FLOAT,Rin_FLOAT) к 32 каналу HEX32(считается 2 регистра сразу)
Posted by vg (Участник № / Member № 8172) on :
Спасибо за пояснения.
С IP согласен, но следуя вашему совету, у меня получился адекватный вывод только для целого числа (с перестановкой байтов SWAP0). В то время как не целые отображаются некорректно (с перестановкой байтов и без), например измеряемое значение 18.95, а отображается 1.10046е+09
Из того что сделал в проекте:
Создал компонент Rout_Float(3), ввёл адрес устройства, канал по адресу регистра, выбрал тип протокола TCP/IP, направление - Input, формат - Дискрет, задал IP-адрес и добавил ключ для перестановки байтов.
Создал канал HEX32, связал его с компонентом Rout_Float(3).
На Экране отрисовал ГЭ Текст. Создал для Экрана аргумент типа REAL. Привязал этот аргумент к ГЭ Текст. В свойствах Экрана привязал его аргумент к Реальному значению канала HEX32.
Результат получился как писал выше.
Подскажите где я не прав.
Posted by vg (Участник № / Member № 8172) on :
Поторопился с сообщением. Сделал всё то же самое с каналом FLOAT и получил желаемый результат. Ещё раз спасибо за помощь.