1

我正在通过 C++ 中的 COM 为 ESPA 4.4.4 发送数据。连接在 COM 端口上的程序 B 通常会检测程序 A 是否发送数据。为了测试这一点,我创建了两个带有 com0com、COM1/CNCB1、COM2/CNCB2 的虚拟端口对。使用 hub4com,我按照此处的说明进行连接

但是当我尝试使用 A 或 B 连接到 COM1 或 COM2 时,由于端口已在使用中,因此无法完成。

所以我的问题是我希望两个端口进行通信。-> 第一个问题:教程中的架构好不好处理。我的意思是可以处理 COM1/CNCB1 和 COM2/CNCB2 吗?-> 第二个问题:连接两个端口的命令是“hub4com options \.\input_COM \.\output_COM1” \.\output_COM2”...所以我尝试这样做:“hub4com -baud=9600 \.\COM1 \ .\COM2"。该命令有效,我得到以下返回:

Open("\\.\COM1", baud=9600, data=8, parity=no, stop=1, octs=off, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Open("\\.\COM2", baud=9600, data=8, parity=no, stop=1, octs=off, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Route data COM1(0) --> COM2(1)
Route data COM2(1) --> COM1(0)
Route flow control COM1(0) --> COM2(1)
Route flow control COM2(1) --> COM1(0)
Started COM1(0)
Started COM2(1)

这样就建立了道路,数据应该可以通信。但我无法用我的程序连接 COM 端口。所以我尝试连接 CNCB1 和 CNCB2。我可以连接 COM 端口。但是不知道数据有没有到。

-> 那么第三个问题:有没有可靠的方法可以知道 COM1 是否向 COM2 发送数据?只需一个小软件就可以很好地测试架构

4

3 回答 3

1
  1. 应该没问题,只是名字而已。如果您要在中间类型的应用程序中有一个人,您会希望数据像...一样流动(ProgramA -> COM1 -> CNCB1 -> ProgramB -> COM2 -> CNCB2 -> Destination。)所以 ProgramB 应该为 CNCB1 和 COM2 打开端口。

  2. 我对 hub4com 不太熟悉,无法为您提供答案。听起来 hub4com 正在打开端口,而您的应用程序也在尝试打开端口。只有一个应用程序可以访问一个端口。

  3. 听起来你需要一个端口监视器。 http://technet.microsoft.com/en-us/sysinternals/bb896644.aspx

于 2014-03-14T18:06:26.880 回答
0

如果只有 2 个程序相互通信,则不需要 hub4com。只需使用 com0com 设置一个端口对,例如:COM1<>COM2。现在选择程序 A 中的 Com1 和程序 B 中的 Com2,这应该可以工作。(这是“一对一通讯”)


对于“一对多通讯”,您需要 hub4com:

示例 1:

程序 A 是您的数据源,程序 B 和程序 C 都需要从 A 接收数据。然后您可以这样:

com0com :  COM1<>CNCB0  ;  COM2<>CNCB1  ;  COM3<>CNCB2
hub4com --route=0:All \\.\CNCB0 \\.\CNCB1 \\.\CNCB2

现在使用:程序 A、B 和 C 中的 Com1、2 和 3。


示例 2:

COM7 是一个真正的comport,它带有一个外部数据源,例如与之连接的GPS 接收器。程序 A、B 和 C 需要从 COM7 接收数据。然后你像这样:

com0com :  COM1<>CNCB0  ;  COM2<>CNCB1  ;  COM3<>CNCB2
hub4com --octs=off --route=0:All \\.\COM7 \\.\CNCB0 \\.\CNCB1 \\.\CNCB2

注意:使用真实的 com 端口时需要“--octs=off”命令。另外,如果真正的 com 端口需要工作在 4800 波特,您需要添加命令:“--baud=4800”。


示例 3:

您需要在 3 个程序之间进行双向通信:程序 A 发送到 B 和 C;B发送给A和C;和 C 发送给 A 和 B。然后你像这样去:

com0com :  COM1<>CNCB0  ;  COM2<>CNCB1  ;  COM3<>CNCB2
hub4com --route=All:All \\.\CNCB0 \\.\CNCB1 \\.\CNCB2

注意:“Realterm”是一个很好的免费程序,可用于测试您的通讯。(本次测试打开 3 次)


示例 4:

Hub4com 也适用于“Com<>TCP<-->TCP<>Com”- 网络连接。像这样:

服务器端:

com0com :  COM1<>CNCB0  
hub4com \\.\CNCB0 --use-driver=tcp 7000

客户端:

com0com :  COM1<>CNCB0  
hub4com \\.\CNCB0 --use-driver=tcp 192.168.20.3:7000

注意:将 IP 地址更改为以太网或 WiFi 网络上的服务器计算机的地址。现在,您可以在两台计算机上使用 COM1 通过网络向另一台计算机发送数据。

于 2021-10-24T04:03:12.723 回答
0

Portmon 已停产,并且在最近的 (x64) Windows 版本中不起作用......

所以现在,在 Windows 中,你可以使用这个不错的程序:Serial-Lab

我遇到了类似的问题,也将 com0com 与上述 SerialLab 结合使用。安装 com0com 后,它创建了 COM3 和 COM4 端口,我使用这两个端口进行测试。在您的情况下,您似乎拥有由 com0com 创建的 COM1 和 COM2?

在我的 (Java) 应用程序中,我向 COM4 发送数据,而在 SerialLab 中我连接到 COM5,我能够读取从我的 Java 应用程序发送的数据。您还可以从 SerialLab 发送数据,这样您就可以测试全方位的模拟通信。

另一个类似的程序也是MyTerm

于 2017-08-11T13:20:41.740 回答