CAN 通信vc实例_第1页
CAN 通信vc实例_第2页
CAN 通信vc实例_第3页
CAN 通信vc实例_第4页
CAN 通信vc实例_第5页
已阅读5页,还剩84页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 Vc 程序CAN通信/ DemoCANDlg.cpp : implementation file/#include "stdafx.h"#include "DemoCAN.h"#include "DemoCANDlg.h"#include "ControlCAN.h"#include "help.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifUCHARFilter

2、1=5;UCHARTiming00;UCHARTiming11;UCHARMode1=5;DWORDAccCode1=2;DWORDAccMask1=1;/HWND hWnd1=0;char Sanbuf24="11 22 33 44 55 66 77 88"CString sFile;unsigned long nextrow;int StopFlag=0;int StopFlag1=0;unsigned int JustnowItem;CString data1;int value_a=0;int ID_val=0;char zbuf124="00 00 00

3、 00 00 00 00 00"HWND hwnd=0;/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(C

4、DataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(

5、CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CDemoCANDlg dialogCDemoCANDlg:CDemoCANDlg(CWnd* pParent /*=NULL*/): CDialog(CDemoCANDlg:IDD, pParent)/AFX_DATA_INIT(CDemoCANDlg)m_nSendFrameFormat = 0;m_nSendFrameTy

6、pe = 0;m_strSendData = _T(Sanbuf);m_strSendID = _T("00 00 00 88");m_radioIDFormat = 1;m_bCanRxEn = FALSE;m_nCanIndex = 0;m_nDevType = 0;m_box1=1;m_box2=0;m_box3=2;m_box4=0;m_box11=_T("传感器输出电压1V-3V");m_bCanRxEn1 = FALSE;/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequ

7、ent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);void CDemoCANDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CDemoCANDlg)DDX_Control(pDX, IDC_COMB12, m_COMBOX12);DDX_Control(pDX, IDC_COMBO11, m_box111);DDX_Control(pDX, IDC_LIST1, m_list);DDX_

8、CBIndex(pDX, IDC_COMBO_SENDFRAMEFORMAT, m_nSendFrameFormat);DDX_CBIndex(pDX, IDC_COMBO_SENDFRAMETYPE, m_nSendFrameType);DDX_Text(pDX, IDC_EDIT_SEND_DATA, m_strSendData);DDX_Text(pDX, IDC_EDIT_SEND_ID, m_strSendID);DDX_Radio(pDX, IDC_RADIO_ID_FORMAT, m_radioIDFormat);DDX_Check(pDX, IDC_CHECK_CANRX_EN

9、, m_bCanRxEn);DDX_CBIndex(pDX, IDC_COMBO_CAN_INDEX, m_nCanIndex);DDX_CBIndex(pDX, IDC_COMBO_DEVTYPE, m_nDevType);DDX_CBIndex(pDX, IDC_COMBO1, m_box1);DDX_CBIndex(pDX, IDC_COMBO2, m_box2);DDX_CBIndex(pDX, IDC_COMBO3, m_box3);DDX_CBIndex(pDX, IDC_COMBO4, m_box4);DDX_Text(pDX,IDC_COMBO11,m_box11);DDX_C

10、heck(pDX, IDC_CHECK_CANRX_EN2, m_bCanRxEn1);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CDemoCANDlg, CDialog)/AFX_MSG_MAP(CDemoCANDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON_OPEN_DEVICE, OnButtonOpenDevice)ON_BN_CLICKED(IDC_BUTTON_SEND, OnButtonSend)ON_BN_CLICKED(IDC_CHECK_CA

11、NRX_EN, OnCheckCanrxEn)ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnButtonClear)ON_BN_CLICKED(IDC_BUTTON_CLOSE_DEVICE, OnButtonCloseDevice)ON_CBN_EDITCHANGE(IDC_COMBO_SENDFRAMEFORMAT, OnEditchangeComboSendframeformat)ON_CBN_EDITCHANGE(IDC_COMBO_DEVTYPE, OnEditchangeComboDevtype)ON_BN_CLICKED(IDC_BUTTON1, OnBut

12、ton1)ON_BN_CLICKED(IDC_BUTTON3, OnButton3)ON_BN_CLICKED(IDC_BUTTON4, OnButton4)ON_BN_CLICKED(IDC_BUTTON5, OnButton5)ON_CBN_EDITCHANGE(IDC_COMBO11, OnEditchangeCombo5)ON_BN_CLICKED(IDC_BUTTON6, OnButton6)ON_BN_CLICKED(IDC_CHECK_CANRX_EN2, OnCheckCanrxEn2)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CDemoCANDlg mes

13、sage handlersBOOL CDemoCANDlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMe

14、nu != NULL)CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the application's main

15、 window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small iconm_box111.SetCurSel(0);m_COMBOX12.SetCurSel(1);SetDlgItemText(IDC_EDIT1,"未启用");SetDlgItemText(IDC_EDIT2,"未启用");SetDlgItemText(IDC_EDIT3,"未启用");SetDlgItemText(IDC_EDIT4,&qu

16、ot;未启用");SetDlgItemText(IDC_EDIT5,"未启用");SetDlgItemText(IDC_EDIT6,"未启用");SetDlgItemText(IDC_EDIT7,"未启用");SetDlgItemText(IDC_EDIT8,"未启用");SetDlgItemText(IDC_EDIT9,"未启用");SetDlgItemText(IDC_EDIT10,"未启用");SetDlgItemText(IDC_EDIT11,"未

17、启用");SetDlgItemText(IDC_EDIT12,"未启用");SetDlgItemText(IDC_EDIT13,"未启用"); /信息显示列表初始化m_list.InsertColumn(0,"序号");m_list.SetColumnWidth(0,50);m_list.InsertColumn(1,"系统时间");m_list.SetColumnWidth(1,95);m_list.InsertColumn(2,"CANIndex");m_list.SetColum

18、nWidth(2,70);m_list.InsertColumn(3,"Tx-Rx");m_list.SetColumnWidth(3,70);m_list.InsertColumn(4," 设备ID ");m_list.SetColumnWidth(4,70);m_list.InsertColumn(5,"结构");m_list.SetColumnWidth(5,60);m_list.InsertColumn(6,"类型");m_list.SetColumnWidth(6,70);m_list.InsertCol

19、umn(7,"DLC");m_list.SetColumnWidth(7,40);m_list.InsertColumn(8,"数据");m_list.SetColumnWidth(8,170);m_list.InsertColumn(9,"设置状态");m_list.SetColumnWidth(9,70);/信息显示列表初始化完毕m_strSendID = "12 34 56 78"/SetDlgItemText(IDC_COMBO1,"1");/ TODO: Add extra initi

20、alization hereUpdateData(FALSE);return TRUE; / return TRUE unless you set the focus to a controlvoid CDemoCANDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to you

21、r dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CDemoCANDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSa

22、feHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:On

23、Paint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CDemoCANDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;/一位十六进制转换为十进制int HexChar(char c)if(c>='0') && (c<='9')return c-0x30;else if(c>='A') &&

24、amp; (c<='F')return c-'A'+10;else if(c>='a') && (c<='f')return c-'a'+10;elsereturn 0x10;/两位十六进制数转换为十进制int Str2Hex(CString str)int len = str.GetLength();if(len = 2)int a= HexChar(str0);int b =HexChar(str1);if(a=16 | b=16 )AfxMessageBox("格式

25、错误!");return 256;elsereturn a*16+b;elseAfxMessageBox("input length must be 2");return 256;/打开设备void CDemoCANDlg:OnButtonOpenDevice() UpdateData(TRUE);int zcc=0;char szText4=0;GetDlgItemText(IDC_COMBO_CAN_INDEX,szText,4); zcc=atoi(szText);m_DevIndex=0;m_nDevType=zcc;m_DevType= m_nDevTy

26、pe = 1 ? VCI_USBCAN2 : VCI_USBCAN1;DWORD Reserved=0;/打开设备if(VCI_OpenDevice(m_DevType,m_DevIndex,Reserved)!=1)MessageBox("open failed");return;if(Mode1=5)MessageBox("打开失败,请先设置CAN参数!");return;VCI_INIT_CONFIG InitInfo1;InitInfo->Timing0=Timing00;InitInfo->Timing1=Timing11;Init

27、Info->Filter=Filter1;InitInfo->AccCode=AccCode1;InitInfo->AccMask=AccMask1;InitInfo->Mode=Mode1; /初始化通道0if(VCI_InitCAN(m_DevType,m_DevIndex, 0,InitInfo)!=1)/can-0MessageBox("Init-CAN failed!");return;Sleep(100); /初始化通道0if(VCI_StartCAN(m_DevType,m_DevIndex, 0)!=1)/can-0MessageBo

28、x("Start-CAN failed!");return; /初始化通道1if(m_nDevType = 1)if(VCI_InitCAN(m_DevType,m_DevIndex, 1,InitInfo)!=1)/can-1MessageBox("Init-CAN failed!");return;Sleep(100); /初始化通道1if(VCI_StartCAN(m_DevType,m_DevIndex, 1)!=1)/can-0MessageBox("Start-CAN failed!");return;MessageBox

29、("Open successfule!n Start CAN OK!");/关闭设备void CDemoCANDlg:OnButtonCloseDevice() if(VCI_CloseDevice(m_DevType,m_DevIndex)!=1)MessageBox("关闭失败!");return;MessageBox("关闭成功!");int intcstring(CString stext)char stext316=0;sprintf(stext3,"%s",stext);int len=strlen(s

30、text3)+1;int num=0;int jol=0;for(len;len>2;len-)if(stext3len-1='A'|stext3len-1='B'|stext3len-1='C'|stext3len-1='D'|stext3len-1='E'|stext3len-1='F')int aa=0,pow=1;aa=stext3len-1-'A'+10;for(pow;pow<jol;pow+)aa=aa*16;num=num+aa;if(stext3len-

31、1='a'|stext3len-1='b'|stext3len-1='c'|stext3len-1='d'|stext3len-1='e'|stext3len-1='f')int aa1=0,pow=1;aa1=stext3len-1-'a'+10;for(pow;pow<jol;pow+)aa1=aa1*16;num=num+aa1;if('0'<=stext3len-1&&stext3len-1<='9')int

32、aa2=0,pow=1;aa2=stext3len-1-'0'for(pow;pow<jol;pow+)aa2=aa2*16;num=num+aa2;jol+;if(stext3len-1=' ')jol-;return num;/发送信息void CDemoCANDlg:OnButtonSend() /从界面获取发送信息VCI_CAN_OBJ sendbuf1;UpdateData(TRUE);CString str532;BYTE buf50;BYTE SendID10;CString strtemp,strtemp1;CString str1;int

33、 len,datanum=0,IDnum=0,newflag=1,i;value_a=1;len=m_strSendID.GetLength();/from dialogfor(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)str5IDnum="0"+strtemp;elsestrtemp1=m_strSendID.GetA

34、t(i+1);if(strtemp1 = " ")str5IDnum="0"+strtemp;elsestr5IDnum=strtemp+strtemp1;SendIDIDnum=Str2Hex(str5IDnum);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=

35、1)newflag=0;strtemp=m_strSendData.GetAt(i);if(i=(len-1)str5datanum="0"+strtemp;elsestrtemp1=m_strSendData.GetAt(i+1);if(strtemp1 = " ")str5datanum="0"+strtemp;elsestr5datanum=strtemp+strtemp1;bufdatanum=Str2Hex(str5datanum);datanum+;if(datanum>=8)break;sendbuf->Ex

36、ternFlag=m_nSendFrameType;sendbuf->DataLen=datanum;sendbuf->RemoteFlag=m_nSendFrameFormat;if(m_nSendFrameFormat=1)/if remote frame, data area is invalidfor(i=0;i<datanum;i+)bufi=0;if(sendbuf->ExternFlag)=1)/sendbuf->ID = intcstring(m_strSendID);else/basic frame IDif(m_radioIDFormat)/s

37、endbuf->ID = intcstring(m_strSendID);elsesendbuf->ID = intcstring(m_strSendID);for(i=0;i<datanum;i+)sendbuf->Datai=bufi;/*/*从界面获取发送信息完毕*/*/int flag;if(m_nCanIndex=1)&&(m_DevType!= VCI_USBCAN2)MessageBox("the device only support CAN index 0");m_nCanIndex=0; /调用动态链接库发送函数f

38、lag=VCI_Transmit(m_DevType,m_DevIndex,m_nCanIndex,sendbuf,1);/CAN message sendif(flag<1)if(flag=-1)MessageBox("失败-设备没有打开n");else if(flag=0)MessageBox("发送错误n");return;CSize size;unsigned int JustnowItem;BYTE data; /发送信息列表显示CString strTime;SYSTEMTIME systime; GetLocalTime(&s

39、ystime); 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.ItemColorFlagnextrow=1;JustnowItem=m_list.InsertItem(nextrow,str);nextrow+;m_list.SetItemText(Just

40、nowItem,1,strTime);str.Format("%d",m_nCanIndex);m_list.SetItemText(JustnowItem,2,str);m_list.SetItemText(JustnowItem,3,"发送");str=""if(sendbuf->RemoteFlag)=1)m_list.SetItemText(JustnowItem,5,"Remote");elsem_list.SetItemText(JustnowItem,5,"数据");if(s

41、endbuf->ExternFlag)=1)for(i=0;i<4;i+)data=SendIDi;str1.Format("%02X",data);str+=str1;m_list.SetItemText(JustnowItem,4,str);m_list.SetItemText(JustnowItem,6,"Extended");elsefor(i=0;i<2;i+)if(m_radioIDFormat)data=SendIDi+2;elsedata=SendIDi;str1.Format("%02X",data

42、);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->Datai;str1.Format("%02X",data);

43、str+=str1+" "data1=str;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 pCanObj200;CString strbuf200,str1;int num=0;int r

44、eID=0;CSize size;unsigned int JustnowItem;DWORD ReceivedID;size.cx=0;size.cy=50;CString str;int Len=0;char ad16=0;for(int kCanIndex=0;kCanIndex<2;kCanIndex+)/调用动态链接看接收函数NumValue=VCI_Receive(dlg->m_DevType,dlg->m_DevIndex,kCanIndex,pCanObj,200,0);/接收信息列表显示k+;CString strTime;SYSTEMTIME systim

45、e; 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;ReceivedID=pCanObjnum.ID;/str.Format("%d",kCanIndex

46、);str.Format("%08X",ReceivedID);reID=intcstring(str);/*sprintf(ad,"%d",reID);AfxMessageBox(ad);sprintf(ad,"%d",ID_val);AfxMessageBox(ad);*/if(ID_val=0|reID=ID_val)str.Format("%d",nextrow);JustnowItem=dlg->m_list.InsertItem(nextrow,str);str=""for(i

47、=0;i<(pCanObjnum.DataLen);i+)/数据信息str1.Format("%02X ",pCanObjnum.Datai);str+=str1;if(strcmp(str,data1)=0)dlg->m_list.ItemColorFlagnextrow=2;elsedlg->m_list.ItemColorFlagnextrow=0;nextrow+;dlg->m_list.SetItemText(JustnowItem,1,strTime);str.Format("%d",kCanIndex);dlg-&g

48、t;m_list.SetItemText(JustnowItem,2,str);dlg->m_list.SetItemText(JustnowItem,3,"接收");str=""if(pCanObjnum.RemoteFlag)=1)dlg->m_list.SetItemText(JustnowItem,5,"Remote");elsedlg->m_list.SetItemText(JustnowItem,5,"数据");if(pCanObjnum.ExternFlag)=1)ReceivedI

49、D=pCanObjnum.ID;str1.Format("%08X",ReceivedID);dlg->m_list.SetItemText(JustnowItem,4,str1);/ID信息dlg->m_list.SetItemText(JustnowItem,6,"Extended");/else/标准帧ReceivedID=pCanObjnum.ID;str1.Format("%08X",ReceivedID);dlg->m_list.SetItemText(JustnowItem,4,str1);/ID信息d

50、lg->m_list.SetItemText(JustnowItem,6,"Standard");str.Format("%d",pCanObjnum.DataLen);/长度信息dlg->m_list.SetItemText(JustnowItem,7,str);str=""for(i=0;i<(pCanObjnum.DataLen);i+)/数据信息str1.Format("%02X ",pCanObjnum.Datai);str+=str1;dlg->m_list.SetItemTex

51、t(JustnowItem,8,str);if(StopFlag1=1&&value_a!=1)/strcpy(zbuf1,str);sprintf(zbuf1,"%s",str);if(value_a=1)if(strcmp(str,data1)=0)/dlg->m_list.ItemColorFlagnextrow=2;/str.Format("%d",nextrow);/JustnowItem=dlg->m_list.InsertItem(nextrow,str);dlg->m_list.SetItemText(JustnowItem,9,"设置成功");AfxMessageBox("设置成功!");va

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论