int型数转为16进制_PLC中给INT型变量所有位置1,原来还需要这样的知识

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。

864d1dd28eafc7e7658e9fe88153d916.png

理论分析到此为止,接下来我们在PLC中验证一下。

首先,在PLC中创建两个INT型变量A_TEST1和A_TEST2。

4705f7ff689cb2519dde28fe55928735.png

然后在程序中配置这样的程序,将A_TEST1的值赋给A_TEST2。

ea31900f0bf6ace45277863db8274d16.png

这样做是为了测试方便,也可省略这一步,不过测试时有的繁琐。

在数据表中监视变量A_TEST1和A_TEST2,并将A_TEST1以十进制显示,A_TEST2以二进制显示。

075ebb0f4ff79371f6cd9cfc2f86fe1b.png

将A_TEST1的值修改为-32768,A_TEST2的值变为1000 0000 0000 0000。

af97bbecdc549325e20eff202e766f2d.png

将A_TEST1的值修改为-1,A_TEST2的值变为1111 1111 1111 1111,证明理论分析是正确的。

8b3cd951803052a682a184101329d826.png

更多工控经验分享,欢迎关注"工控领域野钓人"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值