下载安装 com0com
下载
在 sourceforge 网站下载安装器:下载链接
安装完成后可以在设备管理器中看到默认创建的一对虚拟串口
使用串口调试助手收发
使用串口调试助手分别打开。如下图所示,在端口选择的下拉列表中可以看到刚才在设备管理器中看到的 COM3 和 COM5
分别打开
在 COM3 中发送 你好 COM5,我是 COM3
在 COM5 就可以收到数据了
反过来也一样
除了 COM3 和 COM5 以外,还可以看到如下 2 个虚拟串口
这 2 个也是一对,同样可以互相收发
readme
开始菜单中可以找到如下文件夹
打开 ReadMe
下面是 ReadMe 内容的翻译
============================= 虚拟串口模拟器(com0com) ============================= 简介
============ 虚拟串口模拟器是一款开源的Windows内核模式虚拟串口驱动程序,遵循GPL许可协议免费提供。
您可以创建无限数量的虚拟COM端口对,并通过任意端口对连接两个应用程序。
每个COM端口对提供两个默认名称为CNCA0和CNCB0的COM端口。一个端口的输出即为另一个端口的输入,反之亦然。 通常端口对中的一个端口由需要与设备通信的Windows应用程序使用,另一个端口由设备模拟程序使用。 例如要通过IP传真,您可以将Windows传真应用程序连接到CNCA0端口,将t38modem(http://t38modem.sourceforge.net/)连接到CNCB0端口。此时t38modem充当传真调制解调器模拟程序。 结合hub4com使用,com0com可实现以下功能: - 让多个应用程序共享单个真实串口设备的数据和信号。例如多个应用程序可共享同一个GPS设备的数据; - 像使用本地计算机的真实串口一样使用远程计算机的串口(支持RFC 2217协议)。 com0com项目主页:http://com0com.sourceforge.net/。 安装指南
========== 注意(基于x64的Windows Vista/Windows Server 2008/Windows 7/8系统): com0com.sys是经过测试签名的内核模式驱动程序,默认不会加载。要启用测试签名,请执行命令: bcdedit.exe -set TESTSIGNING ON 然后重启计算机。 注意: 启用测试签名会降低计算机安全性。 直接运行安装程序(setup.exe)。安装向导将引导您完成必要步骤。
如果弹出"找到新硬件向导": - 选择"否,暂时不",点击下一步; - 选择"自动安装软件(推荐)",点击下一步。
安装完成后,系统中将出现名为CNCA0和CNCB0的COM端口对。 您可以通过安装命令提示符添加更多端口对: 1. 运行"安装命令提示符"快捷方式 2. 输入安装命令,例如: 命令> install - - 系统将创建3个新的虚拟设备。其中一个设备名为"com0com - 串口对模拟器总线",另外两个名为"com0com - 串口模拟器"并位于CNCAn和CNCBn端口。 输入help命令获取更多信息,例如: 命令> help 作为替代方案,您可以通过运行"设置"快捷方式调用基于GUI的设置工具(需要Microsoft .NET Framework 2.0)。 测试方法
======= 1. 在CNCA0端口启动超级终端 2. 在CNCB0端口启动超级终端 3. CNCA0端口的输出应显示为CNCB0端口的输入,反之亦然 卸载指南
============ 直接通过开始菜单中的com0com卸载快捷方式,或通过控制面板"添加/删除程序"中的"虚拟串口模拟器(com0com)"条目进行卸载。卸载向导将引导您完成必要步骤。 提示:要卸载旧版com0com(无安装程序的版本),请先安装新版再执行卸载。 常见问题解答
============= 问:能在Windows 9x平台上运行com0com吗?
答:不能。需要Windows 2000或更新版本的操作系统。 问:能否以静默方式安装/卸载com0com(无需用户干预和界面)?
答:可以,使用/S参数,例如: setup.exe /S "%ProgramFiles%\com0com\uninstall.exe" /S 可使用/D参数指定安装目录,例如: setup.exe /S /D=C:\Program Files\com0com 注意:静默安装默认不会创建任何端口对(可通过设置CNC_INSTALL_CNCA0_CNCB0_PORTS和/或CNC_INSTALL_COMX_COMX_PORTS环境变量覆盖此行为)。 问:setup.exe还有哪些命令行参数?
答:setup.exe和uninstall.exe的命令行参数列在NSIS用户手册第3.2节: http://nsis.sourceforge.net/Docs/Chapter3.html#3.2 此外还可使用以下环境变量: 影响setup.exe行为的环境变量: CNC_INSTALL_START_MENU_SHORTCUTS={是|否} - 选择/取消"开始菜单快捷方式" CNC_INSTALL_CNCA0_CNCB0_PORTS={是|否} - 选择/取消"CNCA0 <-> CNCB0" CNC_INSTALL_COMX_COMX_PORTS={是|否} - 选择/取消"COM# <-> COM#" CNC_INSTALL_SKIP_SETUP_PREINSTALL={是|否} - 跳过驱动预安装/更新 影响uninstall.exe行为的环境变量: CNC_UNINSTALL_SKIP_SETUP_UNINSTALL={是|否} - 跳过设备和驱动卸载 问:能否将CNCA0和CNCB0改名为COM8和COM9?
答:可以。改名步骤: 1. 运行"安装命令提示符"快捷方式 2. 输入修改命令,例如: 命令> change CNCA0 PortName=COM8 命令> change CNCB0 PortName=COM9 也可设置为'COM#'形式,例如: 命令> change CNCA0 PortName=COM# 命令> change CNCB0 PortName=COM# 使用'PortName=COM#'参数时,将调用端口类安装程序设置实际端口名。端口类安装程序会选择COM端口号并将实际端口名设为COM<n>。安装后可通过list命令查看实际端口名,使用RealPortName=COM<n>参数修改实际端口名,例如: 命令> list CNCA0 PortName=COM#,RealPortName=COM3 CNCB0 PortName=COM#,RealPortName=COM4 命令> change CNCA0 RealPortName=COM8 命令> change CNCB0 RealPortName=COM9 命令> list CNCA0 PortName=COM#,RealPortName=COM8 CNCB0 PortName=COM#,RealPortName=COM9 问:波特率设置似乎无效:数据传输速度始终相同。如何启用波特率模拟?
答:要为CNCA0到CNCB0的数据传输启用波特率模拟: 1. 运行"安装命令提示符"快捷方式 2. 输入修改命令,例如: 命令> change CNCA0 EmuBR=yes 问:超级终端测试成功,但使用CreateFile("CNCA0", ...)打开端口时失败。GetLastError()返回ERROR_FILE_NOT_FOUND。
答:必须在端口名前添加特殊字符"\\.\"。尝试使用CreateFile("\\\\.\\CNCA0", ...)打开端口。 问:我的应用程序在启动时向配对的COM端口发送数据会挂起。唯一的恢复方法是运行连接到另一个配对端口的超级终端。使用物理串口时没有这个问题。
答:应用程序挂起是因为默认禁用接收缓冲区溢出。可以通过为接收端口启用接收缓冲区溢出来解决此问题。同时为避免流控制问题,需要为发送端口启用波特率模拟。如果您的应用程序使用CNCA0端口,配对端口是CNCB0,则: 1. 运行"安装命令提示符"快捷方式 2. 输入修改命令,例如: 命令> change CNCB0 EmuOverrun=yes 命令> change CNCA0 EmuBR=yes 问:当配对端口未打开时,部分字符会保留在发送端口的输出缓冲区中,并在下次连接时输出。有什么解决方法?
答:如果接收缓冲区溢出被禁用(默认),这是正常行为。如果需要像真实零调制解调器那样丢失这些字符的行为,请为接收端口启用接收缓冲区溢出。同时为避免流控制问题,为发送端口启用波特率模拟。如果发送端口是CNCA0,接收端口是CNCB0,则: 1. 运行"安装命令提示符"快捷方式 2. 输入修改命令,例如: 命令> change CNCB0 EmuOverrun=yes 命令> change CNCA0 EmuBR=yes 问:我需要编写一个连接到com0com端口对一侧的应用程序,但不想让用户"看到"com0com创建的所有虚拟端口,只显示真正可用的端口。
答:如果您的应用程序使用CNCB0端口,用户使用的配对端口是CNCA0,则可以通过以下方式"隐藏"CNCB0并在应用程序打开CNCB0时"显示"CNCA0: 1. 运行"安装命令提示符"快捷方式 2. 输入修改命令: 命令> change CNCB0 ExclusiveMode=yes 命令> change CNCA0 PlugInMode=yes 问:添加端口对时,为什么Windows XP总是弹出"找到新硬件向导"?驱动程序已经存在,它可以静默安装并在后台报告设备就绪状态。
答:这是因为缺少已签名的com0com.cat目录文件。可在测试计算机上按以下方式创建: 1. 创建目录文件,例如: cd "C:\Program Files\com0com" inf2cat /driver:. /os:XP_X86 2. 创建测试证书,例如: makecert -r -n "CN=com0com (test)" -sv com0com.pvk com0com.cer pvk2pfx -pvk com0com.pvk -spc com0com.cer -pfx com0com.pfx 3. 用测试证书签名目录文件,例如: signtool sign /v /f com0com.pfx com0com.cat 4. 将测试证书安装到"受信任的根证书颁发机构"和"受信任的发布者"证书存储区,例如: certmgr -add com0com.cer -s -r localMachine root certmgr -add com0com.cer -s -r localMachine trustedpublisher inf2cat、makecert、pvk2pfx、signtool和certmgr工具包含在Windows驱动工具包(WDK)中。 或者您可以取消"找到新硬件向导"并通过update命令安装驱动,例如: setupc install - - setupc update 此外可以临时禁用即插即用相关UI消息,例如: reg add HKLM\Software\Policies\Microsoft\Windows\DeviceInstall\Settings /v SuppressNewHWUI /t REG_DWORD /d 1 /f setupc install - - setupc update reg add HKLM\Software\Policies\Microsoft\Windows\DeviceInstall\Settings /v SuppressNewHWUI /t REG_DWORD /d 0 /f 更多信息参见http://support.microsoft.com/kb/938596。 问:如何监控和获取配对端口的设置(波特率、数据位、校验位和停止位)?
答:可通过扩展IOCTL_SERIAL_LSRMST_INSERT实现。示例参见: http://com0com.sourceforge.net/examples/LSRMST_INSERT/tstser.cpp 问:如何将状态传输到DCD和RING?CTS和DSR已连接到RTS和DTR。
答:OUT1可连接到DCD,OUT2连接到RING。使用扩展IOCTL_SERIAL_SET_MODEM_CONTROL和IOCTL_SERIAL_GET_MODEM_CONTROL来改变OUT1和OUT2的状态。示例参见: http://com0com.sourceforge.net/examples/MODEM_CONTROL/tstser.cpp 问:如何查看当前运行版本?
答:在设备管理器中,驱动程序属性页显示INF文件的版本和日期,而驱动程序详细信息页显示com0com.sys文件的版本。com0com.sys文件的版本即为您正在运行的版本。 问:当com2tcp的"服务器"和"客户端"都运行在同一台计算机上时,我可以用某些应用程序通过com2tcp与硬件通信。但当尝试将客户端移到远程计算机时,应用程序显示超时消息且没有增加超时时间的设置。如何解决?
答:尝试调整应用程序COM端口的AddRTTO和AddRITO参数: 1. 运行"安装命令提示符"快捷方式 2. 输入修改命令,例如: 命令> change CNCA0 AddRTTO=100,AddRITO=100 问:能否通过自定义应用程序添加、删除和重命名虚拟串口?是否有可用API或命令行工具?
答:setupc.exe是完成此任务的命令行工具。输入以下命令获取更多信息: setupc help 注:setupg.exe是setupc.exe的GUI封装。 问:需要使用com0com端口的应用程序不识别com0com端口为"真实"COM端口。即使我已将端口名改为COMx,它仍然看不到com0com端口。是否有设置能让端口显示为"真实"COM端口?
答:可以。您应将端口放入端口类,例如: 1. 运行"安装命令提示符"快捷方式 2. 安装端口对,其中一个端口名为COM#,例如: 命令> install PortName=COM# - 问:我需要在设备管理器中添加"模拟"PNP设备并使其连接到COM3。我使用PNPComSimulator(http://www.bds.dogma.net/pnp_part2.htm),它可以在DevManager轮询时模拟PNP串口设备的响应。能否让设备管理器通过com0com查找PNP设备?
答:可以。最简单的方法是将端口放入端口类,例如: 1. 运行"安装命令提示符"快捷方式 2. 安装端口对,其中一个端口名为COM#,例如: 命令> install 0 PortName=COM# - 安装端口类端口后,可通过list命令获取实际端口名,例如: 命令> list CNCA0 PortName=COM#,RealPortName=COM3 CNCB0 PortName=- 问:能否配置com0com随机损坏数据?这个功能对测试应用程序鲁棒性很有用。
答:可以,通过设置EmuNoise参数实现: 1. 运行"安装命令提示符"快捷方式 2. 输入修改命令,例如: 命令> change CNCA0 EmuNoise=0.00001,EmuBR=yes,EmuOverrun=yes 命令> change CNCB0 EmuNoise=0.00001,EmuBR=yes,EmuOverrun=yes 现在每个字符帧(包括空闲帧)都有0.00001的概率被损坏。 问:最多可以定义多少个端口对?
答:取决于您的系统。com0com本身有1000000个端口对的内部限制。 问:我的应用程序用户可能需要安装多达250个COM端口对。初始安装相当快,但每个额外的COM端口安装时间通常比前一个更长。用户无法接受长时间等待安装。
答:这是因为每安装一个新的端口对都需要为所有已安装的对更新驱动程序。可以通过使用带--no-update参数的install命令批量安装多个COM端口对,最后再执行不带该参数的install命令来提高速度,例如: 命令> --no-update install - - 命令> --no-update install - - ... 命令> --no-update install - - 命令> install 批处理程序示例: cd /D "%ProgramFiles%\com0com" FOR /L %%i IN (0,1,249) DO setupc --no-update install - - setupc install 问:我使用64位版本的com0com遇到问题。想调试但找不到适用于64位操作系统的免费串口监控软件(如portmon)。有人知道有什么可用的吗?
答:可以尝试使用com0com内部跟踪功能进行调试: - 从com0com源码获取trace.reg文件; - 将trace.reg导入注册表; - 重新加载驱动(或重启系统); - 执行测试并查看C:\com0com.log文件中的结果。 要禁用跟踪,请重新安装com0com或将trace_disable.reg导入注册表后重新加载驱动。