RS232-485-422-TO-CAN 教程

资料

软件

外部测试程序

数据手册


说明

产品概述

RS232/485/422 TO CAN 是一款工业级 RS232/485/422 转 CAN 隔离型转换器,内置电源隔离、ADI 磁耦隔离和 TVS 等保护电路,工业导轨外壳设计。RS232/485/422 TO CAN 操作简单,零延时自动收发转换,具有通信速度快、稳定、可靠、安全等特点,可适用于各种通信要求较高的工控设备或应用。

产品特性

  • 采用 SP3232EEN+SP485EEN 芯片方案,高速通信稳定、可靠、兼容性好
  • 板载一体式电源隔离,可提供稳定的隔离电压,隔离端无须额外供电
  • 板载一体式数字隔离,可进行信号隔离,可靠性高、抗干扰强、功耗低
  • 符合 CAN 2.0B(扩展帧)规范,兼容 CAN 2.0A(标准帧);符合 ISO 11898-1/2/3。
  • 支持 CAN 通讯波特率范围:10kbps~1000kbps,可选 CAN 波特率
  • 高速转换,RS232/485/422 在 115200 波特率,CAN 在 250kbps 下,CAN 发送速度可达 1270 扩展帧/秒(接近理论最大值 1309 扩展帧/秒);
  • 实现 CAN 与 RS232/485/422 的双向数据通讯;
  • 4 种 CAN 工作模式:透明转换、透明带标识转换、格式转换和 Modbus RTU 协议转换;
  • 板载 TVS (瞬态电压抑制管),可有效抑制电路中的浪涌电压和瞬态尖峰电压,防雷防静电
  • 板载自恢复保险丝和保护二极管,可确保电流和电压稳定输出,防过流过压,提高抗冲击能力
  • 板载 15KV ESD 隔离保护和 600W 雷电浪涌保护
  • 板载 RS485/RS422 接口的 120R 终端电阻,可通过跳线帽设置修改
  • 可以通过RS232/485/422 实现对设备的固件升级,方便定制固件;
  • 支持通过配置软件或串口指令设置工作参数,可断电保存
  • 板载端子供电接口,支持 5 ~ 36V DC 宽电压范围供电
  • 外置 4 个 LED 指示灯,方便查看电源和信号收发状态
  • 工业级金属外壳,支持壁挂和导轨两种安装方式,坚固美观,易安装

产品参数

产品类型工业级隔离型 RS232/485/422 TO CAN 转换器
主机接口CAN
设备接口RS232/485/422
CAN接口通信速率10kbps~1000kbps
方向控制硬件自动判别和控制数据传输方向
匹配电阻默认120R匹配电阻
接口形式接线端子
CAN接口引脚H、L、GND
RS232/485/422接口通信速率1200bps ~ 460800bps
方向控制硬件自动判别和控制数据传输方向
匹配电阻默认NC,预留120R匹配电阻,可跳线帽使能
RS232接口形式DB9 接口
RS485/422接口形式接线端子
RS485接口引脚A+、B-、GND
RS422接口引脚TA、TB、RA、RB、GND
接口保护提供 600W 防雷、浪涌和 15KV 静电保护 (板载 120R 平衡电阻)
传输模式点对多 (至多 32 个节点,16 个节点以上建议加中继器)
按键按下1秒系统复位
长按5秒恢复出厂状态
指示灯PWR电源指示灯,接入电源,检测到电压则亮红灯
RUN运行状态指示灯,正常运行以1秒间隔闪烁
COMCAN 发送指示灯,有数据从 CAN 口发出时亮蓝灯
RS232/485/422 接收指示灯,有数据从设备接口发回 RS232/485/422 时亮蓝灯
CANCAN 接收指示灯,有数据从设备接口发回 CAN 时亮蓝灯
RS232/485/422 发送指示灯,有数据从 RS232/485/422 口发出时亮蓝灯
使用环境温度范围-10℃ ~70℃

接口介绍



产品尺寸


设备配置

使用 USB TO 4CH Serial Converter (或其他USB转RS232、USB转RS485、USB转RS422设备)进行初始化配置,不进行配置则保持出厂设置状态

硬件连接

  • 连接 USB 转 RS232/485/422 设备(以下为连接 USB TO 4CH Serial Converter的 RS485 接口)
