|
Управление СОМ портом под Windows, Как управлять RTS/DTR со стороны |
|
|
|
 |
Ответов
(1 - 8)
|
Nov 19 2012, 20:01
|
Местный
  
Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753

|
Цитата(paskal @ Nov 19 2012, 22:48)  Функция EscapeCommFunction. Парамерты CLRDTR, CLRRTS итд Раздел для начинающих, так что.... Можно в порядке оказания шефской помощи попросить исходник и ехе? Например один - хардкодед ставит DTR у COM7, а другой - очищает DTR у COM7. А я после проверки доработаю - научусь компилировать и добавлю обработку ошибок и параметры командной строки. Я на Винде вообще ничего не делаю.  Что-то навроде этого? : Код #include <???> #include <string.h>
int main(int argc, char *argv[]) { HANDLE handlePort = CreateFile(argv[1], GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (!handlePort) return error("Ooops!");
EscapeCommFunction(handlePort, !strcmp(argv[2], "On") ? SETDTR : CLRDTR);
CloseHandle(handlePort); return 0; }
Сообщение отредактировал igorle - Nov 19 2012, 20:25
|
|
|
|
|
Nov 19 2012, 21:25
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Ваша программа выполнится и закроет порт - параметры возврятятся в тот состояние, что система делает для неоткрытых программами портов. Ловите программу и исходники. Код if (!handlePort) return error("Ooops!"); Советую почитать документацию на функции, которые используете. hint: CreateFile возвращает не NULL в случае неудавшейся попытки открыть порт.
Сообщение отредактировал Genadi Zawidowski - Nov 19 2012, 21:27
|
|
|
|
|
Nov 20 2012, 00:56
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Не знаю... какой-нибудь режим loopback есть? В классическом 16550 он был, win32 api делался под его возможности (похоже)... Снизить скорость до минимума. Тут есть ещё интереснее проблема, проявляющаяся вот в таком сценарии:
0) по линии RXD идёт какая-то передача. 1) открываю порт (он настраивается на скорость и формат, которые в панели управления по умолчанию стоят). 2) порт срабатывает по frame error. 3) пытаюсь установить режим с игнорированием ошибок fAbortOnError=TRUE (или любое другое обращение, скорость поменять) и обламываюсь с ошибкой. 4) если считать что за ошибка и успеть перепрограммировать на нужный формат/скорость, frame error тоже имеет право появиться при непрерывной передаче.
Кто знает, как обойтись в этом сценарии без "успеть" в четвёртом пункте? upd: посмотрел - режима loopback нет. Вот успел всё забыть... Можете очищать буфер приёма. Но, в Вашем случае, Ксения, может не помочь, если purge делается не на самом низком уровне - хотя это всёможно посмотреть, заглянув в исходники в DDK (там serial device есть целиком).
Сообщение отредактировал Genadi Zawidowski - Nov 20 2012, 08:29
|
|
|
|
|
Nov 20 2012, 18:52
|
Местный
  
Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753

|
2 Genadi Zawidowski Спасибо большое. Проверил программу. Она работает замечательно. Единственная моя проблемма - она не работает одновременно с терминальной программой. Судя по всему putty не согласен шэрить порт  Боюсь что это нерешаемая задача под Виндоус
|
|
|
|
|
Nov 20 2012, 21:38
|
Местный
  
Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753

|
Я нашел решение. Пока все работает. Есть такая терминальная программа RealtermПозволяет управлять DTR прямо из окна. Декларируют что поддерживают скрипты. Кстати, не сочтите за наглость, но покажу устройство о котором речь
Может для вас это и смешно, но мне как любителю жутко нравится. Опять-таки - сам сваял
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|