安全算术计算(SARC)
安全算术计算计算1)函数库支持对模拟量进行“浮点”运算。为此,该库由以下部分组成:用于传递位置、速度和模拟量的输入元素、计算/处理元素、常量/固定参数元素,以及用于将计算结果以整型范围返回的输出元素。这种方式可实现并安全监控涉及多轴或角度位置等依赖关系的复杂任务。所有安全功能如SOS、安全限速、安全限位、安全碰撞避免以及安全工作面监控均可用于监测。
例如,通过安全算术计算功能,可在 SAF 安全设备中执行多轴应用的安全运动学计算,例如安全工具中心点(TCP)位置与速度计算(包括前级/上游关节)。
为此,输入值(安全位置/速度、可配置常量等)被转换为“单精度浮点”值并进行归一化处理,以便能够进一步用于安全算术计算。借助数学函数库中可单独互连的功能块,可实现特定的计算规则。这些链接最终生成运动学计算的指令列表,该列表被加载到安全控制器上并执行。安全算术计算计算的结果可以转换为虚拟位置或速度,并与现有的安全功能进行关联。通过这种方式,可以实现多样化的应用需求。特别是对于安全机器人应用,矩阵块可作为复杂的数学函数使用。因此,可轻松、直接地实现 Denavit–Hartenberg(DH)矩阵计算。
最多可使用400条安全算术计算指令和296个矩阵值。
在1.0.2.7版本中,安全算术计算指令的最大条数提升至 1500,矩阵值上限增至 400 个。
数学函数的连接方式以及计算规则的生成(转换)方式可自由选择;计算顺序的正确性由 SAF 设备内部的转换(生成/编译)过程予以保证。
在安全算术计算中,诊断功能的使用方式与逻辑值和模拟量相同。中间值和结果值均可在在线诊断中显示,从而可检查特定计算规则的正确实施。
安全算术计算功能介绍
传输与常量功能
|
|
加载 加载轴的速度或位置 输入:编码器轴、选择位置或速度。 输出:用于安全算术计算计算的浮点格式速度或位置值。 参数:类型 = 位置或速度
|
|
所有可用编码器均可使用,例如,EnDat编码器
|
|
|
|
常量(CST) 常量的定义 输入: - 输出:安全算术计算的浮点格式常量 参数:常量的值
|
基本算术运算
|
|
加法 两个操作数的有符号加法 输入:操作数 1 和 2 输出:以 SARC 浮点格式输出两个操作数之和。 参数: - |
|
|
减法 两个操作数的有符号减法 输入:操作数 1 和 2 输出:以 SARC 浮点格式输出两个操作数的差值。 参数: - |
|
|
乘法 两个操作数的有符号乘法 输入:操作数 1 和 2 输出: 安全算术计算浮点格式的两个操作数的乘积。 参数: - |
|
|
除法 两个操作数的有符号除法 输入:操作数 1 和 2 输出: 安全算术计算浮点格式的两个操作数的商。 参数: - 注意:除以 0 会发出警报。 |
三角函数
|
|
余弦 计算输入操作数的余弦值 输入:以度为单位的操作数 输出:安全算术计算浮点格式操作数的余弦值。 参数: - |
|
|
反余弦 计算输入操作数的反余弦值 输入:操作数 输出:安全算术计算中操作数的反余弦值(以度为单位)。 参数: - |
|
|
正弦 计算输入操作数的正弦值 输入:以度为单位的操作数 输出: 安全算术计算浮点格式操作数的正弦值。 参数: - |
|
|
反正弦 计算输入操作数的反正弦值 输入:操作数 输出: 安全算术计算中操作数的反正弦值(以度为单位)。 参数: - |
|
|
正切 计算输入操作数的正切值 输入:以度为单位的操作数 输出: 安全算术计算浮点格式操作数的正切值。 参数: - |
|
|
反正切 计算输入操作数的反正切值 输入:操作数 输出: 安全算术计算操作数的反正切值(以度为单位)。 参数: - |
|
|
反正切函数2 计算两个输入操作数的反正切值 输入:操作数 1 和 2 输出: 以 SARC 格式输出由两个输入操作数计算得到的反正切值(以度为单位)。 参数:- |
高级计算功能
|
|
绝对值 确定操作数的绝对值 输入:操作数 输出: 安全算术计算浮点格式操作数的绝对值。 参数: - |
|
|
平方根 计算操作数绝对值的平方根 输入:操作数 输出:安全算术计算浮点格式操作数的平方根值。 参数: - |
|
|
取负(符号取反) 对操作数进行符号取反 输入:操作数 输出:以 SARC 浮点格式输出操作数取负后的值。 参数: - |
|
|
符号函数 返回操作数的符号 输入:操作数 输出:以 SARC 浮点格式输出操作数的符号(+1/-1)。 参数: - |
|
|
条件判断 比较两个操作数是否满足“小于”(a 输入:操作数 1 和 2 输出: 若(a 参数: - |
|
|
多路复用器 最多支持16个操作数的4位选择器 输入:最多 16 个操作数和 4 个选择操作数 输出结果: 参数:选择器编号 = 选择器操作数的数量
|
|
注意 |
使用如果条件块来控制多路复用器块,数据来自上一个周期。 |
矩阵函数
|
|
矩阵 定义一个 X×Y 矩阵(最大 6×6,即最多 6 行/6 列)用于计算矩阵值(最多 6 行/6 列) 输入:最多 36 个操作数,具体数量取决于矩阵的维度以及矩阵内容是作为操作数还是常量值分配。 输出:安全算术计算矩阵 参数:维度(行和列,最大 6x6),矩阵条目(常量或 输入=输入连接器)。
|
|
|
|
矩阵乘法运算 两个矩阵的乘法 输入:安全算术计算矩阵输出值 输出:两个矩阵的乘积 参数: - |
|
|
|
矩阵存储 输出矩阵中某个元素的结果值 输入:安全算术计算矩阵 输出:矩阵中某个元素的计算结果值 参数:矩阵中元素的位置(行和列)
|
|
|
注意 |
例如,使用 4×4 矩阵时,需要 16+1 个矩阵存储标志。 |
|
输出功能
|
|
存储 在虚拟轴上保存安全算术计算变量 输入:安全算术计算值 输出: - 参数:要存储的值的类型(速度或位置),虚拟轴的索引。
|
|
|
虚拟轴 虚拟轴输出位置/速度值,便于在整型范围内进一步处理;同时可作为标准监控功能(如SOS、安全限速、安全限位、安全碰撞避免以及安全工作面监控等)的输入值。 输入: - 输出:速度(绿色)、位置(紫色)和模拟值(黄色)。 参数:参照编码器数值传输的设置:
|
|
|
轴数据位数 以比特格式输出模拟轴数值。通过后续的逻辑处理,可实现范围/区间判断功能。 输入:虚拟轴(速度或位置) 输出:位格式的值 参数:
|
|
注意 |
位置值与速度值分别与 Factor_Pos 和 Factor_Speed 相乘。 |
|
注意 |
计算精度 计算采用“IEEE 754算术运算单精度数据类型”。允许公差范围: |
|
安全算术计算功能 |
精度 |
|
加法 |
0x00000000(尾数内差异) |
|
乘法 |
0x00000000(尾数内差异) |
|
除法 |
0x00000001(尾数内差异) |
|
ABS(绝对值) |
0x00000000(尾数内差异) |
|
取负(符号取反) |
0x00000000(尾数内差异) |
|
IF(条件判断) |
0x00000000(尾数内差异) |
|
平方根 |
0x00000002(尾数内差异) |
|
余弦 |
0.0002(与0.0002的绝对差值) |
|
正弦 |
0.0002(与0.0002的绝对差值) |
|
反余弦 |
0.002(允许的绝对误差:0.002°) |
|
0.04(在|0.99|至|1.0|范围内与0.04°的绝对差值) |
|
|
反正弦 |
0.002(允许的绝对误差:0.002°) |
|
0.04(在|0.99|至|1.0|范围内与0.04°的绝对差值) |
|
|
正切 |
0.004(与0.004的绝对差值) |
|
反正切 |
0.001(与0.001°的绝对差值) |
|
反正切 |
0.05(与0.05°的绝对差值) |
|
矩阵乘法* |
默认值:0x00000000(尾数范围内的差异;对每个矩阵元素逐一检查)。 |
-
用户必须根据自身需求确保计算正确且具有足够精度。
安全算术计算功能示例
示例1:三轴EMS的安全速度/位置监控


示例2:双轴机器人的矩阵计算

| θ [deg] | a [mm] | d [mm] | α [deg] | |
| A1 | $$\text{θ}\text{-}\frac{\text{π}}{\text{2}}$$ | 0 | 200 | $$\frac{\text{π}}{\text{2}}$$ |
| A2 | $$\text{θ}\text{-}\frac{\text{π}}{\text{2}}$$ | 260 | 0 | $$\frac{\text{π}}{\text{2}}$$ |


