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

📄 dnpsec.h

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


/*------------------------------------------------------------------------
							  [常数说明]
------------------------------------------------------------------------*/
/*-------------------------------物理层--------------------------------*/
#define PL_DATA				0					/*物理层服务类型*/
#define PL_INIT_DCE			1
#define PL_LINK_PSN			2
#define PL_DISLINK_PSN		3
#define PL_STATUS			4

#define PL_CF_SUCCESS		0					/*物理层返回给链路层的Confirm值*/
#define PL_CF_FAIL    		1
#define PL_CF_NODONE		2
#define PL_CF_BUSY			3
/*------------------------------ 链路层 -------------------------------*/
/*FT3帧控制字节*/
#define DIR_OUT				0x0					/*发向子站*/
#define PRM_YES				0x40				/*源发站*/
#define PRM_NO				0x0					/*回应站*/
#define FCV_YES				0x10				/*FCB有效*/
#define	FCV_NO				0x0					/*FCB无效*/
#define DFC_BUSY			0x10				/*回应站忙*/
#define DFC_IDLE			0x0					/*回应站闲*/
/*原方站功能码*/
#define FUNC_RESET			0x0					/*使远方链路复位*/
#define FUNC_RESET_USER		0x1					/*使用户过程复位*/
#define FUNC_TEST			0x2					/*链路测试*/
#define FUNC_DATA_ACK		0x3					/*需确认用户数据*/
#define FUNC_DATA_NACK		0x4					/*非确认用户数据*/
#define FUNC_POLL			0x9					/*链路查询*/
/*副方站功能码*/
#define FUNC_ACK			0x0					/*肯定的确认*/
#define FUNC_NACK			0x1					/*报文未收到, 链路忙*/
#define FUNC_STATUS			0x11				/*回应链路状态*/
/*链路层服务类型*/
#define DL_SEND_CF			0
#define DL_SEND_NOCF		1
#define DL_FAST_CF			2
#define DL_FAST_NOCF		3
/*链路层返回给应用层的Confirm值*/
#define DL_CF_SUCCESS		0
#define DL_CF_FAIL    		1
#define DL_CF_TERM			2
#define DL_CF_NODONE		3
#define DL_CF_BUSY			4
/*------------------------------应用层---------------------------------*/
/*应用控制[Applicaiotn Control(AC)]*/
#define AL_AC_FIR			0x80				/*应用层第一段*/
#define AL_AC_FIN			0x40				/*应用层最后一段*/
#define AL_AC_CON			0x20				/*应用层确认*/
/*功能码[Function Code(FC)]*/
#define AL_FC_CONFIRM		0x00				/*确认*/
#define AL_FC_READ			0x01 				/*读*/
#define AL_FC_WRITE			0x02				/*写*/
#define AL_FC_SELECT		0x03				/*遥控预置*/
#define AL_FC_OPERATE		0x04				/*遥控执行*/
#define AL_FC_COLD_RESTART	0x0D				/*冷复位*/
#define AL_FC_WARM_RESTART	0x0E				/*热复位*/
#define AL_FC_MEASURE		0x17    			/*延时测量*/
#define AL_FC_REPLY			0x81    			/*回答*/
/*内部状态[Internal Indications(IIN)]*/
#define AL_IIN_ZERO			0x0000
#define AL_IIN_ALL			0x0001				/*广播确认*/
#define AL_IIN_CLASS1		0x0002				/*1类数据(SOE),YX*/
#define AL_IIN_CLASS2		0x0004				/*2类数据(变化遥测),SOE*/
#define AL_IIN_CLASS3		0x0008				/*3类数据(故障上报),变化遥测*/
#define AL_IIN_TIME			0x0010				/*请求对钟*/
#define AL_IIN_LOCAL		0x0020				/*远动无效*/
#define AL_IIN_ERROR		0x0040				/*设备异常*/
#define AL_IIN_RESTART		0x0080				/*设备复位*/
#define AL_IIN_UNFUN		0x0100				/*未实现功能码*/
#define AL_IIN_UNOBJ		0x0200				/*未实现对象类*/
#define AL_IIN_UNIND		0x0400				/*无效索引*/
#define AL_IIN_FLOW			0x0800				/*缓冲区溢出(COS/SOE)*/
#define AL_IIN_DONE			0x1000				/*已经操作*/
#define AL_IIN_PARA			0x2000				/*配置参数失效*/
#define AL_IIN_RESVD		0xC000				/*保留*/
/*对象组[Object Group(OG)]*/
#define AL_OG_YX			0x01				/*遥信对象*/
#define AL_OG_SOE			0x02				/*遥信变化事件对象*/
#define AL_OG_YK			0x0C				/*遥控对象*/
#define AL_OG_CON			0x14				/*记数对象*/
#define AL_OG_ANALOG		0x1E    			/*16位模拟量(30)*/
#define AL_OG_VAR1			0x20    			/*变化遥测(32)*/
#define AL_OG_TIME			0x32    			/*时间对象(50)*/
#define AL_OG_DELAY			0x34    			/*延时对象(52)*/
#define AL_OG_CLASS			0x3C    			/*类对象(60)*/
#define AL_OG_FILE			0x46    			/*文件对象(70)*/
#define AL_OG_STATUS		0x50    			/*状态回答(80)*/
#define AL_OG_ROUT			0x5F				/*路由对象(扩充)*/
/*对象变化[Object Variation(OV)]*/
#define AL_OV_YX_2			0x02				/*带状态的二进制输入*/
#define AL_OV_SOE_N_TIME	0x01				/*不带时间*/
#define AL_OV_SOE_A_TIME	0x02				/*带绝对时间*/
#define AL_OV_SOE_R_TIME	0x03				/*带相对时间*/
#define AL_OV_YK_1			0x01				/*遥控RELAY输出块*/
#define AL_OV_A_16BIT		0x04    			/*无标志16位模拟量输入*/
#define AL_OV_A_32BIT		0x05				/*无标志32位计数器*/
#define AL_OV_CLASS_1		0x01				/*一类数据*/
#define AL_OV_CLASS_2		0x02				/*二类数据*/
#define AL_OV_T_48BIT		0x01    			/*48位毫秒绝对时间*/
#define AL_OV_D_FINE		0x02    			/*16位毫秒相对时间*/
#define AL_OV_R_1			0x01				/*路由对象(扩充)*/
/*文件对象*/
#define AL_FILE_WRITE		3					/*文件功能码-写*/
#define AL_FILE_READ		20					/*文件功能码-读*/
#define AL_FILE_REPLY		0xFF				/*文件功能码-回答*/


#define DNP_AL_YK_DEL		0x20				/*遥控撤销*/
#define DNP_AL_YK_H			0x40				/*遥控合(CLOSE)*/
#define DNP_AL_YK_F			0x80				/*遥控分(TRIP)*/
#define DNP_AL_YX_H			0x81				/*遥信合*/
#define DNP_AL_YX_F			0x01				/*遥信分*/
/*------------------------------------------------------------------------
							     [类型说明]
------------------------------------------------------------------------*/
/*-------------------- 应用层提供给链路层的数据包 ---------------------*/
typedef __packed struct {
		INT8U 	service;		    			/*服务类型*/
		INT16U 	dest;			    			/*目的地址*/
		INT8U 	buf[2048];		    			/*数据包2048*/
		INT16U 	count;			    			/*包长度249*N+M*/
		BOOL 	ready;			    			/*表示该数据包是否准备好*/
		INT16U 	send_time;		    			/*发送时间*/
		INT8U 	time_service;	    			/*完成服务的保证时间*/
	} stOPacket;
/*-------------------- 链路层提供给应用层的数据包 ---------------------*/
typedef __packed struct {
		INT16U 	source;			    			/*源地址*/
		INT8U 	buf[2048];		    			/*包缓存*/
		INT16U 	count;			    			/*包长度 249*N+M*/
		BOOL 	ready;			    			/*表示该数据包是否准备好*/
		INT16U 	rec_time;		    			/*接收时间*/
	} stIPacket;
/*--------------------- 链路层给次物理层的数据帧 ----------------------*/
typedef __packed struct {
		INT8U 	service;		    			/*服务类型*/
		INT8U 	buf[292];		    			/*FT3帧*/
		INT16U 	count;			    			/*帧长度*/
		BOOL 	ready;			    			/*表示该数据块是否准备好*/
		INT16U 	send_time;		    			/*传送时间*/
	} stOFrame;
