10西门子博图移位和循环指令 在西门子PLC中移位和循环指令是应用非常广泛的,像我们经常看到的彩灯控制,用此指令就非常方便。 1、SHR:右移 可以使用“右移”指令将输入 IN 中操作数的内容按位向右移位,并在输出 OUT 中查询结果。参数 N 用于指定移位的位数。 如果参数 N 的值为“0”,则将输入 IN 的值复制到输出 OUT 的操作数中。 如果参数 N 的值大于位数,则输入 IN 的操作数值将向右移动该位数个位置。 无符号值移位时,用零填充操作数左侧区域中空出的位。如果指定值有符号,则用符号位的信号状态填充空出的位。
图中1位置:要进行右移操作的数; 图中2位置:要进行移位的位数; 图中3位置:右移执行后结果存储地址; 图中4位置:可执行的数据类型;
下图展示数据进行右移位的原理:
以下面实例检验运行结果:
有实例运行:输入为字节型数据”DB_1”.B_1=16#80转换为二进制:1000_0000移位数2结果为”DB_1”.B_2=16#20转换为二进制:0010_0000 PS:右移位指令条件成立M_1为ON执行一次,条件再次成立结果保持不变。 2、SHL:左移 使用“左移”指令将输入 IN 中操作数的内容按位向左移位,并在输出 OUT 中查询结果。参数 N 用于指定将指定值移位的位数。 如果参数 N 的值为“0”,则将输入 IN 的值复制到输出 OUT 的操作数中。 如果参数 N 的值大于位数,则输入 IN 的操作数值将向右移动该位数个位置。 用零填充操作数右侧部分因移位空出的位。注意与右移指令的区别。
左移指令与右移指令原理基本一致,区别在于符号位,左移为有低位向高位移动,低位自动补0,而右移指令是有高位向低位移动,固存在符号位问题。
原理展示:
下面看一下实例运行结果:
“DB_1”.B_1=16#01转换二进制为0000_0001执行指令移位数2结果存储在”DB_1”.B_2=16#04转换为二进制为0000_0100 3、ROR:循环右移 使用“循环右移”指令将输入 IN 中操作数的内容按位向右循环移位,并在输出 OUT 中查询结果。参数 N 用于指定循环移位中待移动的位数。用移出的位填充因循环移位而空出的位。 如果参数 N 的值为“0”,则将输入 IN 的值复制到输出 OUT 的操作数中。 如果参数 N 的值大于可用位数,则输入 IN 中的操作数值仍会循环移动指定位数。注意与右移指令区别。 下面来看一下移位原理图展示:
有图中可以看出循环右移与右移的差异,循环移位指令也常被用于经典的跑马灯程序。设定好移位指令执行的间隔时间就可以达到跑马灯的效果。 下面是参数表:
结合实例展示如下:如果将IN改为MB100执行此指令M100.7-M100.0按顺序依次为ON,如果换为输出点,就可以驱动外部指示灯。
4、ROL:循环左移 使用“循环左移”指令将输入 IN 中操作数的内容按位向左循环移位,并在输出 OUT 中查询结果。参数 N 用于指定循环移位中待移动的位数。用移出的位填充因循环移位而空出的位。 如果参数 N 的值为“0”,则将输入 IN 的值复制到输出 OUT 的操作数中。 如果参数 N 的值大于可用位数,则输入 IN 中的操作数值仍会循环移动指定位数。
指令执行与循环右移原理一样,只是移动方向变为向左,不在赘述。 移位与循环移位在PLC编程中有着非常广泛及巧妙的用法,理解后可结合实际案例灵活运用。 ==END
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/32733.html