-
Вложений: 1
На первой странице есть пример опроса плк из консольного приложения C#. По протоколу Modbus TCP. C# я только изучаю. Мне нужно написать мастера сети Modbus RTU для опроса входов МВ110-24.32ДН. Использую VS Community. NModbus подключил. Попробовал переделать пример с первой страницы с Modbus TCP на Modbus RTU. Не очень понятно, как это сделать. Нужно же где то номер порта, параметры подключения и т.д....
Попробовал пример Create RTU из мануала на NModbus.
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Modbus.Device;
using System.Net.Sockets;
namespace ModbusTest
{
class Program
{
static void Main(string[] args)
{
SerialPort serialPort = new SerialPort(); //Create a new SerialPort object.
serialPort.PortName = “COM14”;
serialPort.BaudRate = 115200;
serialPort.DataBits = 8;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.Open();
ModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort);
}
}
}
Начеркало ошибок:
Вложение 56520
Можно ли где то глянуть рабочий пример или что то похожее? Нужно же с чего то начать, а дальше буду разбираться..
-
-
Я это уже видел. Для меня это пока сложновато и избыточно. Я не готов пока за WinForm приниматься. Консоль еще не полностью освоил. И выудить то, что мне нужно из этого проекта вряд ли смогу без посторонней помощи...
-
wad71 есть открытые проекты, где есть Modbus, но если вы не можете выудить нужное без помощи, то вероятно не поможет так же...
-
Не так, чтобы совсем уж я деревянный... Из проекта для консоли, я думаю, смог бы нужное отсеять. По крайней мере времени уйдет намного меньше.
-
Вложений: 1
Подключил к компу через преобразователь USB/RS485 модуль ввода МУ110-32Р. Сетевой адрес модуля 16, в диспетчере задач он отображается на COM14.
Вот написал, руководствуясь мануалом на NModbus:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Modbus.Device;
using System.Net.Sockets;
using System.IO.Ports;
namespace ModbusTest
{
class Program
{
static void Main(string[] args)
{
SerialPort serialPort = new SerialPort(); //Create a new SerialPort object.
serialPort.PortName = "COM14";
serialPort.BaudRate = 115200;
serialPort.DataBits = 8;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.Open();
ModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort);
//master.Transport.ReadTimeout = 300;
while (true)
{
Console.WriteLine("адрес регистра - ");
ushort registerAddress = ushort.Parse(Console.ReadLine());
Console.WriteLine("значение - ");
ushort value = ushort.Parse(Console.ReadLine());
master.WriteSingleRegister(16, registerAddress, value);
}
}
}
}
Сборка проекта без ошибок.
С консоли ввожу адрес регистра, затем значение ШИМ (0-1000).
В итоге выскакивает :
Вложение 56529
Что делаю неправильно?
-
-
А сам модуль при этом настроен?
-
И еще. Из руководства на модуль: " ...запись осуществляется командой 16(0х10)....
Из описания протокола: 16 (0x10) — запись значений в несколько регистров хранения (Preset Multiple Registers).
Остается понять, какую команду отсылает функция WriteSingleRegister.
Мне почему-то кажется, что это будет 6 (0x06) — запись значения в один регистр хранения (Preset Single Register).
-
Перевел. Команда не поддерживается ведомым устройством. Переписал с использованием WriteMultipleRegisters. Так все работает без проблем. То есть МУ110 - 32Р не поддерживает запись одиночных регистров? Только группой?