如何通过计算机串口读取电子磅称数据的问题!!! ( 积分: 50 )

  • 主题发起人 主题发起人 zjwyyh
  • 开始时间 开始时间
Z

zjwyyh

Unregistered / Unconfirmed
GUEST, unregistred user!
单位电子称换了块仪表(原来是托利多的M8141,现在换成了8142 Pro+),领导要让外接计算机,将称量值写入数据库。
计算机接口这方面的应用我从来没搞过,请各位大哥帮助看看(使用spcomm或mscomm控件)如何从该仪表中读到称量数据和如何给其发送数据。谢谢各位!!!

下面是托利多的连续方式输出数据格式:

TOLEDO连续输出格式为18个字节(Bytes).
TOLEDO连续输出格式
STX A B C X X X X X X X X X X X X CR CKS
1 2 3 4 5 6
其中:
1.<STX> ASCII 起始符(020H)
2.状态字A,B,C。
3.显示重量 可能是毛生也可能是净重。6位不带符号和小数点的数字。
4.皮重 6位不带符号和小数点的数字。
5.<CR> ASCII回车符(00H)。
6.<CKS> 可选的校验和。

状态字A
Bits0,1,2
0 1 2 小数点位置
0 0 0 XXXX00
1 0 0 XXXXX0
0 1 0 XXXXXX
1 1 0 XXXXX.X
0 0 1 XXXX.XX
1 0 1 XXX.XXX
0 1 1 XX.XXXX
1 1 1 X.XXXXX
Bits3,4
3 4 分度值因子
1 0 X1
0 1 X2
1 1 X5
Bits5 恒为1
Bits6 恒为0


状态字B
Bits 功能
Bits0 毛重=0,净重=1
Bits1 符号:正=0,负=1
Bits2 超载(或小于零)=1
Bits3 动态=1
Bits4 单位:kg=1
Bits5 恒为1
Bits6 仪表上电时为1


状态字C
Bits0 恒为0
Bits1 恒为0
Bits2 恒为0
Bits3 有打印命令=1
Bits4 扩展显示(X10=1)
Bits5 恒为1
Bits6 恒为0
 
单位电子称换了块仪表(原来是托利多的M8141,现在换成了8142 Pro+),领导要让外接计算机,将称量值写入数据库。
计算机接口这方面的应用我从来没搞过,请各位大哥帮助看看(使用spcomm或mscomm控件)如何从该仪表中读到称量数据和如何给其发送数据。谢谢各位!!!

下面是托利多的连续方式输出数据格式:

TOLEDO连续输出格式为18个字节(Bytes).
TOLEDO连续输出格式
STX A B C X X X X X X X X X X X X CR CKS
1 2 3 4 5 6
其中:
1.<STX> ASCII 起始符(020H)
2.状态字A,B,C。
3.显示重量 可能是毛生也可能是净重。6位不带符号和小数点的数字。
4.皮重 6位不带符号和小数点的数字。
5.<CR> ASCII回车符(00H)。
6.<CKS> 可选的校验和。

状态字A
Bits0,1,2
0 1 2 小数点位置
0 0 0 XXXX00
1 0 0 XXXXX0
0 1 0 XXXXXX
1 1 0 XXXXX.X
0 0 1 XXXX.XX
1 0 1 XXX.XXX
0 1 1 XX.XXXX
1 1 1 X.XXXXX
Bits3,4
3 4 分度值因子
1 0 X1
0 1 X2
1 1 X5
Bits5 恒为1
Bits6 恒为0


状态字B
Bits 功能
Bits0 毛重=0,净重=1
Bits1 符号:正=0,负=1
Bits2 超载(或小于零)=1
Bits3 动态=1
Bits4 单位:kg=1
Bits5 恒为1
Bits6 仪表上电时为1


状态字C
Bits0 恒为0
Bits1 恒为0
Bits2 恒为0
Bits3 有打印命令=1
Bits4 扩展显示(X10=1)
Bits5 恒为1
Bits6 恒为0
 
原来作过,细节忘了!
找一下!
 
var s:string;
i:integer;
begin
s:='';
move(buffer^,pchar(@rbuf)^,bufferlength);
for i:=2 to bufferlength do begin
s;=inttostr(rbuf div 16)+inttostr(rbuf mod 16)+s;
end; //接收数据为十进制要转换为十六制,实际接收:255/96/37/0/0,吨数为2560
另外存有13360:255/1/96/51/1的现象经观察,255后的无实际意义.但出现原因还不知道,我想是不是吨数变化过程产生的垃圾.
试一试!
数据可以读出来,后来因为其他原因没有作完,有机会交流一下!
QQ:41778037
 
谢谢zhangyq2125兄:
不知你用的是什么串口控件?
我很想知道是:
1、应该怎样控制串口读数据(我见有些文章中用了timer来控制)。
2、每次读来的数据根据上面的传输格式应该怎样截出有效的数据段。
3、取出的数据是什么格式,怎样转换才是最后的称量数据。
有没有代码参考呀,谢谢啦!
 
请各位大哥帮帮呀!
 
用MSComm设置好各种参数后,这是我做的30T电子称的算法,
用到了8142-0008、8530D两个型号,你可以参考一下

procedure TWeighSalFrm.timReadTimer(Sender: TObject);
var
Str: string;
Weight: Double;
begin
if not MSComm.PortOpen then
Exit;

{ 读取串口数据 }
Str := Copy(VarToStr(MSComm.Input), 1, 100);
if Length(Str) > 0 then
begin
if Pos(ReadTag, Str)>0 then
begin
if Copy(Str, Pos(ReadTag, Str) + 1, 1) = ReadState then
shpCircle.Brush.Color := clGreen
else
shpCircle.Brush.Color := clRed;
if (WorkShop = 1) or (WorkShop = 2) then
Str := Copy(Str, Pos(ReadTag, Str) + 2, 7) else
if WorkShop = 3 then
Str := Copy(Str, Pos(ReadTag, Str) + 3, 6);
end else
begin
shpCircle.Brush.Color := clRed;
Str := '0';
end;

try
Weight := StrToFloat(Str);
except
Weight := 0;
end;
end else
begin
shpCircle.Brush.Color := clRed;
Weight := 0;
end;

lblRead.Caption := FloatToStr(Weight);
end;
 
谢谢郭大哥:
麻烦再问一个问题:
1、timer控件的时间interval属性设为多少?
2、ReadTag和ReadState这两个变量的值,按我上面提供的资料应该赋什么值呢?
谢谢啊郭兄!!!
 
我正好做了一个电子磅秤的项目,你是要Delphi7的辕马还是要C#的辕马?
想要了喊三声声前辈哥哥。。。。嘿嘿。。。
(开个玩笑)
你的QQ是多少?我们切磋一下。
我的:390052953 程序包身工,添加时注明切磋“电子磅秤”
 
我的分少,请不要见怪!!! 谢谢各位。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
650
import
I
后退
顶部