1、典型的从设备:可编程控制器。主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回消息作为回应,如果是以广播方式查询的,则不作任何回应。Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、错误检测域。从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和错误检测域。如果在消息接收过程中发生错误,或从设备不能执行其命令,从设备将建立错误消息并把它作为回应发送出去。在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。提供的多个
2、内部通道可允许同时发生的传输进程。在消息位,Modbus协议仍提供了主从原则,尽管网络通信方法是“对等”。如果控制器发送消息,它只是作为主设备,并期望从从设备得到回应。同样,当控制器接收到消息,它将建立一从设备回应格式并返回给发送的控制器。.主设备查询查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。.从设备回应如果从设备产生正常的回应,在回应消息中的功能代码是在查
3、询消息中的功能代码的回应。数据段包括了从设备收集的数据:像寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。每个MODBUS帧都包括地址域 功能域 数据域 错误检测域 RTU方式地址功能代码数据数量数据1.数据nCRC高字节CRC低字节地址域 功能域 数据域 错误检测域帧定界 :MODBUS RTU方式下,每两个字符之间发送或者接收的时间间隔不能超过1.5倍 字符传输时间。如果两个字符时间间隔超过了3.5倍的字符传输时间,规约就认为一帧数据已经接收,新的一帧数据传输开始。 ASCII方式A
4、SCII模式:LRC高字节LRC低字节回车换行帧定界:“:”帧起始 “CR LF” 帧结束 ASCII方式用两个ASCII字符表示一个8位数据,比如16进制的3A用字符“3”和字符“A”表示。 MODBUS TCPMODBUS TCP模式下,由于模块的地址由IP地址确定,所以不再有地址域内容,考虑到TCP网络是可靠的数据传输网络,故不再有校验数据。但是考虑到在IP网上数据到达的顺序可能与我们预期的数据不一致,故增加了一个数据序号,考虑到在MODBUS TCP协议上承载MODBUS协议,还在头部数据中增加了一个地址域。 MODBUS TCP / MODBUS 桥STC-511 可以用于MODBU
5、S TCP 到MODBUS 的桥设备使用,作为MODBUS桥设备时,需要在地址域上加上地址,另外对应的串口需要设置为MODBUS主设备。由于存在两个串口设备,地址域的最高位 MSB=1 则访问串口2, MSB=0 则访问串口1。地址域广播地址是把低7位全部置为1,在发送到MODBUS总线时,地址修改为0。 地址域为0 表示不访问MODBUS 串口设备。 支持命令我们目前所支持的功能码非常有限,主要包括:01 READ COIL STATUS02 READ INPUT STATUS03 READ HOLDING REGISTERS04 READ INPUT REGISTERS05 FORCE S
6、INGLE COIL06 PRESET SINGLE REGISTER 15 FORCE MULTIPLE COILS16 FORCE MULTIPLE REGISTERS20 READ FILE RECORD21 WRITE FILE RECORD 24 READ FIFO QUEUE 读继电器状态功能码: 01数据起始地址:0000100008数据长度:不大于08 (因为只有8个输出继电器) 读取输出继电器的状态。数据说明: 描述说明00001第1个输出继电器1吸合 0断开00002第2个输出继电器00003第3个输出继电器00004第4个输出继电器00005第5个输出继电器00006第6
7、个输出继电器00007第7个输出继电器00008第8个输出继电器00009第9个输出继电器(虚拟)00010第10个输出继电器(虚拟)00011第11个输出继电器(虚拟)00012第12个输出继电器(虚拟)00013第13个输出继电器(虚拟)00014第14个输出继电器(虚拟)00015第15个输出继电器(虚拟)00016第16个输出继电器(虚拟)MODBUS 请求功能码1 BYTE0X01起始地址2 BYTE0X0000 TO 0XFFFF读取数量1 TO 2000(0X7D0)MODBUS 响应字节计数N线圈状态n BYTEn =N or N+1N =读取数量/8 如果余数不为0 则N=N
8、+1错误 响应0X01+ 0X80错误代码0x1 or 0x2 or 0x3 or 0x4举例请求响应域名称数据(hex)01起始地址高(字节)0003起始地址低(字节)1327(h)20状态CD读取数量高(字节)35(h)28状态6B读取数量低(字节)38(h)36状态05 读开关量输入 021000011000016 不大于16 (因为只有16路输入) 读取输入开关量的状态。 输入的量改变状态需要经过0.1S滤波抗干扰后才会变化。如果用户想知道改变的时刻,需要读取系统的FIFO中的SOE事件记录或者读取文件中的SOE记录。 输入量的每次改变都会累积到该路对应的32位计数器上,对于计数,输入
9、的最高频率可以是1KHz。100001第1路开关量状态0 没有通电 1接通电源100002第2路开关量状态100003第3路开关量状态100004第4路开关量状态100005第5路开关量状态100006第6路开关量状态100007第7路开关量状态100008第8路开关量状态100009第9路开关量状态100010第10路开关量状态100011第11路开关量状态100012第12路开关量状态100013第13路开关量状态100014第14路开关量状态100015第15路开关量状态100016第16路开关量状态0X02输入状态0X02+ 0X8002C4204(h)197状态AC212(h)205状态DB16218(h)213状态35 读保持寄存器 03400001400128不大于125 (因为通信缓冲区的限制) 读取保持寄存器的值。 读取的是16位整数或者无符合整数。地
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1