读取串口数据问题(100分)

  • 主题发起人 主题发起人 wuliaoderen
  • 开始时间 开始时间
W

wuliaoderen

Unregistered / Unconfirmed
GUEST, unregistred user!
现在我想读取串口的数据,然后处理。可是我怎么才能知道什么时候串口有数据,并读取它们进行处理。我用的是SPComm,希望知道的朋友们能告诉我怎么做,谢谢!!
 
接收到数据后会触发Comm1ReceiveData事件,你在这个事件里处理你接收数据动作及数据处理就可以了
 
procedure TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
var
i:integer;
begin
viewstring:=‘’ ;
move(buffer^,pchar(@rbuf^),bufferlength);
for i:=1 to bufferlength do
viewstring:=viewstring+ inttohex(rbuf,2)+‘’ ;
viewstring:=‘接收’+ viewstring;
memo1.lines.add(viewstring);
memo1.lines.add(‘’ );
end;

为什么这段代码编译不能通过呢??
它能接收串口数据吗?
 
move(buffer^,rbuf,bufferlength);
其中rbuf为数组
 
你发完请求就有数据。最少也有一消息传回的。
 
我要实现的是读取电话交换机发给电脑的串口数据。
我不需要给串口发数据的,我只要读取。这种情况怎么处理呢?
 
move(buffer^,pchar(@rbuf^),bufferlength);这一句是错误的应该为:move(buffer^,pchar(@rbuf)^,bufferlength);
你想要实现的功能很好实现。就是在Comm1ReceiveData事件下面编写你想要的操作就可以实现了。注意要设置spcomm控件的属性。你可以到网上艘一下这方面的信息。我就不再这里多说了。
 
恰当的设置好你的控件的波特率,有时候虽然定下来了波特率,也有读取不到数据的情况的,我就遇到过这样的情况。
 
Comm1ReceiveData事件
只要交换机有数据到串口,该事件就会触发,注意交换机的波特率等信息,spcomm也设为一样.
 
将你的move(buffer^,pchar(@rbuf^),bufferlength);这条语句改为如下:
SetLength(Temp_Buff,BufferLength);
Move(Buffer^,PChar(Temp_Buff)^, BufferLength);
就可以实现!
 
数据的接收只是在COMM的这个事件上:Comm1ReceiveData
只要在这里面加上相应的接受代码及接收数据判断代码既可~
 
好象接收事件触发后不能马上读吧,这样读到的数据有时有发生丢帧现象,最后先检查缓冲区里到达的数据长度,然后再读;或者延迟几毫秒再读
 
多人接受答案了。
 
后退
顶部