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

📄 democandlg.cpp

📁 CAN通讯工具,用于与控制器通讯获取数据
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			if(nextrow==59999)
			{
					dlg->m_list.DeleteAllItems();
					nextrow=0;
			}

			dlg->m_list.ItemColorFlag[nextrow]=0;

			str.Format("%d",nextrow);
			JustnowItem=dlg->m_list.InsertItem(nextrow,str);	
			nextrow++;	
			
			dlg->m_list.SetItemText(JustnowItem,1,strTime);		

			dlg->m_list.SetItemText(JustnowItem,2,"  0");		
			dlg->m_list.SetItemText(JustnowItem,3,"Receive");	
			str="";

			if((pCanObj[num].RemoteFlag)==1)
			{
				dlg->m_list.SetItemText(JustnowItem,5,"Remote");	
			}
			else
			{
				dlg->m_list.SetItemText(JustnowItem,5,"Data");	
			
			}
			if((pCanObj[num].ExternFlag)==1)		
			{
				for(i=0;i<4;i++)
					ReceivedID[i]=pCanObj[num].ID[i];
				if(dlg->m_radioIDFormat)//from sja1000 format to direct id
				{

						ReceivedID[3]=(ReceivedID[2]<<5)|(ReceivedID[3]>>3);
						ReceivedID[2]=(ReceivedID[1]<<5)|(ReceivedID[2]>>3);
						ReceivedID[1]=(ReceivedID[0]<<5)|(ReceivedID[1]>>3);
						ReceivedID[0]=ReceivedID[0]>>3;
				}
				for(i=0;i<4;i++)
				{
						str1.Format("%02X",ReceivedID[i]);
						str+=str1;
				}
				dlg->m_list.SetItemText(JustnowItem,4,str);	//ID信息	
						
				dlg->m_list.SetItemText(JustnowItem,6,"Extended");		//	
					
			}
			else									//标准帧
			{
				for(i=0;i<2;i++)
						ReceivedID[i]=pCanObj[num].ID[i];
				if(dlg->m_radioIDFormat)//将CAN2.0B格式进行转换到直接ID值
				{

						ReceivedID[1]=(ReceivedID[1]>>5)|(ReceivedID[0]<<3);
						ReceivedID[0]=ReceivedID[0]>>5;
				}
				for(i=0;i<2;i++)
				{
					str1.Format("%02X",ReceivedID[i]);
					str+=str1;
				}
				dlg->m_list.SetItemText(JustnowItem,4,str);	//ID信息	
						
				dlg->m_list.SetItemText(JustnowItem,6,"Basic");		//
						
						
			}
			str.Format("%d",pCanObj[num].DataLen);	//长度信息
			dlg->m_list.SetItemText(JustnowItem,7,str);	
					
			str="";
			for(i=0;i<(pCanObj[num].DataLen);i++)			//数据信息
			{
						str1.Format("%02X ",pCanObj[num].Data[i]);
						str+=str1;
					
			}

			dlg->m_list.SetItemText(JustnowItem,8,str);	
			dlg->m_list.Scroll(size); 	


		}
		if(dlg->m_DevType==DEV_USBCAN200)
		{
			NumValue=VCI_Receive(dlg->m_DevType,dlg->m_DevIndex,1,pCanObj);//帧数

			CString strTime;
			SYSTEMTIME   systime;   
			GetLocalTime(&systime);   
			strTime.Format("%02d:%02d:%02d:%03d", systime.wHour,systime.wMinute,systime.wSecond,systime.wMilliseconds);   

			for(num=0;num<NumValue;num++)
			{
				//while(Sending==1);
				if(nextrow==59999)
				{
						dlg->m_list.DeleteAllItems();
						nextrow=0;
				}

				dlg->m_list.ItemColorFlag[nextrow]=0;
				str.Format("%d",nextrow);
				JustnowItem=dlg->m_list.InsertItem(nextrow,str);
				nextrow++;					
				dlg->m_list.SetItemText(JustnowItem,1,strTime);				
				dlg->m_list.SetItemText(JustnowItem,2,"  1");	
				dlg->m_list.SetItemText(JustnowItem,3,"Receive");	
				str="";

				if((pCanObj[num].RemoteFlag)==1)
				{
					dlg->m_list.SetItemText(JustnowItem,5,"Remote");	
				}
				else
				{
					dlg->m_list.SetItemText(JustnowItem,5,"Data");	
				
				}
				if((pCanObj[num].ExternFlag)==1)		
				{
					for(i=0;i<4;i++)
						ReceivedID[i]=pCanObj[num].ID[i];
					if(dlg->m_radioIDFormat)
					{

							ReceivedID[3]=(ReceivedID[2]<<5)|(ReceivedID[3]>>3);
							ReceivedID[2]=(ReceivedID[1]<<5)|(ReceivedID[2]>>3);
							ReceivedID[1]=(ReceivedID[0]<<5)|(ReceivedID[1]>>3);
							ReceivedID[0]=ReceivedID[0]>>3;
					}
					for(i=0;i<4;i++)
					{
							str1.Format("%02X",ReceivedID[i]);
							str+=str1;
					}
					dlg->m_list.SetItemText(JustnowItem,4,str);		
							
					dlg->m_list.SetItemText(JustnowItem,6,"Extended");		//	
						
				}
				else									
				{
					for(i=0;i<2;i++)
							ReceivedID[i]=pCanObj[num].ID[i];
					if(dlg->m_radioIDFormat)
					{

							ReceivedID[1]=(ReceivedID[1]>>5)|(ReceivedID[0]<<3);
							ReceivedID[0]=ReceivedID[0]>>5;
					}
					for(i=0;i<2;i++)
					{
						str1.Format("%02X",ReceivedID[i]);
						str+=str1;
					}
					dlg->m_list.SetItemText(JustnowItem,4,str);								
					dlg->m_list.SetItemText(JustnowItem,6,"Basic");		//
							
							
				}
				str.Format("%d",pCanObj[num].DataLen);	//DLC
				dlg->m_list.SetItemText(JustnowItem,7,str);	
						
				str="";
				for(i=0;i<(pCanObj[num].DataLen);i++)			//DATA Info
				{
							str1.Format("%02X ",pCanObj[num].Data[i]);
							str+=str1;						
				}

				dlg->m_list.SetItemText(JustnowItem,8,str);	
				dlg->m_list.Scroll(size); 	


			}	
		
		
		}		

		Sleep(40);			
	




	
		if(StopFlag==1)
			return 0;	
	}





	return 1;
}


