Sunteți pe pagina 1din 10

!

"#
$%&

!!" # # $%&'

( )* ! +, ! )* -
!.*, /0! *1 ( 0 2 ) 3
4 0* 4 5!6,7! 45 !( !1 8
* 9 :* ;<= >?@
-
*1 ):* ( ) ABC DEF
GHDF
@IG
<FDEF G 98
* :* J /0 K4 !6
+)) )* /
!6
/ 1!0
,L5 +, :* )! ! MABC DEFGN ! !)

( )'
' *)+
, -. !

! / , 1! , ! ( -1 ! )*! ! / ( ,7 )*
! )*1 )
( 904 0*! ) */0 K : /0 K4) * ABC DEF G4 !60* !
/ 0 (!8
* O1 P : ( )! ! / * QR BS1 020.* )*3/ * QR BS2!
,T( U,T ( :!. ( ) :20 2! )
* )*31 ) ,7 ) . ( 1 0
! ** -1 ! )*! ! M19 ) * !(0 )N ( V W@ IXEYZ[D +) 20
! ! ( * ! ! 20 / +( ( ) * : !20 * /0!. (
+0 (0 -.20 ! / , 1! 1 ( 1 0 +(0-* W@IXEYZ\]UC^U\]S^H
W@IXEYZ_``Ù[D :W@ IXEYZ_``a - .+(0!/8
- ! M .+(0 1 )!/8 - )-N
(Kb! ,T ( (0 b,! ! !) !) : 0* . ! 8
)+, -
c# ,T
(1de ,7 :/ * ! +(0
1!)ABCcHABC_HABCa :
ABCf
_# ) ) dT !MAEIg
@hiF
jG
@EIN/ * ,T
(
a# , ) 0*!
f# !. ( ) dT!
k# .! )/0 K !1de1 ! /0 K ! 1 / /0 K *1de
1 ! )*/0 K ! *
l# .! ,T
(1m ( MnjIX=
<N/ * ,(
T+0

!/- - * l -:/ ,7 , 1! (0 ;<=


>?@!6 / ,7 0 (, 1! +(0
(* - M4 /0/- k +, +)
+(0)
* / * -
* (N

procedure TFormc#ButtoncClick(Sender: TObject);


var
hCom1oTHandle;
cCom1oTCommConfig;
sCom1oDWORD;
begin

{ Step 1. }
hComc o
pCreateFile('COM1',
GENERIC_READ or GENERIC_WRITE,0,
NIL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,0);
if (GetLastError() = ERROR_ALREADY_EXISTS) then
begin
MessageBox(handle,'CREATE_ALWAYS or OPEN_ALWAYS', 'Error', MB_OK);
end;
if (GetLastError() = INVALID_HANDLE_VALUE) then
begin
MessageBox(handle,'CINVALID_HANDLE_VALUE', 'Error', MB_OK);
end;

{ Step 2. Read the COM1 config. }


if hCom1 <> 0 then
begin
if GetCommConfig(hCom1, cCom1, sCom1)= true then
begin
msg.Items.Add('::: Default setting :::');
msg.Items.Add('COMc version = '+IntToStr(cComc#wVersion));
msg.Items.Add('Baud rate = '+IntToStr(cComc#dcb.BaudRate));
msg.Items.Add('Byte size = '+IntToStr(cComc#dcb.ByteSize));

if (cCom1#dcb.Parity = 0) then
msg.Items.Add('Parity bit = no')
else if (cCom1#dcb.Parity = 1) then
msg.Items.Add('Parity bit = odd')
else if (cCom1#dcb.Parity = 2) then
msg.Items.Add('Parity bit = even')

/
else if (cCom1#dcb.Parity = 3) then
msg.Items.Add('Parity bit = mark')
else if (cCom1#dcb.Parity = 4) then
msg.Items.Add('Parity bit = space')
end; // Parity bit

if (cCom1#dcb.StopBits = 0) then
msg.Items.Add('Stop bit = 1')
else if (cCom1#dcb.StopBits = 1) then
msg.Items.Add('Stop bits = 1.5')
else if (cCom1#dcb.StopBits = 2) then
msg.Items.Add('Stop bits = 2')
end; // StopBits
end; // GetCommSetting

{ Step 3. }
cCom1#dcb.BaudRate := 9200; // 9200 bps
cCom1#dcb.ByteSize := 8; // data 8 bits
cCom1#dcb.Parity := 0; // no parity bit
cCom1#dcb.StopBits := 0; // 1 stop bit

{ Step 4. }

SetCommConfig(hCom1, cCom1, sCom1N;

if GetCommConfig(hCom1, cCom1, sCom1)= true then


begin
msg.Items.Add('::: My setting :::');
msg.Items.Add('COMc version = '+IntToStr(cComc#wVersion));
msg.Items.Add('Baud rate = '+IntToStr(cComc#dcb.BaudRate));
msg.Items.Add('Byte size = '+IntToStr(cComc#dcb.ByteSize));

if (cCom1#dcb.Parity = 0) then
msg.Items.Add('Parity bit = no');
end
else if (cCom1#dcb.Parity = 1) then
begin
msg.Items.Add('Parity bit = odd');
end
else if (cCom1#dcb.Parity = 2) then
begin
msg.Items.Add('Parity bit = even');
end
else if (cCom1#dcb.Parity = 3) then
begin
msg.Items.Add('Parity bit = mark');
end
else if (cCom1#dcb.Parity = 4) then
begin
msg.Items.Add('Parity bit = space');
end; // Parity bit

if (cCom1#dcb.StopBits = 0) then
begin
msg.Items.Add('Stop bit = 1');
end
else if (cCom1#dcb.StopBits = 1) then
begin
msg.Items.Add('Stop bits = 1.5');
end
else if (cCom1#dcb.StopBits = 2) then
begin

0
msg.Items.Add('Stop bits = 2');
end; // StopBits
end; // GetCommSetting

end; // hCom1 <> 0

{ Step 6. }
if hCom1 <> 0 then
begin
CloseHandle(hComcN;
end;

end;

6) .,7 0* K!
0 90 24 1 .20)1 (
+(0! * :;<=
>?@^>@
ZEX<R
R ( OP6(K

2 * - * 0*! ( 62 ! .* 1 0* 8
!O - * (2 0 /02
!) 1 0) q + /8 - (r - B><ISEiF s< 20 ( (0 (/ *
/ 8 !O :/021 0 q /8 - 2 ) ,7/ * * : , +, ) /
q !6 +(0M19 +(0 ( 2! q (0 ) ,74K 08 * -. B><ISEiF s<N
4 !6+) ! b : ( 100 (!620+(00*+)+(00* )* 4/04 ! -! .20 (
M 0(0 N !6 * 0 (K ### 1 1 0!6 ! B><I ZEiF s< )* ( +
( )! ! 20 ! ;<= >?@1 AttQi@ =
X<F4 !6:! 8
*
:ADEF G : : 63 :AEuDEF Gv@wFjF
xy<F Z@
EI_#lf gEF;<=
>?@aHfHkHlHz jIXAtt
Qi@=X<FaHfHkHl P8* q ( ;<{ jIAF I@=
j1 vjF Z;xwXj?= .) .20 920 !
;<=>?@z +(0
(0
+ - K21des>EF
) G
a#<|<M/ (z``!)! + (( W@ I}~}N 4
1 ! /0*2 d( f :<|ju>=<Z !6 )* , 1! H?<= >
!61de ) :H= Esj=
< . !6 .b )* O M O9 ### +) O+ N
1 ZEiF s<Z !6 0 ( 0V

1
, 34
56)'
*)7
8

!) :20 1de s>EF G


a#<|<(0! XEiw=<s=@s• :1de1 0 :!
* ! -/0+,2 d ( :SEiF s<Z -
!60*(K) ;<= >?@ )+ 90,7 ) z
: ! / *4 !6
20XEiw=
<=@
s•1de :)ADEFG
v@wz#X>• : !1de ** 1 0
0)* : (* K ,c

,c
K 0)* ** / * A>EF
Gv@
wz#X>•

20 ! AEu>@=
<1 0 (0 ! R IZG
j=
= * ! -,T
(;<=
>?@/- )+,20
XEiw=
<s=
@s• 1de;ZhIADEF
Gz#X>•1 0 +(0 0 : K , _ 20.! AEu>@
=
<1
RIZG
j=
= : /- !) 0- * ! -20 ,T
(, 1! ;<=
>?@

2
,_
K 0)* ** / * ;ZhIADEF
Gz#X>•

/- )+, -.5 ! + , 1! 0*20 ! 1de


)+, -
2! + 0/ * : 0* ( !1de(*! )+,+0
2 d ( vRQ /*
;<=
>?@ * )-
!6 0 20 * + ADEF
G1 0 4

CPort.dcu
CPortAbout.dcu
CPortCtl.dcu
CPortEsc.dcu
CPortImg.res
CPortSetup.dcu
CPortSetup.dfm
CPortTrmSet.dcu
CPortTrmSet.dfm
gnugettext.dcu

),:+8;< 5

)* , 1! - : ** )CEX€<ZG
#X>FP8
* K
)
2 d ( ^|ju>=
<Z•;<=
>?@
/ *1de 2 0
( ( 2 )* -
,7! / , 1! 1 ( P MAEIZE= <
CEX<N : 0 ! 2 :/ * ( !O 0 (, 1! / * )* -,7(* -

program ModTest;
{$APPTYPE CONSOLE}

uses
SysUtils, CPort, Windows, SyncObjs;

9
var
ComPort: TComPort;
Events: TComEvents;
Answer, Data: string;
Step: Integer;
Event: TEvent;

function CtrlHandler(CtrlType: LongWord): Boolean;


begin
Event.SetEvent;
Result := True;
end;

begin
Event := TEvent.Create(nil, True, False, '');
SetConsoleCtrlHandler(@CtrlHandler, True);
try
ComPort := TComPort.Create(nil);
try
if ParamCount > 0 then
ComPort.Port := ParamStr(1)
else
ComPort.Port := 'COM1';
ComPort.Events := [];
ComPort.FlowControl.ControlDTR := dtrEnable;
ComPort.FlowControl.ControlRTS := rtsEnable;
ComPort.Open; // open port
ComPort.WriteStr('AT'#13#10); // send test command
Answer := '';
Step := 0;
repeat
Events := [evRxChar];
// wait for characters
ComPort.WaitForEvent(Events, Event.Handle, 5000);
if evRxChar in Events then
begin
ComPort.ReadStr(Data, ComPort.InputCount);
Answer := Answer + Data;
if Pos('OK', Answer) > 0 then
Break;
end;
Inc(Step)
until (Events = []) or (Step = 20);
if Pos('OK', Answer) > 0 then
WriteLn('Modem found on ' + ComPort.Port)
else
WriteLn('Modem NOT found on ' + ComPort.Port);
finally
ComPort.Free;
end;
except
on E: Exception do
WriteLn('Error: ' + E.Message);
end;
Event.Free;
end.

=
, 1! - .! ,T
( ABCc :,T
( /0 )
* ,7
!, 1! )

Modtest COM2

* ! - .! *2 0,T
( MComport.OpenN 1 .! ) */0 K+,
,7 ~€ ) ‘AT’#13#10 P8* ,7! * (6 :2 0 (6 )*
/0 ! ! 1 0 /0K!
) !) ! M^y<IGZN ,7 ))* :
. _` (21 ) - ! ! !! /0 K, k 1
90/0 K4) * (if evRxChar in Events then …) *
)/0 . (0 .* Comport.ReadStr !62 1, Data ,7
. ComPort.InputCount !O
: ! !! )/0 )‚ Bƒ„ :+)901 (* ) (6
1 )
90+)!61 (*/0 )+) (6 ) :*/ * exception )* .)tryH
finally 1 except -90 2 )+ )
/02 * 0* * :! / , 1! (0
;<=
>?@ ) 1 0)

),:+8;< 5 /

)* * :C@I@
€<Fu#X>F )* - ! !( 4( ( 6 ! 0 :*
1de ** *+)#}^SP8
*98
*1 0) +)1de(*! ) ;<=
>?@!6 }<sF
<jG
<20 K)
10

0 / * , 1! - ,7(* K,a 6 )(0 ! / *+ ADEF


G -.
2 0 +).,7 0*20 * nx><F
€<F
u@Ij= !6
+(0 * 2 0!6 * .
/ , 1! +(0! 1 :* ! )* -b 1 0) /0* 4 / !,7
! 0 )! *(K ), 1! * + 0* 902 :- ;<=>?@
!) !6 ! 20 +)! 1 )90*+) 8 !O !) 1 02 0 )!6 / 1 .)(
K * 1 0 * :;<= >?@ 8!O )* * *! +(010

>
<
@

* )4K
0) * * 6 ) 920+ -! +(0)*+ 1 * )*
q , , * ,7/ * +(0. 6 ( 0 0*/ / * ^€€ 1 ! !
4 ,7 )* K * *2 0! 4 2 ! / ! )+,1 / /
1 : )* * *20!.*24
0* ,7 )* :* / ! 0* ) P8 * *31 0 :* /
4 ,!! ! ! +0 1 01 ) 4 !6
4( ( K): , ! ! 1de 0V K
5
+,! m (( !M / (,e*! )*(1 0 +) * m0N / 2 ) !6
+)
1 )2 ) 6 :+ ! .+ 3 * !601 0 Mm)33…†…N 20b
! ,7 !6
1 0! (r !6 ,7 ) *1 M ! )4 (
( / b‡1 )4 ) ! !2 ! !!6 !+, )! m)33N
/ 20 !! ! / , 1! 4 ) 4 / +,1!0 ,L
5 ) !)
9(+, ,7(: 0 4 / 20 ,7 :* ,7 200!
/ (: * 4
-

?
,a
K 0 , 1! C@
I@
€<F
u

S-ar putea să vă placă și