/*--------------------- 次物理层给链路层的数据帧 ----------------------*/
typedef __packed struct {
		INT8U 	buf[292];		    			/*FT3帧*/
		INT16U 	count;			    			/*帧长度*/
		BOOL 	ready;			    			/*表示该数据块传输是否完成*/
		INT16U 	rec_time;		    			/*接收时间*/
	} stIFrame;

typedef __packed struct {
		INT16U	soep;
		INT16U  soep_tmp;
		INT16U	SoeRp;
	} SoeReadPoint;
typedef __packed struct {
	INT16U 	NameSize;
	INT8U 	FileType;
	INT8U 	Attributes;
	INT16U 	StartRecord;
	INT16U 	EndRecord;
	INT32U 	FileSize;
	INT8U 	TimeCreation[6];
	INT16U 	Permission;
	INT32U 	FileID;
	INT32U 	OwnerID;
	INT32U 	GroupID;
	INT8U	FileFunction;
	INT8U	Status;
	INT8U 	FileName[256];
	INT16U  RecordSize;
} stFileHead;

typedef __packed struct {
	INT16S	YcValue;
	BOOL	YcNo;
	INT8U   Reserve;
} VarYcValue;


#define DnpSecEnableYk 		0x0001
#define DnpSecEnableClock	0x0002
#define DnpSecEnableAllData	0x0004
#define DnpSecEnableDD		0x0008
#define DnpSecEnableBroadcastCloak 0x0010
//////////////////////////////////////////////////////////////////////////
//		规约面板的默认参数
//////////////////////////////////////////////////////////////////////////
#define DnpYkEn			TRUE
#define DnpClockEn 		TRUE
#define DnpAllDataEn	FALSE
#define DnpDdEn			FALSE
#define DnpAIDeadValue	5
#define DnpAllData		0
#define DnpDdTime		30
#define DnpDlDelay		0
#define DnpScanData2	5
#define DnpAlDelay		0
#define DnpClass1Data	9
#define DnpClass2Data	7
#define DnpClass3Data	0

struct DnpPadPara
{
	BOOL	EnYk;
	BOOL	EnClock;
	BOOL	EnAllData;
	BOOL	EnDD;
	INT16U  AIDeadValue;
	INT16U	AllData;    //发送全数据间隔 (从站方),单位:分(minute) 
	INT16U	DdTime;    //发送电度间隔(从站方),单位:分(minute) 
	INT16U	DlDelay;  //链路层通讯延时
	INT16U	ScanData2;    //上传变化遥测遥信时间间隔(从站方),单位:秒(Second)
	INT16U	AlDelay; //应用层通讯延时
	INT32U	Class1Data;
	INT32U	Class2Data;
	INT32U  Class3Data;
} ;



#define	Dnp_Dl_Ready	0x01
#define Dnp_Al_Ready	0x02
#define	Time1s			0x04
#define RxdFrame		0x08


BOOL InitDnpSecLink(INT8U Port, struct PortAppInfo* PortCfg);
void DnpSecTask(struct SysPort *info, struct PortAppInfo* PortCfg);
int DnpOnRx(INT8U port);
int ComFrame(INT8U port);
int Send(INT8U port);
void SplitPacket(INT8U port);
void FillBuffer(INT16U code,INT8U port);
void DL_Master(INT8U port);
void Request(INT8U func,INT8U port);
void HandleACK(INT8U port);
void DL_Slave(INT8U port);
void Reply(INT8U func,INT8U port);
int DlCheckSum(INT8U port);
int DnpFrame(INT8U port);
void OnApp(INT8U port);
void OnTick1s(INT8U port);
void RecConfirm(INT8U port);
void AppRes(INT8U port);
void SendStatus(INT16U iin,INT8U port);
void ResConfirm(INT8U port);
void SendYX(INT8U port);
void SendYC(INT8U port);
void SendDD(INT8U port);
void SendSOE(INT8U port);
void SendCOS(INT8U port);
void SelectYK(INT8U port);
void OperateYK(INT8U port);
void AppSend(INT16U iin, INT8U obj, INT16U count,INT8U port);
int  CheckAddr(INT16U addr,INT16U DesAddr,INT8U port);

INT16U AppYcVar(INT8U port);
void SendAllData(INT8U port);
void SendVarYC(INT8U port);
void YkRespond(struct SysPort *info, struct DBBOOPInfo *msg, INT8U port);
void AppFuntion(INT32U Class,INT8U port);
#endif /* _DNP_H */

⌨️ 快捷键说明

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