问题标签 [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.

0 投票
4 回答
1894 浏览

delphi - 使用哪种简单的面向未来的 Delphi 串行通信代码?

多年来,我一直是 Turbopower Async Pro 的粉丝,现在开始使用 SourceForge,它运行良好。但是,它很复杂,除了端口组件之外,我从未真正使用过它的功能。我正在为 D2009 等更新我的代码,并且很想转向更简单的东西,因为我有自己的包装器。那里有很多端口组件,但这里有什么建议吗?谢谢。

0 投票
2 回答
791 浏览

.net - wmi .net 设置串口?

我有一个 USB 串行适配器,可以在许多系统上以 COM9 或更高版本即插即用。我在我的软件中使用的第三方包最多只能连接到 COM8。有没有办法使用 WMI 或其他方法将 COM9 设置为较低的端口?我知道我可以在设备管理器的端口设置对话框中执行此操作,但如果我可以在软件中为他们静默执行此操作,对我的最终用户来说会更容易。

0 投票
3 回答
9544 浏览

.net - 用于多个平台的 Mono 中的串行端口 (rs232)

我计划在 .NET 中重新编写一个 Win32 应用程序(本机 C++)——很可能使用单声道,这样我就可以在 Win32、Linux 和 mac 上运行它。我试图解决的问题(仅真正为 Win32 开发)是串行端口定义的问题。当只有一个可执行文件时,通常如何识别平台差异。具体来说,COM 端口在 Windows 中被标识为 COM1 或类似的东西 (\.\COM),但在 linux 上它们被指定为 /dev/ttyS0 之类的东西。

是否在运行时检查平台以获取此信息?

我认为唯一的区别在于港口的开放和关闭。读和写是一样的。

也许这是一个更通用的问题,因为它适用于 mono/.NET 中任何特定于平台的东西。

你怎么处理这个?在一些字符串资源或配置文件中,还是基于运行时平台的硬编码和切换?

有任何代码示例吗?请注意,我是一名 C++ 开发人员,并不熟悉 .NET 中可用的所有类。有没有办法从 CLR 获取串行端口命名方案,或者有没有办法从 CLR 获取操作系统/平台?

如果 CLR 能够以更独立的方式呈现串行端口,那就太好了。也许那是不可能的。

谢谢,蒂姆

编辑

鉴于到目前为止的一个响应,我想我应该
先尝试 SerialPort.GetPortNames() 枚举,看看它是否有效。(在两个平台上)

在 win32 中用于更高的端口号和 USB 加密狗 - 它不像基本的 COM 端口枚举那么简单。

我将在这里报告调查结果。

0 投票
6 回答
6401 浏览

.net - 如何在 Mono 中获取串行端口的“友好”名称并保持跨平台

我问了这个问题:
Serial Port (rs232) in Mono for multiple platform

这一个是相关的:
如何在 Windows 中获取 COM 端口的友好名称?

但我希望能够在 Windows 上获得“友好”的名称,如果有这样的事情,也可能在 linux /mac 上。

有没有跨平台的方法可以做到这一点,还是我不走运?

这是我在当前应用程序中所做的 - 它适用于本机 C++ win32。

http://www.naughter.com/enumser.html

无论如何,它看起来不像是跨平台分发的完美解决方案。有没有人有什么建议?

编辑 - 因为人们无法理解我的要求:例如 - COM9 不是一个友好的名称。我想要一些写着“COM9 -​​ USB 连接器”之类的东西。这可以通过上面的 Win32 链接实现。这很讨厌而且很麻烦,但是很多时候最终用户不知道他们需要在我的程序中打开哪个 COM 端口,除非有一个有用的名称——比“COMn”更有用。

0 投票
2 回答
3336 浏览

java - 使用串行端口的 CANopen PDO

我正在尝试了解 CANopen 协议。

目前,我没有任何 CAN 硬件或 CANopen 堆栈可供试验。

我想知道如何编写一个 Java 程序来简单地解释在 RS-232 端口接收到的 CANopen 消息。

  • 是否有作为串行端口安装的 CAN 接口?
  • 我可以编写一个程序来处理 CANopen 消息吗?我只想能够接收和解释消息。是否像为输入流创建缓冲区然后根据 SOF 和 EOF 将传输分解为单独的消息一样简单?我怎么知道什么是 SOF/EOF,因为它只有 1 位长?
  • 为什么CAN节点的PDO数量有限制?
  • 如何处理 PDO 以识别发送它的节点以及数据类型和值?PDO 是标准 CAN 帧吗?
0 投票
2 回答
6674 浏览

c# - 如何解锁 COM 端口

我有一个必须在另一个应用程序之后工作的应用程序。第二个应用程序有一个错误,导致 COM 端口在特定情况下不关闭。

我想在我的应用程序中以编程方式关闭所有 COM 端口,以确保不会报告有关关闭端口的错误。如果我不拥有打开 COM 端口的对象,是否有可能?

我需要一个关于 .NET Framework, C# 的解决方案。

0 投票
1 回答
3878 浏览

windows - 串口,相当于“全双工”流量控制?

我有一个文档,其中包含通过串行端口连接到设备的信息。它指定“全双工”作为流量控制的设置。在 Windows 下,我有以下用于设置流控制的选项:

  • Xon/Xoff
  • 硬件
  • 没有任何

上面列表中“全双工”的等价物是什么?

0 投票
9 回答
55784 浏览

c# - 如何使用 .NET / C# 进行健壮的 SerialPort 编程?

我正在编写一个 Windows 服务,用于与串行磁条阅读器和中继板(访问控制系统)进行通信。

在另一个程序通过打开与我的服务相同的串行端口“中断”进程后,我遇到了代码停止工作(我得到 IOExceptions)的问题。

部分代码如下:

我的示例程序成功启动了工作线程,并且 DTR 的打开/关闭和升高导致我的磁条阅读器通电(等待 1 秒)、关闭(等待 1 秒)等等。

如果我启动超级终端并连接到同一个 COM 端口,超级终端会告诉我该端口当前正在使用中。如果我在超级终端中反复按 ENTER,尝试重新打开端口,它会在重试几次后成功。

这会在我的工作线程中导致 IOExceptions,这是预期的。但是,即使我关闭了超级终端,我的工作线程中仍然会收到相同的 IOException。唯一的治疗方法实际上是重新启动计算机。

其他程序(未使用 .NET 库进行端口访问)此时似乎可以正常工作。

关于造成这种情况的任何想法?

0 投票
3 回答
23356 浏览

boost - 如何使用 asio 执行非阻塞读取?

我正在尝试使用 boost::asio 从串行端口上的设备读取和写入。boost::asio:read() 和 boost::asio::serial_port::read_some() 都会在没有可读取的内容时阻塞。相反,我想检测这种情况并向端口写入命令以启动设备。

我怎样才能检测到没有可用的数据?

如有必要,我可以异步执行所有操作,如果可以的话,我宁愿避免额外的复杂性。

0 投票
3 回答
3741 浏览

c# - 如何测试与 C# 的串行/超级终端集成?

我必须为 USB 秤开发软件,当您按下它上的按钮时,它会通过 USB 发送串行通信。我可以在超级终端中看到这些值。

我将使用 .NET 类进行串行通信来捕获数据。

问题是,我没有秤。秤连接到我可以 RDP 进入的远程计算机。当我想测试时,我可以要求客户按下秤上的按钮。

我不能要求客户每天按下按钮 100 次,我需要有一种方法来开发,对秤会报告的内容有一个相当好的想法,并且只有在我认为我有解决方案时才进行测试。

我正在本地寻找可以模仿比例并发送到我的 .NET Serial 类的东西,与比例相同的输出。理想情况下,如果我可以记录秤的数据,然后在另一台机器上播放,那就完美了。

我该怎么做?