前言

在开发和测试串口通信程序(如DLT645协议设备通信)时,通常需要物理串口设备进行调试。但在没有实体设备或需要在不同平台间进行调试的情况下,虚拟串口成为了理想的解决方案。本文将详细介绍在Windows系统上使用VSPD和在Linux系统上创建并使用虚拟串口的方法。

一、虚拟串口概述

虚拟串口是通过软件模拟的串口设备,它可以在没有物理串口硬件的情况下,提供与真实串口相同的功能。虚拟串口通常成对出现,形成一个通信通道,数据从一个串口发出会自动传输到另一个配对的串口。这种特性使得它非常适合用于:

  • 串口程序开发和调试
  • 不同平台间的串口通信测试
  • 无需硬件设备的离线测试
  • 学习串口通信协议

二、Windows系统使用VSPD虚拟串口

2.1 VSPD软件介绍

Virtual Serial Port Driver (VSPD) 是一款功能强大的Windows虚拟串口软件,可以创建成对的虚拟串口,使应用程序能够通过这些虚拟串口进行通信,就像使用物理串口一样。

2.2 安装VSPD

  1. 下载VSPD软件安装包
    链接: https://pan.baidu.com/s/1mP7yeBQfQVqi0Efl4e-ppw?pwd=wei6 提取码: wei6

  2. 运行安装向导,按照提示完成安装(建议安装在非系统盘,如D盘)

  3. 破解:将 Cracked 目录下的 vspdconfig.exe 和 vspdctl.dll 拷贝到 VSPD 软件安装目录下进行替换即可

    在这里插入图片描述

  4. 安装完成后,从开始菜单或桌面快捷方式启动VSPD程序

2.3 创建虚拟串口

VSPD创建虚拟串口的步骤非常简单:

  1. 打开VSPD软件界面

  2. 点击添加端口按钮添加一对虚拟串口(尽量选择靠后的一对)

    在这里插入图片描述

  3. 虚拟串口创建成功后,会显示在左侧的"Virtual ports"列表中

    在这里插入图片描述

注意:VSPD是以串口对形式添加的,例如COM1和COM2成对,那么从COM1发送的数据只能被COM2接收,反之亦然。

2.4 查看虚拟串口状态

创建虚拟串口后,可以在以下位置查看串口状态:

  1. VSPD软件界面中可以看到每个虚拟串口的状态、累计收发数据量等信息
  2. 打开Windows设备管理器,在"端口(COM和LPT)"类别下可以看到新创建的虚拟串口
  3. VSPD界面中的"baudrate emulation"选项若为"enable",表示这两个串口的波特率必须一致才能正常通信

2.5 测试虚拟串口通信

要测试虚拟串口通信,可以使用两个串口调试助手(如SSCOM、串口调试助手等):

  1. 打开第一个串口调试助手,选择COM10,设置合适的波特率(如9600)、数据位(8位)、停止位(1位)和无校验
  2. 打开第二个串口调试助手,选择COM11,使用相同的参数设置
  3. 在第一个调试助手中发送数据,观察第二个调试助手是否能接收到数据
  4. 同样,在第二个调试助手中发送数据,检查第一个调试助手是否能接收

下面是测试结果,COM10发送数据,COM11接收数据

在这里插入图片描述

2.6 VSPD高级功能

VSPD还提供了一些高级功能:

  • 波特率仿真:确保成对串口使用相同的波特率
  • 数据监控:可以监控通过虚拟串口传输的数据
  • 支持多对虚拟串口同时使用
  • 自动启动功能:设置VSPD在系统启动时自动创建指定的虚拟串口对

2.7 虚拟串口与虚拟机的配合使用

在需要在虚拟机中测试串口通信时,可以这样配置:

  1. 在Windows主机上使用VSPD创建虚拟串口对(如COM3和COM4)
  2. 关闭虚拟机,进入虚拟机设置
  3. 添加串行端口设备,选择"使用物理串行端口",并选择配对中的一个串口(如COM3)
  4. 启动虚拟机后,可以在Linux虚拟机中通过对应的设备文件(如/dev/ttyS3)访问该串口
  5. 在Windows主机上使用串口调试助手连接另一个配对串口(COM4)进行测试

三、Linux系统使用虚拟串口

3.1 Linux虚拟串口创建方法

在Linux系统中,有多种方法可以创建虚拟串口。下面介绍两种常用的方法:使用socat工具和使用tty0tty驱动。

3.2 使用socat创建虚拟串口

3.2.1 安装socat

socat是一个功能强大的网络工具,可以用于创建虚拟串口对。首先需要安装socat:

sudo apt-get update
sudo apt-get install socat
3.2.2 创建虚拟串口对

使用以下命令创建两个虚拟串口:

socat -d -d pty,raw,echo=0,link=/dev/ttyV0 pty,raw,echo=0,link=/dev/ttyV1

这条命令的参数说明:

  • -d -d:增加调试信息输出
  • pty:创建伪终端
  • raw:使用原始模式
  • echo=0:禁用回显
  • link=/dev/ttyV0:创建指向伪终端的符号链接

