离散 2 态设备 (D2SD)
此信息适用于
CompactLogix
5370、ControlLogix
5570、Compact GuardLogix
5370、GuardLogix
5570、Compact GuardLogix
5380、CompactLogix
5380、ControlLogix
5580、GuardLogix
5580 和 ControlLogix 5590 控制器。离散 2 态设备 (D2SD) 指令控制仅有两个可能状态(如开/关或断开/闭合)的离散设备。
可用语言
梯形图
此指令不可用于梯形图逻辑中。
功能块

结构化文本
D2SD(D2SD_tag)
操作数
指令中混用数据类型时,需遵从相关的数据转换规则。请参阅 数据转换。
结构化文本
操作数 | 类型 | 格式 | 说明 |
D2SD tag | DISCRETE_2STATE | 结构 | D2SD 结构 |
有关结构化文本中表达式语法的详细信息,请参见
结构化文本语法
部分。功能块
操作数 | 类型 | 格式 | 说明 |
D2SD tag | DISCRETE_2STATE | 结构 | D2SD 结构 |
DISCRETE_2STATE 结构
输入参数 | 数据类型 | 说明 |
|---|---|---|
EnableIn | BOOL | 启用输入。如果为假,指令不会执行,也不会更新输出。 默认值为真。 |
ProgCommand | BOOL | 用于确定设备处于程序控制模式时的 CommandStatus。为真时,指示设备受控进入状态 1;为假时,指示设备受控进入状态 0。 默认值为假。 |
Oper0Req | BOOL | 操作员状态 0 请求。设备处于操作员控制模式时,通过操作员界面置位,将设备置为状态 0。 默认值为假。 |
Oper1Req | BOOL | 操作员状态 1 请求。设备处于操作员控制模式时,通过操作员界面置位,将设备置为状态 1。 默认值为假。 |
State0Perm | BOOL | 状态 0 选通。除非在手控或超控模式下,否则必须将该输入置位才能使设备进入状态 0。该输入对于已经处于状态 0 的设备无效。 默认值为真。 |
State1Perm | BOOL | 状态 1 选通。除非在手控或超控模式下,否则必须将该输入置位才能使设备进入状态 1。该输入对于已经处于状态 1 的设备无效。 默认值为真。 |
FB0 | BOOL | D2SD 指令可用的第一个反馈输入。 默认值为假。 |
FB1 | BOOL | D2SD 指令可用的第二个反馈输入。 默认值为假。 |
HandFB | BOOL | 手控反馈输入。该输入来自现场手动/关/自动站,用于显示所请求的现场设备状态。为真时,请求现场设备进入状态 1;为假时,请求现场设备进入状态 0。 默认值为假。 |
FaultTime | REAL | 故障时间值。以秒为单位配置时间值以使设备达到最新给定的状态。设置 FaultTime = 0 可禁用故障计时器。如果该值无效,该指令会假定该值等于零并置位 Status 中的相应位。 有效值 = 任何 0.0 的浮点数默认值 = 0.0 |
FaultAlarmLatch | BOOL | 故障报警锁定输入。此参数和 FaultAlarm 同时为真时,将锁定 FaultAlarm。要启用 FaultAlarm,将 FaultAlmUnlatch 设置为真或将 FaultAlarmLatch 设置为假。 默认值为假。 |
FaultAlmUnLatch | BOOL | 故障报警启用输入。在 FaultAlarmLatch 置位时设置 FaultAlmUnLatch 可启用 FaultAlarm。指令将该输入设置为假。 默认值为假。 |
OverrideOnInit | BOOL | 初始化时超控请求。如果该位为真,则在指令初次扫描期间,2 态设备进入操作员控制模式,Override 设置为真,Hand 设置为假。如果 ProgHandReq 为真,则 Override 设置为假,Hand 设置为真。 默认值为假。 |
OverrideOnFault | BOOL | 故障时超控请求。如果希望设备在发生故障报警时转为超控模式并进入超控状态,将 OverrideOnFault 设置为真。消除故障报警后,2 态设备进入操作员控制模式。 默认值为假。 |
OutReverse | BOOL | 反向默认输出状态。当受控进入状态 0 时,Out 的默认状态设置为假,当受控进入状态 1 时设置为真。若 OutReverse 为真,则在受控进入状态 0 时,Out 设置为真,在受控进入状态 1 时,Out 设置为假。 默认值为假。 |
OverrideState | BOOL | 超控状态输入。配置此值来指定设备处于超控模式时的设备状态。真表示设备应进入状态 1;假表示设备应进入状态 0。 默认值为假。 |
FB0State0 | BOOL | 反馈 0 状态 0 输入。配置设备处于状态 0 时 FB0 的状态。 默认值为假。 |
FB0State1 | BOOL | 反馈 0 状态 1 输入。配置设备处于状态 1 时 FB0 的状态。 默认值为假。 |
FB1State0 | BOOL | 反馈 1 状态 0 输入。配置设备处于状态 0 时 FB1 的状态。 默认值为假。 |
FB1State1 | BOOL | 反馈 1 状态 1 输入。配置设备处于状态 1 时 FB1 的状态。 默认值为假。 |
ProgProgReq | BOOL | 程序发出的程序控制请求。由用户程序设置为真可请求程序控制模式。如果 ProgOperReq 为真,则忽略该值。若此参数保持为真,并且 ProgOperReq 保持为假,会将指令锁定在程序控制模式。 默认值为假。 |
ProgOperReq | BOOL | 程序发出的操作员控制请求。由用户程序设置为真可请求操作员控制模式。若将此参数保持为真,会将该指令锁定在操作员控制模式。 默认值为假。 |
ProgOverrideReq | BOOL | 程序超控模式请求。由用户程序设置为真可请求进入超控模式。如果 ProgHandReq 为真,则忽略该值。 默认值为假。 |
ProgHandReq | BOOL | 程序手控模式请求。由用户程序设置为真可请求进入手控模式。 默认值为假。 |
OperProgReq | BOOL | 操作员发出的程序控制请求。由操作员界面设置为真以请求程序控制模式。指令将该输入设置为假。 默认值为假。 |
OperOperReq | BOOL | 操作员发出的操作员控制请求。由操作员界面设置为真可请求操作员控制模式。指令将该输入设置为假。 默认值为假。 |
ProgValueReset | BOOL | 将程序控制值复位。该参数为真时,每次执行指令时,所有程序请求输入都将设置为假。 默认值为假。 |
输出参数 | 数据类型 | 说明 |
|---|---|---|
EnableOut | BOOL | 指示指令是否处于启用状态。 |
Out | BOOL | 2 态指令的输出。 |
Device0State | BOOL | 设备状态 0 输出。指示设备受控进入状态 0 且反馈表明设备确实处于状态 0 时设置为真。 |
Device1State | BOOL | 设备状态 1 输出。指示设备受控进入状态 1 且反馈表明设备确实处于状态 1 时设置为真。 |
CommandStatus | BOOL | 命令状态输出。当设备受控进入状态 1 时设置为真,受控进入状态 0 时清零。 |
FaultAlarm | BOOL | 故障报警输出。如果指示设备受控进入新状态,但经过 FaultTime 后反馈没有表明设备确实达到新状态,则此参数设置为真。此外,如果在达到给定状态后,反馈突然表明设备不再处于给定状态,该参数也会设置为真。 |
ModeAlarm | BOOL | 模式报警输出。如果设备处于操作员控制,但程序命令切换为与操作员指示的当前状态不同的状态,则此参数设置为真。此报警旨在提醒已将设备保留为操作员控制模式。 |
ProgOper | BOOL | 程序/操作员控制指示器。在程序控制模式下为真。在操作员控制模式下为假。 |
Override | BOOL | 超控模式。当设备处于超控模式时为真。 |
Hand | BOOL | 手控模式。当设备处于手控模式时为真。 |
Status | DINT | 功能块的状态。 |
InstructFault (Status.0) | BOOL | 该指令检测到以下执行错误之一。这不是轻微或严重的控制器错误。检查其他状态位以确定发生的情况。 |
FaultTimeInv (Status.1) | BOOL | FaultTime 值无效。指令将设置 FaultTime = 0。 |
OperReqInv (Status.2) | BOOL | 两个操作员状态请求位均为真。 |
说明
D2SD 指令控制仅有两个可能状态(如开/关或断开/闭合)的离散设备。具备这种特性的典型离散设备包括电机、泵和电磁阀。
监视 D2SD 指令
D2SD 指令有相应的操作员面板。
影响数学状态标志
否
严重/轻微故障
没有特定于此指令的故障。有关操作数相关的故障,请参阅 通用属性。
执行
功能块
条件/状态 | 执行的操作 |
|---|---|
预扫描 | EnableIn 和 EnableOut 位设置为假。 |
Tag.EnableIn 为假 | EnableIn 和 EnableOut 位设置为假。 |
Tag.EnableIn 为真 | EnableIn 和 EnableOut 位设置为真。 指令执行。 |
指令首次运行 | 将 ProgOper 设置为操作员模式。将 CommandStatus 设置为假。 |
指令首次扫描 | 将 EnableOut 设置为真。 ModeAlarm 和操作员请求输入设置为假, 如果 ProgValueReset 为真,则将所有程序请求输入清零。 当 OverrideOnInit 为真时,ProgOper 设置为假(操作员控制)。 如果 ProgHandReq 清零且 OverrideOnInit 置位,则将 Hand 清零,并将 Override 置位(超控模式)。 如果 ProgHandReq 置位,则将 Hand 置位,并将 Override 清零(手控模式)。 |
后扫描 | EnableIn 和 EnableOut 位设置为假。 |
结构化文本
在结构化文本中,EnableIn 在普通扫描期间始终为真。因此,如果指令处于由逻辑激活的控制路径中,指令将会执行。
条件/状态 | 执行的操作 |
|---|---|
预扫描 | 请参见“功能块”表中的“预扫描”行。 |
正常执行 | 请参见“功能块”表中的“Tag.EnableIn 为真”行。 |
后扫描 | 请参见“功能块”表中的“后扫描”行。 |
示例
SD 指令通常用于控制开/关或打开/关闭设备,如泵或电磁阀。在此示例中,D2SD 指令控制一个电磁阀,从而控制将玉米糖浆加入批量槽的过程。只要 D2SD 指令处于程序控制模式,阀门便会在 AddSyrup 输入置位时打开。操作员还可以在必要时通过操作员方式控制阀门的打开或关闭。本例中的电磁阀采用了限位开关来指示阀门完全关闭或打开的时刻。这些开关与 FB0 和 FB1 反馈输入相连。这样,如果电磁阀未在组态的 FaultTime 内达到给定状态,D2SD 指令便会生成 FaultAlarm。
功能块

