问题标签 [virtual-serial-port]
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.
c++ - 确定时间关键循环中 200 毫秒冻结的原因
问题的新描述:
我目前在测试环境中运行我们的新数据采集软件。该软件有两个主线程。一个包含一个与硬件通信并将数据推送到双缓冲区的快速循环。每隔几秒钟,这个循环就会冻结 200 毫秒。我做了几次测试,但没有一个能让我弄清楚软件在等待什么。由于该软件相当复杂,并且测试环境也可能会干扰该软件,因此我需要一种工具/技术来测试记录器线程在被阻塞 200 毫秒时正在等待什么。什么工具对实现这一目标有用?
原始问题:
在我们的数据采集软件中,我们有两个提供主要功能的线程。一个线程负责从不同的传感器收集数据,第二个线程将数据以大块的形式保存到磁盘中。数据收集在双缓冲区中。它通常每个项目包含 100000 个字节,每秒最多收集 300 个项目。一个缓冲区用于在数据收集线程中写入,一个缓冲区用于在第二个线程中读取数据并将其保存到磁盘。如果已读取所有数据,则切换缓冲区。缓冲区的切换似乎是一个主要的性能问题。每次缓冲区切换时,数据收集线程阻塞大约 200 毫秒,这太长了。但是,偶尔会发生这种情况,切换速度要快得多,几乎不需要任何时间。(测试电脑:Windows 7 64 位,
我的猜测是,性能问题与内核之间交换的数据有关。只有当线程偶然在同一个核心上运行时,交换才会快得多。我考虑过设置线程关联掩码以强制两个线程在同一个核心上运行,但这也意味着我失去了真正的并行性。另一个想法是让缓冲区在切换之前收集更多数据,但这会大大降低数据显示的更新频率,因为它必须等待缓冲区切换才能访问新数据。
我的问题是:是否有一种技术可以将数据从一个线程移动到另一个不会干扰收集线程的线程?
编辑:双缓冲区实现为两个用作环形缓冲区的 std::vectors。一个 bool (int) 变量用于告诉哪个缓冲区是活动的写缓冲区。每次访问双缓冲区时,都会检查 bool 值以了解应该使用哪个向量。切换双缓冲区中的缓冲区仅意味着切换此布尔值。当然,在切换期间,所有读取和写入都被互斥锁阻止。我认为这个互斥锁不可能阻塞 200 毫秒。顺便说一句,每个开关事件的 200 毫秒是非常可重复的。
java - 如何使用java创建虚拟串口
我曾尝试使用 TelnetSerialPort 和 jSSC 库来创建虚拟串行端口,但无法正常工作。它没有创建虚拟串行端口,它使用现有的串行端口进行通信。
这是我使用 jSSc 库的程序
它给出以下输出
c - 通过文件 /dev/ttyS0 和 /dev/ttyS1 的 IPC 管道
我想通过串口开发文件执行 IPC 管道。这是我首先尝试使用的要求
它给出如下错误
一旦连接了 ttyS0 和 ttyS1,我假设我们可以像使用 pipe() 一样执行读/写操作,我将有两个程序 peer0.c 和 peer1.c,peer0.c 打开 /dev/ttyS0 和 peer1。 c打开/dev/ttyS1,这样读写操作应该如下
由于 /dev/ttyS(0/1) 是系统范围的,我可以在一个终端上运行 peer0.c 程序,在另一个终端上运行 peer1.c,
基本上,我有基于 linux 的嵌入式应用程序,当移植到目标硬件时,它将由基于 linux 的 PC 通过 minicom UART 接口控制。目标打开它的ttyS0来读取从PC发送的uart数据,在PC中,命令将通过minicom发送到目标。现在我想在一个终端的同一台 PC 上运行目标应用程序,并想从另一个终端/minicom 发送命令。通信也应该是双向的
有可能实现这个目标吗?还是有任何其他类似的方法可以实现相同的目标?
提前致谢
c# - C# IOException SerialPort.Write() -- 参数不正确
我正在尝试在虚拟串行端口上写入。这是我的代码:
这是我的输出:
为什么会出现这个错误?端口正确打开和关闭,参数也正确。有人知道我的错误在哪里吗?
vb.net - VB.NET SerialPort.Write(string) 抛出无法捕获的异常,并中断 COM 端口
我正在使用 VB.NET SerialPort 类,并创建了一个对象集合,这些对象代表我们的硬件设备的配置,以便我可以通过 USB 虚拟串行端口更改配置和更新设备。这些对象具有多态性,每个设备最终都继承自一个名为 CmdSender 的类,该类处理 COM IO。当最终删除所有已知错误并将应用程序发布到另一台 PC(安装了 .NET 运行时但未安装 Visual Studio)时,从我的代码调用 SerialPort.Write(string) 时偶尔会引发无法捕获的异常。
这是错误消息和堆栈跟踪的最顶层部分。
System.IO.IOException:连接到系统的设备无法正常工作。
在 System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str) 在 System.IO.Ports.SerialStream.EndWrite(IAsyncResult asyncResult) 在 System.IO.Ports.SerialStream.Write(Byte[] 数组,Int32 偏移量, Int32 计数,Int32 超时)在 System.IO.Ports.SerialPort.Write(字符串文本)在 TDDevice.CmdSender.SendPure(字符串 Cmd,布尔 AddCheckSum)
我在网上找不到任何解决此问题的方法。还值得注意的是,当抛出此异常时,应用程序不能简单地重新启动(尽管这仍然不理想)但必须移除 USB COM 设备并重新插入机器,如果不这样做,我的应用程序会警告我没有 COM 端口可以找到(我已经内置的检查),这告诉我.NET 在此之后无法与 COM 端口交互,我还没有测试其他 API 在发生这种情况后是否仍然能够使用该端口以确认问题是否仅影响 .NET 或端口本身(但设备管理器仍列出端口)。
我的问题是为什么会发生这种情况,如何预防?(C# 中的任何答案都应该没问题,因为我希望可以翻译,但 VB 将不胜感激)
c# - 如何在 C# 中获取蓝牙设备数据
http://i.imgur.com/ZWB4sI4.png
C# 中有没有办法为 COM 端口获取这些设置(特别是“方向”)?
我尝试使用 SerialDevice 类并搜索“Win32_SerialPort”,但都没有与方向有关的任何属性。
两个 COM 端口都被同一个设备使用。
c# - 与终端相比,虚拟端口非常慢
我正在编写一个应用程序,我需要通过虚拟串行端口将文件(~600kB)发送到另一个单元。
当我使用终端应用程序 (TeraTerm) 发送它时,它需要不到 10 秒,但使用我的程序需要 1-2 分钟。
我的代码很简单:
使用整个文件长度调用 port.Write 似乎总是由于未知原因导致写入超时,所以我一次写入 1 个字节。
c# - 从 c# 代码创建对虚拟 com 端口而不使用 3rd 方软件
我已经搜索了一个解决方案,并且我找到了很多答案,但他们都不满意我,我可能会在这里遗漏一些东西。
我正在做的是一个需要通过串口连接到其他软件的小软件,所以我在我的软件中打开了新的 com 端口,将来自其他软件的数据发送到那里,我从第二个虚拟 comport 读取数据,我用它做点什么。一切都很完美,因为它是概念的证明。但是,我使用 3rd 方软件进行 virtal comport(对)。
我需要的是从我的软件创建 2 个端口,该软件将被发送到几台计算机,我不希望他们安装除我之外的任何其他软件。
我尝试使用 com0com,但似乎我需要将它安装在任何可以运行该软件的 PC 上。
有人有什么建议吗?
linux - 将来自一个 COM 端口的传入数据镜像到 Linux 上的虚拟 COM 端口
有没有办法让两个驱动程序连接到同一个 COM 设备,一个能够向设备发送数据并且都接收传入的数据?
更详细地说:两个驱动程序也都希望向设备发送数据,如果两者都具有对设备的写访问权限,则会导致问题。因此,指向虚拟 COM 端口的符号链接根本没有帮助。
所以我想最好的选择是将设备的所有传入数据镜像到虚拟 COM 端口。一个驱动程序连接到真实设备(因此也能够向设备发送数据)。另一个只连接到虚拟 COM 端口,因此该程序发送的所有数据都应该以 /dev/null 结尾。
有没有办法做到这一点,或者有更好的解决方案?
编辑:现在的一些方法:
使用 socat
不起作用,因为它是符号链接。
使用三通
无法写入(虚拟)COM 端口(/dev/modem0 失败)并且我没有直接连接以便也将数据发送到 ttyACM0
使用 slsnif(与当前内核不兼容)
使用拦截
只能嗅探 ASCII 字符,所有二进制数据都丢失在日志文件中。
python - 使用 Python,如何在 Linux 上制作虚拟串口?
我有两个 python 程序需要通过 pySerial API 从同一个串口读取。
据我了解,您不能让两个程序从同一个串口读取。所以我打算做的是让一个 python 程序从物理串行端口读取,然后让它从串行端口接收到的 EXACT 数据复制到虚拟串行端口,其他 python 程序可以通过 pySerial API 读取它。
在将使用 pySerial 的两个 python 程序中,只有一个会回复任何内容。
任何想法如何做到这一点?