最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

ADI DSP继电保护开发平台软件设计手册

来源:动视网 责编:小OO 时间:2025-09-26 05:32:55
文档

ADI DSP继电保护开发平台软件设计手册

ADIDSP继电保护开发平台软件设计手册1概述(3)2硬件单元测试程序(3)3UCOSII操作系统与附加模块(4)3.1铁电存储器驱动(4)3.2网卡驱动(4)3.3串口驱动(4)3.4Nandflash与fat文件系统模块(5)3.5485总线驱动(7)3.6IO扩展与键盘模块(7)3.7AD采集模块(8)3.8LCD驱动(8)3.9FPGA多路开关控制驱动(9)3.10Norflash驱动(10)系统结构(11)4PLM4.1系统流程(11)4.2FPGA模块(13)4.2.1FPGA启动
推荐度:
导读ADIDSP继电保护开发平台软件设计手册1概述(3)2硬件单元测试程序(3)3UCOSII操作系统与附加模块(4)3.1铁电存储器驱动(4)3.2网卡驱动(4)3.3串口驱动(4)3.4Nandflash与fat文件系统模块(5)3.5485总线驱动(7)3.6IO扩展与键盘模块(7)3.7AD采集模块(8)3.8LCD驱动(8)3.9FPGA多路开关控制驱动(9)3.10Norflash驱动(10)系统结构(11)4PLM4.1系统流程(11)4.2FPGA模块(13)4.2.1FPGA启动
ADI DSP继电保护开发平台

软件设计手册1 概述 (3)

2 硬件单元测试程序 (3)

3 UCOSII操作系统与附加模块 (4)

3.1 铁电存储器驱动 (4)

3.2 网卡驱动 (4)

3.3 串口驱动 (4)

3.4 Nand flash 与fat文件系统模块 (5)

3.5 485总线驱动 (7)

3.6 IO扩展与键盘模块 (7)

3.7 AD采集模块 (8)

3.8 LCD驱动 (8)

3.9 FPGA多路开关控制驱动 (9)

3.10 Nor flash驱动 (10)

系统结构 (11)

4 PLM

4.1 系统流程 (11)

4.2 FPGA模块 (13)

4.2.1 FPGA启动 (13)

4.2.2 FPGA功能 (13)

4.3 AD采集 (14)

4.3.1 AD采集的间隔 (14)

4.4 ADP5588 I/O扩展模块 (15)

4.5 用户界面 (15)

4.6 故障录波与操作记录 (17)

4.7 事件上报 (17)

4.8 字符字库 (19)

4.8.1 字符的添加 (19)

4.8.2 字符的显示 (19)

5 PLM保护算法 (20)

5.1 保护算法 (20)

5.1.1 全周傅氏算法 (20)

5.1.2 一阶差分全周傅氏算法 (20)

6 PLM测量算法 (22)

6.1 功率测量 (22)

6.2 电能测量 (22)

7 PLM继电保护流程 (23)

7.1 过压保护 (23)

7.2 欠压保护 (24)

7.3 瞬时电流速断保护 (25)

7.4 时限电流速断保护 (26)

7.5 反时限过电流保护 (27)1 概述

本文档是北京亿旗创新PLM参考设计软件包配套文档之一。主要描述了PLM软件开发包的组成,各部分设计和使用的说明。

2 硬件单元测试程序

基于VDSP5.0开发的可运行的针对板载各硬件单元的测试程序,详见下表。

名称目录功能描述

AD采集测试程序Ad7606

板上集成了2颗AD采集芯

片。通过PF启动采样,通

过SPORT读取采样结果,

并转换为[-10,+10]区间的

样值。

键盘测试程序adp5588

通过I2C初始化adp5588

后,通过轮询状态寄存器,

检测外部按键,并输出到

VDSP的调试窗口

FPGA测试程序FPGA_TEST

对FPGA的各功能寄存器进

行操作

网卡测试程序Ethernet

由BF518的程序和PC程序

组成。BF518的程序负责发

送,PC程序接收数据,并

将其显示到界面

铁电测试程序fm1808

对铁电的全部区域进行写读

对比测试

黑白液晶测

试程序

lcd_test 驱动液晶屏,输出测试图像

Nand flash 测试程序nand_test

读取nand flash 标识,对扇

区进行擦写读,对比测试

Nor flash测

试程序

parallel_flash 对nor flash 进行擦写测试

RS232测试程序rs232

通过PC串口和板载串口通

讯。板载串口将从PC收到

的数据发送到PC。

RS485测试程序rs485

使用两个板子,一个通过

RS485发送数据,一个通过

RS485接收数据,并将收到

的数据输出到VDSP的调试

窗口

关于测试程序的具体操作使用说明在各目录中有相应操作说明。

3 UCOSII操作系统与附加模块

在PLM参考设计软件开发包中包括了基于bf518的UCOSII操作系统,提供了中断管理,内存管理和任务调度。其相应开发说明文档请参考:http://micrium.com/page/home

与UCOSII 配套提供的有一系列扩展模块,包括LWIP,FAT文件系统,web server。其相应开发说明文档请参考:

http://savannah.nongnu.org/projects/lwip/

http://micrium.com/page/products/rtos/fs

http://www.goahead.com/

基于参考设计硬件平台,配套系统中还以模块或函数的形式提供了各硬件单元的驱动。

3.1 铁电存储器驱动

位于gui-app/system.cpp中,实现了对铁电的读写。见下表:

函数声明:int write_fram(void *content,int size,int offset)

入口参数: content:

待写入数据起始地址

size:待写入数据长度

offset:铁电中的偏移量

返回值:成功返回写入长度,

失败返回0

描述:将content地址起始的长为size的数据写入到铁电偏移量为

offset的位置处

函数声明:int read_fram(void *content,int size,int offset)

将数据从铁电读出到此地址

入口参数: content:

size:读出数据长度

offset:铁电中的偏移量

返回值:成功返回读出长度

失败返回0

描述:从铁电偏移量为offset的位置处读出长为size的内容到content 地址

3.2 网卡驱动

位于lwip/contrib./ports/adsp-blackfin/proj/lwipv4lib/bf518_mac/adi_ether_bf518.c 以函数指针数组的形式,封装了对网卡的初始化,收发操作和参数配置等操作。LWIP使用此驱动完成网络的收发。

3.3 串口驱动

位于ucos/system/rs232.c中,完成RS232总线的初始化,和收发。接口见下表。

函数声明:int RS232_Init( void )

入口参数:无

返回值:成功返回1,否则-1

描述:初始化RS232

函数声明:int RS232_Rev(unsigned char *pdata,int len)

入口参数: pdata:接收数据缓冲区

len:接收数据长度

返回值:接收数据长度

描述:从RS 232接收指定长度数据

函数声明:int RS232_Send(unsigned char *pdata,int len)

入口参数: pdata:发送数据缓冲区

len:发送数据长度

返回值:发送数据长度

描述:用RS 232发送指定长度数据

3.4 Nand flash 与fat文件系统模块

系统提供基于NANDFLASH的FAT文件系统应用,其中NANDFLASH芯片为 K9F5608U 32M字节,关于文件系统的使用说明请参考“FAT文件系统说明.pdf”文档。

NANDFLASH驱动位于uCOS-II/System/nand/nand.c,完成K9F5608U的块读、写、擦除等底层操作。其接口见下表。

函数声明:BOOL NAND_Reset(void)

入口参数:无

:复位成功

返回值: True

False:复位失败

描述:对K9F5608U进行复位操作,通过判断状态位来识别复位是否成功。

函数声明:WORD ReadFlashID(void)

入口参数:无

返回值:读回的ID值,正确值为 0xEC75

描述:读K9F5608U 的ID信息,

MAKER_CODE 0xEC

DEVICE_CODE 0x75

函数声明:BOOL ReadBlock(DWORD blockID, BYTE *pBlockBuff)

blockID:读取的块的序号

入口参数: DWORD

BYTE *pBlockBuff:读出数据存放的缓冲区指针

:操作成功

返回值: True

False:操作失败描述:读取blockID指定块内存放的数据到pBlockBuff指定的缓冲区中,数据量为512字节

函数声明:BOOL WriteBlock(DWORD blockID, BYTE *pBlockBuff)

blockID:待写入块的序号

入口参数: DWORD

BYTE *pBlockBuff:待写入数据存放的缓冲区指针

:操作成功

返回值: True

False:操作失败

描述:将pBlockBuff指定的缓冲区中的数据写入到blockID指定块内,数据量为512字节

函数声明:BOOL EraseBlock(DWORD blockID)

blockID:待擦除块的序号

入口参数: DWORD

:操作成功

返回值: True

False:操作失败

描述:擦除blockID指定块的数据

函数声明:BOOL NAND_Init(void)

入口参数:无

:操作成功

返回值: True

False:操作失败

描述: NANDFLASH初始化,正确识别K9F5608U,读取信息,并提交diskInfo结构体信息,为文件系统做准备。

函数声明:void NAND_Deinit(void)

入口参数:无

返回值:无

描述:卸载NAND设备,释放内存。

BOOL NAND_ReadSector(

BYTE

*pSectorBuff,

startSectorAddr,

DWORD

DWORD

dwNumSectors

)

函数声明:BOOL NAND_ReadSector(

*pSectorBuff,

BYTE

startSectorAddr,

DWORD

dwNumSectors

DWORD

)

*pSectorBuff:读出数据存放的缓冲区指针

入口参数: BYTE

DWORD startSectorAddr:开始读取块的序号

DWORD dwNumSectors:需要连续读取块的数量

:操作成功

返回值: True

False:操作失败

描述:连续读取多块数据数据到pSectorBuff指定的缓冲区中,

函数声明:BOOL NAND_WriteSector(

*pSectorBuff,

BYTE

startSectorAddr,

DWORD

DWORD

dwNumSectors

)

*pSectorBuff:待写入数据存放的缓冲区指针

入口参数: BYTE

DWORD startSectorAddr:开始写入块的序号

DWORD dwNumSectors:需要连续读写入的数量

:操作成功

返回值: True

False:操作失败

描述:连续写入多块数据数据到pSectorBuff指定的缓冲区中,

3.5 485总线驱动

位于ucos/system/rs485.c中,完成485总线的初始化,和收发。接口

见下表。

函数声明:int RS485_Init( void )

入口参数:无

返回值:成功返回1,否则-1

描述:初始化RS232

函数声明:int RS485_Send(unsigned char *pdata,int len)

入口参数: pdata:发送数据缓冲区

len:发送数据长度

返回值:发送数据长度

描述:用RS 232发送指定长度数据

函数声明:int RS485_Rev(unsigned char *pdata,int len)

入口参数: pdata:接收数据缓冲区

len:接收数据长度

返回值:接收数据长度

描述:从RS 232接收指定长度数据

3.6 IO扩展与键盘模块

系统使用了ADP5588 IO扩展芯片完成键盘和IO扩展的功能。接口见下表。函数声明:int key_board_init(void)

入口参数:无

返回值:成功返回1

失败返回-1

描述:初始化ADP5588

函数声明:enum KEY_MSG get_key_msg(void)入口参数:无

返回值:返回消息队列中的值或KEY_MSG_NONE

描述:返回消息队列中的内容

函数声明:void adp5588_c4_c7_ctrl(int set_bit,int clear_bit)

入口参数: set_bit指定需要置高的I/O,clear_bit指定需要置低的I/O

返回值:无

描述:控制adp5588的c4到c7 I/O的高低

3.7 AD采集模块

系统集成了2颗AD7606,实现16通道AD采集。AD采集模块完成了

BF518中和AD连接的SPORT,PF,DMA,TIMER的初始化,以及定时采样功能。位于gui-app/ad7606/ad7606.cpp。模块入口为:

函数声明:int ad7606_init(void)

入口参数:无

返回值:成功返回1

失败返回-1

描述:初始化ad7606相关外设

3.8 LCD驱动

系统集成了240X128点阵的单彩液晶屏,驱动位于gui-app/lcd.cpp,相应接口见下表:

函数声明:void GUI_Initialize(void);

入口参数:无

返回值:无

描述:初始化GUI,包括初始化显示缓冲区,初始化LCM并清屏。

函数声明:void GUI_ClearSCR(void);

入口参数:无

返回值:无

描述:清屏

函数声明:void GUI_HLine(uint32 x0, uint32 y0, uint32 x1, TCOLOR color); 入口参数: x0:水平线起点所在列的位置

y0:水平线起点所在行的位置

x1:水平线终点所在列的位置

color:显示颜色(对于黑白色LCM,为0时灭,为1时显示)

返回值:无

描述:画水平线

函数声明:void GUI_RLine(uint32 x0, uint32 y0, uint32 y1, TCOLOR color); 入口参数: x0:垂直线起点所在列的位置y0:垂直线起点所在行的位置

y1:垂直线终点所在行的位置

color:显示颜色(对于黑白色LCM,为0时灭,为1时显示) 返回值:无

描述:画垂直线

函数声明:void show_cn(uint8 x, uint8 y, sint16 index, int focus);

入口参数:x:起始横坐标

y:起始纵坐标

index:汉字字模在字库中的索引

focus:汉字是否获得焦点(为0时无焦点,正常显示,为1时

获得焦点,反显)

返回值:无

描述:写一个汉字,汉字大小为16*16

函数声明:void show_en(uint8 x, uint8 y, sint16 index, int focus);

入口参数:x:起始横坐标

y:起始纵坐标

index:字符字模在字库中的索引

focus:字符是否获得焦点(为0时无焦点,正常显示,为1时

获得焦点,反显)

返回值:无

描述:写一个英文字符或标点符号,字符大小为8*16

函数声明:void show_pic(uint8 x,uint8 y,sint16 index, int focus);

入口参数:x:起始横坐标

y:起始纵坐标

index:图片字模在字库中的索引

focus:图片是否获得焦点(为0时无焦点,正常显示,为1时

获得焦点,反显)

返回值:无

描述:画一个图标图片,大小为32*20

3.9 FPGA多路开关控制驱动

系统通过FPGA控制开出状态和开入状态,驱动位于gui-app/system.cpp 相应接口为:

函数声明:int get_kairu_status(void)

入口参数:无

返回值:当前开入的状态。返回值的每一位和开入相对应

描述:获得当前开入的状态

函数声明:int get_kaichu_status(void)

入口参数:无返回值:当前开出状态。返回值和开出相对应

描述:获得当前开出状态

函数声明:int set_kaichu_status(int set_bit,int clear_bit)

入口参数: set_bit中某位为1,表示要置高相应开出;clear_bit中某位为1,表示要清除相应开出。

返回值:返回1表示按照参数调整了开出状态

返回0表示开出状态和参数设置相符,不需要调整

描述:设置开出状态

3.10 Nor flash驱动

位于ucos/system/nor_flash.c中,完成nor flash的擦除,读写功能。接口见下表。

函数声明:int EraseFlash();

入口参数:无

返回值:成功返回1,否则返回-1

描述:擦除flash

函数声明:int Flash_Read(unsigned short *pusData,unsigned long

ulStartAddress,unsigned int uiCount );

入口参数: pusData:输入数据地址

ulStartAddress:flash 中的偏移量

uiCount:读取长度

返回值:成功返回1,否则返回-1

描述:从flash中读取数据

函数声明:int Flash_Write(unsigned short *pusData,unsigned long

ulStartAddress,unsigned int uiCount );

入口参数: pusData:待写入数据地址

ulStartAddress:flash 中的偏移量

uiCount:写入长度

返回值:成功返回1,否则返回-1

描述:向flash中写入数据4 PLM 系统结构

4.1 系统流程

系统主循环流程图

程序流程从位置上分为5部分,分别为主循环和4个异步中断。系统上电后进入主循环,在对系统各模块初始化后,进入消息派发处理循环。系统将所有事件,包括按键动作,定时中断,保护动作触发事件都以消息的形式,发送到系统消息队列,在主循环中根据消息的类型和当前状态,更新UI的状态。

主循环的具体流程见上图。

系统注册了4个中断,它们会中断主循环的运行,转入各自处理流程。详见下图。

外设的中断(包括CAN和键盘的中断)首先进入FPGA,由FPGA逻辑处理后,提交给BF518。在此中断处理程序中,首先通过读取FPGA中断状态寄存器,判定中断类型,然后进入各外设中断处理程序。对于ADP5588键盘控制器来说,通过读取其寄存器,读出按键值,向系统消息队列中插入按键消息。

异步中断流程图

系统使用了2个定时器,一个进行频率测量,一个用于启动采样;在频率

测量定时中断中,通过捕获外部方波,确定基波的频率,用于更新采样间隔。

在采样定时中断中,控制PF启动7606的采样,并配置SPORT,开始接收数据。

当SPORT完成AD数据的接收,会触发采样完成中断。在此中断中,进行数据的整理,调用各种保护和测量算法;当需要发生动作时,启动开出,并向系统消息队列中添加报警消息,将故障前后波形录入铁电。

系统中还使用了RTC中断,当RTC中断发生,在中断处理程序中向系统消息队列中插入RTC定时消息。

4.2 FPGA模块

4.2.1 FPGA启动

FPGA从复位状态恢复后,会自动加载FPGA程序,主控处理器在使用FPGA功能前要判断FPGA是否完成了加载。系统设计了一个16位启动状态寄存器,该寄存器高8位为只读属性,当FPGA加载成功后,该寄存器高8位状态为0x10,并且在对低8位进行读写操作时,会将写入的数据的高4位与低4位互换。若操作结果正确,则说明FPGA程序加载完成,可以进行FPGA初始化。否则,说明FPGA加载未完成,继续等待FPGA程序加载。

4.2.2 FPGA功能

FPGA以总线形式和BF518连接,以寄存器的形式访问。承担了如下工作:外设中断的管理,包括键盘中断,CAN中断;开入状态检测,开出控制;各外部设备的复位管理。

4.3 AD采集

AD7606电路图

见上图,AD7606的CONVST_A0,CONVST_B0 和BF518的

