📄 9311db.h
字号:
/*------------------------------------------------------------------*/
/*模块名称:9311db.h */
/*模块功能:9311的数据库(及类型)的头文件 */
/*编写日期:2004年8月 */
/*编写者: dingding */
/*------------------------------------------------------------------*/
#ifndef DF9311DB_H
#define DF9311DB_H
/*------------------------------------------------------------------*/
/*--------------------------系统常量定义----------------------------*/
/*------------------------------------------------------------------*/
#define DEFSYSDELAY 5 //(5*0.5s)
#define DEFYCNUM 13 //一回路遥测个数
#define DEFBINUM 8 //硬件遥信个数
#define OTHERSOFTBINUM 0 //虚拟遥信个数
#define FASOFTBINUM 16 //一回路故障检测虚拟遥信个数
#define DEFYKNUM 3 //遥控个数
#define PORTNUM 2 //设备规约通讯串口总数
/*------------------------------------------------------------------*/
/*--------------------------中断常量定义----------------------------*/
/*------------------------------------------------------------------*/
#define INTWATCHDOG 1
#define FIQ_INTERRUPT_LEVEL 2
#define SOFT_INTERRUPT_LEVEL 3
#define USART0_INTERRUPT_LEVEL 6
#define USART1_INTERRUPT_LEVEL 7
#define TIMER0_INTERRUPT_LEVEL 5
#define TIMER2_INTERRUPT_LEVEL 4
/*------------------------------------------------------------------*/
/*----------------------------任务ID定义----------------------------*/
/*------------------------------------------------------------------*/
#define ROOTID 0
//采用任务优先级
#define HID 20
#define YXID 21
#define YCID 22
#define FAID 23
#define USART1ID 24
#define USART2ID 25
#define RUNID 26
/*------------------------------------------------------------------*/
/*--------------------------数据库常量定义--------------------------*/
/*------------------------------------------------------------------*/
//数据类型
//DOT:表示单个操作
#define YCDOTDATA 0x01 //单个遥测数据操作标志
#define YCDATA 0x02 //全遥测数据操作标志
#define YXDOTDATA 0x03
#define YXDATA 0x04
#define SOEDATA 0x05
#define COSDATA 0x06
#define DDDATA 0x07
#define FENTERBOOT 0x08 //进入二次引导程序
#define FRESET 0x09 //重启动清NVRAM标志
#define SYSTIME 0x0A
#define ABSTIME 0x0B
#define BIDATA 0x0C
#define INFODATA 0x0D
//录波-连续排列
#define LBDATAUA 0x15
#define LBDATAUC 0x16
#define LBDATAIA 0x17
#define LBDATAIB 0x18
#define LBDATAIC 0x19
#define LBDATAIO 0x1A
#define LBINFO 0x1B
#define YCFULLVAULE 0x0E
#define FDRLOC 0x0F
#define BORESQ 0x10 //遥控请求
#define BORESP 0x11 //遥控响应
//各存储地址
#define BASE_NUM 128
//#define NVRAM_BASE (0x02000000)
//固定分配区
#define FLAGLIMIT (BASE_NUM * 2) //分配0x100个标志存储位置
#define NVRAMBASEADDR (volatile INT8U *)(NVRAM_BASE)
#define FENTERBOOTADDR (volatile INT8U *)(NVRAM_BASE + 0x00)
#define FRESETADDR (volatile INT8U *)(NVRAM_BASE + 0x10)
#define ABSTIMEADDR (volatile INT8U *)(NVRAM_BASE + 0x20)
#define BIVALADDR (volatile INT8U *)(NVRAM_BASE + 0x30)
#define FDRLOCADDR (volatile INT8U *)(NVRAM_BASE + 0x40)
#define SYSINFOLIMIT BASE_NUM
#define SYSINFOADDR (volatile INT8U *)(NVRAM_BASE + 0x100)
#define LBLIMIT 3
#define LBINFOSIZE 0x20
#define LBSize 10 //每块十个周期存储
#define LBBLOCK 0x280 //(2*32*10) //Ua,Uc,Ia,Ib,Ic,Io(0xF00)
#define LBFDBLOCK 0xF00
#define LB2LIMIT 0xA00 //1S(2*32*50*1 - 0x280)//(0x3C00)
#define LBMANAGADDR (volatile INT8U *)(NVRAM_BASE + 0x2000)
#define LBMANAG2ADDR (volatile INT8U *)(NVRAM_BASE + 0x2010)
#define LBINFOADDR (volatile INT8U *)(NVRAM_BASE + 0x2020)
#define LBADDR (volatile INT8U *)(NVRAM_BASE + 0x2100)
#define LBADDR2 (volatile INT8U *)(NVRAM_BASE + 0x8000) //手动录波区(0x4000)
//动态分配区
#define OTHERADDR (volatile INT8U *)(NVRAM_BASE + 0xC000) //128K(80K)
#define OTHERADDR2 (volatile INT8U *)(NVRAM_BASE + 0x3000) //32K(20K)
#define SOELIMIT BASE_NUM
#define COSLIMIT BASE_NUM
/*------------------------------------------------------------------*/
/*--------------------------数据库事件标志--------------------------*/
/*------------------------------------------------------------------*/
//占用事件标志的高八位,低八位将交有上层任务使用
#define FCOS 0x0100 //变化遥信
#define FSOE 0x0200 //变化SOE
#define FBOOP 0x0400 //遥控操作
#define FYCRDY 0x0800 //遥测信息
//其他标志
#define TIME100MS 0x1000 //100MS扫描标志
#define FTXAVAIL 0x2000 //数据发送有效
#define FTXNEXT 0x4000 //续发请求标志
/*------------------------------------------------------------------*/
/*----------------------------时间结构------------------------------*/
/*------------------------------------------------------------------*/
#define DNPTIME 0x10
#define IEC101TIME 0x11
#define IEC101EXTTIME 0x12
__packed struct X1226Time_t{
INT8U Second;
INT8U Minute;
INT8U Hour;
INT8U Day;
INT8U Month;
INT8U Year;
INT8U Week;
INT8U YearH;
};
__packed struct AbsTime_t{
INT32U Minute;
INT16U Msecond;
};
__packed struct CP24Time_t{
INT8U Minute;
INT16U Msecond;
};
__packed struct SysTime_t{
INT16U Year;
INT8U Month;
INT8U Day;
INT8U Hour;
INT8U Minute;
INT8U Second;
INT16U MSecond;
};
__packed struct DnpTime_t{ //DNP时间结构
INT8U Times[6];
};
__packed struct IEC101Time_t{
INT16U MSecond;
INT8U Minute;
INT8U Hour;
INT8U Day;
INT8U Month;
INT8U Year;
};
/*------------------------------------------------------------------*/
/*--------------------YX/SOE/COS常量、结构定义----------------------*/
/*------------------------------------------------------------------*/
//YX值
#define YX_H 0x81
#define YX_F 0x01
__packed struct COS_t{ //COS量
INT16U No;
INT8U Status;
};
__packed struct SOE_t{ //SOE量
INT16U No;
INT8U Status;
struct AbsTime_t Time;
};
struct DBMSGCheck{ //数据库上发信息开辟的临时结构
INT16U Num;
INT16U DevID[8]; //受数据库最大关联个数限制
};
/*------------------------------------------------------------------*/
/*-------------------------遥控操作结构定义-------------------------*/
/*------------------------------------------------------------------*/
//遥控操作信息(DBINFO.Num)
#define BOSELECT 0x01 //遥控预置
#define BOOPERATE 0x02 //遥控执行
#define BOOPFAIL 0x04 //遥控失败,返回结果时使用
//遥控操作代码BOCode.Control
#define BODEL 0x20 //1:撤销;0:执行
#define BOCLOSE 0x40 //合闸操作
#define BOOPEN 0x80 //分闸操作,均为0时不区分,均为1时非法
//返回状态BOCode.Status
#define BORCOK 0x00 //请求已接受
#define BORCOVERTIME 0x01 //请求未被接受,原因:操作信息在选择操作超时后收到
#define BORCNOSELECT 0x02 //没有选择操作
#define BORCERROR 0x03 //请求未被接受,原因:请求的格式有错误
#define BORCNONSUPPORT 0x04 //控制操作不为该点所支持
#define BORCOPERATING 0x05 //该点正在被操作
#define BORCBSPERROR 0x06 //控制硬件有问题
struct BOCode{ //遥控控制块
INT8U Control;
INT8U Status;
};
//数据库遥控点的记录(DBBOOPInfo.Flag)
#define BOOPSELECT 0x0001 //遥控预置
#define BOOPOPERATE 0x0002 //遥控执行
#define BOOPDEL 0x0004 //撤销
#define BOOPERROR 0x0008 //失败
//数据库遥控通知消息结构
struct DBBOOPInfo{
INT16U SuperID;
INT16U SID;
INT16U DevID;
INT16U ID;
INT16U Status;
INT16U Flag;
};
#define DBBOOPINFOMAX 10 //最大十个存储
struct DBBOOPInfos{
INT16U Cur;
INT16U Max;
struct DBBOOPInfo Info[DBBOOPINFOMAX];
};
/*------------------------------------------------------------------*/
/*------------------------其它常量、结构定义------------------------*/
/*------------------------------------------------------------------*/
#define RESET_CLR 0xAA //冷启动
#define RESET_RETAIN 0x55 //热启动
#define RESET_DD 0xFF //不操作
__packed struct SysInfo_t{ //系统信息
INT16U AppID;
INT8U err[60];
};
#define LBUSE 0x01
#define LBNEXT 0x02
__packed struct LBInfo_t{ //录波
INT16U Flag; //低字节已使用!表示存在哪些录波文件。
INT16U FDIndex;
INT32U Start;
INT32U Length;
struct AbsTime_t Time;
};
/*------------------------------------------------------------------*/
/*----------------------------数据库结构----------------------------*/
/*------------------------------------------------------------------*/
struct DBInfo{ //数据库操作信息
INT16U DevID;
INT16U Type;
INT16U Start; //起始地址
INT16U Num;
INT16U SuperID; //仅对第二种逻辑库使用,不存在时等于DevID
};
#define STARTTYPE 0x8000 //相对起始地址标志
//读取数据库结构
struct SOE_Data{
INT8U CurPos;
struct SOE_t Soe;
};
struct COS_Data{
INT8U CurPos;
struct COS_t Cos;
};
struct SYS_INFO_Data{
INT8U CurPos;
struct SysInfo_t SysInfo;
};
/*
struct SOE_Data{
INT8U CurPos;
struct SOE_t Soe[BASE_NUM];
};
struct COS_Data{
INT8U CurPos;
struct COS_t Cos[BASE_NUM];
};
struct SYS_INFO_Data{
INT8U CurPos;
struct SysInfo_t SysInfo[BASE_NUM];
};
struct LB_Data{
INT16U wp;
INT16U rp;
struct LB_t LbData[LBLIMIT]; //录波数据
INT16U para[3];
INT16U reserved[3]; //保留备用
};*/
/*------------------------------------------------------------------*/
/*--------------------------数据库函数声明--------------------------*/
/*------------------------------------------------------------------*/
BOOL DBWrite(INT8U *pData, struct DBInfo *pInfo);
BOOL DBRead(INT8U *pData, struct DBInfo *pInfo);
void DBOperate(INT8U *pData, struct DBInfo *pInfo);
void ErrorInfo(INT16U AppID, const char *Msg);
BOOL DBClear(struct DBInfo *pInfo);
INT8U DBCheck(struct DBInfo *pInfo);
BOOL DBCreate(void);
BOOL DBInit(void);
BOOL NVRAMInit(void);
BOOL DBReadSOE(INT8U *pData, struct DBInfo *pInfo);
BOOL DBReadCOS(INT8U *pData, struct DBInfo *pInfo);
void DBReadLB(INT8U *pData, struct DBInfo *pInfo);
void DBWriteDD(INT8U *pData, struct DBInfo *pInfo);
void DBWriteSOE(INT8U *pData, struct DBInfo *pInfo);
void DBWriteYC(INT8U *pData, struct DBInfo *pInfo);
void DBWriteYCDOT(INT8U *pData, struct DBInfo *pInfo);
void DBWriteYX(INT8U *pData, struct DBInfo *pInfo);
void DBWriteYXDOT(INT8U *pData, struct DBInfo *pInfo);
void DBWriteLB(INT8U *pData, struct DBInfo *pInfo);
INT32U* SetDBAddr(INT16U Type, INT16U Num);
INT32U* GetDBAddr(INT16U DevID, INT16U Type, BOOL Primary);
void DBOpBORESQ(struct BOCode *pCode, struct DBInfo *pInfo);
void DBOpBORESP(struct BOCode *pCode, struct DBInfo *pInfo);
INT16U GetPortofDB(INT16U DevID);
void DBMsgSend(struct DBMSGCheck *Msg, INT16U Flag);
/*------------------------------------------------------------------*/
/*--------------------------时钟函数声明----------------------------*/
/*------------------------------------------------------------------*/
void GetX1226Time(void);
void GetTime(void *Time, INT8U Format);
void SetTime(void *Time, INT8U Format);
INT32U TimeSysToAbs(struct SysTime_t *pSys);
void TimeAbsToSys(INT32U tt, struct SysTime_t *pSys);
void TimeChange(void* DTime, INT8U DFormat, void* STime, INT8U SFormat);
void TimeChangeAbs(void* DTime, INT8U DFormat, void* STime);
void TimeChangeToAbs(void* DTime, void* STime, INT8U SFormat);
void TimeChangeToSYS(void* DTime, void* STime, INT8U SFormat);
void KillProg(INT8U Clear, INT8U Boot, BOOL Flag);
/*------------------------------------------------------------------*/
/*--------------------------中断函数声明----------------------------*/
/*------------------------------------------------------------------*/
void sw_asm_irq_handler(void);
void fiq_asm_handler(void);
void timer_init(void);
void Pio_init(void);
void watchdog_init(void);
void OSTickISR(void);
void timer0_asm_irq_handler(void);
void timer1_asm_irq_handler(void);
void timer2_asm_irq_handler(void);
void time10mscall(void *ptmr,void *callback_arg);
void time100mscall(void *ptmr,void *callback_arg);
void time1scall(void *ptmr,void *callback_arg);
/*------------------------------------------------------------------*/
/*----------------------主程序专用函数声明--------------------------*/
/*------------------------------------------------------------------*/
//虚拟数据
#ifndef BOOT_PROG
#define DBVMANAGE 0x10
INT32U DBVCreate(INT32U Length);
BOOL DBVWrite(INT8U* pData, INT32U Addr, INT32U Offset, INT32U Length);
INT32U DBVRead(INT8U* pData, INT32U Addr, INT32U Offset, INT32U Length);
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -