⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iec103dlg.h

📁 IEC60870-5-103规约测试工具。 目前只能打开COM1口
💻 H
字号:
// IEC103Dlg.h : header file
//

#if !defined(AFX_IEC103DLG_H__7CEAB6AB_BE36_4801_9CBF_96C2BC41B24A__INCLUDED_)
#define AFX_IEC103DLG_H__7CEAB6AB_BE36_4801_9CBF_96C2BC41B24A__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/////////////////////////////////////////////////////////////////////////////
// CIEC103Dlg dialog
#define MAX_SIZE	512

#define RX_COLOR	RGB( 0, 0, 255 )
#define TX_COLOR	RGB( 255, 0, 0 )

#define RXTX_RIGHT	"+"
#define RXTX_ERROR	"x"

#define EnqInterval          1          /*  s */
#define ValInterval          600        /*  s */
#define ClkInterval          900        /*  s */
#define FltInterval          5         /*  s */
#define YxInterval           10         /*  s */

#define MaxSendBuf           1024
#define MaxRcvBuf            1024
#define MaxRetry             3
#define MaxGRPNum            10
#define MaxIECNum            255
#define MaxBHNum             255
#define BUFSIZE              256
#define TIME_OUT             5
#define MaxWaitTimes         10

#define MSG_IEC_STATUS_ON    0
#define MSG_IEC_STATUS_OFF   1

#define NODE_ON              0
#define NODE_OFF             1
#define NO                   0
#define YES                  1
#define Master               1
#define Slave                0

#define ACK                  0x06
#define NAK                  0x15
#define SOH                  0x01
#define STX                  0x02
#define EOT                  0x04
#define ENQ                  0x05
#define CAN                  0x0f
#define NUL                  0x00

#define LINK_ADDR              1
#define ASDU_ADDR              1

#define MaxListDsp            20

/*==== IEC870-5-101 Link Protocol Control Information =====*/

#define LPCI_SYN            0x10
#define LPCI_STX            0x68
#define LPCI_ETX            0x16
#define LPCI_FCB            0x20
#define LPCI_FCV            0x10
#define LPCI_ACD            0x20
#define LPCI_SEQ            0x80
#define LPCI_NUL            0xe5

#define LSDU_CYCLE             1
#define LSDU_SPONT             3
#define LSDU_GENIC             5

#define C_RCU_NA               0
#define C_SND_AK               3
#define C_SYN_NK               4
#define C_RFB_NA               7
#define C_RLK_NA               9
#define C_PL1_NA              10
#define C_PL2_NA              11

#define M_CON_NA               0
#define M_BSY_NA               1
#define M_NV_NA                9
#define M_LKR_OK              11
#define M_LKR_FT              14
#define M_LKR_HT              15

#define COT_SPN                1
#define COT_CRC                2
#define COT_FCB                3
#define COT_FCV                4
#define COT_SYN                8
#define COT_IGI                9

#define COT_GWD               40
#define COT_GWD_NAK           41
#define COT_GRD               42
#define COT_GRD_NAK           43
#define COT_GWD_OK            44

#define FUN_GEN              254
#define FUN_GLB              255

#define INF_GROUP            241

#define M_TTM_TA              1
#define M_TMR_TA              2
#define M_MEI_NA              3
#define M_TME_TA              4
#define M_IDI_NA              5
#define M_SYN_TA              6
#define C_SYN_TA              6
#define C_IGI_NA              7
#define M_TGI_NA              8
#define M_ME2_NA              9
#define M_GD_NTA             10
#define C_GD_NA              10
#define M_GI_NTA             11
#define C_GRC_TA             20
#define C_GC_NA              21
#define M_LRD_TA             23
#define C_ODT_TA             24
#define C_ADT_NA             25
#define M_RTD_TA             26
#define M_RTC_TA             27
#define M_RTT_TA             28
#define M_TOT_TA             29
#define M_TOV_TA             30
#define M_EOT_TA             31

#define RCU_FRAME	0x00000001
#define PL1_FRAME	0x00000002
#define PL2_FRAME	0x00000004
#define IGI_FRAME	0x00000008
#define SYN_FRAME	0x00000010
#define ODT_FRAME	0x00000020
#define ADT_FRAME	0x00000040
#define YKS_FRAME	0x00000080
#define YKC_FRAME	0x00000100
#define YKE_FRAME	0x00000200
#define LED_FRAME	0x00000400
#define GEN1_FRAME	0x00000800
#define GEN2_FRAME	0x00001000
#define GEN3_FRAME	0x00002000
#define WGC0_FRAME	0x00004000
#define WGC1_FRAME	0x00008000

typedef struct {
	BYTE	buf[MAX_SIZE];
	DWORD	size;
} strucomData;

typedef struct {
	BYTE fcb;
	BYTE fcv;
	BYTE acd;
	BOOL pl1;
} struIEC103;

typedef struct {
	BOOL opened;
	BOOL inited;
	BOOL cantx;
	BOOL finished;
} struSYSTEM;

#include "Serial.h"
#include "RichEditEx.h"

class CIEC103Dlg : public CDialog
{
// Construction
public:
	CIEC103Dlg(CWnd* pParent = NULL);	// standard constructor
	static DWORD WINAPI IEC103Thread( PVOID lpParam );
	virtual void IEC103_Main();
	virtual void StartIEC103Thread();


// Dialog Data
	//{{AFX_DATA(CIEC103Dlg)
	enum { IDD = IDD_IEC103_DIALOG };
	CRichEditEx	m_msg;
	BOOL	m_bShowMSG;
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CIEC103Dlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:

	BYTE m_Gin;
	BYTE m_Ngd;
	virtual void Init();
	
	virtual void IEC103Tx();
	virtual void IEC103Rx();

	virtual BYTE SumCheck( BYTE* buffer, int count );
	virtual void RCU_NA( BYTE* buffer, int& count );
	virtual void PL1_NA( BYTE* buffer, int& count );
	virtual void PL2_NA( BYTE* buffer, int& count );
	virtual void IGI_NA( BYTE* buffer, int& count );
	virtual void SYN_TA( BYTE* buffer, int& count );
	virtual void GEN1_NA( BYTE* buffer, int& count );
	virtual void GEN2_NA( BYTE* buffer, int& count );
	virtual void GEN3_NA( BYTE* buffer, int& count );

	void WGC0_NA( BYTE* buffer, int& count );
	void WGC1_NA( BYTE* buffer, int& count );

	virtual BYTE GetSYNC( BYTE* buffer, int count = 0 );

	virtual void ProcNF( BYTE* buffer, int count = 0 );

	virtual void ProcCF( BYTE* buffer, int count = 0 );
	virtual void ProcYX( BYTE* buffer, int count = 0 );
	virtual void ProcYC( BYTE* buffer, int count = 0 );
	virtual void ProcDD( BYTE* buffer, int count = 0 );
	virtual void ProcGEN( BYTE* buffer, int count = 0 );


	void AddString( LPCSTR lpszText )
	{
		if ( !m_bShowMSG )
		{
			return;
		}
		m_msg.AddString( lpszText );
	};
	void AddLine( LPCSTR lpszText )
	{
		if ( !m_bShowMSG )
		{
			return;
		}
		m_msg.AddLine( lpszText );
	};
	void AddColorString( LPCSTR lpszText, COLORREF color = 0x008000 )
	{
		if ( !m_bShowMSG )
		{
			return;
		}
		m_msg.AddColorString( lpszText, color );
	};
	void AddColorLine( LPCSTR lpszText, COLORREF color = 0x008000 )
	{
		if ( !m_bShowMSG )
		{
			return;
		}
		m_msg.AddColorLine( lpszText, color );
	};
	void DoSuccess( LPCSTR lpszText = "SUCCESS", COLORREF color = 0x008000 )
	{
		if ( !m_bShowMSG )
		{
			return;
		}
		m_msg.DoSuccess( lpszText, color );
	};
	void DoFailure( LPCSTR lpszText = "FAILURE", COLORREF color = 0x0000ff )
	{
		if ( !m_bShowMSG )
		{
			return;
		}
		m_msg.DoFailure( lpszText, color );
	};
	void DisplayMessage( BYTE* buffer, int count, BOOL bRxData = TRUE )
	{
		int i;
		CString temp, str;
		if ( !m_bShowMSG )
		{
			return;
		}
		if ( bRxData )
		{
			for ( i = 0; i < count; i++ )
			{
				if ( i == 6 || i == 12 )
				{
					temp.Format( "[%02X] ", buffer[i] );
				}
				else
				{
					temp.Format( "%02X ", buffer[i] );
				}
				str += temp;
			}
			str += RXTX_RIGHT;
			m_msg.AddColorString( "[接收]", RX_COLOR );
			m_msg.AddColorLine( str, RX_COLOR );
		}
		else
		{
			for ( i = 0; i < count; i++ )
			{
				temp.Format( "%02X ", buffer[i] );
				str += temp;
			}
			str += RXTX_RIGHT;
			m_msg.AddColorString( "[发送]", TX_COLOR );
			m_msg.AddColorLine( str, TX_COLOR );
		}
	};
protected:
	HICON m_hIcon;

	strucomData RxBuf;
	struIEC103	IEC103data;
	struSYSTEM	system;

	BOOL m_bSYNC;
	BOOL m_bNF, m_bCF;
	BOOL m_GEN_NA;

	int IgiCount, FrameCount, SynCount;

	HANDLE m_hCom;
	CSerial SerialCom;
	DWORD m_nPollFrame;

	int m_ListCount;
	int m_ListData;

	// Generated message map functions
	//{{AFX_MSG(CIEC103Dlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	afx_msg void OnBtnClose();
	afx_msg void OnBtnOpen();
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnBtnProtect();
	afx_msg void OnCheckShow();
	afx_msg void OnBtnSet();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_IEC103DLG_H__7CEAB6AB_BE36_4801_9CBF_96C2BC41B24A__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -