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

📄 hk-cantesterdlg.cpp

📁 CAN测试程序。华控CAN50模块(can转usb)的测试程序(VC
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CHKCANTesterDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}




void CHKCANTesterDlg::OnBnClickedOpenboardbt()
{
	// TODO: 在此添加控件通知处理程序代码
	BOOL Opened_Flag = FALSE;
	BOOL Init0 = FALSE;
	BOOL Init1 = FALSE;	
	WORD  CanBPS = 0xc0a3;

	UpdateData(TRUE);

	g_RecPortNo = m_iRecPort;
	g_SendPortNo = m_iSendPort;
	g_RecMode = m_iRecMode;	
	g_ShowProcess = m_blShowProcess;

	g_SendTotalCount=0;
	g_SendOKCount=0;
	g_SendFailCount=0;

	m_ullSendTotalCount=0;
	m_ullSendOKCount=0;
	m_ullSendFailCount=0;
	m_uiSendFreq =0 ;

   
	char * sTemp =m_sBoardType.GetBuffer();
	if(!g_blOpenStatus)
	{
		Opened_Flag = HKCanOpen(&g_devicehandle,sTemp,m_iDrvType,0);	
	}
	else
	{		
		Opened_Flag=true;
		AfxMessageBox("CAN 卡已经打开!");
		return;
	}

	if(!Opened_Flag)
	{
		g_blOpenStatus=0;
		AfxMessageBox("CAN 卡打开失败!");
		m_sBoardStatus = "CAN卡打开失败!";
		return;
	}
	else
	{
		g_blOpenStatus=1;
		m_sBoardStatus = "CAN卡打开成功!";
	}

	UpdateData(FALSE);


	switch( m_iCanBPS)
	{
	case 0 :// 1M
		CanBPS = 0xc0a3;  
		break;
	case 1://500K
		CanBPS = 0xc1a3;
		break;
	case 2 ://250K
		CanBPS = 0xc3a3;
		break;
	case 3 ://125K
		CanBPS = 0xc7a3;
		break;
	case 4 ://50K
		CanBPS = 0xc7af;
		break;
	case 5 ://20K
		CanBPS = 0xD3AF;
		break;
	case 6 ://10K
		CanBPS = 0xE7AF;
		break;
	case 7 ://5K
		CanBPS = 0xffff;
		break;

	}

	g_blOpenStatus=true;
	if((g_RecPortNo ==0) ||(g_SendPortNo==0))
	{
		//Init0 = HKCanInitState(&g_devicehandle,0,CanBPS,0,0xff,g_hReadEvent_port[0]);//orient
		Init0 = HKCanInitState(&g_devicehandle,0,CanBPS,0x0,0xff,g_hReadEvent_port[0]);//
		if(!Init0)
		{
			g_blOpenStatus=false;
			AfxMessageBox("初始化CAN卡端口 1 失败!!");	
		}
		else
		{
			//启动线程
			if(g_RecPortNo ==0) 
				ResumeThread(g_hReadFrameThread);
			if(g_SendPortNo==0)
				ResumeThread(g_hSendFrameThread);
		}
	}

	
	if((g_RecPortNo ==1) ||(g_SendPortNo==1))
	{
		if(m_sBoardType!="HKCAN20"&&m_sBoardType!="HKCAN50")//CAN20C 、CAN50只有一个端口
		{
			//Init1 = HKCanInitState(&g_devicehandle,1,CanBPS,0,0xff,g_hReadEvent_port[1]);//orient
			Init1 = HKCanInitState(&g_devicehandle,1,CanBPS,0x0,0xff,g_hReadEvent_port[1]);

			if(!Init1)
			{
				g_blOpenStatus=false;
				AfxMessageBox("初始化CAN卡端口 2 失败!!");		
			}
			else
			{
				//启动线程
				if(g_RecPortNo ==1) 
					ResumeThread(g_hReadFrameThread);
				if(g_SendPortNo==1)
					ResumeThread(g_hSendFrameThread);
			}
		}
	}
}

void CHKCANTesterDlg::OnBnClickedCloseboardbt()
{
	// TODO: 在此添加控件通知处理程序代码
	
	//close device
	if(g_blOpenStatus)
	{
		g_blOpenStatus = false;

		SuspendThread(g_hReadFrameThread);
		SuspendThread(g_hSendFrameThread);

		int x=HKCanClose(&g_devicehandle);
		if(!x) 
		{
			AfxMessageBox("CAN卡关闭失败!");	
			m_sBoardStatus = "CAN卡关闭失败!";
		}
		else
		{
			m_sBoardStatus = "CAN卡关闭成功!"	;		
		}
	UpdateData(FALSE);

	}
}

void CHKCANTesterDlg::OnCbnSelchangeComboBoardtype()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	//CAN20C只有一个端口
	if(m_sBoardType == "HKCAN20"||m_sBoardType == "HKCAN50")
	{
		m_iSendPort = 0;		
		m_iRecPort =0 ;

		UpdateData(FALSE);

		CWnd *hwndSdPort = GetDlgItem(IDC_COMBO_SdPort);
		hwndSdPort->EnableWindow(FALSE);
		CWnd *hwndRecPort = GetDlgItem(IDC_COMBO_RecPort);
		hwndRecPort->EnableWindow(FALSE);
	}
	else
	{
		CWnd *hwndSdPort = GetDlgItem(IDC_COMBO_SdPort);
		hwndSdPort->EnableWindow(TRUE);
		CWnd *hwndRecPort = GetDlgItem(IDC_COMBO_RecPort);
		hwndRecPort->EnableWindow(TRUE);
	}

}

