- Отчего модем может зависнуть, и как с этим бороться?
Как и любой компьютер, внутренний микрокомпьютер модема может зависать
по нескольким причинам:
- ошибки в микропрограмме
- нестандартные входные сигналы или элементы данных, против которых в
модеме не предусмотрено защиты
- некачественная фильтрация питающих напряжений
- электростатические разряды или мощные магнитные поля
Наиболее частыми причинами зависания являются первые две. В частности,
в большинстве современных модемов протоколы реализуются методом
конечных автоматов, предусматривающих большое количество состояний и
правил перехода между ними. При таком подходе крайне трудно проверить
все возможные переходы и исключить появление "запрещенных" состояний,
в которые модем может попасть по ошибке, а также некорректных цепочек
таких состояний. В результате, при определенном сочетании входных
условий (типы модемов в паре, протоколы связи, виды передаваемых
данных и т.п.) один или оба модема могут попасть в запрещенные
состояния. В зависимости от тяжести зависания модем может быть выведен
из него либо срабатыванием внутреннего таймера (если таковой имеется),
либо снятием сигнала DTR, либо полным аппаратным сбросом.
Если модем регулярно зависает и нет возможности сменить его или хотя
бы микропрограмму - можно принять компромиссные меры:
- Установить режим &D3 для сброса по падению сигнала DTR. Однако на
большинстве модемов сигнал DTR наравне с другими анализируется
процессором модема, и зависший процессор часто оказывается неспособным
отреагировать на его изменение. Модемы повышенной надежности могут
иметь специальный режим, в котором сигнал DTR напрямую подключается к
цепи аппаратного сброса.
- Установить в модем схему аппаратного сброса, формирующую импульс
сигнала Reset, который автоматически формируется при включении
питания. Сигнал сброса можно сформировать из падения сигнала DTR, либо
взять отдельный сигнал с какого-либо другого порта (COM или LPT). В
первом случае потребуется только доработка самого модема, так как
практически все программы умеют сбрасывать DTR для разрыва соединения.
Во втором случае потребуется запуск специальной программы, которая
будет выдавать в нужный порт сигнал, от которого сработает схема
аппаратного сброса.
- Для внешнего модема можно сделать схему кратковременного отключения
питания, работающую на тех же принципах. Метод хорош тем, что не
требует вмешательства в схему самого модема.
Вариант с формированием сигнала внутреннего сброса имеет ограниченное
применение в случае внутреннего модема. Дело в том, что внутренний
модем всегда содержит еще и контроллер COM-порта, настройку которого
большинство программ выполняет только в начале работы. Таким образом,
если сигнал сброса формируется от падения DTR, то порт также окажется
приведенным в стандартное состояние, и программа не сможет с ним
работать до повторной инициализации. В этом случае нужно, чтобы
программа, обнаружив зависание модема, аварийно перезапускалась.
[ К списку статей ]
[ К оглавлению FAQ ]
Почему модем не распознает сигнал "занято"?
Какой максимальный CPS достижим на данной битовой скорости?