Modbus通信协议:
- 主要分为三个子协议
- RTU
- ASCII
- TCP
Modbus RTU:——传输的是字节数组(bit[])
通信:读写
输出:可以读写
输入:只能读
-
存储区:输出线圈、输入线圈、输出寄存器、输入寄存器
- 线圈:代表一个布尔量、最小单位是一个布尔(1或者0),
- 寄存器:一个寄存器代表16个最小单位,主要用于存储数据
- 存储区代号:
- 输出线圈: 0(代号)
- 00001-09999(标准存储区地址范围)
- 000001-065536(扩展存储区地址范围)
- 输入线圈:1
- 10001-19999
- 输出寄存器:4
- 40001-49999
- 输入寄存器:3
- 30001-39999
- 输出线圈: 0(代号)
-
存储区范围:5位和6位
- 5位:标准地址-Y XXXX
- 6位:扩展地址-Y XXXXX
功能代码

验证4个常用功能码,仿真软件上面有F=01,F=02,F=03和F=04来显示
0x01:读线圈
0x02:读离散量输入
0x03:读保持寄存器
0x04:读输入寄存器
测试使用Modbus Slave(下载) 模拟

saveid:看资料"从站在modbus总线上可以有多个",仿真软件就能模拟一个从站,就是ID=1,当然可以修改成ID=2
功能码:4个功能码,对应写4个方法,,仿真软件上的F=1,或者F=2,3,4
addr:一开始看代码4个方法addr都是从0开始,是否重复?答案是:4个功能码表示4个区域或者设备,addr表示各自区域的地址编号。
- Connection设置:设置连接参数

- 地址设置: F8 ,可以通过Setup或者右击点位的


代码实现
1、依赖下载
阿里云不能直接下载
<!-- 若想引用modbus4j需要引入下列repository id:ias-snapshots id:ias-releases 两个 ,使用默认仓库下载,不要使用阿里云仓库-->
<repositories>
<repository>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>ias-snapshots</id>
<name>Infinite Automation Snapshot Repository</name>
<url>https://maven.mangoautomation.net/repository/ias-snapshot/</url>
</repository>
<repository>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>ias-releases</id>
<name>Infinite Automation Release Repository</name>
<url>https://maven.mangoautomation.net/repository/ias-release/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13-beta-3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.infiniteautomation</groupId>
<artifactId>modbus4j</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
</dependencies>
2、测试读取
- 读取04(寄存器)
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;
public class TestModbus {
public static void main(String[] args) throws UnknownHostException {
// 设置主机TCP参数
TcpParameters tcpParameters = new TcpParameters();
// 设置TCP的ip地址
InetAddress address

文章介绍了Modbus通信协议的三个子协议:RTU、ASCII和TCP,以及它们的存储区和功能码。重点展示了如何使用Java的Modbus4j库进行读写操作,包括读取寄存器和写入Coil等功能,并提供了测试代码示例。


最低0.47元/天 解锁文章
5107






