📄 k8110testdlg.cpp
字号:
// K8110TestDlg.cpp : implementation file
//
#include "stdafx.h"
#include "K8110Test.h"
#include "K8110TestDlg.h"
#include "K8110.h"
#include "CH365dll.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CK8110TestApp theApp;
#define WM_READ_DATA WM_USER+110
HWND hwnd;
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()
/////////////////////////////////////////////////////////////////////////////
// CK8110TestDlg dialog
//构造函数
CK8110TestDlg::CK8110TestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CK8110TestDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CK8110TestDlg)
m_tmp_3 = _T("");
m_tmp_2 = _T("");
m_tmp_1 = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CK8110TestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CK8110TestDlg)
DDX_Control(pDX, IDC_DATA_LIST2, m_ctrlList2);
DDX_Control(pDX, IDC_INDEX, m_ctrlIndex);
DDX_Control(pDX, IDC_DATA_LIST, m_ctrlList);
DDX_Text(pDX, IDC_TMP_3, m_tmp_3);
DDX_Text(pDX, IDC_TMP_2, m_tmp_2);
DDX_Text(pDX, IDC_TMP_1, m_tmp_1);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CK8110TestDlg, CDialog)
//{{AFX_MSG_MAP(CK8110TestDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_OPEN_8110, OnOpen8110)
ON_BN_CLICKED(IDC_CLOSE_8110, OnClose8110)
ON_BN_CLICKED(IDC_INIT_8110, OnInit8110)
ON_WM_TIMER()
ON_WM_CANCELMODE()
ON_CBN_SELCHANGE(IDC_INDEX, OnSelchangeIndex)
ON_BN_CLICKED(IDC_RSETDEV_8110, OnRsetdev8110)
ON_BN_CLICKED(IDC_CORRECTIME, OnCorrectime)
ON_BN_CLICKED(IDC_NMT_EC, OnNmtEc)
ON_BN_CLICKED(IDC_STOPDEV_8110, OnStopdev8110)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CK8110TestDlg message handlers
BOOL CK8110TestDlg::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
m_ctrlIndex.AddString(_T("0"));
m_ctrlIndex.AddString(_T("1"));
m_ctrlIndex.AddString(_T("2"));
m_ctrlIndex.AddString(_T("3"));
m_ctrlIndex.SetCurSel(0);
GetDlgItem(IDC_CLOSE_8110)->EnableWindow(FALSE);
GetDlgItem(IDC_INIT_8110)->EnableWindow(FALSE);
m_ctrlList.InsertColumn(0,"节点标识符",LVCFMT_LEFT,80,-1);
m_ctrlList.InsertColumn(1,"生命检测状态",LVCFMT_LEFT,80,-1);
m_ctrlList.InsertColumn(2,"运行状态",LVCFMT_LEFT,80,-1);
m_ctrlList.InsertColumn(3,"实验状态",LVCFMT_LEFT,70,-1);
m_ctrlList2.InsertColumn(0, "接收CAN网络数据", LVCFMT_LEFT, 120, -1);
m_ctrlList2.InsertColumn(1, "功能代码", LVCFMT_LEFT, 80, -1);
m_ctrlList2.InsertColumn(2, "节点标识符", LVCFMT_LEFT, 80, -1);
UpdateData(FALSE);
//获得窗口句柄
hwnd=this->GetSafeHwnd();
for (int i = 0; i < 128; i++)
{
ETN_lifeflag1[i] = false;
ETN_lifeflag2[i] = false;
}
NMT_EC_flag = false;
//获得设备端口号
m_ctrlIndex.GetWindowText(strtmp);
return TRUE; // return TRUE unless you set the focus to a control
}
void CK8110TestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
void CK8110TestDlg::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;
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CK8110TestDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
//打开设备
void CK8110TestDlg::OnOpen8110()
{
BOOL OpenFlg;
OpenFlg=CAN_Open(atoi(strtmp));
if(!OpenFlg)
{
MessageBox("无法打开设备!","信息提示:",MB_ICONSTOP+MB_OK);
return;
}
else
{
//m_strState.Format("打开设备成功,可以初始化了");
}
GetDlgItem(IDC_OPEN_8110)->EnableWindow(FALSE);
GetDlgItem(IDOK)->EnableWindow(FALSE);
GetDlgItem(IDC_INIT_8110)->EnableWindow(TRUE);
GetDlgItem(IDC_CLOSE_8110)->EnableWindow(TRUE);
UpdateData(FALSE);
}
//关闭设备
void CK8110TestDlg::OnClose8110()
{
CAN_Close(atoi(strtmp));
GetDlgItem(IDC_OPEN_8110)->EnableWindow(TRUE);
GetDlgItem(IDOK)->EnableWindow(TRUE);
GetDlgItem(IDC_INIT_8110)->EnableWindow(FALSE);
GetDlgItem(IDC_CLOSE_8110)->EnableWindow(FALSE);
UpdateData(FALSE);
}
//初始化设备
void CK8110TestDlg::OnInit8110()
{
long num;
canreg[0] = 0;
CAN_ReadReg(atoi(strtmp), canreg);
canreg[0] = 0;
canreg[1] = canreg[1] | 0x1;
CAN_WriteReg(atoi(strtmp), canreg);
canreg[0] = 31;
canreg[1] = 0xC0;
CAN_WriteReg(atoi(strtmp), canreg);
canreg[0] = 20;
canreg[1] = 0xFF;
CAN_WriteReg(atoi(strtmp), canreg);
canreg[0] = 21;
canreg[1] = 0xFF;
CAN_WriteReg(atoi(strtmp), canreg);
canreg[0] = 22;
canreg[1] = 0xFF;
CAN_WriteReg(atoi(strtmp), canreg);
canreg[0] = 23;
canreg[1] = 0xFF;
CAN_WriteReg(atoi(strtmp), canreg);
canreg[0] = 6;
canreg[1] = 0x1;
CAN_WriteReg(atoi(strtmp), canreg);
canreg[0] = 7;
canreg[1] = 0x1C;
CAN_WriteReg(atoi(strtmp), canreg);
canreg[0] = 1;
canreg[1] = 0x0;
CAN_WriteReg(atoi(strtmp), canreg);
canreg[0] = 0;
canreg[1] = 0x8;
CAN_WriteReg(atoi(strtmp), canreg);
canreg[0] = 4;
canreg[1] = 0xC1;
CAN_WriteReg(atoi(strtmp), canreg);
CAN_Inten(atoi(strtmp));
pread = 0;
pwrite = 0;
fifo_num = 0;
NMT_EC_flag = false;
num = CAN_ReadDataNum(atoi(strtmp));
while (num != 0)
{
if (num > 1000)
{
num = 1000;
}
CAN_ReadBlockData(atoi(strtmp), num, writebuff);
num = CAN_ReadDataNum(atoi(strtmp));
}
m_ctrlList.DeleteAllItems();
m_ctrlList2.DeleteAllItems();
SetTimer(2, 20 , NULL);
SetTimer(3, 2000, NULL);
}
//退出
void CK8110TestDlg::OnOK()
{
// TODO: Add extra validation here
if(AfxMessageBox("确定已关闭设备,退出程序?",MB_YESNO)!=IDYES)
return;
CDialog::OnCancel();
}
void CK8110TestDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case 2:
{
data_get();
}
break;
case 3:
{
data_blockread();
}
break;
case 4:
{
NMT_EC_PeriodSend();
}
}
CDialog::OnTimer(nIDEvent);
}
void CK8110TestDlg::OnCancelMode()
{
CDialog::OnCancelMode();
}
//选择设备端口号
void CK8110TestDlg::OnSelchangeIndex()
{
UpdateData(TRUE);
theApp.nIndex=m_ctrlIndex.GetCurSel();
}
//复位设备
void CK8110TestDlg::OnRsetdev8110()
{
CString strtmp;
m_ctrlIndex.GetWindowText(strtmp);
CAN_Reset(atoi(strtmp));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -