离散 3 态设备 (Discrete 3-State Device, D3SD)
此信息适用于
CompactLogix
5370、ControlLogix
5570、Compact GuardLogix
5370、GuardLogix
5570、Compact GuardLogix
5380、CompactLogix
5380、ControlLogix
5580、GuardLogix
5580 和 ControlLogix 5590 控制器。离散 3 态设备 (D3SD) 指令控制有三种可能状态(如快/慢/停或正向/停止/反向)的离散设备。
可用语言
梯形图
此指令不可用于梯形图逻辑中。
功能块

结构化文本
D3SD(D3SD_tag)
操作数
结构化文本
操作数 | 类型 | 格式 | 说明 |
D3SD 标签 (tag) | DISCRETE_3STATE | 结构 | D3SD 结构 |
有关结构化文本中表达式语法的详细信息,请参见
结构化文本语法
部分。功能块
操作数 | 类型 | 格式 | 说明 |
D3SD 标签 (tag) | DISCRETE_3STATE | 结构 | D3SD 结构 |
DISCRETE_3STATE 结构
输入参数 | 数据类型 | 说明 |
|---|---|---|
EnableIn | BOOL | 启用输入。如果为假,指令不会执行,也不会更新输出。 默认值为真。 |
Prog0Command | BOOL | 程序状态 0 命令。此输入用于确定设备处于程序控制模式时的设备状态。如果为真,设备受控进入状态 0。 默认值为假。 |
Prog1Command | BOOL | 程序状态 1 命令。此输入用于确定设备处于程序控制模式时的设备状态。如果为真,设备受控进入状态 1。 默认值为假。 |
Prog2Command | BOOL | 程序状态 2 命令。此输入用于确定设备处于程序控制模式时的设备状态。如果为真,设备受控进入状态 2。 默认值为假。 |
Oper0Req | BOOL | 操作员状态 0 请求。设备处于操作员控制模式时,通过操作员界面设置为真,将设备置为状态 0。 默认值为假。 |
Oper1Req | BOOL | 操作员状态 1 请求。设备处于操作员控制模式时,通过操作员界面设置为真,将设备置为状态 1。 默认值为假。 |
Oper2Req | BOOL | 操作员状态 2 请求。设备处于操作员控制模式时,通过操作员界面设置为真,将设备置为状态 2。 默认值为假。 |
State0Perm | BOOL | 状态 0 选通。除非在手控或超控模式下,否则此输入必须为真才能使设备进入状态 0。如果设备已经处于状态 0,则此输入无效。 默认值为真。 |
State1Perm | BOOL | 状态 1 选通。除非在手控或超控模式下,否则此输入必须为真才能使设备进入状态 1。如果设备已经处于状态 1,则此输入无效。 默认值为真。 |
State2Perm | BOOL | 状态 2 选通。除非在手控或超控模式下,否则此输入必须为真才能使设备进入状态 2。如果设备已经处于状态 2,则此输入无效。 默认值为真。 |
FB0 | BOOL | 可供指令使用的第一个反馈输入。 默认值为假。 |
FB1 | BOOL | 可供指令使用的第二个反馈输入。 默认值为假。 |
FB2 | BOOL | 可供指令使用的第三个反馈输入。 默认值为假。 |
FB3 | BOOL | 可供指令使用的第四个反馈输入。 默认值为假。 |
HandFB0 | BOOL | 手控反馈状态 0。该输入来自现场手控/关/自动站,用于显示所请求的现场设备状态。为真时,表示请求现场设备进入状态 0;为假时,表示请求现场设备进入其他某种状态。 默认值为假。 |
HandFB1 | BOOL | 手控反馈状态 1。该输入来自现场手控/关/自动站,用于显示所请求的现场设备状态。为真时,表示请求现场设备进入状态 1;为假时,表示请求现场设备进入其他某种状态。 默认值为假。 |
HandFB2 | BOOL | 手控反馈状态 2。该输入来自现场手控/关/自动站,用于显示所请求的现场设备状态。为真时,表示请求现场设备进入状态 2;为假时,表示请求现场设备进入其他某种状态。 默认值为假。 |
FaultTime | REAL | 故障时间值。以秒为单位配置时间值以使设备达到最新给定的状态。设置 FaultTime = 0 可禁用故障计时器。如果该值无效,该指令会假定该值等于零并置位 Status 中的相应位。 有效值 = 任何 0.0 的浮点数默认值 = 0.0 |
FaultAlarmLatch | BOOL | 故障报警锁定输入。此参数和 FaultAlarm 同时为真时,将锁定 FaultAlarm。要启用 FaultAlarm,将 FaultAlmUnlatch 设置为真或将 FaultAlarmLatch 设置为假。 默认值为假。 |
FaultAlmUnLatch | BOOL | 故障报警启用输入。在 FaultAlarmLatch 置位时将此输入设置为真可启用 FaultAlarm。指令将该输入设置为假。 默认值为假。 |
OverrideOnInit | BOOL | 初始化时超控请求。如果该位为真,则在指令首次扫描期间,指令将进入操作员控制模式,且 Override 为真,Hand 为假。如果 ProgHandReq 为真,则 Override 设置为假,Hand 设置为真。 默认值为假。 |
OverrideOnFault | BOOL | 故障时超控请求。如果希望设备在发生故障报警时转为超控模式并进入超控状态,将此值设置为真。消除故障报警后,指令进入操作员控制模式。 默认值为假。 |
Out0State0 | BOOL | 输出 0 状态 0 输入。该值用于确定设备处于状态 0 时输出 0 的值。 默认值为假。 |
Out0State1 | BOOL | 输出 0 状态 1 输入。该值用于确定设备处于状态 1 时 Output0 的值。 默认值为假。 |
Out0State2 | BOOL | 输出 0 状态 2 输入。该值用于确定设备处于状态 2 时 Output0 的值。 默认值为假。 |
Out1State0 | BOOL | 输出 1 状态 0 输入。该值用于确定设备处于状态 0 时 Output1 的值。 默认值为假。 |
Out1State1 | BOOL | 输出 1 状态 1 输入。该值用于确定设备处于状态 1 时 Output1 的值。 默认值为假。 |
Out1State2 | BOOL | 输出 1 状态 2 输入。该值用于确定设备处于状态 2 时 Output1 的值。 默认值为假。 |
Out2State0 | BOOL | 输出 2 状态 0 输入。该值用于确定设备处于状态 0 时 Output2 的值。 默认值为假。 |
Out2State1 | BOOL | 输出 2 状态 1 输入。该值用于确定设备处于状态 1 时 Output2 的值。 默认值为假。 |
Out2State2 | BOOL | 输出 2 状态 2 输入。该值用于确定设备处于状态 2 时 Output2 的值。 默认值为假。 |
OverrideState | DINT | 超控状态输入。设置此值来指示处于超控模式时的设备状态。 2 = 设备进入状态 2 1 = 设备应进入状态 1 0 = 设备应进入状态 0 无效值会将 Status 中的相应位置位。 有效值 = 0 至 2 默认值 = 0 |
FB0State0 | BOOL | 反馈 0 状态 0 输入。该值用于确定设备处于状态 0 时 FB0 的预期值。 默认值为假。 |
FB0State1 | BOOL | 反馈 0 状态 1 输入。该值用于确定设备处于状态 1 时 FB0 的预期值。 默认值为假。 |
FB0State2 | BOOL | 反馈 0 状态 2 输入。该值用于确定设备处于状态 2 时 FB0 的预期值。 默认值为假。 |
FB1State0 | BOOL | 反馈 1 状态 0 输入。该值用于确定设备处于状态 0 时 FB1 的预期值。 默认值为假。 |
FB1State1 | BOOL | 反馈 1 状态 1 输入。该值用于确定设备处于状态 1 时 FB1 的预期值。 默认值为假。 |
FB1State2 | BOOL | 反馈 1 状态 2 输入。该值用于确定设备处于状态 2 时 FB1 的预期值。 默认值为假。 |
FB2State0 | BOOL | 反馈 2 状态 0 输入。该值用于确定设备处于状态 0 时 FB2 的预期值。 默认值为假。 |
FB2State1 | BOOL | 反馈 2 状态 1 输入。该值用于确定设备处于状态 1 时 FB2 的预期值。 默认值为假。 |
FB2State2 | BOOL | 反馈 2 状态 2 输入。该值用于确定设备处于状态 2 时 FB2 的预期值。 默认值为假。 |
FB3State0 | BOOL | 反馈 3 状态 0 输入。该值用于确定设备处于状态 0 时 FB3 的预期值。 默认值为假。 |
FB3State1 | BOOL | 反馈 3 状态 1 输入。该值用于确定设备处于状态 1 时 FB3 的预期值。 默认值为假。 |
FB3State2 | BOOL | 反馈 3 状态 2 输入。该值用于确定设备处于状态 2 时 FB3 的预期值。 默认值为假。 |
ProgProgReq | BOOL | 程序发出的程序控制请求。由用户程序设置为真可请求程序控制模式。如果 ProgOperReq 为真,则忽略该值。若此参数保持为真,并且 ProgOperReq 保持为假,会将指令锁定在程序控制模式。 默认值为假。 |
ProgOperReq | BOOL | 程序发出的操作员控制请求。由用户程序设置为真可请求操作员控制模式。若将此参数保持为真,会将该指令锁定在操作员控制模式。 默认值为假。 |
ProgOverrideReq | BOOL | 程序超控模式请求。由用户程序设置为真可请求进入超控模式。如果 ProgHandReq 为真,则忽略该值。 默认值为假。 |
ProgHandReq | BOOL | 程序手控模式请求。由用户程序设置为真可请求进入手控模式。 默认值为假。 |
OperProgReq | BOOL | 操作员发出的程序控制请求。由操作员界面设置为真以请求程序控制模式。指令将该输入设置为假。 默认值为假。 |
OperOperReq | BOOL | 操作员发出的操作员控制请求。由操作员界面设置为真可请求操作员控制模式。指令将该输入设置为假。 默认值为假。 |
ProgValueReset | BOOL | 将程序控制值复位。该参数为真时,每次执行指令时,所有程序请求输入都将设置为假。 默认值为假。 |
输出参数 | 数据类型 | 说明 |
|---|---|---|
EnableOut | BOOL | 指示指令是否处于启用状态。 |
Out0 | BOOL | 指令的第一个输出。 |
Out1 | BOOL | 指令的第二个输出。 |
Out2 | BOOL | 指令的第三个输出。 |
Device0State | BOOL | 设备状态 0 输出。设备受控进入状态 0 且反馈表明设备确实处于状态 0 时为真。 |
Device1State | BOOL | 设备状态 1 输出。设备受控进入状态 1 且反馈表明设备确实处于状态 1 时为真。 |
Device2State | BOOL | 设备状态 2 输出。设备受控进入状态 2 且反馈表明设备确实处于状态 2 时为真。 |
Command0Status | BOOL | 设备状态 0 命令状态。设备受控进入状态 0 时为真;设备受控进入其他状态时为假。 |
Command1Status | BOOL | 设备状态 1 命令状态。设备受控进入状态 1 时为真;设备受控进入其他状态时为假。 |
Command2Status | BOOL | 设备状态 2 命令状态。设备受控进入状态 2 时为真;设备受控进入其他状态时为假。 |
FaultAlarm | BOOL | 故障报警输出。如果设备受控进入新状态,但经过 FaultTime 后反馈没有表明设备确实达到新状态,则此参数为真。此外,如果在达到给定状态后,反馈突然表明设备不再处于给定状态,该参数也会设置为真。 |
ModeAlarm | BOOL | 模式报警输出。如果设备处于操作员控制模式,ProgxCommand 输入请求了不同于操作员当前给定的状态,此参数为真。此报警旨在提醒已将设备保留为操作员控制模式。 |
ProgOper | BOOL | 程序/操作员控制指示器。在程序控制模式下为真。在操作员控制模式下为假。 |
Override | BOOL | 超控模式。当设备处于超控模式时为真。 |
Hand | BOOL | 手控模式。当设备处于手控模式时为真。 |
Status | DINT | 功能块的状态。 |
InstructFault (Status.0) | BOOL | 该指令检测到以下执行错误之一。这不是轻微或严重的控制器错误。检查其他状态位以确定发生的情况。 |
FaultTimeInv (Status.1) | BOOL | FaultTime 值无效。指令将设置 FaultTime = 0。 |
OverrideStateInv (Status.2) | BOOL | 超控值超出范围。它可以防止指令进入超控状态。 |
ProgCommandInv (Status.3) | BOOL | 多个程序状态命令位同时置位。请参见“程序控制模式下的给定状态”部分。 |
OperReqInv (Status.4) | BOOL | 多个操作员状态请求位同时置位。请参见“程序控制模式下的给定状态”部分。 |
HandCommandInv (Status.5) | BOOL | 多个手控反馈状态请求位同时置位。 |
说明
D3SD 指令控制有三种可能状态(如快/慢/停或正向/停止/反向)的离散设备。具备这种特性的典型离散设备包括进料系统和可逆电机。
影响数学状态标志
否
严重/轻微故障
没有特定于此指令的故障。有关操作数相关的故障,请参阅 通用属性。
执行
功能块
条件/状态 | 执行的操作 |
|---|---|
预扫描 | EnableIn 和 EnableOut 位设置为假。 |
Tag.EnableIn 为假 | EnableIn 和 EnableOut 位设置为假。 |
Tag.EnableIn 为真 | EnableIn 和 EnableOut 位设置为真。 指令执行 |
指令首次运行 | 将 ProgOper 设置为操作员模式。 将 Command0Status 设置为真。 将 Command1Status 设置为假。 将 Command2Status 设置为假。 |
指令首次扫描 | 故障计时器清零。 ModeAlarm 设置为假。 将所有操作员请求输入清零。 如果 ProgValueReset 为真,则将所有程序请求输入清零。 当 OverrideOnInit 为真时,ProgOper 设置为假(操作员控制模式)。 如果 ProgHandReq 为假并且 OverrideOnInit 为真,则 Hand 设置为假且 Override 设为真(超控模式)。 如果 ProgHandReq 为真,则 Hand 设为真且 Override 设置为假(手控模式)。 |
后扫描 | EnableIn 和 EnableOut 位设置为假。 |
结构化文本
在结构化文本中,EnableIn 在普通扫描期间始终为真。因此,如果指令处于由逻辑激活的控制路径中,指令将会执行。
条件/状态 | 执行的操作 |
|---|---|
预扫描 | 请参见“功能块”表中的“预扫描”行。 |
正常执行 | 请参见“功能块”表中的“Tag.EnableIn 为真”行。 |
后扫描 | 请参见“功能块”表中的“后扫描”行。 |
示例
D3SD 指令通常用于控制三态设备,如快/慢/关进料系统。在此示例中,D3SD 指令用于控制由一对电磁阀组成的进料系统,进而控制将植物油加入批处理槽这一过程。其中一个阀门位于连接到批处理槽中的大口径进料管上,另一个阀门则并排放置在小口径进料管上。最初添加植物油时,D3SD 指令受控进入快速进料状态(状态 2),此时两个阀门均打开。当添加的植物油接近目标量时,D3SD 指令受控进入慢速进料状态(状态 1),即“大阀门”关闭、“小阀门”保持打开转改。达到目标油量后,D3SD 指令受控进入停止状态(状态 0)并且关闭上述两个阀门。只要 D3SD 指令处于程序控制模式,这两个阀门就会根据 CloseOilFeed、SlowOilFeed 和 FastOilFeed 输入的值相应地打开。操作员也可以根据需要对进料系统采取操作员控制模式。本例中的电磁阀配有限位开关,用于指示阀门何时完全关闭或打开。这些开关与 FB0、FB1、FB2 和 FB3 反馈输入相连。因此,如果电磁阀未在组态的 FaultTime 内达到给定状态,D3SD 指令会生成 FaultAlarm。
功能块

结构化文本
OilFeedController.Prog0Command := ClosedOilFeed;
OilFeedController.Prog1Command := SlowOilFeed;
OilFeedController.Prog2Command := FastOilFeed;
OilFeedController.FB0 := SmallOilValveClosed;
OilFeedController.FB1 := SmallOilValveOpened;
OilFeedController.FB2 := LargeOilValveClosed;
OilFeedController.FB3 := LargeOilValveOpened;
D3SD(OilFeedController);
SmallOilValve := OilFeedController.Out0;
LargeOilValve := OilFeedController.Out1;
在程序控制与操作员控制之间切换
下图显示了 D3SD 指令在程序控制与操作员控制模式之间进行切换的方式。

(1) 当 ProgOperReq 为真时,指令保持在操作员控制模式。
程序控制模式下的给定状态
下表所示为 D3SD 指令在程序控制模式下的工作情况。
Prog0 Command | Prog1 命令 | Prog2 命令 | State0 Perm | State1 Perm | State2 Perm | 说明 |
|---|---|---|---|---|---|---|
假 | 假 | 真 | 真/假 | 真/假 | 真 | Command0Status 设置为假 Command1Status 设置为假 Command2Status 设置为真 |
假 | 真 | 假 | 真/假 | 真 | 真/假 | Command0Status 设置为假 Command1Status 设置为真 Command2Status 设置为假 |
真 | 假 | 假 | 真 | 真/假 | 真/假 | Command0Status 设置为真 Command1Status 设置为假 Command2Status 设置为假 |
如果多个程序命令输入为真:
- 指令会将 Status 中的相应位置位
- 如果 Override 和 Hand 设置为假,指令将保持前一状态。
操作员控制模式下的给定状态
下表所示为 D3SD 指令在操作员控制模式下的工作情况。
Oper0Req | Oper1Req | Oper2Req | State0 Perm | State1 Perm | State2 Perm | 说明 |
|---|---|---|---|---|---|---|
假 | 假 | 真 | 真/假 | 真/假 | 真 | Command0Status 设置为假 Command1Status 设置为假 Command2Status 设置为真 |
假 | 真 | 假 | 真/假 | 真 | 真/假 | Command0Status 设置为假 Command1Status 设置为真 Command2Status 设置为假 |
真 | 假 | 假 | 真 | 真/假 | 真/假 | Command0Status 设置为真 Command1Status 设置为假 Command2Status 设置为假 |
如果多个操作员命令输入为真:
- 指令会将 Status 中的相应位置位
- 如果 Override 和 Hand 设置为假,指令将保持前一状态。
每次执行指令后,指令都会执行以下操作:
- 将所有操作员请求输入清零
- 如果 ProgValueReset 为真,则将所有的程序请求输入设置为假。
手控模式或超控模式
下表说明 D3SD 指令确定以手控模式还是超控模式工作的方式。
ProgHandReq | ProgOverrideReq | FaultAlarm 和 OverrideOnFault | 说明 |
|---|---|---|---|
真 | 真/假 | 真/假 | 手控模式 Hand 设置为 true Override 清除为 false |
假 | 真 | 真/假 | 超控模式 Hand 清除为 false Override 设置为 true |
假 | 真/假 | 真 | 超控模式 Hand 清除为 false Override 设置为 true |
当 Override 置位时,超控模式的优先级将高于程序控制和操作员控制模式。下表说明了超控模式影响给定状态的方式。
覆盖 | 超控状态 | 说明 |
|---|---|---|
真 | 2 | Command0Status 设置为假 Command1Status 设置为假 Command2Status 设置为真 |
真 | 1 | Command0Status 设置为假 Command1Status 设置为真 Command2Status 设置为假 |
真 | 0 | Command0Status 设置为真 Command1Status 设置为假 Command2Status 设置为假 |
如果 OverrideState 无效,指令会将 Status 中的相应位置位,并且不会进入超控状态。
当 Hand 为真时,手控模式的优先级将高于程序控制和操作员控制模式。下表说明了手控模式影响给定状态的方式。
手控 | HandFB0 | HandFB1 | HandFB2 | 说明 |
|---|---|---|---|---|
真 | 假 | 假 | 真 | Command0Status 设置为假 Command1Status 设置为假 Command2Status 设置为真 |
真 | 假 | 真 | 假 | Command0Status 设置为假 Command1Status 设置为真 Command2Status 设置为假 |
真 | 真 | 假 | 假 | Command0Status 设置为真 Command1Status 设置为假 Command2Status 设置为假 |
如果多个 HandFB 输入为真,指令会将 Status 中的相应位置位;如果 Hand 为真,指令将保持前一状态。
输出状态
D3SD 的输出状态取决于受控状态的状态。
CommandStatus | 输出状态 |
|---|---|
Command0Status 为真 | Out0 = Out0State0 Out1 = Out1State0 Out2 = Out2State0 |
Command0Status 为真且 FB0 = FB0State0 且 FB1 = FB1State0 且 FB2 = FB2State0 且 FB3 = FB3State0 | 停止故障计时器并将其清零。 Device0State 设置为真 |
Command1Status 为真 | Out0 = Out0State1 Out1 = Out1State1 Out2 = Out2State1 |
Command1Status 为真 FB0 = FB0State1 且 FB1 = FB1State1 且 FB2 = FB2State1 且 FB3 = FB3State1 | 停止故障计时器并将其清零。 Device1State 设置为真 |
Command2Status 为真 | Out0 = Out0State2 Out1 = Out1State2 Out2 = Out2State2 |
Command2Status 为真且 FB0 = FB0State2 且 FB1 = FB1State2 且 FB2 = FB2State2 且 FB3 = FB3State2 | 停止故障计时器并将其清零。 Device2State 设置为真 |
故障报警条件
D3SD 指令将检查以下故障报警条件。
产生故障报警条件的原因 | 规则 |
|---|---|
设备状态受控进行更改,但反馈并未指示在 FaultTime 内确实达到目标状态 | 当 Command0Status n ![]() n-1 或 Command1Statusn Command1Statusn-1 或 Command2Statusn Command2Statusn-1 时启动故障计时器当故障计时器计时完成且 FaultTime > 0.0 时,将 FaultAlarm 置位 |
设备在未受到控制的情况下意外退出某个状态(根据反馈) | 当故障计时器未计时且满足以下任一条件时,将 FaultAlarm 设置为真: Command0Status 为真且 Device0State 为假 Command1Status 为真且 Device1State 为假 Command2Status 为真且 Device2State 为假 |
如果不存在任何故障,则满足以下任一条件后,FaultAlarm 将设置为假:
- Command0Status 为真且 Device0State 为真
- Command1Status 为真且 Device1State 为真
- Command2Status 为真且 Device2State 为真
- FaultTime
0
当 FaultAlarmLatch 为真时,无法将 FaultAlarm 设置为假,除非 FaultAlmUnlatch 为真且不存在任何故障。
模式报警条件
模式报警可提醒操作员已将设备置于操作员控制模式。仅当程序处于操作员控制下,尝试将设备状态从操作员的给定状态更改为其他状态时,模式报警才会启用。如果操作员将设备置于操作员控制模式并更改状态,报警不会启用。D3SD 指令将使用以下规则检查模式报警条件。
ModeAlarm 为 | 条件 |
|---|---|
真 | Prog2Command Prog2Commandn-1 和 Prog2Command Command2Status 或 Prog1Command Prog1Commandn-1 和 Prog1Command Command1Status 或 Prog0Command Prog1Commandn-1 和 Prog0Command Command0Status |
假 | Prog2Command = Command2Status 和 Prog1Command = Command1Status 且 Prog0Command = Command0Status 或 设备处于超控、手控或程序控制模式 |
提供反馈
0.0 的浮点数
Command1Status