PDA

Просмотр полной версии : Работа с нестандартным протоколом под RS485



Денис Бердяев
08.07.2017, 16:24
Добрый день.

Изучаю Примеры подключения стороннего оборудования и устройств с нестандартными протоколами (http://www.owen.ru/catalog/codesys_v2/13257808)

Задача следующая, управлять контроллерами СКУД по средствам ПЛК
Для этого использую библиотеку SysLibCom


Контроллер СКУД Z5R NET 8000 (https://ironlogic.ru/il.NSF/pages/Z5R8000) в сети RS485 работает по своему протоколу

ПЛК 110.32L так же имеет RS485


Вот информация от производителя по свойствам сети


Система включает в себя до 254 контроллеров с номерами от 1 до 254 (FEh).
Для связи между компьютером и системой контроллеров используется последовательный интерфейс RS-485 со следующими настройками:
• 19200 bps или 57600bps
• 8 bits
• 1 stop bit
• no parity control
• no flow control

Связь осуществляется кадрами в полудуплексном режиме. Инициатором обмена является единственное устройство (компьютер). Остальные могут посылать ему ответ только по его запросу, на устройство с кодом 7Fh и номером 00h.


Вот пример команды отправляемой пакетом HEX


1. Установка часов контроллера 3Fh на 12:35:03 25 мая 1999 г.
Команда: FA 05 3F 05 00 D0 08 00 00 03 35 12 00 25 05 99 10 50 F5
Ответ: FA 7F 00 05 3F 55 55 05 3F F5


Вот что делаю после инициализации порта

VAR
command:ARRAY [0..128] OF BYTE:= 16#FA, 16#05, 16#3F, 16#05, 16#00, 16#D0, 16#08, 16#00, 16#00, 16#03, 16#35, 16#12, 16#00, 16#25, 16#05, 16#99, 16#10, 16#50, 16#F5;

PRG
SysComWrite(0, command, sizeof(command), 0);


а в ответ тишина, время не меняется, но если подключиться в сеть с помощью USB-RS485 и через терминал ком порта отправить туда FA 05 3F 05 00 D0 08 00 00 03 35 12 00 25 05 99 10 50 F5 то всё ОК

melky
09.07.2017, 09:27
не очень в ST, но у вас массив сколько байт - 128 ? и вы посылаете весь массив в прибор, тогда чего же вы ждете в ответ ?

Денис Бердяев
09.07.2017, 09:34
За ночь разобрался, дело было не в бабине, со связью всё впорядке, уходила вместо нормальных данных билеберда, помогло выставление размера байта равным 8 битам, почему то в примере стояло 7