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

邮电通讯系统

开发平台:

Visual C++

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