Форум: "Система";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
ВнизПроблема с записью информации в COM-порт под WinXP Найти похожие ветки
← →
MAPIIIAJL (2003-08-07 18:08) [0]Люди нужна ваша помощь. Осуществляю обмен с устройством в WinXP, формирую посылку длинной 16 байт, пытаюсь отправить ее в COM порт, но Функция WriteFile отказывается работать, выдает сообщение: "Протекает наложенное событие ввода/вывода". Когда вместо праметра этой функции "@ovr", ставлю "nil", возникает другая ошибка после ее выполнения "Параметр задан неверно". Не знаю что делать. Подскажите. Вот пример кода:
Запись в порт:
function WriteCom(l: Integer): boolean;
var
i: Integer;
dwCommEvent: DWORD;
lpMsgBuf:pchar;
ovr:TOVERLAPPED;
comst:TCOMSTAT;
begin
dwSize:=0;
ovr.Internal:=0;ovr.InternalHigh:=0;ovr.Offset:=0;
ovr.OffsetHigh:=0;ovr.hEvent:=0;
ovr.hEvent:=CreateEvent(nil,True,False,nil);
ks(l);//Расчет контрольной суммы
if not EscapeCommFunction(hCommPort,CLRDTR) then begin result:=False; exit; end;
hCommSetTimeOuts(50,5,100,5,1);
if not WriteFile(hCommPort,buf,l,dwSize,@ovr) then begin
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER or
FORMAT_MESSAGE_FROM_SYSTEM or
FORMAT_MESSAGE_IGNORE_INSERTS,
nil,
GetLastError(),
LANG_NEUTRAL , // Default language
@lpMsgBuf,
0,
nil);
Application.MessageBox(lpMsgBuf,"Error",MB_OK or MB_ICONINFORMATION );
result:=false; exit;
end;
if not EscapeCommFunction(hCommPort,SETDTR) then begin result:=False; exit; end;
C_Wr:=C_Wr+1;
result:= TRUE;
end;
Установка таймаутов:
procedure hCommSetTimeOuts(Rit: DWORD; Rttm: DWORD;
Rttc: DWORD; Wttm: DWORD; Wttc: DWORD);
var
t: TCOMMTIMEOUTS;
begin
GetCommTimeouts(hCommPort,t);
t.ReadIntervalTimeout:= Rit;
t.ReadTotalTimeoutMultiplier:=Rttm;
t.ReadTotalTimeoutConstant:=Rttc;
t.WriteTotalTimeoutMultiplier:=Wttm;
t.WriteTotalTimeoutConstant:=Wttc ;
if Not(SetCommTimeouts(hCommPort,t)) then SystemMessError();
end;
Аналогичная бодяга творится и с функцией ReadFile. Когда вместо WriteFile, я использую функцию TransmitCommChar (т.е. передаю всю посылку побайтно). Такая фишка работает прекрасно в 98-х виндах, но не в XP.
← →
igp (2003-08-07 18:23) [1]:D
Такая фишка работает прекрасно в 98-х виндах, но не в XP
USE DRIVER FOR COM PORT
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c