📄 cantest2dlg.cpp
字号:
sendbuf->BiaoShiFu[1]=0x04;
m_ctrlZhenMuDi.GetWindowText(string);
break;
case 5:
sendbuf->BiaoShiFu[1]=0x05;
m_ctrlZhenMuDi.GetWindowText(string);
break;
case 6:
sendbuf->BiaoShiFu[1]=0x06;
m_ctrlZhenMuDi.GetWindowText(string);
break;
case 7:
sendbuf->BiaoShiFu[1]=0x07;
m_ctrlZhenMuDi.GetWindowText(string);
break;
case 8:
sendbuf->BiaoShiFu[1]=0x08;
m_ctrlZhenMuDi.GetWindowText(string);
break;
case 9:
sendbuf->BiaoShiFu[1]=0x0F;
m_ctrlZhenMuDi.GetWindowText(string);
break;
}
sendbuf->BiaoShiFu[0]=0x00;
*/
if(m_nZhenLeiXing==0)
{
sendbuf->RemoteFlag=0;
for(i=0;i<datanum;i++)
sendbuf->Data[i]=buf[i];
}
else
{
sendbuf->RemoteFlag=1;
for(i=0;i<datanum;i++)
sendbuf->Data[i]=0x00;
}
if(VCI_Transmit(DEV_USBCAN200,0,m_nTongDao,sendbuf)!=1)
{
if(VCI_Transmit(DEV_USBCAN200,0,m_nTongDao,sendbuf)==-1)
MessageBox("设备未打开");
else if(VCI_Transmit(DEV_USBCAN200,0,m_nTongDao,sendbuf)==0)
MessageBox("发送失败");
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_nTongDao);
m_list.SetItemText(JustnowItem,2,str);
m_list.SetItemText(JustnowItem,3,"发送");
str="";
// m_list.SetItemText(JustnowItem,4,"EGSE");
m_list.SetItemText(JustnowItem,5,string);
if(m_nZhenLeiXing==0)
m_list.SetItemText(JustnowItem,6,"数据帧");
else
m_list.SetItemText(JustnowItem,6,"远程帧");
m_list.SetItemText(JustnowItem,7,"标准帧");
str.Format("%d",sendbuf->DataLen);
m_list.SetItemText(JustnowItem,8,str);
str="";
if(m_nZhenLeiXing==0)
{
for(i=0;i<sendbuf->DataLen;i++)
{
data=sendbuf->Data[i];
str1.Format("%02X",data);
str+=str1+" ";
}
m_list.SetItemText(JustnowItem,9,str);
}
else
{
for(i=0;i<sendbuf->DataLen;i++)
{
data=0x00;
str1.Format("%02X",data);
str+=str1+" ";
}
m_list.SetItemText(JustnowItem,9,str);
}
m_list.Scroll(size);
}
void CCanTest2Dlg::OnClear()
{
// TODO: Add your control notification handler code here
m_list.DeleteAllItems();
nextrow=0;
}
void CCanTest2Dlg::OnSave()
{
// TODO: Add your control notification handler code here
CString m_strFileName;
CString sPath;
CFileDialog dlg(FALSE, "xls", NULL,
OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY,
"Excel 文件(*.xls)|*.xls||", this);
dlg.m_ofn.lpstrTitle = _T("保存");
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 (序号 TEXT,时间 TEXT,CAN通道 TEXT,传输方向 TEXT,帧源 TEXT,帧目的地 TEXT,帧类型 TEXT,帧格式 TEXT,数据长度 TEXT,数据信息 TEXT)";
database.ExecuteSQL(sSql);
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<10;j++)
{
str[j]=m_list.GetItemText(i,j);
}
sSql.Format("INSERT INTO canlog VALUES('%s','%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],str[9]);
database.ExecuteSQL(sSql);
}
}
database.Close();
MessageBox("保存成功");
}
CATCH_ALL(e)
{
TRACE1("no driver for excel: %s",sDriver);
}
END_CATCH_ALL;
}
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 CCanTest2Dlg::ReceiveThread(LPVOID v)
{
CCanTest2Dlg *dlg=(CCanTest2Dlg*) AfxGetApp()->GetMainWnd();
int k=0;
while(1)
{
int NumValue;
int i;
VCI_CAN_OBJ pCanObj[1];
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;
NumValue=VCI_Receive(DEV_USBCAN200,0,0,pCanObj);
if(pCanObj->RemoteFlag==0)
{
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;
}
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,"接收");
str="";
dlg->m_list.SetItemText(JustnowItem,6,"数据帧");
dlg->m_list.SetItemText(JustnowItem,7,"标准帧");
str.Format("%d",(pCanObj->DataLen));
dlg->m_list.SetItemText(JustnowItem,8,str);
str="";
for(i=0;i<(pCanObj->DataLen);i++)
{
str1.Format("%02X ",pCanObj->Data[i]);
str+=str1;
}
dlg->m_list.SetItemText(JustnowItem,9,str);
dlg->m_list.Scroll(size);
}
if(StopFlag==1)
return 0;
}
else
{
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;
}
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,"接收");
str="";
/*
switch(pCanObj->BiaoShiFu[1])
{
case 0x00:
dlg->m_list.SetItemText(JustnowItem,4,"总线恢复开始");
break;
case 0x01:
dlg->m_list.SetItemText(JustnowItem,4,"遥测遥控");
break;
case 0x02:
dlg->m_list.SetItemText(JustnowItem,4,"星载计算机");
break;
case 0x03:
dlg->m_list.SetItemText(JustnowItem,4,"姿控分系统1");
break;
case 0x04:
dlg->m_list.SetItemText(JustnowItem,4,"姿控分系统2");
break;
case 0x05:
dlg->m_list.SetItemText(JustnowItem,4,"微动量惯性组合");
break;
case 0x06:
dlg->m_list.SetItemText(JustnowItem,4,"数字太阳敏");
break;
case 0x07:
dlg->m_list.SetItemText(JustnowItem,4,"反作用轮");
break;
case 0x08:
dlg->m_list.SetItemText(JustnowItem,4,"地面测试");
break;
case 0x0F:
dlg->m_list.SetItemText(JustnowItem,4,"总线恢复结束");
break;
}
//if((pCanObj->BiaoShiFu[1])==0x00)
dlg->m_list.SetItemText(JustnowItem,4,"总线恢复开始");
dlg->m_list.SetItemText(JustnowItem,5,"EGSE");
*/
dlg->m_list.SetItemText(JustnowItem,6,"远程帧");
dlg->m_list.SetItemText(JustnowItem,7,"标准帧");
str.Format("%d",(pCanObj->DataLen));
dlg->m_list.SetItemText(JustnowItem,8,str);
str="";
for(i=0;i<(pCanObj->DataLen);i++)
{
str1.Format("%02X ",pCanObj[num].Data[i]);
str+=str1;
}
dlg->m_list.SetItemText(JustnowItem,9,str);
dlg->m_list.Scroll(size);
}
if(StopFlag==1)
return 0;
}
}
return 1;
}
void CCanTest2Dlg::OnReceive()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(m_Receive)
{
StopFlag=0;
AfxBeginThread(ReceiveThread,0);
}
else
StopFlag=1;
}
void CCanTest2Dlg::OnSelfcheck()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
BYTE pData[15];
if(m_SelfCheck)
{
pData[0]=1;
int i=VCI_SetReference(DEV_USBCAN200,0,0,REFTYPE_MODE,pData);
}
else
{
pData[0]=0;
int i=VCI_SetReference(DEV_USBCAN200,0,0,REFTYPE_MODE,pData);
}
}
void CCanTest2Dlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
BYTE pData[15];
pData[0]=0;
int i=VCI_SetReference(DEV_USBCAN200,0,0,REFTYPE_MODE,pData);
}
void CCanTest2Dlg::OnSelchangeComboMudi()
{
// TODO: Add your control notification handler code here
m_nZhenMuDi=m_ctrlZhenMuDi.GetCurSel();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -