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

📄 secapp.h

📁 详细介绍了arm7-at91r40008,的开发全过程
💻 H
字号:
#ifndef	_SECAPP_H
#define _SECAPP_H


//Data1.Flag
#define HaveInitEnd  0x00000001
#define	HaveCOS	0x00000002
#define HaveSOE	0x00000004
#define HaveFA	0x00000008
#define HaveYK  0x00000010
#define CallAllData  0x00000020
#define CallClock  0x00000040
#define CallDD  0x00000080
#define CallTimeDelay 0x00000100
#define CallReadData	0x00000200
#define FreezeDD  0x00000400
#define CallParaSet 0x00001000
#define CallReset 0x00002000
#define CallSetNVA 0x00004000
#define CallTest 0x00008000
#define HaveNVA	 0x00010000
#define ProtectCon 0x00020000
//#define ProtectData	0x00040000
#define HaveHisDD 0x00080000

//Data2Flag
#define BackData	0x0001
#define PerCycData	0x0002
#define ProtectData 	0x0004
#define UpLoadFile  	0x0008

#define BIETFRAME   0x01
#define BIENTFRAME  0x02
#define FAPROCFRAME 0x04

#define WAITDLTIME 5
#define MAKEWORD(low,high)  ((unsigned short)((unsigned char)(low) | (((unsigned short)((unsigned char)(high))) << 8)))
#define LOBYTE(w)           ((unsigned char)(w))
#define HIBYTE(w)           ((unsigned char)((unsigned short)(w) >> 8))
#define LOWORD(l)           ((unsigned short)(l))
#define HIWORD(l)           ((unsigned short)((unsigned long)(l) >> 16))

//设备管理
#define ACTDEVINDEX		0x01
#define	NVAACTDEV		0x02


enum PMASTERUseStatus{NOUSE=0,ALLDATA,INUSE,WAITDLSTATUS,WAITCON};
enum PFrmState{Polling,ResetDL,Cdt,Group,BI,File};
enum PFileStatus{FileOver=0,CallDir,SelectFile,CallFile,CallSection,SendSegment,LastSegment,LastSection,LastFile};

__packed struct PNva{  //变化遥测结构
  	INT8U Flag;
  	INT16U Value;
  	INT16U TempValue;
  	BOOL WillSend;
 };

__packed struct YcPara
{
	INT16U DeadValue;
	INT16U UpLimit;
	INT16U LowLimit;
};


__packed struct PData1{   //一级数据结构
 	INT32U 	Flag;
 	BOOL 	COT;
 	INT16U 	FAProcNum;//发送的FA数目
 	INT16U  PubAddr;
 	INT16U	InfoAddr;	//信息体地址——2

};


__packed struct PGroupTrn{
  	INT8U 	TypeID;
  	BOOL 	First;
  	INT8U 	COT;
  	INT16U  PubAddr;
 	INT16U 	DevIndex;//分组发送的当前设备序号
  	INT16U 	GroupNo;
  	INT16U	InfoAddr;	//信息体地址——2
 	INT8U   Description;
 };

//定时保存历史电度
#define TIMETOSAVEDATA	60   //时间间隔
#define SAVENUM	(24*30)//保存历史电度的时间点数

__packed struct DATAFORMAT
{
	struct AbsTime_t time;
	INT32S *Data;
};


__packed struct SAVEDATABUF
{
	struct DATAFORMAT  saveData[SAVENUM];
};

__packed struct Counter{		//电度数据信息体结构
	INT32U	Value;
	INT8U	SQ;
};
	
struct AppInfo{
	INT8U	Tmpbuf[512];	//临时使用缓冲区
	struct PSec101_2002Pad Sec101Pad;    //规约面板
 	BOOL	BalanMode;
 	INT8U	InitFlag;
 	INT8U   TimerCounter;

  	//应用层服务调用带入的参数
	INT16U	AppCommand;
	INT16U	DLCommand;
	INT16U	LengthIn;
	INT16U	LengthOut;
  	INT8U  *RxMsg;	//应用层接收数据指针
  	INT8U  *TxMsg;	//应用层输出数据指针

  	struct PData1 Data1;
  	struct PGroupTrn GroupTrn;
  	struct PGroupTrn LastGroupTrn;
  	struct PGroupTrn GroupTrnDD;

  	INT16U	Data2Flag;

  	INT16U 	ActDevIndex;//
  	INT16U 	LastDevIndex;//记录最近一次发送变位YX,SOE,FA,的设备序号。
  	INT16U	LastDevType;
 	INT16U	LastDevNum;
  	INT16U 	BODevIndex;//记录遥控命令的设备序号
  	INT16U 	NvaActDevNo;//发送变化遥测的当前设备序号。
  	INT16U	NvaActDevCur;	//当前设备当前已发送变化遥测序号
  	
