SPCOM取电子称重量问题???分没了请帮忙(5分)

  • 主题发起人 hubeizwj
  • 开始时间
H

hubeizwj

Unregistered / Unconfirmed
GUEST, unregistred user!
用下面的接收代码取的数据一长串:用是反序的
如:重量:-0.34 
取出的数为:43.000-=43.000-=43.000-=43.000-=
43.000-=43.000-=43.000-=43.000-=43.000-=
43.000-=43.000-=43.000-=43.000-=43.000-=
43.000-=43.000-=43.000-=43.000-=43.000-=
43.000-=43.000-=43.000-=43.000-=43.000-=
procedure TForm1.Comm1ReceiveData(Sender: TObject;
Buffer: Pointer;
BufferLength: Word);
var
tmpArray:array[0..4096] of Byte;
ArraySize,i: DWORD;
Count:DWORD;
tmpStr:string;
pStr:pChar;
begin
if Check1.Checked then
begin
pStr:=Buffer;
tmpStr:=string(pStr);
Dec(PStr);
for i:=0 to Length(tmpStr)-1do
begin
inc(PStr);
tmpArray:=Byte(PSTR^);
Memo2.Lines.Add(IntToHEX(Ord(tmpArray),2));
end;
exit;
end;
pStr:= Buffer;
memo2.Lines.Add(pStr);
end;
 
老大,你想问什么,不会要人帮你检查代码吧
 
我处理都是先pos('-=',pStr) 然后再LeftStr()等截取
要反的话,就来次ReverseString()
就好了
 
dey-999:我想问代码有没有问题,要不一次取出的数据为何那么多重量.且还反序呢??
 
唐朝笨蛋:想问代码有没有问题,要不一次取出的数据为何那么多重量.且还反序呢??
不知你是不是在电子秤取数上也有这种现象??????/
 
第一:
for i:=0 to Length(tmpStr)-1do
begin
inc(PStr);
tmpArray:=Byte(PSTR^);
Memo2.Lines.Add(IntToHEX(Ord(tmpArray),2));
end;
中的 Memo2.Lines.Add(IntToHEX(Ord(tmpArray),2));有何意义
第二:
if Check1.Checked then
begin
...
exit;
end;
中的 exit;干什么
第三:
去掉条件这一块,根据你后续的语句你应该可以得到正确的结果
if Check1.Checked then
begin
end;
 
dey-999:
if Check1.Checked then
begin
//作16进制的读取
end;

其实我的代码并未作上面的,因为Check1.Checked =false,看到重复那么多次我怀疑是什么地方出问问题了
 
你的电子秤设置有问题.你应该设置成稳定输出,这样每次秤重完成只会输出一组数据.
 
zywcd:如何 设置成稳定输出
 
电子称仪表没问题,是设置了连续输出,pos('-=',pStr)好象有问题,应该pos('=',pStr),前边的是符号,要是正数你可能就等于收不到数据了
 
顶部