执行命令后,socat会在终端显示创建的伪终端设备路径,同时在/dev/目录下创建ttyV0和ttyV1的符号链接

在这里插入图片描述

3.3 使用tty0tty驱动创建虚拟串口

3.3.1 下载并编译tty0tty驱动

tty0tty是一个专门的Linux虚拟串口驱动项目,可以创建稳定的虚拟串口对。

  1. 克隆项目代码:
git clone https://github.com/freemed/tty0tty.git
  1. 进入项目目录并编译:
cd tty0tty/module
make
  1. 加载编译好的驱动模块:
sudo insmod tty0tty.ko
3.3.2 验证tty0tty安装

安装完成后,可以通过以下命令验证驱动是否加载成功:

ls /dev | grep tnt

如果安装成功,应该能看到类似tnt0, tnt1, …, tnt7的设备文件,其中tnt0与tnt1配对,tnt2与tnt3配对,以此类推。

3.4 配置虚拟串口参数

创建虚拟串口后,可能需要配置串口参数,如波特率、数据位、停止位和校验位。可以使用stty命令进行配置:

# 配置波特率为9600,8数据位,1停止位,无校验
stty -F /dev/ttyV0 speed 9600 cs8 cstopb -parenb

# 也可以使用更简洁的方式
stty -F /dev/ttyV0 9600 cs8 -parenb -cstopb

参数说明:

  • -F /dev/ttyV0:指定要配置的串口设备
  • speed 9600:设置波特率为9600
  • cs8:设置8个数据位
  • cstopb:设置2个停止位(使用-cstopb表示1个停止位)
  • -parenb:禁用奇偶校验(使用parenb表示启用奇偶校验)

3.5 测试Linux虚拟串口通信

配置完成后,可以使用基本的Linux命令测试虚拟串口通信:

  1. 在第一个终端中,监听一个虚拟串口:

    cat /dev/ttyV0
    
  2. 在第二个终端中,向另一个配对的虚拟串口发送数据:

    echo "Hello, Virtual Serial Port!" > /dev/ttyV1
    

    在这里插入图片描述

  3. 回到第一个终端,应该能看到从第二个终端发送的数据

    在这里插入图片描述

3.6 Linux串口权限设置

在Linux系统中,串口设备默认情况下通常只有root用户有权限访问。为了让普通用户也能访问虚拟串口,需要设置正确的权限:

# 给所有用户读写权限
sudo chmod 666 /dev/ttyV0

# 或者将用户添加到dialout或tty用户组
sudo usermod -a -G dialout $USER
sudo usermod -a -G tty $USER

设置完成后,可能需要注销并重新登录才能使权限生效。

四、常见问题与解决方案

4.1 Windows下常见问题

  1. 虚拟串口无法创建

    • 确保有足够的权限运行VSPD
    • 检查是否有其他程序占用了要创建的串口编号
    • 尝试以管理员身份运行VSPD
  2. 串口通信不稳定

    • 确保两个串口使用相同的参数设置(波特率、数据位等)
    • 关闭可能干扰的其他串口程序
    • 尝试重启VSPD或重新创建虚拟串口对

4.2 Linux下常见问题

  1. 权限错误

    • 确保以root权限运行socat或加载驱动模块
    • 使用chmod命令设置正确的文件权限
    • 将用户添加到相应的用户组
  2. 设备文件不存在

    • 检查驱动是否正确加载
    • 验证socat命令是否成功执行
    • 查看/dev目录确认设备文件是否创建
  3. 通信中断

    • 对于socat,确保命令行窗口保持打开状态
    • 对于tty0tty,检查驱动模块是否被意外卸载
    • 尝试重新创建虚拟串口对

五、在DLT645协议开发中的应用

在DLT645协议开发(如本文项目)中,虚拟串口特别有用:

  1. 离线测试:可以在没有实际电表设备的情况下开发和测试协议解析代码
  2. 跨平台调试:在Windows和Linux之间测试通信兼容性
  3. 故障模拟:可以模拟各种通信异常情况,测试错误处理机制
  4. 性能测试:可以通过调整参数测试不同波特率和配置下的性能表现

六、总结

虚拟串口是串口通信开发和测试中的重要工具,可以有效降低开发成本和提高开发效率。Windows系统上的VSPD提供了简单易用的图形界面,适合快速上手;而Linux系统上的socat和tty0tty驱动则提供了更灵活的命令行控制方式。根据实际需求选择合适的工具和方法,可以显著提高串口通信项目的开发效率。

在使用虚拟串口时,需要注意:

  1. 虚拟串口通常成对使用,数据在配对的两个串口间传输
  2. 通信双方需要使用相同的串口参数设置
  3. 确保有正确的权限访问串口设备
  4. 完成测试后记得清理创建的虚拟串口,避免资源浪费

通过合理使用虚拟串口工具,可以在没有物理设备的情况下,高效地进行串口通信程序的开发和测试。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