Работа с MODBUS RTU для чтения регистров временного хранения из модуля измерения мощности WAGO.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Работа с MODBUS RTU для чтения регистров временного хранения из модуля измерения мощности WAGO.

Сообщение Anonymous »

Я пытаюсь создать графический интерфейс для связи с модулем измерения трехфазной мощности WAGO (номер изделия 2857-570/024-005) для считывания измеренных значений и изменения параметров измерения (далее именуемого WAGO). ). Этот WAGO обменивается данными через MODBUS RTU, и из-за требований и ограничений моего работодателя я не могу использовать ПЛК и должен связываться с WAGO непосредственно с моего ПК с Windows, кроме того, по тем же причинам я не могу использовать программу под названием CODESYS. которые сами WAGO рекомендуют для связи по протоколу MODBUS со своим устройством. Чтобы обойти эту проблему, я написал программу, использующую Visual Studio (на C#), используя пакет NModbus4 для связи с моим модулем WAGO. Однако при запуске программы я не получаю ответа от WAGO при попытке прочитать простой регистр временного хранения.

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.IO.Ports;

using Modbus.Data;
using Modbus.Device;
using Modbus.Utility;
using Modbus.Message;
using Modbus.IO;
//using Modbus.Serial;

namespace MODBUS_RTU_Tester
{
internal class Program
{
static void Main(string[] args)
{
//Specify the COM port assigned to the RS-485 Adapter
string comPort = "COM4"; //Replace with your desired COM port
int baudRate = 19200; // Standard MODBUS baud rate
Parity parity = Parity.Even; //Ensure it matches your devices configuration
int dataBits = 8; //Standard for MODBUS
StopBits stopBits = StopBits.One;
Console.WriteLine("MODBUS RTU Tester");

using (SerialPort port = new SerialPort(comPort))
{
port.BaudRate = baudRate;
port.Parity = parity;
port.DataBits = dataBits;
port.StopBits = stopBits;
port.ReadTimeout = 5000; //Timeout adjustments
port.WriteTimeout = 5000;
//port.Open(); //Open the port for communication

try
{
Console.WriteLine("Opening serial port...");
port.Open();
Console.WriteLine("Serial port opened successfully");

IModbusSerialMaster modbusMaster = ModbusSerialMaster.CreateRtu(port);

byte slaveAddress = 7; //WAGO module address
ushort startAddress = 0; //Register Address
ushort numberOfRegisters = 1; //Number of Registers
Console.WriteLine("Reading holding registers");
ushort[] registers;

try
{
//Read holding registers
registers = modbusMaster.ReadHoldingRegisters(slaveAddress, startAddress, numberOfRegisters);

Console.WriteLine("Register Values:");
for (int i = 0; i < registers.Length; i++)
{
Console.WriteLine($"Register {startAddress + i}: {registers[i]}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error reading registers: {ex.Message}");
return;
}

//Write to a single register
ushort registerToWrite = 0x0054;
ushort valueToWrite = 440;

try
{
modbusMaster.WriteSingleRegister(slaveAddress, registerToWrite, valueToWrite);
Console.WriteLine($"Wrote value {valueToWrite} to register {registerToWrite}");
}
catch (Exception ex)
{
Console.WriteLine($"Error writing registers: {ex.Message}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
finally
{
Console.WriteLine("Closing serial port...");
if (port.IsOpen) port.Close();
Console.WriteLine("Serial port closed.");
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}

}
}
}
}

Для контекста я использую адаптер MOXA UPort 1130 USB-Serial, настроенный для 2-проводного RS-485, скорость 19200 бод, четность, 8 бит данных и один стоповый бит. , а также правильные драйверы. Я также настроил WAGO на подчиненный адрес 7, 19200 бод, четность, 8 бит данных и один стоповый бит. Кроме того, у меня WAGO подключен к UPort 1130 с помощью экранированной витой пары CAT 7, где провод 4 подключен к клемме D+, а провод 5 подключен к клемме D- UPort 1130, также подключен провод GND. , согласно рекомендациям руководства WAGO.
Я пробовал устанавливать и использовать разные адреса подчиненных устройств, пробовал 9600 бод, считывал с разных стартовых адресов. регистры (с использованием шестнадцатеричных и десятичных чисел) и разные четности, но ни один из них не увенчался успехом. Кроме того, я использовал анализатор осциллографа/логики для просмотра сигналов, отправляемых и получаемых моим ПК, и убедился, что мой запрос от ПК был правильным, но после нескольких попыток ответа от WAGO не последовало. Мне сказали, что мне не понадобятся согласующие резисторы или даже заземляющий провод после того, как несколько других инженеров из моей компании попытались мне помочь. Я новичок в работе с MODBUS, поэтому не удивлюсь, если упущу что-то тривиальное, вызывающее это, но я исчерпал все возможные способы решения, которое мог придумать.
Может ли кто-нибудь помочь мне диагностировать эту проблему и предложить потенциальное решение? На данный момент у меня почти нет вариантов, что попробовать дальше, и я не могу найти на этом веб-сайте ничего, что помогло бы мне решить эту проблему. Любая помощь или совет будут очень признательны.

Подробнее здесь: https://stackoverflow.com/questions/792 ... easurement
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как дождаться ответа Modbus RTU через TCP в PHP?
    Anonymous » » в форуме Php
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Протокол связи modbus RTU в Python
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Чтение различных типов данных через Modbus RTU на ESP32
    Anonymous » » в форуме C++
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Запрос на данные нежелания на линии Modbus RTU
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как прочитать карту регистров из последовательного порта COM с использованием протокола Modbus и как преобразовать значе
    Anonymous » » в форуме C#
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»