ADC_CONVST连接,当ADC_CONVST为高时,启动AD采样过程;AD7606的数据输出DOUTA0 ,片选ADC_CS0,时钟ADC_SCLK0分别和BF518的SPORT接口的DR0PRI,RFS0,RSCLK0 连接,用于数据传输。

4.3.1 AD采集的间隔

系统使用2个定时器来确定AD采样间隔。根据电压侧的输入信号,经过滤波和波形变换转换成同步的方波信号送入BF518的频率捕获单元。系统能够从此单元获得换算成系统频率的当前电压周期;此周期值用来校正实际采样间隔,作为AD采集定时器的定时间隔。

4.4 ADP5588 I/O扩展模块

ADP5588电路图

ADP5588是IO扩展芯片,在系统中实现了键盘和IO扩展功能。ADP5588和BF518的TWI接口相连,当有键盘按下时,会通过KP_INTT中断处理器的运行;同时AD7606的过采样控制管脚和ADP5588的IO连接,在系统上电时,会通过配置ADP5588的IO输出选择AD7606的过采样频率。

4.5 用户界面

在用户界面部分,系统定义了两个基类CBaseWindow类和CBaseCtrl类。每个功能窗口对应一个窗口类,派生自CBaseWindow类;另外定义了CTitleCtrl类和CNumberCtrl类两个控件类,派生自CBaseCtrl类。

用户界面类关系图如下所示:

用户界面类关系图

CBaseWindow类实现了如下功能

•窗口对象的创建方法

•窗口内控件的刷新显示

•窗口内控件的焦点切换控制

•子窗口的管理

•窗口对按键消息的默认响应

•窗口的显示

CBaseCtrl类实现:

•控件对象的创建方法

•控件对象的显示

对每个不同功能的窗口,定义了相应的窗口类,每个窗口类完成窗口实例创建过程、窗口内变量刷新与处理等功能,每个窗口内都包含一个或多个控件对象,以及一个子窗口。在窗口消息处理过程中,首先将消息传递给子窗口处理,如果当前窗口无子窗口,则将消息传递给当前窗口的焦点控件进行消息处理,最后,如果当前焦点控件未对该消息进行处理,则由当前窗口进行消息处

理。

CTitleCtrl类为默认使用的控件类。CNumberCtrl类为数字控件类,增加了控件数字的设置、获得以及修改的方法。通过对每个控件定义唯一的控件ID,实现对不同控件对象的消息响应与控件显示内容的管理。

4.6 故障录波与操作记录

系统保护动作发生后,将进行故障录波操作。故障录波功能将记录故障描述信息与故障波形信息。故障描述信息中保存此次系统保护动作的发生时间、动作类型、动作延时、动作整定值等;故障波形信息保存从故障发生时刻(延时前)之前10个采样周期与故障发生时刻之后10个周期的采样值。

若系统触发多种保护动作,则只记录最先发生的保护信息。若同时触发多种保护动作,则优先记录电流保护信息。

在进行时间设置、系统设置、开关操作后,将进行操作记录。操作记录功能将记录此次操作的操作信息,包括操作时间与操作内容。

故障录波记录与操作记录将保存至铁电存储器。内容分为四个部分保存,第一部分为故障记录与操作记录的索引信息,保存操作记录与故障记录的保存个数、最新记录的索引位置以及最旧记录的索引位置;第二部分为操作记录,可保存16个最新的操作记录信息;第三部分为故障描述信息记录;第四部分为故障波形数据,最多保存16组故障描述信息与故障波形记录。

4.7 事件上报

保护系统运行时检测信息和保护信息可以通过网络方式与上位机的客户端进行连接,采用标准TCP/IP的客户机-服务器模型进行通信。数据信息使用高可靠性的TCP数据流传输,保护系统作为服务器端在约定的1048(418H)号TCP端口上被动侦听等待,上位机的应用程序可以作为客户端主动向保护系统发起连接。当上位机的应用程序与系统连接正确后,保护系统会以1秒的间隔时间连续地将检测的数据进行上传,传输信息内容包括三相电压、三相电流、零序电压、零序电流、有功功率、无功功率、检测频率、时间等,同时保护动作发生时系统也会实时将保护信息进行上传,上位机的应用程序接到正确信息后会将显示到界面上。当上位机应用程序断开TCP连接后,保护系统会自动断开当前TCP连接继续进入侦听状态,等待再次TCP的连接请求。

在系统中TCPThread任务主要负责网络连接和信息传输功能。作为网络通讯的示例应用,TCPThread任务在同一时间只允许响应一个请求连接。由于本系统采用LWIP嵌入式网络协议栈,所以用户可以根据实际要求实现多连接的请求。

系统对于传输信息的报文进行了封装,报文固定在276字节,其信息格式为:

typedef struct tag_PLM_INFO_PKG {

unsigned int pkg_mark; //stationary flag for valid pkg

unsigned int chunk_id; //identify corresponding chunk this package belonging unsigned int chunk_offset; //package payload offset in the chunk

unsigned int session_id; //identify the session type

unsigned int pkg_payload_len; //package payload len

unsigned char pkg_data[PKG_DATA_LEN];

}

VALID_PKG_MARK (('A'<<24)|('P'<<16)|('L'<<8)|'M')

z chunk_id 为标识信息,内容为:

VALID_CHUNK_MARK (('E'<<24)|('F'<<16)|('L'<<8)|'G')

z chunk_offset为有效数据的偏移,固定为20,通常指向pkg_data位置z session_id为报文信息类型:

1)MEASURE_INFO 测量信息

2)MALFUNCTION_INFO 故障信息或保护信息

3)SYNCTIME 时间同步

z pkg_payload_len 为有效信息长度,即pkg_data[PKG_DATA_LEN]内存放的实际有效信息长度

z pkg_data[PKG_DATA_LEN] 存放有效信息,空间为256字节

对于pkg_data[]中存放数据信息结构如下:

typedef struct tag_SOEDATA

{

unsigned int SOEType; /*保护事件类型*/

unsigned int msec;

unsigned int sec;

unsigned int min;

unsigned int hour;

unsigned int day;

unsigned int mon;

unsigned int year;

//开入开出状态

unsigned int input_stat;

unsigned int output_stat;

//电流

float Ia;

float Ib;

float Ic;

float Io;

//电压

float Ua;

float Ub;

float Uc;

float Uo;

//功率

float P;

float Q;

//检测频率

float FHz;

}STRUCT_SOEDATA,*PSTRUCT_SOEDATA;

其中

z SOEType为保护事件类型,

当session_id为MALFUNCTION_INFO时,SOEType才有意义,其代表信息如下:

1)YIDUAN_PRO 瞬时电流速断保护

2)ERDUAN_PRO 时限电流速断保护

3)FANSHIXIAN_PRO 反时限过电流保护

4)QIANYA_PRO 欠压保护

5)GUOYA_PRO 过压保护

系统的网络地址信息是通过调用void Lwip_DHCP_Init(short use_dhcp, int ipaddr, int netmask, int gateway)函数进行配置,例如Lwip_DHCP_Init(0,

0xC0A800FA, 0xFFFFFF00, 0xC0A80001),其中参数0代表禁止采用DHCP服务,IP地址为192.168.0.251 ,子网掩码为255.255.255.0,网关为192.168.0.1。用户可以根据相应的网络环境进行配置。

4.8 字符字库

为实现LCD显示屏上的字符显示,本系统采用字符字库数组存储每个字符的字模信息,通过定义枚举将字符在数组中位置与枚举变量相关联,实现字符字模的查询,并通过调用LCD显示函数在屏幕上绘制字符。

4.8.1 字符的添加

要进行字符的添加,首先通过字模提取软件提取字符的字模,其中汉字点阵大小为16*16,英文、数字等点阵大小为8*16。将字模分别加入汉字字模数组或英文字模数组,同时在汉字或英文枚举定义中添加该汉字或英文字母的枚举定义。其中,汉字的枚举使用汉字的汉语拼音加声调符号定义,如有同音字,再在拼音后面添加英文释义区分。

如需要进行图片的添加,需要通过字模提取软件提取图片字模,图片点阵大小要求为32*20,将图片字模加入图片字模数组,同时在图片的枚举定义中增加对应的枚举。

4.8.2 字符的显示

字符的显示是通过控件的显示完成的,将要显示的字符串的枚举以及字符串在屏幕中的位置保存在控件中。通过查找控件中每个字符在字库中的位置,获得每个字符的字模,然后将每个字符在对应的位置绘制出来,达到了字符显示的目的。

图片的显示也是通过控件的显示完成的,不过需要单独定义一个控件类,重写该控件的实例创建函数与显示函数,在该控件的显示函数中调用图片绘制函数。

5 PLM 保护算法

5.1 保护算法

系统采用一阶差分与全周傅氏算法相结合的办法由采样信号求取电量信号的值。通过一阶差分去除信号中的直流分量与低频分量;通过全周傅氏算法去除信号中的高频分量,并将信号转换为相量表示,即:

R I X X jX =+

对于电压与电流信号,其相量表示法的虚部部分的值为其傅氏算法求得值的相反数。

由信号的相量表示形式,得信号的幅值与相位为:

()

arctan /I R X X X ϕ⎧=⎪⎨=⎪⎩

