3

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
        }
    }
}
4

2 に答える 2

5

すでにJavaに精通している場合は、 Java MODBUSライブラリを使用してみませんか? 私は Socomec メーターを使用したことはありませんが、一般的に MODBUS デバイスでは、関心のあるプロトコルとアドレスを知る必要があります。次に、MODPOLLなど、うまく機能していることがわかっているツールを使用して、デバイスからタグを読み取ってみてください。次に、期待どおりに使用可能な値を取得したら、任意の言語でポーリング接続をプログラミングします。そうしないと、何が起こっているのか疑問に思って多くの時間を失う危険があります。1 つのヒント... あなたのコードから、あなたが MODBUS ASCII シリアル マスターとして機能していることがわかります。そのようなデバイスは存在しますが、私が使用した RS232/RS485 デバイスの 95% は MODBUS RTU でした。違いがわからない場合は、仕様をお読みください。

于 2011-05-23T14:06:45.050 に答える
1

JavaアプリケーションをWindowsサービスとして実行できます。会社のJavaアプリケーションで使用するTomcatJavaサービススターターがあります。サービスを停止するために呼び出されるメソッドを作成しましたが、それは単なるメソッドです。

これが、アプリケーションをサービスとしてインストールするために使用する行です-

"%〜dp0windows \ tomcat6" // IS //%1 --DisplayName%1 --Description "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を確認してください。私の会社は、たくさんのクリーンアップとともに、jamodのフォークを実行し、それが結果でした。

于 2013-03-17T01:38:32.963 に答える