void CDemoCANDlg::OnCheckCanrxEn() 
{
	UpdateData(TRUE);
	if(m_bCanRxEn)
	{
		StopFlag=0;
		AfxBeginThread(ReceiveThread,0);	
	}
	else
		StopFlag=1;



}

void CDemoCANDlg::OnButtonCreateExcel() 
{
	CString m_strFileName;
	CString sPath;
	
	CFileDialog dlg(FALSE, "xls", NULL,
		OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY,
		"Excel file(*.xls)|*.xls||", this);
	dlg.m_ofn.lpstrTitle = _T("File save Dialog");
	
	
	if ( dlg.DoModal() == IDOK )
		sPath = dlg.GetPathName();
	else
		return;
	
	m_strFileName = dlg.GetFileName();
	
	
	
	
    CString sDsn;
    CString sExcelFile;
	
    int nPos;
	nPos=sPath.ReverseFind ('\\');
	sPath=sPath.Left (nPos);
	
	sExcelFile = sPath +"\\"+ m_strFileName;
	
	CDatabase database;
	CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel driver
	
	CString sSql;
	
	TRY
	{

		sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile);
		
		if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
		{

			sSql = "CREATE TABLE canlog (s0 TEXT,s1 TEXT,s2 TEXT,s3 TEXT,s4 TEXT,s5 TEXT,s6 TEXT,s7 TEXT,s8 TEXT)";
			database.ExecuteSQL(sSql);
			
			CString str1="xujingzhou";
			CString str2="26";
			CString strSQL;
			
	
			CString   str[10]={"10","11","12","13","14","15","16","17","18","19"}; 
		
			
			int   nCount   =   m_list.GetItemCount();   
			
			for(int   i=0;   i<nCount;   i++)   
			{   
				
				for(int   j=0;   j<9;   j++)   
				{   
					str[j]=m_list.GetItemText(i,j); 			
					
				}  
				sSql.Format("INSERT INTO canlog VALUES('%s','%s','%s','%s','%s','%s','%s','%s','%s')" ,str[0],str[1],str[2],str[3],str[4],str[5],str[6],str[7],str[8]);
				database.ExecuteSQL(sSql);			
				
			}
			
			
		}      
		

		database.Close();
		
		AfxMessageBox("saved ok");
	}
	CATCH_ALL(e)
	{
		TRACE1("no driver for excel: %s",sDriver);
	}
  END_CATCH_ALL;		
}

void CDemoCANDlg::OnButtonClear() 
{
	m_list.DeleteAllItems();	
}


/////////////////////////////////////////////////////////////////////////////
CString GetExcelDriver()
{
    char szBuf[2001];
    WORD cbBufMax = 2000;
    WORD cbBufOut;
    char *pszBuf = szBuf;
    CString sDriver;
	
    if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
        return "";
    
    do
    {
        if (strstr(pszBuf, "Excel") != 0)
        {
            sDriver = CString(pszBuf);
            break;
        }
        pszBuf = strchr(pszBuf, '\0') + 1;
    }
    while (pszBuf[1] != '\0');
	
    return sDriver;
}



UINT CDemoCANDlg::SendThread(LPVOID v)
{
	CDatabase database;
    CString sSql;
    CString sDriver;
    CString sDsn; 
    sDriver = GetExcelDriver();
    if (sDriver.IsEmpty())
    {
        AfxMessageBox("no drive!");
        return 0;
    }
	VCI_CAN_OBJ sendbuf1[2];
	int i=0;
	CDemoCANDlg *dlg=(CDemoCANDlg*) AfxGetApp()->GetMainWnd();//获得对话框	
	
    sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s", sDriver, sFile);
    CString sItem[10];	

	database.Open(NULL, false, false, sDsn);

        CRecordset 	recset(&database);
		sSql = "SELECT * FROM canlog" ;   		
		
        recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
		CString str2;
        while (!recset.IsEOF())
        {
			if(StopFlag==1)
				return 0;

 

			i++;
		sendbuf1->DataLen=8;
		sendbuf1->Data[0]=i;
		sendbuf1->ExternFlag=1;
		sendbuf1->RemoteFlag=0;
		sendbuf1->ID[0]=0x80;
		sendbuf1->ID[1]=0x80;
		sendbuf1->ID[2]=0x80;
		sendbuf1->ID[3]=0x80;
			int	flag=VCI_Transmit(dlg->m_DevType,dlg->m_DevIndex,0,sendbuf1);//CAN数据发送
			if(flag!=1)
			{
				if(flag==-1)
					AfxMessageBox("failed, device not open\n");
				else
					AfxMessageBox(" send fail\n");
				return 0;
				
			}
	
			CSize size;
			unsigned int JustnowItem;
			BYTE data;
			
			
			CString strTime;
			SYSTEMTIME   systime;   
			GetLocalTime(&systime);   
			strTime.Format("%02d:%02d:%02d:%03d", systime.wHour,systime.wMinute,systime.wSecond,systime.wMilliseconds);   
			
			
			size.cx=0;
			size.cy=50;
			CString str;
			str.Format("%d",nextrow);
			dlg->m_list.ItemColorFlag[nextrow]=1;
			JustnowItem=dlg->m_list.InsertItem(nextrow,str);	
			
			nextrow++;	
			dlg->m_list.SetItemText(JustnowItem,1,strTime);		
			dlg->m_list.SetItemText(JustnowItem,2,"  0");		
			dlg->m_list.SetItemText(JustnowItem,3,"Send");		//方向			
	/*		dlg->m_list.SetItemText(JustnowItem,5,sItem[5]);		//	数据/远程	
			dlg->m_list.SetItemText(JustnowItem,4,sItem[4]);		//ID信息
			dlg->m_list.SetItemText(JustnowItem,6,sItem[6]);		//标准/扩展	
			dlg->m_list.SetItemText(JustnowItem,7,sItem[7]);		//长度信息
			dlg->m_list.SetItemText(JustnowItem,8,sItem[8]);		//数据信息
	
			*/
			dlg->m_list.Scroll(size); 


			if(dlg->m_DevType==DEV_USBCAN200)
			{
				flag=VCI_Transmit(dlg->m_DevType,dlg->m_DevIndex,1,sendbuf1);//CAN数据发送
				if(flag!=1)
				{
					AfxMessageBox("failed\n");
					return 0;				
				}
				GetLocalTime(&systime);   
				strTime.Format("%02d:%02d:%02d:%03d", systime.wHour,systime.wMinute,systime.wSecond,systime.wMilliseconds);   
				
				size.cx=0;
				size.cy=50;
				str.Format("%d",nextrow);
				dlg->m_list.ItemColorFlag[nextrow]=1;//list Item颜色标记
				JustnowItem=dlg->m_list.InsertItem(nextrow,str);	//插入行,顺序号
				
				nextrow++;	
				dlg->m_list.SetItemText(JustnowItem,1,strTime);		//显示位置定义	
				dlg->m_list.SetItemText(JustnowItem,2,"  1");		//显示CANINDEX
				dlg->m_list.SetItemText(JustnowItem,3,"Send");		//方向			
				
				dlg->m_list.Scroll(size); 



			}


			recset.MoveNext();
        }
		

        database.Close();



	return 1;
}

⌨️ 快捷键说明

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