Главная страница
    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
14-74407
kaif
2003-10-06 11:31
2003.10.23
Как копировать текст через буфер обмена?


3-73995
Cranium
2003-09-30 17:52
2003.10.23
Как воспользоваться ISC_PATH в Yffil


1-74164
zdn
2003-10-09 20:49
2003.10.23
Сервисы в Delphi


1-74250
Извращенец2
2003-10-13 07:12
2003.10.23
PReport - класс формы предварительного просмотра не найден


1-74271
senya
2003-10-13 10:42
2003.10.23
BLOB -> TImage





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