对于正弦稳态电路,信号有效值为其幅值的1/算出电路的有功功率与无功功率。

5.1.1 全周傅氏算法

假定输入信号为周期性函数信号,除基波分量外,还包含直流和整次谐波分量,设其表达式为:

()()

()()0110111cos cos sin k k k Rk Ik k x t X X k t X X k t X k t ωϕωω∞

=∞==++⎡⎤⎣⎦=+−∑∑

其中0X 为直流分量,1ω为基波角频率,k X 、k ϕ为k 次谐波的幅值和相

位。

采用全波傅氏算法计算得电信号的k 次谐波分量的实部、虚部为:

()()111011012()cos 2()sin T Rk T Ik X x t k t dt T X x t k t dt T ωω⎧=⎪⎪⎨⎪=−⎪⎩

∫∫ 经过N 点采样,取基波分量,即k=1,得:

101022()cos()22()sin()N R i N I i X x i i N N X x i i N N ππ−=−=⎧=⎪⎪⎨⎪=−⎪⎩

∑∑ 5.1.2 一阶差分全周傅氏算法

由于傅氏算法对信号直流与低频分量的滤波较差,因此采用差分算法进行采样信号的低频与直流分量的滤波。由于一个采样间隔的一阶差分算法('()()(1)x n x n x n =−−)对高次谐波有放大作用,而两个采样间隔的一阶差分算法

('()()(2)x n x n x n =−−)效果有所改善,因此采用两个采样间隔的一阶差分算法。设输入信号同式(8-1),对其进行采样、差分得:

'()()(2)x n x n x n =−−

()()

'

111

1111

1111

1121()cos()cos(2)2sin()sin()

2sin()cos()2cos k s k s k k k s s k s k s k s k s k k s k k x n X k nT k n T X k nT k T k T k T X k nT k T K X k nT K ωϕωϕωωϕωπωωϕωωϕ∞

=∞=∞=∞==+−−+⎡⎤⎣⎦=−−+=+−+=++∑∑∑∑

其中1K 为幅值补偿系数,2K 为相位补偿系数

11212sin()

2

s s K k T K k T ωπω==−+ 本系统在计算中,只取信号的基波分量,即k=1,每周期采样点数为N ,则:

122sin K N

π= 222

K N ππ=−+ 设对差分信号经过傅氏算法计算后的幅值与相位为'k X 、'k ϕ,则原信号基波分量的幅值、相位为:

'1/X X K =

'2i K ϕϕ=−

则原信号实部与虚部为

()''12/cos R X X K K ϕ=−

()''12/sin I X X K K ϕ=−−

即:

''2211''

2211

cos sin cos sin R R I I I R K K X X X K K K K X X X K K ⎧=+⎪⎪⎨⎪=−⎪⎩ 其中122sin

K N π=,222

K N ππ=−+,'R X 、'I X 为对'()x n 采用傅氏算法计算得信号基波分量实部与虚部:

1''01''022()cos 22()sin N R i N I i X x i i N N X x i i N N ππ−=−=⎧⎛⎞=⎜⎟⎪⎪⎝⎠⎨⎛⎞⎪=−⎜⎟⎪⎝⎠⎩∑∑

6 PLM 测量算法

6.1 功率测量

对正弦稳态电路,复功率可以表示为:

cos sin S UI jUI ϕϕ=+

其中实部部分为有功功率:

cos P UI ϕ=

虚部部分为无功功率:

cos Q UI ϕ=

其中U 、I 分别为电压、电流的有效值,对于正弦稳态电路:

U =

I =ϕ为电压与电流的相位差,j 为虚数单位

arctan arctan I I R

R U I U R ϕ⎛⎞⎛⎞=−⎜⎟⎜⎟⎝⎠⎝⎠

本系统经过差分全周滤波算法处理后,可以认为此时的信号为正弦稳态电路信号,可以用上式求得测量功率。

对于三相电路,则总有功功率为:

123111222333

cos cos cos P P P P U I U I U I ϕϕϕ=++=++ 无功功率为:

123111222333sin sin sin Q Q Q Q U I U I U I ϕϕϕ=++=++ 6.2 电能测量

系统电能是功率与时间的乘积,则有功电能计算公式为:

W=PT

无功电能计算公式为:

W=QT

通过计算公式,计算有功电能与无功电能并累加。由于电能是累加量,随着时间的增加,采用W ·S 的单位太小,因此有功电能采用KW ·h(度)为单位,无功电能采用KVar ·h 为单位。

7.1 过压保护

在每个采样完成中断中,若系统处于保护模式且过压保护已启动,则进入过压保护流程。本系统过电压保护流程如下

过电压保护流程图

当系统处于“合闸”状态时,进入保护流程。

当三相电压任意一相高于整定值时,开始过压保护延时计时。若该相过电压状态持续到整定时限则过压保护动作,将“合闸”切换成“跳闸”状态,并发出系统告警消息。

若在整定时限内电压返回到正常状态,则相应延时置0。

当系统处于“跳闸”状态时,进入保护返回流程。如果所有相的电压都低于整定值的98%,且持续一段时间(0.4S),发出系统恢复消息,系统“合闸”。

7.2 欠压保护

在每个采样完成中断中,若系统处于保护模式且欠压保护已启动,则进入欠压保护流程。欠压保护流程如下

欠电压保护流程图

当系统处于“合闸”状态时,进入保护流程。

当三相电压所有相均低于整定值时,开始欠压保护延时计时。若欠压状态持续到整定时限则欠压保护动作,将“合闸”切换成“跳闸”状态,并发出系统告警消息。

若在整定时限内电压返回到正常状态,则相应延时置0。

当系统处于“跳闸”状态时,进入保护返回流程。如果所有相的电压都高于整定值的102%,且持续一段时间(0.4S),发出系统恢复消息,系统“合闸”。

7.3 瞬时电流速断保护

在每个采样完成中断中,若系统处于保护模式且启用了一段过电流保护,则进入瞬时电流速断保护流程。保护流程如下

瞬时电流速断保护流程图

当系统处于“合闸”状态时,进入保护流程。

当三相电流任意一相有效值高于整定值时,瞬时电流速断保护动作,将“合闸”切换成“跳闸”状态,并发出系统告警消息。

当系统处于“跳闸”状态时,进入保护返回流程。如果所有相的电流都低于整定值的98%,且持续一段时间(0.4S),发出系统恢复消息,系统“合闸”。

7.4 时限电流速断保护

在每次采样完成中断中,若系统处于保护模式且启用了二段过电流保护,则进入时限电流速断保护流程。保护流程如下

时限电流速断保护流程图

当系统处于“合闸”状态时,进入保护流程。

当三相电流任意一相高于整定值时,开始时限电流速断保护延时计时。若该相过电流状态持续到整定时限,则时限电流速断保护动作,将“合闸”切换成“跳闸”状态,并发出系统告警消息。

若在整定时限内电流返回到正常状态,则相应延时置0。

当系统处于“跳闸”状态时,进入保护返回流程。如果所有相的电流都低于整定值的98%,且持续一段时间(0.4S),发出系统恢复消息,系统“合闸”。

7.5 反时限过电流保护

反时限过电流保护i-t 特性曲线如下图所示,保护动作延时与电流有关,电流大的时候动作时间短,电流小的时候动作时间长。

当3相电流任意一相的有效值大于反时限保护启动值时,系统按反时限保

护曲线方程求取动作时间,本系统采用非常反时限曲线方程:

13.5(/)1p

set t t I I =−

其中set I 为启动电流,p t 为时间定值。

在每个采样完成中断中,若系统处于保护模式且启用了反时限过电流保护,则进入反时限过电流保护流程。反时限过电流保护流程如下:

反时限过电流保护流程图

当系统处于“合闸”状态时,进入保护流程。

首先由当前3相电流,根据曲线方程求取动作时间,取3相最短时间作为系统动作时间。

当三相电流任意一相高于启动电流时,开始反时限过电流保护延时计时。

在动作时间到达前,如果某次计算的动作时间小于之前的系统动作时间,

以新动作时间为准;如果三相的电流都恢复正常,则不动作。若该相过电流状态持续到系统动作时间,则时限电流速断保护动作,将“合闸”切换成“跳闸”状态,并发出系统告警消息。

当系统处于“跳闸”状态时,进入保护返回流程。如果所有相的电流都低于整定值的98%,且持续一段时间(0.4S),发出系统恢复消息,系统“合闸”

文档

ADI DSP继电保护开发平台软件设计手册

ADIDSP继电保护开发平台软件设计手册1概述(3)2硬件单元测试程序(3)3UCOSII操作系统与附加模块(4)3.1铁电存储器驱动(4)3.2网卡驱动(4)3.3串口驱动(4)3.4Nandflash与fat文件系统模块(5)3.5485总线驱动(7)3.6IO扩展与键盘模块(7)3.7AD采集模块(8)3.8LCD驱动(8)3.9FPGA多路开关控制驱动(9)3.10Norflash驱动(10)系统结构(11)4PLM4.1系统流程(11)4.2FPGA模块(13)4.2.1FPGA启动
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top