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