使用com0com和hub4com创建和测试虚拟串行端口



我正在为ESPA 4.4.4通过C++中的COM发送数据。连接在COM端口上的程序B通常检测程序A是否发送数据。为了测试这一点,我创建了两个带有com0com、COM1/CNCB1、COM2/CNCB2的虚拟端口对。与hub4com我连接,如这里解释

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

所以我的问题是我希望这两个端口能够通信。->第一个问题:教程中的体系结构是否适合处理。我的意思是,处理COM1/CNCB1和COM2/CNCB2可以吗?->第二个问题:连接两个端口的命令是";hub4com选项\。\input_COM\。\输出_ COM1"\。\输出_ COM2";。。。所以我试着做:;hub4com-波特=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发送数据?只要一个小软件就很好了,可以测试的架构

  1. 应该没问题,它们只是名字。如果你要有一个中间人类型的应用程序,你会希望数据像。。。(程序A->COM1->CNCB1->ProgramB->COM2->CNCB2->Destination。)因此,程序B应该为CNCB1和COM2打开端口。

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

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

如果只有两个程序相互通信,则不需要hub4com。只需使用com0com设置一个端口对,如:COM1<gt;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是一个与外部数据源(如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<gt;TCP&lt--&gt;TCP<gt;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通过网络向另一台计算机发送数据。

Portmon已停产,在最新的(x64)Windows版本中不起作用。。。

所以现在,在Windows中,你可以使用这个不错的程序:串行实验室

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

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

另一个类似的程序也是MyTerm。

最新更新