在上位机里输入一个实数,怎么样才能转化成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