All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.iteaj.iot.modbus.server.tcp.ModbusTcpMessage Maven / Gradle / Ivy

There is a newer version: 3.1.1
Show newest version
package com.iteaj.iot.modbus.server.tcp;

import com.iteaj.iot.Message;
import io.netty.util.AttributeKey;

/**
 *  标准的modbus tcp报文协议格式
 *
 *  读请求报文格式:
 *  |             MBAP  |           MODBUS RTU
 *   00 00  00 00  00 06    01      03    00 01  00 00
 *  | 事务 |协议标识| 长度 | 从机地址 |功能码|起始地址|寄存器数量|
 *  |               header       |         body         |
 *
 *  读响应报文格式:
 *   00 00  00 00  00 06     01     83      01     00 00
 *  | 事务 |协议标识| 长度 | 从机地址 |功能码|字节个数|请求的数据|
 *  |               header       |         body         |
 *
 *  写请求报文格式:
 *  |             MBAP  |           MODBUS RTU
 *   00 00  00 00  00 06    01      06    00 00  00 00      00 00   ...
 *  | 事务 |协议标识| 长度 | 从机地址 |功能码|起始地址|寄存器数量| 正文长度 | 正文 |
 *  |               header             |              body              |
 *
 *  写响应报文格式:
 *  |             MBAP   |              MODBUS RTU
 *   00 00  00 00  00 06    01      06    00 00  00 00
 *  | 事务 |协议标识| 长度 | 从机地址 |功能码|起始地址|寄存器数量|
 *  |               header             |       body     |
 *
 * 事务处理标识:	可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文
 * 协议标识符:	00 00表示ModbusTCP协议
 * 长度:	    表示接下来的数据长度,单位为字节
 * 从机地址:	从机设备地址
 *
 * 功能码 含义	   功能码	    含义
 * 0x01	读线圈	    0x04	读输入寄存器
 * 0x05	写单个线圈	0x03	读保持寄存器
 * 0x0F	写多个线圈	0x06	写单个保持寄存器
 * 0x02	读离散量输入	0x10	写多个保持寄存器
 *
 * 详细资料:{@code https://www.cnblogs.com/ioufev/articles/10830028.html}
 * @see com.iteaj.iot.modbus.consts.ModbusCode
 */
public interface ModbusTcpMessage extends Message {

    @Override
    ModbusTcpBody getBody();

    @Override
    ModbusTcpHeader getHead();

    String getEquipCode();

    void setBody(MessageBody body);

    void setHead(MessageHead header);

    void setMessage(byte[] message);

    AttributeKey NEXT_KEY = AttributeKey.valueOf("Modbus:NextId");
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy