Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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.01 c
9-73956
FVlad
2003-04-19 16:41
2003.10.23
Математика


1-74154
stasys
2003-10-10 16:31
2003.10.23
Проблема с локализацией CLX MessageDlg.


3-73966
Caesar
2003-09-24 15:36
2003.10.23
группировка в QReport


6-74336
Beginer1
2003-08-22 10:44
2003.10.23
Запрос POST + Socket


1-74172
Raduga
2003-10-10 10:46
2003.10.23
Еще раз про метод Free





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский