使用快照进行布尔逻辑处理(PBL)

此信息适用于 CompactLogix 5380P、ControlLogix 5580P 和 ControlLogix 5590P 控制器。
带快照的过程布尔逻辑 (Process Boolean Logic, PBL) 指令最多可执行八个可配置布尔逻辑门。可用门类型包括:与 (AND)、或 (OR)、异或 (XOR)、置位/重置、选择和多数。每个门可提供多达四个输入条件,可使用配置设置将这些条件单独取反。
PBL 指令可以记录其当前状态:
  • 输出状态更改后。
  • 打开操作员或程序命令。
  • 基于逻辑环回输入。
可用语言
梯形图
PAO_FeedbackAlarmConditions1
功能块图
PAO_FeedbackAlarmConditions1
结构化文本
PBL(PBL tag);
操作数
重要提示: 以下情况下会导致运行出现意外:
  • 输出标签操作数被覆盖。
  • 结构操作数的成员被覆盖。
  • 除非另外指定,否则结构操作数由多条指令共用。
指令中混用数据类型时,需遵从相关的数据转换规则。请参阅 数据转换
配置操作数
操作数
类型
格式
说明
PBL
P_BOOLEAN_LOGIC
标签
指令正确运行所需的数据结构。
P_BOOLEAN_LOGIC 结构
公共成员是可通过编程方式访问的标准可见标签成员。专用隐藏成员用于 HMI 面板中,无法通过编程方式访问。专用成员位于公共成员后面的单独表中。
公共输入成员
数据类型
说明
EnableIn
BOOL
启用输入。梯形图:对应于梯级条件。
默认值为真。
Inp_InitializeReq
BOOL
1 = 请求初始化指令。指令通常在首次运行时进行初始化。需要重新初始化时使用此请求。该指令自动清除该操作数。
默认值为真。
Inp_0
BOOL
逻辑输入 0。
默认值为假。
Inp_1
BOOL
逻辑输入 1。
默认值为假。
Inp_2
BOOL
逻辑输入 2。
默认值为假。
Inp_3
BOOL
逻辑输入 3。
默认值为假。
Inp_4
BOOL
逻辑输入 4。
默认值为假。
Inp_5
BOOL
逻辑输入 5。
默认值为假。
Inp_6
BOOL
逻辑输入 6。
默认值为假。
Inp_7
BOOL
逻辑输入 7。
默认值为假。
Inp_Hold
BOOL
1 = 在快照中保持之前的状态;0 = 将实时状态传递给快照。
默认值为假。
Inp_Reset
BOOL
1 = 重置快照锁定,显示实时状态。
默认值为假。
Cfg_UseInpHold
BOOL
1 = 使用 Inp_Hold 捕获状态;0 = 使用 Cmds 或输出转换进行捕获。
默认值为假。
Cfg_UsePCmd
BOOL
1 = 在 PCmd_Snap 0 --> 1(边沿)启用快照。
默认值为真。
Cfg_UseOCmd
BOOL
1 = 在 OCmd_Snap 0 --> 1(边沿)启用快照。
默认值为真。
Cfg_UseOut01
BOOL
1 = 在输出 0 --> 1(上升沿)启用快照。
默认值为真。
Cfg_UseOut10
BOOL
1 = 在输出 1 --> 0(下降沿)启用快照。
默认值为假。
Cfg_TimestampOnSnap
BOOL
1 = 发生快照时生成时戳。
默认值为假。
Cfg_SnapOver
BOOL
1 = 新快照覆盖而不重置,0 = 保存第一个快照直到重置。
默认值为假。
Cfg_HasMoreObj
BOOL
1 = 通知 HMI 可使用包含更多信息的对象。
默认值为假。
Cfg_HasNav
SINT
设置位以指示启用的导航按钮。
默认值为 2#0000_0000。
Cfg_OnDly
REAL
输出打开 (ON) 延迟时间(秒)。有效值 = 0.0 至 2147483.0
默认值为 0.0。
Cfg_OffDly
REAL
输出关闭 (OFF) 延迟时间(秒)。有效值 = 0.0 至 2147483.0
默认值为 0.0。
Cfg_CnfrmReqd
SINT
需要操作员确认命令。表示需要命令确认的类型。0 = 无,1 = 需要命令确认,2 = 需要执行者电子签名,3 = 需要执行者和审批者电子签名。
默认值为 0。
PCmd_Snap
BOOL
用于在快照中捕获输入、门状态的程序命令。
默认值为假。
PCmd_Reset
BOOL
用于重置(重新设定)快照锁定的程序命令。
默认值为假。
公共输出成员
数据类型
说明
EnableOut
BOOL
启用输出。此输出状态始终反映 EnableIn 输入状态。
Out_Live
BOOL
延迟后的条件逻辑输出(结果)。
Out_Snap
BOOL
快照中的条件逻辑输出(结果)。
Val_DlyPctLive
DINT
输出 OnDelay 或 OffDelay 百分比完成:实时。
Val_DlyPctSnap
DINT
输出 OnDelay 或 OffDelay 百分比完成:快照。
Val_SnapInit
DINT
快照发起者:1 = OCmd,2 = PCmd,3 = Out 0-->1,4 = Out 1-->0,5 = Inp_Hold。
Sts_Initialized
BOOL
1 = 指令已初始化。使用 Inp_InitializeReq 重新初始化。
Sts_Snapped
BOOL
1 = 已触发快照,0 = 显示实时状态的快照。
Sts_RdyReset
BOOL
1 = 锁定的报警或解除条件待重置。
Sts_InpLive
SINT
实时输入状态位:.0 到 .7 = Inp_0 到 Inp_7。
Sts_GateLive
SINT
实时门结果状态位:.0 到 .7 = 门 0 到 7。
Sts_InpSnap
SINT
输入状态位快照:.0 到 .7 = Inp_0 到 Inp_7。
Sts_GateSnap
SINT
门结果状态位快照:.0 到 .7 = 门 0 到 7。
Sts_GateSrc1Live
SINT
每个门的源 1 的实时线状态(位# = 门#)。
Sts_GateSrc2Live
SINT
每个门的源 2 的实时线状态(位# = 门#)。
Sts_GateSrc3Live
SINT
每个门的源 3 的实时线状态(位# = 门#)。
Sts_GateSrc4Live
SINT
每个门的源 4 的实时线状态(位# = 门#)。
Sts_GateSrc1Snap
SINT
每个门的源 1 的线状态快照(位# = 门#)。
Sts_GateSrc2Snap
SINT
每个门的源 2 的线状态快照(位# = 门#)。
Sts_GateSrc3Snap
SINT
每个门的源 3 的线状态快照(位# = 门#)。
Sts_GateSrc4Snap
SINT
每个门的源 4 的线状态快照(位# = 门#)。
Sts_OutInvertLive
BOOL
在逆变器之后但在 TON/TOF 定时器之前输出。
Sts_OutInvertSnap
BOOL
在逆变器之后但在 TON/TOF 之前的输出快照。
Sts_Err
BOOL
1 = 配置出错:请参阅明细位 (Sts_Errxxx) 以查找原因。
Sts_ErrGateFunc
SINT
1 = 每个门的函数代码中的错误(使用 0 到 6)。
Sts_ErrGateSrcPtr
SINT
1 = 每个门的源指针中的错误(使用 0 到 15)。
Sts_ErrGateSrcMask
SINT
1 = 每个门的掩码(使用的源)配置中的错误(数量、选择)。
Sts_ErrOutSrcPtr
BOOL
1 = 输出的源指针中的错误(使用 0 到 15)。
Sts_ErrTimer
BOOL
1 = 输出的打开延迟或关闭延迟预设中的错误(使用 0.0 到 2147483.0)。
专用输入成员
数据类型
说明
Cfg_GateFunc
DINT[8]
门 M 的函数代码(1 = 与 (AND)、2 = 或 (OR)、3 = 异或 (XOR)、4 = 2oo3、5 = 置位-重置)。
Cfg_GateSrc1Invert
SINT
门 M 源 #1 取反(M 按位)(1 = 取反)。
默认值为 2#0000_0000。
Cfg_GateSrc1Mask
SINT
门 M 源 #1 已使用(M 按位)(1 = 已使用)。
默认值为 2#0000_0000。
Cfg_GateSrc1Ptr
DINT[8]
指向门 M 源 #1 的指针(0...7 = 输入,8...15 = 门输出)。
Cfg_GateSrc2Invert
SINT
门 M 源 #2 取反(M 按位)(1 = 取反)。
默认值为 2#0000_0000。
Cfg_GateSrc2Mask
SINT
门 M 源 #2 已使用(M 按位)(1 = 已使用)。
默认值为 2#0000_0000。
Cfg_GateSrc2Ptr
DINT[8]
指向门 M 源 #2 的指针(0...7 = 输入,8...15 = 门输出)。
Cfg_GateSrc3Invert
SINT
门 M 源 #3 取反(M 按位)(1 = 取反)。
默认值为 2#0000_0000。
Cfg_GateSrc3Mask
SINT
门 M 源 #3 已使用(M 按位)(1 = 已使用)。
默认值为 2#0000_0000。
Cfg_GateSrc3Ptr
DINT[8]
指向门 M 源 #3 的指针(0...7 = 输入,8...15 = 门输出)。
Cfg_GateSrc4Invert
SINT
门 M 源 #4 取反(M 按位)(1 = 取反)。
默认值为 2#0000_0000。
Cfg_GateSrc4Mask
SINT
门 M 源 #4 已使用(M 按位)(1 = 已使用)。
默认值为 2#0000_0000。
Cfg_GateSrc4Ptr
DINT[8]
指向门 M 源 #4 的指针(0...7 = 输入,8...15 = 门输出)。
Cfg_HasNav
SINT
设置位以指示启用的导航按钮。
默认值为 2#0000_0000。
Cfg_OutSrcInvert
BOOL
输出源(最短持续时间计时器之前)取反(1 = 取反)。
默认值为假。
Cfg_OutSrcPtr
DINT
输出的源位(0...7 = 输入,8...15 = 门)。
默认值为 0。
HMI_Const
SINT[9]
常量(用于 HMI 参数间接寻址)。
OCmd_Reset
BOOL
用于重置(重新设定)快照锁定的操作员命令。
默认值为假。
OCmd_Snap
BOOL
用于在快照中捕获输入、门状态的操作员命令。
默认值为假。
专用输出成员
数据类型
说明
ORdy_Reset
BOOL
1 = OCmd_Reset 就绪(启用按钮)。
ORdy_Snap
BOOL
1 = OCmd_Snap 就绪(启用按钮)。
Val_LastGate
DINT[8]
使用此门结果的上一个门引脚(0 = 未使用,1...32 = 门,33 = 输出)。
Val_LastInp
DINT[8]
使用此输入的上一个门引脚(0 = 未使用,1...32 = 门,33 = 输出)。用于动画。
Val_SnapTimestamp
DINT[7]
快照时戳 [0] = 年,[1] = 月,[2] = 日,[3] = 小时,[4] = 分钟,[5] = 秒,[6] = 微秒。
操作
PBL 指令:
  • 最多提供八个布尔输入和八个逻辑门。
  • 每个门都有四个输入。可以启用或禁用每个输入,并且可以是正常输入,也可以是取反输入。每个启用的门输入都可链接到源,源是指令输入或之前门的结果
  • 使用以下一种方法配置八个门:
    • 逻辑与 (AND):如果配置了取反后所有已启用的门输入为真,则选门的输出为真。与 (AND) 门最多可启用四个输入。
    • 逻辑或 (OR):如果配置了取反后任何已启用的门输入为真,则门的输出为真。或 (OR) 门最多可启用四个输入。
    • 逻辑异或 (XOR):如果配置了取反后奇数个已启用的门输入为真,则门的输出为真。异或 (XOR) 门最多可启用四个输入。
    • 置位-重置:如果门的一个置位输入为真,则门的输出设置为真,如果门的一个重置输入为真,则设置为假。门的四个输入如下:
      输入 1:置位 (SET)(优先)
      输入 2:重置 (RESET)(优先)
      输入 3:置位 (SET)
      输入 4:RESET
    • 选择:如果输入 3 为假,则输入 1 的状态传递给门输出。如果输入 3 为真,则输入 2 的状态传递给门输出。选择门必须启用输入 3,启用输入 1 和输入 2 之一或全部。
    • 多数(将“N 取 M”标记为“MooN”):如果配置了取反后门的多数输入为真,则门的输出设置为真。多数指的是 2 个中的 2 个、3 个中的 2 个或 4 个中的 3 个。多数门可以启用两个、三个或四个输入。
  • 提供快照功能,用于捕获指令状态供以后使用直至重置:所有输入状态、门状态和输出状态。快照功能捕获当逻辑触发或关闭设备时逻辑的状态,即使逻辑状态在关闭后发生更改也是如此。快照可选择以年、月、日、小时、分钟、秒或毫秒为单位根据控制器时钟记录时戳。
  • 提供选项来启用以下快照触发条件:
    • 采用操作员命令捕获快照 (OCmd_Snap)。
    • 采用程序命令捕获快照 (PCmd_Snap)。
    • 当输出从 0 转换为 1 时捕获快照。
    • 当输出从 1 转换为 0 时捕获快照。
    • 当回路输入为真时捕获上一次扫描状态的快照。此功能在 PBL 输出条件为下游 PINTLK 块中的先出条件时捕获快照。PINTLK 指令中的先出指示可以环回到 PBL 指令的 Inp_Hold 输入以在快照中保持上一次扫描状态(包括上一次扫描的时戳)。
实现
在以下情况下使用 PBL 指令:
  • 项目所需的互锁或许可条件比 PINTLK(互锁)或 PPERM(许可)Add-On 自定义指令提供的简单 OR-ing 或 AND-ing 复杂。
  • 项目需要一些可通过联机 HMI 重新配置的布尔(组合)逻辑,或者需要快照功能以使用时戳保存逻辑状态副本。
  • 项目包含 PINTLK 和 PPERM Add-On 自定义指令提供的 16 个以上的互锁条件或许可条件,但是某些条件可以分组在一个标识下。例如,泵和电机(泵内侧轴承、泵外侧轴承、电机内侧承载和电机外侧轴承)的所有轴承过热信号可在 PBL 指令中一起进行或 (OR) 运算,结果作为单一轴承过热条件呈现给 PINTLK 指令。
在以下情况下,请勿使用此指令:
  • 项目需要可由 PINTLK 和 PPERM 指令直接处理的简单互锁和许可。这些指令可允许操作或使操作脱扣。
  • 项目需要超出 PBL Add-On 自定义指令功能或对时间极度敏感的逻辑。PBL 指令仅提供八个输入、八个门和一个输出,具有打开延迟和关闭延迟计时功能,并采用表驱动代码实现。以本机控制器语言使用硬编码逻辑。本机编程语言速度更快,所提供的功能超出 PBL 指令的功能。
下图展示了 PBL 指令的功能:
PAO_FeedbackAlarmConditions1
配置
最多可以使用以下标签配置八个门:
Cfg_GateFunc[M] - 此配置是定义门函数的数组。M = 门编号,0-7。
  • 1 = 逻辑与 (AND) 门
  • 2 = 逻辑或 (OR) 门
  • 3 = 逻辑异或 (XOR) 门
  • 4 = 大多数输出为真
  • 5 = 置位/重置
  • 6 = A/B 选择器
每个门都有四个输入引脚。使用此标签可以启用或禁用每个输入引脚:
Cfg_GateSrc#Mask:此配置是一个 SINT 值,用于以二进制格式屏蔽为该输入引脚启用的门 (0-7)。# = 输入引脚编号 (1-4)。如果掩码位为上限,则启用该特定输入引脚的门。
示例:
  • Cfg_GateSrc1Mask.0 = 1 门 0 的输入引脚 1 处于启用状态
  • Cfg_GateSrc2Mask.1 = 1 门 1 的输入引脚 2 处于启用状态
  • Cfg_GateSrc3Mask.3 = 1 门 3 的输入引脚 3 处于启用状态
  • Cfg_GateSrc4Mask.0 = 1 门 0 的输入引脚 4 处于启用状态
每个门输入引脚都可以是正常或取反。
Cfg_GateSrc#Invert:此配置是一个 SINT 值,用于使输入取反。# = 输入引脚编号 (1-4)。
示例:
  • Cfg_GateSrc1Invert.0 = 1,门 0 的输入引脚 1 取反。
  • Cfg_GateSrc2Invert.2 = 1,门 2 的输入引脚 2 取反。
  • Cfg_GateSrc3Invert.3 = 1,门 3 的输入引脚 3 取反
  • Cfg_GateSrc4Invert.6 = 1,门 6 的输入引脚 4 取反。
每个启用的门输入引脚都可链接到源,源是指令输入或之前门的结果。
Cfg_GateSrc#Ptr[M] - 此配置是定义每个门上的输入引脚源的数组。其中 # = 输入引脚编号 (1-4),M = 门编号 (0-7)。值 0-7 表示指令输入。值 8-15 表示之前门的结果。
小贴士: 一个门只能用作具有较高门值的另一门的输入。
示例:
  • Cfg_GateSrc1Ptr[0] = 2 表示 Inp_2 是在门 0 的引脚 1 上配置的。
  • Cfg_GateSrc2Ptr[0] = 3 表示 Inp_3 是在门 0 的引脚 2 上配置的。
  • Cfg_GateSrc3Ptr[2] = 8 表示门 0 的结果是在门 2 的引脚 3 上配置的。
  • Cfg_GateSrc4Ptr[7] = 12 表示门 4 的结果是在门 7 的引脚 4 上配置的。
使用以下标签配置输出:
  • Cfg_OutSrcPtr - 此配置确定哪个输入/门将作为输出。值 0-7 表示指令输入。值 8-15 表示门的结果。
  • Cfg_OutSrcInvert - 此配置确定输出是否取反。
HMI 字符串配置
配置 HMI 面板(FT 视图)和 Logix Designer 配置对话框的字符串。字符串将设置为标签项的扩展属性。仅配置 Logix Designer 中的字符串。
  • 说明
  • 图形符号的标签
  • 用于 HMI 面板调用的显示库
  • 指令名称
  • 区域名称
  • URL 链接
  • 0 状态和 1 状态的状态名称字符串
  • 更多信息
监控 PBL 指令
使用 PlantPAx 过程对象库中的操作员面板进行监控。
影响数学状态标志
编号
严重/轻微故障
没有特定于此指令的故障。请参见“数组索引编制”,了解关于数组索引故障的信息。
执行
梯形图
条件/状态
执行的操作
预扫描
重置输出打开延迟和关闭延迟计时器;清除快照时戳和数据;清除在控制器处于程序模式下接收到的任何命令。
指令首次运行
重置输出打开延迟和关闭延迟计时器;清除快照时戳和数据;清除在控制器处于程序模式下接收到的任何命令。
梯级输入条件为假
将输出设置为假(关闭),并重置输出打开延迟和关闭延迟计时器。
梯级输入条件为真
将梯级输出条件设置为梯级输入条件。
指令执行。
后扫描
梯级输出条件设置为假。
功能块图
条件/状态
执行的操作
预扫描
重置输出打开延迟和关闭延迟计时器;清除快照时戳和数据;清除在控制器处于程序模式下接收到的任何命令。
指令首次运行
重置输出打开延迟和关闭延迟计时器;清除快照时戳和数据;清除在控制器处于程序模式下接收到的任何命令。
指令首次扫描
请参阅“功能块图”表中的“指令首次运行”行。
EnableIn 为假
将输出设置为假(关闭),并重置输出打开延迟和关闭延迟计时器。
EnableIn 为真
EnableOut 设置为真。
指令执行。
后扫描
EnableIn 和 EnableOut 位设置为假。
结构化文本
在结构化文本中,EnableIn 在普通扫描期间始终为真。指令在处于由逻辑激活的控制路径中时执行。
条件/状态
执行的操作
预扫描
请参阅“功能块图”表中的“预扫描”行。
指令首次运行
请参阅“功能块图”表中的“指令首次运行”行。
EnableIn 为真
请参阅“功能块图”表中的“EnableIn 为真”行。
后扫描
请参阅“功能块图”表中的“后扫描”行。
示例
本示例使用 PBL 指令执行基于电机绕组温度的高级互锁逻辑。本示例导航参数设置以完全阐述示例。
在本示例中,电机带有三个 RTD,用于测量绕组温度。为防止绕组损坏,在以下情况下电机必须互锁:
  • 任何绕组温度都高于温度上上限。
  • 大部分绕组温度高于温度上限。
PBL 执行此功能。该逻辑的输出用于将电机的互锁馈给逻辑中的其他位置。
梯形图
PAO_FeedbackAlarmConditions1
功能块图
PAO_FeedbackAlarmConditions1
在本示例中,电机带有三个 RTD,用于测量绕组温度。为防止绕组损坏,如果三个绕组中的任意一个绕组高于温度上上限,或者大部分绕组温度高于温度上限,则必须将电机互锁。PBL 用于执行此功能。该逻辑的输出用于将电机的互锁馈给逻辑中的其他位置。
输入参数(Inp_0、Inp_1、Inp_2、Inp_3、Inp_4、Inp_5)与三个绕组温度输入的状态输出相连。本示例中使用了 PBL 的八个门 (0…7) 中的三个(1、5、6)。门 1 是三个上上限状态位的或 (OR)。门 5 检查大多数上限状态位是否为真。门 6 对门 1 和门 5 的输出执行或 (OR) 运算,以设置 PBL 的输出。
要设置门函数(门 1 和门 6 设置为或 (OR),门 5 设置为“多数”),请使用以下设置:
  • Cfg_GateFunc[1] = 2
  • Cfg_GateFunc[5] = 6
  • Cfg_GateFunc[6] = 2
门 1 设置为通过以下设置查看三个上上限状态输入(Inp_0、Inp_2 和 Inp_4):
  • Cfg_GateSrc1Mask.1 = 1, Cfg_GateSrc1Ptr[1] = 0
  • Cfg_GateSrc2Mask.1 = 1,Cfg_GateSrc2Ptr[1] = 2
  • Cfg_GateSrc3Mask.1 = 1, Cfg_GateSrc3Ptr[1] = 4
门 5 设置为通过以下设置查看三个上限状态输入(Inp_1、Inp_4 和 Inp_5):
  • Cfg_GateSrc1Mask.5 = 1, Cfg_GateSrc1Ptr[5] = 1
  • Cfg_GateSrc2Mask.5 = 1, Cfg_GateSrc2Ptr[5] = 3
  • Cfg_GateSrc3Mask.5 = 1, Cfg_GateSrc3Ptr[5] = 5
最后,门 6 设置为通过以下设置查看门 1 和门 5 的输出:
  • Cfg_GateSrc1Mask.6 = 1, Cfg_GateSrc1Ptr[6] = 9
  • Cfg_GateSrc2Mask.6 = 1, Cfg_GateSrc2Ptr[6] = 13
Cfg_OutSrcPtr 需要设置为 14 才能从门 6 获取输出并使其成为 PBL 块的输出 (Out_Live)。然后,打开延迟时间设置为 5 秒,以防止输出的虚假脱扣 (Cfg_OnDly = 5)。
最后,这些说明在面板上提供了文档。在本示例中,以下为说明设置:
  • Out_Live.@State0 = 正常 (OK)
  • Out_Live.@State1 = 已脱扣
  • Inp_0.@Label = 绕组 A 温度上上限
  • Inp_1.@Label = 绕组 A 温度上限
  • Inp_2.@Label = 绕组 B 温度上上限
  • Inp_3.@Label = 绕组 B 温度上限
  • Inp_4.@Label = 绕组 C 温度上上限
  • Inp_5.@Label = 绕组 C 温度上限
下图展示了该示例的功能:
PAO_FeedbackAlarmConditions1
结构化文本
TI1_P50.Inp_PVData := I_TE1_P50;
TI1_P50.Inp_PVUncertain := (CAF_117[12] OR Local_12_I_CH0Fault);
PAI(TI1_P50);
TI2_P50.Inp_PVData := I_TE2_P50;
TI2_P50.Inp_PVUncertain := (CAF_117[12] OR Local_12_I_CH1Fault);
PAI(TI2_P50);
TI3_P50.Inp_PVData := I_TE3_P50;
TI3_P50.Inp_PVUncertain := (CAF_117[12] OR Local_12_I_CH2Fault);
PAI(TI3_P50);
TI1_P50.Sts_HiHi := NG_PBL.Inp_0;
TI1_P50.Sts_Hi := NG_PBL.Inp_1;
TI2_P50.Sts_HiHi := NG_PBL.Inp_2;
TI2_P50.Sts_Hi := NG_PBL.Inp_3;
TI3_P50.Sts_HiHi := NG_PBL.Inp_4;
TI3_P50.Sts_Hi := NG_PBL.Inp_5;
PBL(NG_PBL);
提供反馈
对本文档有问题或反馈吗? 请在这里提交您的反馈
Normal