PDA

Просмотр полной версии : как отследить разрыв связи для пм01?



grayeddy
01.06.2010, 08:56
здравствуйте!
использую плк 100-24-p-l + модем пм01-24-ав (rs-485).
испрользуется Gprs-соединение.
при включении контроллера модем соединяется с сервером (компьютер).
раз в 3 секунды со стороны модема идет опрос поступивших данных от сервера, при это контроллер выполняет команды и отправляет данные на модем, отсюда на сервер.
все работает без проблем, если сервер постоянно шлет на модем данные, в моем случае 5 минут.
если есть ошибки при отправке данных от модема - включается счетчик, и при достижении определенного количества неудачных ответов - закрываю порт и модем, потом опять открываю порт и соединение с модемом.
то есть работает так - пришел ответ(запрос) от сервера - отбил подтверждение + отправил данные, если надо от модема+контроллер.
но есть одно. сервер может упасть на какое то время. модем не принимает данные и не отправляет ответ. связь рвется.
так вот, если связь рвется, то логично перезагрузить контроллер (программно перевести в начало главной программы (цикла)).
есть ли способ быстро узнать для модема, что потеряна связь с сервером?
понятно, что можно отправлять пакеты и ждать подтверждения, но есть ли способ лучше?
Если есть идеи или наработки - буду рад выслушать и применить.

lara197a
01.06.2010, 09:29
сталкивался с подобной проблемой. сервер не отслеживает состояние модема и может в следствии этого падать. для избежания подобного нужно: - разнести периодический опрос сервером слева и доставку аварийных сообщений от слейвов серверу на разные модемы.
- если сервер не вернул поддтверждение о получении данных, то слейв активирует автодозвон, до тех пор пока получит подтверждение.
небольшой пример(для 1 -го модема)
2416

grayeddy
01.06.2010, 13:42
Посмотрел исходники - спасибо.
Но у меня немного по другому.
Сервер написан на Delphi и он умеет отслеживать разрыв коннекта от модема.
Просто хотелось бы обратного - чтобы модем узнавал о разрыве соединения с сервером (иногда он падает), и подавал команду контроллеру на перезагрузку.
Есть ли какие то AT-команды на проверку связи?
IP-сервера является статичным.
Наверное, придется посылать тестовые команды n раз в минуту и при достижении определенного количества неотправленных пакетов - подать команду на перезагрузку.

lara197a
01.06.2010, 15:25
модем сам не отслеживает коннект. коннект отслеживает плк и управлять перезагрузкой можно через биты состояния.

Ельцов Андрей
02.06.2010, 11:10
А что за биты состояния? Откуда они в ПЛК? Если Вы про переменную Stat то ана в этом случае не поможет, т.к. при установке связи модем не отвечает на АТ команды.

grayeddy
03.06.2010, 09:53
решение:
посылаем команду At+cipstatus
если связь нормальная - выдаст Connect Ok
если разорвана - Ip Close
тема для меня закрыта :)