微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > MODBUS协议在光伏并网系统中的应用

MODBUS协议在光伏并网系统中的应用

时间:03-31 来源:互联网 点击:
3 MODBUS协议软件实现

在并网逆变模块和人机接口模块的MODBUS通信中,Mega64作为主机,F2812作为从机。在通信中,主要使用了MODBUS协议的两个公用功能码:0x03读多个保持寄存器,0x10预置多个寄存器。从上文可看出,在MODBUS通信中,信息帧的区分和同步完全依靠相邻帧之问的时间间隔来实现。要保证主从双方通信的成功,必须对信息帧之间的间隔进行准确判断。

3.1 MODBUS协议主机程序设计

通信时,主机Mega64首先发送信息帧,如果从机响应正确则进行数据处理同时发送下一帧信息。如果从机响应错误或在0.5秒内无响应,则主机重复发送上一帧信息,直到响应正确。在程序中,利用串口接收中断和定时器中断来实现信息帧的区分和阔步。设定Mega64的定时器T1每隔1个字符时间中断一次。定时器中断服务程序如下,其中eom_flag为通信标志,num_stop为信息帧结束标志,fail_flag为通信失败标志Send_Data为字符发送函数,SendDataProc为发送信息帧预处理函数,RevDataProc为接收数据处理函数。在发送状态下.每次定时器中断时发送一个字符。保证相邻字符的时间间隔小于1.5个字符,一帧信息发送结束后,复位发送标志并等待从机响应。在接收状态下,每次串口接收中断都将置位接收标志同时将信息帧结束标志清0。一帧信息接收完时,结束标志从0开始累加,当结束标志增到4时,表明一帧信息结束.主机进行接收数据处理。由于使用了同一通信标志来判断主机是接收还是发送状态,因此只能实现半双工通信。

void TICISR(void)
{
unsigned char flag;
CLl();  //禁止中断嵌套
if(com_flag==SEND)  //如果通信标志为发送,则发送数据SendData0;
num_stop++;
fail_flag++;
if(num_stop>3)  //判断一帧信息是否结束
{
num_stop=0:
if(corn_flag==RECEIVE)  //如果主机已接收数据
{
flag=CrcCheck(revP):  //CRC校验
if(flag)  //如果接收正确,则进行处理,否则重复发送上一指令
RevDataProc();
SendDataProc();  //下一次发送数据预处理
}
}
if(fail_flag>200)    //如果在0.5秒内,从机无响应,则重复发送上一指令
SendDataProc();
SEl();
}

3.2 MODBUS协议从机程序设计

F2812作为通信方的从机,首先对接收列的信息帧进行解释。在网送应答报文给主机。其程序基本设计思想与主机类似,仍利用定时器中断和串口接收中断来实现信息帧的区分和同步。但在从机中,定时器和串口接收中断部必须允许中断嵌套。即在通信过程中.若逆变部分发生了捕获中断、功牢保护中断等,F2812应立即执行,否则会引起并网电流失真。若由此引起某一帧信息通信失败,则需要主机重复发送该信息帧。

4 结论

本文的创新点在于:将原来单核的光伏并网系统设计为双核的主从式系统,保证了实时性:同时利用MODBUS协议来实现F2812DSP与单片机的通信.并且利用MODBUS协议中保留的扩展功能码,用户可以方便的实现特定的功能。而不需要自己去制定串口通信协议。两个模块可独立研发,最后在联机进行通信调试.极大的节省了,研发时间。通过样机实验表明,此方案切实可行,整个样机运行稳定。通信数据准确,适时性好。

作者:罗力,沈玉粱,何金伟,孙韵琳      来源:《微计算机信息》(嵌入式与SOC)2009年第4-2期

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top