我也是转成了十六进制的. var s:String; i:integer; a:array[1..12] of byte; begin for i := 1 to 12 do Begin s := s + inttohex(a[i],2); End; end;
完全是数据转换的问题,我现在也在做串口通讯的东西,用的是spcomm
我用的是CPort。得到的是一个字符串,就看你自己怎么转换成需要的方式显示出来了
问题已经解决,但是又出现新的问题.我首先把buffer中的数据一个一个取出(设置bufferLength=1,就能一个一个取).但是现在我想把它放在一个循环队列中,却发生了数据顺序不一致的问题.我写的是: var rxdbuf : array[1..64] of byte; rxdptr : integer; ptr:integer; i :integer; Begin rxdptr :=0; bufferLength := 1; move(buffer^,rxdbuf[rxdptr],bufferLength); ptr := ((rxdptr-11) mod 64); if rxdbuf[ptr] = ($55) then i := i +1; //能找到55 if rxdbuf[(ptr+1)] = ($aa) then i := i+1; //这里却找不到aa,用memo1显示是ff,或者7f,它的第三位才是aa,而从串口调试工具里面看到的是55 aa ff 01 End; 请高手帮我写一个合要求的队列以让我放数据进去.
奇怪的事?我在用spcomm时,把readintervaltimeout时间设定为15数据显示的飞快,但是为16以上,速度就慢了很多?这是什么原因? 还有,程序脱开delphi环境,就不出错.但在delphi环境下.老是发生 canvas does not allow drawing 这又是什么原因? 我也想过不改readintervaltimeout这个参数.也不却设定bufferLength的大小值.但那每个buffer的大小大约为 1024吧.所累积的数据太多,不能实时反映我的功能.数据包得到的间隙时间为3.15秒左右,我想要达到0.5秒左右就处理一次数据.
var
s:String;
i:integer;
a:array[1..12] of byte;
begin
for i := 1 to 12 do
Begin
s := s + inttohex(a[i],2);
End;
end;
var
rxdbuf : array[1..64] of byte;
rxdptr : integer;
ptr:integer;
i :integer;
Begin
rxdptr :=0;
bufferLength := 1;
move(buffer^,rxdbuf[rxdptr],bufferLength);
ptr := ((rxdptr-11) mod 64);
if rxdbuf[ptr] = ($55) then
i := i +1; //能找到55
if rxdbuf[(ptr+1)] = ($aa) then
i := i+1; //这里却找不到aa,用memo1显示是ff,或者7f,它的第三位才是aa,而从串口调试工具里面看到的是55 aa ff 01
End;
请高手帮我写一个合要求的队列以让我放数据进去.
还有,程序脱开delphi环境,就不出错.但在delphi环境下.老是发生
canvas does not allow drawing 这又是什么原因? 我也想过不改readintervaltimeout这个参数.也不却设定bufferLength的大小值.但那每个buffer的大小大约为 1024吧.所累积的数据太多,不能实时反映我的功能.数据包得到的间隙时间为3.15秒左右,我想要达到0.5秒左右就处理一次数据.
或用API写的?