0

已建立与 modbus 模拟器的连接,但我正在尝试从模拟器中读取寄存器值并将其写入控制台但无法执行。此代码成功创建了与 modbus 模拟器的连接,但包含读取寄存器值的语法,即请求寄存器值,并且响应大致相同但无法获取寄存器值。

下面是我试过的代码。

package com.jamodapp;

import java.net.InetAddress;

import net.wimpi.modbus.Modbus;
import net.wimpi.modbus.io.ModbusTCPTransaction;
import net.wimpi.modbus.msg.ReadInputDiscretesResponse;
import net.wimpi.modbus.msg.ReadMultipleRegistersRequest;
import net.wimpi.modbus.msg.ReadMultipleRegistersResponse;
import net.wimpi.modbus.net.TCPMasterConnection;

public class Connection 
{
    static int repeat = 1;
    static TCPMasterConnection con = null;    
    static InetAddress addr = null;        
    static int port = Modbus.DEFAULT_PORT;// 502 
    static ModbusTCPTransaction trans = null; // the transaction
    static ReadMultipleRegistersRequest req = null; // the request
    static ReadMultipleRegistersResponse res = null; // the response

        public static void main(String [] args) throws Exception 
        {
            addr = InetAddress.getByName("127.0.0.1");
            con = new TCPMasterConnection(addr);
            con.setPort(port);
            try 
            {
                con.connect ();
            } catch (Exception e) {

                System.out.println("Sorry could not establish the  connection");
            }
            if(con.isConnected())
            {
                System.out.println("Connection is establish");
            }
         // Prepare the request
            ReadMultipleRegistersRequest req=new ReadMultipleRegistersRequest();
            req.getHexMessage();

            req = new ReadMultipleRegistersRequest( );
            // Prepare the transaction
            trans = new ModbusTCPTransaction(con);
            trans.setRequest(req);

            // Execute the transaction repeat times
            trans.execute();
            res = (ReadMultipleRegistersResponse) trans.getResponse();
            int [] registers = new int[10] ;
            int k = 0;
            {
            int repeat = 0;
            do {
            ModbusTCPTransaction trans = null;

            {
            ReadInputDiscretesResponse res = (ReadInputDiscretesResponse) trans.getResponse();
            System.out.println("Digital Inputs Status=" + res.getDiscretes().toString());
            k++;
            } while (k < repeat);

            //TCPMasterConnection con = null;
            //6. Close the connection
            //con.close();


            {
            registers[9] = res.getWordCount();
            System.out.println(res.getWordCount());

            // Close the Modbus connection
                con.close();       

            }
            }

}
4

0 回答 0