Как отправить данные Hex? - PullRequest
1 голос
/ 30 июня 2010

Я пытаюсь установить связь с ведомым устройством Modbus через ModbusTCP или последовательный порт Modbus. Производитель. (partlow) имеет руководство по связи ASCII (http://www.partlow.com/uploadedFiles/Downloads/1160%20ASCII%20Comms%20Manual.pdf), которое, похоже, отличается от стандартных методов связи (http://en.wikipedia.org/wiki/Modbus).). Существует много существующего кода, настроенного для работы с обычной адресацией катушек Modbus. и такие, где, кажется (по крайней мере, мне), с этими парнями все по-другому.

Итак, как я могу отправить шестнадцатеричные данные через ruby ​​или perl? Я могу делать все хорошо, но, если я пишу "0DFA" на последовательный порт ... это нормально? или мне нужно сначала преобразовать его в нижний слой или как-то обозначить?

Я много работал над этим и, возможно, сам запутался (делая вещи более сложными, чем они), но я пытаюсь установить связь с этим измерителем, и я вижу, что индикатор активности TX мигает, но нет RX, что означает, что мой формат данных неправильный ...

В основном мы работали над этим (и несколько фрагментов perl тут и там, пытаясь найти что-то, что работает): http://www.messen -und-deuten.de / modbus.html

Я общаюсь через терминальный сервер, который принимает modbusTCP (который использует этот скрипт), но у меня возникают проблемы с применением того, что в руководстве по коммюнике к приведенному выше коду, для правильного форматирования пакета.

Ответы [ 2 ]

3 голосов
/ 30 июня 2010

Вы говорите о необработанных данных?Есть несколько способов, в том числе

print HANDLE "\x{OD}\x{FA}";

printf HANDLE "%c%c", 0x0D, 0xFA;

print HANDLE "\015\372";       # octal notation

print HANDLE pack("C*", 0x0D, 0xFA);

syswrite HANDLE, "\x{OD}\x{FA}", 2;
0 голосов
/ 08 августа 2010

Я бы порекомендовал вам взглянуть на библиотеку RModBus , чтобы помочь справиться с некоторыми сложностями формирования пакетов по TCP / IP из языка Ruby.

Всегда возможно, что устройство, с которым вы обмениваетесь данными, требует или, наоборот, избегает обозначения modicon.Это был небольшой сбой, когда я впервые попробовал читать регистры из ПЛК.Другая «ошибка», которую я обнаружил в Modbus, заключается в том, что некоторые из систем адресации смещены на одну из-за причуд в их реализации.

...