城市照明智能监控管理系统MOSBUS-TCP通讯规约说明一、MODBUS通讯协议简介:MODBUS协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。MODBUS是一个请求/应答协议,并且提供功能码规定的服务。MODBUS是一种应用层报文传输协议,用于在通过不同类型的总线或网络连接的设备之间的客户机/服务器通信。●数据编码:MODBUS使用最高有效字节在低地址存储的方式表示地址与数据项。即当发送多个字节时,首先发送最高有效字节。例如:寄存器大小值16位0x1234发送的第一字节为0x12然后发0x34●通讯数据格式:数据格式:事务处理标识协议标识长度单元标识功能码数据区2字节2字节2字节1字节1字节N字节事务处理标识:该标识在主机和从机都是一样的,即从机收到modbus协议包时,该标识原封不动地回传给主机,通常为0。协议标识:0表示MODBUS协议。长度:该长度是指紧随其后的数据长度。单元标识:和RTU的地址是一样的。数据字节:1个字节由8位二进制数(8Bit)组成。二、通讯信息传送过程:当通讯命令由发送设备(主机)发送至接收设备(从机)时,符合相应地址的从机接收通讯命令,并根据功能码及相关要求执行相应的任务,然后把执行结果(数据)返送给主机。返回的信息中包括事务处理标识、协议标识、长度、单元标识、功能码和数据区。●功能码:是每次通讯信息帧传送的第八个字节。MODBUS通讯规约可定义的功能码为1到127。作为主机请求发送,通过功能码告诉从机应执行什么动作。作为从机相应,从机返回的功能码与从主机发送来的功能码一样,并表明从机已响应主机并且已进行相关的操作。●数据区:数据区包括需要从机返回何种信息或执行什么动作。这些信息可以是数据(如:开关量输入/输出、模拟量输入/输出、寄存器等等)、参考地址等。例如,主机通过功能码03告诉从机返回寄存器的值(包含要读取寄存器的起始地址及读取寄存器的长度),则返回的数据包括寄存器的数据长度及数据内容。对于不同的从机,地址和数据信息都不相同(可参照通讯信息表)。三、MODBUS功能码简介:3.1功能码02(0x02):读1路或多路开关量输入状态DI例1:主机要读取地址为01,开关量DI0~15的输入状态主机发送的报文格式:主机发送字节数发送信息备注事务处理标识20000主机发送事务处理标识协议标识20000MODBUS协议长度20006紧随其后有6个字节的数据长度单元标识101发送到单元标识为01的从机功能码102读开关量输入状态起始位20000起始BIT位地址为0000读开关量个数20010读取16路开关量输入状态从机响应返回的报文格式:从机响应字节数返回信息备注事务处理标识20000从机响应事务处理标识协议标识20000MODBUS协议长度20005紧随其后有5个字节的数据长度单元标识101来自单元标识为01的从机功能码102读开关量输入状态数据长度1022个字节(16个BIT位)DI数据状态20200第二个字节的BIT0位对应开关量开始地址的状态位;第二个字节对应开关量7~0状态位;第一个字节对应开关量15~8状态位;返回数据0200表示第9路开关量输入为“1”,其余为“0”。例2:主机要读取地址为01,开关量DI1~3的输入状态主机发送的报文格式:主机发送字节数发送信息备注事务处理标识20000主机发送事务处理标识协议标识20000MODBUS协议长度20006紧随其后有6个字节的数据长度单元标识101发送到单元标识为01的从机功能码102读开关量输入状态起始位20001起始BIT位地址为0001读开关量个数20003读取3路开关量输入状态从机响应返回的报文格式:从机响应字节数返回信息备注事务处理标识20000从机响应事务处理标识协议标识20000MODBUS协议长度20004紧随其后有4个字节的数据长度单元标识101来自单元标识为01的从机功能码102读开关量输入状态数据长度1011个字节(8个BIT位)DI数据状态102数据02H的Bit2、Bit0对应开关量输入的DI3、DI1,其状态为“0”;Bit1对应开关量输入的DI2,其状态为“1”;(因命令是从开关量输入的第1位开始读取)Bit3~7为用0填充的5个剩余位。3.2功能码03(0x03):读多路寄存器例3:主机要读取地址为01,开始地址为0106H的2个从机寄存器数据主机发送的报文格式:主机发送字节数发送信息备注事务处理标识20000主机发送事务处理标识协议标识20000MODBUS协议长度20006紧随其后有6个字节的数据长度单元标识101发送到单元标识为01的从机功能码103读取寄存器起始地址20106起始地址为0106H数据长度20002读取2个寄存器(共4字节)从机响应返回的报文格式:从机响应字节数返回信息备注事务处理标识20000从机响应事务处理标识协议标识20000MODBUS协议长度20007紧随其后有7个字节的数据长度单元标识101来自单元标识为01的从机功能码103读取寄存器数据长度1042个寄存器共4字节寄存器数据122710地址为0106寄存器的内容寄存器数据221388地址为0107寄存器的内容3.3功能码05(0x05):写1路开关量输出(遥控)控制命令为:“FF00”为输出开关量为“1”,即控制继电器“合”;“0000”为输出开关量为“0”,即控制继电器“分”。例4:主机要控制地址为01,第0路开关量DO0(或继电器)“合”主机发送的报文格式:主机发送字节数发送信息备注事务处理标识20000主机发送事务处理标识协议标识20000MODBUS协议长度20006紧随其后有6个字节的数据长度单元标识101发送到单元标识为01的从机功能码105写开关量输出状态输出Bit位20000对应输出继电器BIT0位(DO0)控制命令2FF00控制该路继电器输出为“合”从机响应返回的报文格式:与主机发送的报文格式及数据内容完全相同。例5:主机要控制地址为01,第1路开关量DO1(或继电器)“分”主机发送的报文格式:主机发送字节数发送信息备注事务处理标识20000主机发送事务处理标识协议标识20000MODBUS协议长度20006紧随其后有6个字节的数据长度单元标识101发送到单元标识为01的从机功能码105写开关量输出状态输出Bit位20001对应输出继电器BIT1位(DO1)控制命令20000控制该路继电器输出为“分”从机响应返回的报文格式:与主机发送的报文格式及数据内容完全相同。3.4功能码06(0x06):写单路寄存器例6:主机要把数据1388,保存到1号从机地址为0001的寄存器中去。主机发送的报文格式:主机发送字节数发送信息备注事务处理标识20000主机发送事务处理标识协议标识20000MODBUS协议长度20006紧随其后有6个字节的数据长度单元标识101发送到单元标识为01的从机功能码106写单路寄存器起始地址20001要写入的寄存器地址写入数据21388对应的写入数据从机响应返回的报文格式:与主机发送的报文格式及数据内容完全相同。3.5功能码0F(0x0F):写多路开关量输出(遥控)例7:主机要控制地址为01,第0、2路继电器闭合,第1、3路继电器断开。主机发送的报文格式:主机发送字节数发送信息备注事务处理标识20000主机发送事务处理标识协议标识20000MODBUS协议长度20008紧随其后有8个字节的数据长度单元标识101发送到单元标识为01的从机功能码10F写多路开关量输出起始位地址20000对应输出继电器起始BIT0位(DO0)输出数量20004控制DO0~DO3共4路继电器字节计数1011字节数;字节数N=输出数量/8,若余数不等于0,则N=N+1。输出数据105Bit3~Bit0:0101为0、2路合,1、3路分;其他未使用位用0填充从机响应返回的报文格式:从机响应字节数返回信息备注事务处理标识20000从机响应事务处理标识协议标识20000MODBUS协议长度20006紧随其后有6个字节的数据长度单元标识101来自单元标识为01的从机功能码10F写多路开关量输出起始位地址20000对应输出继电器起始BIT0位(DO0)输出数量20004控制DO0~DO3共4路继电器3.6功能码10(0x10):写多路寄存器主机利用这个功能码把多个数据保存到从机表的数据寄存器中去。MODBUS通讯规约中的寄存器指的是16位(即2字节),并且高位在前。例8:主机要把0001,0014保存到地址为0002,0003的从机寄存器中去(从机地址码为01)。主机发送的报文格式:主机发送字节数发送信息备注事务处理标识20000主机发送事务处理标识协议标识20000MODBUS协议长度2000B紧随其后有11个字节的数据长度单元标识101发送到单元标识为01的从机功能码110写多路寄存器起始地址20002要写入的寄存器起始地址写寄存器数量20002要写入的寄存器个数字节计数104要写入的数据字节长度保存数据120001数据0001写入地址为0002的寄存器保存数据220014数据0014写入地址为0003的寄存器从机响应返回的报文格式:从机响应字节数返回信息备注事务处理标识20000从机响应事务处理标识协议标识20000MODBUS协议长度20006紧随其后有6个字节的数据长度单元标识101来自单元标识为01的从机功能码110写多路寄存器起始地址20002要写入的寄存器起始地址写寄存器数量20002要写入的寄存器个数