Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Вниз

Требуется нормальная стаюильная работа с COM портом под NT.   Найти похожие ветки 

 
Dima_Delphi ©   (2004-07-16 18:56) [0]

Требуется нормальная стаюильная работа с COM портом под NT.
Кто может помочь, в общем работу знаю, но стабильности так и не добился, по порту связь с Пик контролером.
Если кто работал подскажите.
Аконечно самый ценный материал это исходники!!!!!!!!!!!!!


 
Reindeer Moss Eater ©   (2004-07-16 18:57) [1]

CreateFile
ReadFile
WriteFile

Исходники - в PlatFormSDK


 
y-soft ©   (2004-07-16 22:05) [2]

>Dima_Delphi ©   (16.07.04 18:56)  

Что Вы понимаете под "стабильностью"?

Если работу в реальном времени, то средствами WinAPI ничего не получится


 
GanibalLector ©   (2004-07-16 22:11) [3]

>конечно самый ценный материал это исходники

function LStr(const Source:Ansistring;Count:Integer):Ansistring;
begin
 Result:=Copy(Source,1,Count);
end;

function OpenComm(Mode:AnsiString):THandle;
var
 DCB : TDCB;
 TOut: TCommTimeouts;
 I:Integer;
 Bfr:AnsiString;
begin
 Bfr:=Mode;
 UniqueString(Bfr);
 I:=Pos(":",Bfr)-1;
 if I<=0 then I:=4;
 Result := CreateFile(PChar(LStr(Bfr,I)),GENERIC_READ or GENERIC_WRITE,
        0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

 GetCommState( Result, DCB) ;
 BuildCommDCB(PChar(Bfr),DCB);
 DCB.EvtChar := #13;
 SetCommState( Result, DCB) ;
 //
 TOut.ReadIntervalTimeout         := MAXDWORD;
 TOut.ReadTotalTimeoutMultiplier  := 0;
 TOut.ReadTotalTimeoutConstant    := 0;
 TOut.WriteTotalTimeoutMultiplier := 0;
 TOut.WriteTotalTimeoutConstant   := 0;
 SetCommTimeOuts( Result, TOut);
   SetCommMask(Result,EV_RLSD OR EV_RXFLAG);
   PurgeComm(Result,PURGE_TXCLEAR);      //clear transmit buffer
   PurgeComm(Result,PURGE_RXCLEAR);      //clear receive buffer
end;

function ReadComm(Handle:THandle; var Bfr:AnsiString):Integer;
var
 I,J:DWord;
begin
 Result:=0;
 J:=Length(Bfr);
 repeat
   ReadFile(Handle, Bfr[Result+1], J-DWord(Result), I, nil);
   Inc(Result,Integer(I));
  if DWord(Result)=J then break;
 until I=0;
end;

function WriteComm(Handle:THandle; const Bfr:AnsiString):Integer;
var
 I,J:DWord;
begin
 Result:=0;
 J:=Length(Bfr);
 repeat
   WriteFile(Handle, Bfr[Result+1], J-DWord(Result), I, nil);
   Inc(Result,Integer(I));
   if DWord(Result)=J then break;
 until I=0;
end;

function CloseComm(Handle:THandle):boolean;
begin
CloseHandle(Handle);
result:=true;
end;

function SetRxTime(Handle:THandle; const TimeC,TimeM:Integer):Boolean;
var
 TOut:TCommTimeouts;
begin
 if (TimeC=0) AND (TimeM=0) then
   TOut.ReadIntervalTimeout       := MAXDWORD
 else TOut.ReadIntervalTimeout    := 0;
 TOut.ReadTotalTimeoutMultiplier  := TimeM;
 TOut.ReadTotalTimeoutConstant    := TimeC;
 TOut.WriteTotalTimeoutMultiplier := 0;
 TOut.WriteTotalTimeoutConstant   := 0;
 Result:=SetCommTimeOuts(Handle, TOut);
end;

ну,а дальше пример как работать:
...
Handle:=OpenComm("COM"+co+":BAUD="+baud+" PARITY=N DATA=8 STOP=1");
 if Handle=INVALID_HANDLE_VALUE then begin result:=false;exit;end;
 if GetFileType(Handle)<>FILE_TYPE_CHAR then begin result:=false;exit;end;
 setrxtime(handle,100,25);   //100,25

setlength(st,1);
   if readcomm(Handle,st)=1 then begin
   if st<>chr($0d) then  str:=str+st else begin
                                       writecomm(Handle,chr($0d));
                                       setlength(st,1);
                                       if readcomm(Handle,st)<>1 then
                                       begin closecomm(Handle);result:=false;exit;end;
                                                                 end;
...



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

Форум: "WinAPI";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.036 c
3-1091942734
jjjjjj
2004-08-08 09:25
2004.08.29
Как сделать одно поле DBF-файла уникальным


14-1092229871
Дмитрий12
2004-08-11 17:11
2004.08.29
как запустить компонент панели управления


6-1088354563
rolex
2004-06-27 20:42
2004.08.29
При отправке e-mail (TidSMTP) программа "подвисает".


14-1092121148
Kurtevich
2004-08-10 10:59
2004.08.29
Помогите! "Косынка" глючит!! :(


14-1091964279
Piter
2004-08-08 15:24
2004.08.29
Интересно :)





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