1

我使用 C# .Net 4 中的制造商硬件 DLL 访问我的 COM 端口。连接到我的 COM 端口时,我有一个Nanotec 步进电机控制SMCI 33。

当硬件步进电机的运动完成时,制造商提供了一个标志“SetSendStatusWhenCompleted”来发送一个状态字节。不幸的是,没有监听这个状态字节的函数。我想添加这个功能。

目标:使用硬件驱动程序发送移动命令。等待:在发送下一个移动命令之前,收听响应“状态字节”。

using System.IO; using System.IO.Ports;
(... access same com Port via driver of hardware manufacturer. ...)
sp = new SerialPort();
    sp.PortName = "COM4";
    sp.BaudRate = 115200;
    sp.DataBits = 8;
    sp.StopBits = System.IO.Ports.StopBits.One;
    sp.Parity = System.IO.Ports.Parity.None;
    sp.Handshake = System.IO.Ports.Handshake.None;
sp.Open();

显然我得到了UnauthorizedAccessException,因为我的代码启动了驱动程序并尝试访问同一个 COM 端口。一个类似的 SO 问题处理来自另一个程序的 COM 访问:端口嗅探器 (Portmon) 是解决方案。但我的问题需要简单的代码。

我可以停止硬件驱动程序。目前的问题是时间成本高的重新初始化。除了关闭以前的硬件驱动程序之外,还有其他方法可以监听 COM 端口吗?

4

2 回答 2

1

您应该使用Monitor 工具,以更好地了解您的其他应用程序真正在做什么以及在线上发生了什么。此外,您可以设置两个虚拟 com 端口来测试在一台机器上的读写(即使在同一应用程序中),以便更好地控制何时发送哪些数据。

于 2012-11-23T12:39:28.653 回答
0

Nullmodem com0com 项目中的 hub4com 提供了请求的多路复用。Hub4com 实现多路复用并管理 com 端口上的请求。这允许 a) 驱动程序和 b) OP 的代码访问相同的 COM 端口。

于 2021-11-01T09:12:16.073 回答