Содержание
- RS232. Взгляд изнутри
- COM порт глазами ремонтника. Ремонт, настройка, диагностика. Часть 2, диагностика на компьютере.
- USB Serial Port Driver WINDOWS 10 X64 & X86 All Problem Solved
- Терминальные программы
- Порт 1 серия смотреть онлайн
- 113 thoughts on “Терминальные программы”

Фактически повсевременно приходится глядеть что шлет контроллер либо заслать в него какой нибудь байтик. Это необходимо для отладки, время от времени для опции. Иногда для управления. Кому как, я так для отладки использую.
Без толкового инструмента здесь никак, потому я издавна уже присмотрел для себя парочку прикольных программок.
RS232. Взгляд изнутри
Поочередный порт (дальше ПП) удачный инструмент для общения меж различными периферийными устройствами (как собранные без помощи других на базе какого-либо МК, так и заводские: принтеры, осциллографы и т.д.) с одной стороны, и ПК с другой. На сегодня более пользующиеся популярностью из всех ПП являются RS232 эталон (переводится как «Recommended Standard») за его простоту и USB эталон («Universal Serial BUS») за его резвость.
USB безусловно вещь нужная, но жудко накрученная. Так как многим самодельным устройствам бешенный обмен данными с ПК неособо нужон, тогда на помощи приходит обычной, надежный и опытный RS232 Интерфейс.
По RS232 эталону устройства участвующие в обмене данными бывают 2-ух типов:
Data Terminal Equipment (DTE) (устройство отдающее команды — ведущий) и
Data Circuit-Terminating Equipment (DCE) (периферия, обслуживающая владельца — ведомый). Часто, некие периферийные устройства ведут себя как DTE (к примеру осциллографы, либо наши с вами аксессуары).
Типы соединения
Модемное соединение — подрозумеваеи наличие некоторой иерархии, тоесть в случае когда в обмене данными участвуют больше чем два устройства им нужен некоторый судья (модем), разрешающий в определенный момент времени отсылать данные только одному устройству (в то время как читать могут хоть все другие). Модемом может быть что угодно: отдельный аксессуар, либо один из участников обмена данными, главное недопустить утраты данных.
В случае когда устройств только два, либо есть очевидный ведущий которого слушаются все другие, никакого посредника им не надо, а это значит что к их общению больше никто не подключится, и никакого судьи в лице модема им не нужно ( в отличие от предшествующего типа соединения, когда к одному принтеру можно подключить штук 10 ПК ). Опять-же главное недопустить одновременной отправки данных — в определенный момент времени, общатся может только одна пара устройств. Такое соединение именуется нуль-модемное соединение:
Типы передач данных
Малое количество проводков нужное для обмена данными равно двум (этокий скупой изврат), если передача является однобокой ([Tx, GND]). В случае когда нужно настоящее — обоестороннее общение число проводков возростает аж до 3-х ([Rx, Tx, GND]). Большая часть устройств перифирии поддерживают одновременную передачу и прием данных — full-duplex, но если один из собеседников на такое не способен, обмен перебегает в разряд плохих — half-duplex (пока один не окончил передачу/прием другой пляшит под его дудку).
Распиновка COM разъёма
В столбце Signal Name, DATA Terminal можно поменять на ПК (другими словами Data Terminal Ready соответствует ПК готов к работе), а DATA Set на Периферия.
Как надо из предыдущей таблицы, все пины делятся на управляющие (control pins) и транспортные (Data pins). Каждый пин в определенный момент времени может находьтся исключительно в одном из двух состояний: активном (on) или неактивном (off). Чтобы не запутатся, и както защитить данные от помех, разработчики решили что во время передачи данных они были сначало усилены (+5В –> +12В, 0В –> -12В ) а потом инвертированы, в то время как c управляющими сигналами они долго не парились и просто их усилели (тоесть положительное стало еще положительней а отрицательное — отрицательнее, относительно общего провода).
Назначение управляющих пинов ([RTS, CTS], [DTR, DSR] и [CD, RI]) сводится к следующему:
• Отслеживать состояние собеседника
• Отслеживать поток данных
Пара [RTS, CTS] — используется для обозначения готовности данной пары устройств к передачи/приему соответственно.
1. DTE устройство устанавливает RTS = on, сигнализируя о том что оно готово к приему данных. Если устройство получило достаточное количество данных то устанавливаем RTS =off.
2. DCE устройство устанавливает CTS =on, сигнализируя о том что оно готово к приему данных. Если устройство получило достаточное количество данных то устанавливаем CTS =off.
Кто каким пином будет управлять (тоесть кому быть DTE а кому DCE) решать вам. Соответственно программы управления этими устройствами должны выставить RTS(выход)/CTS (вход), или наоборот, иначе могут быть глюки.
Пара [DTR, DSR] — большинство устройств используют эти пины для сигнализирования что они подключены и готовы к работе.
1. DTE устройство устанавливает DTR=on, сообщая DCE устройству что оно готово к работе. Соответственно когда DTE устанавливает DTR=off, то оно больше не желает (или не может) общатся (положила трубку 🙂 )
2. DCE устройство устанавливает DSR=on, сообщая что оно подключено, а когда DSR=off – оно отключено.
Такой метод контроля потока данных называется – hardware handshaking (чтото вроде аппаратное управление). Пары [DTR, DSR] и [RTS, CTS] могут быть с легкостью взаимо-заменены без всякого ущерба.
Пара [CD, RI] – используется для обозначения (в тот самом случае когда один принтер на отару кампов) что на этот момент линии передачи данных кем-то заняты.
Обычно этой парой управляет модем, но не обязательно.
• St – Стартовый Бит (начало передачи данных) – логический ноль
• 0..8 – позиция бита (данных) в пакете (позиция «0» – LSB)
• P – бит парности (проверка успешной передачи данных)
• Sp1,Sp2 – стоп биты (завершают передачу пакета) – логическая единица
• [] – в скобках обозначены биты которые могут отсутствовать
(биты данных с 5 по 8 так или иначе будут переданы, но не рассмотрены — мусор)
• IDLE – ожидание (логическая единица)
Как я уже говорил, во время передачи — данные инвертируются, так что если будете проверять осциллографом как отсылается пакет — не пугайтесь.
Часто формат пакета обозначается следующим образом: 8-N-1 (8 бит данных, без бита проверки, один стоп бит) или 5-E-2 (5 бит данных (3 бита мусора), с проверкой на четность, два стоп бита).
Поскольку MAX232 поддерживает аппаратное управление COM портом, и если с разводкой данной схемы проблем нет, почемуб и не использовать эту возможность, вдруг когда пригодится (не пропадать же добру). В противном случае, возможно обойтись без аппаратного управления, как зачастую и происходит.
Софт
UPD: заменил вывод cout на printf, и убрал флаги RxClear и TxClear
ПП на самом деле является фаилом из которого ведется чтение/запись, поэтому основные операции которые применяются над ПП можно группировать следующим способом:
Также много интересного можно узнать на следующих сайтах: Programming Serial Connections , Serial programming in win32 OS
#include /* В данной библиотеке находится описяние ПП */ #include #include using namespace std; //----------------------- HANDLE hPort; /* обиект управляющий ПП */ DWORD dwMask; /* переменная в какой хронится информация об прерывании по которому сработал ПП */ static char ReadBuff; /* переменная хронящая прочитаный символ * / static DWORD rBytes,tBytes; /* переменные хронящие число прочитанных/отправленных байтов */ char name[5]; /* хронит имя ПП - пример: COM3 */ //----------------------- // закрыть COM порт //----------------------- void CloseComPort(HANDLE& port) < PurgeComm(port, PURGE_RXABORT | PURGE_TXABORT | PURGE_RXCLEAR | PURGE_TXCLEAR); if(port != INVALID_HANDLE_VALUE) // if comm port is not closed CloseHandle(port); else //--- printf("Communication is closed with errors\n"); port = INVALID_HANDLE_VALUE; >//----------------------- // определить формат пакета //----------------------- bool ComPortSettings(unsigned baud) < DCB PortDCB; PortDCB.DCBlength = sizeof (DCB); // Get the default port setting information. GetCommState (hPort, &PortDCB); // Change the DCB structure settings. //----------------------- PortDCB.BaudRate = baud; // Current baud PortDCB.fBinary = TRUE; // Binary mode PortDCB.ByteSize = 8; // Number of bits/byte, 4-8 PortDCB.Parity = NOPARITY; // 0-4 = no,odd,even,mark,space PortDCB.StopBits = ONESTOPBIT; // 0,1,2 = 1, 1.5, 2 //----------------------- if (!SetCommState (hPort, &PortDCB)) < CloseComPort(hPort); printf("Unable to configure the serial port\n"); return false; >else return true; > //----------------------- // определить временные задержки //----------------------- bool ComPortTimeouts(void) < COMMTIMEOUTS CommTimeouts; //--- GetCommTimeouts (hPort, &CommTimeouts); CommTimeouts.ReadIntervalTimeout = MAXDWORD; // aproximativelly 50 days CommTimeouts.ReadTotalTimeoutMultiplier = 0; CommTimeouts.ReadTotalTimeoutConstant = 0; CommTimeouts.WriteTotalTimeoutMultiplier = 0; CommTimeouts.WriteTotalTimeoutConstant = 0; //--- if (!SetCommTimeouts (hPort, &CommTimeouts)) < CloseComPort(hPort); printf("Unable to set the timeout parameters\n"); return false; >else return true; > //----------------------- // открыть COM порт //----------------------- bool OpenComPort(const char* name,unsigned baud)/--- Open Communication Port --- hPort=CreateFile(name,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL); if (hPort != INVALID_HANDLE_VALUE) // if comm port is opened if( ComPortSettings(baud) && // setting DCB structure ComPortTimeouts() && // setting commtimouts structure SetCommMask(hPort, EV_RXCHAR) // init RX event ) // execute comm port settings < printf("Comm Port will be opened successfully\n"); return true; > // error settings printf("COMM PORT небыл инициализирован или он не существует\n"); return false; > //----------------------- // отправить байт //----------------------- void SendByte(const char& send) < printf("Write: "); if(WriteFile(hPort,&send,1,&tBytes,NULL)) printf("%c\n",send); /* В функции WriteFile: &send - адресс переменной где хронятся данные преднозначенные для отправки цифра "1" - количество байт которых нужно отослать &tBytes - адресс переменной где хронится информация об количестве отправленных байт (в случае успешной отправки) */ else < printf("error\n"); PurgeComm(hPort, PURGE_TXABORT ); /* очистить ПП от ошибок */ >> //----------------------- // принять байт //----------------------- void ReceiveByte(char& byte) < printf("Read: "); // SetCommMask(hPort, EV_RXCHAR); // init RX event, перебросил в OpenComPort while(!WaitCommEvent (hPort, &dwMask, 0)); if(ReadFile(hPort,&byte, 1,&rBytes, NULL)) printf("%c\n",byte); /* В функции ReadFile: &byte - адресс переменной куда нужно записать прочитанные данные цифра "1" - количество байт которых нужно прочитать &rBytes - адресс переменной где хронится информация об количестве прочитанных байт (в случае успешного приема) */ else < printf("error\n"); PurgeComm(hPort, PURGE_RXABORT ); /* очистить ПП от ошибок */ >>
Запихните предыдущий код в хидэр фаил, например с именем COM_INIT.h и можно использовать ПП.
#include #include "COM_INIT.h" int main(int argc, char *argv[]) < printf("COM port: "); gets(name); /* имя COM порта с COM1 до COM9 */ //----------------------- if(OpenComPort(name,CBR_9600)) /* открыть COM порт */ < ReceiveByte(ReadBuff); /* принять данные */ SendByte('H'); /* послать данные */ CloseComPort(hPort); /* закрыть COM порт */ >else printf("communication error\n"); //----------------------- system("pause"); return EXIT_SUCCESS; >
Надеюсь эти скромные знания кому-то помогут. Если есть вопросы попытаюсь ответить.
COM порт глазами ремонтника. Ремонт, настройка, диагностика. Часть 2, диагностика на компьютере.
Рассматриваем вопросы диагностики COM порта со стороны компьютера.
Начнем с самого простого, найдем на компьютере COM порт визуально.
Рис. 1. Пример расположения COM порта на задней планке материнской платы.
Однако на привычном месте может не оказаться разъема COM порта, это не беда. Заходим в диспетчер устройств, и смотрим в нем наличие COM порта.
Рис.2 Проверяем наличие COM порта на компьютере с помощью диспетчера устройств.
В данном примере всего один COM порт, по сути их может быть два или вообще не быть. Данный факт не является дефектом, просто стандарт на обязательное присутствие COM порта был отменен в далеком 1999г. Однако это повод задуматься при выборе материнской платы для нового компьютера — если Вы собираетесь активно эксплуатировать COM порт, то желательно остановить свой выбор на материнской плате в какой есть хотя бы один COM порт. Отсутствие COM порта на компьютере не является серьезной проблемой.
На рынке достаточно устройств с помощью которых, эту проблему можно решить, но об этом чуть попозже.
Итак COM порт обнаружен программно, а физически его не видно, он расположен на материнской плате и для его физической реализации нужна планка (посмотреть), которую придется либо сделать самостоятельно, либо купить в магазине.


Рис. 3 Вид разъемов COM порта для реализации под планку. На фото, материнская плата с двумя COM портами.
После подключения планки COM порта остается только проверить работоспособность COM порта.
С планками все не так просто, по сути планок существует два типа. Оба имеют место быть, но предназанечены для работы на разных материнских платах.
Рис. 4 Внешний планок для работы на разных материнских платах.
Планки не взаимонезаменяемые, в большинстве случаев встречался вариант I.
| Рис. 5 Вариант I распайки кабеля планки COM порта | Рис.6 Вариант II распайки кабеля планки COM порта |
Нет связи компьютера с подключаемым устройством.
Для большинства современных устройств требуется только три провода для нормальной работы. Это RxD, TxD и земля. На разъемах DE9 и DB25 RxD, TxD всегда находятся на 2 и 3 контакте. Но если для компьютера все однозначно, на DE9 2-RxD 3-TxD, то для устройств подключаемых к компьютеру такой однозначности нет, но обычно это все те же контакты 2 и 3. А вот что однозначно, так это тот факт, что RxD компьютера должен прийти на TxD устройства и наоборот RxD устройства должен соединиться с с TxD компьютера.
В принципе если перепутать контакты и подать неправильно сигналы — то ничего страшного не произойдет, COM порты не сгорят, просто устройство не будет общаться с компьютером.
Следует учесть тот фактор, что даже правильное соединение не гарантирует работоспособность связи. Причин может быть много, неправильно установлена скорость, несоблюдение протокола, неисправен COM порт и т.п.

Что бы исключить лишние факторы удостоверимся, что COM порт на компьютере рабочий.
Самое простое, это использовать программу Сommtest (скачать) и заглушку для проверки.
Одним из эффективных способов проверки — отправить данные в порт и самому же порту получить их обратно. Если данные вернулись в полном объеме — то порт можно считать исправным

Рис.7 Заглушка для проверки COM порта, сигналов Rx-Tx.
Заглушка представляет собой разъем DE9F, у которого контакты 2 и 3 соединены перемычкой. Суть теста состоит в том, что все отправленные данные должны вернутся обратно. При такой проверке не важно на какой скорости проходит тестирование, данные все равно будут приниматься на такой же скорости. Несомотря на то, что такой способ имеет серьезный недостаток — проверяется только канал Rx-Tx, все таки есть и плюсы.
Такой заглушкой можно лекго определить номер COM порта не разбирая системный блок, в случае если таких портов несколько.
Рассмотрим, как это делается.
Запускаем программу Сommtest (скачать)
Рис. 8 Рабочее окно программы Commtest
Рис. 9 Настройка программы Commtest
USB Serial Port Driver WINDOWS 10 X64 & X86 All Problem Solved
- Выбираем COM порт.
- Нажимаем клавишу Open для активизации клавиши Put.
- Выбираем байт для отправки. Желательно отправлять цифры, в нашем примере байт для отправки цифра «5» (Byte 53DEC или 35 HEX) во всех кодовых таблицах цифры читаются однозначно. Буквы и управляющие символы отправлять нежелательно.
- Выбираем количество байт для отправки. В нашем примере 1000, что означает, что при нажатии клавишу Put в порт будет отправлено 1000 байт, в нашем случае 1000 штук цифер «5».
Рис. 10 Программа Commtest готова к использованию.
| Рис. 11 Программа Commtest обнаружила технологическую перемычку на COM порту. | Рис. 12 Программа Commtest не обнаружила технологическую перемычку на COM порту. Порт COM1 неисправен, либо заглушка установлена на другом порту |
Если COM портов несколько, то необходимо перебрать все COM порты которые присутствуют в диспетчере устройств, есть вероятность, что при открытии другого порта — связь появится. Таким макаром Вы получаете номер порта на который установлена заглушка.
| Внимание! Данная проверка проверяет только канал Rx-Tx и не является 100% гарантией того, что порт исправен, однако хотелось бы обратить внимание что 90% устройств работают именно только по этим проводам. |
| Внимание! Проверка на другом компьютере связь есть, проверка на проверяемом компьютере связи нет. Не является гарантией того, что COM порт неисправен. Пример кабель от ККМ Fprint-03К |
Комплексная проверка COM порта на стороне компьютера.
Принцип такой проверки очень похож на рассмотренную выше проверку по каналу Rx-Tx, суть та же, с передатчика сигнал должен прийти в приемник, если сигнал прошел, то можно считать, что пара исправна. Из оставшихся 7 контактов,1 контакт это земля его мы не проверяем.
Остается 6 контактов, из них два передатчики (DTR, RTS) и четыре приемники (DCD, DSR, CTS, RI). Правило тут простое — передатчик должен прийти на приемник, логично предположить, что на один передатчик следует нагрузить по два приемника. Хотя можно и на один передатчик повесить три приемника, а на второй предатчик посадить только один приемник, как делать дело Ваше . Самое удобное, в плане изготовления это 4->1,9 и 7->6,8 проводов получается по минимуму.
![]() |
![]() |
| Рис. 13 Технологическая заглушка для проверки COM порта, вид со стороны контактов. | Рис. 14 Технологическая заглушка для проверки COM порта, вид со стороны пайки. |
На рисунке для удобства синим цветом выделены передатчики.
Все в той же программе CommTest, но уже в другой части окна взводим флажок передатчика DTR и(или) RTS и смотрим, как изменяются соответствующие флажки приемника.
При изменении флажка DTR — должны взвестись флажки DCD и Ring, при сбросе флажка DTR – должны сбросится флажки DCD и Ring.
| Рис. 15 Флажок DTR сброшен | Рис. 16 Флажок DTR взведен, в примере не глядя на перемычку флажок Ring не взвелся, можно судить о не исправности приемника Ring |
При изменении флажка RTS — должны взвестись флажки DSR и CTS, при сбросе флажка RTS – должны сбросится флажки DSR и CTS.
| Рис. 17 Флажок DSR сброшен | Рис. 18 Флажок DSR взведен |
| Рис. 19 Флажок DSR и DTR взведен |
Как проверить передатчик – приемник Tx-Rx рассмотрено немного ранее.
Если данные события происходят можно считать, что COM порт стандарта RS232 со стороны компьютера полностью исправен.
Терминальные программы
Практически постоянно приходится смотреть что шлет контроллер или заслать в него какой нибудь байтик. Это нужно для отладки, иногда для настройки. Порой для управления. Кому как, я так для отладки использую.
Без толкового инструмента тут никак, поэтому я давно уже присмотрел себе парочку прикольных программок.
Первой хотел бы упомянуть Terminal v1.9b by Bray. На мой взгляд — гениальная программа! Более удобного интерфейса для работы я не встречал. Судите сами — все под рукой!
Для настроек скорости работы, номера порта, параметров передачи и прочих сиюминутных потребностей не нужно даже по менюшкам лазать — все прям сразу. Также можно в один тык выдать инфу в разных системах счисления, что порой бывает очень удобно. Я бы сказал жизненно необходимо.
В один клик доступна таблица ASCII, а среди особых фишек которую я очень люблю — возможность выдать поток данных в виде графика от 0 до 255.
А еще можно писать скрипты на паскалеподобном языке, делающие с входящими-исходящими данными всякие непотребности.
В общем, рулез!
Из минусов можно только отметить некоторую тормознутость при выводе в Hex кодах, но это мелочи. Еще автор похоже забил на эту разработку, так что новых версий я не видел уже много лет. Найти эту дивную программу можно много где, в том числе и у меня:
Порт 1 серия смотреть онлайн
Вторая программа это COM Port Toolkit от Михаила Голикова. Ей я пользуюсь гораздо реже, но она умеет весьма нужную штуку — возможность перехватывать обмен данными между софтом и физическим COM портом. Это чертовски выручило меня когда я ломал защиту PLC, также помогло отреверсить обмен между программой настройки модулей HM-TR433. В общем, редко, но метко.
Программка эта довольно проста в обращении, имеет три режима работы:
- Терминал
Может выдавать логи обмена данных улетевших к нами от нас. Слать из файла. Обрабатывать пересылаемое макросами (что может быть очень крутым подспорьем, но мне пока не пригождалось). Терминал как терминал, ничего такого особенного. - Прослушка
Это фишка уже поинтересней. Позволяет воткнуть комп в разрез между принимающим и передающим девайсом и прослушать передачу данных кто кому и что передал. Также ведутся логи с указанием времени передачи посылки. - Захват
Вот за эту фичу я и люблю эту программу — возможность снифферить обмен между софтом и портом. Редкая фича. Из бесплатных программ я нигде такого не встречал, а у программ вроде Advanced Serial Port Monitor или Free Serial Port Monitor эта фича доступна исключительно в платной версии, тут же ее можно заюзать даже в демо версии.
Также можно писать скрипты сейчас уже на Си подобном языке. Мне это больше нравится, т.к. я его лучше знаю.
Недостатков пожалуй три:
- Невозможность разделить в режиме «Захват» входящие и исходящие данные на два разных окна.
- Отстуствие русской документации, хотя бы по тому же скриптописанию.
- Шароварность. Впрочем, я бы не назвал это недостатком. Автор, я думаю, не святым духом питается.
Демка проработала 30 дней, потом захотела денег. Но свою работу по облегчению разбора протокола обмена PLC она выполнила.
Поначалу была мысль вспомнить шальное детство, сдуть пыль с родимого SoftICE и похачить защиту, но потом вспомнил что шашек такой формы не брал в руки уже лет 5, как минимум. Ну и цена программы оказалась смешной — всего 10 баксов для русскоязычных пользователей.
Так что проще было ее зарегистрировать. Тем паче штука нужная и уже неоднократно себя окупившая.
Спасибо. Вы потрясающие! Всего в месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics. Были даже переводы на 25000+ и просто поток платежей на 251 рубль.
Это невероятно круто. Сейчас идет заключение договора и подготовка к строительству!
А я встрял на три года, как минимум, ежемесячной пахоты над статьями :)))))))))))) Спасибо вам за такой мощный пинок.
113 thoughts on “Терминальные программы”
siemensfn1 :
Ну что,опять я первый)
Мне к сожалению эта информация пока ни о чём не говорит 🙁
И офигительная по простоте, кросплатформенная и с исходным кодом на Qt: Qt_comport
http://www.qt-apps.org/content/show.php/QT_comport?content=95246 Позволяет выбирать базовые настройки порта, вывод/посыл в ASCII, hex, двоичной системе, ну и пишет количество принятых/отправленных байт.
Не скатерть-самобранка, конечно, но модифицируй-нехочу.
Ай, спасибо, дружище. Изучаю qt, как раз хотел что-нить с компортом найти
tempfolder :
Для меня многим(не только лишь хакерам 😉 более удобна утилита PuTTY.
С Terminal v1.9b by Bray тоже работал, но на больших скоростях шибко комп напрягает.
А PuTTY довольно универсальна не только лишь для СОМ да и для сетевых протоколов.
Самое главное нет проблем с отображением кириллицы, + шибко шустрая, + проект Open Source. Так что достойная альтернатива.
Похожие статьи
-
В качестве соединительного кабеля из-за отсутствия необходимости использования всех контактов обычно берется витая пара, отдельные провода которой…
-
Адреса по дефлоту для COM портов: COM1=3f8h, COM2=2f8h, COM3=3e8h, COM4=2e8h. COM1 занимает адресное простанство от 3f8h до 3ffh RS-232 -…
-
Также RS-232 нередко именуют поочередным портом либо COM-портом. Разумеется, что на компьютерах он употребляется сначала для подключения другого…

