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期
在并网逆变模块和人机接口模块的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期
DSP 嵌入式 电路 逆变器 单片机 AVR 电压 变压器 电流 PWM 总线 电源模块 CMOS 电阻 三极管 二极管 相关文章:
- F1aSh存储器在TMS320C3X系统中的应用(11-11)
- 基于PIC18F系列单片机的嵌入式系统设计(11-19)
- DSP在卫星测控多波束系统中的应用(01-25)
- 基于PCI总线的双DSP系统及WDM驱动程序设计(01-26)
- 利用Virtex-5 FPGA实现更高性能的方法(03-08)
- DSP与单片机通信的多种方案设计(03-08)