Текущий архив: 2003.03.03;
Скачать: CL | DM;
ВнизСрочно!!!! Работа с СОМ-портом Найти похожие ветки
← →
Dracula2000 (2003-01-02 17:59) [0]Есть такой вот обработчик:
procedure TComReadThread.Execute;
var
SymbR: Char;
wNum: DWord;
StrR: String;
begin
while (not Terminated) do begin
SymbR:=#0;
ReadFile(hCom,SymbR,1,wNum,nil);
if SymbR=#13 then begin
MainForm.Memo1.Lines.Add(StrR);
StrR:="";
end else StrR:=trim(StrR+string(SymbR));
end;
end;
До коннекта читаем из порта прекрасно, после - ни одного символа не принимается... запарился уже, где грабли?
Тут сроки горят - ооочееень срочно надо!!!!
← →
Александр Спелицин (2003-01-02 19:07) [1]
> До коннекта читаем из порта...
Простите, а до какого коннекта?
← →
bosikov (2003-01-02 22:14) [2]Ты в корне неправильно работаешь с Сом портом.
Сначала необходимо окрыть порт.Потом считать настройки . Затем загрузить свои -Это для первого раза. А потом уже работать с ним . Прочитай внимательно МСДН там все на WinApi хорошо написано с примерами.
DCB dcb;
BOOL fSuccess;
hCom = CreateFile( NameCOMPort,
GENERIC_READ | GENERIC_WRITE,
0, // comm devices must be opened w/exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
if (hCom == INVALID_HANDLE_VALUE)
{
//printf("Could not open COMPORT.\n"); // process error
return(1);
}
// Получить текущие данные DCB
fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess)
{
//printf("Could not Get COMPORT DCB.\n"); // process error ;
return(2);
}
switch( Speed)
{
case 110:
dcb.BaudRate = CBR_110; break; // скорость обмена данными
case 300:
dcb.BaudRate = CBR_300; break;
case 600:
dcb.BaudRate = CBR_600; break;
case 1200:
dcb.BaudRate = CBR_1200; break;
case 2400:
dcb.BaudRate = CBR_2400; break;
case 4800:
dcb.BaudRate = CBR_4800; break;
case 9600:
dcb.BaudRate = CBR_9600; break;
case 14400:
dcb.BaudRate = CBR_14400; break;
case 19200:
dcb.BaudRate = CBR_19200; break;
case 38400:
dcb.BaudRate = CBR_38400; break;
case 56000:
dcb.BaudRate = CBR_56000; break;
case 57600:
dcb.BaudRate = CBR_57600; break;
case 115200:
dcb.BaudRate = CBR_115200; break;
case 128000:
dcb.BaudRate = CBR_128000; break;
case 256000:
dcb.BaudRate = CBR_256000; break;
default :
dcb.BaudRate = CBR_115200;
}
// Заполнение блока описания устройства DCB:
// бод=115,200 bps, 8 бит, не проверки на четность, и 1 stop bit.
dcb.fParity = 0;
dcb.fOutxCtsFlow = 0;
dcb.fOutxDsrFlow = 0;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = FALSE;
dcb.fTXContinueOnXoff = 0;
dcb.fOutX = 0;
dcb.fInX = 0;
dcb.fErrorChar = 0;
dcb.fNull = 0;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fAbortOnError = 0;
dcb.ByteSize = 8; // размер ,бит - байт 4-8
dcb.Parity = NOPARITY; // не проверять на четность
dcb.StopBits = ONESTOPBIT; // один стоповый бит
// настроить ComPort с новими параметрами
fSuccess = SetCommState(hCom, &dcb);
//printf("Open COMPORT TRUE\n");
// Установка парамметров TimeOut
COMMTIMEOUTS CommTimeouts;
GetCommTimeouts (hCom, &CommTimeouts);
// Измениение парамметров COMMTIMEOUTS structure settings.
CommTimeouts.ReadIntervalTimeout = 50;
CommTimeouts.ReadTotalTimeoutMultiplier = 100;
CommTimeouts.ReadTotalTimeoutConstant = 150;
CommTimeouts.WriteTotalTimeoutMultiplier = 10;
CommTimeouts.WriteTotalTimeoutConstant = 10;
return(0);
Это пример с моей программы для окрытия порта все работает как надо.
← →
Dracula2000 (2003-01-03 10:57) [3]Неужели я плохо объяснил... - Порт открываю нормально, читаю его данные, конфигурю - все как в обычном терминале... устанавливаю связь... После этого послать данные могу, а принять - НЕТ!!!
Так что, про настройки порта мне рассказывать не надо - мне лучше расскажите, почему после связи нет ПРИЕМА!!!!
← →
Ops (2003-01-03 11:24) [4]Программа на другом конце вышла ли на передачу
Проверь через терминал... Может собака то и не там зарыта
← →
Dracula2000 (2003-01-03 17:44) [5]Все... спасибо хоть за попытки помочь... разобрался сам...
Страницы: 1 вся ветка
Текущий архив: 2003.03.03;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.007 c