Skip to main content

reTerminal DM CAN BUS 与 Node-RED

note

本文档由 AI 翻译。如您发现内容有误或有改进建议,欢迎通过页面下方的评论区,或在以下 Issue 页面中告诉我们:https://github.com/Seeed-Studio/wiki-documents/issues

关于 CAN BUS 的简要信息

pir


CAN BUS 与 Node-RED

CAN 总线(控制器局域网总线)是一种用于连接车辆或工业系统中多个电子控制单元(ECU)的网络类型。它最初由博世公司在 1980 年代开发,并已成为车辆和其他应用中串行通信的国际标准(ISO 11898)。

CAN 总线支持 ECU 之间的高速数据交换,使它们能够共享信息并协调其活动。它使用两线系统,一根用于发送数据,另一根用于接收数据,并支持多个节点,非常适合需要多个设备相互通信的复杂系统。

CAN 总线技术广泛应用于汽车行业的各种应用,包括发动机控制、变速器控制、ABS(防抱死制动系统)、安全气囊控制等。它还被用于其他行业,例如工业自动化、医疗设备和航空航天领域,这些领域需要设备之间可靠且高效的通信。

CAN 总线具有许多优点,包括高可靠性、低成本以及在恶劣环境中运行的能力。它易于安装和维护,并且对电磁干扰具有很高的抗性。这些特性使其成为许多需要可靠且高效通信的不同应用的理想选择。

在 reTerminal DM 上开始使用 CAN BUS 节点

要在 Node-RED 中使用 CAN 总线,您需要一个 CAN 总线接口设备,该设备连接到 reTerminal DM 的 CAN 总线端口,以及一个 Node-RED CAN 总线节点,允许您在网络上发送和接收消息。在本教程中,我们将一起探索 node-red-contrib-socketcan 节点。一旦您在 Node-RED 中安装了 CAN 总线节点,您就可以开始构建从 CAN 总线网络读取数据、处理数据并将其发送到其他系统或设备的流程。例如,您可以从车辆的 CAN 总线读取发动机转速,处理数据以计算燃油消耗,并将结果发送到仪表板进行显示。

您可以在 node-red-contrib-socketcan 页面找到更多信息。

如果您使用的是 Senscraft Edge OS,可以跳过 Socketcan 节点的安装步骤。

前置条件

硬件

硬件准备

请按照下图连接硬件

软件

note

主机电脑应能够通过互联网连接到 reTerminal DM,以执行以下设置步骤。

安装 Socketcan 节点

在本 Wiki 教程中,我们将使用 node-red-contrib-socketcan 节点,因此请按照 安装节点 的指南安装 node-red-contrib-socketcan

在 reTerminal DM 上配置 CAN BUS
note

假设您可以直接访问 reTerminal DM 上的 Terminal 应用程序或通过 SSH 访问 reTerminal DM,如果不能,请按照 此处 的第一步操作,熟悉如何进行操作。

请逐条输入以下命令,以启用一个名为 can0 的虚拟 CAN 设备,该设备与 reTerminal DM 的 CAN 总线端口连接。

sudo apt install can-utils
sudo ip link set can0 up type can bitrate 250000
sudo ifconfig can0 txqueuelen 1000
sudo ip link set can0 up

输入上述命令后,您可以通过 ifconfig 命令看到 can0 设备,如下所示:

配置主机电脑的 USB-CAN 软件和驱动
note

如果您使用的是相同的 USB-CAN 分析仪,可以按照以下步骤设置分析仪的软件驱动。

请访问 USB-CAN 分析仪 驱动的 GitHub 仓库 USB-CAN Analyzer system driver,并根据您的操作系统按照 Readme 部分的说明安装驱动。

以下是发送和接收 CAN 总线流量的示例命令:

# 从 CAN 总线转储流量
$ ./canusb -t -d /dev/ttyUSB0 -s 250000 -t

# 从 ID 005 发送字节 0x00112233 到 CAN 总线
$ ./canusb -d /dev/ttyUSB0 -s 250000 -t -i 5 -j 00112233

在 reTerminal DM 上使用 Socketcan 节点

导入流程

note

以下步骤仅用于教程目的,在本节中,我们将向您展示如何通过复制 JSON 格式的流程并粘贴到导入节点弹出菜单的输入框中快速导入流程。

步骤 1:点击 设置按钮,然后点击 导入 按钮,打开 导入节点 窗口

步骤 2:复制以下流的 JSON 数据