        //动态开辟数据存储区
	INT16U	*YCValue;	//遥测值
	INT16U	*YCDVal;	//遥测死区值
	INT16U  *AIMaxVal;      //遥测满值
	struct Counter	*CounterData;	//电度值
	INT32U  *LastCounterData; //前一次读取的电度值
	
	
	//文件上传;一个文件当做一个节来处理。
	INT32U	FileReadPtr;
	INT16U	CurrentFileName;
	INT32U	CurrentFileSize;
	INT16U	CurrentInfoAddr;
	INT16U	CurrentZBNo;
	struct  DIRUNIT DirUnit;
	enum PFileStatus  FileStep;
	INT8U	FileCheckSum;
	
	//保护定值
	INT8U	ProtectValue[33];//最后一个字节,可以用做成功标志
	INT16U  RxProtectPubAddr;//设置定值的地址
	
	INT8U	EditDDCon;
	
	//历史电度保存时间
	struct IEC101Time_t HisDDTime;
	enum   {Start=0,EditCon,SendData,SendOver} HisDDStatus;
	
	//历史电度
	INT16U	HisDDDevNo;//当前历史电度设备序号
        INT16U  HisDDReadPtr;
        INT32U HisCounterData[20];//保存历史电度
	//定时保存电度
	//#ifdef	SAVEKWH
	//struct SAVEDATABUF *hisDataPtr ;
	INT32S hisDataPtr;
	unsigned short HisDDCycle;
	
  	enum PMASTERUseStatus MasterStatus;//zzw

  	INT16U 	ResetPubAddr;
  	INT16U 	ResetInfoAddr;
  	INT8U 	ResetGRP;
  	INT16U 	ResetCount;
  	INT8U 	ResetFlag;

  	INT16U 	TestPubAddr;
  	INT16U 	TestInfoAddr;
  	
  	INT32U 	AllDataInterval;
  	INT32U 	NvaInterval;
  	INT32U 	ScanData2Count;
 	INT32U	AllDataCount;
	INT32U	CounterCount;
	INT32U	WatchDogCount;

        
	//保存遥控临时信息
	INT8U	YKTypeID;
	enum	{NOTUSE=0,YKERROR,YKSETCON,YKEXECON,YKCANCELCON,YKTERM}YKStatus;
	//struct	DCO DcoTemp;
	INT8U DcoTemp;
	//struct	SCO ScoTemp;
	INT8U ScoTemp;
	//struct	RCO RcoTemp;
	INT8U YKIDTemp;
	INT16U 	SDTTime;//存储主站发送的SDT时间
	INT16U 	TrTime; //子站从接收到发送延时获得命令的时间间隔
	INT16U 	SendTime;//=SDTTime+TrTime
	INT16U 	TimeDelay;
	struct  AbsTime_t SecSysTimeR;//子站收到C_CD_NA时的系统时间
	struct  AbsTime_t SecSysTimeT;//子站发送M_CD_NA时的系统时间
	struct  AbsTime_t OldSysTime;//子站设置时钟前的系统时间

	struct  AbsTime_t CounterTime;//冻结电度的时间

	INT16U 	BackScanTime;//分,背景数据扫描间隔
    	INT16U 	CycScanTime;//秒,周期循环数据扫描间隔
	INT16U 	BackScanCount;
    	INT16U 	CycScanCount;
	INT16U  HisDDSaveCount;
	INT8U   FirstHisDDSaveCount; 

	INT8U 	ReadTimeFlag;

	//错误命令处理
	BOOL	HaveWrongData;
	INT16U	WrongDataLength;
	INT8U	WrongData[256];

	enum 	PFrmState Status;
	enum 	PFrmState LastStatus;
	INT8U 	BIFrame;
	INT8U 	EditAllDataCon;
	INT8U	AllDataNum;

  	enum 	PFrmState LastFrame;

	//
	INT16U FixFrmLength;//固定帧长度
	INT16U AsduHeadLength;//ASDU头长度,类型标志到信息体地址
	INT16U LinkAddrSize;
	INT16U CotSize;
	INT16U PubAddrSize;
	INT16U InfoAddrSize;
	INT16U CotLocation;
	INT16U PubAddrLocation;
	INT16U InfoAddrLocation;
	INT16U BroadCastAddr;

	INT8U RxTypeID;
	INT8U RxVsq;
	//union	PCOT RxCot;
	INT8U RxCot;
	INT16U RxPubAddr;
	INT32U RxInfoAddr;
	INT8U *pRxData;

