日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 使用Modsim32进行modbus-tcp协议模拟(从机)并使用java当做主机(Maven项目)进行从机信息获取及修改

發布時間:2023/12/10 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 使用Modsim32进行modbus-tcp协议模拟(从机)并使用java当做主机(Maven项目)进行从机信息获取及修改 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

近期在搞物聯網相關內容,接觸到了modbus協議,做個記錄方便以后使用。

本篇文章主要給大家演示如何通過java對接modbus-tcp協議,后續還會介紹如何通過Java對接modbus-rtu協議。

一、環境準備

關于modbus的協議介紹,這里就不過多贅述了,百度很多,我們直接進入正題。

1.下載modscan32,其中應該會包含modscan32(主機)及modsim32(從機),我們后續會使用modsim32模擬從機。
下載地址或自行百度搜索(網上資源還是很多的):
https://download.csdn.net/download/liboyang71/74307745

2.java環境準備,此處我們使用的是jdk1.8

二、代碼編寫

2.1 modsim準備

首先我們先使用modsim將從機數據進行準備,流程入下圖所示

1.點擊 連接設置->連接->Modbus/TCP 服務器


2.文件->新建

3.配置從機相關數據

我們將address設置位0001,deviceId設置為1,point type選擇03,這三個參數后續需要和代碼有對應關系,我們說明一下,如下圖所示,然后我們將0001設置為5721,0002設置為隨機數變動。

到這里,我們關于modsim的相關準備工作就做完了,相當于我們模擬了一個modbus-tcp協議的硬件設備,接下來我們來編寫代碼。

2.2編寫Java代碼

1.創建一個maven項目
2.添加jlibmodbus依賴

<dependency><groupId>com.intelligt.modbus</groupId><artifactId>jlibmodbus</artifactId><version>1.2.9.7</version></dependency>

3.編寫Java代碼

package com.beyondli;import com.intelligt.modbus.jlibmodbus.Modbus; 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;public class ModbusPollTCPTest {public static void main(String[] args) {try {// 設置主機TCP參數TcpParameters tcpParameters = new TcpParameters();// 設置TCP的ip地址InetAddress adress = InetAddress.getByName("127.0.0.1");// TCP參數設置ip地址// tcpParameters.setHost(InetAddress.getLocalHost());tcpParameters.setHost(adress);// TCP設置長連接tcpParameters.setKeepAlive(true);// TCP設置端口,這里設置是默認端口502tcpParameters.setPort(Modbus.TCP_PORT);// 創建一個主機ModbusMaster master = ModbusMasterFactory.createModbusMasterTCP(tcpParameters);Modbus.setAutoIncrementTransactionId(true);int slaveId = 1;//從機地址int offset = 0;//寄存器讀取開始地址int quantity = 5;//讀取的寄存器數量while (true) {try {if (!master.isConnected()) {master.connect();// 開啟連接}// 讀取對應從機的數據,readInputRegisters讀取的寫寄存器,功能碼04//int[] registerValues = master.readInputRegisters(slaveId, offset, quantity);int[] registerValues = master.readHoldingRegisters(slaveId, offset, quantity);// 控制臺輸出for (int value : registerValues) {System.out.println(" Value: " + value);}//修改3號位為7165master.writeSingleRegister(slaveId, 2, 7165);Thread.sleep(1000);}catch (Exception e) {e.printStackTrace();Thread.sleep(1000);}}} catch (Exception e) {e.printStackTrace();}}}

以上代碼我們獲取到了modbus中0001和0002的數據,并且將0003的位置數據改為了7165,對應注釋都在代碼中,整體效果入下圖所示。

以上就是java與modbus-tcp的對接方式,各位同學可根據自己的業務進行一些調整,此文章沒有去過多的講一些理論和概念,主要為了方便后續使用做一些記錄,modbus-tcp的對接方式相對簡單,后續還會編寫一篇modbus-rtu的連接文檔,會相對復雜一點。

總結

以上是生活随笔為你收集整理的Java 使用Modsim32进行modbus-tcp协议模拟(从机)并使用java当做主机(Maven项目)进行从机信息获取及修改的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。