PLC中INT型数据的存储形式
今天早上同事问我,想让PLC中一个INT型变量所有位均为1,用十进制应该赋哪个值?
看似一个简单的问题,且涉及到了INT型数据的存储形式。
熟悉PLC的朋友应该知道,INT型数据在PLC中占用两个字节,16位,以最高为表示符号,最高位为0表示正数,最高位为1表示负数。
要说清楚INT型数据的存储形式,还得从他的二进制源码、反码、补码说起。
- 源码:最高位表示符号,其它位表示数值。
- 反码:正数的反码和源码相同,负数的反码是除符号位外其它的位按位取反。
- 补码:正数的补码和源码相同,负数的补码是其反码加1。
INT型数据是以补码形式存储的,所以要想让PLC中一个INT型变量所有位均为1,这个值必须是负数,因为只有负数才能使得最高位为1。
将取值范围缩小的负数之后,可供我们选择的负数只有两个,即INT型可表示的最小负数-32768和最大负数-1。经计算,INT型变量值为-1时,用二进制表示的16位数均为1。
理论分析到此为止,接下来我们在PLC中验证一下。
首先,在PLC中创建两个INT型变量A_TEST1和A_TEST2。
然后在程序中配置这样的程序,将A_TEST1的值赋给A_TEST2。
这样做是为了测试方便,也可省略这一步,不过测试时有的繁琐。
在数据表中监视变量A_TEST1和A_TEST2,并将A_TEST1以十进制显示,A_TEST2以二进制显示。
将A_TEST1的值修改为-32768,A_TEST2的值变为1000 0000 0000 0000。
将A_TEST1的值修改为-1,A_TEST2的值变为1111 1111 1111 1111,证明理论分析是正确的。
更多工控经验分享,欢迎关注"工控领域野钓人"。