форум асутп
 На главную                       Здесь может быть Ваша реклама, подробнее...


 Наверх  |  Перейти к теме  |  Поиск  |  Вход  |  Дерево    
 modbus Poll проблема получения ответа
Автор: Елена Баркова 
Дата:   31.01.08 05:48

Может проблема изначально решалась неправильно, но вопрос в том что заказчик настойчиво требует, а мы не специалисты в этой области.
Проблема такова. Наше приложение производит взвешивание автомобилей на весах, все провески хранятся в БД локально. Заказчик требует, чтобы данные по запросу пересылались на его сервер по протоколу modbus. Сервер modbus Poll. Я в программе организовала поток, в котором ведется опрос сом порта и посылка ответа на запрос. На своем стенде сервере смотрю трассировку, там ответ приходит мой, но в окне сервера горит сообщение "bytes missing". Что и где я теряю, не могу понять. Меняю различные настройки сервера-картина тиже.
 000332-Tx:01 04 02 00 00 00 F1 B2
000333-Rx:01 04 2E 33 30 2E 30 31 2E 32 30 30 38 20 31 30 3A 33 36 3A 30 36 31 32 20 20 20 20 20 20 34 2E 35 35 20 20 34 2E 31 35 20 20 30 2E 34 30 F2 CF
3-й байт в запросе-номер провески
3-байт в ответе количество байт данных посылаемых на сервер 3 начальных+ 43данных.
Затем CRC.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: modbus Poll проблема получения ответа
Автор: san 
Дата:   31.01.08 10:52

>> 01 04 02 00 ?00 00? F1 B2
Мастер требует 0 регистров?
непонятно, что значит "3 начальных", запрос идет на чтение регистров, по-этому количество байтов должно быть в два раза больше, чем требуемых регистров.
Если я правильно посчитал - в приведенном ответе 43 байта, исключая CRC. Такого быть не может, кроме того указаное количество байт - 46.

Александр Пупена. Асистент кафедры АКИТ. Национальный университет пищевых технологий. Киев.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: modbus Poll проблема получения ответа
Автор: Елена Баркова 
Дата:   31.01.08 11:16

в описании протокола в запросе сервера 1-й байт номер устройства, 2-й номер функции, 3-й номер провески, остальное мне не интересно, кроме CRC, я ее проверяю при приеме. В ответе первые 2 байта из запроса, 3- длина данных 43 байта, которые я передаю. Потом считаю CRC и добавляю к строке. Реально в порт шлю 48 байт. Вот описание Help для сервера. Тут для RTU и ASCII


Field Name RTU (hex) ASCII Characters
Header None : (Colon)
Slave Address 01 0 1
Function 04 0 4
Starting Address HI 00 0 0
Starting Address LO 00 0 0
No of Registers Hi 00 0 0
No of Registers Lo 02 0 2
Error Check Lo 71 LRC (F 9)
Error Check Hi CB
Trailer None CR LF
Total Bytes 8 17
Response
The register data in the response message are packed as two bytes per register, with the binary contents right justified within each byte. For each register the first byte contains the high-order bits, and the second contains the low-order bits.

Example of a response to the query:


Field Name RTU (hex) ASCII Characters
Header None : (Colon)
Slave Address 01 0 1
Function 04 0 4
Byte Count 04 0 4
Data Hi 00 0 0
Data Lo 06 0 6
Data Hi 00 0 0
Data Lo 05 0 5
Error Check Lo DB LRC (E C)
Error Check Hi 86 None
Trailer None CR LF
Total Bytes 9 19

Адрес этого сообщения    Ответить на это сообщение
 
 Re: modbus Poll проблема получения ответа
Автор: san 
Дата:   31.01.08 11:25

>>в описании протокола в запросе сервера 1-й байт номер устройства, 2-й номер >>функции, 3-й номер провески
3-й байт или 3-й и 4-й байт?
>>3- длина данных 43 байта
во-первых: 2E(HEX)=46(DEC) а не 43
во-вторых: указывать нужно не длину байт, которые передаются, а длину байт данных, которые передаются
в-третьих: длина в байтах в даном запросе должна быть парной (количество регистров умноженое на 2)

Александр Пупена. Асистент кафедры АКИТ. Национальный университет пищевых технологий. Киев.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: modbus Poll проблема получения ответа
Автор: Елена Баркова 
Дата:   31.01.08 11:43

да там 43, здесь ошибка. Можно, пожалуйста третий по-подробнее. Мне не понятно про регистры, я не работаю с контроллерами, я пытаюсь из памяти передать данные.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: modbus Poll проблема получения ответа
Автор: san 
Дата:   31.01.08 11:49

Функция 04 - это чтение входных регистров (значение сигналов с аналогово-цифрового преобразователя). Каждый регистр - это 16-битовое целое. Таким образом в запросе Мастер (тобишь он) просит прочитать регистры, начиная с какого-то. А Слейв (тобишь Вы) должны их дать. Поскольку они 16-битные, то байтов нужно в два раза больше.

Александр Пупена. Асистент кафедры АКИТ. Национальный университет пищевых технологий. Киев.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: modbus Poll проблема получения ответа
Автор: ois_andrew 
Дата:   06.02.08 18:03

может это поможет: http://ru.wikipedia.org/wiki/Modbus (когда-то учавствовал в редактировании )

Адрес этого сообщения    Ответить на это сообщение
 Список форумов    


 Список форумов  |  Нужен логин? Регистрируйтесь здесь 
 Логин пользователя
 Имя пользователя:
 Пароль:
 Помнить пароль:
   
 Забыли ваш пароль?
Введите имя пользователя или e-mail, и новый пароль будет послан на email, указанный в вашем профиле.

Рейтинг@Mail.ru