最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 實體類或對象序列化時,忽略為空屬性的操作

    實體類或對象序列化時,忽略為空屬性的操作

    這篇文章主要介紹了實體類或對象序列化時,忽略為空屬性的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot使用flyway初始化數據庫

    SpringBoot使用flyway初始化數據庫

    這篇文章主要介紹了SpringBoot如何使用flyway初始化數據庫,幫助大家更好的理解和學習使用SpringBoot框架,感興趣的朋友可以了解下
    2021-03-03
  • Java字節(jié)碼操縱框架ASM圖文實例詳解

    Java字節(jié)碼操縱框架ASM圖文實例詳解

    這篇文章主要為大家介紹了Java字節(jié)碼操縱框架ASM圖文實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • SpringBoot文件上傳的幾種常見方式(單文件上傳、多文件上傳)

    SpringBoot文件上傳的幾種常見方式(單文件上傳、多文件上傳)

    本文詳解SpringBoot文件上傳實現,涵蓋單文件、多文件上傳及大小類型限制方法,強調隱私保護與非法文件防范的社會責任,適配不同場景需求,提供技術解決方案與合規(guī)實踐指導,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • 深扒Java中POJO、VO、DO、DTO、PO、BO、AO、DAO的概念和區(qū)別以及如何應用

    深扒Java中POJO、VO、DO、DTO、PO、BO、AO、DAO的概念和區(qū)別以及如何應用

    po vo bo dto dao 和 pojo 是軟件開發(fā)中經常使用的一些概念,用于設計和實現對象模型,下面將分別解釋這些概念的含義及其在開發(fā)中的應用,這篇文章主要給大家介紹了關于Java中POJO、VO、DO、DTO、PO、BO、AO、DAO的概念和區(qū)別以及如何應用的相關資料,需要的朋友可以參考下
    2024-08-08
  • SpringBoot實現優(yōu)雅停機的流程步驟

    SpringBoot實現優(yōu)雅停機的流程步驟

    優(yōu)雅停機(Graceful Shutdown) 是指在服務器需要關閉或重啟時,能夠先處理完當前正在進行的請求,然后再停止服務的操作,本文給大家介紹了SpringBoot實現優(yōu)雅停機的流程步驟,需要的朋友可以參考下
    2024-03-03
  • SpringBoot項目速度提升之延遲初始化(Lazy Initialization)詳解

    SpringBoot項目速度提升之延遲初始化(Lazy Initialization)詳解

    延遲初始化(Lazy?Initialization)是一種在需要時才創(chuàng)建或加載對象的策略,以減少啟動時間和資源消耗,本文就來講講延遲初始化的具體使用吧
    2023-05-05
  • SpringBoot響應Json數據亂碼通過配置的解決

    SpringBoot響應Json數據亂碼通過配置的解決

    這篇文章主要介紹了SpringBoot響應Json數據亂碼通過配置的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java本地緩存工具之LoadingCache的使用詳解

    Java本地緩存工具之LoadingCache的使用詳解

    緩存,在我們日常開發(fā)中是必不可少的一種解決性能問題的方法。簡單的說,cache?就是為了提升系統性能而開辟的一塊內存空間。本文將為大家介紹一個Java本地緩存的工具——LoadingCache,感興趣的可以了解一下
    2021-12-12
  • Java的break語句最佳實踐

    Java的break語句最佳實踐

    break 是 Java 等主流語言中的控制流語句,用于立即終止當前執(zhí)行塊并跳轉到后續(xù)代碼,本文給大家介紹Java的break語句最佳實踐記錄,感興趣的朋友跟隨小編一起看看吧
    2025-09-09

最新評論

桑日县| 共和县| 荥阳市| 得荣县| 桑日县| 淮北市| 和田县| 平和县| 和龙市| 铁岭市| 巴塘县| 荆门市| 高台县| 奉化市| 普洱| 武隆县| 郧西县| 贵州省| 平定县| 巴楚县| 汤阴县| 汽车| 南城县| 漳浦县| 利辛县| 获嘉县| 定南县| 甘孜县| 霍山县| 德化县| 吉林市| 明星| 库车县| 灵武市| 泽州县| 玉田县| 阳春市| 沛县| 余庆县| 兴化市| 云梦县|