2.5.4. Неисправности и тестирование сом-портов
Неполадки с СОМ-портами случаются (выявляются) при установке новых портов или неудачном подключении внешних устройств.
Проверка конфигурирования
Тестирование последовательных портов (как и параллельных) начинают с проверки их опознавания системой. Список адресов установленных портов обычно появляется в таблице, выводимой BIOS перед загрузкой ОС. Список можно посмотреть с помощью тестовых программ или прямо в BIOS Data AREA с помощью отладчика.
Если BIOS обнаруживает меньше портов, чем установлено физически, вероятно, двум портам присвоен один адрес или установлен нестандартный адрес какого-либо порта. Проблемы могут возникать с адресами портов COM3 и COM4: не все версии BIOS будут искать порты по альтернативным адресам 3EOh, 338h, 2EOh и 238h; иногда не производится поиск по адресам 3E8h и 2E8h. Нумерация найденных портов, отображаемая в заставке, может вводить в заблуждение:
если установлены два порта с адресами 3F8h и 3E8h, в заставке они могут называться СОМ1 и COM2, и по этим именам на них можно ссылаться. Однако те же порты в заставке могут называться и СОМ1 и COM3 (поскольку 3E8h является штатным адресом для COM3), но попытка сослаться на порт COM3 будет неудачной, поскольку в данном случае адрес 3E8h будет находиться в ячейке 0:402h B/OS Data Area, соответствующей порту COM2, а в ячейке порта COM3 (0:404h) будет нуль — признак отсутствия такового порта.
«Объяснить» системе, где какой порт, можно вручную любым отладчиком, занеся правильные значения базовых адресов в ячейки B/OS Data Area(это придется делать каждый раз после перезагрузки ОС перед использованием «потерянного» порта). Существуют тестовые утилиты, позволяющие находить порты (например, Port Finder).
Если двум портам назначен один и тот же адрес, тестовая программа обнаружит ошибки порта только с использованием внешней заглушки (External LoopBack).Программное тестирование порта без заглушки не покажет ошибок, поскольку при этом включается диагностический режим (см. описание UART)и конфликтующие (по отдельности исправные) порты будут работать параллельно, обеспечивая совпадение считываемой информации. В реальной жизни нормальная работа конфликтующих портов невозможна. Разбираться с конфликтом адресов удобно, последовательно устанавливая порты и наблюдая за адресами, появляющимися в списке.
Если физически установлен только один порт и его не обнаруживает BIOS,причины те же, что с LPT-портом: либо он отключен при конфигурировании, либо вышел из строя. Неисправность может устраниться при вынимании/вставке платы адаптера в слот системной шины.
При работе с СОМ-портом задействуются соответствующие аппаратные прерывания —их используют при подключении модема, мыши и других устройств ввода. Неработоспособность этих устройств может быть вызвана некорректной настройкой запроса прерывания. Здесь возможны как конфликты с другими устройствами, так и несоответствие номера прерывания адресу порта.
В первом приближении СОМ-порт можно проверить диагностической программой (Checkit)без использования заглушек. Этот режим тестирования проверяет микросхему UART (внутренний диагностический режим) и вырабатывание прерываний, но не входные и выходные буферные микросхемы, которые являются более частыми источниками неприятностей. Если тест не проходит, причину следует искать
или в конфликте адресов/прерываний, или в самой микросхеме UART.
Для более достоверного тестирования рекомендуется использовать внешнюю заглушку,подключаемую к разъему СОМ-порта (рис. 2.17). В отличие от LPT-порта у СОМ-порта количество входных сигналов превышает количество выходных, что позволяет выполнить полную проверку всех цепей. Заглушка соединяет выход приемника со входом передатчика. Обязательная для всех схем заглушек перемычка RTS-CTSпозволяет работать передатчику — без нее символы не смогут передаваться. Выходной сигнал DTRобычно используют для проверки входных линий DSR, DCDи RI.

