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

📄 101def.h

📁 详细介绍了arm7-at91r40008,的开发全过程
💻 H
字号:
/*------------------------------------------------------------------*/
/*模块名称:p101def.h                                            	*/
/*模块功能:101规约头文件定义										*/
/*编写日期:2005年3月                                         		*/
/*编写者:  dingding												*/
/*------------------------------------------------------------------*/

#ifndef P101DEF_H
#define P101DEF_H




/*------------------------------------------------------------------*/
/*-------------------------基本内容定义-----------------------------*/
/*------------------------------------------------------------------*/


#define NEXTFRAME 0x01



//基本规约配置
#define ASDULEN			250
#define LPDUSIZE		(255+6)	//链路层发送报文的最大长度
#define FRAMEBUFSIZE	512		//链路层接收缓冲区的最大长度
#define NORETRYNUM		0
#define MINRETRYNUM		1
#define	MAXRETRYNUM		3		//重发的最大次数
#define APDUSIZE	    255		//应用层收发缓冲区的最大长度
#define MAXFTUNUM	    60		//每条线上最多的FTU数

//链路层帧内容
#define	STARTCODE10		0x10		//起始码
#define STARTCODE68		0x68		//起始码
#define ENDCODE			0x16		//停止码

//类型标识
#define	M_SP_NA		1 	//不带时标的单点信息
#define	M_SP_TA		2 	//带时标的单点信息
#define	M_DP_NA		3 	//不带时标的双点信息
#define	M_DP_TA		4 	//带时标的双点信息
#define	M_ST_NA		5 	//步位置信息
#define	M_ST_TA		6 	//带时标的步位置信息
#define	M_BO_NA		7 	//子站远动终端状态
#define	M_ME_NA		9 	//测量值,规一化值
#define	M_ME_TA		10 	//带时标的测量值,规一化值
#define	M_ME_NB		11 	//测量值,标度化值——新标准中,我们目前应使用的类型。替代原来的M_ME_NA
#define	M_ME_TB		12 	//带时标的测量值,标度化值
#define	M_ME_NC		13 	//测量值,短浮点数
#define	M_ME_TC		14 	//带时标测量值,短浮点数
#define	M_IT_NA		15 	//电能脉冲记数量
#define	M_IT_TA		16 	//带时标的电能脉冲记数量
#define	M_EP_TA		17 	//带时标的继电保护或重合闸设备单个事件
#define	M_EP_TB		18 	//带时标的继电保护装置成组启动事件
#define	M_EP_TC		19 	//带时标的继电保护装置成组输出电路信息事件
#define	M_PS_NA		20 	//具有状态变位检出的成组单点信息
#define	M_ME_ND		21 	//不带品质描述的测量值,规一化值
#define	M_EI_NA		70 	//初始化结束
#define	M_BD_NA		232 //BCD码值

#define C_SC_NA		45	//单点遥控命令
#define	C_DC_NA		46 	//双点遥控命令
#define	C_RC_NA		47 	//升降命令
#define	C_SE_NA		48 	//设定命令
#define	C_BO_NA		51 	//32位的位串

#define	C_IC_NA		100 	//召唤命令
#define	C_CI_NA		101 	//电能脉冲召唤命令
#define	C_RD_NA		102 	//读数据命令
#define	C_CS_NA		103 	//时钟同步命令
#define	C_TS_NA		104 	//测试命令
#define	C_RP_NA		105 	//复位进程命令
#define	C_CD_NA		106 	//延时获得命令

#define	P_ME_NA		110 	//装载参数命令,规一化值
#define	P_ME_NB		111 	//装载参数命令,标度化值
#define	P_ME_NC		112 	//装载参数命令,短浮点数
#define	P_AC_NA		113 	//激活参数

#define	F_FR_NA		120 	//文件已准备好
#define	F_SR_NA		121 	//节已准备好
#define	F_SC_NA		122 	//召唤目录﹑选择文件﹑召唤文件﹑召唤节
#define	F_LS_NA		123 	//最后的节﹑最后的段
#define	F_AF_NA		124 	//确认文件﹑确认节
#define	F_SG_NA		125 	//段
#define	F_DR_NA		126 	//目录
#define F_FY_NA		141   //文件传输

