200smart 指令咨询

INV_W指令, VW3020输入的是2进制还是10进制。

假如 VW3024是整数300,VW3020要输入多少,才能接通复位。

问题补充:
意思是VW3020 通过字节取反指令   输出结果到 VW3022,
假设VW3022=VW3024=300
VW3020这个地址是 输入1011010011,还是输入723

图片说明:

200smart 指令咨询   

最佳答案

1、
INV_W指令是对一个字变量的16个位按位取反。若原来位上是0转换后该位为1,若原来位上为1转换后该位为0
2、
在你的程序中就是对VW3020按位取反。 因为你的程序是每隔1秒就对VW3020按位取反,并且取反后转换的结果还是放在 VW3020中,而VW3020是与VW3024 做整数比较,当VW3024的值是十进制 300时,只要使得 VW3020 中输入十进制 300 就是可以的。
3、还有另外一种就是,VW3020 输入十进制数 300 ,将其按位取反后的无符号数是 65235。
     65235 这个数是这样推导来的:
     先将300 转成2进制数,就是
     2#0000 0001 0010 1100  再将这个二进制数按位取反,就是
     2#1111  1110 1101  0011  再将这个二进制数转换成无符与整数就是 65235。
4、附图是两种输入方法的测试结果,都可达到目的。
补充:
意思是VW3020 通过字节取反指令   输出结果到 VW3022,那就VW3020 取无符号整数 65235,如果有符号的整数,你输入十进制 -301。

图片说明:

200smart 指令咨询  

提问者对于答案的评价:
如果有符号的整数,你输入十进制 -301。 

有符号怎么得出的-301

最佳答案作者回复:
你将 2#1111  1110 1101  0011 这串二进制码看作补码,其最高位是符号位,符号位为1,表示是负数。PLC中负数是用补码表示的。
                      2#1111  1110 1101  0011 按位取反则为
                      2#0000  0001 0010  1100
再加1 则为     2#0000  0001 0010  1101  转换成十进制数就是 301,因符号位为1,它是负数,则为 -301

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

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

相关推荐

发表回复

登录后才能评论