指令ATH 和BCD_I如输入 LD SM0.0
ATH VW501 VW601 1
MOVW VW601 VW701
BCD_I VW701
假如 VB501=16#31(ASCII码‘1’) 监控中 VB601=16#10 ,为何VB601不等于‘31’?它们是对应的啊?
VW601=16#1000 BCD-I 后,监控VW701=1000 ,为何不是4096?
最佳答案
看到你这个问题时,开始也点和你一样迷惑,但仔细一看才知道为什么!首先我们来看第一个问题:
1. LD SM0.0
ATH VB501 ,VB601,1(ATH的IN和OUT只支持VB数据)
如: VB501=16#31 对应的字符是“1”,ASCII是“49”(ASCII码不是“1”).执行ATH后,VB601=16#10,对应二进制编码是“2#0001_0000”,因为一个VB分成两个半分字节,也就是16#10分成了一个半字为“1”,另一个半字节“0”,从二进制编码也可以看出,用“_”分界成两个半字节,而一个字符ATH转换后只占半个字节,ASCII对应的字母数字字符“1”就占用VB601的上半字节,而下半字节没有什么字符,保持原数据不变,所以为“0”,从而组成了“16#10”。假如我们改一下程序,
LD SM0.0
ATH VB501, VB601,2
然后分使VB501=16#31,VB502=16#32 ,则在VB601肯定是16#12.这个在ATH的指令说明中有,可以仔细看看!
2. LD SM0.0
MOVW VW700, VW702
BCDI VW702
BCD至整数指令将二进制编码的十进制值IN转换成整数值,并将结果载入OUT指定的变量中。IN的有效范围是0至9999 BCD。BCD(二进制编码)的十进制值表示方式是:0000:0;0001:1;0010:2;0011:3;0100:4;0101:5;0110:6;0111:7;1000:8;1001:9;(1010:A;1011:B;1100:C;1101:D;1110:E;1111:F);1 0000:10;以此类对,其中ABCDEF是十六进制,十进制值不用。假如:VW700=16#1000,则对应的十进制值是4096,对应的二进制编码是“2#0001_0000_0000_0000”,如果你用以上BCD(二进制编码)的十进制值表示方式,就很容易知道VW702就是1000。
提问者对于答案的评价:
明白!不胜感激!
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc358956.html