结构化文本
SyrupController.ProgCommand := AddSyrup;
SyrupController.FB0 := SyrupValveClosedLimitSwitch;
SyrupController.FB1 := SyrupValveOpenedLimitSwitch;
D2SD(SyrupController);
SyrupValve := SyrupController.Out;
在程序控制与操作员控制之间切换
下图显示了 D2SD 指令如何在程序控制与操作员控制之间进行切换。

(1) 当 ProgOperReq 为真时,指令保持在操作员控制模式。
程序控制模式下的给定状态
下图说明了 D2SD 指令在程序控制模式下的工作情况。

操作员控制模式下的给定状态
下图说明了 D2SD 指令在操作员控制模式下的工作情况。

如果 Oper0Req 和 Oper1Req 均为真:
- 指令将 Status 中的相应位设置为真
- 如果 Override 和 Hand 为假,则指令保持前一状态。
每次执行指令后,指令都会执行以下操作:
- 将所有操作员请求输入设置为假
- 如果 ProgValueReset 为真,则将所有的程序请求输入设置为假。
手控模式或超控模式
下表说明 D2SD 指令确定以手控模式还是超控模式工作的方式。
ProgHandReq | ProgOverrideReq | FaultAlarm 和 OverrideOnFault | 说明 |
|---|---|---|---|
真 | 真/假 | 真/假 | 手控模式 Hand 设置为 true Override 清除为 false |
假 | 真 | 真/假 | 超控模式 Hand 清除为 false Override 设置为 true |
假 | 真/假 | 真 | 超控模式 Hand 清除为 false Override 设置为 true |
指令处于超控模式时,CommandStatus = OverrideState。
指令处于手控模式时,CommandStatus = HandFB。
输出状态
D2SD 输出状态取决于命令状态的状态。
CommandStatus | 输出状态 |
|---|---|
假 | 如果 OutReverse 为 false,则 Out 清除为 false 如果 OutReverse 为 true,则 Out 设置为 true |
真 | 如果 OutReverse 为 false,则 Out 设置为 true 如果 OutReverse 为 true,则 Out 清除为 false |
false 并且 FB0 = FB0State0 且 FB1 = FB1State0 | 故障计时器停止并清零 Device0State 设置为真 |
true 并且 FB0 = FB0State1 且 FB1 = FB1State1 | 故障计时器停止并清零 Device1State 设置为真 |
故障报警条件
D2SD 指令检查以下故障报警条件。
故障报警条件 的原因 | 规则 |
|---|---|
设备状态受控进行更改,但反馈并未指示在 FaultTime 内确实达到目标状态 | 当 CommandStatus n CommandStatusn-1 时启动故障计时器当故障计时器完成且 FaultTime > 0.0 时,将 FaultAlarm 置位 |
设备在未受到控制的情况下意外退出某个状态(根据反馈) | 当故障计时器未计时且满足以下任一条件时,将 FaultAlarm 设置为真: CommandStatus 为假且 Device0State 为假 CommandStatus 为真且 Device1State 为假 |
满足以下任一条件时,FaultAlarm 设置为假:
- CommandStatus 为假且 Device0State 为真
- CommandStatus 为真且 Device1State 为真
- FaultTime
0
当 FaultAlarmLatch 为真时,无法将 FaultAlarm 设置为假,除非 FaultAlmUnlatch 为真且不存在任何故障。
模式报警条件
模式报警可提醒操作员已将设备置于操作员控制模式。仅当程序处于操作员控制下,尝试将设备状态从操作员的给定状态更改为其他状态时,模式报警才会启用。如果操作员将设备置于操作员控制模式并更改状态,报警不会启用。D2SD 指令将按照以下规则检查模式报警条件。
ModeAlarm | 条件 |
|---|---|
真 | ProgCommand n ProgCommandn-1 并且ProgCommand n CommandStatus |
假 | ProgCommand = CommandStatus 或者 设备处于超控、手控或程序控制模式 |
提供反馈
0.0 的浮点数
CommandStatus