Я пытаюсь пропинговать счетчик Socomec , используя протокол Modbus, изучив, я нашел NModbus, библиотеку C #. Я никогда не использовал библиотеки или C # (обычно Java), но я должен погрузиться прямо в.
Я настроил себя на Visual Studio Express для C # и установил .Net. Затем я скопировал содержимое файла NModbus в папку моего проекта и добавил ссылки на две основные библиотеки DLL. Он не работал с .Net 4, но я переназначил на 3.5 (и удалил ссылку на Microsoft.Csharp), и все, похоже, скомпилировалось.
Я использую этот образец ниже, чтобы попытаться подключиться к ведомому устройству. Когда я запускаю это и устанавливаю переменную startAdress в нужное значение (см. Документацию Socomec), все, что я получаю, это пустое консольное окно.
Короче говоря, я использую правильный метод / параметры, мои настройки / код неверны? Как мне подключиться к этому счетчику?
Мой код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using Modbus.Data;
using Modbus.Device;
using Modbus.Utility;
namespace NModbus
{
class SerialMaster
{
static void Main(string[] args)
{
ModbusSerialAsciiMasterReadRegisters();
}
public static void ModbusSerialAsciiMasterReadRegisters()
{
using (SerialPort port = new SerialPort("COM1"))
{
// configure serial port
port.BaudRate = 9600;
port.DataBits = 8;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.Open();
// create modbus master
IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(port);
byte slaveId = 1;
ushort startAddress = 50536;
ushort numRegisters = 5;
// read five registers
ushort[] registers = master.ReadHoldingRegisters(slaveId, startAddress, numRegisters);
for (int i = 0; i < numRegisters; i++)
Console.WriteLine("Register {0}={1}", startAddress + i, registers[i]);
Console.ReadLine();
}
// output:
// Register 1=0
// Register 2=0
// Register 3=0
// Register 4=0
// Register 5=0
}
}
}