Easyelectronics.ru

Электроника для всех
Текущее время: 18 окт 2019, 21:53

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Modbus ASCII запрос
СообщениеДобавлено: 21 янв 2016, 13:54 
Только пришел
Аватара пользователя

Зарегистрирован: 01 авг 2015, 04:14
Сообщения: 11
Код:
char message[10];
    message[0] = 0x3A;
    message[1] = 0x1A;
    message[2] = 0x06;
    message[3] = 0x01;
    message[4] = 0x43;
    message[5] = 0x00;
    message[6] = 0x0E;
    message[7] = calculateLRC(message, 7);
    message[8] = 0x0D;
    message[9] = 0x0A;


правильно ли я формирую запрос? тогда какая разница между modbus rtu и ascii кроме начала запроса и подсчетом контрольной суммы?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Modbus ASCII запрос
СообщениеДобавлено: 21 янв 2016, 16:24 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2012, 17:24
Сообщения: 525
slavka_online писал(а):
[code] char message[10];
правильно ли я формирую запрос? тогда какая разница между modbus rtu и ascii кроме начала запроса и подсчетом контрольной суммы?

В RTU идут бинарные данные, пакеты разделяются паузами.
в ASCII все данные (включая служебные) передаются в виде текстовых символов, итого х2 перерасход канала плюс преамбула и хвостовик. Зато тайм-ауты не страшны. Хоть с клавы в терминал забивай.
Пакеты расшифровывать не надо - они прямо в виде текстовой строки идут.

Кстати, вот и ответ на ваш вопрос.
message[1] = 0x1A;
message[2] = 0x06;
message[3] = 0x01;
message[4] = 0x43;
message[5] = 0x00;
message[6] = 0x0E;
это полная лажа.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Modbus ASCII запрос
СообщениеДобавлено: 22 янв 2016, 00:03 
Только пришел
Аватара пользователя

Зарегистрирован: 01 авг 2015, 04:14
Сообщения: 11
MrYuran писал(а):
slavka_online писал(а):
[code] char message[10];
правильно ли я формирую запрос? тогда какая разница между modbus rtu и ascii кроме начала запроса и подсчетом контрольной суммы?

В RTU идут бинарные данные, пакеты разделяются паузами.
в ASCII все данные (включая служебные) передаются в виде текстовых символов, итого х2 перерасход канала плюс преамбула и хвостовик. Зато тайм-ауты не страшны. Хоть с клавы в терминал забивай.
Пакеты расшифровывать не надо - они прямо в виде текстовой строки идут.

Кстати, вот и ответ на ваш вопрос.
message[1] = 0x1A;
message[2] = 0x06;
message[3] = 0x01;
message[4] = 0x43;
message[5] = 0x00;
message[6] = 0x0E;
это полная лажа.



как мне тогда нудно переписать запрос?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Modbus ASCII запрос
СообщениеДобавлено: 22 янв 2016, 00:35 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2012, 17:24
Сообщения: 525
slavka_online писал(а):
как мне тогда нудно переписать запрос?

message[1] = '1';
message[2] = 'A';
message[3] = '0';
message[4] = '6';
message[5] = '0';
message[6] = '1';
и так далее


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Modbus ASCII запрос
СообщениеДобавлено: 22 янв 2016, 00:57 
Только пришел
Аватара пользователя

Зарегистрирован: 01 авг 2015, 04:14
Сообщения: 11
MrYuran писал(а):
slavka_online писал(а):
как мне тогда нудно переписать запрос?

message[1] = '1';
message[2] = 'A';
message[3] = '0';
message[4] = '6';
message[5] = '0';
message[6] = '1';
и так далее


а как это записать в более удобной форме? можно строку формировать как ":1A0601..." ? потом в поток кидать LRC и в конце "0D0A" ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Modbus ASCII запрос
СообщениеДобавлено: 22 янв 2016, 02:36 
Старожил

Зарегистрирован: 16 окт 2013, 01:27
Сообщения: 1102
slavka_online писал(а):
MrYuran писал(а):
slavka_online писал(а):
как мне тогда нудно переписать запрос?

message[1] = '1';
message[2] = 'A';
message[3] = '0';
message[4] = '6';
message[5] = '0';
message[6] = '1';
и так далее


а как это записать в более удобной форме? можно строку формировать как ":1A0601..." ? потом в поток кидать LRC и в конце "0D0A" ?


Посылка 1A 06 01 будет выглядеть как

31 41 30 36 30 31

Любое число или буква типа "Char" будет передаваться 4мя байтами:
пример:
00 = 30 30
11 = 31 31
FF = 46 46
Просто откройте таблицу ASCII - там все очень просто.

P\S если будете пользовать Modbus Free библиотеку - ей даже контрольная сумма пофигу, главное вначале послать преамбулу и в конце окончание передачи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Modbus ASCII запрос
СообщениеДобавлено: 22 янв 2016, 16:33 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2012, 17:24
Сообщения: 525
slavka_online писал(а):
а как это записать в более удобной форме? можно строку формировать как ":1A0601..." ? потом в поток кидать LRC и в конце "0D0A" ?

Можно, только не забыть про терминирующий ноль


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB