Я хочу использовать 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. Любая помощь будет высоко ценится!