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-адрес и номер порта без проблем читает ПЛК.

Кто-нибудь сталкивался с этим, в какую сторону "копать" эту проблему?


Ответы (0 шт):