0

我正在尝试从 docker IoT Edge 模块中的 modbus comport 中读取数据。我提供了相关的 createOptions:

{“HostConfig”:{“隔离”:“进程”,“设备”:[{“PathOnHost”:“class/86E0D1E0-8089-11D0-9CE4-08003E301F73”,“PathInContainer”:“”,“CgroupPermissions”:“ " } ], "绑定": [ "C:/Streamwise:C:/Streamwise" ] } }

这在某些 ipcs 上完美无缺,但在其他 ipcs 上却失败了

System.IO.FileNotFoundException:找不到文件“COM4”。文件名:'COM4'

当我尝试打开 serail 端口时

如果我不指定任何 createOptions,这与我收到的错误相同。因此,这些选项似乎没有被应用。知道为什么吗?

下面的代码片段

    public static void Connect(string portName)
    {
        Console.WriteLine(portName);
        // Configure serial port
        SerialPort port = new SerialPort(portName, 9600, Parity.None, 8, StopBits.One);
        port.Open();
        master = new ModbusFactory().CreateRtuMaster(new SerialPortAdapter(port));
        master.Transport.ReadTimeout = 200;
        master.Transport.WriteTimeout = 200;
    }

port.open() 发生错误

附加上下文:由于某种原因,在 ipcs 上,我必须在 daemon.json 中为 iotedge-moby 指定 DNS 服务器,出现此问题。不确定它们是否相关或纯属巧合。

4

1 回答 1

0

您很可能需要使用 PortBindings 将主机端口映射到模块端口:

例如:

"createOptions": {
  "HostConfig": {
    "PortBindings": {
      "8080/tcp": [
        {
          "HostPort": "80"
        }
      ]
    }
  }
}

参考:如何为 IoT Edge 模块配置容器创建选项

于 2021-10-27T11:53:09.913 回答