Modbus プロトコルを使用してSocomecメーターに ping を実行しようとしています。調査したところ、C# ライブラリである NModbus が見つかりました。これまでライブラリや C# (通常は Java) を使用したことはありませんが、すぐに使用する必要があります。
Visual Studio Express for C# をセットアップし、.Net をインストールしました。NModbus ファイルの内容をプロジェクト フォルダにコピーし、2 つの主要な 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
}
}
}