1. 通道接口
1.1 通道从站发送接口
算子名称 | sys.send | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | string_t | channel | 通道名称,如:CANopenChannel |
string_t | msgId | 消息类型,如:tuopan | |
object_t / propset_t | props | 消息数据 | |
返回值 | void | ||
功能描述 | 用于从站模式给主站发送数据。 1. 如果是CAN总线等抢占式通道,则立即发送; 1. 如果是485等轮询通道,系统将暂存数据,等候主节点轮询时发送。 |
object_t类型消息数据用法:
sys.send("CANopenChannel", "tuopan", {
var1 = 1,
var2 = 2.0,
var3 = "str"
})
propset_t类型消息数据用法: ```lua table = sys.propset_t({
var1 = 1,
var2 = 2.0, var3 = “str” })
table2 = sys.propset_t({ var4 = 1, var5 = 2.0, var6 = “str” })
table:append(table2)
sys.send(“CANopenChannel”, “tuopan”, table)
<a name="uRw4V"></a>
## 1.2 通道主站发送接口
| 算子名称 | sys.sendto | | |
| --- | --- | --- | --- |
| | 参数类型 | 参数名 | 参数说明 |
| 输入参数 | string_t | channel | 通道名称,如:CANopenChannel |
| | string_t | node | 从站节点标识 |
| | string_t | msgId | 消息类型,如:tuopan |
| | object_t / propset_t | props | 消息数据 |
| 返回值 | void | | <br /> |
| 功能描述 | 用于主站模式发送数据到指定从站。<br />1. node参数是指init.lua脚本中add_node指令指定的节点名称,而不是真实的物理地址,系统会自动将节点标识翻译成物理地址。<br /> | | |
<a name="pi3Kd"></a>
# 2 相机接口
<a name="Ku74m"></a>
## 2.1 相机软触发接口
| 算子名称 | sys.trigger_camera | | |
| --- | --- | --- | --- |
| | 参数类型 | 参数名 | 参数说明 |
| 输入参数 | string_t | decoder | 解码器名称,如:Ifm3dDecoder |
| | propset_t / string_t / nil | cameras | 相机标识 |
| 返回值 | void | | <br /> |
| 功能描述 | 用于主站模式发送数据到指定从站。<br />1. camera参数是指init.lua脚本中add_camera指令指定的相机标识,而不是真实的物理地址,系统会自动将相机标识转换成相机特定的连接参数。<br />1. 可指定单个相机标识,或通过{}指定多个相机标识。<br />1. 不指定相机标识时,系统将对该解码器插件下所有连接的相机进行软触发。<br /> | | |
用法举例:
```lua
function main(node, props)
if props::has("Tuppan_Enable") then -- 收到触发信号
-- trigger camera
sys.trigger_camera("Ifm3dDecoder") -- 触发所有相机
sys.trigger_camera("Ifm3dDecoder", "lft_") -- 触发1个相机
sys.trigger_camera("Ifm3dDecoder", { "lft_", "rgt_" }) -- 触发2个相机
end
return 0
end
3 数据缓存接口
3.1 写缓存接口
算子名称 | sys.set_cache | ||
---|---|---|---|
参数类型 | 参数名 | 参数说明 | |
输入参数 | string_t | key | 解码器名称,如:Ifm3dDecoder |
object_t | value | 缓存数据 | |
返回值 | propset_t | props | 缓存数据返回 |
功能描述 | 暂时缓存数据,用于在多个脚本处理过程中,后续脚本使用,如第1个相机处理完左半边数据,暂存到缓存中,等第2个相机处理完有半边数据后,再取出左半边数据,合并处理后得出后续结果。 |
示例脚本:
if camera == "lft_" then
Left = sys.set_cache("Left", {
LeftTopX = upleg_pos.OBB_position.x * 1000,
LeftTopY = upleg_pos.OBB_position.y * 1000,
LeftTopZ = upleg_pos.OBB_position.z * 1000,
LeftTopFlags = 0,
})
Right = sys.get_cache("Right")
end
if camera == "rgt_" then
Left = sys.get_cache("Left")
Right = sys.set_cache("Right", {
RightTopX = upleg_pos.OBB_position.x * 1000,
RightTopY = upleg_pos.OBB_position.y * 1000,
RightTopZ = upleg_pos.OBB_position.z * 1000,
RightTopFlags = 0,
})
end
if Left.empty then
Left = sys.propset_t({
LeftTopX = 0,
LeftTopY = 0,
LeftTopZ = 0,
LeftTopFlags = 0,
})
end
if Right.empty then
Right = sys.propset_t({
RightTopX = 0,
RightTopY = 0,
RightTopZ = 0,
RightTopFlags = 0,
})
end
data = sys.propset_t()
data:append(Left)
data:append(Right)