登录
首页 PLC论坛 西门子SIEMENS
回帖 发帖
正文

主题:S7-1200 SHR 向右移位指令,请教

点击:3501 回复:7

如:右移1位时,怎样用1填充.
一开始为:0000,0000,0000,0000
移位后为:1000,0000,0000,0000
如上,看帮助是有符号数会用1填充,但一直没试出来。。。
多谢
19-08-15 16:57
可以的话,最好有例子,我这边上传不了图片。
最后修改:2019/8/15 17:15:53
19-08-15 16:59
可以使用“右移”指令将输入 IN 中操作数的内容按位向右移位,并在输出 OUT 中查询结果。 参数 N 用于指定将指定值移位的位数。当参数 N 的值为“0”时,输入 IN 的值将复制到输出 OUT 中的操作数中。如果参数 N 的值大于可用位数,则输入 IN 中的操作数值将向右移动可用位数个位。无符号值(如:UInt,Word)移位时,用零填充操作数左侧区域中空出的位。 如果指定值有符号(如:Int),则用符号位的信号状态填充空出的位。可以从指令框的“???”下拉列表中选择该指令的数据类型。下图说明了如何将整数数据类型操作数的内容向右移动 4 位:
附件 SHR.gif
19-08-15 17:42
符号位的信号状态,这个不知道再怎么弄,哭。试了好多都不行。我是直接参数弄为-1这样来移位
最后修改:2019/8/15 17:50:29
19-08-15 17:47

引用 变量请用_线 在 2019/8/15 17:47:42 发言【内容省略】

如果操作数“TagIn”的信号状态为“1”,则将执行“右移”指令。 “TagIn_Value”操作数的内容将向右移动 3 位。 结果发送到输出“TagOut_Value”中。 如果该指令执行成功,则使能输出 ENO 的信号状态为“1”,同时置位输出“TagOut”。
附件 SHR_PROGRAM.gif
附件 SHR_Table.gif
19-08-15 17:52

引用 变量请用_线 在 2019/8/15 16:57:58 发言【内容省略】

符号位,当它是负数的时候,符号位才可以为1,填进来才填1.
你这样试试,把一个数(初始为0)减2,就是负的了.
然后用shr,类型选有符号,比如int,sint等.
19-08-15 20:07
19-08-15 20:10
多谢上面二位版主,上面方法没问题;原来是要监控二进制格式,指令块有自动将值反转,之前一直搞错了。
如-64向右移一位之后,变为-32如果按1填充的话是错的,其实不然,看二进制的话从1111_1111_1100_0000变为1111_1111_1110_0000,所以可行。
感谢,积分已送出。
19-08-16 13:56

工控新闻

更多新闻资讯