1.概述
使用RS485物理接口进行串口调试。
背景
适用范围
1.1背景
在ED-HMI2120系列产品上实现与Windows平台进行485通讯。RS485是一种功能强大的串行通信标准,具有良好的抗干扰能力、长距离传输能力和高速传输能力,适用于各种工业控制和自动化应用中的数据通信需求。基于RS485底层,可以开发应用层的上层协议Modbus-RTU和Modbus-ASCII。本文仅列出常用串口调试工具及方法。
1.2适用范围
本应用适用于ED-IPC2000、ED-IPC2200、ED-IPC2100、ED-HMI2120系列、ED-HMI2220系列、ED-HMI202-系列产品。如果您使用其他系列产品,但需要使用485进行串口底层调试,也可以参考本文档。
2.应用指导
介绍在ED-HMI2120系列产品上使用485调试。
2.1RS485使用与调试
RS485为串口通讯的物理层接口协议。以下介绍在Windows下与ED-HMI2120系列产品使用485进行串口通讯并实现部分串口操作。
前提条件:
- USB转485模块
一台有可用USB口的Windows电脑
一台HMI-2120系列产品
Windows下安装sscom51串口调试工具:sscom51
正确接线:根据模块所标明,将A与HMI2120上所选择的A2连接,B与B2连接。GND与GND相连。如下图所示
- 将USB转485模块插入电脑USB口后打开sscom51工具。能识别端口号。
2.1.1使用picocom进行串口调试
Picocom 是一个更轻量级的串口通信工具,它的功能较为简单。它专注于提供基本的串口通信功能,因此更适合于简单的串口交互和调试。
前提条件:已按照指示正常接线,并Windows上可正常识别端口号。
操作步骤:
HMI命令行终端安装picocom工具
sudo apt install picocom
HMID打开串口等待数据交互
sudo picococm -b 115200 /dev/com2
115200:设置的波特率
/dev/com2:由查询ED-HMI2120应用手册得知。接线A2,B2口对应串口com2
输入Ctrl+A,Ctrl+C打开本地回显,等待另一方打开串口即可开始调试
Windows操作:打开sscom的串口进行收发测试。
a) 在sscom51发送区编辑要发送的数据,点击发送,可以在HMI命令行终端中看到对应数据,收发成功。
b) 在HMI命令行终端写入数据。可以在sscom51界面接收到数据,收发成功。
使用16进制收发
a) 在HMI命令行输入如下命令打开16进制显示
sudo picocom /dev/com2 --imap spchex,nrmhex,8bithex
b) 再次使用sscom51发送字符串数据,在HMI本地回显为16进制显示。
c)在HMI命令终端输入Ctrl+A,Ctrl+W,可以按HEX格式发送数据。
2.1.2使用minicom调试
Minicom 是一个功能更为丰富的串口通信程序,提供了更多的功能,如脚本支持、多窗口、X/Y/ZModem 文件传输等。它是一个相对较老的工具,但仍然被广泛使用。下文同样使用minicom进行简单的串口底层调试。
- HMI命令行安装minicom工具
apt install minicom
配置minicom参数
a) 输入命令打开配置界面
minicom -s
b) 选择Serial port setup进行参数配置波特率,端口号,流控,停止位等。此处配置同上节picocom。
数据收发测试
使用Ctrl+A+E打开本地回显,同picocom在终端输入调试即可。
设置16进制显示
a) 输入命令进入配置界面,选择screen and keyboard。
b) 输入S设置Hex Display,显示Yes后。键盘输入Enter保存。
c) 同2.1节类似,Windows端发送字符串,在minicom终端会显示解析为16进制显示。
2.1.3 使用pyserial进行调试
pyserial 是一个 Python 库,用于简化串口通信。在嵌入式系统开发、设备控制和数据采集等领域,pyserial 非常有用。它支持多平台,包括 Windows、Linux 和 macOS,并且可以处理各种串口设备。下文介绍使用python脚本实现串口数据收发。
操作步骤:
查看是否安装python环境
python -V
若返回版本号则有。没有则安装使用如下指令安装
sudo apt install python
创建代码编写示例文件
a) 使用如下指令创建.py文件
nano test.py
b) 将代码复制进文件中,然后Ctrl+S,Ctrl+X保存退出
import serial # pyserial
try:
# 端口号设置
portx = "/dev/com2"
# 波特率设置
bps = 115200
# 超时设置
timex = 5
# 打开串口,并得到串口对象
ser = serial.Serial(portx, bps, timeout=timex)
data = [0x01, 0x02, 0x03, 0x04, 0x05, 0x00, 0x00, 0x00]
# 写数据
result = ser.write(data)
print("写总字节数:", result)
ser.close() # 关闭串口
except Exception as e:
print("error!", e)
输入指令执行文件
python test.py
在Windows上sscom51界面上接收到数据,收发良好。