欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java通過Modbus簡單實現數采的示例代碼

 更新時間:2024年11月14日 08:29:13   作者:程序員老王wd  
本文介紹了Java通過Modbus簡單實現數采,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、引入pom依賴

        <dependency>
            <groupId>io.github.jimmy-j</groupId>
            <artifactId>modbus4</artifactId>
            <version>1.2.0</version>
        </dependency>

二、代碼實現

package com.example.demo;

import com.zgkxzx.modbus4And.ModbusFactory;
import com.zgkxzx.modbus4And.ModbusMaster;
import com.zgkxzx.modbus4And.exception.ModbusInitException;
import com.zgkxzx.modbus4And.exception.ModbusTransportException;
import com.zgkxzx.modbus4And.ip.IpParameters;
import com.zgkxzx.modbus4And.msg.*;
import com.zgkxzx.modbus4And.sero.util.queue.ByteQueue;

public class ReadAWriteUtil {


    /**
     * 批量寫數據到保持寄存器
     * @param ip 從站IP
     * @param port modbus端口
     * @param slaveId 從站ID
     * @param start 起始地址偏移量
     * @param values 待寫數據
     */
    public static void modbusWTCP(String ip, int port, int slaveId, int start, short[] values) {
        ModbusFactory modbusFactory = new ModbusFactory();
        // 設備ModbusTCP的Ip與端口,如果不設定端口則默認為502
        IpParameters params = new IpParameters();
        params.setHost(ip);
        // 設置端口,默認502
        if (502 != port) {
            params.setPort(port);
        }
        ModbusMaster tcpMaster = null;
        // 參數1:IP和端口信息 參數2:保持連接激活
        tcpMaster = modbusFactory.createTcpMaster(params, true);
        try {
            tcpMaster.init();
            System.out.println("=======初始化成功========");
        } catch (ModbusInitException e) {
            System.out.println("初始化異常");
        }
        try {
            WriteRegistersRequest request = new WriteRegistersRequest(slaveId, start, values);
            WriteRegistersResponse response = (WriteRegistersResponse) tcpMaster.send(request);
            if (response.isException()){
                System.out.println("Exception response: message=" + response.getExceptionMessage());
            }else{
                System.out.println("Success");
            }
        } catch (ModbusTransportException e) {
            e.printStackTrace();
        }
    }


    /**
     * 讀保持寄存器上的內容
     * @param ip 從站IP
     * @param port modbus端口
     * @param start 起始地址偏移量
     * @param readLenth 待讀寄存器個數
     * @return
     */
    public static ByteQueue modbusTCP(String ip, int port, int start, int readLenth) {
        ModbusFactory modbusFactory = new ModbusFactory();
        // 設備ModbusTCP的Ip與端口,如果不設定端口則默認為502
        IpParameters params = new IpParameters();
        params.setHost(ip);
        //設置端口,默認502
        if(502!=port){
            params.setPort(port);
        }
        ModbusMaster tcpMaster = null;
        tcpMaster = modbusFactory.createTcpMaster(params, true);
        try {
            tcpMaster.init();
            System.out.println("========初始化成功=======");
        } catch (ModbusInitException e) {
            return null;
        }
        ModbusRequest modbusRequest=null;
        try {
            //功能碼03   讀取保持寄存器的值
            modbusRequest = new ReadHoldingRegistersRequest(1, start, readLenth);
        } catch (ModbusTransportException e) {
            e.printStackTrace();
        }
        ModbusResponse modbusResponse=null;
        try {
            modbusResponse = tcpMaster.send(modbusRequest);
        } catch (ModbusTransportException e) {
            e.printStackTrace();
        }
        ByteQueue byteQueue= new ByteQueue(1024);
        modbusResponse.write(byteQueue);
        System.out.println("功能碼:"+modbusRequest.getFunctionCode());
        System.out.println("從站地址:"+modbusRequest.getSlaveId());
        System.out.println("收到的響應信息大小:"+byteQueue.size());
        System.out.println("收到的響應信息值:"+byteQueue);
        return byteQueue;
    }
    public static void main(String[] args) {
//        short [] list={100,20,30,9,67,0,65,0,89,90};
//        modbusWTCP("127.0.0.1",502,1,0,list);
        //讀數據
        modbusTCP("10.34.194.18",8080,0,2);
    }
}

三、代碼詳情

這段代碼是使用Java語言編寫的Modbus TCP通信的示例代碼,主要用于與Modbus TCP從設備進行通信。

ModbusFactory modbusFactory = new ModbusFactory();

這行代碼創(chuàng)建了一個ModbusFactory對象,用于創(chuàng)建ModbusMaster實例。

IpParameters params = new IpParameters();
params.setHost(ip);
if(502 != port){
    params.setPort(port);
}

在這里,創(chuàng)建了一個IpParameters對象,用于設置Modbus TCP通信的IP地址和端口號。如果端口不是默認的502端口,則設置指定的端口號。

ModbusMaster tcpMaster = null;
tcpMaster = modbusFactory.createTcpMaster(params, true);

這行代碼創(chuàng)建了一個ModbusMaster實例,使用之前設置的IpParameters對象來初始化。第二個參數設置為true表示使用了非阻塞模式。

try {
    tcpMaster.init();
    System.out.println("========初始化成功=======");
} catch (ModbusInitException e) {
    return null;
}
在這里,通過tcpMaster.init()方法初始化了ModbusMaster實例,如果初始化成功,就會打印"========初始化成功======="。

ModbusRequest modbusRequest = null;
try {
    modbusRequest = new ReadHoldingRegistersRequest(1, start, readLenth);
} catch (ModbusTransportException e) {
    e.printStackTrace();
}

這段代碼創(chuàng)建了一個Modbus請求對象,使用功能碼03(讀取保持寄存器的值),并指定了起始地址和讀取長度。

ModbusResponse modbusResponse = null;
try {
    modbusResponse = tcpMaster.send(modbusRequest);
} catch (ModbusTransportException e) {
    e.printStackTrace();
}

這段代碼發(fā)送了之前創(chuàng)建的Modbus請求對象,并嘗試接收從設備返回的響應數據。

ByteQueue byteQueue = new ByteQueue(1024);
modbusResponse.write(byteQueue);

最后,這段代碼將從設備返回的響應數據寫入到一個ByteQueue對象中,以便后續(xù)對數據進行處理。

這些代碼主要是用于建立與Modbus TCP從設備的連接,并向其發(fā)送讀取保持寄存器的請求,然后處理從設備返回的響應數據。

到此這篇關于Java通過Modbus簡單實現數采的文章就介紹到這了,更多相關Java Modbus數采內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于Restful接口調用方法總結(超詳細)

    基于Restful接口調用方法總結(超詳細)

    下面小編就為大家?guī)硪黄赗estful接口調用方法總結(超詳細)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java 如何使用Feign發(fā)送HTTP請求

    Java 如何使用Feign發(fā)送HTTP請求

    這篇文章主要介紹了Java 如何使用Feign發(fā)送HTTP請求,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-11-11
  • spring boot aop 記錄方法執(zhí)行時間代碼示例

    spring boot aop 記錄方法執(zhí)行時間代碼示例

    這篇文章主要介紹了spring boot aop 記錄方法執(zhí)行時間代碼示例,分享了相關代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 淺談spring boot使用thymeleaf版本的問題

    淺談spring boot使用thymeleaf版本的問題

    這篇文章主要介紹了spring boot使用thymeleaf版本的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 使用Java實現希爾排序算法的簡單示例

    使用Java實現希爾排序算法的簡單示例

    這篇文章主要介紹了使用Java實現希爾排序算法的簡單示例,希爾排序可以被看作是插入排序的一種更高效的改進版本,需要的朋友可以參考下
    2016-05-05
  • Mybatisplus創(chuàng)建Spring?Boot工程打包錯誤的解決方式

    Mybatisplus創(chuàng)建Spring?Boot工程打包錯誤的解決方式

    最近在實戰(zhàn)springboot遇到了一些坑,記錄一下,下面這篇文章主要給大家介紹了關于Mybatisplus創(chuàng)建Spring?Boot工程打包錯誤的解決方式,文中通過圖文介紹的介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • 關于Mybatis的mapper接口函數重載問題

    關于Mybatis的mapper接口函數重載問題

    這篇文章主要介紹了關于Mybatis的mapper接口函數重載問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • mybatis根據表逆向自動化生成代碼的實現

    mybatis根據表逆向自動化生成代碼的實現

    若采用mybatis框架,數據庫新建表,手動編寫的話,需要編寫大量的實體類、mapper文件、mapper.xml文件,都是一些重復且有規(guī)律的工作。我們可以引用插件,然后做配置,自動生成這些文件,本文就來詳細的介紹一下
    2021-08-08
  • Java高性能序列化工具Kryo詳情

    Java高性能序列化工具Kryo詳情

    這篇文章主要介紹了Java高性能序列化工具Kryo詳情,Kryo?是一個快速序列化/反序列化工具,依賴于字節(jié)碼生成機制,更多相關內容感興趣的朋友可以參考一下下面文章內容
    2022-06-06
  • mybatis中批量插入的兩種方式(高效插入)

    mybatis中批量插入的兩種方式(高效插入)

    MyBatis是一個支持普通SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。這篇文章主要介紹了mybatis中批量插入的兩種方式(高效插入)的相關資料,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-09-09

最新評論