📄 testdlg.cpp
字号:
// testDlg.cpp : implementation file
//
#include "stdafx.h"
#include "test.h"
#include "testDlg.h"
#include "IDCalculate.h"
#include "SetPathDlg.h"
#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()
/////////////////////////////////////////////////////////////////////////////
// CTestDlg dialog
CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTestDlg)
m_EditSendData = _T("");
m_EditSendFrmID = _T("");
m_EditCode = _T("");
m_EditMask = _T("");
m_fStandardVoltage1 = 1.0f;
m_fStandardVoltage2 = 5.0f;
m_iTimePre = 10;
m_strPathName = _T("");
m_iRevPort = 4060;
m_iSndPort = 4001;
m_iNodeNo = 0;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestDlg)
DDX_Control(pDX, IDC_CMB_NODENO, m_cmbNodeNo);
DDX_Control(pDX, IDC_BUTTON_CONNECT, m_butConnect);
DDX_Control(pDX, ID_BUT_PROGRAMDOWN, m_butProgramDown);
DDX_Control(pDX, IDC_LIST_SELECTFILE, m_listSelectingFile);
DDX_Control(pDX, IDC_LIST_SDO_MESSAGE, m_listSDOOutMessage);
DDX_Control(pDX, IDC_PROGRESS_PROGRAMDOWN, m_progressProgramDown);
DDX_Control(pDX, IDC_CMB_DEVTYPE, m_cmbDevType);
DDX_Control(pDX, IDC_IPADDRESS_CANET, m_IPAddress);
DDX_Control(pDX, IDC_EDIT_FRAMESUM, m_editFrameSum);
DDX_Control(pDX, IDC_BUTTON_EXTENDWINDOW, m_button_extendwindow);
DDX_Control(pDX, IDC_PROGRESS_SYSRUNSTATUS, m_progressSysRunStatus);
DDX_Control(pDX, IDC_COMBO_ADCHANNEL, m_ComboAdChannel);
DDX_Control(pDX, IDC_LIST_ADJUST, m_listAdjustMessage);
DDX_Control(pDX, IDC_COMBO_BAUDRATE, m_ComboBaudRate);
DDX_Control(pDX, IDC_LIST_INFO, m_ListInfo);
DDX_Control(pDX, IDC_COMBO_SENDFRAMETYPE, m_ComboSendFrmType);
DDX_Control(pDX, IDC_COMBO_SENDFRAMEFORMAT, m_ComboSendFrmFmt);
DDX_Text(pDX, IDC_EDIT_SENDDATA, m_EditSendData);
DDX_Text(pDX, IDC_EDIT_SENDFRAMEID, m_EditSendFrmID);
DDX_Text(pDX, IDC_EDIT_STANDARDVOLTAGE1, m_fStandardVoltage1);
DDV_MinMaxFloat(pDX, m_fStandardVoltage1, -50.f, 50.f);
DDX_Text(pDX, IDC_EDIT_STANDARDVOLTAGE2, m_fStandardVoltage2);
DDV_MinMaxFloat(pDX, m_fStandardVoltage2, -50.f, 50.f);
DDX_Text(pDX, IDC_EDIT_TIME, m_iTimePre);
DDV_MinMaxInt(pDX, m_iTimePre, 10, 1000000);
DDX_Text(pDX, IDC_EDIT_PATHNAME, m_strPathName);
DDX_Text(pDX, IDC_EDIT_REVPORT, m_iRevPort);
DDX_Text(pDX, IDC_EDIT_SENDPORT, m_iSndPort);
DDX_CBIndex(pDX, IDC_CMB_NODENO, m_iNodeNo);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
//{{AFX_MSG_MAP(CTestDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_CONNECT, OnButtonConnect)
ON_BN_CLICKED(IDC_BUTTON_SEND, OnButtonSend)
ON_COMMAND(ID_MENU_REFRESH, OnMenuRefresh)
ON_BN_CLICKED(IDC_BUTTON_CLOSE, OnButtonClose)
ON_BN_CLICKED(IDC_BUTTON_AUTOADJUST, OnButtonAutoAdjust)
ON_CBN_SELCHANGE(IDC_LIST_ADJUST, OnSelectMessage)
ON_BN_CLICKED(IDC_RADIO_NODE0_ON, OnRadioNode0On)
ON_BN_CLICKED(IDC_RADIO_NODE1_ON, OnRadioNode1On)
ON_BN_CLICKED(IDC_RADIO_NODE2_ON, OnRadioNode2On)
ON_BN_CLICKED(IDC_RADIO_NODE3_ON, OnRadioNode3On)
ON_BN_CLICKED(IDC_RADIO_NODE4_ON, OnRadioNode4On)
ON_BN_CLICKED(IDC_RADIO_NODE5_ON, OnRadioNode5On)
ON_BN_CLICKED(IDC_RADIO_NODE6_ON, OnRadioNode6On)
ON_BN_CLICKED(IDC_RADIO_NODE7_ON, OnRadioNode7On)
ON_BN_CLICKED(IDC_RADIO_NODE0_OFF, OnRadioNode0Off)
ON_BN_CLICKED(IDC_RADIO_NODE1_OFF, OnRadioNode1Off)
ON_BN_CLICKED(IDC_RADIO_NODE2_OFF, OnRadioNode2Off)
ON_BN_CLICKED(IDC_RADIO_NODE3_OFF, OnRadioNode3Off)
ON_BN_CLICKED(IDC_RADIO_NODE4_OFF, OnRadioNode4Off)
ON_BN_CLICKED(IDC_RADIO_NODE5_OFF, OnRadioNode5Off)
ON_BN_CLICKED(IDC_RADIO_NODE6_OFF, OnRadioNode6Off)
ON_BN_CLICKED(IDC_RADIO_NODE7_OFF, OnRadioNode7Off)
ON_BN_CLICKED(IDC_CHECK_AUTOSAVECAN, OnCheckAutoSaveCan)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_CHECK_SOURCEDATAVIEW, OnCheckSourceDataView)
ON_BN_CLICKED(IDC_BUTTON_EXTENDWINDOW, OnButtonExtendWindow)
ON_BN_CLICKED(IDC_BUTTON_CALCULATE, OnButtonCalculate)
ON_BN_CLICKED(IDC_CHECK_TIMER, OnCheckTimerSend)
ON_BN_CLICKED(IDC_CHECK_DATATYPE, OnCheckDataType)
ON_CBN_SELCHANGE(IDC_CMB_DEVTYPE, OnSelchangeCmbDevtype)
ON_BN_CLICKED(ID_BUT_PROGRAMDOWN, OnButProgramdown)
ON_BN_CLICKED(IDC_BUT_BROWSE, OnButBrowse)
ON_CBN_SELCHANGE(IDC_CMB_NODENO, OnSelchangeCmbNodeno)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTestDlg message handlers
BOOL CTestDlg::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
// TODO: Add extra initialization here
char uPathName[512];
::GetCurrentDirectory(512,uPathName);
m_strAppPath = LPTSTR(uPathName);
m_byteNodeNo = 0x00;
m_iNodeNo = m_byteNodeNo;
m_bProgramDown = false;
m_iActFuncCodeProgramDown = 0x00;
m_byteActStatusPragramDown = 0xff;
m_connect=0;
m_cannum=0;
m_devtype = VCI_USBCAN2;
ReadConfig();
ListFileName(m_strPathName);
m_cmbDevType.AddString("USBCAN");
m_cmbDevType.AddString("CANET");
if(m_devtype == VCI_USBCAN2)
m_cmbDevType.SetCurSel(0);
else
m_cmbDevType.SetCurSel(1);
UpdateUserInputWindow();
m_IPAddress.SetAddress(m_byteIP[0],m_byteIP[1],m_byteIP[2],m_byteIP[3]);
m_bIsOnNode0 = false;
m_bIsOnNode1 = false;
m_bIsOnNode2 = false;
m_bIsOnNode3 = false;
m_bIsOnNode4 = false;
m_bIsOnNode5 = false;
m_bIsOnNode6 = false;
m_bIsOnNode7 = false;
m_byteIP[0] = 192;
m_byteIP[1] = 168;
m_byteIP[2] = 0;
m_byteIP[3] = 196;
m_bCheckDataType = true;
m_strSdVoltage1 = "00 00 00 00";
m_strSdVoltage2 = "00 00 00 00";
m_bSendTimer = false;
m_bExtendWindow = false;
m_bAutoSaveCan = false;
m_bSourceDataViewEnable = true;
m_iFrameCount = 0;
m_timeConnect = COleDateTime::GetCurrentTime();
m_ComboSendFrmType.SetCurSel(1);
m_ComboSendFrmFmt.SetCurSel(0);
m_ComboBaudRate.SelectString(-1,m_strBaudRate);
m_ComboAdChannel.SetCurSel(0);
UpdateIDRadio();
this->m_listAdjustMessage.AddString("故障信息请求帧");
this->m_listAdjustMessage.AddString("程序版本请求帧");
this->m_listAdjustMessage.AddString("查看参数请求帧");
this->m_listAdjustMessage.AddString("参数校准请求帧");
this->m_listAdjustMessage.AddString("校准参数值1消息帧");
this->m_listAdjustMessage.AddString("校准参数值2消息帧");
this->m_listAdjustMessage.AddString("请求节点运行控制");
this->m_listAdjustMessage.AddString("允许节点运行控制指令");
this->m_listAdjustMessage.AddString("停止节点运行控制指令");
this->m_listAdjustMessage.AddString("重启节点运行控制指令");
CString strNodeNo;
for(int i = 0;i < 256;i++)
{
strNodeNo.Format("%d",i);
this->m_cmbNodeNo.AddString(strNodeNo);
}
m_EditSendFrmID="10441fe0";
m_EditSendData="01 02 03 04 05 06 07 08 ";
m_EditCode="00000000";
m_EditMask="ffffffff";
UpdateData(false);
InitializeCriticalSection(&m_Section);
SetTimer(1,500,NULL);
OnButtonExtendWindow();
m_progressSysRunStatus.SetRange(0,4);
g_pDlg = this;
return TRUE; // return TRUE unless you set the focus to a control
}
void CTestDlg::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 CTestDlg::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 CTestDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CTestDlg::OnCancel()
{
// TODO: Add extra cleanup here
int connect = m_connect;
m_connect = 0;
if(connect)
{
Sleep(500);
VCI_CloseDevice(m_devtype,m_devind);
}
DeleteCriticalSection(&m_Section);
KillTimer(1);
KillTimer(2);
m_ArrayActCanFrame.RemoveAll();
if(m_bProgramDown)
{
m_bProgramDown = false;
Sleep(300);
}
WriteConfig();
CDialog::OnCancel();
}
void CTestDlg::OnOK()
{
// TODO: Add extra validation here
int connect = m_connect;
m_connect = 0;
Sleep(100);
if(connect)
VCI_CloseDevice(m_devtype,m_devind);
DeleteCriticalSection(&m_Section);
KillTimer(1);
KillTimer(2);
m_ArrayActCanFrame.RemoveAll();
if(m_bProgramDown)
{
m_bProgramDown = false;
Sleep(300);
}
WriteConfig();
CDialog::OnOK();
}
void CTestDlg::ConnectUSBCAN()
{
if(m_connect==1)
{
m_connect=0;
Sleep(500);
m_ComboBaudRate.EnableWindow(true);
m_cmbDevType.EnableWindow(true);
GetDlgItem(IDC_BUTTON_CONNECT)->SetWindowText("连接CAN网");
VCI_CloseDevice(m_devtype,m_devind);
return;
}
UINT uBTR0;
UINT uBTR1;
DWORD code,mask;
m_ComboBaudRate.GetLBText(m_ComboBaudRate.GetCurSel( ),m_strBaudRate);
int iBaudRate = atoi(m_strBaudRate);
GetBaudRateCtrReg(iBaudRate,uBTR0,uBTR1);
VCI_INIT_CONFIG init_config;
int filtertype,mode,cannum;
CString strcode,strmask,strtmp;
char szcode[20],szmask[20];
unsigned char sztmp[4];
UpdateData(true);
m_devind = 0;
filtertype = 0;
mode=0;
cannum=0;
strcode=m_EditCode;
strmask=m_EditMask;
UpdateData(false);
strtmp=strcode;
strcode.Format("%08s",strtmp);
strtmp=strmask;
strmask.Format("%08s",strtmp);
strcpy(szcode,(LPCTSTR)strcode);
strcpy(szmask,(LPCTSTR)strmask);
if(strtodata((unsigned char*)szcode,sztmp,4,0)!=0)
{
MessageBox("验收码数据格式不对!","警告",MB_OK|MB_ICONQUESTION);
return;
}
code=(((DWORD)sztmp[0])<<24)+(((DWORD)sztmp[1])<<16)+(((DWORD)sztmp[2])<<8)+
((DWORD)sztmp[3]);
if(strtodata((unsigned char*)szmask,sztmp,4,0)!=0)
{
MessageBox("屏蔽码数据格式不对!","警告",MB_OK|MB_ICONQUESTION);
return;
}
mask=(((DWORD)sztmp[0])<<24)+(((DWORD)sztmp[1])<<16)+(((DWORD)sztmp[2])<<8)+
((DWORD)sztmp[3]);
init_config.AccCode=code;
init_config.AccMask=mask;
init_config.Filter=filtertype;
init_config.Mode=mode;
init_config.Timing0=(unsigned char)uBTR0;
init_config.Timing1=(unsigned char)uBTR1;
if(VCI_OpenDevice(m_devtype,m_devind,0)!=STATUS_OK)
{
MessageBox("打开设备失败!","警告",MB_OK|MB_ICONQUESTION);
return;
}
if(VCI_InitCAN(m_devtype,m_devind,cannum,&init_config)!=STATUS_OK)
{
MessageBox("初始化CAN失败!","警告",MB_OK|MB_ICONQUESTION);
VCI_CloseDevice(m_devtype,m_devind);
return;
}
m_timeConnect = COleDateTime::GetCurrentTime();
m_iFrameCount = 0;
ShowInfo("当前CAN波特率:" + m_strBaudRate + "!",1);
m_connect=1;
m_cannum=cannum;
m_ComboBaudRate.EnableWindow(false);
m_cmbDevType.EnableWindow(false);
GetDlgItem(IDC_BUTTON_CONNECT)->SetWindowText("断开CAN网");
VCI_StartCAN(m_devtype,m_devind,m_cannum);
}
void CTestDlg::ConnectCANET()
{
if(m_connect==1)
{
m_connect=0;
Sleep(500);
m_cmbDevType.EnableWindow(true);
GetDlgItem(IDC_BUTTON_CONNECT)->SetWindowText("连接");
VCI_CloseDevice(m_devtype,m_devind);
return;
}
UpdateData(TRUE);
m_devind = 0;
int srcport = m_iSndPort;
int desport = m_iRevPort;
m_IPAddress.GetAddress(m_byteIP[0],m_byteIP[1],m_byteIP[2],m_byteIP[3]);
char szdesip[20];
sprintf(szdesip,"%d.%d.%d.%d",m_byteIP[0],m_byteIP[1],m_byteIP[2],m_byteIP[3]);
UpdateData(FALSE);
if(VCI_OpenDevice(m_devtype,m_devind,srcport)!=STATUS_OK)
{
MessageBox("打开设备失败!","警告",MB_OK|MB_ICONQUESTION);
return;
}
VCI_SetReference(m_devtype,m_devind,0,CMD_DESIP,(PVOID)szdesip);
VCI_SetReference(m_devtype,m_devind,0,CMD_DESPORT,(PVOID)&desport);
m_connect=1;
m_cannum=0;
m_cmbDevType.EnableWindow(false);
GetDlgItem(IDC_BUTTON_CONNECT)->SetWindowText("断开");
}
void CTestDlg::OnButtonConnect()
{
// TODO: Add your control notification handler code here
if(m_devtype == VCI_USBCAN2)
ConnectUSBCAN();
else
{
CButton* pBut;
ConnectCANET();
if(m_connect==1)
{
pBut = (CButton* )GetDlgItem(IDC_EDIT_REVPORT);
pBut->EnableWindow(false);
pBut = (CButton* )GetDlgItem(IDC_EDIT_SENDPORT);
pBut->EnableWindow(false);
pBut = (CButton* )GetDlgItem(IDC_IPADDRESS_CANET);
pBut->EnableWindow(false);
}
else
{
pBut = (CButton* )GetDlgItem(IDC_EDIT_REVPORT);
pBut->EnableWindow(true);
pBut = (CButton* )GetDlgItem(IDC_EDIT_SENDPORT);
pBut->EnableWindow(true);
pBut = (CButton* )GetDlgItem(IDC_IPADDRESS_CANET);
pBut->EnableWindow(true);
}
}
AfxBeginThread(ReceiveThread,this);
AfxBeginThread(ProcessActFrameThread,this);
}
void CTestDlg::OnButtonSend()
{
// TODO: Add your control notification handler code here
if(m_connect==0)
{
AfxMessageBox("请先建立连接硬件!");
return;
}
VCI_CAN_OBJ frameinfo;
char szFrameID[9];
unsigned char FrameID[4]={0,0,0,0};
memset(szFrameID,'0',9);
unsigned char Data[8];
char szData[25];
BYTE datalen=0;
UpdateData(true);
if(m_EditSendFrmID.GetLength()==0 ||
(m_EditSendData.GetLength()==0 && m_ComboSendFrmType.GetCurSel()==0))
{
ShowInfo("请输入数据!",1);
return;
}
if(m_EditSendFrmID.GetLength()>8)
{
ShowInfo("ID值超过范围!",1);
return;
}
if(m_EditSendData.GetLength()>24)
{
ShowInfo("数据长度超过范围,最大为8个字节!",1);
return;
}
if(m_ComboSendFrmType.GetCurSel()==0)
{
if(m_EditSendData.GetLength()%3==1)
{
ShowInfo("数据格式不对,请重新输入!",1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -