我正在尝试使用Modbus协议ping一个Socomec仪表,经过研究,我发现了NModbus,一个C#库.我以前从未使用过库或C#(通常是Java),但我必须直接进入.
我为自己设置了Visual Studio Express for 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
当您熟悉Java时,为什么不使用某些Java MODBUS库?我没有使用过Socomec仪表,但一般来说,对于MODBUS设备,您需要知道您感兴趣的协议和地址.然后尝试使用一些您知道运行良好的工具(如MODPOLL)从设备读取标签.然后,当您按预期获得可用值时,您可以使用您喜欢的任何语言编写轮询连接.否则,你可能会浪费很多时间来想知道发生了什么.一个提示......从您的代码中我看到您充当了MODBUS ASCII串行主机.虽然存在这样的设备,但我使用的RS232/RS485设备中有95%是MODBUS RTU.如果您不知道差异,请阅读规范.
| 归档时间: |
|
| 查看次数: |
3638 次 |
| 最近记录: |