【EsDA应用】如何用5分钟快速建立CAN通信

CAN总线的高可靠性、高性能等优点使其在工业测控以及工业自动化等领域中被大量广泛使用。本文基于EsDA开发平台,为您简单介绍如何用5分钟快速建立CAN通信。

简介

CAN是ISO国际标准化的串行通信协议。由于性能高,可靠性高现被广泛应用在汽车,医疗,船舶,工业自动化等其他方面。因为只需要两根线就可在多个设备间进行数据通信所以被广泛使用。本文基于EsDA开发平台,为您简单介绍如何用5分钟快速建立CAN通信。

基本工作原理:通过USBCANFD-200U接口卡实现主板与PC实现CAN(FD)通信。

本应用选用 EPC6450-AWI开发板USBCANFD-200U接口卡与PC连接,使其能与接入CAN(FD)网络的开发板进行数据收发,USBCANFD不同系列产品支持1~8路CAN(FD)通信,可根据不同需求进行选择,本文采用的200U系列仅支持2路通信。该实验用到了timer,fscript,canfd_out,canfd_in,fscript和log节点。

前期准备

若是刚开始接触EsDA,可先阅读EsDA其他系列文章,从零开始搭建环境和掌握基本开发流程,已有基础的可以跳过:

  • EsDA MPC-ZC1 入门(一)—— 软件安装
  • EsDA MPC-ZC1入门(二)—— LED控制
  • 【EsDA应用】5分钟实现一个串口通信业务

1. 硬件准备

1.1 准备一个USBCANFD-200U接口卡,并在PC上下载并安装ZCANPRO的上位机软件。

【EsDA应用】如何用5分钟快速建立CAN通信

1.2 准备EPC6450-AWI开发板,并按照下图所示连接好硬件。

【EsDA应用】如何用5分钟快速建立CAN通信

将EPC6450-AWI开发板上的CAN_0与USBCANFD-200U随机一路进行连接,并将USBCANFD-200U接口卡的USB2.0连接到PC上,建立好硬件连接。

2. 节点介绍

实现CAN(FD)总线通信,需要使用到canfd相关的AWFlow节点,包括canfd_out,canfd_in和canfd三个节点。

2.1 canfd

CANFD通信协议配置节点,属于隐式节点,不会显示在画布中,需要配套相应功能节点一起使用。

2.1.1 属性

【EsDA应用】如何用5分钟快速建立CAN通信

  • 端口(port):设备端口路径,用于系统打开设备;
  • CAN控制器类型(can_type):设置CAN控制器类型。值为0表示CAN;值为1表示CANFD;
  • 非标准ISO模式(non_iso_mode):开启/关闭非标准ISO模式。值为0表示关闭;值为1表示开启;
  • 仲裁域波特率(nominal_bps):设置仲裁域波特率,单位是bps,值域是0~1000000;
  • 仲裁域采样点精确的分子值(nominal_spf):设置仲裁域采样点精确的分子值,采样点用分数来表示,如需要将采样点设置为87.5%,则设置采样点的分母为1000,分子为875即可。因硬件原因可能导致不能精确地配置采样点,增加了两个分子值来表示范围。值域是0~10240;
  • 仲裁域采样点最小的分子值(nominal_spf_min):设置仲裁域采样点最小分子值,值域是0~10240;
  • 仲裁域采样点最大的分子值(nominal_spf_max):设置仲裁域采样点最大分子值,值域是0~10240;
  • 仲裁域采样点分母值(nominal_spd):设置仲裁域采样点分母值,值域是0~10240数据域波特率(data_bps):设置数据域波特率,值域是0~5000000;
  • 数据域采样点精确的分子值(data_spf):设置数据域采样点精确的分子值,采样点用分数来表示,如需要将采样点设置为87.5%,则设置采样点的分母为1000,分子为875即可。因硬件原因可能导致不能精确地配置采样点,增加了两个分子值来表示范围。值域是0~10240;
  • 数据域采样点最小的分子值(data_spf_min):设置数据域采样点最小的分子值。值域是0~10240;
  • 数据域采样点最大的分子值(data_spf_max):设置数据域采样点最大的分子值。值域是0~10240;
  • 数据域采样点分母值(data_spd):数据域采样点分母值。值域是0~10240;
  • 滤波器使能(filter_enable):开启/关闭滤波器。值为0表示关闭;值为1表示开启;
  • 滤波表(filter_table):滤波表,滤波表采用json数组的形式设置,最大支持32条,符合滤波表条件的报文将被接收,不符合的报文会被过滤,但错误报文不会被过滤。滤波表格式如下:id表示报文ID;msk表示ID掩码,ID掩码部分相同的报文将被接收;recv_std表示是否接收标准帧;recv_ext表示是否接收扩展帧;recv_data表示是否接收数据帧;recv_rmt:是否接收远程帧。

* 配置节点(config类型)只存在节点属性,不具备输入输出功能。

2.2 canfd_in

2.2.1 属性

【EsDA应用】如何用5分钟快速建立CAN通信

  • 名称(name):节点名称,用于索引查找本节点;
  • 显示名称(displayName):用于画布上显示的名称;
  • 关联配置(config):绑定一个canfd的配置节点。

2.2.2 输出

  • payload:CAN报文,1-8字节为时间戳,9-12字节为ID,13-14字节为报文标志位【位0:发送帧标志(单次发送)。位1:CANFD帧标志,位2:远程帧标志,位3:扩展帧标志,位4:错误帧标志,位5:转换可变速率,位6:错误状态指示(0:被动错误,1:主动错误)】,15-16字节为通道号(低5位)和数据长度(高11位),17字节到末尾为报文数据;
  • payloadLength:负载长度。

* pump类型节点通常不具备数据输入。

2.3 canfd_out

2.3.1 属性

【EsDA应用】如何用5分钟快速建立CAN通信

  • 名称(name):节点名称,用于索引查找本节点;
  • 显示名称(displayName):用于画布上显示的名称;
  • 关联配置(config):绑定一个canfd的配置节点。

2.3.2 输入

  • payload:CAN报文,1-8字节为时间戳,9-12字节为ID,13-14字节为报文标志位【位0:发送帧标志(单次发送),位1:CANFD帧标志,位2:远程帧标志,位3:扩展帧标志,位4:错误帧标志,位5:转换可变速率,位6:错误状态指示(0:被动错误,1:主动错误)】,15-16字节为通道号(低5位)和数据长度(高11位),17字节到末尾为报文数据;
  • payloadLength:负载长度。

* sink类型节点通常不具备数据输出。

业务处理

本应用主要通过USBCANFD-200U接口卡将PC与接入CAN网络的EPC6450-AWI开发板进行数据收发,具体实现如下:

1. 添加节点并连线

本实验主要执行两个步骤:

  • EPC6450-AWI开发板上的CAN_0通过CAN通信协议,canfd_out节点定时向USBCANFD-200U接口卡发送0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,八个字节的数据,发送数据可在PC上的工具ZCANPRO上查看。
  • PC上的工具ZCANPRO通过CAN总线通信协议定时发送0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77八个字节的数据,EPC6450-AWI开发板上通过canfd_in这个节点去接收数据,并通过log最终打印可查看。

采用的节点有timer,fscript,canfd_out,canfd_in,fscript和log节点。

【EsDA应用】如何用5分钟快速建立CAN通信

2. 配置节点

双击timer节点,设置canfd_out节点发送数据的定时时间。

双击canfd_out节点的前驱节点fscript,结合2.2关于canfd_out节点的介绍可知canfd_out节点有两个输入参数:payload;payloadLength。一个传递通信数据内容,一个传递通信数据长度,内容如下:

buf = wbuffer_create()
wbuffer_write_int8(buf, 202)
wbuffer_write_int8(buf, 150)
wbuffer_write_int8(buf, 9)
wbuffer_write_int8(buf, 124)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 0)

wbuffer_write_int8(buf, 17)
wbuffer_write_int8(buf, 1)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 1)

wbuffer_write_int8(buf, 0)
wbuffer_write_int8(buf, 1)
wbuffer_write_int8(buf, 2)
wbuffer_write_int8(buf, 3)
wbuffer_write_int8(buf, 4)
wbuffer_write_int8(buf, 5)
wbuffer_write_int8(buf, 6)
wbuffer_write_int8(buf, 7)

msg.payload = wbuffer_get_data(buf)msg.payloadLength = str(24)

双击canfd_out和canfd_in节点,并点击配置节点名旁边的铅笔图标去配置canfd的属性。

【EsDA应用】如何用5分钟快速建立CAN通信

因为canfd_in和canfd_out节点的配置节点都是同一个,所以配置信息一致。根据2.2中对配置节点canfd的属性介绍,配置如下:

【EsDA应用】如何用5分钟快速建立CAN通信

双击canfd_in的消费者节点fscript,根据2.2节点介绍中对canfd_in的输出参数描述,fscript的内容如下:

data_str = "data:"
len = msg.payloadLength
rbuf = rbuffer_create(msg.payload, msg.payloadLength)
for (var i = 0; i < len; i = i 1) {
data = rbuffer_read_uint8(rbuf);
//print("data:" data)
data_str = data_str data
if (i < (len – 1)) {
data_str = data_str ","
}
}

output.payload = data_str

3. 下载验证

因为EPC6450-AWI开发板是通过网口去下载流图,所以打开AWFlow_Designer后需要配置目标板IP和端口号。点击流图下载,显示下载流图成功即可。

【EsDA应用】如何用5分钟快速建立CAN通信

打开上位机ZCANPRO并开启对应的通道号,将波特率等参数选择与流图上的canfd配置节点参数同步一致。上位机CAN视图可以查看从上位机发送出去的数据和接收到的数据如下。

【EsDA应用】如何用5分钟快速建立CAN通信

根据流图中log节点的打印信息可知:数据内容和长度与上位机发送的数据是一致的。

【EsDA应用】如何用5分钟快速建立CAN通信

综上测试结果可知:实验效果已达成。

ZLG官方商城:https://sale.zlg.cn/

ZLG开发者社区:https://z.zlg.cn/

更多详细产品信息、技术干货,可关注微信公众号“ZLG致远电子”

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。