PDA

Просмотр полной версии : Связь двух ПЛК100 через модем (CSD)



FPavel
29.01.2013, 08:45
Уважаемые форумчане, подскажите где ошибка.

В итоге у меня должна появиться программа передачи с ПЛК100 на ПЛК100 через модем ПМ01 в режиме CSD нескольких байт. Но пока приближаюсь к ней поэтапно.

Запнулся на обмене.

Сделал тестовые программки (для приемника и передатчика) обмена по RS485 без модема. По нажатию на кнопку "Старт" передатчик увеличиват на 1 число и отправляет его на приёмник, а тот выставляет его на выходные контакты.
Признаком завершения удачного обмена я решил выбрать равенство записываемого и считываемого чисел из одного регистра.
Работает.

Перешёл к обмену через модем. Настроил ПМ01 через терминал на автоподъём и работу без эха. Заменил в программах RS485-1 на модем. Нажимаю на "Старт". Обмен один-два (чаще один) раза проходит, а потом выставляется ошибка модема в 1. На этом сязь прекращается до перезагрузки выключением питания.

Приаттачиваю архив с тестовыми программками.

P.S. В моём распоряжении для отладки чуть различные ПЛК - ПЛК100-R-L и ПЛК100-R-M.

FPavel
09.02.2013, 11:34
Мне кажется, что разобрался.

Отправной точкой была информация о том, что GSM модемы плохо разрывают соединение ("кладут трубку"). Т.к. модем с ПЛК соединён по RS485, то можно "прослушать" их обмен:


ATI <------- ПЛК опрашивает готовность модема

SIM900D R11.0 <------- у модема всё хорошо

OK
ATDT89181111111 <------- набор номера

CONNECT 9600 <------- соединение установлено
:01700000018E
:0171000001107D
:01700000018E
:0171000001107D
:01700000018E
:0171000001107D
:01700000018E
:0171000001107D
:01700000018E
:0171000001107D
:01700000018E
:0170000001008E
:0171000001107D
:01700000018E
:01710000018D
:017░ВВВВВККВ║"5 <------- сбой в обмене
01107E
:01700000018E
:01710000018D
:0171000001107D
:01700000018E
:0170000001107E
:017AАИ║КВВВВВККВ║"5
00018D
:0170000001107E
:01710000018D
:0170000001107E
:01710000018D
Э└ААВККВ║*5 <------- сбой в обмене
:0170000001107E
+++чар° <------- сбой при смене режима
ATH <------- и как следствие - не "кладётся трубка"
ATI <------- ПЛК опрашивает модем, но ответа нет
ATI
ATI
ATI
ATI
На основе лога я пришёл к выводу, что
1) для избежания сбоя при обмене (rs485 ведёт приём и передачу по одной и той же паре) нужно увеличить время между опросом (polling time)
2) для стабильного переключения режима нужно, чтобы к моменту подачи "+++" обмен уже прекратился.

Реализация:
1) Настройка Universal Modbus Device -> Work Mode -> By command
2) после установления соединения запускаю таймер и с его периодичностью произвожу обмен - подаю команду 16#FF в Universal Modbus Device (UMD)
3) когда выполняются какие-либо условия завершения обмена - подаю команду 16#FE в UDM
4) запускаю таймер ожидания завершения обмена по rs485
5) после гарантированного завершения обмена - в модем подаю команды "Stop_Dial=1" и "Start_Auto_Dial=0"

Возможно, было бы правильнее, если бы завершение обмена по Modbus и подача команд "+++" и "ATH" согласовывались на уровне прошивки контроллера. Но тут разработчикам "виднее" - в этом пожелании я не учитываю множества других факторов.

Igor_Pavlov
24.04.2013, 13:57
А можно поподробнее? У меня та же проблема.