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

📄 democandlg.cpp

📁 VC关于DLL调用的源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
						str5[num]="0"+strtemp;
					else
						str5[num]=strtemp+strtemp1;
				}

				 nCanAMR[num]=Str2Hex(str5[num]);
				num++;
				if(num>=4)	
					break;

			}

		}

	BYTE pData[15];

	pData[0]=m_nCanFilter;
	if(VCI_SetReference(m_DevType,m_DevIndex,m_nCanIndex,REFTYPE_FILTER,pData)!=1)
	{
		MessageBox("failed");
		return;	
	}
	Sleep(100);
	for(i=0;i<4;i++)
		pData[i]=nCanACR[i];
	if(VCI_SetReference(m_DevType,m_DevIndex,m_nCanIndex,REFTYPE_ACR0,pData)!=1)
	{
		MessageBox("failed");
		return;	
	}
	Sleep(100);
	for(i=0;i<4;i++)
		pData[i]=nCanAMR[i];
	if(VCI_SetReference(m_DevType,m_DevIndex,m_nCanIndex,REFTYPE_AMR0,pData)!=1)
	{
		MessageBox("failed");
		return;	
	}

	MessageBox("finished");	
}

void CDemoCANDlg::OnCheckSelfTest() 
{
	UpdateData(TRUE);
	
	BYTE pData[15];
	
	pData[0]=m_bChkSelfTest;
	
	if(VCI_SetReference(m_DevType,m_DevIndex,m_nCanIndex,REFTYPE_MODE,pData)!=1)
	{
		MessageBox("failed");
		return;
		
	}
	MessageBox("Finished");		
}

void CDemoCANDlg::OnButtonSend() 
{



	VCI_CAN_OBJ sendbuf[1];

	UpdateData(TRUE);
	CString str5[32];
	BYTE buf[50];
	BYTE SendID[10];
	CString strtemp,strtemp1;
	CString str1;
	int len,datanum=0,IDnum=0,newflag=1;

	len=m_strSendID.GetLength();	//from dialog
	for(int i=0; i<len;i++)
	{
		strtemp=m_strSendID.GetAt(i);
		if(strtemp==" ")
			newflag=1;
		else if(newflag==1)
		{
			newflag=0;
			strtemp=m_strSendID.GetAt(i);
			if(i==(len-1))
			{
				str5[IDnum]="0"+strtemp;

			}
			else
			{
				strtemp1=m_strSendID.GetAt(i+1);

				if(strtemp1 == " ")
					str5[IDnum]="0"+strtemp;
				else
					str5[IDnum]=strtemp+strtemp1;
			}

			SendID[IDnum]=Str2Hex(str5[IDnum]);
			IDnum++;
			if(IDnum>=4)	
				break;

		}

	}

	newflag=1;
	len=m_strSendData.GetLength();
	for(i=0; i<len;i++)
	{
		
		strtemp=m_strSendData.GetAt(i);
		if(strtemp==" ")
			newflag=1;
		else if(newflag==1)
		{	

			newflag=0;
			strtemp=m_strSendData.GetAt(i);		
			if(i==(len-1))
			{
				str5[datanum]="0"+strtemp;

			}
			else
			{
				strtemp1=m_strSendData.GetAt(i+1);

				if(strtemp1 == " ")
				{
					str5[datanum]="0"+strtemp;
				
				}
				else
					str5[datanum]=strtemp+strtemp1;
			
			}
			buf[datanum]=Str2Hex(str5[datanum]);
			datanum++;
			if(datanum>=8)
				break;

		}

	}

	sendbuf->ExternFlag=m_nSendFrameType;
	sendbuf->DataLen=datanum;
	sendbuf->RemoteFlag=m_nSendFrameFormat;
	if(m_nSendFrameFormat==1)//if remote frame, data area is invalid
		for(i=0;i<datanum;i++)
			buf[i]=0;
	BYTE SendID2[4];
	
	if((sendbuf->ExternFlag)==1)//
	{
		if(m_radioIDFormat)//direcet id to SJA1000 format
		{
			SendID[0] &= 0x1F;
			SendID2[0]=(SendID[0]<<3)|(SendID[1]>>5);
			SendID2[1]=(SendID[1]<<3)|(SendID[2]>>5);
			SendID2[2]=(SendID[2]<<3)|(SendID[3]>>5);
			SendID2[3]=(SendID[3]<<3);
			for(i=0;i<4;i++)
				sendbuf->ID[i]=SendID2[i];
		//	sendbuf->ID=(SendID2[0]<<24)+(SendID2[1]<<16)+(SendID2[2]<<8)+SendID2[3];
		}
		else
		{
			SendID[3]=SendID[3] & 0xF8;//the last 3bit is invalid, clear to 0
			for(i=0;i<4;i++)
				sendbuf->ID[i]=SendID[i];
		//	sendbuf->ID=(SendID[0]<<24)+(SendID[1]<<16)+(SendID[2]<<8)+SendID[3];

		}
	}
	else//basic frame ID
	{

		if(m_radioIDFormat)//
		{
			SendID[2] &= 0x07; 
			SendID2[0]=(SendID[2]<<5)|(SendID[3]>>3);
			SendID2[1]=SendID[3]<<5;
			for(i=0;i<2;i++)
				sendbuf->ID[i]=SendID2[i];
		}
		else
		{
			SendID[1]=SendID[1] & 0xE0;//the lower 5 bits is invalid,clear to 0
			for(i=0;i<2;i++)
				sendbuf->ID[i]=SendID[i];
		}
	}

	for(i=0;i<datanum;i++)
		sendbuf->Data[i]=buf[i];
	

	int flag;

	flag=VCI_Transmit(m_DevType,m_DevIndex,m_nCanIndex,sendbuf);//CAN message send
	if(flag<1)
	{
		if(flag==-1)
			MessageBox("failed- device not open\n");
		else if(flag==0)
			MessageBox("send error\n");
		return;
	
	}

	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);
	m_list.ItemColorFlag[nextrow]=1;
	JustnowItem=m_list.InsertItem(nextrow,str);	

	nextrow++;	
	m_list.SetItemText(JustnowItem,1,strTime);		
	str.Format("%d",m_nCanIndex);	
	m_list.SetItemText(JustnowItem,2,str);		
	m_list.SetItemText(JustnowItem,3,"Send");		
	str="";

	if((sendbuf->RemoteFlag)==1)
	{
		m_list.SetItemText(JustnowItem,5,"Remote");	
	}
	else
	{
		m_list.SetItemText(JustnowItem,5,"Data");	
	
	}
	if((sendbuf->ExternFlag)==1)			
	{
			for(i=0;i<4;i++)
			{
				data=SendID[i];
				str1.Format("%02X",data);
				str+=str1;
			}
			m_list.SetItemText(JustnowItem,4,str);			
			m_list.SetItemText(JustnowItem,6,"Extended");		//	
	
	}
	else									
	{
			for(i=0;i<2;i++)
			{			
				if(m_radioIDFormat)//direct id to sja1000 format
					data=SendID[i+2];
				else
					data=SendID[i];
				str1.Format("%02X",data);
				str+=str1;
			}
			m_list.SetItemText(JustnowItem,4,str);		
		
			m_list.SetItemText(JustnowItem,6,"Standard");		//
		
		
	}
	str.Format("%d",sendbuf->DataLen);	
	m_list.SetItemText(JustnowItem,7,str);	
	
	str="";
	for(i=0;i<sendbuf->DataLen;i++)		
	{
		data=sendbuf->Data[i];
		str1.Format("%02X",data);
		str+=str1+" ";
	
	}
	m_list.SetItemText(JustnowItem,8,str);	

	m_list.Scroll(size); 
		
}


UINT CDemoCANDlg::ReceiveThread(LPVOID v)
{
	CDemoCANDlg *dlg=(CDemoCANDlg*) AfxGetApp()->GetMainWnd();	
	int k=0;
	while(1)
	{

		int NumValue;
		int i;

		VCI_CAN_OBJ pCanObj[200];

		CString strbuf[200],str1;
		int num=0;

		CSize size;
		unsigned int JustnowItem;
		BYTE ReceivedID[4];

		size.cx=0;
		size.cy=50;
		CString str;
		int Len=0;
		
		for(int kCANIndex=0;kCANIndex<2;kCANIndex++)
		{
			NumValue=VCI_Receive(dlg->m_DevType,dlg->m_DevIndex,kCANIndex,pCanObj);

			k++;
			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++)
			{
				if(nextrow==59999)
				{
					dlg->m_list.DeleteAllItems();
					nextrow=0;
				}

				int nCanIndex=pCanObj[num].Reserved[0];
				if(nCanIndex>1)
					continue;
				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);	
				
				str.Format("%d",kCANIndex);
				dlg->m_list.SetItemText(JustnowItem,2,str);	
				
				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,"Standard");		//
							
							
				}
				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); 	


			}
		}
	

		Sleep(10);	

	
		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;	
	
	int i=0;
	
	// 新建Excel文件名及路径,TestSheet为内部表名	
	
	CSpreadSheet SS(sExcelFile, "canlog",false);
	CStringArray sampleRows, testRow;
	
	SS.BeginTransaction();
	
	sampleRows.RemoveAll();
	sampleRows.Add("Seq");
	sampleRows.Add("Time");
	sampleRows.Add("CANInd");
	sampleRows.Add("Orentation");
	sampleRows.Add("ID");
	sampleRows.Add("Frame");
	sampleRows.Add("Type");
	sampleRows.Add("DLC");
	sampleRows.Add("DATA");
	SS.AddHeaders(sampleRows,true);
	
	CString   str[10]={"10","11","12","13","14","15","16","17","18","19"}; 
	
	int   nCount   =   m_list.GetItemCount();   
	
	for(i=0;   i<nCount;   i++)   
	{   
		sampleRows.RemoveAll();
		for(int   j=0;   j<9;   j++)   
		{   
			str[j]=m_list.GetItemText(i,j); 
			sampleRows.Add(str[j]);
			
		}  
		SS.AddRow(sampleRows);			
		
	}
	
	SS.Commit();
	AfxMessageBox("Excel Write Finished!");	
}

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







⌨️ 快捷键说明

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