Modbus简介2020/1/202主要内容•Modbus发展概述•Mobus串口–RTU–ACSII•Mobus以太网•模拟Modbus工具简介Modbus发展概述•Modbus是由Modicon公司(现为Schneider电气的一个品牌)在1978年提出的•Modbus至今仍然活跃在工业、建筑、基础设施等领域中•1998年Schneider电气又推出了新一代基于TCP/IP以太网的ModbusTCP•2004年Modbus作为我国国家标准Modbus通信栈TCP基于TCP的ModbusModbus应用层IP以太网物理层EthernetII/802.3EIA/TIA-232或EIA/TIA-485主站/从站其它其它串口以太网串口:RS232/RS485/RS422的区别•串口通讯线通常用屏蔽双绞线STP(芯数与具体接线要求相关)。•按电气特性可分为RS-232、RS-422与RS-485。•按照数据流的方向可分成三种基本的传送方式:全双工、半双工、和单工。•它们都是串行数据接口标准,用户可以建立自己的高层通信协议利用串口通讯实现PC机与设备之间的通讯。标准波特率系列为110、300、600、1200、4800、9600和19200bps等。RS-232、RS-422与RS-485通讯特性对照表特性类型主机数接设备(从站)最大数通讯最大距离(米)最大传输速(bps)终端电阻位置终端电阻阻值(Ω)接线方式RS-232112020k----与DB头针(孔)数有关RS-4221101219(在100kbps速率以下)10M(在100米以下)最远端(在300米以下不接)100四线、地线RS-4851321219(在100kbps速率以下)10M(在100米以下)两端(在300米以下不接)120二线/四线、地线串口基本接线方法串行链路上的Modbus帧结构•Modbus协议是主从站通讯协议;•网络上的每个从站必须有唯一的地址(范围从1到247);•从站地址用于寻址从站设备,由主站发起;•地址0用于广播模式,不需要响应;传输模式:•RTU•ASCIIModbus串行传输模式–RTU模式传输特性特性RTU编码系统十六进制每个字符的位数起始位1位数据位8位奇偶校验位0或1位停止位1或2位校验和CRC(循环冗余校验)Modbus串行传输模式–RTU模式功能码名称作用01读取开出状态(ReadCoilStatus)取得一组开关量输出的当前状态02读取开入状态(ReadInputStatus)取得一组开关量输入的当前状态03读取模出状态(ReadHoldingRegisters)取得一组模拟量输出的当前状态04读取模入状态(ReadInputRegisters)取得一组模拟量输入的当前状态05强制单路开出(ForceSingleCoil)强制设定某个开关量输出的值06强制单路模出(PresetSingleRegister)强制设定某个模拟量输出的值15强制多路开出(ForceMultipleCoils)强制设定从站几个开关量输出的值16强制多路模出(PresetMultipleRegs)强制设定从站几个模拟量输出的值Modbus串行传输模式–RTU模式从站地址功能码起始地址高位起始地址低位数据线圈数高位数据线圈数低位校验和CRC11H01H00H13H00H25H0EH84H从站地址功能码字节计数数据校验和CRC11H01H05HCDH6BHB2H0EH1BH45HE6H应答RTU帧(Response)询问RTU帧(Query)读取开出状态(功能码01)本功能可使主站获得被编址从站的开关量输出的通断状态。起始地址是指从哪一路开关量开始(编号从0开始),数据线圈数是指读取几路。应答帧中的数据是按上述要求读取的开关量数据(每路一位,每8位组成一个字节,最后一个字节的不足部分补0).例:读取17号从站开关量输出020-056的状态,读出的37位组成5个字节,最后一个字节的高三位补0.Modbus串行传输模式–RTU模式从站地址功能码起始地址高位起始地址低位数据线圈数高位数据线圈数低位校验和CRC11H02H00HC4H00H16HBAHA9H从站地址功能码字节计数数据校验和CRC11H02H03HACHDBH35H20H18H应答RTU帧(Response)询问RTU帧(Query)读取开入状态(功能码02)本功能可使主站获得被编址从站的开关量输入的通断状态。起始地址是指从哪一路开关量开始(编号从0开始),数据线圈数是指读取几路。应答帧中的数据是按上述要求读取的开关量数据(每路一位,每8位组成一个字节,最后一个字节的不足部分补0).例:读取17号从站开关量输入0197-0218的状态,读出的22位组成3个字节,最后一个字节的高2位补0。Modbus串行传输模式–RTU模式从站地址功能码起始地址高位起始地址低位寄存器数高位寄存器数低位校验和CRC11H03H00H6BH00H03H76H87H从站地址功能码字节计数数据校验和CRC11H03H06H02H2BH00H00H00H64H20H18H应答RTU帧(Response)询问RTU帧(Query)读取模出状态(功能码03)本功能可使主站获得被编址从站的模拟量输出的通断状态。起始地址是指从哪一路模拟量开始(编号从0开始),寄存器数是指读取几路模拟量(每路模拟量2个字节,高位在前,低位在后)。应答帧中的数据是按上述要求读取的模拟量数据。例:读取17号从站模出点0108-0110的状态。应答数据高字节在前。108是555,109是0,110是100。Modbus串行传输模式–RTU模式从站地址功能码起始地址高位起始地址低位寄存器数高位寄存器数低位校验和CRC11H04H00H6BH00H03HC3H47H从站地址功能码字节计数数据校验和CRC11H04H06H02H2BH00H00H00H64H5CH89H应答RTU帧(Response)询问RTU帧(Query)读取模入状态(功能码04)本功能可使主站获得被编址从站的模拟量输入值。起始地址是指从哪一路模拟量开始(编号从0开始),寄存器数是指读取几路模拟量(每路模拟量2个字节,高位在前,低位在后)。应答帧中的数据是按上述要求读取的模拟量数据。例:读取17号节点的模入点0108-0110的状态。应答数据高字节在前。108是555,109是0,110是100。Modbus串行传输模式–RTU模式从站地址功能码起始地址高位起始地址低位数据开关原状态校验和CRC11H05H00HACHFFH00H4EH8BH应答RTU帧(Response)询问RTU帧(Query)强制单路开出(功能码05)本功能可使主站强行设定被编址从站某路开关量输出的通断状态。从站内部的任何一路开关量均能被强制。起始地址是指设定开关量的哪一路(编号从0开始),数据用于设定开或关:FF为开,0为关,其他值为非法值。正常应答是将报文原文发回。例:强制17号从站开出点173为ON。从站地址功能码起始地址高位起始地址低位数据开关原状态校验和CRC11H05H00HACHFFH00H4EH8BHModbus串行传输模式–RTU模式从站地址功能码起始地址高位起始地址低位数据高位数据低位校验和CRC11H06H00H87H03H9EHBAH2BH应答RTU帧(Response)询问RTU帧(Query)强制单路模出(功能码06)本功能可使主站强行设定被编址从站某路模拟量输出的值。从站内部的任何一路模拟量均能被强制。起始地址是指设定哪一路模拟量(编号从0开始),数据用于设定该模拟量的值(高位在前,低位在后)。正常应答是将报文原文发回。例:强制17号从站模出点136为039EH。从站地址功能码起始地址高位起始地址低位数据开关原状态校验和CRC11H06H00H87H03H9EHBAH2BHModbus串行传输模式–RTU模式从站地址功能码起始地址高位起始地址低位寄存器数高位寄存器数低位字节计数数据校验和CRC11H0FH00H13H00H0AH02HCDH00H7EHCBH应答RTU帧(Response)询问RTU帧(Query)强制多路开出(功能码15)本功能可使主站强行设定被编址从站一组连续开关量输出的通断状态。从站内部的任何开出量均能被强制。起始地址是从哪一路开关量开始(编号从0开始),寄存器数是指设定几路。字节计数是指随后的线圈状态(开关量设定值)的字节数。线圈状态是设定的开出值,每一路开出占用一位(1为开,0为关),每八位组成一个字节,最后一个字节的不足部分补0。正常应答内容是回送从站地址、功能码、起始地址和强置的开关量数。从站地址功能码起始地址高位起始地址低位寄存器数高位寄存器数低位校验和CRC11H0FH00H13H03H0AH26H99H例:强置17号从站开关量输出0020-0029的状态,设定值CD(11001101)和00(00000000)表示开关量输出的第27、26、23、22和20将被强置为开状态。Modbus串行传输模式–RTU模式从站地址功能码起始地址高位起始地址低位寄存器数高位寄存器数低位字节计数数据校验和CRC11H10H00H87H00H02H04H00H0AH01H02H7EHCBH应答RTU帧(Response)询问RTU帧(Query)强制多路模出(功能码16)本功能可使主站强行设定被编址从站一组连续模拟量输出的值。从站内部的任何模出量均能被强制。起始地址是从哪一路模拟量开始(编号从0开始),寄存器数是指设定几路。字节计数是指随后的数据(模拟量设定值)的字节数。数据是设定的模出值,每一路模出两个字节(高位在前,低位在后)。正常应答内容是回送从站地址、功能码、起始地址和强置的模拟量数。从站地址功能码起始地址高位起始地址低位寄存器数高位寄存器数低位校验和CRC11H10H00H87H00H02HF3H71H例:强置17号从站模拟量输出0136-0137的状态,设定值0136为000A,设定0137为0102。Modbus串行传输模式–ASCII模式•报文必须以“:”开始;•报文必须以“LF-CR”结束;•数据用十六进制ASCII码值表示;•使用LRC进行差错校验;起始从站地址功能码数据校验和LRC结束1个字节2个字节2个字节0至2*252个字节2个字节2个字节CRLFTCP基于开放TCP/IP的Modbus协议•Modbus协议是一个开发性协议–IANA(InternetAssignedNumbersAuthority:互联网编号分配管理机构)已为Modbus协议指配TCP/UDP知名端口502;•Modbus协议是一个标准协议–IETF(InternetEngineeringTaskForce:互联网工程任务组)组织提议将Modbus协议作为因特网标准;–Modbus协议是自动化领域中广泛使用“事实”标准;ModbusTCP数据帧ModbusTCP数据帧包含了报文头,功能码和数据三部分。MBAP报文头功能码数据ModbusTCP/IPPDUPDUMBAP报文头(MBAP:ModbusApplicationProtocolModbus应用协议)MBAP报文头(MBAP:ModbusApplicationProtocolModbus应用协议),分4个域,共7个字节。域长度描述客户机服务器事务处理标识符2字节Modbus请求/响应事务处理的识别客户机启动服务器从接收的请求中重新复制协议标识符2字节0=Modbus协议客户机启动服务器从接收的请求中重新复制长度2字节随后字节的数量客户机启动(请求)服务器(响应)启动单元标识符1字节串行链路或其它总线上连接的远程从站的识别客户机启动服务器从接收的请求中重新复制Modbus模拟主站(ModScan32)Modbus模拟子站(ModSim32)2020/1/2025结束,谢谢。