📄 101def.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 + -