Если тест с внешней заглушкой не проходит, причину следует искать во внешних буферах, их питании или в шлейфах подключения внешних разъемов. Здесь может помочь осциллограф или вольтметр. Последовательность проверки может быть следующей:
1. Проверить наличие двуполярного питания выходных схем передатчиков (этот шаг логически первый, но поскольку он технически самый сложный, его можно отложить на крайний случай, когда появится желание заменить буферные микросхемы).
2. Проверить напряжение на выходах TD, RTSи DTR: после аппаратного сброса на выходе TD должен быть отрицательный потенциал около -12 В (по крайней мере ниже -5 В), а на выходах RTS и DTR —такой же положительный. Если этих потенциалов нет, возможна ошибка
подключения разъема к плате через шлейф. Распространенные варианты:
в шлейф не подключен;
« шлейф подключен неправильно (разъем перевернут или вставлен со смещением);
^ раскладка шлейфа не соответствует разъему платы.
Первые два варианта проверяются при внимательном осмотре, третий же может потребовать некоторых усилий. В табл. 2.1 приведены три варианта раскладки 10-проводного шлейфа разъема СОМ-порта, известных автору; для СОМ-портов на системных платах возможно существование и других. Теоретически шлейф должен поставляться в соответствии с разъемом платы, на которой расположен порт.
Если дело в ошибочной раскладке, то эти три выходных сигнала удастся обнаружить на других контактах разъемов (на входных контактах потенциал совсем небольшой). Если эти сигналы обнаружить не удалось, очевидно, вышли из строя буферные формирователи.
3. Соединив контакты линий RTSи CTS(или установив заглушку), следует попытаться вывести небольшой файл на СОМ-порт (например, командой COPYC:\AUTOEXEC. ВАТ СОМ1:). Сисправным портом эта команда успешно выполнится за несколько секунд с сообщением об успешном копировании. При этом потенциалы на выходах RTS и DTRдолжны измениться на отрицательные, а на выходе TDдолжна появиться пачка двуполярных импульсов с амплитудой более 5 В. Если потенциалы RTS и DTR не изменились, ошибка в буферных формирователях. Если на выходе RTS (и входе CTS) появился отрицательный потенциал, а команда COPYзавершается с ошибкой, скорее всего, вышел из строя приемник линии CTS (или опять-таки ошибка в шлейфе). Если команда COPYуспешно проходит, а изменения на выходе TD не обнаруживаются (их можно увидеть стрелочным вольтметром, но оценить амплитуду импульсов не удастся), виноват буферный передатчик сигналаTD.
Замена микросхем приемников и передатчиков существенно облегчается, если они установлены в «кроватки». Перед заменой следует с помощью осциллографа или вольтметра удостовериться в неисправности конкретной микросхемы. Расположение выводов микросхем приведено на рис. 2.6.
Если буферные элементы включены в состав интерфейсной БИС (что теперь весьма распространено), то такой порт ремонту не подлежит (по крайней мере в обычных условиях). Неисправный СОМ-порт, установленный на системной плате, можно попытаться отключить в BIOS SETUP,но порт мог сгореть и вместе со схемой своего отключения — тогда он останется «живым мертвецом» в карте портов ввода/вывода и прерываний. Иногда он полностью выводит из строя системную плату.
Источниками ошибок могут являться разъемыикабели. В разъемах встречаются плохие контакты, а кабели кроме возможных обрывов могут иметь плохие частотные характеристики. Частотные свойства кабелей обычно сказываются при большой длине (десятки метров) на высоких скоростях обмена (56 или 115 Кбит/с). При необходимости использования длинных кабелей на высоких скоростях сигнальные провода данных должны быть перевиты с отдельными проводами «схемной земли».
Питание от интерфейса, или Почему может не работать мышь
При подключении к СОМ-порту устройств с небольшим энергопотреблением возникает соблазн использования питания от выходных линий интерфейса. Если линии управления DTRиRTSне используются по прямому назначению, их можно задействовать как питающие с напряжением около 12 В. Ток короткого замыкания на «схемную землю» ограничен буферной микросхемой передатчика на уровне 20 мА. При инициализации порта эти линии переходят в состояние «выключено», то есть вырабатываютположительноенапряжение. ЛинияTDв покое находится в состоянии логической единицы, так что на выходе вырабатываетсяотрицательноенапряжение. Потенциалами линий можно управлять через регистры СОМ-порта (выход TD вырабатывает положительное напряжение, если установить бит BRCON).
Двуполярным питанием от линий интерфейса (+Vот DTRиRTS,-V от TD)пользуются все манипуляторы, подключаемые к СОМ-портам. Зная это, в случае неработоспособности мыши с данным портом следует проверить напряжения на соответствующих контактах разъема. Бывает, что с конкретным портом не работает только конкретная мышь (модель или экземпляр), хотя другие мыши с этим портом и эти же мыши с другими портами работают нормально. Здесь дело может быть в уровнях напряжений. Стандарт требует от порта выходного напряжения не менее 5 В (абсолютного значения), и, если данный порт обеспечивает только этот минимум, некоторым мышам не хватит мощности для питания светодиодов (главных потребителей энергии).
Порт получает двуполярное питание через системную плату от блока питания компьютера. Отсутствие на выходе блока питания напряжения +12 В обычно обнаружится по неработоспособности дисков. Отсутствие напряжения -12 В «заметят» только устройства, подключенные к СОМ-портам. Блок питания теоретически контролирует наличие этих напряжений на своем выходе (сообщая о неполадках сигналом Power Good,вызывающим аппаратный сброс). Встречаются упрощенные схемы блоков питания, у которых контролируются не все напряжения. Кроме того, возможны плохие контакты в разъеме подключения питания к системной плате.
Как проверить com-порт?
Встречаем — вот он, старый разъем — com порт, он же стандарт RS-232 (англ. Recommended Standard 232).
Был введен в 1962. Стандарт развивался и в 1969 представлена третья редакция (RS-232C). Четвертая редакция была в 1987 (RS-232D, известная также под EIA-232D).
Визуального похож на разъем VGA, только со штырьками.

