基于嵌入式STM32的Modbus RTU协议实现(4)
时间:2026-01-15
时间:2026-01-15
·36·仪表技术2014年第11期
从站能否解析请求帧及时响出请求帧完成相应功能,
应主站请求,发出应答帧。与PC机相连之后,分别对两种功能服务进行若干测试,并根据ModbusRTU协议的内容验证所得到的结果是否正确。在主站PC机上的截图如5所示。
图4ModbusRTU从站程序流程图
outputnum=(*Rx++)<<8;
outputnum+=(*Rx++);//输出数量
if(outputnum<=0x07d0&&outputnum>=0x0001){
if(StartAddr<=0xffff&&startaddr>=0x0000)//起始地址{
send[0]=SlaveID;send[1]=0x03;send[2]=2*outputnum;for(n=1;n<=2*outputnum;n++){
send[n+2]=ox[startaddr+n-1];
re_crc=GetCRC16(send,2*outputnum+3);send[2*outputnum+4]=re_crc&0xff;send[2*outputnum+3]=re_crc>>8&0xff;}
图5主站PC机通信测试
由图5可以看出ModbusRTU主站对地址为1的
ModbusRTU从站的操作,读寄存器地址01和写寄存这里以03读寄存器功能为例来分析。器地址01,
主站PC机通过串口发送一个Modbus帧包含8个字节,工控板判断出是ModbusRTU帧,执行RTU服01代表所请求的从站地址,03代表所要执行的读务,
0001为寄存器的寄存器号(1号寄存寄存器功能,
0001为寄存器的数量(1个字节),D5CA为器),
CRC校验码。从站接到主站的请求帧后,解析帧,返01代回一个响应,反应帧如图5的接收所示,同样的,
03代表该帧执行的功能是读寄存表了该从站的地址,
02代表了字节计数,即为后面读出来数据的总字器,
7984为CRC校验码。其中0001即为数据采集节数,
系统所读取到的放在1号寄存器里的数字量。4
结论
3.3
系统通信参数
ModbusRTU是基于串口的数据传输模式,为了实
现主站和从站之间的通信,在同一网络上所有设备都必须设置相同的传输模式和串口参数。本设计中的通信参数设置如表3所示。
表3
通信参数串口波特率奇偶校验数据长度停止位
PC端COM19600bit/s
无8位1位
串口通信参数
数据采集系统端ModbusRTU9600bit/s
无8位1
位
本系统采用了STM32F103ZE嵌入式微控制器,可以使系统小型化,提高了系统性能,并且便于各种外设的扩展,可以实现多功能采集。本系统将基于STM32F103ZE微处理器为核心的数据采集系统作为485总线上,PC机作为主站成功地获从站配置在RS-取了设备参数,并利用上位机界面显示采集信号,达到了系统设计的基本要求。
通过实验测试,本文所介绍的ModbusRTU协议的主从通信模式,可以良好地应用于工业现场的设备参数的通信传输。由于系统通信可靠、传输速率快,在电力及其他工业现场具有广阔的应用前景。
(下转第54页)
3.4
系统通信调试
采用Modbus调试精灵作为RTU主站软件,用户
可以通过该人机界面选择从站地址来依次查看对各客户端的操作(读寄存器操作和写寄存器操作)。Modb-usRTU的测试目标是:RTU主站能否对RTU从站发