IEC104link.h
上传用户:tengfei
上传日期:2014-02-20
资源大小:423k
文件大小:5k
源码类别:

邮电通讯系统

开发平台:

Visual C++

  1. #ifndef _IEC104link_
  2. #define _IEC104link_
  3. //#include <afxsock.h>
  4. /////////////////////////////////////////////////////////////////////////////
  5. // CChanSock command target
  6. //class CPingclientDlg;
  7. #include "DBserver.h"
  8. #include "typedef.h"
  9. #define MAXLINKBUFF 249
  10. #define MAXSOCKLBUFF 4096
  11. #define MAXNUM_K 32
  12. //#define MAX_W 8
  13. #define SOCKDELAY 250
  14. #define CMD_DISCONN 1
  15. #define CMD_USTOP   2
  16. #define CMD_USTART  3
  17. #define SOUR_
  18. #define APP2_
  19. #define INFO3_
  20. class AFX_EXT_CLASS CIEC104link:public CDBserver
  21. {
  22. public:
  23. virtual void On_init_Link_process(){};
  24. HANDLE rxmutex;
  25. _int testtype;
  26. _BYTE testtag;
  27. _BYTE test_once;
  28. _int  test_once_len;
  29. _int staNo;
  30. _char curdir[128];
  31. HANDLE dirmutex;
  32. CIEC104link();
  33. ~CIEC104link();
  34. char HostAddress[32];
  35. _WORD port;
  36. _int GetSizeofInput_buffer(_int *OneFrameLen,_int *FrameNum);
  37. _int GetSizeofOutput_buffer(_int *OneFrameLen,_int *FrameNum);
  38. //Copy ASDU msg to the Input_buffer
  39. // When exit ,inputbuff_available=0;
  40. // if urgent equ 1 then ACD=1;
  41. bool InAvailable();
  42. bool ApplayerToLink(_BYTE *asbuff,_int aslen);// put msg into input_buffer
  43. bool ApplayerControltoLink(_BYTE cmd);
  44. // _BYTE  in_mutex; //0:available     1:unvailable 
  45. bool inputbuff_available;//0:unavailable   1:available
  46. virtual void OnTxRemark()=0;
  47. virtual void OnRxRemark()=0;
  48. virtual void OnNoteRemark()=0;
  49. _int GetLinkerTxRemark(_char * disp,_int Maxlen);
  50. _int GetLinkerRxRemark(_char * disp,_int Maxlen);
  51. _int GetLinkerNoteRemark(_char * disp,_int Maxlen);
  52. _char notestr[256];
  53. //The class inherited from this class,
  54. virtual void OnApplayer(_int counts)=0; //
  55. _int LinkToApplayer(_BYTE *asbuff,_int asmaxlen);// get msg from output_buffer , when exit outputbuff_available=0;
  56. bool outputbuff_available;//0:unavailable   1:available
  57. bool connected;
  58. bool started;
  59. bool proc_flag;
  60. _int MAX_K;
  61. _int MAX_W;
  62. _int timer_conn,TIMER_CONN;//30s
  63. _int TIMER_CLOSE;//15s
  64. _int TIMER_SFORMAT;//10s
  65. _int timer_Utest,TIMER_UTEST;//20protected:
  66. // void OnRxOneFrame(_BYTE *rxbuf,_int *rxlen);
  67. bool InitLink();
  68. bool CloseLink();
  69. private:
  70. _int I_confirm_cnt;
  71. bool I_nocontinue;
  72. _int timer_Confirm;
  73. bool timer_Confirmflag;
  74. _WORD Rxcnt;
  75. _WORD Txcnt;
  76. _int timer_U_Start;
  77. bool timer_U_Startflag;
  78. _int timer_U_Stop;
  79. bool timer_U_Stopflag;
  80. _int timer_U_Test;
  81. bool timer_U_Testflag;
  82. static void Ontimer_thread(void *pp);
  83. // void linkprocess();
  84. HANDLE Ontimer_handle;
  85. _int Ontimercnt;
  86. _int Sendtimercnt;
  87. typedef struct Inputstru
  88. {
  89. _int timer_close;
  90. bool timer_flag;
  91. _WORD Txcnt;
  92. _BYTE Input_buffer[MAXLINKBUFF];
  93. _int Inlength;
  94. } Input_Stru;
  95. Input_Stru In_area[MAXNUM_K];
  96. _int In_area_frm_num;
  97. typedef struct Outputstru
  98. {
  99. _BYTE Output_buffer[MAXLINKBUFF];
  100. _int Outlength;
  101. } Output_Stru;
  102. Output_Stru Out_area[MAXNUM_K];
  103. _int Out_area_frm_num;
  104. _BYTE rxbuffer[MAXSOCKLBUFF];
  105. _BYTE txbuffer[MAXSOCKLBUFF];
  106. _int rxlength;
  107. _int txlength;
  108. virtual void OnReceive(int nErrorCode);
  109. virtual void OnClose(int nErrorCode);
  110. virtual void Accept_process();
  111. void Start_process();
  112. void OnTimer();
  113. void SendProcess();
  114. _BYTE rxraw_length;
  115. _BYTE rxraw_buffer[MAXSOCKLBUFF];
  116. _int RxOneBigFrame(_BYTE *rxbuf,_int maxbuflen);
  117. void DecodeOneBigFrame(_BYTE *bigrxbuf,_int *biglength);
  118. void DecodeFrame(_BYTE *rxbuf,_int rxlen);
  119. _int TxOneBigFrame(_BYTE *txbuf,_int txlen);
  120. _int EncodeFrame(_BYTE *txbuf);
  121. //when enter, rxbuff_dealing_flag=1;
  122. //when exit, rxbuff_dealing_flag=0 outputbuff_available=1;
  123. //make output_buffer full of msg
  124. // rxbuffer(msg: linker+ASDU)===>Output_buffer(msg: ASDU)
  125. _int IND_decodeApplayer(_BYTE *rxbuf,_int rxlen);
  126. //when enter
  127. //when exit,  inputbuff_available=1;
  128. //make output_buffer full of msg
  129. //Input_buffer(msg: ASDU)===>txbuffer(msg: linker+ ASDU)
  130. _int REQ_encodeApplayer(_BYTE *inputbuf,_int inputlen);//when enter, rxbuff_dealing_flag=1;when exit, rxbuff_dealing_flag=0
  131. bool rxbuff_dealing_flag;// 0:idle    1:busy
  132. void TimerIncrease();
  133. void scan_closeTimeout();
  134. void scan_timer_Sformat();
  135. void scan_timer_U_test();
  136. void Send_I_frame();
  137. void Recv_I_frame(_BYTE *rxbuf,bool * I_nocont);
  138. void Recv_Utestcon_frame();
  139. void Recv_Utest_frame();
  140. void Recv_Ustart_frame();
  141. void Recv_Ustop_frame();
  142. void Recv_S_format(_BYTE *rxbuf);
  143. void Send_U_Startcon();
  144. void Send_Ustopcon_frame();
  145. void Send_S_frame();
  146. void Send_Utest_frame();
  147. void Send_Utestcon_frame();
  148. };
  149. class AFX_EXT_CLASS CIEC104ASDU:public CIEC104link
  150. {
  151. public:
  152. CIEC104ASDU();
  153. ~CIEC104ASDU();
  154. virtual void OnApplayer(_int counts);
  155. virtual void OnTxRemark();
  156. virtual void OnRxRemark();
  157. virtual void OnNoteRemark();
  158. virtual void On_RecvMsg(_BYTE *msgbuf,_int len ){};//显示接收报文
  159. virtual void On_SendMsg(_BYTE *msgbuf,_int len){};//显示发送报文
  160. virtual void On_ErrorMsg(char *msgbuf){};
  161. BYTE asdispRxbuf[MAXLINKBUFF*MAXNUM_K];
  162. _BYTE asdispTxbuf[MAXLINKBUFF*MAXNUM_K];
  163. _int asdispRxlen;
  164. _int asdispTxlen;
  165. BYTE asnoteRxbuf[MAXLINKBUFF*MAXNUM_K];
  166. _int asnoteRxlen;
  167. _BYTE asRxbuf[MAXLINKBUFF*MAXNUM_K];
  168. _BYTE asTxbuf[MAXLINKBUFF];
  169. _int asRxlen;
  170. _int asTxlen;
  171. bool I_need;
  172. bool Cmd_need;
  173. _BYTE Cmd_need_code;
  174. };
  175. #endif