⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csfu107.h

📁 一个串口终端解释程序。用于单片机调试串口的超级终端应用。
💻 H
📖 第 1 页 / 共 2 页
字号:
/*-----------------------------------------------------------------------*
* 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 + -