modbus协议_笔记

python封装的modbus库有这几个:

modbus_tk :完整modbus协议栈的实现,支持modbus tcp/RTU{1.提供slave模拟器,即模拟modbus server:502),  web-based hmi master支持}

pymodbus:使用twisted实现的modbus完整协议(支持异步通讯)

MinimalModbus :只支持modbus rtu


modbus报文模型:

modbus协议_笔记_第1张图片

ADU: 应用数据单元
PDU: 协议数据单元

信息帧格式:


信息帧允许的最大长度为256Byte,N的范围是(0 , 252);

从机地址范围(1 , 247),0为广播地址;

功能码范围(1 , 225),正常响应时,从机返回原功能码,非正常响应,从机返回 原功能码|0x80;

数据域需要指明从哪个寄存器读写多少数据,数据域长度可为0表示某类信息;

校验采用16位CRC校验(2Byte);


功能码:

modbus协议_笔记_第2张图片



案例1:读保持寄存器(功能码03)

主机发送:

地址   功能码    数据起始寄存器        寄存器数量        CRC校验

 06       03          00 6B              00 01            XX XX

从机响应:

地址  响应功能码  数据长度      数据                        CRC校验

06          03      06            02 2B 00 00 00 63           XX XX


案例2:修改内部寄存器(功能码06)

地址   功能码    数据起始寄存器        修改的新值         CRC校验

 06       06      00 02                   00 01             XX XX



MODBUS-RTU功能码
 下面“线圈”“寄存器”其实分别直的就是“位变量”“16位变量”
        01 (0x01)        读线圈 
        02 (0x02)        读离散量输入
        03 (0x03)        读保持寄存器
        04(0x04)         读输入寄存器
        05 (0x05)        写单个线圈 
        06 (0x06)        写单个寄存器
        15 (0x0F)        写多个线圈 
        16 (0x10)        写多个寄存器

你可能感兴趣的:(ARM)