#ifndef _103PROC_ #define _103PROC_ #include "daq\daq_protocol.h" #define T103SENDBUFSIZE 300 #define DC_K_CALLTIME 0 //校时命令 #define DC_K_CALL1DATA 1 //1级召唤 #define DC_K_CALL2DATA 2 //2级召唤 #define DC_K_EXECCMD 3 //外部命令 //召唤组定义 #define DC_K_CALLALLDATA 20 //站总召唤 //发送命令定义 #define DC_K_YKSELECT 10 //遥控选择命令 #define DC_K_YKEXECUTE 11 //遥控执行命令 #define DC_K_YKCANCEL 12 //遥控撤消命令 struct S103_CONTROLFIELD { BYTE FC :4; //功能码 BYTE FCV:1; //FCB有效 BYTE FCB:1; //帧记数位 BYTE PRM:1; //启动报文 BYTE DIR:1; //方向 }; typedef union { S103_CONTROLFIELD CtrlField; BYTE BCtrlField; }S103_CONTROL_BYTE; enum E103_STATUS { STATUS_OVERTIME=0, //超时 STATUS_CRCERR, //CRC校验错 STATUS_NODATA, //无所请求的数据 STATUS_RXOK }; enum E103_LINKSTATUS { LSTATUS_INIT=0, //初始化状态 LSTATUS_RESET, //开始复位 LSTATUS_OK //链路处于空闲状态,允许接受应用层的命令和数据 }; class C103 : public CProtocol { uint8 m_rii; uint8 m_scn; int m_LastRxProtSoe; //收到保护事件自动在10秒后复归 int m_LastCallAllTime,m_LastSyncTime; E_CMD_SRCSORT m_cmdprotsort; //命令源的规约种类 PIPE_LABLE m_CmdSrc; //用于记录命令源,用于遥控返校或谐波分析 uint16 m_cmdsrc_rtu; //发出命令的通信装置号 uint8 m_cmdf; //发送对钟命令、遥控命令,不需要返回 void reset_protect_info(); protected: unsigned char m_ACDFlag; unsigned char m_MainFCBFlag; unsigned char m_SubFCBFlag; unsigned char m_OverTimeFlag;//超时标志 int m_CRC_ErrCnt; int m_LastSendTime; int m_RcvTimeOuts; //超时时间 int m_ReSendMaxCount; //重发次数 int m_ReSendCnt; //重发计数器 ==-1 未启动 E103_LINKSTATUS m_LinkStatus; //工作状态 BYTE m_SendBuf[T103SENDBUFSIZE]; int m_SendBufLen; public: virtual sint32 TxProc(); virtual sint32 RxProc(); virtual sint32 GetZfFlag( ) { return 0; }; virtual void Init( S_PROTOCOLCFG * pcfg ); protected: virtual ~C103(); unsigned char GetByteCheckSum(unsigned char *buf,int buflen); int GetNowSecond(); void SetTxRxStatus(E103_STATUS status); void InitRtu(); void ProcShortCmd(uint8 *buf,int buflen); void ProcLongCmd(uint8 *buf,int buflen); virtual void Recv_ProcYC(BYTE *buf,int buflen); virtual void Recv_ProcSOE(BYTE *buf,int buflen); virtual void Recv_ProcKWH(BYTE *buf,int buflen); virtual short int CalcYcShortVal(BYTE LowByte,BYTE HighByte); virtual void SendToPhysical(BOOL bResend=FALSE); virtual void ReSendData(); virtual void AppendIp(); virtual BOOL ProcCmd(); virtual void SendRequestLinkStatusCmd(); virtual void SendResetLinkCmd(); virtual void SendCallAllDataCmd(); virtual BOOL SendCallClassOneDataCmd(); virtual BOOL SendCallClassTwoDataCmd(); virtual void SendYKCmd( S_CmdInfo cmdinfo ,BYTE type); virtual BOOL SendTimeCmd(); }; #endif