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

📄 commwizarddlg.cpp

📁 模拟cdt子站的通信过程,为通信终端测试提供方便.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// CommWizardDlg.cpp : implementation file
//

#include "stdafx.h"
#include "CommWizard.h"
#include "CommWizardDlg.h"
#include "SettingDlg.h"

//外部变量
	int pub_com_error_cou;
	int pub_com_t_cou;
	int pub_com_nre_t_cou;
	int pub_com_ner_error_cou;
	int pub_send_data_len;
	int dire_send_long;
	int CDT_send_add_cou;
	BYTE pub_send_data_buf[500];
	int pub_re_data_long;
	int pub_re_syn_flag;
	int pub_re_data_cou;
	BYTE pub_re_data_buf[2048];
	int pub_re_start_flag;
	
//	int pub_un_re_data_flag;
	BOOL GlSendFrameFlag;//本帧数据发送未完标志
	BYTE GlSourAddr=1;//源站址,默认为1
	BYTE GlAimAddr=1;//目的站址,默认为1
/****************发送遥信数据相关定义******************/
#define YXDOTAMOUNT 512//遥信点数
	//测试用发送遥信数据共512点遥信,每字节8点。前256点状态为1,后256点状态为0
	BYTE GlYxDataCur[64]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
						0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
						0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
						0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
						0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
						0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
						0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
						0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
						};
	#define SETTIMEAMOUNT 1000//1秒进入一次定时器任务
	#define YXTIMEAMOUNT 30//30秒插入传送一次遥信帧
	int GlYxTimeCou;//遥信定时传送计数器
	unsigned char GlYxFrameFlag;//遥信组帧时间到标记
/****************发送遥测量相关定义******************/
#define YCDOTAMOUNT 256//遥测点数
#define AYCDOTAMOUNT 64//重要遥测点数
#define BYCDOTAMOUNT 64//次要遥测点数
#define CYCDOTAMOUNT 128//一般遥测点数
	unsigned char GlYcFrameCou;//遥测组帧循环计数
	//测试用发送遥测数据共256点遥测,数值从0-255。一点遥测量数值占用2个字节
	unsigned short GlYcDataCur[256];
/****************发送脉冲电度量相关定义******************/
		unsigned char GlYmFrameFlag;//脉冲电度量组帧时间到标记
		int GlYmTimeCou;//电度量定时传送计数器
		#define YMTIMEAMOUNT 40//40秒插入传送一次电度帧
		#define YMDOTAMOUNT 64//电度点数
	//测试用发送电度数据共64点,数值从0-63.一点电度量数值占用4个字节
	unsigned int GlYmDataCur[64];
