goz (05.09.2005 13:53, просмотров: 6270)
Порядок байтов в Modbus RTU Нужен совет знающих людей по теме.
Будем реализовывать на msp430 максимально стандартный modbus rtu. С устройством будут работать:
- иссесно заказное ПО (с ним проблем нет);
- стандартные драйвера modbus или ОРС серверы для mosbus rtu.
Нужно будет читать и записывать некие структуры данных, содержащие поля типов: char, word, long, float, double. Предполагаем использовать функции 0x03 (read holding registers) и 0x10 (write registers).
Modbus RTU регламентирует передачу word'ов в порядке BigIndian, т.е. сначала старший байт, потом младший. В 430-ом и PC порядок LittleIndian. Т.е. если бы обмен был только значениями типа word то пришлось бы при приеме/передаче "переворачивать" все word'ы. Но если структура имеет и другие типы данных, то при приеме/передаче надо знать структура какого типа передается/принимается (для переворотов). Этого хотелось бы избежать, учитывая, что у slave'а могут попросить ЛЮБОЙ word. Вплоть до того, что float могут попросить двумя запросами по одному word'у. В общем не хотелось бы заморачиваться на перевороты вообще. Должно быть просто: установил указатель на нужный адрес и затем прочел сколько нужно регистров. Так вот вопрос в том, можно ли не переворачивать? Например, в Matrikon OPC Server for Modbus есть фишка указать надо ли переворачивать float. Но для word такого нет. А переменной типа double вообще нету. Т.е. теоретически переворотами может заниматься или то ПО, которое юзает драйвер или ОРС клиент. Но первично считанные данные становятся фактически непригодными – нужно обработка. Нормально ли это?
Если у кого был опыт, поделитесь, плз. Какие грабли могут быть?