Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.26;
Скачать: CL | DM;

Вниз

Программирование Com-порта под WinNT   Найти похожие ветки 

 
AngelOfDarkness ©   (2004-08-16 17:34) [0]

Доброго времени суток. Проблема такая. Написал прогу (не без помощи этого сайта) по передаче данных в com-порт. Вот листинг модуля

unit PortUnit;
interface
uses Windows, SysUtils;
var
 KolByte:DWord;
 ComHandle:THandle;
 DCB : TDCB;
function InitCPort(PortName:PChar):boolean;
procedure KillCPort;
function WriteCPort(SendStr:string):boolean;

implementation
function InitCPort(PortName:PChar):boolean;
var
res:boolean;
begin
 res:=true;
 ComHandle:=CreateFile(PortName,
                       GENERIC_READ or GENERIC_WRITE,
                       0,
                       nil,
                       OPEN_EXISTING,
                       FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,
                       0);
 if ComHandle=INVALID_HANDLE_VALUE then res:=false;
 if res then begin
 SetCommMask(ComHandle,EV_RXFLAG);
 GetCommState(ComHandle,DCB);
 DCB.BaudRate:=CBR_9600;
 DCB.Parity:=NOPARITY;
 DCB.ByteSize:=8;
 DCB.StopBits:=OneStopBit;
 DCB.EvtChar:=chr(13);
 SetCommState(ComHandle,DCB);
 PurgeComm(ComHandle,PURGE_TXCLEAR or PURGE_RXCLEAR);
 end;
 InitCPort:=res;
end;

procedure KillCPort;
begin
 CloseHandle(ComHandle);
end;

function WriteCPort(SendStr:string):boolean;
var
 SendByte:array[0..255] of char;
 KolByteW:DWord;
 res:boolean;
begin
 KolByte:=1;
 SendByte[0]:=chr(StrToInt(SendStr));
 WriteFile(ComHandle,SendByte,KolByte,KolByteW,nil);
 if KolByte=KolByteW then res:=true
                     else res:=false;
 WriteCPort:=res;
end;

end.


Под операционкой Win98 все работает, т.е. осциллограф, присоединенный ко 2 и 5 ногам порта подает признаки жизни :)
А вот с W2k начитаются проблемы. В функции WriteCPort значения переменных KolByte и KolByteW не совпадают.
Если кто сможет объяснить в чем дело, буду очень признателен.


 
jack128 ©   (2004-08-16 17:42) [1]

Если чесно мне странно, почему это в Win9x работает.. Учитывая
> CreateFile(PortName,
>                        GENERIC_READ or GENERIC_WRITE,
>                        0,
>                        nil,
>                        OPEN_EXISTING,
>                        FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,
>                        0)

и


> WriteFile(ComHandle,SendByte,KolByte,KolByteW,nil);


 
jack128 ©   (2004-08-16 17:47) [2]

простейший путь для тебя убрать флаг FILE_FLAG_OVERLAPPED
и еще написать Win32Check(WriteFile(ComHandle,SendByte,KolByte,KolByteW,nil));


 
AngelOfDarkness ©   (2004-08-16 18:47) [3]

Огромное спасибо. Все заработало после удаления флага FILE_FLAG_OVERLAPPED. Просто я все делал по примеру со страницы http://www.delphimaster.ru/articles/comport2/index.html#PageTop, а там именно так написано.


 
jack128 ©   (2004-08-16 23:23) [4]

вот только заливать не надо, а?
Сopy - Paste из статьи
KolByte:=1;
Transmit[0]:=chr(A);
WriteFile(CommHandle,Transmit,KolByte,KolByte,@Ovr);



Страницы: 1 вся ветка

Текущий архив: 2004.09.26;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.033 c
1-1094581005
XAdmin
2004-09-07 22:16
2004.09.26
Использование ZipTV


14-1094740724
ssnvit
2004-09-09 18:38
2004.09.26
Программа не дает в Windows98 переключить раскладку клавиатуры


1-1095069384
Mishel
2004-09-13 13:56
2004.09.26
Clipboard: ограничения по размеру


14-1094640803
Димитрий
2004-09-08 14:53
2004.09.26
Библиотеки компонентов параллельного программирования


6-1090364380
MIGUR
2004-07-21 02:59
2004.09.26
ЧЕКЕР





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