📄 commwizarddlg.cpp
字号:
// 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 + -