#define M_FA_TB		142   //故障处理结果信息

//传送原因:
#define	PERCYC		1 	//周期/循环
#define	BACK		2 	//背景扫描
#define	SPONT		3 	//突发
#define	INIT_101	4 	//初始化
#define	REQ		    5 	//请求或被请求
#define	ACT		    6 	//激活
#define	ACTCON		7 	//激活确认
#define	DEACT		8 	//停止激活
#define	DEACTCON	9 	//停止激活确认
#define	ACTTERM		10 	//激活结束
#define	RETREM		11 	//远程命令引起的返送信息
#define	RETLOC		12 	//当地命令引起的返送信息
#define	FILE_101	13 	//文件传送
#define	INTROGEN	20 	//响应总召唤
#define	INTRO1		21 	//响应第1组召唤
#define	INTRO2		22 	//响应第2组召唤
#define	INTRO3		23 	//响应第3组召唤
#define	INTRO4		24 	//响应第4组召唤
#define	INTRO5		25 	//响应第5组召唤
#define	INTRO6		26 	//响应第6组召唤
#define	INTRO7		27 	//响应第7组召唤
#define	INTRO8		28 	//响应第8组召唤
#define	INTRO9		29 	//响应第9组召唤
#define	INTRO10		30  //响应第10组召唤
#define	INTRO11		31 	//响应第11组召唤
#define	INTRO12		32 	//响应第12组召唤
#define	INTRO13		33 	//响应第13组召唤
#define	INTRO14		34 	//响应第14组召唤
#define	INTRO15		35 	//响应第15组召唤
#define	INTRO16		36  //响应第16组召唤
#define	REQCOGCN	37  //响应计数量总召唤
#define	REQCO1		38 	//响应第1组计数量召唤
#define	REQCO2		39 	//响应第2组计数量召唤
#define	REQCO3		40 	//响应第3组计数量召唤
#define	REQCO4		41 	//响应第4组计数量召唤
#define UNKNOWNTYPEID   44      //未知的类型标识
#define UNKNOWNCOT      45      //未知的传送原因
#define UNKNOWNPUBADDR	46      //未知的应用服务数据单元公共地址
#define UNKNOWNTINFOADDR	47      //未知的信息对象地址

//信息体地址
#define LBI       0x01
#define HBI       0x400
#define LAI       0x701
#define HAI       0x900
#define LBO       0xB01
#define HBO       0xB80
#define LBCR      0xC01
#define HBCR      0xC80
#define LSPI      0xC81
#define HSPI      0xCA0
#define LBCD      0xCC1
#define HBCD      0xCE0
#define RTUSTATUS 0xCE9

//文件操作
#define MAXFILETRANLEN 240
//Command 
#define FILE_READINIT   0
#define FILE_READ       1
#define FILE_WRITEINIT  2
#define FILE_WRITE      3
#define FILE_DELETE     4
#define FILE_RENAME     5
//Type
#define TYPE_FILE       0
#define TYPE_DIR        0x80
//Status
#define STA_OK          0
#define STA_END         1
#define STA_INEXIST     2
#define STA_BUSY        3
#define STA_CHECKERR    4
#define STA_ERROR       5
#define QFT_CMD 0x7F
#define QFT_TYP 0x80

/*------------------------------------------------------------------*/
/*-------------------------基本结构定义-----------------------------*/
/*------------------------------------------------------------------*/

//固定帧长结构
__packed struct FLPDUFRAME
{
	INT8U	StartField;		//起始字节
	INT8U	Control;		//链路控制域
	INT8U	LAddress;		//链路地址域
	INT8U	CheckCode;		//校验码
	INT8U	EndField;		//结束字符
};

//可变帧长结构
__packed struct CLPDUFRAME
{
	INT8U	StartField1; 	//起始字节
	INT8U	FramLength1;	//报文长度
	INT8U	FramLength2;	//重复上一个字节
	INT8U	StartField2; 	//起始字节
	INT8U	Control;		//链路控制域
	INT8U	LAddress;	    //链路地址域
	INT8U	LPDU[ASDULEN];	//应用层数据
	INT8U	CheckCode;	    //校验码
	INT8U	EndField;	    //结束字符
};

//ASDU单元头结构
__packed struct PASDUHead
{
	INT8U	TypeID;		//类型标识
	INT8U	VSQ;		//结构限定词
	INT8U	COT;		//传送原因
	INT8U	PubAddr;	//公共地址
	INT16U	InfoAddr;	//信息体地址
};

//ASDU数据结构
__packed struct PASDU
{
	struct PASDUHead Head;
	INT8U	Data[ASDULEN-sizeof(struct PASDUHead)];
};

#define BROADCASTADDR	0xFF

//其它结构定义
//控制域
#define P101_FUNCODE	0x0F
#define P101_FCV		0x10
#define P101_DFC		0x10
#define P101_FCB		0x20
#define P101_ACD		0x20
#define P101_PRM		0x40
#define P101_DIR		0x80

//可变结构限定词
#define P101_SQ			0x80
#define P101_VSQ		0x7F

//传送原因
#define P101_REASON		0x3F
#define P101_PN			0x40
#define P101_TEST		0x80

//信息元素
#define P101_BL			0x10	//是否被封锁
#define P101_SB			0x20	//是否被取代
#define P101_NT			0x40	//是否为当前值
#define P101_IV			0x80	//是否有效

#define SPI			0x01	//带品质描述的单点信息
#define DPI			0x03	//带品质描述的双点信息
#define VTI_VALUE	0x7F	//带瞬变状态指示的值
#define VTI_T		0x80
#define P101_OV		0x01	//品质描述
#define BCR_SQ		0x1F	//二进制计数器读数
#define BCR_CY		0x20
#define BCR_CA		0x40
#define BCR_IV		0x80 


//遥控命令限定词
#define DCO_DCS		0x03
#define DCO_QU		0x7C
#define DCO_SE		0x80

/*------------------------------------------------------------------*/
/*-------------------------通讯操作定义-----------------------------*/
/*------------------------------------------------------------------*/
//链路层始发站命令定义
#define	DLRESETRDL		0		//复位远方链路
#define DLRESETUSE		1		//复位用户过程
#define DLTESTDL		2		//测试链路功能
#define DLSENDCON		3		//发送确认命令
#define DLSENDNOCON		4		//发送不确认命令
#define DLREQACD		8		//请求响应确定访问状态
#define DLREQSTATUS		9		//召唤链路状态
#define DLREQDATA1		10		//召唤1级用户数据
#define DLREQDATA2		11		//召唤2级用户数据
#define MAINTSWITCH		12      //切换到维护规约

//链路层从动站命令定义
#define DLCON			0		//确认
#define	DLBUSYCON		1		//确认链路忙未接收报文
#define DLRESDATA		8		//以数据响应请求帧
#define DLNODATA		9		//无所召唤的数据
#define DLSTATUSOK		11		//响应链路状态或回答请求帧
#define DLNOWORK		14		//链路未工作
#define DLNOFIN			15		//链路未完成

//链路层到应用层的命令(WORD)DLCommand内容
#define DL_RESETUSE		1	//复位用户进程
#define DL_TESTDLINK	2	//测试链路
#define	DL_SENDCON		3	//链路收到03命令
#define	DL_SENDNOCON	4	//链路收到04命令
#define	DL_LINKDISABLE	5	//链路无效
#define	DL_LINKENABLE	6	//链路有效,链路收到0(确认)向应用层发此命令
#define	DL_NODATA		7	//链路层收到无数据应答
#define	DL_SENDDATA		8	//链路收到08命令
#define	DL_SCAN1S		9	//平衡模式链路例行查询应用层任务(YK、定时全数据、定时对钟、定时电度)
#define DL_CALLDATA1	10	//取一级数据
#define DL_CALLDATA2	11	//取二级数据
#define DL_CALLUDATA	12	//取紧急数据,平衡模式子站主动发送一级数据(COS、SOE)用
#define DL_CALLDBMSG	13	//子站平衡模式用于取数据库消息,以便及时处理遥控等信息。
#define	DL_APPCON		14	//收到对03命令的确认,子站平衡式
#define DL_RESETDL		15	//收到复位链路命令,应用层确定是否发初始化结束。子站非平衡。

#define	DL_REC_ACD	0x8000	//该位置1链路接收到的ACD=1,否则为0
#define	DL_FCBOK	0x4000	//FCB反转正确,=1正确。

