Как изменить имя порта для использования с библиотеками? - PullRequest
0 голосов
/ 07 октября 2019

Я хочу использовать Serial Modbus с моим SBC под управлением Windows 10 IoT Core. Я могу записывать через последовательный порт через RS-485 при использовании класса SerialDevice из библиотеки Windows.Devices.SerialCommunication .

Последовательные порты на моем SBC не помечены как COM1,COM2 и т. Д. Я должен был найти их, используя команду devcon.exe stack *. Мои порты имеют имена PNP0501 # 1 и PNP0501 # 2, которые я смог использовать в качестве имени порта в SerialDevice, и он работает.

Этот код работает для отправки сообщения через последовательный порт

DeviceInformationCollection devices = await DeviceInformation.FindAllAsync();
            if (devices.Count > 0)
            {
                for (int i = 0; i < devices.Count; i++)
                {
                    if (devices[i].Id.Contains("PNP0501#2"))
                    {
                        GpioStatus = string.Format("Connecting... {0} found", devices[i].Id);
                        DeviceInformation deviceInfo = devices[i];
                        SerialDevice serialDevice = await SerialDevice.FromIdAsync(deviceInfo.Id);
                        serialDevice.BaudRate = 9600;
                        serialDevice.DataBits = 8;
                        serialDevice.StopBits = SerialStopBitCount.Two;
                        serialDevice.Parity = SerialParity.None;
                        serialDevice.Handshake = SerialHandshake.None;

                        DataWriter data = new DataWriter(serialDevice.OutputStream);
                        for (int j = 0; j < 15; j++)
                        {
                            data.WriteString("Test message");
                            GpioStatus = string.Format("Message sent {0}", j);
                            await data.StoreAsync();
                            await Task.Delay(250);
                        }

                        data.DetachStream();

Я хочу использовать библиотеку Modbus, чтобы было проще следовать протоколу Modbus. Я искал EasyModbusTCP, но открыт для любой библиотеки, которая работает с последовательной связью.

Когда я пытаюсь настроить клиент Modbus с этой библиотекой, он запрашивает имя порта, и я ввожу PNP0501 # 1, потому что этоимя этого порта, и он успешно работал для прямой последовательной передачи сообщений. Тем не менее, он выдает ошибку каждый раз, говоря, что это имя не начинается с COM.

            SerialPort serialPort = new SerialPort("PNP0501#2");
            IModbusSerialMaster f = ModbusSerialMaster.CreateRtu(serialPort);
            byte slaveId = 1;
            ushort startAddress = 100;
            ushort[] registers = new ushort[] { 1, 2, 3 };

            f.WriteMultipleRegisters(slaveId, startAddress, registers);

Можно ли изменить имя этого устройства на использование имени COM, чтобы оно могло работать с этой библиотекой? Есть ли какая-нибудь библиотека, которая примет полное имя этого устройства без слова COM. Любая помощь будет высоко ценится!

...