最后更新:2021-10-27 22:23:03 手机定位技术交流文章
在许多在线通信协议中,Modbus是一个目前相当广泛的通信协议。其串通通信协议之一是1979年为使用编程逻辑控制器(PLCs)而建立的联动通信协议之一,可以认为它已成为了各种通信协议的行业标准,其中包括许多通用通信协议,例如Blueth、Zigbus、WiFi、ModBus、PROFINET、EtherCAT、BetherCAT等。在许多在线通信协议中,Modbus是一个现在非常流行的通信协议。其1979年为使用编程逻辑控制器而开发的串通通信协议之一,可以说已成为该编程逻辑控制器(PLCs)通信协议的行业标准。
随着信息技术的迅速发展,情报时代已经进入,网络技术今后将越来越重要。 百科全书、物的互联网或互联网界定的As,是一个以因特网为基础的扩大和扩大的网络,将信息有机地汇集在一起,在任何时间、地点和地点将人、机器和货物连接起来。 技术上,材料联网的核心是商定如何将机器、物体和人员连接到互联网上,并交流信息,以便建立一个对人类、机器和物体进行智能识别、定位、跟踪、监测和管理的网络。
一般来说,有许多共同的互联网通信协议,如蓝牙、齐格比、WiFi、ModBus、PROFINET、EtherCAT、蜂窝等。 在各种在线通信协议中,Modbus是目前相当广泛的通信协议。 1979年为使用程序化逻辑控制器而建立的Modicon(PLCs)合作通信协议之一,可能被视为已成为通信行业标准。
Modbus通信协议使用请求-回应机制在主(Master)(Cliet客户)和奴隶(服务器)之间交流信息。客户-服务员理论是通信协议的模型,是设备中主要设备控制的一种。 在此必须指出, Modbus通信协议的主人相当于服务器中的客户和奴隶。 Modbus通信协议的官方网络是ww.un.org.I don't know what you're talking about,mordbus.I don't know what you're talking about, but I don't know what you're talking, but I don't know what you're talking, but I don't know what you're talking. Master-Slave现在已经提议由客户-Server取代。 协议的类型可以分为: Modbus-RTU(ASCII)、Modbus-TCP和Modbus-Plus-Plus.本文的重点是Modbus-RTU(ASCII)的通信协议理由。 标准 Modbus协议物理层界面有RS 232, RS 422, RS485和Ethernet 接口。
通讯示意图如下:

摩布斯通信协议设想包括以下一般属性:
摩德布斯议定书允许利用两种通信形式交流信息:
数据结构,无论是要求的数据还是答复的数据结构,如下:

这意味着电文(框架数据)由四个部分组成:地址( Slave Numer) +Function code+data+check。 地址提供设备的身份识别地址, 用作位置信息。 函数代码显示当前请求的内容, 如读或写。 数据代表必须传递并可以逐案选择的操作数据。 最后的检查是核实数据是否正确 。

例如,函数 03 用于读取当前登记册中的一个或多个二进制值,而函数 06 用于将二进制数据放入单一登记册。 模拟软件可用于模仿 Modbus 通信协议进程 :
此处没有给出精确的安装程序。 最初, 要求模拟由 Modbus Slave 指定的物体联网传感器装置, 该装置首先启动程序, 并指定了带有 ID-1 的装置 :

此函数代码为 03。 此外, 用于配置连接参数的图示界面如下:

Modbus Poll软件在下面用来模仿主机,以便从设备获取数据。首先,定义写作和信息。

下一步, 创建一个连接消息如下 :

应当指出,这两个COMS有不同的名称。
在成功设置来文后,将使用以下格式:

Tx代表要求发文,Rx代表作了答复。
以下是关于爪哇如何用于建立Modbus TCP通信的描述。在此情况下,爪哇框架采用了Spring Boot, 从Modbus 4j 图书馆开始。 Maven依靠图书馆的pom.xml, 具体如下:
<dependency>
<groupId>com.infiniteautomation</groupId>
<artifactId>modbus4j</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.rxtx</groupId>
<artifactId>rxtx</artifactId>
<version>2.1.7</version>
</dependency>
其中一个Modbus4j图书馆可能无法进入马文的通常下载,但可手工下载,并添加到项目图书馆,如下图所示:

