Y
yfdciom
Unregistered / Unconfirmed
GUEST, unregistred user!
最近做了个项目,其中和电子称进行串口通讯,接收电子称的数据。串行通讯的控件用的是spcomm,可问题是:有时候车停在称上,电子称的显示屏能够正常显示称重数据,点击“称重”按钮,电子称的数据不能传到计算机上;(这种情况称10次能出现5次),为什么?
通讯的源代码很简单:
strNum,strPot,strRecv:string;
base_v,result_v:Extended;
procedure Tshowweight_F.commRecReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
begin
strRecv:='';
strnum:='';
strPot:='';
base_v:=0;
result_v:=0;
setLength(strRecv,BufferLength);
Move(Buffer^,pchar(strRecv)^,BufferLength);
//电子称传输的字符串为11位,不停的传。第一位和最后一位是+号,2-6位位数据。第7位为标志位。
if (pos('+',strRecv)<>0 ) and (copy(strrecv,pos('+',strRecv)+7,1)<>'') then
begin
strnum:=copy(strRecv,pos('+',strRecv)+1,6);
strPot:=copy(strRecv,pos('+',strRecv)+6,1);
base_v:=math.Power(10,strtofloatdef(strPot,0));
result_v:=strtofloatdef(strNum,0)/base_v/1000;
labweight.Caption:=floattostr(result_v); //显示称重数据
end;
end;
分数肯定可以再加。
通讯的源代码很简单:
strNum,strPot,strRecv:string;
base_v,result_v:Extended;
procedure Tshowweight_F.commRecReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
begin
strRecv:='';
strnum:='';
strPot:='';
base_v:=0;
result_v:=0;
setLength(strRecv,BufferLength);
Move(Buffer^,pchar(strRecv)^,BufferLength);
//电子称传输的字符串为11位,不停的传。第一位和最后一位是+号,2-6位位数据。第7位为标志位。
if (pos('+',strRecv)<>0 ) and (copy(strrecv,pos('+',strRecv)+7,1)<>'') then
begin
strnum:=copy(strRecv,pos('+',strRecv)+1,6);
strPot:=copy(strRecv,pos('+',strRecv)+6,1);
base_v:=math.Power(10,strtofloatdef(strPot,0));
result_v:=strtofloatdef(strNum,0)/base_v/1000;
labweight.Caption:=floattostr(result_v); //显示称重数据
end;
end;
分数肯定可以再加。