问题标签 [com0com]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
812 浏览

emulation - 如何使用 com0com 零调制解调器仿真器模拟故障/电缆断裂

这是一个简短的故事:我需要在我们的应用程序中调试一些非常具体的错误情况。该应用程序在一个双工系统上运行,该系统由通过串行电缆连接的两台机器组成;通过这条电缆,两台机器交换某种“心跳”信号。在现场非常罕见的不可预测的情况下,物理介质中的信号失真会导致不当行为。我们可以通过简单地剥掉串行电缆以“残酷”的方式部分复制它。

现在,为方便起见,我使用 com0com 空调制解调器模拟器 ( http://com0com.sourceforge.net/ ) 成功模拟了串行电缆,以便两个进程使用虚拟 COM 端口在同一台机器上运行。这完美无缺。

我的问题是:如何使用 com0com 来模拟任何类型的电缆断裂/串行端口故障/信号失真?例如,我可以故意阻止其中一个虚拟端口用于发送/接收数据吗?

0 投票
3 回答
3537 浏览

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

我正在通过 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"。该命令有效,我得到以下返回:

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

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

0 投票
1 回答
11640 浏览

linux - 用于 linux 的空调制解调器模拟器 (com0com)

我有一个项目,其中包含一些用于测试使用 COM 端口(在 Windows 中)的串行通信的单一测试。我使用 com0com 创建一对虚拟的有界端口并执行测试。

但是我不知道如何在 Linux 和 MACOS 中做到这一点。我读过这个话题:Linux中有像COM0COM这样的程序吗?答案建议使用socat。我已经尝试过这种方法,但它不起作用,我的应用程序没有检测到我刚刚在 socat 中定义的端口。

我的理论是 socat 不能创建虚拟端口,它只能绑定现有端口。

我该如何解决这个问题?

谢谢!

编辑:

这是我在运行上一个 socat 命令后得到的。如果仔细观察,您会发现 COM98 和 COM99 端口位于 /dev/ 中。但是,如果我写入 /dev/COM98 并使用tail -f跟踪 COM99,我不会从中得到任何输出。

在此处输入图像描述

编辑2:

好吧,如果我使用 cat 而不是 tail 我可以看到输出(为什么?!)

在此处输入图像描述

'

'

'

编辑3:

解决方案:不要将端口命名为 COMxx 而是 ttySxx!

例子:

原因:一些串行通信库可能不支持其他命名法,例如 RXTX 2.XX 和以前的版本。

0 投票
1 回答
199 浏览

c# - 关闭侦听端口时应用程序挂起

我正在使用 com0com 创建虚拟端口 comA/comB 的一部分,将输入从超级终端输入到 comA 并在 wpf 应用程序中侦听 comB。当我运行以下代码(通过触发Connect)时,应用程序成功连接并能够从 comA 获取数据,但是当我这样做时挂起Disconnect

我尝试通过使用将读取功能更改为写入

而不是port.readbyte, 断开连接时它开始正常工作。有谁知道是否有任何不同readbyte可能导致冻结?或者它可能与com0com有关?

0 投票
1 回答
1900 浏览

android - 在 Windows 8.1 上通过蓝牙与 Android 设备进行 OBDSim 连接

从昨天开始,我就一直在研究这个话题。我想开发关于 obd-ii 扫描仪的 android 应用程序。GithubGoogle Codes上有很多开源项目。我必须找到 obd-ii 模拟器来开发这个没有汽车或任何 odb-ii 芯片的应用程序。

我找到了 OBDSim 来创建示例数据并回答我的应用程序发送的请求。我遇到了很多问题,通过阅读很多文档和博文解决了这些问题。但我有最后一个问题,我需要你的帮助。

新版本的 OBDsim 支持 Windows 蓝牙连接现在使用com0com。当我安装 com0com 时,我遇到了签名问题,我解决了这个问题以禁用相关的 Windows 功能。我还将蓝牙的传入端口设置为 COM4。到目前为止一切都很好。之后,我想使用 com0com 创建虚拟端口。它在安装时已经创建了一对。它们是 CNCA0 和 CNCB0。我只是想将这对的第二个端口从 CNCB0 更改为 COM4。但是 windows 给出了关于 COM4 已经在使用的错误。我仍然完成并分配了 COM4 而不是 CNCB0。之后我运行 obdsim.exe 并开始像这样创建日志;

在此期间,我开始使用 android 应用程序并按下开始实时数据按钮。我在安卓手机上给出了关于蓝牙连接错误的错误 - 读取失败,套接字可能关闭或超时。这是一种情况。

在第二种情况下,我删除了中断 com0com 并将 OBDsim 直接连接到 COM4。我再次运行 obdsim.exe。它也具有与之前场景相同的输出。在我开始像这样的 android 应用程序输出更改之后。

而且我看不到我的应用程序有任何变化。

如果您知道问题出在哪里,或者我犯了什么错误或忘记了什么,我正在等待或您的帮助。

谢谢。

0 投票
0 回答
192 浏览

c++ - 如何捕捉 com0com IO-CTL 命令?

我有两个连接的虚拟 COM 端口(例如 COM0 和 COM1),由com0com驱动程序创建。一些旧应用程序(App1)将数据写入 COM0,我从 COM1(在 App2 中)读取数据,反之亦然。

如何从由 com0com 驱动程序 (COM1) 创建的虚拟 COM 端口捕获一些 IO-CTL,如波特率、奇偶校验等?

当然,我可以在 App1 中进行任何更改,而在 App2 中可以做任何事情。

0 投票
1 回答
1094 浏览

com0com - 设置 com0com 友好名称

我正在开发一个项目,其中包括 com0com 的一对虚拟 comport。我需要将友好名称从“Com0com - 串行端口仿真器 xxxxxx”更改为我自己编写的名称。我Updatefnames在 com0com v3.0.0 中找到了该命令,但我无法找到如何在任何地方使用它。我需要编写设置脚本。

0 投票
0 回答
130 浏览

python - 关闭 Windows(虚拟)串行端口 - 操作系统需要多长时间才能释放它们?

我正在编写一个使用 com0com 虚拟串行端口的 Python (2.6) 应用程序。它在 Windows Server 2008 R2 (sp1) 上运行(我在我的开发机器 Win 7 上也看到了同样的问题)。

com0com 端口对是在应用程序运行之前创建的。该应用程序打开端口(通过创建 serial.Serial 对象),使用它们然后关闭它们。

尝试过早重用该端口会失败 - 调用构造函数很好(也就是说,它返回一个打开的 serial.Serial 对象),但该对象似乎无法使用。由于其他应用程序正在使用这些对象,因此应用程序可能没有正确释放某些内容。

是否有一个已知的间隔我应该等待重新使用 com0com 端口?会不会是 com0com 端口以某种方式设置错误?或者是其他东西?

伪代码超高级代码概览:

0 投票
1 回答
596 浏览

docker - 访问 WS2016 docker 容器内的虚拟 com 端口

在带有 Windows Server 2016 TP5(来宾 vm)的 Win7(主机)和 Virtual Box 上运行。在 WS2016 上,我运行 docker,将 windowsservercore 基础映像用于容器。

我正在尝试一种车队管理系统,我尝试在单独的 docker 图像中启动多辆模拟车辆。

这些车辆模拟器使用模拟 GPS 将数据发送到虚拟 COM 端口,模拟车辆从中读取数据。

在 windows XP/7/Server 2016 中,我已成功使用com0com(2.2.2.0 signed)创建虚拟 com 端口。

我的问题是将虚拟 com 端口安装在 docker 容器中,或者将它们作为主机上的设备访问

我的第一次尝试是在 docker 中运行 com0com,驱动程序的安装使用静默模式可以正常工作,但是在使用已安装的应用程序创建虚拟 com 端口对时遇到问题。该命令停止,如果我查看应用程序事件日志,每次尝试运行该命令时都会看到几行此类。

相反,当尝试在主机中创建设备并传递设备时,我似乎无法访问它们

在容器中使用com0com --list我可以看到设备,但与主机中的名称不同

在关联的 Dockerfile 中,我使用com0com setupc.exe将它们重命名为与主机上标识的名称相同的名称

主机上发出的模式命令正确列出了端口,另一方面,使用容器中的模式命令 insde 无法列出它们,只显示一个项目:CON

然后我尝试使用--device=//./COM128://./COM128参数将它们传递给 docker run

注意!:这是设备的正确“路径”吗?

值得注意的结果为零,com0com setupc命令给出相同的结果,与模式相同

奇怪的是,当我运行 powershell 并列出串行端口时,我得到了主机上可用的预期 comports,具有正确的名称,但尝试打开其中一个会出现异常

最后尝试与上面几乎相同,但使用另一个虚拟 com 端口软件(eltima),在主机中设置它们,尝试在容器中使用 ps 打开端口时的最终结果与 com0com 配置的端口相同

更新:

尝试了一种新方法,改为在 hyper-v 中运行容器,使用 -isolation 标志来 docker run,假设您可以在 hyper-v 容器中安装 com0com 驱动程序,而不必尝试共享它们从主机。

在 hyper-v 中运行迫使我们改为运行 nanoserver 基础镜像而不是 windowsservercore 基础镜像。

由于安装程序(基于 NSIS)是 32 位应用程序,nanoserver 只能运行 64 位应用程序,因此目前无法在 nanoserver 中运行 com0com 安装工具。

快速浏览表明 NSIS 的新版本 (3.0) 可以与 com0com 存储库中包含的 NSIS 脚本一起使用。

欢迎所有关于如何前进的想法!

PS:在 msdn 容器论坛上发布了相同的问题

0 投票
1 回答
1488 浏览

python - com0com 和 pyserial 虚拟串口。这可以用来模拟拔出串行 USB 设备吗?

我正在使用 com0com 和 pyserial。我打开一个端口,使用 pyserial 写入它并在 YAT 模拟器中读取它。这很好用。此设置可用于模拟拔出模拟串行端口的 USB 设备吗?我想重新创建一个 UnauthorizedAccessException,它在我们的应用程序软件中很少被真实设备在拔出时抛出。在使用 pyserial 写入 CNCA0 并使用 YAT 从 CNCB0 读取成功后,我尝试从 pyserial 关闭 CNCB0,当然它不会让我因为 YAT 已经获取了端口(访问被拒绝)。关于如何模拟真实设备的拔出动作的任何想法?