IXXAT CANBridge产品是一款性能优异的CAN网桥/路由器设备,支持CAN网络耦合,可以实现强大的过滤,ID转换、数据映射和多路复用,使用事件触发的方式执行预定义的操作。除通过CAN-Gateway Configurator工具的图形菜单配置不同CAN网络之间的数据映射外, CANBridge NT还支持使用Lua编写操作规则,方便实现不同CAN网络之间的数据转换。
Ixxat Lua ADK基于标准的Lua 5.3.5发行版,针对嵌入式系统开发和执行进行了优化,以提供可以在资源有限的嵌入式处理器上运行的脚本框架。
IXXAT Lua ADK使用3中类型的回调函数:initialize, on_...和loop。Initialize在系统初始化时被调用,用于注册事件和设置CAN消息过滤。loop在初始化之后,启动并运行设备时,每100毫秒调用一次,用于触发循环任务。 on_can和on_mqtt函数用于处理来自CAN和MQTT的事件。
安装配置工具CAN-Gateway Configurator后,在C:\Users\Public\Documents\HMS\Ixxat CAN-Gateway Configurator\Examples\Lua \examples\目录中,提供了lua示例脚本。
can_demo.lua文件,展示如何通过Lua处理(发送和接收)CAN报文。
我们以can_demo.lua文件为例,了解Lua API的使用。 can_demo.lua文件,实现将ID为0x200的CAN1接收报文转发到ID为0x201的CAN2报文:
-最大频率50赫兹(20毫秒)
-修改字节7和8的数据
并在CAN1上循环发送ID为0x300的消息。
在固件初始化时调用一次。它用于注册需接收的CAN和MQTT消息,初始化变量。本例中,initialize调用can_register_msg注册需处理的报文。
function initialize()
print("initialize")
can.register_msg({
format = "std",
data_as = "array",
ident = 0x200,
topic = 1,
port = 1,
max_frequency = 20,
})
end
处理设备收到的CAN消息,本例中,处理接收到ID 0x200的报文,修改字节7和8的数据后,发送到CAN2。
function on_can(topic, port, format, ident, data)
data[7] = data[7] << 1
data[8] = cnt
cnt = cnt + 1
can_send(2, format, 0x201, data)
end
本例中,通过loop实现在CAN1上循环发送ID为0x300的消息。
function loop(ticks, elapsed)
can_send(1, "csd", 0x300, payload)
end
为了能够在CANBridge设备上使用Lua ADK,必须使用Lua framework更新设备,并在CAN-Gateway Configurator中启用Lua。具体步骤如下:
1、连接CANBridge设备到PC,并上电。
2、启动安装的最新版本CAN-GatewayConfigurator工具,并connect到设备。
3、配置设备的操作模式和CAN端口的波特率
4、在工具栏中打开Lua ADK菜单并选择update Lua ADK。选择C:\Program Files\HMS\Ixxat CAN-Gateway Configurator V6下的lua_framework_vx文件更新Lua ADK。
5、在配置树中选择General,在其下拉列表中选择use of Lua as ADK,选择target 模式。
6、在Target菜单中,选择Write configuration to target,将配置写入连接的CAN设备。
7、在Lua ADK菜单,选择Write Lua script to target,将创建好的lua脚本写入CANBridge设备,在设备启动后,Lua脚本将自动运行。
使用Lua ADK 可以为IXXAT 的CAN@net N及 CANBridge NT设备开发Lua应用,方便的实现不同网络直接的数据映射。