![]() |
![]() |
#51 |
Junior Member
Регистрация: 29.07.2014
Сообщений: 13
Вес репутации: 0 ![]() |
![]()
Прошу помощи!
у меня tcnm arduino mega с ModBus скетчем которая чудно работает и тестируется через QModBus в ответ на чтение приходит следующее: 0x02 0x03 0x04 0x03 0xff 0x00 0x00 0xf9 0x47 но когда я подключаю свой переходник к mr3020 и пытаюсь считать данные вот что приходит. 2014.07.29 19:16:57 [INFO:14112] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:16:57 [INFO:14112] ( <= ) 0x03_0xFF_0x00_0x00_0xF9_0x47 2014.07.29 19:16:58 [INFO:14176] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:16:58 [INFO:14176] ( <= ) 0xF9_0x47 2014.07.29 19:16:59 [INFO:14240] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:16:59 [INFO:14240] ( <= ) 0x03_0xFF_0x00_0x00_0xF9_0x47 2014.07.29 19:16:59 [INFO:14304] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:17:00 [INFO:14304] ( <= ) 0xF9_0x47 2014.07.29 19:17:00 [INFO:14368] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:17:00 [INFO:14368] ( <= ) 0xF9_0x47 2014.07.29 19:17:01 [INFO:14432] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:17:01 [INFO:14432] ( <= ) 0x03_0xFF_0x00_0x00_0xF9_0x47 2014.07.29 19:17:02 [INFO:14496] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:17:02 [INFO:14496] ( <= ) 0xF9_0x47 2014.07.29 19:17:18 [INFO:14582] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:17:18 [INFO:14582] ( <= ) 2014.07.29 19:17:18 [INFO:14646] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:17:19 [INFO:14646] ( <= ) 0x03_0xFF_0x00_0x00_0xF9_0x47 2014.07.29 19:17:19 [INFO:14710] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:17:19 [INFO:14710] ( <= ) 2014.07.29 19:17:20 [INFO:14774] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:17:20 [INFO:14774] ( <= ) 0x03_0xFF_0x00_0x00_0xF9_0x47 2014.07.29 19:17:21 [INFO:14838] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:17:21 [INFO:14838] ( <= ) 2014.07.29 19:17:21 [INFO:14902] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:17:21 [INFO:14902] ( <= ) 0x47 2014.07.29 19:17:22 [INFO:14966] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:17:22 [INFO:14966] ( <= ) 2014.07.29 19:18:02 [INFO:15052] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:18:03 [INFO:15052] ( <= ) 2014.07.29 19:18:03 [INFO:15116] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:18:03 [INFO:15116] ( <= ) 2014.07.29 19:18:04 [INFO:15180] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:18:04 [INFO:15180] ( <= ) 0xF9_0x47 2014.07.29 19:18:05 [INFO:15244] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:18:05 [INFO:15244] ( <= ) 0x47 2014.07.29 19:18:05 [INFO:15308] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:18:05 [INFO:15308] ( <= ) 0x47 2014.07.29 19:18:06 [INFO:15372] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:18:06 [INFO:15372] ( <= ) 0x03_0xFF_0x00_0x00_0xF9_0x47 2014.07.29 19:18:07 [INFO:15436] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:18:07 [INFO:15436] ( <= ) 2014.07.29 19:18:15 [INFO:15522] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:18:16 [INFO:15522] ( <= ) 2014.07.29 19:18:16 [INFO:15586] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:18:16 [INFO:15586] ( <= ) 0x47 2014.07.29 19:18:17 [INFO:15650] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:18:17 [INFO:15650] ( <= ) 2014.07.29 19:18:17 [INFO:15714] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:18:18 [INFO:15714] ( <= ) 2014.07.29 19:18:18 [INFO:15778] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:18:18 [INFO:15778] ( <= ) 2014.07.29 19:18:19 [INFO:15842] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:18:19 [INFO:15842] ( <= ) 0x47 2014.07.29 19:18:20 [INFO:15906] ( => ) 0x02_0x03_0x00_0x00_0x00_0x02_0xC4_0x38 2014.07.29 19:18:20 [INFO:15906] ( <= ) 0x47 может подскажете почему читает только часть информации и то невсегда? |
![]() |
![]() |
![]() |
#52 |
Senior Member
|
![]()
Скрипт с запросом покажите. Одиночный запрос тоже не работает?
__________________
Россия навсегда! |
![]() |
![]() |
![]() |
#53 |
Junior Member
Регистрация: 29.07.2014
Сообщений: 13
Вес репутации: 0 ![]() |
![]()
Одиночный тоже не работает. Скрипт чуть позже выложу, но он особо не отличается от того что в примере при установке.
|
![]() |
![]() |
![]() |
#54 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Скрипт который в примере работает?
|
![]() |
![]() |
![]() |
#55 |
Junior Member
Регистрация: 29.07.2014
Сообщений: 13
Вес репутации: 0 ![]() |
![]()
Вот мой скрипт:
modbus.OnFailure = function( handle, error ) { document.getElementById( 'console' ).value += '\nОшибка: ' + error; } modbus.OnSuccess = function( handle ) { document.getElementById( 'console' ).value += '\nRegister( ' + handle + ', 0 ): ' + modbus.Register( handle, 0 ); } modbus.Serial = { Name: '/dev/ttyUSB0', BaudRate: EnModbusBaudRate.mbBaudRate9600, DataBits: EnModbusDataBits.mbDataBits8Bits, Parity: EnModbusParity.mbParityNone, StopBits: EnModbusStopBits.mbStopBitsTwo, Timeout: 100 }; // ReadHoldingRegisters( handle, slaveid, address, quantity, updaterate ) // Starting Address: 0x0000 to 0xFFFF. // Quantity of Inputs: 1 to 125 (0x7D). modbus.ReadHoldingRegisters( 1, 2, 0, 2, 700 ); //modbus.WriteSingleCoil( 1, 2, 6, 0xFF00, 1000 ); //modbus.ReadHoldingRegisters( 2, 2, 1, 1, 950 ); //modbus.ReadHoldingRegisters( 3, 2, 2, 1, 750 ); modbus.DelayBetweenPoll = 200; modbus.UpdateEnable(1); //modbus.UpdateEnable(2); //modbus.UpdateEnable(3); setTimeout( function() { modbus.UpdateDisable(1); // modbus.UpdateDisable(2); // modbus.UpdateDisable(3); }, 5000 ); На arduine библиотека modbusslave я на ней уже много чего реализовал и все работает. И еще вопрос WriteHoldingRegistr 0x10 будет реализован? Просто эта библиотека работает только с 0x03 и 0x10 Последний раз редактировалось Warms; 30.07.2014 в 11:10. |
![]() |
![]() |
![]() |
#56 |
Senior Member
|
![]()
Два стоповых бита у меня не реализовано ещё. Выбор есть, но в коде скрипта, насколько я помню, это не учитывается. Я просто ещё не смотрел какими параметрами устанавливаются стоп биты в shell, поэтому используется только вариант с одним стоп битом. Может быть проблема в этом.
По логу выглядит так, словно в буфер не попадает начало ответной посылки. Это может быть от того, что ответ слишком быстро приходит, хотя я не уверен. Можно попробовать вставить небольшую задержку в скетче при ответе. Я бы рекомендовал использовать UpdateOnce для отладки. Другие функции можно тоже реализовать. Я посмотрю.
__________________
Россия навсегда! |
![]() |
![]() |
![]() |
#57 |
Junior Member
Регистрация: 29.07.2014
Сообщений: 13
Вес репутации: 0 ![]() |
![]()
Дело в том что библиотека ардуинки поддерживает только 2 стоп бита, но QModBus при выставлении одного стоп бита не выдавал никаких ошибок и все работало. В скрипте я пробовал выставлять и один стоп бит, но результат такой-же.
Я залез в библиотеку SimpleModbusSlave.cpp и перед отправкой void sendPacket(unsigned char bufferSize) добавил delay(50); и таки все заработало. Спасибо за помощь. Очень сильно жду 0x10 функцию. Последний раз редактировалось Warms; 30.07.2014 в 12:17. |
![]() |
![]() |
![]() |
#58 |
Senior Member
|
![]()
В вашем случае нужно смотреть всё на осциллографе, чтобы понять какая задержка между приёмом и ответом. Возможно она выставлена минимальной в библиотеке, а скрипт при переходе от посылки к приёму пропускает начальные байты. Ко мне скоро Ардуина приедет, я могу посмотреть что там с временными диаграммами. Мне нужна ссылка на используемую библиотеку modbus.
А на меньших скоростях какое поведение?
__________________
Россия навсегда! |
![]() |
![]() |
![]() |
#59 |
Junior Member
Регистрация: 29.07.2014
Сообщений: 13
Вес репутации: 0 ![]() |
![]()
Библиотека SimpleModbusSlaveV9 по ссылке правдо только V8 но я нашел и 9-ую
https://code.google.com/p/simple-modbus/downloads/list Меньшие скорости не тестировал 9600 по моему вполне подходящая. Очень сильно жду 0x10 функцию. p.s. решил проблему см. предыдущий пост. |
![]() |
![]() |
![]() |
#60 |
Senior Member
|
![]()
Ясно. Про скорость, тут дело в том, что по стандарту минимальное время между посылками зависит от скорости передачи и равняется 3,5 символам. Соответственно, если скорость меньше, то интервал автоматически будет больше.
Я реализовывал только те функции, которые мог протестировать в симуляторе. У меня не было устройства для полноценного теста. Я могу реализовать функцию, а вы потестируете у себя.
__________________
Россия навсегда! |
![]() |
![]() |
![]() |
Метки |
modbus, modbus-rtu, скрипт, модуль |
Здесь присутствуют: 4 (пользователей: 0 , гостей: 4) | |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|