艾巴生活网

您现在的位置是:主页>科技 >内容

科技

modbus 入门篇,详细介绍 值得收藏

2024-02-04 11:32:01科技帅气的蚂蚁
很多朋友对modbus,入门篇,详细介绍,值得收藏不是很了解,艾巴小编刚好整理了这方面的知识,今天就来带大家一探究竟。下面简单分析一个MO

modbus 入门篇,详细介绍 值得收藏

很多朋友对modbus,入门篇,详细介绍,值得收藏不是很了解,艾巴小编刚好整理了这方面的知识,今天就来带大家一探究竟。

下面简单分析一个MODBUS-RTU报文,例如: 01 06 00 01 00 17 98 0401 06 00 01 00 17 98 04 从机地址功能号数据地址数据CRC校验这串数据的意思是:数据0x0017(十进制23)写1 号从机地址0x0001 的数据地址。先搞清楚以下几点。

Message 消息就是一帧数据,数据帧就是一条消息: 指的是一串完整的命令数据,就像上面的一串数据。2、CRC校验含义:比如上面的98 04就是前面的数据(01 06 00 01 00 17)通过算法(见附件2,很简单)计算出来的结果,其实就是就像计算累计和一样。

(累计和:就是010600010017的相加值,然后它的算法就是加法)。功能:在数据传输过程中,可能会出现数据错误,CRC校验检测接收到的数据是否正确。

例如主机发出01 06 00 01 00 17 98 04,那么从机收到后需要根据01 06 00 01 00 17计算CRC校验值,从机判断计算的CRC校验是否通过本身与接收到的CRC校验(98 04上位机计算)相等,如果不相等,说明数据传输有错误,无法请求到数据。3、功能号含义:modbus定义。

见附录1。 功能:表示具体操作。

MODBUS-RTU一、一条消息分析首先声明我们的目的,我们要让两个设备进行通信,使用MODBUS协议。以上简单介绍了:“消息”、“CRC校验”和“功能号”。

取出单片机中的一部分内存(RAM),实现两个设备的通信,例如:数组后面的注释表示OX[20]表示一个输出线圈,用功能码0x00x05、0x0F访问,起始地址为0(这个后续解释) IX[20]表示一个输入线圈,用功能码0x02,开头地址为1(这个后续说明),其他两个相同。注意:所谓“线圈”和“寄存器”分别是“位变量”和“16位变量”,不要混淆。

之所以叫“线圈”我想应该是针对应用设备而言,MODBUS协议是专门为485总线设备(如PLC)开发的。主机向从机写入数据。

如果MCU收到报文,就会对报文进行分析,并进行相应的处理,比如上面的报文: 01 06 00 01 00 17 98 04 从机地址Function number data address data CRC check 如果本地地址为1,那么MCU收到这串数据,计算CRC校验,判断数据是否正确。如果判断数据正确,则结果为: HoldDataReg[1]=0x0017;MODBUS 主机完成对从机数据的写操作,实现通信。

2、主机从从机读取HoldDataReg[1],报文为:01 03 00 01 00 01 D5 CA 从机地址功能号数据地址读取数据号CRC 然后MCU收到这串数据并根据数据计算CRC校验,判断数据是否正确。如果判断数据正确,则结果为:向主机返回信息,返回信息也有格式:返回内容:01 03 02 0017 F8 4A 从机地址,功能号,数据字节数,二-字节数据CRC校验,MODBUS主站完成一次从站数据的读取操作,实现通信。

二、MODBUS报文模型以上了解了MODBUS的帧报文是如何进行通信的。其实每条消息的格式基本都是一样的。

以前不知道这里的两个缩写词,现在需要明白它们指的是什么,“ADU”和“PDU” ADU:Application Data Unit PDU:Protocol Data Unit三、MODBUS数据模型四、MODBUS事务处理下面的状态图描述了服务器端MODBUS事务处理的一般处理过程。五、MODBUS请求和响应见MODBUS协议手册,中文从第10页开始,英文从第24页开始。

手册详细说明了MODBUS协议各功能号的请求和响应。 modbus协议在单片机上实现进程MODBUS任务处理功能函数中RcvBuf为串口接收缓冲区。

如果收到报文,RcvBuf[0]为从机地址,RcvBuf[0]为MODBUS功能号。根据函数号进行响应,根据函数号在各自的函数中执行具体的操作,相当于对接收到的数据进行解析。

附录一:MODBUS-RTU功能码最常用的功能码:下面的“线圈”和“寄存器”其实是“位变量”和“16位变量” 01(0x01)读线圈02(0x02)读离散输入03 (0x03) 读取保持寄存器04 (0x04) 读取输入寄存器05 (0x05) 写入单个线圈06 (0x06) 写入单个寄存器15 (0x0F) 写入多个线圈16 (0x10) 写入多个寄存器附录2:CRC 生成。

以上就是关于modbus,入门篇,详细介绍,值得收藏的知识,希望能够帮助到大家!