//应用层到链路层的命令(WORD)AppCommand
#define	APP_APPCON		0	//应用层对收到的数据做应答
#define APP_RESETUSE	1	//复位用户进程
#define APP_TESTDLINK	2	//测试链路
#define	APP_SENDCON		3	//发送03命令
#define	APP_SENDNOCON	4	//发送04命令
#define APP_NODATA		5	//应用层无数据,子站非平衡
#define	APP_SENDDATA	8	//发送08命令
#define APP_REQSTATUS	9	//询问链路状态
#define	APP_CALLDATA1	10	//请求一级数据
#define	APP_CALLDATA2	11	//请求二级数据
#define	APP_ALLDEVNOUSE	12	//应用层所有设备不可用
#define	APP_NOJOB		13	//应用层无任务//主站平衡模式有效
#define	APP_APPDIABALE	14	//应用层无效

#define	APP_HAVEDATA1	0x8000	//该位置1说明应用层有一级数据,否则为0;子站非平衡、平衡模式总召唤、对钟


#define	QRPRESET	1	//进程总复位
#define	QRPSOEIND	2	//复位事件缓冲区等待处理的带时标的信息
#define QRPCOLD		128	//冷复位


//链路层从动站的运行状态,目前没使用
enum	DLSECSTATUS
{
	SECDISABLE =0,	//从动站链路层没复位
	SECENABLE,		//从动站链路层可以使用
	SECDLSTATUS,	//
	SECDLBUSY		//从动站链路层忙
}; 

//链路层启动站的运行状态
enum	DLPRISTATUS
{
	PRIDISABLE =0,	//启动站链路层没复位
	PRIWAITSTATUS,	//启动站链路层等待回答链路状态
	PRIWAITRSCON,	//启动站链路层等待复位链路确认
	PRIWAITINITEND,	//主站等待子站初始化结束帧???
	PRIENABLE,		//启动站链路层可以使用
	PRISENDCON,		//启动站链路层等待数据确认
	PRIREQRES,		//启动站链路层等待请求响应
	PRIDLBUSY		//启动站链路层忙
};

//链路层的通讯状态统计
struct	DLCOMSTATUS
{

	INT16U	ADDCheckErr;	//校验和统计
	INT16U	OtherError;		//其它错误统计
	INT16U	SendAPPNum;		//向对方链路发送的应用层包数
	INT16U	RecAPPNum;		//接收的应用层包数
	INT16U	RecMISIErr;

};

//发送进程状态记忆
enum	DLTXDSTATUS		//不需要?
{
	TXDSEND,	//发送报文第一帧状态
	TXDWAIT		//发送报文第一帧状态
};		

//链路层接收状态
enum	DLRXDSTATUS
{
	RXDSTART=0,		//寻找起始标志状态
	RXDHEAD,		//寻找报文头
	RXDCONTINUE 	//接收后续报文
};

struct DLDevInfo
{
	INT16U	DevID;
	INT16U	DestAddr;		//目的地址——即子站链路地址
	INT16U	SourceNo;		//源地址——即本机地址
	
	INT8U	TlaConCode;		//发送的控制码
	INT8U	FCBNoTurnNum;	//FCB未翻转计数
	
	enum	DLPRISTATUS	DLPriStatus;	//链路层启动站状态
	
	
	
	enum 	DLSECSTATUS	DLSecStatus;	//链路层从动站状态

	BYTE	RlaConCode;		//接收的控制码


	BYTE	FlagData1;		//一级数据标志
	
	BYTE	StartDL;		//开始链路过程,平衡模式判断链路过程是否结束的标志
	BYTE	RemoteDLOK;		//复位远方链路成功,平衡模式
	BYTE	LocalDLOK;		//本地链路复位成功,平衡模式
	
	struct	 DLCOMSTATUS 	ComStatus;	//通信状态统计	
};

__packed struct SOECP24Time{	//短时标SOE结构
	INT16U	No;
	INT8U	Status;
	INT16U	Msecond;	
	INT8U	Minute;
};

__packed struct SCDYX{	//SCD遥信结构
	INT16U	InfoAddr;
	INT16U	ST;
	INT16U	CD;
	INT8U	QDS;
};


#endif

⌨️ 快捷键说明

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