#define DireCycle 1//0:cdt正码发送,1 cdt反码发送
#define VeriDireCycle 1//cdt校验码表控制:0:cdt正码发送,1 cdt反码发送
unsigned char CRC_data[2][256]={//CRC校验码表0:正码;1:反码
	       {0x00,0xE0,0x70,0x90,0x38,0xD8,0x48,0xA8,
		0x1C,0xFC,0x6C,0x8C,0x24,0xC4,0x54,0xB4,
		0x0E,0xEE,0x7E,0x9E,0x36,0xD6,0x46,0xA6,
		0x12,0xF2,0x62,0x82,0x2A,0xCA,0x5A,0xBA,
		0x07,0xE7,0x77,0x97,0x3F,0xDF,0x4F,0xAF,
		0x1B,0xFB,0x6B,0x8B,0x23,0xC3,0x53,0xB3,
		0x09,0xE9,0x79,0x99,0x31,0xD1,0x41,0xA1,
		0x15,0xF5,0x65,0x85,0x2D,0xCD,0x5D,0xBD,
		0xE3,0x03,0x93,0x73,0xDB,0x3B,0xAB,0x4B,
		0xFF,0x1F,0x8F,0x6F,0xC7,0x27,0xB7,0x57,
		0xED,0x0D,0x9D,0x7D,0xD5,0x35,0xA5,0x45,
		0xF1,0x11,0x81,0x61,0xC9,0x29,0xB9,0x59,
		0xE4,0x04,0x94,0x74,0xDC,0x3C,0xAC,0x4C,
		0xF8,0x18,0x88,0x68,0xC0,0x20,0xB0,0x50,
		0xEA,0x0A,0x9A,0x7A,0xD2,0x32,0xA2,0x42,
		0xF6,0x16,0x86,0x66,0xCE,0x2E,0xBE,0x5E,
		0x91,0x71,0xE1,0x01,0xA9,0x49,0xD9,0x39,
		0x8D,0x6D,0xFD,0x1D,0xB5,0x55,0xC5,0x25,
		0x9F,0x7F,0xEF,0x0F,0xA7,0x47,0xD7,0x37,
		0x83,0x63,0xF3,0x13,0xBB,0x5B,0xCB,0x2B,
		0x96,0x76,0xE6,0x06,0xAE,0x4E,0xDE,0x3E,
		0x8A,0x6A,0xFA,0x1A,0xB2,0x52,0xC2,0x22,
		0x98,0x78,0xE8,0x08,0xA0,0x40,0xD0,0x30,
		0x84,0x64,0xF4,0x14,0xBC,0x5C,0xCC,0x2C,
		0x72,0x92,0x02,0xE2,0x4A,0xAA,0x3A,0xDA,
		0x6E,0x8E,0x1E,0xFE,0x56,0xB6,0x26,0xC6,
		0x7C,0x9C,0x0C,0xEC,0x44,0xA4,0x34,0xD4,
		0x60,0x80,0x10,0xF0,0x58,0xB8,0x28,0xC8,
		0x75,0x95,0x05,0xE5,0x4D,0xAD,0x3D,0xDD,
		0x69,0x89,0x19,0xF9,0x51,0xB1,0x21,0xC1,
		0x7B,0x9B,0x0B,0xEB,0x43,0xA3,0x33,0xD3,
		0x67,0x87,0x17,0xF7,0x5F,0xBF,0x2F,0xCF},
		    {0x00,0x07,0x0E,0x09,0x1C,0x1B,0x12,0x15,
		     0x38,0x3F,0x36,0x31,0x24,0x23,0x2A,0x2D,
		     0x70,0x77,0x7E,0x79,0x6C,0x6B,0x62,0x65,
		     0x48,0x4F,0x46,0x41,0x54,0x53,0x5A,0x5D,
		     0xE0,0xE7,0xEE,0xE9,0xFC,0xFB,0xF2,0xF5,
		     0xD8,0xDF,0xD6,0xD1,0xC4,0xC3,0xCA,0xCD,
		     0x90,0x97,0x9E,0x99,0x8C,0x8B,0x82,0x85,
		     0xA8,0xAF,0xA6,0xA1,0xB4,0xB3,0xBA,0xBD,
		     0xC7,0xC0,0xC9,0xCE,0xDB,0xDC,0xD5,0xD2,
		     0xFF,0xF8,0xF1,0xF6,0xE3,0xE4,0xED,0xEA,
		     0xB7,0xB0,0xB9,0xBE,0xAB,0xAC,0xA5,0xA2,
		     0x8F,0x88,0x81,0x86,0x93,0x94,0x9D,0x9A,
		     0x27,0x20,0x29,0x2E,0x3B,0x3C,0x35,0x32,
		     0x1F,0x18,0x11,0x16,0x03,0x04,0x0D,0x0A,
		     0x57,0x50,0x59,0x5E,0x4B,0x4C,0x45,0x42,
		     0x6F,0x68,0x61,0x66,0x73,0x74,0x7D,0x7A,
		     0x89,0x8E,0x87,0x80,0x95,0x92,0x9B,0x9C,
		     0xB1,0xB6,0xBF,0xB8,0xAD,0xAA,0xA3,0xA4,
		     0xF9,0xFE,0xF7,0xF0,0xE5,0xE2,0xEB,0xEC,
		     0xC1,0xC6,0xCF,0xC8,0xDD,0xDA,0xD3,0xD4,
		     0x69,0x6E,0x67,0x60,0x75,0x72,0x7B,0x7C,
		     0x51,0x56,0x5F,0x58,0x4D,0x4A,0x43,0x44,
		     0x19,0x1E,0x17,0x10,0x05,0x02,0x0B,0x0C,
		     0x21,0x26,0x2F,0x28,0x3D,0x3A,0x33,0x34,
		     0x4E,0x49,0x40,0x47,0x52,0x55,0x5C,0x5B,
		     0x76,0x71,0x78,0x7F,0x6A,0x6D,0x64,0x63,
		     0x3E,0x39,0x30,0x37,0x22,0x25,0x2C,0x2B,
		     0x06,0x01,0x08,0x0F,0x1A,0x1D,0x14,0x13,
		     0xAE,0xA9,0xA0,0xA7,0xB2,0xB5,0xBC,0xBB,
		     0x96,0x91,0x98,0x9F,0x8A,0x8D,0x84,0x83,
		     0xDE,0xD9,0xD0,0xD7,0xC2,0xC5,0xCC,0xCB,
		     0xE6,0xE1,0xE8,0xEF,0xFA,0xFD,0xF4,0xF3}};
		   //CDT发送链路控制相关定义
		   int CDT_syn_cou;//同步码发送计数
		   unsigned char CDT_syn_array[2][6]={//同步数据库,3组0xd70x09或3组0xeb0x90,默认3组0xd70x09
			   {0xd7,0x09,0xd7,0x09,0xd7,0x09},
			   {0xeb,0x90,0xeb,0x90,0xeb,0x90}};
		//数据显示相关定义
		#define DisplayrowAmount 60//大于30行清掉本页重新显示
		#define DisplayrowLen  42//每行显示字符数
		#define DisplayrowROW 10//大于10行本页开始向上滚动
		int GlRowCharCou;//分行字符计数
		int ExPrintLineCou;//显示行数计数
		int GlCDTCharDispCou;//CDT模式字符显示计数
		unsigned char GlThisPageDispFlag;//本页已显示标记

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

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

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCommWizardDlg dialog

