Modbusプロトコルを使用して、機器からレジスタの値を直接読み取ることができるかどうか教えてください。Java言語でレジスタを読み込んでjspページに出力したい。このプログラムは、ディプロマ プロジェクトと Java の知識を得るために必要です。誰かがこれをやろうとしましたか?マンゴーinfiniteautomationを使用してライブラリmodbus4jを見つけましたが、どういうわけかすべてが非常に困難です。ご回答ありがとうございます。
いくつかの情報を追加する必要があります。Schneider electric ATV 71 周波数変換器を Modbus TCP にコンピューターに接続しました (ソフトウェアがこのデバイスを認識するため、接続が確立されます)。
以下は、使用されるコードの例です。デバイスが大学にあり、示されたアドレスを覚えていないため、ホストは異なります。
public class Test {
public static void main(String[] args) throws ErrorResponseException,ModbusTransportException {
ModbusFactory factory = new ModbusFactory();
IpParameters parameters = new IpParameters();
parameters.setHost("127.0.0.1");
parameters.setPort(502);
parameters.setEncapsulated(false);
ModbusMaster master = factory.createTcpMaster(parameters,true);
master.setTimeout(1000);
master.setRetries(0);
try {
master.init();
master.setConnected(true);
NumericLocator locator = new NumericLocator(1,RegisterRange.HOLDING_REGISTER,0,DataType.FOUR_BYTE_INT_SIGNED);
System.out.println("value: "+master.getValue(locator));
System.out.println(master.isInitialized());
System.out.println(master.isConnected());
} catch (ModbusInitException e) {
System.out.println("Something wrong");
e.printStackTrace();
}
} }
メソッド「master.isInitialized()」および「master.isConnected()」は値「true」を返します。デバイスに設定されているアドレスは「1」です。別のIDをインストールすると例外がスローされるため、接続も確認します。
NumericLocator locator = new NumericLocator(1,RegisterRange.HOLDING_REGISTER,0,DataType.FOUR_BYTE_INT_SIGNED);
System.out.println("value: "+master.getValue(locator));
上記のコードは、設定したシフトに関係なく常に「null」を返します。
EasyModbus ライブラリも試してみましたが、常に値「0」が得られました。
だから私はあなたが私を助けることができるこの情報で信じています. ご回答ありがとうございます。