重置COM端口的麻烦

troubles to reset COM port

提问人:Luis Gabriel Fabres 提问时间:11/17/2023 更新时间:11/17/2023 访问量:15

问:

我正在开发一个应用程序,该应用程序通过 rs232 端口从设备接收一串字符。该过程工作正常,除了在某些时候我用于通信的 COM 端口崩溃。该程序(在网络核心 7 中开发)检测到端口被阻止(无论出于何种原因),并尝试关闭端口并随后重新启动。这是我遇到问题的地方,因为端口被阻塞,它分别通过关闭和打开对关闭和打开没有响应。

我一直在尝试通过不同的方式禁用和启用通信端口,但它们都没有正常工作,要么是由于执行方式的问题,要么是由于禁用和启用 COM 端口的命令存在问题。

使用带有管理单元 (Diagnostics.dll) 的 PowerShell,当我使用管理单元 Microsoft.PowerShell.Diagnostics 时,在指定路径中找不到它。我认为这可能是由于缺乏对 .NET Core 7.0 运行时的支持。

使用包管理器 (System.Management.Automation) 的 PowerShell,问题似乎是 System.Management.Automation 包 (7.4.0) 的版本与 .NET Core 7.0 不兼容。

我也尝试安装 Devcon,但即使 Devcon 能够在使用设备 ID 运行 disable 时使用标识符找到设备,它也不会运行它。这是我获得最佳结果的选项,至少可以识别设备,但是禁用时,它只是说它找不到设备。

我也尝试了 Mode,这里的 mode 命令不会以任何方式禁用 COM 端口。

最后,我一直在审查 WMI(Windows 检测),但这里的问题是使用 WMI 时在尝试禁用设备时会产生异常:System.Management.ManagementException:“一般错误”

我没有想法,我不知道问题是否是因为被阻止的端口不允许禁用或重置它......如果有人以前处理过此类问题,并且可以帮助我,请。问候并感谢您的阅读。

C# .net-core 开发人员大会

评论

0赞 Panagiotis Kanavos 11/17/2023
COM 端口不会崩溃。任何其他端口(以太网、USB)也没有。不过,不再有带有 RS232 端口的主板,因此您使用的几乎可以肯定是 RS232 转 USB 适配器。驱动程序或 POS 仿真器实用程序很可能会崩溃。适配器制造商在驱动程序开发方面非常糟糕。当驱动程序崩溃时,设备管理器会显示什么?您可以禁用并重新启用驱动程序吗?如果无法执行此操作,则无法使用 API 或命令行执行此操作。然而,在所有这些情况下,真正的解决方案是找到一个好的司机
0赞 Panagiotis Kanavos 11/17/2023
我应该强调的是,找回一个坏司机不是你的责任。如果驱动程序每 10 分钟崩溃一次,则在尝试重置驱动程序时,应用程序将每隔一段时间阻止几秒钟。在可能导致收据丢失的 POS 中。但是,如果您使用 RS232 来控制机器,这些碰撞可能会伤害人员。
0赞 Luis Gabriel Fabres 11/17/2023
您好,感谢您抽出宝贵时间和精力进行回复。事实上,正如您所指出的,我正在使用 rs232 转 USB 适配器,因为连接设备的计算机没有 COM 端口(旧的)。设备管理器显示它工作正常,但在程序(用 C# 编写)中,我收到错误“无法设置串行开机自检状态”。如果从设备管理器中,我禁用然后重新启用适配器,再次运行程序后,一切再次顺利运行。
0赞 Luis Gabriel Fabres 11/17/2023
出于这个原因,我正在尝试通过用 C# 编写的程序禁用和启用适配器......这应该是自动的,因为我不能要求用户重新启动道具或禁用并重新启用适配器。
0赞 Panagiotis Kanavos 11/17/2023
如果关闭应用程序会怎样?您可以再次使用该端口吗?禁用设备速度很慢,需要提升的权限。如果关闭应用程序释放端口,则问题很可能出在代码中

答: 暂无答案