怎么样才能把一个实数转换成四个字节的16进制数,并把这四个字节相加求和

在上位机里输入一个实数,怎么样才能转化成16进制的四个字节给PLC,并在PLC里对这四个字节进行累加,求累加和.请教各位大侠.

问题补充:
我的协议是普通的自由口协议,是一个仪表与PLC做自由口通讯,向仪表写数据时,需要向仪表发送7个字节的数据包,最后一个字节是通讯累加和,也就是需要把前6个16进制的字节相加,溢出位忽略.
 这个是我的数据包格式:
 第一字节 从机地址号
 第二字节 命令及数据号
 第三字节 数据高字节
 第四字节 数据次高字节
 第五字节 数据次低字节
 第六字节 数据低字节
 第七字节 通讯累加和
 

最佳答案

求累加和简单,关键是把实数转化为四个字节的十六进制数。
 要是仪表不识别S7格式的实数就不好办了。
 如果通讯的仪表定义BYTE3-BYTE4-BYTE5-BYTE6为一个有符号实数,且实数格式与S7200定义相同,那么直接转移就可以了:
 L SM0.0
 MOVD VD1000,VD2002 //假设VD1000为人机中的实数值,

 //VB2002=BYTE3
 //VB2003=BYTE4
 //VB2004=BYTE5
 //VB2005=BYTE6

 累加和
 LD     SM0.0
 MOVW   0, VW400                    //累加和结果寄存器
 MOVW   0, VW402                    //数据暂存器
 //累加和次数为有效字节数减去3,即不计算字头字尾和校验和字节            
 MOVD   &VB2000, VD410               //地址指针
 FOR    VW406, +1, VW404            //循环累加和
 MOVB   *VD410, VB403               //数据放到VW402
 +I     VW402, VW400                //累加
 ANDW   16#FF, VW400                //低字节有效
 INCD   VD410                       //指针指向下一个字节
 NEXT
 MOVB   VB401, *VD410               //保存校验和

提问者对于答案的评价:
谢谢,已经解决
 

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc346676.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月4日 下午11:04
下一篇 2021年7月4日

相关推荐

发表回复

登录后才能评论