MODBUS

Общие вопросы по оборудованию и программному обеспечению Компании ДЭП
Depth

Сообщение Depth » 12 янв 2005, 20:05

Вот скажите мне своё мнение. Зачем нужны такие сложности в MODBUSe как преобразование HEX в ASCII. Почему нельзя всё оставить в HEX. Почему "1" нельзя вот прям так взять и отправить, а обязательно нужно переделать 31. Сколько работаю с MODBUS а сам догадаться не могу. Или мне не попадались задачи, которые это объясняют?

Максим
Сообщения: 165
Зарегистрирован: 13 янв 2005, 15:03
Откуда: Компания ДЭП

Сообщение Максим » 13 янв 2005, 15:21

Ваш вопрос полностью не понятен.

Система ASCII представлена в виде наборов символов и за каждым закреплено определенное число. Например за символом "g" = 103(0x67), "2" = 50(0x32) и т.д.

Если данные нужно вводить только в числовом виде, то надо преобразовывать ASCII в HEX(или DEC).

В основном все зависит программиста и цели поставленной задачи.

Depth

Сообщение Depth » 13 янв 2005, 18:02

А суть вопроса в том что если нужно передать, к примеру код станции, равный 12, то отправлять нужно не $0C (12 в DEC), а $31 и $32 (кода по ASCII "1" и "2"). И из одного байта получаем два. А зачем?

Максим
Сообщения: 165
Зарегистрирован: 13 янв 2005, 15:03
Откуда: Компания ДЭП

Сообщение Максим » 14 янв 2005, 14:56

Есть два типа протоколов MODBUS - ASCII и RTU.

MODBUS ASCII: цифра 2 передается как символ "2"(0x32) и т.д. Далее число 0x6789 передается как символы "6789" (0x36, 0x37, 0x38, 0x 39).
MODBUS RTU: цифра 2 передается как код 0x02 и т.д. Далее число 0x6789 передается как код 0x67, 0x89.

Максим

Начинающий

Сообщение Начинающий » 14 янв 2005, 15:09

IMHO предположу, что MODBUS ASCII нужен для возможности работы с модулем через обычный терминал, там и тайауты больше чем в MODBUS RTU, хотя не ясно как человек будет налету контрольную сумму для сообщения считать.

Максим
Сообщения: 165
Зарегистрирован: 13 янв 2005, 15:03
Откуда: Компания ДЭП

Сообщение Максим » 14 янв 2005, 16:37

Если человек будет вводить все вручную через терминал, то ему также придется считать контрольную сумму вручную(на калькуляторе или программкой), если это не делает за него программа-терминал.