	INT8U *pTxTypeID;
	//struct PVsq *pTxVSQ;
	INT8U *pTxVSQ;
	INT8U *pTxInfoAddr;
	INT8U *pTxData;
};

	void InitPara(INT8U Port);
	void S101ProcData1(INT8U Port);
	void S101ProcData2(INT8U Port);
	void S101ProcControl(INT8U Port);  //处理遥控
	void S101ProcAllDataCall(INT8U Port);
	void S101ProcDDCall(INT8U Port);
	void S101ProcTimeDelay(INT8U Port);
	void S101ProcClock(INT8U Port, BOOL Conf); //处理对钟
	void S101ProcReset(INT8U Port);
	void S101ProcTest(INT8U Port);
	//void ProcReadData(void);
	void EnCodeInitEnd(INT8U Port);
	void ProcTaskMsg(INT8U Port);//处理遥控返校信息
	BOOL EnCodeCtrlRet(INT8U Port, struct DBBOOPInfo* Info);  //遥控返校
	void EditYKTerm(INT8U Port);//遥控结束
	BOOL S101GetActDevIndexByAddr(INT8U Port, INT16U Addr);
	void EnCodeBIENT(INT8U Port);  //编辑COS  将来这里要区分单点双点yx
	void S101EnCodeSOE(INT8U Port); //编辑SOE //暂时不考虑双点遥信
	void S101EnCodeAllDataConf(INT8U Port);//总召唤确认帧
	void S101ProcAllData(INT8U Port); //处理全数据
	void EnCodeGroupEnd(INT8U Port);//结束帧
	void EnCodeDDGroupEnd(INT8U Port);//结束帧
	void S101EnCodeNVA(INT8U Port);  //编辑变化遥测数据;
	void FreezeCounter(INT8U Port);
	void EnCodeCounterConf(INT8U Port);//
	INT8U S101EnCodeCounter(INT8U Port,INT16U BeginNo,INT16U EndNo,INT16U *pNum);//从数据库取电度,处理后,发到链路层。
	void ProcCounter(INT8U Port) ;//处理电度zzw
	INT8U SetCounterMsg(INT8U Port,INT16U DevIndex,INT16U BeginNo,INT16U EndNo,INT16U *pNum);
	BOOL CheckDDGroup(INT8U Port);
	BOOL GetNextDDDev(INT8U Port);
	void EnCodeTimeDelay(INT8U Port);
	void S101EnCodeClock(INT8U Port);//发送子站设置时钟前的系统时钟
	void EnCodeReset(INT8U Port);
	void EnCodeTest(INT8U Port);
	BOOL S101_2002CheckNVA(INT8U Port);
	BOOL S101GetNextActDevIndex(INT8U Port, INT16U ActDev, INT8U Flag);
	BOOL InitSec101App(INT8U Port, struct PortAppInfo* PortCfg);
	void OnTimer(INT8U Port);
	void SetUMsgFlag(INT8U Port);
	
	void Sec101_2002AppProc(INT8U Port, INT8U *bufin,INT16U lengthin,INT16U dlcommand,
				INT8U* bufout,INT16U* lengthout,INT16U*appcommand);
	void P101_2002SecTask(struct SysPort *Info, struct PortAppInfo* PortCfg);
	void S101_2002GetYcDeadValue(INT8U Port, INT32U DValue);
	INT8U SetMsg(INT8U Port,INT8U *pBuf,INT8U pNum);
	INT16U S101GetAddrByDevIndex(INT8U Port, INT16U DevID);
	INT16U S101GetActDevNo(INT8U Port, INT16U DevID, INT16U Flag);
	
	//文件上传
	void ProcFileCall(INT8U Port);
	void SendDir(INT8U Port);
	void FileReady(INT8U Port);
	void SectionReady(INT8U Port);
	void SendSegments(INT8U Port);
	void SendLastSegment(INT8U Port);
	void SConfirm(INT8U Port);
	void SendLastSection(INT8U Port);
	void ReadDirList(INT8U Port);

	void ReadDirList1(INT8U Port);
	void ReadDirList2(INT8U Port);
	void SendSegment1(INT8U Port);
	void SendSegment2(INT8U Port);

	
	//保护定值
	void S101SetProtect(INT8U Port);
	void SendProtectCon(INT8U Port);
	void S101CallProtect(INT8U Port);
	void SendProtectData(INT8U Port);
	
	//定时保存电度
	BOOL ReadKWHHistoryData(INT8U Port,struct AbsTime_t absTime,long *KWH,unsigned short KWHNum);
	//初始化NVRAM历史电度区
	BOOL InitHisDataBuf(INT8U Port);
	BOOL SaveKWHToBuf(INT8U Port);
	
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -