Delphi与串口通讯

Delphi中的实现如下。我们使用Tcomm控件实现串口通讯。此控件调用Win32 API来实现所需功能。控件安装后可见如下属性BaudRateCommPortDataBitsDataCountDTREnabledHwHandShakingInputLenParityPortOpenRThresholdRTSEnabledStopBitsSwHandShaking等设置串口的通讯协议。并提供了3个事件OnReceiveDataOnReceiveErrorFOnModemStateChange.通过控件提供的简单接口,我们可以方便的编程。我们可以在属性中直接选择协议规定的值,或在过程中修改他们的属性,在触发事件里写我们处理数据的代码。底下是一段发送代码程序:

procedure TFrmTransient.TimerTotalSendTimer(Sender: TObject);

var

ByteSend:array of Byte;

i:Dword;

StringSend:array [0..7] of Byte;

begin

CommTotal.PortOpen:=false;

StringSend[0]:=StrToInt('$'+'BB');

StringSend[1]:=StrToInt('$'+'BE');

StringSend[2]:=StrToInt('$'+'10');

StringSend[3]:=StrToInt('$'+'01');

StringSend[4]:=StrToInt('$'+'FD');

StringSend[5]:=StrToInt('$'+'70');

StringSend[6]:=StrToInt('$'+'10');

StringSend[7]:=StrToInt('$'+'EE');

CommTotal.PortOpen:=true;

SetLength(ByteSend,8);

  for i:=0 to 7 do

      ByteSend[i]:=StringSend[i];

      CommTotal.OutputByte(ByteSend);

exit;

end;

再看一段接收代码:

procedure TFrmTransient.CommTotalReceiveData(Sender: TObject);

var

ByteRecieve:array of byte;

Coun,i:DWord;

PT:PByte;

ReceiveString:String;

begin                    

ReceiveString:='';

    Coun:=CommTotal.ReadInputByte(PT);

    SetLength(ByteRecieve,Coun);

    for i:=0 to Coun do

    begin

        ByteRecieve[i]:=PT^;

        ReceiveString:=ReceiveString+inttohex(ByteRecieve[i],2); 

        Inc(PT);

    end;

end;

这样就可以完成数据的发送与接收,完成与串口的通讯。

    一般默认的接受访问时间是100ms。如果您需要更快的访问速度。您可以在其中添加定时器来解决。

你可能感兴趣的:(编程,String,api,byte,Delphi,通讯)