我正在尝试使用Modbus协议ping一个 Socomec 仪表,经过研究,我找到了一个C#库NModbus。我之前从未使用过库或C#(通常是Java),但我必须直接进入。
我为自己设置了Visual Studio Express for C#并安装了.Net。我已经将NModbus文件的内容复制到我的项目文件夹中,并添加了对两个主要DLL的引用。它不适用于.Net 4,但我重新定位到3.5(并删除了Microsoft.Csharp引用),似乎编译好了。
我正在使用下面的this sample来尝试连接到从设备。当我运行它,并将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
}
}
}
答案 0 :(得分:5)
当您熟悉Java时,为什么不使用某些 Java MODBUS library ?我没有使用过Socomec仪表,但一般来说,对于MODBUS设备,您需要知道您感兴趣的协议和地址。然后尝试使用一些您知道运行良好的工具从设备读取标签,例如{{3 }}。然后,当您按预期获得可用值时,您可以使用您喜欢的任何语言编写轮询连接。否则,你可能会浪费很多时间来想知道发生了什么。 一个提示......从您的代码中我看到您充当了MODBUS ASCII串行主机。虽然存在这样的设备,但我使用的RS232 / RS485设备中有95%是MODBUS RTU。如果您不知道差异,请阅读规范。
答案 1 :(得分:1)
您可以将Java应用程序作为Windows服务运行。我在公司的Java应用程序中使用了Tomcat Java服务启动程序。您已创建一个将被调用以停止服务的方法,但这只是一种方法。
以下是我用来将我的应用程序安装为服务的行 -
“%~dp0windows \ tomcat6”// IS //%1 - 显示名称%1 - 描述“gmServer for%1”^ --JavaHome“%JAVA_HOME%” - Classpath“%PR_CLASSPATH%” - LogPrefix gmserver ^ --StartMode jvm --StopMode jvm --Jvm auto --StartPath“%~dp0。” ^ --LogPath“%~dp0。” --LogLevel debug --StdOutput%1.out --StdError%1.err ^ --StartClass greenMonitor.gmServer --StartParams -I#%I#-u#3600 ^ --StopMethod windowsService --StopParams stop --StopTimeout 10
插入符(“^”)是.BAT文件中的行连续符。您应该能够使用Tomcat文档找到Tomcat命令行选项的含义。
对于基于Java的Modbus库,可以使用许多方便的程序来测试连接,在Sourceforge上查看j2mod。我的公司做了一个塞子,还有一堆清理,结果就是这样。