伪造一个RS232串口

108

我正在开发一个项目,其中有许多硬件传感器通过RS232串口连接到部署机器上。

但是...我在没有物理RS232串口的机器上进行开发,但我想创建虚拟串口,以便可以连接并从中输出数据,目的是模拟来自硬件传感器的输入。

有人知道如何在Windows XP上创建虚拟串口并对其进行控制吗?


2
你尝试过安装串口的虚拟机吗? - Restuta
5
我还没有尝试过那个。听起来需要一个完整的回答而不仅仅是一个评论 :) - BefittingTheorem
1
我能够在Windows 7 64位上无问题地使用com0com和Com Port串行仿真器,效果非常好。 - JWiley
对于那些最终到达这里的人,我已经在此处编写了有关com0com的简要说明:链接 - Foad S. Farimani
7个回答

91
如果您正在开发Windows,那么com0com项目可能是您需要的。它提供一对通过nullmodem连接相连的虚拟COM端口。然后,您可以使用您喜欢的终端应用程序或其他工具将数据发送到一个COM端口并从另一个端口接收数据。
注:正如Thomas所指出的,该项目缺少签名驱动程序,这在某些Windows版本上(例如Windows 7 x64)尤其问题严重。有几个非官方版本的com0com包含有签名的驱动程序,其中最新版本(3.0.0.0)可以从此处下载。

5
尽管com0com项目是一个优秀的开源项目,但由于它需要安装没有数字签名的设备驱动程序,一些检查数字签名驱动程序的Windows系统将无法使用其虚拟串口。只是想让人们知道这点。 - Tae-Sung Shin
5
@Thomas:搜索网络可以发现有一些非官方签名版本的驱动程序。最近的一个版本(3.0.0.0)可以从这里下载。 - Frank Bollack
非常感谢,你值得一瓶啤酒! - Pale Ale
这实际上是如何完成的呢?什么是Windows基础知识? - Nacht
@Nacht 每个驱动程序都会进行一些抽象,即使它们实际上与真实的串行端口“连接”在一起。这意味着如果你编写驱动程序,你会注意到你不必与真实的设备通信。然后,你可以按照自己的意愿使用传输缓冲区。在这种虚拟情况下,你发送数据到另一个“端口”,而不是将流发送到真实设备。该端口与第一个端口成对出现。整个过程看起来像是镜像数据流。我希望现在清楚了。 - MrHIDEn
使用com0com,我成功地实现了一个旧软件<->串口<->webRTC<->串口<->旧软件的解决方案。谢谢! - TwoFingerRightClick

72

我知道这是一个旧帖子,但如果有人偶然遇到这个问题...

一个选择是来自Eterlogic的虚拟串口仿真器(VSPE)。 它提供了一个API,用于创建内核模式虚拟串口设备,即连接器、映射器、分离器等。这是一家小公司,但继续扩大和维护他们的产品列表。(注意到2023年初)

另一个不错的选择是Eltima。该产品在其虚拟串口提供的所有方面都按照广告运作,并包括良好的技术支持。产品选项包括桌面应用程序以及带有API的软件开发工具包。该公司仍然活跃并不断扩大产品类别。(注意到2023年初)

这两个产品都不是开源或免费的。然而,正如其他帖子所指出的那样,还有其他选择。以下是各种串行实用程序的列表:

com0com (当前)
com0com - 带有签名驱动程序的旧版本
另一个带有签名驱动程序的com0com下载地址 (Pete's Blog)
Tactical Software
Termite
AGG Software串口仿真器
Kermit (已过时,但仍可下载)
HW Group - HWVSP3
HHD Software(免费版)

如果您找到了一个过时的链接,请在评论中告诉我。(链接于2023年初经过验证。)


42
我使用 com0com - With Signed Driver 在 Windows 7 x64 上模拟 COM3 和 COM4 成一对。
然后,我使用 COM Dataport Emulator 来接收 COM4 发来的数据。
接着,我打开我正在开发的应用程序 (c#) 中的 COM3 并向 COM3 发送数据。
通过 COM3 发送的数据将被 COM4 接收并在 "COM Dataport Emulator" 中显示。该应用程序还可以回复消息(非自动化)。
所以,通过这两个优秀的程序,我成功地模拟了串行 RS-232 通信。
希望对您有所帮助。
这两个程序都是免费的!!!

1
太棒了。这肯定对我有帮助。你知道我怎么能让COM端口数据仿真器等待我的输入,然后将其发送回去吗? - bunggo

6

总有一种硬件解决方案。购买两个USB转串口转换器,通过NULL modem连接它们。

专业提示: 1)Windows可能会在每次设备休眠或重新启动后为适配器分配新的COM端口。 2)USB转串口芯片市场领导者是Prolific和FTDI。这两家公司正在与仿冒产品作斗争,并且可能在未来的官方Windows驱动程序中被阻止。然而,Linux驱动程序可以很好地与克隆版配合使用。


3
请注意,USB串行适配器与传统的UART具有不同的时序/打包行为。 然而,如果有可能使用USB串行适配器,测试一个并不是坏主意。 当它们首次流行时,一些设计不良或实现不佳的协议在使用USB串行适配器时有时会出现断裂或减速的情况。如今,很少有东西能够在没有在开发中使用USB连接的UART进行尝试而直接上市;实际上,现在使用传统PC上的UART进行尝试是不太可能的。 - Chris Stratton

4
另一种选择,即使提问者没有要求:
存在usb转串口适配器。根据适配器类型,您可能还需要空模电缆。
它们在Linux下非常容易使用,在Windows下也可以运行,如果安装了可工作的驱动程序。
这样,您可以直接与传感器一起工作,而不必尝试模拟数据。这样,您甚至可能免去建立一个贫血系统的麻烦。(由于模拟数据输入未覆盖所有情况,导致系统脆弱。)
使用真实的东西通常更好。

有没有可能为软件USB转串口适配器取一个名称?:) 谢谢 - alcor
1
如果您需要使用这样的硬件,请执行以下命令:screen /dev/ttyUSB0 9600,或者使用 minicom 软件。 - sjas

1
我使用Eltima创建了虚拟串口来进行我的Modbus应用程序调试工作。这是在开发阶段检查串口程序而不连接硬件的非常好的应用程序。

0

我发现免费虚拟串口在我的非商业用例中表现良好。对于其他用例,它并不是免费的。话虽如此 - 它的表现非常出色,甚至在基于arm64的Windows 11上也能很好地运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接