地磅以指令方式进行串行通讯如何实现?(有协议)(100分)

  • 主题发起人 主题发起人 supperwan
  • 开始时间 开始时间
S

supperwan

Unregistered / Unconfirmed
GUEST, unregistred user!
地磅以指令方式进行串行通讯如何实现?(有协议)请各位高手帮帮我吧。。。
协议在此:http://www.baojigongye.gov.cn/company/01/swhq/jszc/anzlj.htm
我是不是要先发一个握手指令,然后验证对方返回的数据,然后继续发指令?命令中的地址是什么意思呢?
(最好能给出一段源程序,谢谢)
 
为什么没人帮我?自己顶起来
 
ji xu ding!
 
有价值,帮你顶。
 
我来也:
1。我是不是要先发一个握手指令,然后验证对方返回的数据,然后继续发指令?命令中的地址是什么意思呢?
答:是,握手命令:
上位机发:
Char(02)(XON)+地址编号(即地磅编号:'A'~'Z')+'A'(握手)+异或校验高4位+异或校验低4位+Char(03)(XOFF)
如下位机应以相同命令,则表示双方建立连接成功.当然,你得知道地磅的编号
例当呼叫地磅'B'时:
Char(02)+'B'+'A'(握手)+异或校验高4位+异或校验低4位+Char(03)

2.握手成功后上位机接着发请求其他命令,如对地磅'A'读毛重,则发
Char(02)+'A+'B'(读毛重)+异或校验高4位+异或校验低4位+Char(03)
下位机应以:
Char(02)+'A+'B'(送毛重)+符号('+')+'123456'+'1'+异或校验高4位+异或校验低4位+Char(03)
其中,当毛重为正数时符号为'+',这里'123456'为毛重值,后面的'1'为小数点位置,在此为从'123456'的右边网左数第一位,即实际毛重值应为12345.6
即实际发送:
Char($02)+Char($41)+Char($42)+Char($2B)+
Char($31)+Char($32)+Char($33)+Char($34)+Char($35)+Char($36)+Char($31)+
Char($31)+Char($45)+Char($03)//异或校验=$1E,-->Char($31)+Char($45)

其他命令类似,

3.异或校验
除帧的头Char(02)与尾Char(03)外,其他各字符进行逐字符异或,这样将得到一个字节的结果,不一定为ASC码字符,
将其转为两个ASC码字符

4.接收时先捕捉帧头Char(02),再读地磅编号与命令号,接着根据命令号决定后续读入的字符个数...

5.具体编程应该比较容易,最简单就是用SpComm,不过,用控件就只能整个串接收完后再进行判断(还要与前面收到的字符串接起来判断),就不好用4。说的方法做了
 
厉害厉害,可为什么我用串口调试软件发送"02AA0003" 或“02AA000003”等字符串时,对方却无应答?我是用串口调试助手做的,而且没选择16进制方式发送
 
你搞错啦,你的"02AA0003"是指握手命令吧,帧头应该是Char($02),是一个字节,不是两个('02'),帧尾应该是Char($03),你的"02AA0003"如果用16进制表示就变成:
Char($30)+Char($32)+...+Char($30)+Char($33),是8字节,长度格式都不符合,而实际应为6字节,当然不会应答
发Char($02)+'AA00'+Char($03)就对啦
 
xie le ,大哥
 

Similar threads

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