EasyModbus и подключение по Modbus RTU на C#
Используя библиотеку EasyModbus, пробую в C# ConsoleApp (net9.0) подключиться к ПЛК по Modbus RTU, подключенный к ПК через переходник RS485/USB. Код:
using EasyModbus;
using System;
using System.IO.Ports;
// ConsoleApp1
class Program
{
static void Main(string[] args)
{
ModbusClient modbusClient = new ModbusClient();
// Устанавливаем параметры последовательного порта
modbusClient.SerialPort = "COM4";
modbusClient.Baudrate = 19200;
modbusClient.Parity = Parity.Even;
modbusClient.StopBits = StopBits.One;
modbusClient.UnitIdentifier = 10;
try
{
Console.WriteLine("Попытка подключения к ПЛК...");
// Подключаемся к устройству и вылетаем в catch
modbusClient.Connect();
Console.WriteLine("Соединение установлено!");
// Адрес и количество регистров, которые надо прочитать
int startAddress = 600;
int quantity = 30;
// Чтение
int[] registers = modbusClient.ReadHoldingRegisters(startAddress, quantity);
// Вывод результатов
Console.WriteLine($"Прочитано значений: {registers.Length}");
for (int i = 0; i < registers.Length; i++)
{
Console.WriteLine($"Регистр {startAddress + i}: {registers[i]}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
// Здесь выдаёт тип ошибки
// А здесь работает без проблем https://www.youtube.com/watch?v=JlJ6BUHJ-rQ
}
finally
{
if (modbusClient != null && modbusClient.Connected)
{
modbusClient.Disconnect();
}
Console.WriteLine("Программа выполнена.");
}
}
}
Вывод консоли:
Попытка подключения к ПЛК...
Ошибка: Присоединенное к системе устройство не работает.
Программа выполнена.
Это "присоединённое устройство" не работает, стоит лишь указать параметр modbusClient.SerialPort = "COM4"; или СОМ3 (смотря куда подключаю). Если указать, например, СОМ1, то подключение выполнится, но на нём SSD...
Примечания:
- библиотека NModbus даёт такой же отрицательный результат;
- через установленную прогу Modbus Poll подключаюсь и успешно читаю через порт "USB-SERIAL CH340 (COM4)" все 30 регистров, т.е. настройки подключения верные, физической проблемы с соединением нет;
- если использовать патч-корд и ModbusTCP, то EasyModbus через IP-адрес и номер порта без проблем читает ПЛК.
Кто-нибудь сталкивался с этим, в какую сторону "копать" эту проблему?