前言
本文介绍使用 ActiveX 控件 MSComm 实现高性能的串口收发。
一、什么是 MSComm
MSComm 作为一个串行通讯控件,每个 MSComm 控件,都对应一个串口,若需访问多个串口时必须使用多个 MSComm 控件。
MSComm 是 ActiveX 控件,可以在 PC 上控制串口数据的发送和接收,支持查询方式和中断方式(Windows 下称为事件驱动方式)。
- 中断方式:当串口有数据到达或有数据写入到串口缓冲中时,就会触发中断,可以使用 OnComm 捕获事件并进行处理。这种方式响应及时,比轮询方式效率要高。
- 查询方式:实际上仍热是事件驱动的,需要检查 CommEvent 属性值来查询事件。
二、MSComm 控件下载
点此链接:MSComm控件
三、MSComm 控件的注册
1、将上面下载的 MSCOMM.SRG、MSCOMM32.DEP、MSCOMM32.oca、mscomm32.ocx 这四个文件放到 C:\windows\system32(32位系统) 或 C:\Windows\SysWOW64(64位系统)目录下。
2、在“此目录“下找到“cmd.exe”文件,右键以管理员身份运行,在弹出的对话框内输入:regsvr32 mscomm32.ocx 后,回车。控件注册成功后,如下图。
四、使用 MSComm 控件
1、前面板放置控件
①、打开前面板,右键 -> 容器 -> ActiveX容器
②、右键 ActiveX容器 -> 插入 ActiveX对象
③、选择 Microsoft Communication Control,version 6.0,点击确定,得到下图的 MSComm 控件
④、右键点击 MSComm 控件,选择“属性浏览器”,可得该控件的属性
2、MSComm 的常用属性
- CommPort:设置并返回通讯端口号
- Settings:以字符串形式设置并返回波特率、奇偶校验、数据位、停止位
- PortOpen:设置并返回通讯端口的状态。也可以打开和关闭端口
- Input:从接收缓冲区返回和删除字符
- InputLen:设置并返回 input 属性从接收缓冲区读取的字符数
- Output:向传输缓冲区写一个字符串
- RThreshold:在设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前,设置并返回要接收的字符数
- CTSHolding:确定是否可通过查询 CTS 线的状态发送数据
- SThreshold:设置 CommEvent 属性为 comEvSend 并产生 OnComm 事件之前,设置并返回传输缓冲区中允许的最小字符数
- CDHolding:通过查询 CD 线的状态确定当前是否有传输
- DSRHolding:确定 DSR 线的状态
- EOFEnable:确定在输入过程中 MSComm 控件是否寻找文件结尾(EOF)
3、MSComm 控件的事件
MSCOMM控件只使用一个事件 OnComm,用属性 CommEvent 的十七个值来区分不同的触发时机。主要有以下几个:
- CommEvent=1时:传输缓冲区中的字符个数已少于 Sthreshold (可设置的属性值)个
- CommEvent=2时:接收缓冲区中收到 Rthreshold(可设置的属性值)个字符,利用此事件可编写接收数据的过程
- CommEvent=3时:CTS线发生变化
- CommEvent=4时:DSR线发生变化
- CommEvent=5时:CD线发生变化
- CommEvent=6时:检测到振铃信号
另外十种情况是通信错误时产生,即错误代码。
五、实现串口收发
1、搭建虚拟串口
参考我的上一篇博客:https://blog.csdn.net/qq_41839588/article/details/131936554?spm=1001.2014.3001.5501
2、发送测试
程序中使用的是 COM8 口,因此开一个虚拟串口 COM9,COM9(发) --> COM8(收)
3、接收测试
程序中使用的是 COM8 口,因此开一个虚拟串口 COM9,COM8(发) --> COM9(收)
4、后面板核心程序框图
六、程序自取
链接:https://download.csdn.net/download/qq_41839588/88104522