Skip to main content

运算符

代表标准 IEC 函数子集的内置标准函数称为运算符。在安全编程中无法创建用户定义的函数。

这些运算符的语义与 CODESYS 标准。

它们可以连接到 SAFExxx数据类型 标准。

插入运算符

使用以下方式插入运算符 插入盒 或者 插入空盒 命令。

也可以从工具箱中添加运算符 工具箱 视图。安全 FBD 编辑器中的工具箱包含以下类别:

  • 布尔运算符

  • 数学运算符

  • 其他运营商

输入助手

输入助手中显示以下操作员类别:

  • 运算符

  • 转换 (不属于基础级别)

可扩展运算符

. 可通过附加输入扩展运算符
  • AND

  • OR

  • ADD (仅限扩展级别)

  • MUL (仅限扩展级别)

  • MUX (仅限扩展级别)

EQLTLEGT, 和 GE 运算符同样可以根据 IEC 进行扩展,但只能与两个输入一起使用(与标准的情况一样)。

插入输入 命令为可扩展操作员框添加了进一步的输入。

基础层操作员

. 布尔运算符
  • AND (2 个输入)

  • AND (3 个输入)

  • OR (2 个输入)

  • OR (3 个输入)

所有操作数 OR 必须是 SAFEBOOL

扩展级别的运算符

. 布尔运算符
  • AND (2 个输入)

  • AND (3 个输入)

  • OR (2 个输入)

  • OR (3 个输入)

  • XOR

  • NOT

重要

粗心使用 XORNOT 操作员可能导致故障安全特性的丧失 SAFExxx 变量。安全检查器不会针对此类构造生成任何警告。

XORNOT 操作员可以否定故障安全属性 SAFExxx 变量,这样 SAFE 变量失去其故障安全属性,即变为“非故障安全”。这可能导致设备意外启动。

编程规则: SAFExxx 输出 NOTXOR 必须确定。随后,必须确保这些 NOT/XOR 输出未连接至输出 (I/O)。

. 数学运算符
  • ADD (2 个输入):算术 ADD 操作员

  • ADD (3 个输入):三个输入的加法

  • SUB:减法

  • MUL:乘法

  • DIV: 分配

  • EQ:比较是否相等

  • NE:不等式比较

  • LT:比较“小于”

  • LE:比较“小于”或“等于”

  • GT:比较“大于”

  • GE:比较“大于”或“等于”

. 其他运营商
  • SEL

  • MUX

. 转换
  • BOOL_TO_INT

  • BOOL_TO_DINT

  • BOOL_TO_TIME

  • BOOL_TO_WORD

  • BYTE_TO_INT

  • BYTE_TO_DINT

  • BYTE_TO_TIME

  • BYTE_TO_WORD

  • DINT_TO_BOOL

  • DINT_TO_BYTE

  • DINT_TO_INT

  • DINT_TO_TIME

  • DINT_TO_WORD

  • DINT_TO_DWORD

  • DWORD_TO_DINT

  • DWORD_TO_TIME

  • INT_TO_BOOL

  • INT_TO_BYTE

  • INT_TO_DINT

  • INT_TO_DWORD

  • INT_TO_TIME

  • INT_TO_WORD

  • TIME_TO_BOOL

  • TIME_TO_BYTE

  • TIME_TO_INT

  • TIME_TO_DINT

  • TIME_TO_WORD

  • TIME_TO_DWORD

  • WORD_TO_BOOL

  • WORD_TO_BYTE

  • WORD_TO_DINT

  • WORD_TO_INT

  • WORD_TO_TIME

  • WORD_TO_DWORD

具有安全特征的操作人员

以下各节描述了一些特定运算符的特征

如果扩展级别的操作员超出范围,则会出现运行时错误

重要

开发人员有责任设计程序逻辑以避免发生运行时错误。

对以下超范围做出反应 运行时错误,导致应用程序停止并生成日志条目。

等级

语言元素

运行时错误

扩展

DIV

除以 0

扩展

MUX

使用第一个输入的负值或大于输入数减 1 的值 N 进行调用。例如: MUX(2, 16#8000, 16#8001)

扩展

DINT_TO_INT

TIME_TO_DINT

TIME_TO_INT

DINT_TO_TIME

INT_TO_TIME

DINT_TO_WORD

TIME_TO_WORD

DINT_TO_BYTE

INT_TO_BYTE

TIME_TO_BYTEWORD_TO_BYTE

输出值不在目标类型的值范围内:在两种类型之间转换时 ANY_MAGNITUDE 类型(INTDINTTIME),数值输出值必须在目标类型的值范围内(其中 TIME 值以毫秒为单位计算。当从/转换为位字符串类型时(BYTEWORDDWORD),输出值的位模式必须是目标类型的位模式。示例:

DINT_TO_INT(16#0000FFFF),因为 216-1 不是 INT 价值,

同样地 DINT_TO_TIME(-1),因为没有负面 TIME-

TIME_TO_DINT(t#365d),因为 365 天 = 3,153,600,000 毫秒 = 16#BBF81E00,因此大于最大 DINT 数字 231-1 = 16#7FFFFFFF

INT_TO_BYTE(-1), 因为 BYTE 仅包含 0 到 255,

WORD_TO_BYTE(0xFFFF), 因为 BYTE 仅扩展到0xFF。

提示

标准行为 SEL/MUX (即,如果输入值太大则选择最大值,如果输入值为负数则选择 0)必须在安全应用程序中进行编程。

40. 标准行为的编程 SEL:对于 k < 0
标准行为的编程 SEL:对于 k < 0


41. 标准行为的编程 SEL:对于 k>max,n...最大值
标准行为的编程 SEL:对于 k>max,n...最大值


42. 标准行为的编程 MUX 对于k < 0
标准行为的编程 MUX 对于k < 0


43. 标准行为的编程 MUX 对于k>0
标准行为的编程 MUX 对于k>0