[
{
"id": "829af3ee.a57c1",
"type": "tab",
"label": "CAN BUS",
"disabled": false,
"info": ""
},
{
"id": "7b24a62e.8f5458",
"type": "debug",
"z": "829af3ee.a57c1",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 350,
"y": 360,
"wires": []
},
{
"id": "5f671b29.cd24bc",
"type": "socketcan-out",
"z": "829af3ee.a57c1",
"name": "socketcan-out",
"config": "d9bf56bb5f3e2f92",
"x": 150,
"y": 360,
"wires": [
[
"7b24a62e.8f5458"
]
]
},
{
"id": "caba412f.047b2",
"type": "socketcan-in",
"z": "829af3ee.a57c1",
"name": "socketcan-in",
"config": "d9bf56bb5f3e2f92",
"x": 350,
"y": 120,
"wires": []
},
{
"id": "a64240cb.3f0788",
"type": "inject",
"z": "829af3ee.a57c1",
"name": "Send object - std",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "{\"ext\":false,\"canid\":123,\"dlc\":5,\"data\":[1,2,3,4,5]}",
"payloadType": "json",
"x": 160,
"y": 120,
"wires": [
[
"caba412f.047b2"
]
]
},
{
"id": "3ff96369.ef6f5c",
"type": "inject",
"z": "829af3ee.a57c1",
"name": "Send string - std",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "123#00112233",
"payloadType": "str",
"x": 160,
"y": 200,
"wires": [
[
"caba412f.047b2"
]
]
},
{
"id": "6879c00a.5edb68",
"type": "inject",
"z": "829af3ee.a57c1",
"name": "Send string - ext",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "1F334455#1122334455667788",
"payloadType": "str",
"x": 160,
"y": 240,
"wires": [
[
"caba412f.047b2"
]
]
},
{
"id": "1ee3b274.4cb8fe",
"type": "inject",
"z": "829af3ee.a57c1",
"name": "Send object - ext",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "{\"ext\":true,\"canid\":32278,\"dlc\":5,\"data\":[1,2,3,4,5]}",
"payloadType": "json",
"x": 160,
"y": 160,
"wires": [
[
"caba412f.047b2"
]
]
},
{
"id": "391a4c45.7acd8c",
"type": "comment",
"z": "829af3ee.a57c1",
"name": "Send CAN frames in using different payloads on CAN0",
"info": "",
"x": 260,
"y": 80,
"wires": []
},
{
"id": "912f9928.da2758",
"type": "comment",
"z": "829af3ee.a57c1",
"name": "Receiove CAN data from interface CAN0",
"info": "",
"x": 220,
"y": 320,
"wires": []
},
{
"id": "d9bf56bb5f3e2f92",
"type": "socketcan-config",
"interface": "can0"
}
]

步骤 3:在 Import nodes 窗口中,请选择 Clipboard 选项卡,然后将上述 JSON 流代码粘贴到 红色对话框 中,然后点击 import 按钮。

步骤 4:完成上述步骤后,您应该会看到一个名为 CAN BUS 的新流标签,请检查流是否与下图所示一致。

步骤 5:要设置 CAN 接口,您需要双击 socketcan-in 节点 以打开 编辑节点 窗口。

note

请确保您已完成 在 reTerminal DM 上配置 CAN BUS 部分中的步骤,以在 reTerminal DM 上创建一个 can0 接口设备。

步骤 6:在 Edit socketcan-in node 窗口中,点击 interface 选项旁的 铅笔 图标以打开 Add new socketcan-config config node 窗口。

步骤 7:在 Add new socketcan-config config node 窗口中,请在接口对话框中输入 can0

步骤 8:点击上述步骤中的 Add 按钮后,您应该会看到 interface 设置为 can0,然后点击 Done 以应用。

步骤 9:为 socketcan-out 设置 CAN 总线接口,只需双击 socketcan-out 节点并选择 can0 作为配置,然后点击 Done

步骤 10:请现在点击 Deploy

最终测试和结果

恭喜!您已经成功体验并学习了如何使用 reTerminal DM 和 Node-RED 进行 CAN 总线协议操作,您的最终结果应类似于下图所示。

对于主机发送 CAN 总线数据并由 reTerminal DM 接收的情况:

  • 在主机的终端窗口中,您可以执行命令 ./canusb -d /dev/ttyUSB0 -s 250000 -t -i 5 -j 00112233,将 00112233(十六进制)发送到 reTerminal DM。在 reTerminal DM 的调试窗口中,您可以看到接收到的数据为:
0: 0 
1: 17
2: 34
3: 51

这是 x00 x11 x22 x33 十六进制数据集的二进制表示。

对于主机接收 CAN 总线数据并由 reTerminal DM 发送的情况:

  • 您需要点击 reTerminal DM Node-RED 中的 inject 按钮(如下图所示),以将数据 01 02 03 04 05 发送到主机。在主机的终端窗口中,接收命令为 ./canusb -t -d /dev/ttyUSB0 -s 250000 -t,接收到的数据为 05 04 03 02 01,因为数据是以先进先出的顺序排列的:

在 reTerminal DM 上探索更多 Node-RED 节点

技术支持与产品讨论

感谢您选择我们的产品!我们致力于为您提供多种支持,以确保您使用我们的产品时获得顺畅的体验。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...