我已经在64位Windows 7机器上安装了com0com v2.2.2.0,显然是成功的.
我运行命令实用程序,如下所示:
command> install PortName=COM9 PortName=COM8
CNCA0 PortName=COM9
CNCB0 PortName=COM8
ComDB: COM8 - logged as "in use"
ComDB: COM9 - logged as "in use"
command> busynames COM?*
COM3
COM4
COM5
COM6
COM8
COM9
COMPOSITEBATTERY
Run Code Online (Sandbox Code Playgroud)
注意:记录为"正在使用"不是错误消息?
然后我尝试像这样打开COM8
m_hIDComDev = CreateFileA( szCodedPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL );
if( m_hIDComDev == NULL || m_hIDComDev == INVALID_HANDLE_VALUE ) {
wchar_t * lpMsgBuf;
DWORD dw = ::GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dw, …Run Code Online (Sandbox Code Playgroud) 我在windows中使用com0com进行程序测试,是否有像linux中的com0com这样的程序?
我知道有pts/ptmx,但我想要的是一个独立的程序,提供2个虚拟串口...
然后我可以打开2个程序,每个注意一个...
我有一个项目包含一些单一测试,用于测试使用COM端口的串行通信(在Windows中).我使用com0com创建一对虚拟端口并执行测试.
但是我不知道在Linux中如何在MACOS中做到这一点.我已经读过这个话题:在Linux中是否有像COM0COM这样的程序?答案建议使用socat.我尝试过这种方法,但它不起作用,我的应用程序没有检测到我刚刚在socat中定义的端口.
socat PTY,link=/dev/COM98 PTY,link=/dev/COM99
Run Code Online (Sandbox Code Playgroud)
我的理论是socat无法创建虚拟端口,它只能绑定现有端口.
我该如何解决这个问题?
谢谢!
编辑:
这是我在运行之前的socat命令后得到的.如果仔细观察,您会看到COM98和COM99端口位于/ dev /中.但是,如果我写入/ dev/COM98并使用tail -f跟随COM99,我不会从它获得任何输出.

EDIT2:
好吧,如果我用猫而不是尾巴,我可以看到输出(为什么?!)

"
"
"
EDIT3:
解决方案:不要将端口命名为COMxx而是命名为ttySxx!
例:
socat PTY,link=/dev/ttyS98 PTY,link=/dev/ttyS99
Run Code Online (Sandbox Code Playgroud)
原因:某些serial-comm库可能不支持其他命名法,例如RXTX 2.XX和以前的版本.
我有一个通过串行端口连接到设备的实用程序。为了测试该应用程序,我正在为设备编写一个模拟器。
这两个应用程序都打算在同一Windows 7计算机上运行。
我正在用C#编写模拟器。我使用com0com创建了一对虚拟端口(在本例中为CNCA8和CNCB8,因为我已经有几个现有的端口对)。
我正在尝试在模拟器中打开CNCB8(应用程序尚未运行),但出现异常:
System.dll中发生了'System.ArgumentException'类型的未处理异常
附加信息:给定的端口名不能以COM / com开头或不能解析为有效的串行端口。
样例代码:
SerialPort port = new SerialPort("CNCB8", 9600, Parity.None, 8, StopBits.One);
port.Handshake = Handshake.None;
port.Open();
Run Code Online (Sandbox Code Playgroud)
此问题无关紧要,因为它是未使用的虚拟端口(如果重要,IsOpen将返回false): C#SerialPort#Open()方法由于端口名称而抛出ArgumentException?
编辑:我还确保端口名称出现在SerialPort.GetPortNames()中,并且它出现在Windows的“ com0com串行端口仿真器”下的设备管理器中。我还尝试使用CNCA代替B(具有几个现有的虚拟端口),尝试删除“ HandShake”行,并尝试将波特率更改为115200,以防万一(尽管最终我在那里需要9600)。
这是我第一次创建批处理.基本上我想在命令Promt中写命令.所以我需要批处理文件,以便我可以在c#中完成任务.
命令如下所示:
install PortName=COM50-
bcdedit.exe -set TESTSIGNING OFF
Run Code Online (Sandbox Code Playgroud)
我如何创建批处理文件并使用c#代码运行它.
谢谢
细节:我使用com0com来创建虚拟端口,所以主要的想法是自动化进程,所以我可以创建端口而无需进入命令端口并编写命令.