/************************************************************************************ * * Copyright (C) 2004-2005 SCADA Control Technology Co., Ltd. * All rights reserved. * * ÎļþÃû³Æ£ºbuban101.h * Îļþ±êʶ£º²¿°ä101¹æÔ¼ * Õª Òª£º101¹æÔ¼µÄ´¦ÀíµÄ½á¹¹¡¢ºê»¹Óк¯Êý¶¨Òå * * µ±Ç°°æ±¾£º1.0 * ×÷ Õߣºaaawen * Íê³ÉÈÕÆÚ£º2005/09/08 * * È¡´ú°æ±¾£º1.0 * Ô­×÷Õß £º * Íê³ÉÈÕÆÚ£º * * ˵ Ã÷£ºÊý¾Ý¶¨Ò广Ôò * u8 --- BYTE(usigned char) * ch --- char * w --- WORD(u_short, usigned short) * sh --- short * b --- BOOL(bool) * i --- int * l --- long * u32 --- u_32 * ui --- unsigned int(u_int) * ul --- unsigned long(u_long) * f --- float * db --- double * c --- class * s --- struct * sta --- static * g --- È«¾Ö±äÁ¿ * Array --- Êý×é * a --- Êý×é * m_ --- Êý¾Ý³ÉÔ± * p --- Ö¸Õë * str --- ×Ö·û´® * È«²¿´óд --- ³£Á¿ * Ê××Ö½Ú±ØÐë´óд--- ÀàÃû³Æ£¬½á¹¹£¬º¯Êý **************************************************************************************/ // buban101.h: interface for the buban101 class. // ////////////////////////////////////////////////////////////////////// #if !defined(_BUBAN101_H_200509081012__INCLUDED_) #define _BUBAN101_H_200509081012__INCLUDED_ #ifdef OS_LINUX #include "baohulib/common.h" #else #include "common.h" #endif ////////////////////////////////////////////////////////////////////////// // ºê¶¨Òå // // WEN 2005.09.08 // ////////////////////////////////////////////////////////////////////////// //ÐÅÏ¢Ì嵨ַ #define INFO_DI_BASEADDR 0x001 // µ¥,Ë«µãÒ£ÐÅÁ¿ #define INFO_PROTECT_BASEADDR 0x401 // ±£»¤µ¥¸öʼþÐÅÏ¢ #define INFO_PROTECT_STARTBASEADDR 0x501 // ±£»¤Æô¶¯Ê¼þ #define INFO_PROTECT_GROUPBASEADDR 0x601 // ±£»¤³É×éÊä³öµç·ÐÅÏ¢ #define INFO_AI_BASEADDR 0x701 // Ò£²âÁ¿ #define INFO_PARA_BASEADDR 0x901 // ²ÎÊýµØÖ·,ºÍÒ£²âÁ¿Ò»Ò»¶ÔÓ¦ #define INFO_YKYT_BASEADDR 0xB01 // Ò£¿Ø¡¢Ò£µ÷ #define INFO_SET_BASEADDR 0xB81 // É趨µØÖ··¶Î§ #define INFO_PI_BASEADDR 0xC01 // µç¶ÈÁ¿ #define INFO_STEP_BASEADDR 0xC81 // ²½³¤Á¿(Èç:±äѹÆ÷·Ö½ÓÍ·) #define INFO_BIN_BASEADDR 0xCA1 // ¶þ½øÖÆ×´Ì¬ÐÅÏ¢ #define INFO_BCD_BASEADDR 0xCC1 // BCDÂë(ˮλ,ƵÂÊ) #define INFO_STATUS_BASEADDR 0xCE9 // ×ÓÕ¾Ô¶¶«ÖÕ¶Ë״̬ #define INFO_FILE_BASEADDR 0xCEA // Îļþ´«Êä //Ò»×éÖеĸöÀàÐÍÊý¾Ý×î´ó¸öÊý #define MAX_GROUP_AINUM 128 //#define MAX_GROUP_FLOATAINUM 128 #define MAX_GROUP_DINUM 128 #define MAX_GROUP_PINUM 32 //ת·¢¸÷ÖÖÀàÐ͵ÄÊý¾ÝµÄ×î´óÊýÁ¿ #define MAX_AINUM 120 #define MAX_FLOATAINUM 48 #define MAX_DINUM 127 #define MAX_PINUM 35 #define MAX_POLL_CMD_BUF_NUM 32 // ×î´óÃüÁ³åÇøÊýÄ¿ // ÃüÁîÀàÐͶ¨Òå #define ASK_LINK 0 // ÇëÇóÁ´Â· #define RST_LINK 1 // ¸´Î»Á´Â· #define RTU_TIME 2 // ¶Ôʱʱ¼ä #define ASK_DI_DATA 3 // ÕÙ»½2 ¼¶Êý¾ÝYX #define ASK_AI_DATA 4 // ÕÙ»½2 ¼¶Êý¾ÝYC #define ASK_PI_DATA 5 // ÕÙ»½2 ¼¶Êý¾ÝYM #define ASK_ALL_DATA 6 // ³õʼ»¯×ÜÕÙ»½ #define ASK_FIRST_DATA 7 // ÕÙ»½1 ¼¶Êý¾Ý #define ASK_SECOND_DATA 8 // ÕÙ»½2 ¼¶Êý¾Ý #define ACK 9 // È·Èϻشð #define ANS_LINK 10 // Á´Â·»Ø´ð #define ASK_PI 11 // ÕÙ»½Êý¾ÝYM #define ASK_DATA_NO 12 // ÎÞËùÇëÇóµÄÊý¾Ý #define ASK_ALLDATA_END 13 // ÕÙ»½Êý¾Ý½áÊø(ÓÃÓÚ×ÜÕÙ»½ºÍµç¶ÈÕÙ»½) //#define ASK_ALLDATA_ACK 14 // ÕÙ»½Êý¾ÝÈ·ÈÏ(ÓÃÓÚ×ÜÕÙ»½ºÍµç¶ÈÕÙ»½) // ¶¨Ê±ÕÙ»½ÃüÁî¼°ÃüÁîÃû³Æ #define BUBAN101_TIMER_CMD_NUM 2 // ×î´óÃüÁîÊýÄ¿ #define MAX_POLLCMD_BUF_LEN 320 // ×î´óÃüÁ³åÇøÊýÄ¿ // ¿ØÖÆÄ£Ê½ #define CONTROL_DOUBLE 0 // Ë«µã¿ØÖÆ #define CONTROL_SINGAL 1 // µ¥µã¿ØÖÆ #define CONTROL_DIRECT 2 // Ö±½Ó¿ØÖÆ // ¹æÔ¼°æ±¾ºÅ #define VER_BUBAN_101 0 // ²¿°ä101 #define VER_IEC870_5_101 1 // IEC101 /////////////////////////////½á¹¹¶¨Òå///////////////////////////////// typedef struct { long CmdTimerCnt; long CmdTimerConst; } BUBAN101CMDDEF; typedef struct tagBUBAN101PORTPARAM { BOOL RstLinkOk; // ³õʼ»¯Ê±£ºFALSE BOOL LinkOk; // Ö÷Õ¾³õʼ»¯±êÖ¾ 1:ok; 0:no ³õʼ»¯Ê±£ºFALSE BOOL Initdata; // ³õʼ»¯×ÜÕÙ»½±êÖ¾ TRUE£ºÊÕµ½×ÜÕÙ»½½áÊøÖ¡ // FALSE£ºÎ´ÊÕµ½×ÜÕÙ»½½áÊøÖ¡ // ÕÙ»½µç¶È±êÖ¾ TRUE£ºÊÕµ½ÕÙ»½½áÊøÖ¡ // FALSE£ºÎ´ÊÕµ½ÕÙ»½½áÊøÖ¡ BYTE LinkAddr; // µØÖ·Óò BYTE CtlByte; // ¿ØÖÆÐÅÏ¢ long LinkOkCnt; long lTimeOutConst; // ³¬Ê±Ê±¼ä¼ä¸ô short RtuVersion; // °æ±¾ºÅ short BalanceOrNot; //ÊÇ·ñƽºâʽ =1:ok; =0:no short CurCmdIdx; short YkMode; // Ò£¿Ø·½Ê½(=0£ºË«µãÒ£¿Ø£¬=1£ºµ¥µãÒ£¿Ø£¬=2£ºÖ±¿Ø·½Ê½) // wen 2005.01.15 ÐÞ¸ÄÊý¾ÝÐÅÏ¢ÌåÆðʼµØÖ· int iAiBaseAddr; //Ò£²âÆðʼµØÖ· int iDiBaseAddr; //Ò£ÐÅÆðʼµØÖ· int iPiBaseAddr; //Ò£ÂöÆðʼµØÖ· int iYkBaseAddr; //Ò£¿ØÆðʼµØÖ· BYTE m_au8RecvBuf[300]; int m_iRecvLen; BUBAN101CMDDEF CmdTime[BUBAN101_TIMER_CMD_NUM]; SIO_PARAM_BAOHU_DEF *m_psBaoHu; // ¸Ã¹æÔ¼µÄ¶Ë¿ÚÊý¾ÝÖ¸Õë } BUBAN101PORTPARAM, *pBUBAN101PORTPARAM; /////////////////////////ÒÔÏÂΪͨÓú¯Êý½Ó¿Ú/////////////////////////// /*! \brief ¶ÁÈ¡ÅäÖú¯Êý \param commid -- ¶Ë¿ÚºÅ \note ȡֵ·¶Î§£º0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ void Buban101ReadConfig(int commid); // ³õʼ»¯´¦Àí /*! \brief ¶ÁÈ¡¶Ë¿ÚÊý¾Ýº¯Êý \param commid -- ¶Ë¿ÚºÅ \note ȡֵ·¶Î§£º0 -- MaxSerialPortNum + MaxNetPortNum -1\n \param buf -- Êý¾ÝÔ´»º³åÇøÖ¸Õë \param len -- Êý¾ÝÔ´³¤¶È */ void Buban101RecvData(int commid, u_char *buf, int len);// ¹æÔ¼¶ÁÊý¾Ý´¦Àí /*! \brief ¹æÔ¼Êý¾Ý´¦Àí¶¨Ê±Æ÷º¯Êý \param commid -- ¶Ë¿ÚºÅ \note ȡֵ·¶Î§£º0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ void Buban101Timer(int commid); // ¶¨Ê±Æ÷´¦Àí /*! \brief Ò£¿ØÒ£µ÷Êý¾Ý´¦Àíº¯Êý \param commid -- ¶Ë¿ÚºÅ \note ȡֵ·¶Î§£º0 -- MaxSerialPortNum + MaxNetPortNum -1\n \param buf -- Êý¾ÝÔ´»º³åÇøÖ¸Õë \param len -- Êý¾ÝÔ´³¤¶È */ void Buban101YkYtProcess(int commid, u_char *buf, int len); // Ò£¿ØÒ£µ÷´¦Àí /*! \brief ϵͳÏ·¢¶Ôʱº¯Êý \param commid -- ¶Ë¿ÚºÅ \note ȡֵ·¶Î§£º0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ void Buban101SendSystemTime(int commid); // ϵͳ¶Ôʱ /*! \brief ϵͳÍ˳öʱ¹æÔ¼´¦Àíº¯Êý \param commid -- ¶Ë¿ÚºÅ \note ȡֵ·¶Î§£º0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ void Buban101Exit(int commid); // ¹æÔ¼Í˳ö /*! \brief ±£»¤ÃüÁî´¦Àíº¯Êý \param commid -- ¶Ë¿ÚºÅ \param rtumsg -- Ï·¢µÄ±£»¤ÃüÁîÖ¸Õë \note ȡֵ·¶Î§£º0 -- MaxSerialPortNum + MaxNetPortNum -1\n */ void Buban101BaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData); /*! \brief È¡±£»¤Êý¾Ý¿âÖ¸Õ뺯Êý \param commid -- ¶Ë¿ÚºÅ \param iProvAddr -- ͳһ±àÅŵı£»¤×ª·¢µØÖ· \param ppBaoHuDB -- ´æ·Å±£»¤Êý¾ÝÖ¸ÕëµÄÖ¸Õë \retval -- ·µ»Ø¸Ã×°Öñ£»¤Êý¾Ý×éÊý */ int Buban101GetBaohuDataBase(int commid, int iProvAddr, GROUPDEF **ppBaoHuDB); /////////////////////////ͨÓú¯Êý½Ó¿Ú½áÊø/////////////////////////////// /////////////////////////buban101¹«¹²º¯Êý½Ó¿Ú/////////////////////////// // УÑéÊý¾ÝÖ¡ÊÇ·ñÕýÈ· BOOL Buban101Check(u_char* msg, int len); //¼ÆËã Buban101 ÀۼӺͼìÑéÂë u_char CalBuban101Lpc(u_char* msg, int len); //Ö¸Á³åÇø³õʼ»¯ void InitBuban101CommandBuffer(int commid); /////////////////////////buban101¹«¹²º¯Êý½Ó¿Ú½áÊø/////////////////////// /////////////////////////ÒÔÏÂΪͨÓú¯ÊýÖ§³Ö½Ó¿Ú///////////////////////// void Buban101ProvMakeYkYtCommand(int commid, u_char *buf, int len); /////////////////////////ͨÓú¯ÊýÖ§³Ö½Ó¿Ú½áÊø/////////////////////////// ///////////////////////////ÒÔÏÂΪָÁîÉú³Éº¯Êý/////////////////////////// //Éú³É Buban101 ÃüÁîë void MakeBuban101Command(u_32 commid, u_char cmdidx); //Éú³ÉÒ£¿ØÒ£µ÷Ö¸Áî void MakeBuBan101YkYtCommand(u_32 commid, u_char *buf, int len); ///////////////////////////Ö¸ÁîÉú³Éº¯Êý½áÊø///////////////////////////// /////////////////////ÒÔÏÂΪPOLLING¹æÔ¼³£¹æº¯Êý½Ó¿Ú////////////////////// void Buban101FindNextCmd(int commid); BOOL Buban101FindNextCmdEx(int commid); void Buban101SendCmdFormPollCmdBuf(int commid); //////////////////////POLLING¹æÔ¼³£¹æº¯Êý½Ó¿Ú½áÊø/////////////////////// ///////////////////////ÒÔÏÂΪ¹æÔ¼´¦Àíº¯Êý½Ó¿Ú/////////////////////////// //======================ÒÔÏÂΪÖ÷Õ¾Êý¾Ý´¦Àí============================ void Buban101ProcessData(u_32 commid, BUBAN101PORTPARAM *psPortParam, BOOL bProcess); void Buban101shortprocess(RTUMSG *rtumsg); void Buban101longprocess(RTUMSG *rtumsg); void Buban101NoChanged(RTUMSG * rtumsg); //Buban101 ³õʼ»¯Êý¾Ý´¦Àí void Buban101InitdataProecss(RTUMSG * rtumsg); //µç¶È½áÊøÖ¡ void Buban101PidataEnd(RTUMSG * rtumsg); //É趨ȷÈÏ void Buban101SetAck(RTUMSG *rtumsg); //Buban101 Ò£¿ØÒ£µ÷·µÐ£³ÌÐò void Buban101YkYtAck(RTUMSG * rtumsg); //Buban101 ¶Ôʱ³ÌÐò void Buban101SynTime(RTUMSG * rtumsg); // ×ÓÕ¾Ö÷¶¯´«ËÍÒ£Ðűäλ֡ void Buban101AutoSendDiProcess(RTUMSG *rtumsg); void Buban101AiWithPzDataProcess(RTUMSG *, int); void Buban101AllAiDataProcess(RTUMSG *rtumsg); void Buban101DiDataProcess(RTUMSG *rtumsg, int); void Buban101SoeDataProcess(RTUMSG *rtumsg, int); void Buban101PiDataProcess(RTUMSG * rtumsg); void Buban101PiWithTimeDataProcess(RTUMSG *rtumsg); //±£»¤Êý¾Ý´¦Àí void Buban101BaoHuDataProcess(RTUMSG *rtumsg); void Buban101DefaultBaoHuDataProcess(RTUMSG *rtumsg); // ÐÂÔöº¯Êý£¬º¬ÓÐ 7 BYTE µÄʱ±ê void Buban101SoeDataProcessWithCP56Time2a(RTUMSG *rtumsg, int flag); void Buban101AiWithDataProcessWithM_ME_TD_1(RTUMSG * rtumsg); void Buban101AiWithDataProcessWithM_ME_TE_1(RTUMSG * rtumsg); void Buban101AiWithDataProcessWithM_ME_TF_1(RTUMSG * rtumsg); void Buban101PiWithTimeDataProcessWithM_IT_TB_1(RTUMSG *rtumsg); //======================ÒÔÏÂΪ×ÓÕ¾Êý¾Ý´¦Àí============================ void ProvBuban101dataProcess(int commid, RTUMSG *rtumsg); void ProvBuban101shortprocess(int commid, RTUMSG * rtumsg); void ProvBuban101longprocess(int commid, RTUMSG * rtumsg); void ProvBuban101SendAllData(int commid, RTUMSG * rtumsg); void ProvBuban101SendPIData(int commid, RTUMSG * rtumsg); void ProvBuban101ProcessTime(int commid, RTUMSG *rtumsg); //iGroupNo=0ΪÏìÓ¦×ÜÕÙ»½ void ProvBuban101SendPI(int commid, RTUMSG *rtumsg, int iGroupNo); void ProvBuban101SendAI(int commid, RTUMSG *rtumsg, int iGroupNo); void ProvBuban101SendDI(int commid, RTUMSG *rtumsg, int iGroupNo); void ProvBuban101YkYtData(int commid, RTUMSG *rtumsg); void MakeProvBuban101YkYtAckMsg(int commid, int pnt, int op, int step); void ProvBuban101SendClass1(int commid); void ProvBuban101SendClass2(int commid); void ProvMakeBuban101Command(int commid, u_char cmdidx); /////////////////////////¹æÔ¼´¦Àíº¯Êý½Ó¿Ú½áÊø/////////////////////////// #endif // !defined(_BUBAN101_H_200509081012__INCLUDED_)