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

📄 secdlink.h

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

struct LinkInfo
{
	enum DLPRISTATUS DLPriStatus;	//链路层启动站状态
	enum DLTXDSTATUS TxdStatus;	//发送状态
	enum DLRXDSTATUS RxdStatus;	//接收状态

	INT32U Baudrate;
	INT32U TimeOutValue;
	INT8U  BalanMode;			//平衡式=1 非平衡式=0
	INT16U SourceNo;	//源地址——即本机地址
	INT8U  RlaConCode;	//接收的控制码
	INT8U  FCBNoTurnNum;  //FCB未翻转计数
	INT8U  TlaConCode;	//发送的控制码
	INT16U wChanNo;	//通道号
	INT16U RetryCount;	//重试次数
	INT8U  LastControl;

	INT16U 	FrameHead;	//组帧时数据头在发送缓冲区的位置
	INT16U 	TxdHead;	//
	INT16U 	TxdTail;	//

	INT16U 	TxdTail_Pri;

	INT16U 	TxdTail_Sec;

	INT16U	RxdHead;	//处理数据的头指针
	INT16U 	RxdTail;
	INT16U 	RxdLength;

	INT32U 	TimeOutTick;			//超时记数器
	INT32U 	TimeOutTick_Pri;		//启动站超时记数器
	INT32U 	TimeOutTick_Sec;		//从动超时记数器
	INT32U 	TimeOutTickCopy;		//超时记数器拷贝

	BOOL	FlagData1;			//一级数据标志

	struct	 DLCOMSTATUS 	ComStatus;	//通信状态统计

	INT8U	StartDL;	//开始链路过程,平衡模式判断链路过程是否结束的标志
	INT8U	RemoteDLOK;	//复位远方链路成功,平衡模式
	INT8U	LocalDLOK;	//本地链路复位成功,平衡模式

	INT32U	DLIdleTime;	//链路空闲时间,链路空闲超过这个时间,每1秒钟链路查询应用层一次,为了一级数据任务的及时处理
	INT32U	IdleTimeCount;

	INT8U	RxdBuf[FRAMEBUFSIZE];	//接收缓冲区
	INT8U	TxdBuf[2*LPDUSIZE];			//发送缓冲区
	INT8U	TxdBuf_Pri[2*LPDUSIZE];			//发送缓冲区 ,暂存启动站发送的数据,重发时用
	INT8U	TxdBuf_Sec[2*LPDUSIZE];			//发送缓冲区 ,暂存从动站发送的数据,重发时用
 	INT8U	IEC_DIR;	//方向位,平衡式有效,非平衡=0
        //
	INT16U FixFrmLength;//固定帧长度
	//unsigned short AsduHeadLength;//ASDU头长度,类型标志到信息体地址
	INT16U LinkAddrSize;

	INT32U  rc;
};
	
	/*链路层接收启动站命令函数*/
	void	S101_2002RecResetDL(INT8U Port);		//复位链路
	void	S101_2002RecReqDLStatus(INT8U Port);		//请求链路状态
	/*链路层接收从动站命令函数*/
	void	RecConf10(INT8U Port);		//确认
	void	RecDLSta(INT8U Port);			//链路状态

	/*链路层发送启动站命令函数*/
	void	SecEditE5(INT8U Port);
	void	EditFra10(INT8U Port, INT8U Function);
	void	S101_2002EditFra68(INT8U Port, INT8U Function,INT16U FrameLength);
	void	TimeOutFun(INT8U Port, INT8U FailType, INT8U Prm);

	/*数据接收处理*/
	BOOL	S101_2002ExeDLFun10(INT8U Port);	//检测10帧的正确性
	BOOL	S101_2002ExeDLFun68(INT8U Port);	//检测68帧的正确性
	void	S101_2002ExeDLFunCode10(INT8U Port);		//处理10命令
	void	ExeDLFunCode68(INT8U Port);		//处理68命令
	
	/*链路层发送从动站命令函数*/
	void	EditSec101_2002Fra10(INT8U Port, INT8U Function);
	void	EditSec101_2002Fra68(INT8U Port, INT8U Function,INT16U FrameLength);


	INT8U	CheckSum(INT8U Port, INT8U *RxdBuf);	//校验

	//环路延时计算
	INT32U	TimeDelay(INT8U Port, INT16U i);


	//重发启动站缓冲区数据
	void	SecSendPriDataToMISI(INT8U Port);

	//重发从动站缓冲区数据
	void	SendSec101_2002DataToMISI(INT8U Port);

	void	S101_2002DLSendProc(INT8U Port);
	BOOL	Init101SecDLink(INT8U Port, struct PortAppInfo* PortCfg);

	//检测有效数据帧
	void	S101_2002SearchFrame(INT8U Port);

	//读MISI数据
	void S101RecMISIData(INT8U Port, BOOL Flag);

	//发送缓冲区中的数据,写MISI接口
	BOOL	S101_2002SendDataToMISI(INT8U Port);
	//平衡模式处理后续数据
	void	SendDataEnd(INT8U Port);
		//超时处理函数
	void	TimeOut(INT8U Port);

	//启动链路过程
	void	CallDLStatus(INT8U Port);

	//链路状态检测
	BOOL	DLStatusCheck(INT8U Port);
	void	CallUData(INT8U Port);//取紧急数据
	void	CallUMsg(INT8U Port);//取遥控消息

	void S101_2002ExeDLFunCode68(INT8U Port);
#endif

⌨️ 快捷键说明

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