modbus功能码和地址关系(MODbus功能码)

      最后更新:2022-11-01 22:15:29 手机定位技术交流文章

      Modbus 0x0001 1x0001 3x0001 4x0001 他们之间的关系?

      0x、1x、 3x、4x其实各是一片数据区,是Modbus协议规定的地址范围,即: 线圈(DO)地址:00000~09999触点(DI)地址:10000~19999输入寄存器(AI)地址:30000~39999输出寄存器(AO)地址:40000~49999由于上述各类地址是唯一对应的,因此有些资料就以其第一个数字区分各类地址,即:0x代表线圈(DO)类地址,1x代表触点(DI)类地址、 3x代表输入寄存器(AI)类地址、4x代表输出寄存器(AO)类地址。同理,各类地址的数据区的Modbus功能码也是规定好的,不能乱用。如要操作0x地址数据区,就只能用规定的功能码01/05,而不能用其他的功能码。所以,从各类地址的前缀就能知道它的数据区及功能码,反之亦然。上述这些地址称为Modbus数据区地址,它是5位十进制地址。但在实际编程中,由于前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。 在单片机中实现时,需要定义4个数据区对应上述各类地址(长度可以缩短,视单片机RAM大小)。处理Modbus事务时,根据数据祯中的功能吗,再对对应的数据区进行操作(置位、复位、读数或写入数据)。具体过程看Modbus事务流程图。
      Modbus 0x0001 1x0001 3x0001 4x0001 他们之间的关系?

      Modbus功能码

      Modbus寄存器分为四种,如表1.1所示:表1.1寄存器分类Modbus中常用的功能码有8个,可以分为位操作和字操作两类,如表2.1所示:表2.1常用功能码功能码01H读取Modbus从机中线圈寄存器的状态,可以是单个寄存器,或者多个连续的寄存器。假设从机地址为01H,读取的线圈寄存器的起始地址为0017H,读取38个寄存器,指令如表3.1所示:表3.1读线圈寄存器指令:各线圈的状态与数据内容的每个bit对应,1代表ON,0代表OFF。如果查询的线圈数量不是8的倍数,则在最后一个字节的高位补0。表3.2.1读线圈状态的返回结果其中,第一个字节CDH对应线圈0017H到001E的状态,转为二进制是11001101,其中bit0对应0017H,bit7对应001E,如表3.2.2所示:表3.2.2线圈0017H到001EH的状态最后一个字节为1BH,对应线圈0037H到003CH的状态,转为二进制是00011011,其中bit0对应0037H,bit5对应003CH,其余两位用0填充,如表3.2.3所示:表3.2.3线圈0037H到003CH的状态功能码02H读取Modbus从机中离散输入寄存器的状态,可以是单个寄存器,或者多个连续的寄存器。假设从机地址为01H,读取的离散输入寄存器的起始地址为00C4H,读取22个寄存器,指令如表4.1所示:表4.1读离散输入寄存器指令:各个离散输入寄存器的状态与数据内容的每个bit对应,1代表ON,0代表OFF。如果查询的线圈数量不是8的倍数,则在最后一个字节的高位补0。表4.2.1读离散输入寄存器的返回结果其中,第一个字节ACH对应00C4H到00CBH寄存器的状态,转为二进制是10101100,其中bit0对应00C4H,bit7对应00CB,如表4.2.2所示:表4.2.2寄存器00C4H到00CBH的状态最后一个字节为35H,对应寄存器00D4H到00D9H的状态,转为二进制是00110101,其中bit0对应00D4H,bit5对应00D9H,其余两位用0填充,如表4.2.3所示:表4.2.3寄存器00D4H到00D9H的状态功能码03H读取Modbus从机中保持寄存器的数据,可以是单个寄存器,或者多个连续的寄存器。假设从机地址为01H,读取的保持寄存器的起始地址为006BH,读取3个寄存器,指令如表5.1所示:表5.1读保持寄存器指令:每个保持寄存器的长度为2个字节。保持寄存器之间,低地址寄存器先传输,高地址寄存器后传输。单个保持寄存器,高字节数据先传输,低字节数据后传输。表5.2.1读保持寄存器的返回结果功能码04H读取Modbus从机中输入寄存器的数据,可以是单个寄存器,或者多个连续的寄存器。假设从机地址为01H,读取的保持寄存器的起始地址为0008H,读取2个寄存器,指令如表6.1所示:表6.1读输入寄存器指令:每个输入寄存器的长度为2个字节。输入寄存器之间,低地址寄存器先传输,高地址寄存器后传输。单个输入寄存器,高字节数据先传输,低字节数据后传输。表6.2.1读输入寄存器的返回结果功能码05H写单个线圈寄存器,FF00H请求线圈处于ON状态,0000H请求线圈处于OFF状态。假设从机地址为01H,线圈寄存器的地址为00ACH,使其处于ON状态的指令如表7.1所示:表7.1写单个线圈指令:如果写入成功,返回发送的指令,即010500ACFF004C1B。功能码06H写单个保持寄存器。假设从机地址为01H,保持寄存器的地址为0001H,数据位0003H,指令如表8.1所示:表8.1写单个保持寄存器指令:如果写入成功,返回发送的指令,即010600010003980B。功能码0FH写多个线圈寄存器。如果对应的数据位为1,表示线圈状态为ON;如果对应的数据位为0,表示线圈状态为OFF。线圈寄存器之间,低地址寄存器先传输,高地址寄存器后传输。单个线圈寄存器,高字节数据先传输,低字节数据后传输。如果写入的线圈寄存器的个数不是8的倍数,则在最后一个字节的高位补0。假设从机地址为01H,线圈寄存器的起始地址为0013H,写入10个寄存器,指令如表9.1.1所示:表9.1.1写入多个线圈寄存器指令其中,CDH对应线圈0013H到001AH的内容,01H对应线圈001B到001CH的内容,未使用位用0填充。此时,线圈寄存器的内容如表9.1.2所示:表9.1.2线圈寄存器0013H到001CH的内容如果写入成功,返回写入的寄存器数量,如表9.2所示:表9.2写多个线圈寄存器的返回结果功能码10H写多个保持寄存器,其中每个保持寄存器的长度为两个字节。假设从机地址为01H,保持寄存器的起始地址为0001H,写入2个寄存器,指令如表10.1所示:表10.1写入多个保持寄存器指令如果写入成功,返回写入的寄存器数量,如表10.2所示:表10.2写多个保持寄存器的返回结果
      Modbus功能码

      ModBus常用功能码和PLC地址位对应关系

      厂商给的点位表里面有个MODBUS数据地址为10001和40001两种: 地址位00001用01功能码读取地址位10001用02功能码读取地址位40001用03功能码读取 地址位30001用04功能码读取
      ModBus常用功能码和PLC地址位对应关系

      西门子s7-200plc中,modbus通信中的功能码有什么用?就是在程序中有什么具体体现?跟从站地址没啥关系吧?

      在S7-200中,若使用了MODBUS主站库,则调用MBUS_MSG指令实现对从站的访问,MODBUS通信中的功能码由指令自行转换。如果访问4xxxxx保持寄存器,有三种类型的功能码03H(读单个或多个寄存器)、06H(写单个寄存器)、10H(写多个寄存器)。下面是一个简单的MBUS_MSG指令的应用示例:各参数意义如下:1.EN使能:同一时刻只能有一个读写功能(即MBUS_MSG)使能,注意:建议每一个读写功能(即MBUS_MSG)都用上一个MBUS_MSG指令的Done完成位来激活,以保证所有读写指令循环进行(见例程)。2.First读写请求位:每一个新的读写请求必须使用脉冲触发3.Slave从站地址:可选择的范围1-2474.RW从站地址:0=读,1=写注意:●开关量输出和保持寄存器支持读和写功能●开关量输入和模拟量输入只支持读功能5.Addr读写从站的选择读写的数据类型数据地址:00001至0xxxx-开关量输出10001至1xxxx-开关量输入30001至3xxxx-模拟量输入40001至4xxxx-保持寄存器6.Count数据个数通讯的数据个数(位或字的个数)注意:Modbus主站可读/写的最大数据量为120个字(是指每一个MBUS_MSG指令)7.DataPtr数据指针:●如果是读指令,读回的数据放到这个数据区中●如果是写指令,要写出的数据放到这个数据区中8.Done完成位读写功能完成位9.Error错误代码:只有在Done位为1时,错误代码才有效0=无错误1=响应校验错误2=未用3=接收超时(从站无响应)4=请求参数错误(slaveaddress,Modbusaddress,count,RW)5=Modbus/自由口未使能6=Modbus正在忙于其它请求7=响应错误(响应不是请求的操作)8=响应CRC校验和错误101=从站不支持请求的功能102=从站不支持数据地址103=从站不支持此种数据类型104=从站设备故障105=从站接受了信息,但是响应被延迟106=从站忙,拒绝了该信息107=从站拒绝了信息108=从站存储器奇偶错误常见的错误:●如果多个MBUS_MSG指令同时使能会造成6号错误●从站delay参数设的时间过长会造成主站3号错误●从站掉电或不运行,网络故障都会造成主站3号错误
      西门子s7-200plc中,modbus通信中的功能码有什么用?就是在程序中有什么具体体现?跟从站地址没啥关系吧?

      请教关于MODBUS RTU通讯的功能码和地址的问题

      功能码是定义发送的报文做什么用的,地址是从站的站号,相当于门牌号,定义报文由哪个从站接受并响应。详细的解释,应该阅读MODBUS协议的相关资料,这个必须理解透彻。
      请教关于MODBUS RTU通讯的功能码和地址的问题

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/41763.html

          热门文章

          文章分类