位右移 (BSR)
下表列出了支持此指令的控制器和应用程序。
架构 | 标准应用程序 | 安全应用程序 |
|---|---|---|
CompactLogix 5370、ControlLogix 5570、Compact GuardLogix 5370 和 GuardLogix 5570 控制器 | 是 | 否 |
CompactLogix 5380、ControlLogix 5580、Compact GuardLogix 5380、GuardLogix 5580 和 ControlLogix 5590 控制器 | 是 | 是 |
BSR 指令用于将数组中的指定位右移一位。使能后,指令将数组的位 0 的值卸载到 .UL 位,将其余的位右移一位,并从位地址加载该位。
重要提示:
测试并确认指令对正确数据进行了更改。BSR 指令对连续内存进行操作。如果数组是成员数组,该指令可能会越过该数组的边界,移至其后的其他成员。请务必仔细选择长度,防止出现这种情况。
BSR 指令对连续数据内存进行操作。
如果指令尝试超过数组的末尾(LEN 太大)执行读操作,则指令会将 .ER 位置位并生成严重故障。
可用语言
梯形图

操作数
指令中混用数据类型时,需遵从相关的数据转换规则。请参见“数据转换”数据转换。
梯形图
操作数 | 数据类型 | 格式 | 说明 |
|---|---|---|---|
Array | DINT ARRAY | 标签 | 要修改的数组 指定要移位的第一个元素。 |
Control | CONTROL | 标签 | 运算的控制结构 |
Source Bit | BOOL | 标签 | 要加载到空出位置的位。 |
Length | DINT | 立即数 | 数组中要移位的位数 |
CONTROL 结构
助记符 | 数据类型 | 说明 |
|---|---|---|
.EN | BOOL | 使能位,指示 BSR 指令是否使能。 |
.DN | BOOL | 完成位,置位时指示各位右移一位。 |
.UL | BOOL | 卸载位,是指令的输出。.UL 位用于存储已移出位范围的位的状态。 |
.ER | BOOL | 错误位,当 .LEN < 0 时置位。 |
.LEN | DINT | 长度,指定要移动的数组位数。 |
影响数学状态标志
否
故障条件
下表列出了特定于 BSR 指令的严重故障。
错误代码 | 类型 | 说明 |
|---|---|---|
20 | 4 | 如果第一个指定的位加上要移动的位数超出数组末尾,则会发生严重故障。 |
执行
梯形图
条件/状态 | 执行的操作 |
|---|---|
预扫描 | .EN 位设置为假。 .DN 位设置为假。 .ER 位设置为假。 .POS 值清零。 |
梯级输入条件为假 | .EN 位设置为假。 .DN 位设置为假。 .ER 位设置为假。 .POS 值清零。 |
梯级输入条件为真 | 请参见下文 BSR 流程图(真) |
后扫描 | 不适用 |
BSR 流程图(真)

示例
示例 1
使能后,BSR 指令将 array_dint[0].0 的值复制到 .UL 位,将 0-9 右移,并将 input_1 的值加载到 array_dint[0].9。其余的位 (10-31) 将无效,这表示这些位未进行修改。
梯形图


示例 2
使能后,BSR 指令将 array_dint[0].0 的值复制到 .UL 位,将 0-9 右移,并将 input_1 的值加载到 array_dint[1].25。其余的位(dint_array[1] 中的 31-26)将无效,这表示这些位未进行修改。注意将 array_dint[1].0 经过字移位到 array_dint[0].31 的方式。
梯形图


提供反馈