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依賴
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项目)进行从机信息获取及修改的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CASS软件学习笔记
- 下一篇: java中json转对象_Java开发中