В настоящее время все еще сохраняет актуальность. Зачем все еще кто-то покупает компьютеры на 478 сокете? А на материнских платах PGA 478 есть как минимум 2 com порта. Он нужен для управления работой самого разнообразного оборудования. И эмулятор на PCI тут не спасает.
А вариант на сокет 478 — достаточно дешевый и оборудованию хватает результативности старых процессов. Наличие нескольких com портов является сильным конкурентным преимуществом для старых компьютеров.
RS-232 — стандарт физического уровня для асинхронного интерфейса. Широко известен как последовательный порт персональных компьютеров. Исторически имел широкое распространение в телекоммуникационном оборудовании.
Изначально создавался для подключения телефонных модемов к компьютерам. В связи с такой специализацией имеет рудименты в виде, например, отдельной линии RING («звонок»). Постепенно телефонные модемы перешли на другие интерфейсы (USB), но разъем RS-232 имелся на всех персональных компьютерах и многие изготовители оборудования использовали его для подключения своего оборудования. Например, компьютерные мышки.
В настоящее время чаще всего используется в промышленном и узкоспециальном оборудовании, встраиваемых устройствах. RS-232 — проводной дуплексный интерфейс. Информация передаётся по проводам двоичным сигналом с двумя уровнями напряжения. Логическому «0» соответствует положительное напряжение (от +5 до +15 В для передатчика), а логической «1» — отрицательное (от −5 до −15 В для передатчика).
Первоначально в RS-232 использовались DB-25 (25 штырьков), но, поскольку многие приложения использовали лишь часть предусмотренных стандартом контактов, стало возможно применять для этих целей 9-штырьковые разъёмы DE-9, которые рекомендованы стандартом RS-574.
Номера основного контакта, передающего и принимающего данные, для разъемов DE-9 и DB-25 разные: для DE-9 контакт 2 — вход приёмника, контакт 3 — выход передатчика. Для DB-25, наоборот, контакт 2 — выход передатчика, контакт 3 — вход приёмника.
Как проверить COM — порт (DB9) компьютера.
1. проверка с помощью com – оской мышки. Такая проверка является не полной (проверяется лишь 4 сигнальные линии из 8). Подсоединяете мышь, если она работает, то частично можно скачать что com – порт рабочий.
2. проверка с помощью com – оской заглушки и программы CheckIt.
Для начала нужна тестовая заглушка. Её можно купить в магазине или сделать самому. Если будите делать сами, то Вам потребуется com – оский провод со всеми сигнальными линиями:

Запаяйте сигнальные линии, как показано на рисунке:


Т.е. находите провода под номерами 2 и 3 и запаиваете их вместе. Затем находите провода под номерами 7 и 8 и запаиваете их . Наконец находите 4 провода под номерами 1, 4, 6 и 9 и запаиваете их вместе.
Суть этой заглушки в том, что передающие сигналы соединены с соответствующими принимающими. Затем с помощью программы CheckIt подаются входные сигналы, а потом проверяются выходные. Если выходные сигналы отсутствуют, то это говорит о неисправности com – порта.
Проверку нужно проводить в dos режиме. Для этого нужно создать загрузочную дискетку с программой CheckIt:
1. Вставляете пустую дискету в дисковод.
2. Заходите в "Мой компьютер" (Windows XP), щелкаете правой кнопкой "мыши" на ярлыке Диск 3,5 (А) выбираете "форматировать". Ставите галочку на "Создание загрузочного диска MS-DOS".

3. Затем копируете в эту дискету программу CheckIt:

4. Подключите тестовую заглушку к com – порту, который хотите проверить:

5. Ставите в BIOSe загрузку с floppy дисковода. Вставляете в дисковод дискету с CheckIt.
6. Пойдет процесс загрузки. После вводите: a:\checkit.exe.
7. Появиться окошко:

8. ажимаете 2 раза enter. Выбираете вкладочку Tests -> Serial Ports и номер com – порта, куда подсоединена заглушка.

9. Подтверждаете, что у Вас подключена тестовая заглушка. После этого начнется процесс проверки.

10. Если в конце появятся ошибки, то значит com – порт неисправен:

11. Если все тесты завершены успешно, то com – порт исправен:
Проверка наличия COM порта
Как проверить подключён COM-порт или нет? Например, пользователь выбрал COM 3, но во время работы этот порт был отключён. Как грамотно выполнить проверку присутствует ли COM-порт и возможно ли его открыть?
На данный момент делаю вот так(пример):
Но уверен, что данною операцию можно реализовать грамотней.
![]()
![]()
Насколько я понимаю, порт может быть отключён в любой момент. Поэтому я бы делал так: работал с портом как обычно, а при приходе IOException говорил бы пользователю о проблемах при коммуникации с портом.
Проверять можно через
(как делаете это вы).
Но отлова исключений всё равно не избежать, т. к. порт может появиться или исчезнуть сразу после проверки.
![]()
![]()
Ваш код можно немного изменить используя метод Any(. ) . Можно создать вот такой метод, который принимает имя порта, проверяет, содержится ли это имя в списке имен последовательных портов текущего компьютера, а затем уже попытаемся открыть порт:
А затем просто вызывать этот метод, передавая туда имя интересующего вас порта.
Метод SerialPort.GetPortNames() — возвращает массив имен последовательных портов для текущего компьютера.
![]()
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.3.3.43277
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.