Modbus

Modbus初體驗(yàn)

package com.zz.modbus;

import com.intelligt.modbus.jlibmodbus.Modbus;
import com.intelligt.modbus.jlibmodbus.exception.ModbusIOException;
import com.intelligt.modbus.jlibmodbus.master.ModbusMaster;
import com.intelligt.modbus.jlibmodbus.master.ModbusMasterFactory;
import com.intelligt.modbus.jlibmodbus.tcp.TcpParameters;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * @Projectname: modbusTest
 * @Filename: ModusTest
 * @Author: wyf
 * @Data: 2022/12/7 13:56
 * @Description: TODO
 */
public class ModbusTest {
    public static void main(String[] args) throws UnknownHostException {
        //設(shè)置主機(jī)參數(shù)
        TcpParameters tcpParameters = new TcpParameters();

        //設(shè)置Tcp的ip地址
        InetAddress address = InetAddress.getByName("127.0.0.1");

        //Tcp參數(shù)設(shè)置主機(jī)地址
        tcpParameters.setHost(address);

        //Tcp設(shè)置長(zhǎng)連接
        tcpParameters.setKeepAlive(true);

        //Tcp設(shè)置端口
        tcpParameters.setPort(502);

        //創(chuàng)建一個(gè)主機(jī)
        ModbusMaster master = ModbusMasterFactory.createModbusMasterTCP(tcpParameters);
        Modbus.setAutoIncrementTransactionId(true);

        int slaveId = 1;
        int offset = 0;
        int quantity = 10;

        try {
            if (!master.isConnected()){
                master.connect();
            }

            //04功能碼,讀取輸入寄存器
            int[] registersValues = master.readInputRegisters(slaveId, offset, quantity);

            //03功能碼,讀取保持寄存器
            int[] readHoldingRegistersValues = master.readHoldingRegisters(slaveId, offset, quantity);

            //01功能碼,讀取線圈
            boolean[] coilsValues = master.readCoils(slaveId, offset, quantity);

            //02功能碼,讀取離散輸入
            boolean[] discreteInputsValues = master.readDiscreteInputs(slaveId, offset, quantity);

            // 控制臺(tái)輸出
            for (int value : registersValues) {
                System.out.println("Address: " + offset++ + ", Value: " + value);
            }
            System.out.println("================================================");
            for (int value : readHoldingRegistersValues) {
                System.out.println("Address: " + offset++ + ", Value: " + value);
            }
            System.out.println("================================================");
            for (boolean value : coilsValues){
                System.out.println("Address: " + offset++ + ", Value: " + value);
            }
            System.out.println("================================================");
            for (boolean value : discreteInputsValues){
                System.out.println("Address: " + offset++ + ", Value: " + value);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                master.disconnect();
            } catch (ModbusIOException e) {
                e.printStackTrace();
            }
        }
    }
}

04功能碼,讀取輸入寄存器,只讀

//04功能碼
//編寫請(qǐng)求
ModbusRequest inputRequest = ModbusRequestBuilder.getInstance().buildReadInputRegisters(slaveId, offset, quantity);
//發(fā)送請(qǐng)求
ReadInputRegistersResponse inputResponse = (ReadInputRegistersResponse) master.processRequest(inputRequest);
//獲取值
int[] registers01 = inputResponse.getHoldingRegisters().getRegisters();

for (int value : registers01){
   System.out.println(value);
}

03功能碼,讀取保持寄存器,讀寫

//03功能碼,讀取保持寄存器
//編寫請(qǐng)求
ModbusRequest holdRequest = ModbusRequestBuilder.getInstance().buildReadHoldingRegisters(slaveId, offset, quantity);
//發(fā)送請(qǐng)求
ReadHoldingRegistersResponse holdResponse =(ReadHoldingRegistersResponse) master.processRequest(holdRequest);
//獲取值
int[] registers02 = holdResponse.getHoldingRegisters().getRange(2, 3);

for (int value : registers02){
    System.out.println(value);
}

寫入寄存器
三個(gè)參數(shù)分別是:從機(jī)地址,寫入位置,寫入的值

ModbusRequest request = ModbusRequestBuilder.getInstance().buildWriteSingleRegister(slaveId, 1, 5);
            WriteSingleRegisterResponse response = (WriteSingleRegisterResponse) master.processRequest(request);

02功能碼,讀取離散輸入,只讀

boolean[] discreteInputsValues = master.readDiscreteInputs(slaveId, offset, quantity);

01功能碼,讀取線圈,讀寫

boolean[] coilsValues = master.readCoils(slaveId, offset, quantity);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 簡(jiǎn)述 Modbus寄存器分為四種,如表1.1所示: 表1.1 寄存器分類 2 常用功能碼 Modbus中常用的...
    lakerszhy閱讀 49,004評(píng)論 0 16
  • 在上一期中,我們了解了1.Modbus通信協(xié)議的含義2/業(yè)內(nèi)使用的Modbus通信類型。在此章中,我們將了解Mod...
    yiwatercool閱讀 614評(píng)論 0 2
  • Modbus Poll是Modbus主站設(shè)備仿真器,可用于測(cè)試和調(diào)試Modbus從站設(shè)備。便于觀察Modbus通訊...
    臘雞愛學(xué)習(xí)閱讀 18,523評(píng)論 1 5
  • 一、Modbus 協(xié)議簡(jiǎn)介 ModBus網(wǎng)絡(luò)是一個(gè)工業(yè)通信系統(tǒng),由帶智能終端的可編程序控制器和計(jì)算機(jī)通過公用線路或...
    漠漠彡閱讀 96,052評(píng)論 2 21
  • 讀線圈狀態(tài) 讀取從設(shè)備的線圈或離散量輸出狀態(tài),即DO(Discrete Output,離散輸出)請(qǐng)求碼:01地址范...
    中_中_閱讀 18,965評(píng)論 0 1

友情鏈接更多精彩內(nèi)容