一,协议简介
我的博客:写写感悟
03,功能码,一直发送数据
Tx: 01 03 00 00 00 0A C5 CD
Rx:01 03 14 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 9E 9B
发送
设备地址 功能码 寄存器起始地址H 寄存器起始地址L 寄存器数量H 寄存器数量L
04 03 00 06 00 02 24 5f
接收
设备地址 功能码 数据长度 寄存器数据 校验码
04 03 04 00 07 00 09 DE F4
06,功能码,返回发送的内容
Tx:000652- 01 06 00 00 00 06 09 C8
16功能码,16进制0X10
Tx: 01 10 00 00 00 01 02 00 00 A6 50
Rx: 01 10 00 00 00 01 01 C9
二,程序流程
1,硬件就是串口,但是串口传输距离有限制,所以加上了485芯片.
2,软件层就是规定一帧数据的格式为一种特定的意义,本质就是串口收到的数据进行一种解析.
3,实现过程,根据波特率算出一个byte的时间,然后串口一个字节是10byte,如果4个字节的时间没有收到数据,就默认为一帧数据接收完成,需要通过一个定时器来判断接收完成没有.
三,程序
1,串口3接收到数据并保存到数组里,而且还告诉定时器开始计时了.
2,当定时器开始计数,在间隔8ms没有收到数据的时候,停止计数,并把收到一帧的标志告诉modbus处理函数.
3,当modbus没有收到一帧完成标志的时候就继续等待接收
4,如果收到一帧接收标志的时候先处理数据最后在把标志清掉
5,收到不同的功能码,需要不同的处理
3号功能码
6号功能码
7,modbus初始化函数
8,寄存器数组
9,在modbus.h文件里面定义一个结构体这样可以方便在别的文件里面调用.并初始化函数
10,CRC校验码计算