zoukankan      html  css  js  c++  java
  • mfc配置CAN通信

    配置:
    把kerneldlls文件夹、ControlCAN.dll、ControlCAN.lib放在工程下面(debug和Release下面,最后需要exe和这些文件在一起);右键工程属性,链接器->输入->附加依赖项,填入./ControlCAN.lib。

    查看工程的外部依赖性里面有了controlcan.h就成功了

    一、打开can

    VCI_INIT_CONFIG init_config;//定义一个初始化can的结构体

    memset(&init_config,0,sizeof(VCI_INIT_CONFIG));
    init_config.AccMask = 0xffffffff; //屏蔽码,表示全部接接收
    init_config.Mode = 0; //正常模式
    init_config.Timing0 = 0x00; //定时器0,和波特率有关,1M波特率
    init_config.Timing1 = 0x14; //定时器1

    VCI_OpenDevice(VCI_USBCAN2,a,0);//打开设备

    VCI_InitCAN(VCI_USBCAN2,a,b,&init_config);//初始化can,VCI_USBCAN2=4,a:设备号,b:通道号

    VCI_StartCAN(VCI_USBCAN2,a,b);//打开指定通道

    二、关闭can

    VCI_CloseDevice(VCI_USBCAN2,a);

    三、复位can

    (VCI_ResetCAN(VCI_USBCAN2,a,b);//复位

    VCI_StartCAN(VCI_USBCAN2,a,b);//再打开

    四、发送

    VCI_CAN_OBJ vco;//数据结构体

    VCI_Transmit(VCI_USBCAN2,a,b,&vco,1);//发送

    五、接收

    VCI_CAN_OBJ frameinfo[100];//接收结构体
    VCI_ERR_INFO errinfo;//错误结构体
    int buf_frame_lenth = 0;//缓冲区没有被读取的帧数据个数
    DWORD rcv_lenth = 0;//接收到的数据
    int a ;
    int b ;
    a = ((CComboBox*)can_this->GetDlgItem(IDC_COMBO10))->GetCurSel();//设备号
    b = ((CComboBox*)can_this->GetDlgItem(IDC_COMBO11))->GetCurSel();//通道号
    while (can_this->ISOPEN)
    {
    Sleep(100);
    buf_frame_lenth = VCI_GetReceiveNum(VCI_USBCAN2,a,b);//查看缓冲区有多少帧数据
    if(buf_frame_lenth != 0)//如果缓冲区有未被读取的数据,开始读数据
    {
    rcv_lenth = VCI_Receive(VCI_USBCAN2,a,b,frameinfo,100,20);//接收数据
    if(rcv_lenth == 0xFFFFFFFF)//读取错误
      VCI_ReadErrInfo(VCI_USBCAN2,a,b,&errinfo);//读取错误信息

    //开始解析

    }

  • 相关阅读:
    禅道的安装
    项目管理必看的几个网站
    禅道管理中的项目管理--组织进行任务分解
    Redis--Springboot使用
    Mapper.xml--配置map<String, List<String>>输入
    SpringBoot-Dubbo、Zk
    高并发--并发编程的三大辅助类
    笔试-2020年西山居Java笔试题(补上,一直忘记补上了)
    HttpWebRequest.GetRequestStream方法timeout【第3次操作时就超时】的原因及解决办法
    洛谷 P2613 【模板】有理数取余(高精度取余,逆元)
  • 原文地址:https://www.cnblogs.com/judes/p/6400600.html
Copyright © 2011-2022 走看看