SmartDisplay Custom CAN protocol 简介
前言
SmartDisplay 目前支持CANbus硬件通讯接口,并使用CANopen软件通讯协议,CANopen是基于CAN总线的工业标准通讯协议,被广泛应用于各种领域,如医疗设备,车辆,铁路应用或建筑自动化。然而,使用CANopen协议时, 由于它是一种基于节点之间的通讯,因此客户端需要在其主机端实作协议,这可能对那些想简单使用CANbus的应用是个负担。因此,为了简化客户的使用,我们设计出新的Custom CAN协议,其不需要在客户端实作CANopen协议,只需要透过自定义的DBC文件设置数据, 就能轻易地将CAN ID / 数据和显示器上的Widget相关联, 从而实现及时的互动, 此种互动方式可以帮助客户更好的掌握和控制系统中的数据,并达到弹性高、维护方便等目的。
介绍
Custom CAN protocol 主要是透过 DBC(CAN Database)文件来设置数据并和显示器上的部件之间的互动方式。DBC 文件是用来定义系统中的 CAN ID、消息格式译码等相关信息的重要工具。使用自定义的 DBC 文件可以轻松地将不同的 CAN ID / 数据和显示器上的部件相关联,这样就可以实现及时的互动, 例如透过 CAN ID / 数据来控制显示器上的图形或者文字,显示器上的按钮或滑动条可以用来控制 CAN 的数据. 这种互动方式可以帮助客户更好的掌握和控制系统中的数据。
DBC 介绍
DBC档案通常是ASCII纯文本档, 其中包含各种关于在CAN总在线传输的物理信号的信息, 包括信号的CAN ID、名称、转换比例、定义等, 这些档案用于将原始的CAN数据译码成有意义的值, 并将不同的CAN ID映像到其对应的信号。DBC档案提供了将CAN讯息有效载荷转换为物理信号值所需的信息。
以下为Raw CAN 数据测试数据范例
假设你有CAN DBC 档案, 且这个档案. 有包含此CAN Id (0x181) 的解译规则设定, 则你可从此DBC File 信息译码出下列的信息
DBC 文件的主要功能为描述如何译码 CAN 消息和信号的规则,
下列为 DBC 档案节录的测试数据说明
由上列DBC 信息中, 可得知下列这些译码信息
由上列的译码规则设定, 可将先前取得的Raw CAN Data 译码成下列信息
藉由以上的说明,有了DBC档案设定,我们就可以正确解碼出CAN ID与CAN Data所代表的实际值. DBC文件包含讯息和信号布局,可以解析数据并将原始数据转换为物理值,系统能理解透过CAN传输的真实讯息.
DBC 编辑器
DBC档案通常是ASCII文本档,其中包含了关于在CAN总线上传输的物理信号的信息,这些档案由于内容格式的关系,很难读取和编辑。为了解决这个问题,市面上已经有许多关于DBC编辑器软件。这些软件可以帮助用户更轻松地建立和编辑自定义DBC档案。 其中一个常用的DBC编辑器是 vector CANdb++,由 Vector Informatik GmbH开发,这个软件可以用于建立和编辑DBC档案,提供了一个易于使用的接口,可以新增讯息、新增信号、定义讯息和信号的属性,如讯息ID、起始位、长度、比例、偏移量等等。
SmartDisplay GUI Builder – Custom CAN 设定说明
SmartDisplay GUI Builder 为您提供了一个直观友好的操作界面,让您可以轻松创建属于自己的 CAN 项目,您只需要导入 DBC 档案并进行信号/讯息与对应的 Widget 的映像,即可在 SmartDisplay 装置上轻松显示与互动。操作简单且具有灵活性功能,能够满足您的各种需求,让您的工作更加高效率。
以下会依序介绍SmartDisplay GUI Builder 如何建立Custom CAN project与设定 DBC 与 Widget 关系
● 建立Custom CAN project
依据需求, 输入project 名称, 选择SmartDisplay 机种, 于protocol 选择 Custom CAN Id (CANbus), 即可建立Custom CAN project.
● 汇入自定义 DBC File
● 于主画面新增一个 Gauge 和 Horizontal Slider widget
点选Gauge object, 并于 Gauge 属性页面, 于 CAN Signal 字段, 设定Message 为 EEC1, Signal为 EngSpeed, 代表此 Gauge对象与EngSpeed 绑上关系, 此Gauge 对象画面显示变化是来自 EngSpeed value 值。
点选Horizontal Slider object, 并于 Horizontal Slider 属性页面, 于 CAN Signal 字段, 设定Message 为 HorizontalSliderMessage, Signal为 HorizontalSliderSignal1, 代表此 Horizontal Slider对象与HorizontalSliderSignal1 绑上关系, 此Gauge 对象画面显示变化是来自 HorizontalSliderSignal1 值。
● 模拟 CAN ID / CAN Data 与 Widget 的互动
点选 icon:"Simulator With GUI" 启动仿真器
启动仿真器后, 可拉动下方 EngSpeed slider 来模拟Host端送出 EngSpeed 数据, 观察仿真器Gauge 变动, 也可以从右方的Message Log 看到, CAN ID 与 CAN Data 的变化,也可以操作仿真器的Horizontal Slider, 仿真Device端送出的数据。
● 更新SmartDisplay 装置设定
经由仿真器验证功能后, 如果没有问题后, 就可以连上 Device, 将project 设定上传到 SmartDisplay 装置端。
等待上传并更新完毕
● 验证 Device CAN ID / CAN Data 与 Widget 的互动
上传Project到Device端后, 可以进一步验证, SmartDisplay 装置端功能, 用GUI Builder 连上Device 端后, 点选 "Test Device", 即可测试Host 端与 Device 端的互动了。
Test Device Window
藉由此测试画面, 可模拟 Host 端依据 DBC 设定送出相对应的 CAN Id 与 CAN Data。
拉动下方 EngSpeed slider 仿真Host端送出 EngSpeed 数据, 观察装置Gauge 变动, 也可以从右方的Message Log 看到, CAN ID 与 CAN Data 的变化, 也可以操作Device的Horizontal Slider, 验证 Device端送出的资料是否合乎需求
SmartDisplay 装置实际画面
Custom CAN command说明
接下来将说明Custom CAN所使用的command protocol。透过这些指令,Host端可轻松控制SmartDisplay,包括换页、调整背光亮度,或者使Buzzer发出声音。
下列为command protocol 所使用到的CAN Id 设定:
- CAN Id format:29 bit
CAN Id:0xEF0000 + 0x7B00 (default channel id. 可透过GUI Builder修改)
以下为 Send Command 的基本数据格式
Header Byte (1 Byte) | Length (1 Byte) | Payload (N byte) | CRC (2 Byte) |
---|---|---|---|
固定为0x53 (S) | Value = 4 + Payload length Payload max size: 250 |
数据内容与长度参阅Send Command Payload | Modbus CRC16 |
以下为 Response Command 的基本数据格式
Header Byte (1 Byte) | Length (1 Byte) | Payload (N byte) | CRC (2 Byte) |
---|---|---|---|
固定为0x52 (R) | Value = 4 + Payload length Payload max size: 250 |
数据内容与长度参阅Response Command Payload | Modbus CRC16 |
● Command Payload
下列为各个command payload 的说明
- Set Brightness:0x6
Send Command
Command Code | 1 Byte | 0x6 |
Brightnes | 1 Byte | Brightness value |
Response command
Command Code | 1 Byte | 0x6 |
Error Code | 1 Byte | 0:Success 1:Failed |
- Set Buzzer: 0x7
Send Command
Command Code | 1 Byte | 0x7 |
Cycle | 1 Byte | Cycle value |
High | 1 Byte | High value |
Low | 1 Byte | Low value |
Response command
Command Code | 1 Byte | 0x7 |
Error Code | 1 Byte | 0:Success 1:Failed |
- Set Page Index:0x8
Send Command
Command Code | 1 Byte | 0x8 |
Page Index | 1 Byte | Page Index value |
Response command
Command Code | 1 Byte | 0x8 |
Error Code | 1 Byte | 0:Success 1:Failed |
- Get Page Count: 0xA
Send Command
Command Code | 1 Byte | 0xA |
Response command
Command Code | 1 Byte | 0xA |
Error Code | 1 Byte | 0:Success 1:Failed |
High | 1 Byte | Page Count value |
- Get Current Page Index:0xF
Send Command
Command Code | 1 Byte | 0xF |
Response command
Command Code | 1 Byte | 0xF |
Error Code | 1 Byte | 0:Success 1:Failed |
Page Index | 1 Byte | Page Index value |
- Set Device State:0x20
Send Command
Command Code | 1 Byte | 0x20 |
Device State | 1 Byte | 0: ConfigMode 1: DisplayMode |
Response command
Command Code | 1 Byte | 0x20 |
Error Code | 1 Byte | 0:Success 1:Failed |
● 传输范例
- 设定亮度为 90
- 切换Page Index 为 1
切换Page 时, 需要先设定Device State 为ConfigMode, 之后在下换页命令, 结束换页命令后, 就再设定Device State Mode 为Display Mode, 即可完成换页的命令, 相关命令顺序如下:
结论
经由Custom CAN protocol , 客户可透过标准 DBC file, 自由无限制地定义CAN Id 与 CAN Data 的设定, 再透过SmartDisplay GUI Builder 绑定Message / Signal 与 Widget 的关系, 就这么简单, 一个客制的CAN HMI 就完成了, 不需要复杂的CAN protocol (如 CANopen, J1939…) 与设定即可简易无缝地与SmartDisplay Device 接轨, 心动了吗? 赶快下载 SmartDisplay GUI Builder, 在还没购买SmartDisplay 前, 可先试用仿真器确认SmartDisplay 是否能满足你的需求!