Главная страница
    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.011 c
4-74519
DVM
2003-08-19 15:06
2003.10.23
RegisterShellHookWindow Function + HSHELL_GETMINRECT вопрос


11-74109
Alexander
2002-10-11 14:22
2003.10.23
Toolbar - мысли


14-74376
Knight
2003-10-02 22:34
2003.10.23
Кто какие журналы читает?


3-74064
Buka
2003-09-30 17:28
2003.10.23
Для тех кто знаком с Astrum Install Wizard


9-73962
Dudao++
2003-02-28 03:15
2003.10.23
Delphi и Dark Basic





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский