📄 democandlg.cpp
字号:
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 + -