smart 200作为主站,读取第三方温度信号,地址存在寄存器40001中,存储在VB260中,读取后转换成温度值,在PLC这边显示不正常。是哪里问题?通讯是正常的,另外BCD-I时,外边框是红色的,什么问题?
问题补充:
如果是接收16进制的如何转换那?也就是说读回来两个字,都是16进制的两路温度,这个如何转换?
图片说明:
钻石用户推荐最佳答案
1、BCD 码是二进制编码的十进制表示法,其规则是每一个十进制位用四位二进制码表示,十进制数只有 0-9 这10 个数字
十进制的 0 : BCD 二进制编码是 0000
十进制的 1 : BCD 二进制编码是 0001
十进制的 2 : BCD 二进制编码是 0010
十进制的 3 : BCD 二进制编码是 0011
十进制的 4 : BCD 二进制编码是 0100
十进制的 5 : BCD 二进制编码是 0101
十进制的 6 : BCD 二进制编码是 0110
十进制的 7 : BCD 二进制编码是 0111
十进制的 8 : BCD 二进制编码是 1000
十进制的 9 : BCD 二进制编码是 1001
你注意看上面的二进制编码。左数第三张图
472(十进制)=2#0000 0001 1101 1000,其中11101 不符合 BCD 码规范
222=2#0000 0000 1101 1110,其中11101 、1110不符合 BCD 码规范
这就造成了你调用子程序时,这两个参数传入程序,BCD_I 指令的输入数据值不符合 BCD 码规范,所以你监视到的是红色的。
2、你仔细看说明书,温度值是BCD码?看到你读了二个字,是不是个浮点数呢。你在状态表中用浮点格式监视一下VD260,如果不对,还可以想办法高低字交换,或字节交换。认真看看说明书,确定其数据格式。
补充:
十六进制就不需要转换了。如果读回来的是字类型的温度,那它应该是一个整数,看说明书是几位小数,如果是1位小数。
那就将整数 VW260 转成双整数,双整数再转成浮点数,浮点数再除以10.0,最后得到的就是有一位小数的温度浮点数。
另外一个温度类同
提问者对于答案的评价:
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc279747.html