📄 csfu107.h
字号:
/*-----------------------------------------------------------------------*
* Copyright (c) 2005,北京四方同创保护与控制设备有限公司稳控事业部
* All rights reserved.
*
* 文件名称:CSFU107.H
* 摘 要:内电势测量装置DSP56F807头文件
* 采用CSS-200/1规约V1.02版
* 当前版本:2.00
* 作 者:胡炯
* 完成日期:2007.1
*-----------------------------------------------------------------------*/
#ifndef _CSFU107_H
#define _CSFU107_H
#ifdef MAIN_DEFINE //确保变量只在main.c中定义一次
#define VARIABLE_DEFINE
#else
#define VARIABLE_DEFINE extern
#endif
#define TRUE 1
#define FALSE 0
/**********设定装置工作模式变量定义**********/
VARIABLE_DEFINE unsigned int MeterOutputDataType; //数显表输出的数据类型:0——功角,1-内电势绝对角,2-发电机转速
VARIABLE_DEFINE unsigned int DaMode; //0:新型号装置(V1及以后版本),1:旧型号装置(V1以前版本)
VARIABLE_DEFINE unsigned int MeterType; //0:新型号数显表(天辰仪表2400bps),1:旧型号数显表(虎牌电气1200bps)
VARIABLE_DEFINE unsigned int MeterAddress; //数显表地址,仅在与旧型号数显表配合时使用
VARIABLE_DEFINE unsigned int RunStat; //装置工作模式
VARIABLE_DEFINE unsigned int WriteFlashRunStat; //写入FLASH的装置工作模式
/**********end of 设定装置工作模式变量定义**********/
#define CPU_VERSION_LARGE 2 //CPU版本号
#define CPU_VERSION_SMALL 0
#define ZOOM_ROTATE_SPEED //将转速放大10倍,0~30000
/**********GPS脉冲对时相关的变量及常量定义**********/
#define STANDARD_PPS_PERIOD 40000000 //忽略晶振标称值误差时的PPS周期计数值
#define INIT_MAX_PPS_PERIOD_ERROR 10000 //初始化阶段允许的输入PPS周期计数值与预设计数值的最大误差:250us
#define RUNNING_MAX_PPS_PERIOD_ERROR 800 //正常运行阶段允许的输入PPS周期计数值与预设计数值的最大误差:20us
#define PPS_PPS_ERROR 40 //输入的相邻PPS周期相差大于1us时认为出错
#define INPUT_OUTPUT_PPS_ERROR 60 //输入与输出秒脉冲差大于1.5us时认为输入秒脉冲出错
#define PPS_OUTPUT_DELAY_COMPENSATE 14 //输出虚拟PPS延迟补偿(400ns)
#define PPS_ERROR_CNT_LEVEL 20 //输入输出误差级别基值(500ns)
VARIABLE_DEFINE unsigned long MinPpsPeriod; //输入PPS周期对应计数值下限,根据实际情况调整
VARIABLE_DEFINE unsigned long MaxPpsPeriod; //输入PPS周期对应计数值上限,根据实际情况调整
#define PPS_PERIOD_REC_BUF_SIZE 64
VARIABLE_DEFINE unsigned long PpsPeriodRecBuf[PPS_PERIOD_REC_BUF_SIZE]; //记录最近64个正确的输入秒脉冲周期
VARIABLE_DEFINE unsigned long *PpsPeriodRecBufPtr; //PpsPeriodRecBuf当前的指针
VARIABLE_DEFINE unsigned int PpsPeriodRecBufFullFlag; //PpsPeriodRecBuf有效数据填满标志
VARIABLE_DEFINE unsigned long PpsPeriodCalRecBuf[PPS_PERIOD_REC_BUF_SIZE]; //记录最近64个正确的输入秒脉冲周期,连续异常超过10秒后,将序列清空
VARIABLE_DEFINE unsigned long *PpsPeriodCalRecBufPtr; //PpsPeriodCalRecBuf当前的指针
VARIABLE_DEFINE unsigned long PpsPeriodCalSum; //PpsPeriodCalRecBuf数据总和
VARIABLE_DEFINE unsigned int PpsPeriodCalRecBufFullFlag; //PpsPeriodCalRecBuf和PpsPeriodErrorBuf有效数据填满标志
VARIABLE_DEFINE unsigned long AveragePpsPeriod; //利用PpsPeriodRecBuf求出的秒脉冲周期平均值的商
VARIABLE_DEFINE unsigned long AveragePpsResidue; //利用PpsPeriodRecBuf求出的秒脉冲周期平均值的余数
VARIABLE_DEFINE unsigned long AveragePpsPeriodBak; //备份上一次利用PpsPeriodRecBuf求出的秒脉冲周期平均值的商
VARIABLE_DEFINE unsigned long AveragePpsResidueBak; //备份上一次利用PpsPeriodRecBuf求出的秒脉冲周期平均值的余数
VARIABLE_DEFINE unsigned int AveragePpsPeriodCalStartFlag; //=1时表示应开始计算秒脉冲周期平均值
VARIABLE_DEFINE unsigned int AveragePpsPeriodCalNoEffectFlag; //=1时表示此时利用PpsPeriodRecBuf计算出的数据无效
VARIABLE_DEFINE unsigned long CurrInputPpsCounter; //用于存放TD0、TD1捕捉的输入秒脉冲上升沿的计数器值
VARIABLE_DEFINE unsigned long LastInputPpsCounter;
VARIABLE_DEFINE unsigned long CurrInputPpsPeriod; //当前实测的输入PPS信号周期
VARIABLE_DEFINE unsigned long LastInputPpsPeriod;
VARIABLE_DEFINE long PpsPeriodGap; //计算两个相邻输入秒脉冲周期的差值
VARIABLE_DEFINE unsigned int InputPpsStableCounter; //初始化阶段输入PPS信号稳定的次数
#define INPUT_PPS_STABLE_THRESHOLD 10 //输入PPS信号稳定超过设定次数后进入正常处理流程
VARIABLE_DEFINE unsigned long OutputPpsCounter; //存放虚拟PPS脉冲上升沿的计数器值
VARIABLE_DEFINE unsigned long OutputPpsPeriod; //计划输出的虚拟PPS周期
VARIABLE_DEFINE unsigned long OutputPpsResidue; //计划输出的虚拟PPS周期的余数
VARIABLE_DEFINE unsigned int PpsOutputFlag; //虚拟PPS输出标志
VARIABLE_DEFINE unsigned int FirstOutputPpsFlag; //虚拟输出第一个PPS标志
#define PPS_ERR_REC_BUF_SIZE 10
VARIABLE_DEFINE long PpsInputOutputErrCnt[PPS_ERR_REC_BUF_SIZE]; //记录输入输出PPS的实际偏差
VARIABLE_DEFINE unsigned int InputPpsComeFlag; //标识输入PPS上升沿到来
VARIABLE_DEFINE unsigned int PpsSyncErrorFlag; //输入与输出PPS同步错误标志,PpsSyncErrorNum越限后置位
VARIABLE_DEFINE unsigned int PpsSyncErrorNum; //输入与输出PPS发生同步错误的秒数,下列情况计数累加:当前输入输出PPS的误差过大
VARIABLE_DEFINE unsigned int NotOkNumGPS; //PPS异常的秒数,下列情况计数累加:GPS失锁、PpsSyncErrorFlag置位、PPS没有在预定时间内到来、当前输入输出PPS误差过大
VARIABLE_DEFINE unsigned long ResidueAdd; //输出PPS周期余数计算变量
VARIABLE_DEFINE unsigned int CurrTD3IntCounter; //当前秒内TD3中断次数
VARIABLE_DEFINE unsigned int CurrSmpcnt; //当前的smpcnt值,均为整周期时刻
VARIABLE_DEFINE unsigned long PeriodCounterQueue[50]; //记录当前一秒内工频整周期时刻对应的计数值
VARIABLE_DEFINE unsigned long *PeriodCounterQueuePtr; //PeriodCounterQueue的当前数据指针
/**********end of GPS脉冲对时相关的变量及常量定义**********/
/**********GPS串口接收部分变量及常量定义**********/
VARIABLE_DEFINE unsigned int RecSci1Buf[85];
VARIABLE_DEFINE unsigned int RecSci1BufPtr;
VARIABLE_DEFINE unsigned int Sci1CheckSum;
VARIABLE_DEFINE unsigned int Sci1Data; //串口接收临时变量
VARIABLE_DEFINE unsigned int Sci1SumFlag;
VARIABLE_DEFINE unsigned int RecSci1Flag; //标识当前接收状态,1-报文接收中,0-还未找到报文头
VARIABLE_DEFINE unsigned int CalSocFlag; //报文接收结束,开始计算SOC的标志
//#define BASE_SECOND 3144268800; //1900-1999.8.22的秒数
#define BASE_SECOND 935280000; //1970-1999.8.22的秒数
VARIABLE_DEFINE unsigned long Time; //当前解析出的GPS时间
VARIABLE_DEFINE unsigned long LastTime;
VARIABLE_DEFINE unsigned long Soc; //1970.1.1~现在的秒数,未加闰秒补偿
VARIABLE_DEFINE unsigned long UploadSoc; //1970.1.1~现在的秒数,已加闰秒补偿,上传
VARIABLE_DEFINE unsigned int LeapSecond; //报文中解析出的闰秒数
VARIABLE_DEFINE unsigned int UploadLeapSecond; //上送闰秒数
VARIABLE_DEFINE unsigned int LastLeapSecond; //上一次从报文中解析出的闰秒数
VARIABLE_DEFINE unsigned int FixType; //GPS串口报文中标识的锁星状态
VARIABLE_DEFINE unsigned int GpsFixCounter; //延迟计数器,保证RealFixFlag比FixType延迟几秒置位
VARIABLE_DEFINE unsigned int RealFixFlag; //GPS卫星有效锁定标志,比FixType延迟几秒,此时PPS已经稳定
VARIABLE_DEFINE unsigned int GpsNotFixCnt; //GPS卫星失锁的计数器
VARIABLE_DEFINE unsigned int NoSocCounter; //统计没有收到有效SOC的秒数
VARIABLE_DEFINE unsigned int Sci1RecErrTime; //Sci0串口接收异常的秒数
VARIABLE_DEFINE long GpsReportReachTimeCounter; //GPS串口报文结束字符到来时刻落后PPS上升沿的时间,用定时器计数值表示
VARIABLE_DEFINE unsigned int GpsReportReachTime; //GPS串口报文结束字符到来时刻,用CurrTD3IntCounter的值表示
VARIABLE_DEFINE unsigned int SocStableCounter; //表示当前SOC时标的可信度,大于8时时标可用
/**********end of 串口接收部分变量及常量定义**********/
/**********flash操作相关相关变量及常量定义**********/
#define CONFIG1_PAGE_PTR (unsigned int *)0x3600 //装置参数1所在页的首地址是0x3600
#define CONFIG2_PAGE_PTR (unsigned int *)0x3700 //装置参数2所在页的首地址是0x3700
//FLASH页中的数据存储顺序:有效标志(0x55aa)、内电势补偿角、反码、机端电压补偿角、反码、装置工作模式、反码
//装置参数1和装置参数2的存储页交替使用
VARIABLE_DEFINE unsigned int *CurrFlashWritePtr; //当前可以写入补偿值的FLASH页首指针
VARIABLE_DEFINE unsigned int WriteFlashFlag; //写FLASH进程标志
VARIABLE_DEFINE unsigned int WriteFlashStartFlag; //要求向FLASH写入数据标志
VARIABLE_DEFINE unsigned int EraseFlashStep; //擦除FLASH操作的步骤标志
VARIABLE_DEFINE unsigned int ProgramFlashStep; //写入FLASH操作的步骤标志
#define OLD_CONFIG_PAGE_PTR (long *)0x3500 //旧版本软件存储补偿值的地址是0x3500
/**********end of flash操作相关相关变量及常量定义**********/
/**********内电势角度测量相关变量及常量定义**********/
#define E_INPUT_STAT (*TMRA0_SCR & 0x0100)
#define U_INPUT_STAT (*TMRA2_SCR & 0x0100)
#define MAIN_FREQ_PERIOD 800000 //标准工频周期对应的计数值
#define U_PERIOD_MAX_ERROR 40000 //允许的U周期较大偏差,1ms
#define U_PERIOD_MIN_ERROR 20000 //允许的U周期较小偏差,500us
#define E_PERIOD_MAX_ERROR 40000 //允许的E周期较大偏差,1ms
#define E_PERIOD_MIN_ERROR 20000 //允许的E周期较小偏差,500us
#define E_E_ERROR 1600 //允许的两个相邻E周期的最大误差,假设转子转动一周时间内,发电机转速变化不会超过0.2%
VARIABLE_DEFINE unsigned int PolePairsNum; //发电机极对数
#define COUNTER_QUEUE_SIZE 20
typedef struct
{
unsigned int NowState; //去抖完成后的确定状态
unsigned int ChangeCounter; //输入跳变持续时间,不为0时表示正在进行去抖判断,以进入TC1中断(15us)的次数表示
unsigned int ChangeCounterLimit; //去抖判断时间窗的长度
unsigned int IntTimes; //进行去抖判断过程中进入中断的次数
unsigned int IntTimesLimit; //进行去抖判断过程中允许的最多中断的次数
unsigned int OneSecondTrigTimes; //一秒内触发中断进行去抖判断的次数
unsigned int OneSecondTrigTimesLimit;//一秒内允许的触发中断进行去抖判断的次数
unsigned int FilterLastTime; //去抖判断已经进行的时间,以进入TC1中断(15us)的次数表示
unsigned int MaxDelayTime; //允许的最长去抖判断时间
unsigned int ErrFlag; //输入信号错误标志
unsigned long CurrRisingEdgeCounter; //当前上升沿到来时刻的计数值,尚未经去抖判断
unsigned long LastRisingEdgeCounter; //上一个上升沿到来时刻的计数值
unsigned long LastLastRisingEdgeCounter; //上上个上升沿到来时刻的计数值
unsigned long RisingEdgeCounterBuf[COUNTER_QUEUE_SIZE]; //上升沿到来时刻的计数值缓冲区
unsigned long *RisingEdgeWritePtr; //RisingEdgeCounterBuf的写指针
unsigned long PeriodBuf[COUNTER_QUEUE_SIZE]; //上升沿周期对应的计数值缓冲区
unsigned long *PeriodBufWritePtr; //PeriodBuf的写指针
unsigned int BufFullFlag; //缓冲区写满的标志
unsigned long *OldRisingEdgeBufPtr; //记录上一次取数据时的缓冲区指针,用以判断有没有新的E/U上升沿数据
unsigned long MinPeriod; //最小周期阈值
unsigned long MaxPeriod; //最大周期阈值
unsigned long PeriodSum; //用于计算周期时使用
unsigned long AveragePeriod; //利用缓冲区数据计算出的平均值
unsigned int NormalPeriodNum; //缓冲区中正常的周期个数
unsigned long *CalPeriodPtr; //计算用指针
int CompensateValue; //补偿角度值
int WriteFlashCompensateValue; //写入FLASH的补偿角度
unsigned int ErrorLastTime; //错误状态持续的时间,利用TD3中断次数表示
}PulseStruct;
VARIABLE_DEFINE PulseStruct E;
VARIABLE_DEFINE PulseStruct U;
VARIABLE_DEFINE long ContiguousEPeriodMaxErr; //相邻的两个E周期允许的最大误差
VARIABLE_DEFINE unsigned long LastEPeriod; //上一个E周期的计数值
VARIABLE_DEFINE unsigned int ECaptureFlag; //E输入捕获标志:0-输入不合要求,1-输入周期符合要求,2-输入周期的1/2符合要求
VARIABLE_DEFINE int UnCompensatedEAbsoluteAngle; //未补偿的内电势绝对角(0~360度)
VARIABLE_DEFINE int CompensatedEAbsoluteAngle; //补偿后的内电势绝对角(-180~+180度)
VARIABLE_DEFINE int UnCompensatedPowerAngle; //未补偿的的发电机功角(0~360度)
VARIABLE_DEFINE int CompensatedPowerAngle; //补偿后的发电机功角(-180~+180度)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -