在Delphi中的实现如下。我们使用Tcomm控件实现串口通讯。此控件调用Win32 API来实现所需功能。控件安装后可见如下属性BaudRate、CommPort、DataBits、DataCount、DTREnabled、HwHandShaking、InputLen、Parity、PortOpen、RThreshold、RTSEnabled、StopBits、SwHandShaking等设置串口的通讯协议。并提供了3个事件OnReceiveData、OnReceiveError、FOnModemStateChange等.通过控件提供的简单接口,我们可以方便的编程。我们可以在属性中直接选择协议规定的值,或在过程中修改他们的属性,在触发事件里写我们处理数据的代码。底下是一段发送代码程序:
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。如果您需要更快的访问速度。您可以在其中添加定时器来解决。