注:必须安装第一个实际链接;否则在爪哇将没有 rxtxSerio。我为图书馆道歉。 Path 错误 。
照片来自http://fized.com.com/oss/rxtx-for-java, 下载相关操作系统的图书馆文件,
For a JDK installation:
Copy RXTXcomm.jar ---> <JAVA_HOME>jrelibext
Copy rxtxSerial.dll ---> <JAVA_HOME>jrebin
Copy rxtxParallel.dll ---> <JAVA_HOME>jrebin
此外,此处还要求提供序列支持,这些支持可由虚拟序列化软件提供。

这里展示了爪哇核心代码的样本。
public static SerialPort open(String portName, Integer baudRate, Integer dataBits,
Integer stopBits, Integer parity) {
SerialPort result = null;
try {
CommPortIdentifier identifier = CommPortIdentifier.getPortIdentifier(portName);
// 打开端口
CommPort commPort = identifier.open(portName, 2000);
// 中战略主义裁决
if (commPort instanceof SerialPort) {
result = (SerialPort) commPort;
// 配置串口参数
result.setSerialPortParams(baudRate, dataBits, stopBits, parity);
我不确定你在说什么.info (“成功的连锁港口开放”, 端口Name;
}else{
我不知道你在谈论什么.info ("不是连锁港口"), 端口Name;
}
} catch (Exception e) {
我不知道你在说什么。 错误("打开线索的错误", 端口Name, e) ;
}
return result;
}
最初必须启动Modbus RRU Slave软件。 以下是主要代码片段:
public static void createRtuSlave(){
序号为COM3,港口号为9600。
SerialPortWrapperImpl wrapper = new SerialPortWrapperImpl("COM3", 9600,
SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE, 0, 0);
ModbusFactory modbusFactory = new ModbusFactory();
RTU奴隶应该被创造出来。
final ModbusSlaveSet slave = modbusFactory.createRtuSlave(wrapper);
/ 在登记册中,您可以设定连接状态、离散输入状态、登记册的维护以及登记册的输入。
车站设备的身份证是1号
BasicProcessImage processImage = new BasicProcessImage(1);
processImage.setInvalidAddressValue(Short.MIN_VALUE);
slave.addProcessImage(processImage);
/ 安装倾听器, 监控奴隶圈状态, 并保持注册写作进程 。
processImage.addListener(new MyProcessImageListener());
//设置数据
setCoil(processImage);
setInput(processImage);
setHoldingRegister(processImage);
setInputRegister(processImage);
// 开启线程启动
new Thread(() -> {
try {
slave.start();
}
catch (ModbusInitException e) {
e.printStackTrace();
}
}).start();
}
Modbus RRU Master方案的核心代码片断如下:
private static void createRtuMaster() throws Exception{
序号为COM4,港口号为9600。
SerialPortWrapperImpl wrapper = new SerialPortWrapperImpl("COM4", 9600,
SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE, 0, 0);
ModbusFactory modbusFactory = new ModbusFactory();
//RTU Master
ModbusMaster master = modbusFactory.createRtuMaster(wrapper);
master.init();
车站设备的身份证是1号
int slaveId = 1;
/读以保持记录
readHoldingRegisters(master, slaveId, 0, 3);
/ 设置 0 的 / 设置 / 到 0
writeRegister(master, slaveId, 0, 0);
再读一遍注册簿再保留它。
readHoldingRegisters(master, slaveId, 0, 3);
}
启动后的产出如下:
//Slave
INFO Cn. 我不知道你在说什么,我不确定你在说什么, 演示,我不确定你在说什么, modbus4j.
保持登记地址为0,旧值为8,新值为0。
//Master //////////////////////////////////////////////////////////////////////
[主 INFO cn. 我不知道你在说什么, uu. 我不知道你在说什么, demo. 我不知道你在说什么, mordbus4j.
[8、56、0] 阅读以保持登记
写保持寄存器成功
将登记内容保留为 = [0, 56, 0]
开放源码计划:https://github.com。
这种材料是独一无二的,未经许可不得复制。
本文由 在线网速测试 整理编辑,转载请注明出处。