光伏发电站利用大量的光伏电池板完成从光能到直流电能的转换,再将直流电能使用逆变器转换为50 Hz的交流电,输送到电网中。整个光伏电站中电能控制及转换设备需求量巨大。通信管理机作为电站中连接各个设备和电站中控台的设备,通过控制平台控制下行的Rtu设备,实现遥信、遥测、遥控等信息的采集,将消息反馈回调度中心,然后控制中心管理员通过对消息的处理分析,选择将执行的命令,达到远动输出调度命令的目标 。
目前广泛采用的通信管理机实现方案主要有3种:PowerPC处理器+串口扩展芯片架构、ARM处理器架构、ARM处理器+FPGA架构。其中:(1)PowerPC处理器+串口扩展芯片架构使用带通信协处理器的PowerPC处理器作为系统的核心,使用串口通信扩展芯片为PowerPC扩展出最多16个串口 。所有数据处理和运算全部由PowerPC处理器完成,在所有串口全部使用的情况下,整个系统运行较为缓慢,数据的实时性难以保证。(2)使用单独ARM处理器作为核心实现的通信管理机结构简单,但是能够支持的串口数量受到ARM处理器本身集成的串口数量限制,一般都不超过6个 ,无法满足光伏电站中海量设备的需求。(3)ARM处理器+FPGA架构利用FPGA完成串口扩展,基于ARM处理器完成数据的处理和网络协议的实现,它本质上和基于PowerPC+串口扩展芯片的方案一致。该种方案增加了系统的复杂度,但单性能上提升并不明显。以上3种方案都存在的问题是系统有且仅有一个核心单元,一旦系统宕机,就不得不重启系统,在系统未恢复的情况下,整个系统与电站中心控制台处于完全断开的状态,无法接收中心控制台的控制指令。
本文基于Intel全新的SoC FPGA芯片,将原本采用分立的FPGA和ARM处理器实现的系统使用单一的SoC FPGA芯片实现,并在FPGA上搭建了冗余监控系统。在提高系统性能的同时,保证了系统的在线可恢复性。
1 系统建模Intel Cyclone V SoC FPGA芯片5CSEMA4U23C6芯片是一款在单一芯片上集成了高性能的双核ARM Cortex-A9 CPU和FPGA的SoC芯片,它是本系统的核心单元。
在本系统中,SoC FPGA芯片上的FPGA部分主要负责UART接口的扩展以及MODBUS协议的加速。
在电力系统中,几乎所有设备都支持标准的RS485接口,并使用MODBUS协议与其他设备进行通信。光伏电站中,因为设备多、数据量大,通信管理机的一个RS485端口在同一时刻只能和一台设备通信,因此导致数据传输速度出现瓶颈。为了解决这个问题,往往采用多个MODBUS网络端口来实现众多设备的管理[2]。
众多电力设备的数据在被通信管理机采集之后最终需要通过以太网接口与电站的中控后台进行数据交互,该数据交互主要通过IEC104协议实现,而IEC104协议的实现是通过SoC FPGA中的硬件处理系统(Hard Process System,HPS)运行成熟的Linux *** 作系统来完成的。
2 硬件电路方案设计2.1 SoC FPGA 配置电路设计
为了使系统支持远程在线升级,本系统设置SoC FPGA的FPGA部分接收HPS部分的配置数据。HPS部分可以接收串口或者网口传输的FPGA配置文件。运行时SoC FPGA的HPS部分先启动并运行Linux *** 作系统,Linux *** 作系统启动完毕之后进行FPGA部分的配置。如果需要远程更新FPGA的配置数据,只需要通过网口将新的FPGA配置内容传输到 *** 作系统所管理的磁盘上替换原来的配置文件,则系统下一次启动时就可以使用新的配置文件来配置FPGA。
2.2 SoC FPGA启动电路设计
SoC FPGA中的HPS部分运行Linux *** 作系统,HPS支持从SD卡、QSPI Flash、NAND Flash存储器中启动。NAND Flash和QSPI Flash存储器一般都采用焊接的方式安装在电路板上,而SD卡则是可拆卸并单独在PC上读写的。在工业现场,如果设备系统一旦损坏,需要重新烧录系统时,QSPI Flash和NAND Flash由于焊接在PCB板上,只能使用PC在线烧写,而SD卡则可以采用预先烧录好系统的SD卡进行更换,因此节省了现场维修的工作量。
2.3 RS485接口电路设计
通信管理机作为一个工业设备,其通信接口可能承受各种冲击,包括强共模电压、高压静电、雷击等 ,因此通信接口的防护措施至关重要。在本系统中,使用RSM3485模块完成TTL电平到RS485电平的双向转换。RSM3485模块实现标准RS485接口,具有ESD保护、短路或断路失效保护功能,内置120 kΩ上下拉电阻,双绞线输出,提供接触情况下±4 kV和空气放电情况下±8 kV的ESD放电功能,同时设计防雷电路,预防在雷击的情况下损坏通信接口 ,该接口电路图如图1所示。
2.4 以太网接口方案设计
电力系统通信管理机都要求提供主备双网口,以保证在其中一个网口出现故障时,另一个网口能够继续传输必要数据。5CSEMA4U23C6芯片默认提供了两个千兆以太网MAC,但是这两个MAC都是由HPS部分管理的,为了保证网口的可靠性,即使在ARM部分系统宕机的情况下,备用网口也能正常工作,设计时仅使用一个MAC层,并由HPS驱动,另一个网口使用NIOS II软核控制集成的以太网通信芯片W5500实现。
W5500芯片是一个全硬件实现的单芯片TCP/IP协议芯片,支持8个Socket端口,使用非常方便可靠。使用NIOS II 控制W5500完成以太网传输,即使HPS工作异常,FPGA中的NIOS II CPU还可以继续通过W5500进行数据的收发,保证备用网口的稳定运行。
3 SoC FPGA应用架构设计由于SoC FPGA作为一种创新的架构,集成了FPGA和高性能HPS,因此在设计时,可以充分利用HPS强大的数据处理能力、FPGA侧灵活的定制特性以及HPS和FPGA之间高速通信桥,将各种工作根据其特性合理分配给FPGA或者HPS,通过两者协作,以实现最高的性能。
FPGA侧主要实现UART通信接口的扩展和基于NIOS II 处理器的备用系统。HPS端主要实现大量数据处理和通信规约之间的转换。图2为SoC FPGA上的功能划分框图。
3.1 FPGA逻辑设计
FPGA侧逻辑部分实现16个支持MODBUS帧自动识别的UART通信控制单元,如图3所示。每个单元由CRC校验逻辑、串口数据收发缓存、核心控制状态机和MODBUS帧识别逻辑组成。各单元在核心控制状态机的控制下自动完成MODBUS数据帧的收发和数据校验码的生成,并经由Avalon MM Slave接口与HPS传输MODBUS接收和需要发送的数据。
图4为支持MODBUS帧自动识别的增强型UART通信控制单元接收数据时的工作状态转移图。整个状态机由空闲状态(IDLE)、接收数据状态(GET_DATA)、接收超时状态(TIMEOUT)、接收字节数据完成状态(GET_BYTE)、帧传输完成状态(FRAME_DONE)组成。
当主机发出MODBUS请求帧后,本模块进入接收数据状态(GET_DATA),每接收到一个字节,就跳转进入接收字节完成状态(GET_BYTE),当帧结束判定信号有效时,表明一帧数据接收完成,此时进入帧接收完成状态。通过比对接收到的数据帧中CRC数据字段和FPGA中CRC校验单元对该帧产生的校验数据,确定当前帧是否正确。然后通过FPGA与HPS互联桥向HPS发出中断请求,并报告当前帧的校验结果,HPS侧的Linux驱动程序则会根据校验结果完成相应的处理,如果校验正确,则读取该帧数据并递交给上层MODBUS协议层进行进一步解析处理,如果该帧错误,则丢弃该帧,并进入错误处理程序。
3.2 Linux软件设计
SoC FPGA芯片中的HPS运行Linux *** 作系统,在Linux系统上运行通信管理机的应用程序。该应用程序主要包括三大部分,分别为MODBUS协议主站、IEC104协议从站、MODBUS和IEC104协议间规约转换程序。其中,MODBUS协议主站运行开源的Libmodbus协议栈,完成MODBUS指令和数据的收发。
Libmodbus协议栈是一个免费开源的MODBUS协议栈,支持MODBUS协议主站和从站功能。由于本系统在FPGA侧使用硬件逻辑电路已经实现了MODBUS协议的部分功能,如帧结束判定、CRC校验等。因此,对Libmodbus协议栈进行了一定的删减优化,去掉了底层数据帧接收和校验的部分,仅使用其指令和数据解析部分,这也是本系统的优势,通过FPGA侧硬件实现MODBUS协议底层内容,降低了处理器的工作量,使得处理器能够轻松完成对多达16个基于MODBUS协议的端口的支持。
为了方便实现对FPGA侧的16端口个MODBUS加速的控制,在Linux侧单独开设一个进程用于16端口MODBUS加速的控制,当该任务被调度并得到执行机会后,开始依次查询当前端口的状态,然后根据得到的端口状态执行相应的处理代码。该程序流程如图5所示。
空闲态:当查询到一个端口的状态为空闲时,表明此端口已经正确地完成了一轮数据收发,在新的通信命令到来之前,该端口将处于空闲状态,即不需要发送数据,也不需要接收数据,MODBUS端口是处于空闲状态的。
接收成功:当查询到某个端口成功接收到返回的数据后,则开始进行接收数据的处理工作,完成之后,进入下一个端口的状态查询工作。
接收超时:当查询到某个端口在设定的响应时间内无响应时,则返回接收超时状态。若检测到超时状态,系统开始进行超时处理工作。接收超时处理完成后,进入下一个端口的状态查询工作。
接收错误:当查询到某个端口接收数据出错时,则进行接收错误处理工作。当接收错误处理完成后,进入下一个端口的状态查询工作。该部分任务代码框架如下所示:
for(i=0;i《=15;i++)
{
port_state=mdp_state_read(port_num);//读取指定端口状态
switch(port_state)
{
case NO_STATE:break;//无就绪端口
case RX_DONE://接收数据成功
…//接收到数据处理代码模块
break;
case RX_TIMEOUT://接收超时
…//接收超时端口处理代码模块
break;
case RX_ERROR://接收错误
…//接收错误端口处理代码模块
break;
default:
printf(“default %d\n\n”,port_num);//默认为读错
误处理,将状态寄存器设置为错误标志
FPGA_WR16((port_num《《8 | 128), 1);
}//读到第16个端口后,回到0号口读取
if(port_num == 15) port_num = 0;
else port_num ++; //端口号自加1
}
usleep(30000); //释放CPU权限
3.3 NIOS II备用系统软件设计
通常状态下NIOS II CPU处于待机状态,若NIOS II CPU在设定的时间内没有接收到状态消息,则表明HPS系统侧软件系统崩溃,NIOS II CPU再通过和HPS互联的状态指示信号确认当前是 *** 作系统宕机或应用程序异常。如果是应用程序异常,则触发Linux侧安全监视软件重启应用程序;如果是 *** 作系统异常,则启动备用网口上报当前系统故障信息到电站中心控制台,并通过硬件复位来重启HPS。图6为NIOS II 备用系统的程序流程图。
4 系统性能分析
表1为以16个RS485端口,每个端口每500 ms完成一次对总线上设备的数据读取,每次通信数据帧长度平均为64 B为例,分析1 s内本系统方案(简称SoC FPGA方案)和PowerPC+串口扩展芯片ST16C2550方案(简称PowerPC方案)在串口芯片数量、CPU的CRC运算事务、CPU处理中断次数、备用网口的独立性等几个方面的差异。
5 结论
本文设计的基于Intel SoC FPGA的光伏电力通信管理机系统充分发挥了FPGA在处理多路并行数据通信方面的优势,极大地降低了传统方案中嵌入式处理器在管理通信事务时的中断开销,并提升了单个系统中支持MODBUS协议的RS485端口总量,能有效简化光伏电站的通信网络布局布线。同时,由于FPGA的可编程特性,在不改变硬件电路的前提下,通过对FPGA重新编程的方式,实现了系统的升级,解决了光伏电力系统中多设备、大数据量的难题,增加了系统的应用范围。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)