RS232/485/422 TO CAN - RS485USB TO 4CH Serial Converter - Port C
RS485 - GNDPort C - GND
RS485 - A+Port C - A+
RS485 - B-Port C - B-

软件操作

  • 打开 SSCOM ,查看使用的 COM 口,当前使用 COM42 进行演示

  • 可根据需求调整显示语言(以下使用默认英文界面)

  • 选择上方连接 RS232/485/422 对应的 COM 口,打开串口

  • 点击 获取设备参数

  • 若需修改设备参数,直接修改后点击保存设备参数,然后点击 重启设备(示例修改 CAN ID)

模式使用说明

透明转换

  • 透明转换方式下,转换器接收到一侧总线的数据就立即转换发送至另一总线侧。

串行帧转CAN

  • 串行帧的全部数据依序填充到CAN 报文帧的数据域里。转换器接收到串行总线上的一帧数据后立即转到CAN总线上。转换成的CAN 报文帧信息(帧类型部分)和帧ID 来自用户事先的配置,并且在转换过程中帧类型和帧ID 一直保持不变。
  • 数据转换对应格式如下图所示

  • 如果收到串的行帧长度小于等于8字节,依序将字符1到n(n为串行帧长度)填充到CAN报文的数据域的1到n个字节位置(如上图中n为7)。
  • 如果串行帧的字节数大于8,那么处理器从串行帧首个字符开始,第一次取8个字符依次填充到CAN报文的数据域。将数据发至CAN总线后,再转换余下的串行帧数据填充到CAN报文的数据域,直到其数据被转换完。
  • 例如,CAN参数设置中选择了“标准帧”,CAN ID 填00000060,注意标准帧只有后11位有效。
  • 转成CAN的数据如下

CAN帧转串口

  • 对于CAN总线的报文也是收到一帧就立即转发一帧。
  • 转换时将CAN报文数据域中的数据依序全部转换到串行帧中。数据格式对应如下图所示。

  • 如果在配置的时候,开启了“CAN信息是否转串行中”,那么转换器会将CAN报文的“帧信息”字节直接填充至串行帧。
  • 如果开启了“CAN帧ID是否转串行中”,那么也将CAN报文的“帧ID”字节全部填充至串行帧。
  • 例如,开启了“CAN信息是否转串行中”,不开启“CAN帧ID是否转串行中”,CAN帧转到串行如下图

RS232 485 422 TO CAN For Mode 4.png

透明带ID转换

  • 透明带标识转换是透明转换的特殊用法,有利于用户通过转换器更方便的组建自己的网络,使用自定的应用协议。
  • 该方式把串行帧中的地址信息自动转换成CAN总线的帧ID。只要在配置中告诉转换器该地址在串行帧的起始位置和长度,转换器在转换时提取出这个帧ID 填充在CAN 报文的帧ID域里,作为该串行帧的转发时的CAN报文的ID。在CAN报文转换成串行帧的时候也把CAN报文的ID转换在串行帧的相应位置。注意在该转换模式下,配置软件的“CAN参数设置”项的“CAN ID”无效,因为此时发送的标识符(帧ID)由上述的串行帧中的数据填充的。

串行帧转CAN

  • 转换器接收完一帧串行数据后,立即转发到CAN总线上。
  • 串行帧中所带有的CAN的ID在串行帧中的起始地址和长度可由配置设定。起始地址的范围是0~7,长度范围分别是1~2(标准帧)或1~4(扩展帧)。
  • 转换时根据事先的配置将串行帧中的CAN帧ID对应全部转换到CAN报文的帧ID域中(如果所带帧ID个数少于CAN报文的帧ID个数,那么在CAN报文的填充顺序是帧ID1~ID4,并将余下的ID填为0),其它的数据依序转换。
  • 如果一帧CAN报文未将串行帧数据转换完,则仍然用相同的ID作为CAN报文的帧ID继续转换直到将串行帧转换完成,如下图所示。

  • 例如,CAN ID在串行帧中的起始地址是0,长度是3(扩展帧情况下),串行帧和转换成CAN报文结果如下图所示。其中,两帧CAN 报文用相同的ID 进行转换。

CAN帧转串行

  • 假定配置的CAN ID在串行帧中的起始地址是0,长度是3(扩展帧情况下),CAN报文和转换成串行帧的结果如下图

格式转换

  • 是一种最简单的使用模式,数据格式约定为13 字节,包含了CAN 帧的所以信息。

转换说明

  • 数据转换格式,如下图所示每一个CAN帧包含13个字节,13个字节内容包括CAN信息+ID+数据。



折叠

Modbus协议转换

  • 将标准的Modbus RTU串行数据协议转换成特定的CAN数据格式,此种转换一般要求CAN总线设备报文可编辑。
  • 串口侧数据必须符合标准的Modbus RTU协议,否则不能转换,注意,CRC校验不转换到CAN侧。
  • CAN侧制定了一个简单高效的分段通讯格式来实现 Modbus RTU的通讯,不区分主机和从机,用户只需按照标准的Modbus RTU协议通讯即可。
  • CAN侧不需要加CRC校验,转换器收到最后一个CAN帧后,会自动加上CRC,组成一帧标准的Modbus RTU数据包,发到串口上。
  • 该模式下,配置软件的【CAN参数设置】的【CAN ID】无效,因为此时发送的标识符(帧ID)由Modbus RTU串行帧中的地址域(节点ID)填充。

串行帧格式(Modbus RTU)

  • 串行参数:波特率、数据位、停止位和校验位都可通过配置软件设置。
  • 数据协议需符合标准的Modbus RTU协议。

CAN帧格式

  • CAN侧设计了一套分段协议格式,其定义了一个长度大于 8 字节的信息进行分段以及重组的方法,如下所示。
  • 注意,当CAN帧为单帧时,分段标志位为0x00。

RS232 485 422 TO CAN For Mode 11.png

  • CAN帧信息(远程帧或数据帧;标准帧或扩展帧)通过配置软件设置。
  • 传输的 Modbus协议内容即可从“数据 2”字节开始,如果协议内容大于 7 个字节,那么将剩下的协议内容照这种分段格式继续转换,直到转换完成。
  • 数据1是分段控制信息(占1个字节,8Bit),其含义如下:

     分段标记
        占1个Bit位(Bit7), 标志该报文是否是分段报文。该位为 0 表示单独报文,为 1 表示属于被分段报文中的一帧。
     分段类型
        占2个Bit位(Bit6,Bit5),用于表示该报文在分段报文中的类型
        RS232 485 422 TO CAN For Mode 12.png
     分段计数器
        占5个Bit位(Bit4-Bit0),用于区分同一帧Modbus报文中分段的序号,够验证是同一帧的分段是否完整。

转换示例

  • 串口侧Modbus RTU数据(十六进制):

     01 03 14 00 0A 00 00 00 00 00 14 00 00 00 00 00 17 00 2C 00 37 00 C8 4E 35

  • 第一个字节01是Modbus RTU的地址码,转换成CAN的ID.7-ID.0。
  • 最后2个字节(4E 35)为Modbus RTU的CRC校验,丢掉不转换。
  • 最终转成CAN数据报文如下:

     第1帧CAN报文:81 03 14 00 0A 00 00 00
     第2帧CAN报文:a2 00 00 14 00 00 00 00
     第3帧CAN报文:a3 00 17 00 2C 00 37 00
     第4帧CAN报文:c4 c8

  • CAN报文的帧类型(标准帧或扩展帧)通过配置软件设置;
  • 每个CAN报文的第一个数据都有分段信息来填充(81、a2、a3和c4),该信息不转换到Modbus RTU帧中,仅做为报文的确认控制信息。

  • CAN侧的数据到ModBus RTU的转换原理和上面相同,CAN侧收到上述4条报文后,转换器会将收到的CAN报文按照上述的CAN分段机制组合成一帧RTU数据,并在结尾加上CRC校验

功能验证

RS232 TO CAN 测试

使用 USB-CAN-A 与 USB TO 4CH Serial Converter 进行功能演示

硬件连接

  • 连接 CAN 设备
RS232/485/422 TO CAN - CANUSB-CAN-A
CAN - CAN HCAN - CAN H
CAN - CAN LCAN - CAN L
CAN - CAN GCAN - GND
  • 连接 RS232 设备
RS232/485/422 TO CAN - RS232USB TO 4CH Serial Converter - Port D
RS232 - GNDPort D - GND
RS232 - TXDPort D - RXD
RS232 - RXDPort D - TXD

软件操作

  • 开启 USB-CAN-A_TOOL
  • 选择 USB-CAN-A 对应 COM 口,点击 打开

  • 选择 CAN设备的波特率为 250kbps,点击 设置并启动 ,输入需要发送的数据,选择 循环

  • 开启 1 个 SSCOM,选择 USB TO 4CH Serial Converter 的 Port D 对应 COM 口,点击 打开串口

  • 在 SSCOM 软件中,勾选 HEX显示、HEX发送、加时间戳和分包显示,并输入要发送的数据
11 22 33 44 55 66 77 88

  • 在 USB-CAN-A_TOOL 中选中一个数据,点击 发送选中帧

  • 可看到一收一发的现象

  • 或点击 SSCOM 的定时发送

  • 可看到一收一发的现象

RS232 485 422 TO CAN For RS232 8.png

RS485 TO CAN 测试

使用 USB-CAN-A 与 USB TO 4CH Serial Converter 进行功能演示

硬件连接

  • 连接 CAN 设备
RS232/485/422 TO CAN - CANUSB-CAN-A
CAN - CAN HCAN - CAN H
CAN - CAN LCAN - CAN L
CAN - CAN GCAN - GND
  • 连接 RS485 设备
RS232/485/422 TO CAN - RS485USB TO 4CH Serial Converter - Port C
RS485 - GNDPort C - GND
RS485 - A+Port C - A+
RS485 - B-Port C - B-

软件操作

  • 开启 USB-CAN-A_TOOL
  • 选择 USB-CAN-A 对应 COM 口,点击 打开

  • 选择 CAN设备的波特率为 250kbps,点击 设置并启动 ,输入需要发送的数据,选择 循环

  • 开启 1 个 SSCOM,选择 USB TO 4CH Serial Converter 的 Port C 对应 COM 口,点击 打开串口

  • 在 SSCOM 软件中,勾选 HEX显示、HEX发送、加时间戳和分包显示,并输入要发送的数据
11 22 33 44 55 66 77 88

  • 在 USB-CAN-A_TOOL 中选中一个数据,点击 发送选中帧

  • 可看到一收一发的现象

  • 或点击 SSCOM 的定时发送

  • 可看到一收一发的现象

RS232 485 422 TO CAN For RS485 8.png

RS422 TO CAN测试

使用 USB-CAN-A 与 USB TO 4CH Serial Converter 进行功能演示

硬件连接

  • 连接 CAN 设备
RS232/485/422 TO CAN - CANUSB-CAN-A
CAN - CAN HCAN - CAN H
CAN - CAN LCAN - CAN L
CAN - CAN GCAN - GND
  • 连接 RS422 设备
RS232/485/422 TO CAN - RS422USB TO 4CH Serial Converter - Port C
RS422 - GNDPort C - GND
RS422 - TAPort C - RA
RS422 - TBPort C - RB
RS422 - RAPort C - TA
RS422 - RBPort C - TB

软件操作

  • 开启 USB-CAN-A_TOOL
  • 选择 USB-CAN-A 对应 COM 口,点击 打开

  • 选择 CAN设备的波特率为 250kbps,点击 设置并启动 ,输入需要发送的数据,选择 循环

  • 开启 1 个 SSCOM,选择 USB TO 4CH Serial Converter 的 Port C 对应 COM 口,点击 打开串口

  • 在 SSCOM 软件中,勾选 HEX显示、HEX发送、加时间戳和分包显示,并输入要发送的数据
11 22 33 44 55 66 77 88

  • 在 USB-CAN-A_TOOL 中选中一个数据,点击 发送选中帧

  • 可看到一收一发的现象

  • 或点击 SSCOM 的定时发送

  • 可看到一收一发的现象

RS485 CAN HAT 上扩展

RS485 CAN HAT 相关使用说明
请先行了解 RS485 CAN HAT 相关使用

接口扩展

扩展 CAN 接口

  • 连接 RS485 口,将 RS485 CAN HAT 扩展为 2 个 CAN 接口
RS232/485/422 TO CAN - RS485RS485 CAN HAT
RS485 - A+RS485 - A+
RS485 - B-RS485 - B-

扩展 RS232/485/422 接口

  • 连接 CAN 口,将 RS485 CAN HAT 扩展为 1 个 RS485 接口和一个 RS232/485/422 接口
RS232/485/422 TO CAN - CANRS485 CAN HAT
CAN - CAN HCAN - CAN H
CAN - CAN LCAN - CAN L

示例演示

使用 RS232/485/422 TO CAN 让 RS485 CAN HAT 的 RS485 与 CAN 进行通信

硬件连接

RS232/485/422 TO CAN - RS485RS485 CAN HAT
CAN - CAN HCAN - CAN H
CAN - CAN LCAN - CAN L
RS485 - A+RS485 - A+
RS485 - B-RS485 - B-

软件操作

前置操作

  • 将 RS485 CAN HAT 模块与树莓派连接,然后修改开机脚本config.txt
sudo nano /boot/config.txt
  • 在最后一行加入如下:
dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=2000000
  • 同时在 /boot/config.txt 找到如下配置语句使能串口,如果没有,可添加在文件最后面。
enable_uart=1

安装库

以下操作为必须操作

安装can-utils

sudo apt-get install can-utils

安装 wiringpi 环境

#打开树莓派终端,并运行以下指令
cd
sudo apt-get install wiringpi
#对于树莓派2019年5月之后的系统(早于之前的可不用执行),可能需要进行升级:
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio -v
# 运行gpio -v会出现2.52版本,如果没有出现说明安装出错

安装 Python 环境

sudo apt-get update
sudo apt-get install python3-pip
sudo apt-get install python-serial
  • 配置运行环境
sudo pip install python-can
  • 若上方指令运行失败,请使用下列其他镜像源下载
sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-can
sudo pip install -i https://mirrors.aliyun.com/pypi/simple python-can
sudo pip install -i https://pypi.mirrors.ustc.edu.cn/simple python-can

修改 RS232/485/422 TO CAN 配置

  • 使用 软件修改 RS232/485/422 TO CAN 设备的 CAN 接口 ID
  • 将CAN ID 设置为 123 ,请按照 设备配置 依次操作

C 示例

  • 若以执行过下载操作,请跳过文件删除步骤与程序下载步骤(即下方两点)
  • 删除此前下载的资料包,请注意:若需要保留原 RS485_CAN_HAT_Code 文件请拷贝至其他路径
cd
rm -rf RS485_CAN_HAT_Code.zip
rm -rf RS232-485-422_Code.zip
rm -rf RS485_CAN_HAT_Code
sudo ifconfig can0 down
  • 下载示例程序
cd
sudo apt-get install unzip
wget  https://www.waveshare.net/w/upload/6/6b/RS232-485-422_Code.zip
unzip RS232-485-422_Code.zip
sudo chmod 777 -R RS485_CAN_HAT_Code/
  • 运行CAN发送、RS485接收示例
cd
cd RS485_CAN_HAT_Code/CAN_TO_RS485/wiringPi/
make clean
make
sudo ./can_send

  • 运行RS485发送、CAN接收示例
cd
cd RS485_CAN_HAT_Code/RS485_TO_CAN/wiringPi/
make clean
make
sudo ./485_send

Python 示例

  • 若以执行过下载操作,请跳过文件删除步骤与程序下载步骤(即下方两点)
  • 删除此前下载的资料包,请注意:若需要保留原 RS485_CAN_HAT_Code 文件请拷贝至其他路径
cd
rm -rf RS485_CAN_HAT_Code.zip
rm -rf RS232-485-422_Code.zip
rm -rf RS485_CAN_HAT_Code
sudo ifconfig can0 down
  • 下载示例程序
cd
sudo apt-get install unzip
wget  https://www.waveshare.net/w/upload/6/6b/RS232-485-422_Code.zip
unzip RS232-485-422_Code.zip
sudo chmod 777 -R RS485_CAN_HAT_Code/
  • 重新打开can0,运行CAN发送、RS485接收示例
cd
cd RS485_CAN_HAT_Code/CAN_TO_RS485/python/
sudo python can_send.py

  • 重新打开can0,运行RS485发送、CAN接收示例
cd
cd RS485_CAN_HAT_Code/RS485_TO_CAN/python/
sudo python 485_send.py