📄 secapp.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 + -