表达式
功能:
在 4.4.0.0 及更高版本中,可以使用数学、布尔和字符串表达式。这 SMC_ReadNCFile2
和 SMC_NCInterpreter
为此必须使用功能块(而不是 SMC_ReadNCFile
和 SMC_NCDecoder
)。
提示
表达式仅适用于在线解码器(不适用于 CNC 编辑器)。
原则上,表达式可以在 G 代码中的两个位置使用:
作为 G 字的值(一个 G 字由一个地址和一个值组成,例如“G1”)
作为子程序调用的传递参数
语法 – 常规
表达式可以包含以下元素:
数字和字符串文字
全局和局部变量
中缀运算符和函数
逗号和括号
同样,圆括号(如果不用于标识注释)和大括号可用于构造表达式。这意味着表达式 (1 + 2} * 3
被允许。
提示
功能块 SMC_ReadNCFile2
有一个新模式(bParenthesesAsComments
input) 其中括号不是注释。相反,多行注释分别用“(*”和“*)”打开和关闭。在这种新模式中,大括号和圆括号均可用于表达式。
仅当以下情况时才需要 G 地址后的空格 SMC_ReadNCFile2
不会将其识别为独立令牌(例如: X abs{-2}
代替 Xabs{-2}.
)。
与 ST 相比,单位置函数不一定必须用括号调用(例如: sin 3
)。
解析时,每个部分表达式都被指定为以下三种类型之一:BOOL、LREAL 或 STRING。因此,每个中缀运算符和每个函数都需要一个特定的参数类型序列,不合规(错误类型、太少或太多参数)将返回错误。
限制:
块编号必须是数字文字。
出于严格的技术原因,跳转标记 (
x
在L!x
) 不得包含任何局部变量。
例子
N01 G36 O$var$ D concat{'prefix_', concat{$var$, '_suffix'}} N02 G1 X$var$ + sin{pi + 3 * #locvar} N03 G20 L0 K NOT {myfun{$var$, expt{2, #locvar}} XOR myfun{0, 0}}
支持的运算符和函数
特点 | 类型 | 参数 | 优先级 |
---|---|---|---|
|
|
| 14 |
|
|
| 13 |
|
|
| 13 |
|
|
| 12 |
|
|
| 12 |
|
|
| 10 |
|
|
| 10 |
|
|
| 10 |
|
|
| 10 |
|
|
| 10 |
|
|
| 10 |
|
|
| 10 |
|
|
| 10 |
|
|
| 10 |
|
|
| 10 |
|
|
| 6 |
|
|
| 5 |
|
|
| 4 |
特点 | 类型 | 参数 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
定义自己的函数
可以添加您自己的功能或覆盖现有的实现。 (解析 G 代码时,首先在用户函数中搜索函数。)
必须实现 smc_nc_iFunction 接口,并且必须将相应 POU 的全局实例传输到 SMC_ReadNCFile2
或者 SMC_ReadNCFromStream
通过结构 SMC_NC_GFunctionTable
。
枚举 SMC_GVar_Type
用于返回类型和参数类型。包含在那里的条目 T_OTHER
可以用作类型的占位符。解析时,系统会检查所有与 a 对应的参数 T_OTHER
在签名中具有相同的类型。类型无关紧要。
有关更多信息,请参阅: 特定于用户的 G 代码函数
错误处理
在可能的情况下,在语法错误中发布有缺陷令牌的确切位置及其长度。错误位置列于 SMC_ReadNCFile2.errorPos
.