我正在尝试使用 Modbus 协议 ping Socomec仪表,经过研究,我发现了 NModbus,一个 C# 库。我以前从未使用过库或 C#(通常是 Java),但我必须直接投入其中。
我为 C# 设置了 Visual Studio Express 并安装了 .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
}
}
}