Тема / Topic: Использование 16-ти битных регистров
vg
Forum Haunter / Завсегдатай форума
Участник № / Member № 8172
отправлено / posted
Здравствуйте. Есть устройство с 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?
Сообщения / Posts 101 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
отправлено / posted
-в слое источники создается источник ModbUS С НУЖНЫМ адресом регистра - посмотреть видео урок
Сообщения / Posts 873 | Из / From: Россия
| IP / IP: IP адрес / IP address |
vg
Forum Haunter / Завсегдатай форума
Участник № / Member № 8172
отправлено / posted
Благодарю, с этим разобрался.
Встал вопрос: Modbus TCP. Использую Rout_Word(3) для извлечения данных. Интересующий параметр занимает 4 байта. Один компонент источника Modbus "извлекает" 2 байта и на выходе получается абракадабра (например для IP-адреса).
В "панели МРВ" профайлера вижу, что значения из устройства достаются в шестнадцатиричной (реальное и входное значения) или двоичной форме (по битам).
Каким образом вывести, например, IP-адрес (4 байта) или нецелое число (4 байта) в одном ГЭ Текст?
Сообщения / Posts 101 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
отправлено / posted
-а зачем его извлекать если IP-адрес есть в настройках и его можно посмотреть через системные переменные TM -привязать псевдо-команду (Rout_FLOAT,Rin_FLOAT) к 32 каналу HEX32(считается 2 регистра сразу)
Сообщения / Posts 873 | Из / From: Россия
| IP / IP: IP адрес / IP address |
vg
Forum Haunter / Завсегдатай форума
Участник № / Member № 8172
отправлено / posted
Спасибо за пояснения.
С IP согласен, но следуя вашему совету, у меня получился адекватный вывод только для целого числа (с перестановкой байтов SWAP0). В то время как не целые отображаются некорректно (с перестановкой байтов и без), например измеряемое значение 18.95, а отображается 1.10046е+09
Из того что сделал в проекте:
Создал компонент Rout_Float(3), ввёл адрес устройства, канал по адресу регистра, выбрал тип протокола TCP/IP, направление - Input, формат - Дискрет, задал IP-адрес и добавил ключ для перестановки байтов.
Создал канал HEX32, связал его с компонентом Rout_Float(3).
На Экране отрисовал ГЭ Текст. Создал для Экрана аргумент типа REAL. Привязал этот аргумент к ГЭ Текст. В свойствах Экрана привязал его аргумент к Реальному значению канала HEX32.
vg
Forum Haunter / Завсегдатай форума
Участник № / Member № 8172
отправлено / posted
Поторопился с сообщением. Сделал всё то же самое с каналом FLOAT и получил желаемый результат. Ещё раз спасибо за помощь.
Сообщения / Posts 101 | Из / From: Россия
| IP / IP: IP адрес / IP address |