gpt4 book ai didi

c# - COM 端口被拒绝

转载 作者:太空狗 更新时间:2023-10-30 00:57:47 25 4
gpt4 key购买 nike

您好,我正在尝试使用 COM 端口使用 modbus 协议(protocol)读取一些寄存器,一切正常,直到我重新启动 modbus 从属设备,然后我有错误提示 com 被拒绝,我可以做的是重启计算机或拔掉电源然后回到“USB 到 COM 转换器”。似乎此设备无法正确处理 com 端口。

using (port = new SerialPort(comPort))
{
ushort[] registers = null;
try
{
port.BaudRate = boudRate;
port.DataBits = 8;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.Open();

// modbus reading registers

port.Close();
return registers;
}
catch (Exception e)
{
Logs.AddToLog(e.Message);
return registers;
}
}

最佳答案

如果您使用的是 FTDI USB/串行适配器,您可以直接从托管包装器 (FTDI Managed Driver Wrapper) 检索状态并根据连接状态重新初始化您的串行端口。

请原谅我缺乏使用 FTDI 设备的经验,但这应该会重置您的 R-232 适配器:

FTD2XX_NET.FTDI device = new FTD2XX_NET.FTDI();
string port;
device.GetCOMPort(out port);

if (!string.IsNullOrEmpty(port) && (port.Equals(target)) && device.IsOpen)
{
device.CyclePort();
device.ResetDevice();
device.ResetPort();
}

根据我的理解,device.CyclePort() 将关闭任何事件连接(调用 FT_CLOSE),卸载 USB 设备,并从 USB 总线重新枚举设备。这应该与您物理移除并重新插入适配器完全相同。

此外,根据 FTDI 设备库的 Perl 包装器的文档:

As with other bus controls, there is a wait period of 5-8 seconds after a CyclePort where any API call that requires direct connection to the device, like GetSerialByIndex() etc, will fail with FT_INVALID_HANDLE until it has completely stabilized. The application should account for this wait period, or setup a polling loop to detect the change in return status.

关于c# - COM 端口被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4369679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com