CCommWizardDlg::CCommWizardDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CCommWizardDlg::IDD, pParent)
{
//	bSend = FALSE;
	bStartTest = FALSE;
	
	//初始化各种标志、计数器
//	pub_un_re_data_flag=1;
	pub_re_data_cou=0;
	pub_re_syn_flag=0;
	pub_re_data_long=0;
	pub_send_data_len=0;
	pub_com_error_cou=0;
	pub_com_t_cou=0;
	pub_com_nre_t_cou=0;
	pub_com_ner_error_cou=0;
	pub_re_start_flag=0;
	ExPrintLineCou=0;
//	pub_re_data_over=0;

	m_nPort = 1;
	m_strSettings = _T("9600,n,8,1");
//	m_strSendString = _T("");
	m_nTime = 100;

	m_nInputMode = 2;

	//{{AFX_DATA_INIT(CCommWizardDlg)
	m_strReceive = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CCommWizardDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCommWizardDlg)
	DDX_Control(pDX, IDC_EDIT_RECEIVE, m_EditRecv);
	DDX_Control(pDX, IDC_BUTSTARTWORK, m_ctrlStartWork);
	DDX_Text(pDX, IDC_EDIT_RECEIVE, m_strReceive);
	DDX_Control(pDX, IDC_COMMCTRL, m_Com);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CCommWizardDlg, CDialog)
	//{{AFX_MSG_MAP(CCommWizardDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_RECEIVE, OnReceive)
	ON_BN_CLICKED(IDC_SETTINGS, OnSettings)
	ON_CBN_SELCHANGE(IDC_TYPE, OnSelchangeType)
	ON_BN_CLICKED(IDC_CLEAR, OnClear)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_BUTSTARTWORK, OnButstartwork)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCommWizardDlg message handlers

BOOL CCommWizardDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	FunInitSys();//程序标志、外部变量、资源初始化

	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CCommWizardDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CCommWizardDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CCommWizardDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CCommWizardDlg::OnReceive() 
{
	// TODO: Add your control notification handler code here
	m_Com.GetInput();//先预读缓冲区以清除残留数据
	bStartTest = !bStartTest;
	if(bStartTest)
	{
		m_ctrlStartTest.SetWindowText(_T("停止测试"));
		//初始化各种标志、计数器
/*		pub_re_data_cou=0;
		pub_re_syn_flag=0;
		pub_re_data_long=0;
		pub_send_data_len=0;
		pub_com_error_cou=0;
		pub_com_t_cou=0;
		pub_com_nre_t_cou=0;
		pub_com_ner_error_cou=0;*/
		
	}
	else
	{
		m_ctrlStartTest.SetWindowText(_T("开始测试"));
		
	}
		
}

//DEL void CCommWizardDlg::OnSend() 
//DEL {
//DEL 	// TODO: Add your control notification handler code here
//DEL 	bSend = !bSend;
//DEL 	if(bSend)
//DEL 	{
//DEL 		m_ctrlSend.SetWindowText(_T("停止发送"));
//DEL //		SetTimer(1,100/*m_nTime*/,NULL);//时间为100毫秒
//DEL 	}
//DEL 	else
//DEL 	{
//DEL 		m_ctrlSend.SetWindowText(_T("自动发送"));
//DEL //		KillTimer(1);  //取消定时
//DEL 		if(pub_com_ner_error_cou>5)
//DEL 		{
//DEL 			//提示:网控端口不能发送数据
//DEL 			pub_com_ner_error_cou=0;
//DEL 		}
//DEL 		else if(pub_com_error_cou>5)
//DEL 		{
//DEL 			//提示:网控端口不能正常接收数据
//DEL 			pub_com_t_cou=0;
//DEL 			pub_com_error_cou=0;			
//DEL 		}
//DEL 	}//end if(bSend) else
//DEL }

void CCommWizardDlg::OnSettings() 
{
	// TODO: Add your control notification handler code here
	CSettingDlg setDlg;
	
	setDlg.nPort = m_nPort;
	setDlg.nTime = m_nTime;
	setDlg.strSettings = m_strSettings;
//	setDlg.strSendString = m_strSendString;

⌨️ 快捷键说明

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