void CHKCANTesterDlg::OnBnClickedStartsendbt()
{
	// TODO: 在此添加控件通知处理程序代码
	if(!g_blOpenStatus)
	{
		AfxMessageBox("CAN卡还未初始化!");
		return;
	}

	//ResetEvent(g_hStartSendEvent);
	//SetEvent(g_hReadEvent_port[0]);
	//SetEvent(g_hReadEvent_port[1]);
	
	UpdateData(TRUE);
	
	g_blCycleSend = m_blCycleSend;
	g_TryCount = m_iTryCount;
	g_SendFrame.nPort = g_SendPortNo;

	if(m_sSendFrame=="")
		return;
	//g_SendFrame.mFrame[0] = 0x0a;
	//g_SendFrame.mFrame[1] = 0x88;

	////////////////
	//gao
	//g_SendFrame.mFrame[0] = 0x6c;
	//g_SendFrame.mFrame[1] = 0x64;

	g_SendFrame.mFrame[0] = 0x6c;
	g_SendFrame.mFrame[1] = 0x70;

	//g_SendFrame.mFrame[0] = 0x20;//table left
	//g_SendFrame.mFrame[1] = 0xe8;

	//g_SendFrame.mFrame[0] = 0xd6;
	//g_SendFrame.mFrame[1] = 0xe8;

	////////////////

	int sLen = m_sSendFrame.GetLength();
	if(sLen >8)
		sLen =8;
	//for(int i=0;i<sLen;i++)
	//{
	//	g_SendFrame.mFrame[i+2] = m_sSendFrame.GetAt(i);
	//}

	////////////////
	//gao
//	g_SendFrame.mFrame[2] =0x0;
//	g_SendFrame.mFrame[3] =0x0;
//	g_SendFrame.mFrame[4] =0x0;
//	g_SendFrame.mFrame[5] =0xda;
//	g_SendFrame.mFrame[6] =0x03;
//	g_SendFrame.mFrame[7] =0x86;
//	g_SendFrame.mFrame[8] =0x98;
//	g_SendFrame.mFrame[9] =0x0;
	g_SendFrame.mFrame[2] =0x7;
	g_SendFrame.mFrame[3] =0x01;
	g_SendFrame.mFrame[4] =0x7;
	g_SendFrame.mFrame[5] =0x8;
	g_SendFrame.mFrame[6] =0x08;
	g_SendFrame.mFrame[7] =0x2;
	g_SendFrame.mFrame[8] =0x00;
	g_SendFrame.mFrame[9] =0xa;

	////////////////

	g_SendTotalCount=0;
	g_SendOKCount=0;
	g_SendFailCount=0;

	m_ullSendTotalCount=0;
	m_ullSendOKCount=0;
	m_ullSendFailCount=0;
	m_uiSendFreq =0 ;

	UpdateData(FALSE);

	SetEvent(g_hStartSendEvent);

	g_SendStarTime = GetTickCount();
}

void CHKCANTesterDlg::OnBnClickedStopsendbt()
{
	DWORD MdTime;
	char temp[10];
	CString sreaddata;
	// TODO: 在此添加控件通知处理程序代码
	ResetEvent(g_hStartSendEvent);
	Sleep(100); //等待发送线程将最后一帧发送完
	MdTime = GetTickCount() - g_SendStarTime;
	m_uiSendFreq = DWORD(1000*g_SendOKCount/MdTime);


	m_ullSendTotalCount=g_SendTotalCount;
	m_ullSendOKCount=g_SendOKCount;
	m_ullSendFailCount=g_SendFailCount;

	m_ullRecCount =g_RecCount;

	memcpy(temp,&g_RecFrame.mFrame[2],8);
	temp[8]='\0';
	//sreaddata.Format("%s",temp);
	sreaddata.Format("%x",temp);
	m_sReadFram=sreaddata;		

	
	UpdateData(FALSE);

}


void CHKCANTesterDlg::OnDestroy()
{
	CDialog::OnDestroy();	

	// TODO: 在此处添加消息处理程序代码	
	
	//exit readthread for wait infinite
	g_ReadThreadFlag=0;
	g_SendThreadFlag=0;

	SetEvent(g_hReadEvent_port[1]);
	SetEvent(g_hReadEvent_port[0]);		

	//stop send thread
	SetEvent(g_hStartSendEvent);

	Sleep(300); //用于等待发送、接收线程的关闭
	
	//close all handle
	CloseHandle(g_hReadEvent_port[0]);
	CloseHandle(g_hReadEvent_port[1]);
	CloseHandle(g_hStartSendEvent);
	CloseHandle(g_hReadFrameThread);	

	//close device
	if(g_blOpenStatus)
	{
		g_blOpenStatus = false;
		HKCanClose(&g_devicehandle);
	}
}

void CHKCANTesterDlg::OnBnClickedClearsendcount()
{
	// TODO: 在此添加控件通知处理程序代码
	g_SendTotalCount=0;
	g_SendOKCount=0;
	g_SendFailCount=0;

	m_ullSendTotalCount=0;
	m_ullSendOKCount=0;
	m_ullSendFailCount=0;
	m_uiSendFreq =0 ;

	UpdateData(FALSE);
}

void CHKCANTesterDlg::OnBnClickedClearreccount()
{
	// TODO: 在此添加控件通知处理程序代码
	g_RecCount =0;
	m_ullRecCount =0;

	UpdateData(FALSE);
}

void CHKCANTesterDlg::OnBnClickedProcesscheck()
{
    // TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	g_ShowProcess = m_blShowProcess;
}

void CHKCANTesterDlg::OnBnClickedRddevstatus()
{
	DWORD status;
	// TODO: 在此添加控件通知处理程序代码
	HKCanGetLastError(&g_devicehandle,&status);
	m_DevStatus = status;
	UpdateData(FALSE);
}

⌨️ 快捷键说明

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