Esempio n. 1
0
        /// <summary>
        /// 摘要:打开CAN口
        ///
        /// 返回值:-1 CAN打开失败;-2 CAN初始化失败;-3 启动CAN失败
        /// </summary>
        /// <returns></returns>
        public static int OpenCan()
        {
            if (VCI_OpenDevice(4, 0, 0) != 1)
            {
                return(-1);
            }

            VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();

            config.AccCode = 0x00000000; //Std_11
            config.AccMask = 0xFFFFFFFF; //STD
            config.Timing0 = 0x00;       //500 Kbps
            config.Timing1 = 0x1C;       //500 Kbps
            config.Filter  = 1;
            config.Mode    = 0;          //Normal Model

            if (VCI_InitCAN(4, 0, 0, ref config) != 1)
            {
                return(-2);
            }

            if (VCI_StartCAN(4, 0, 0) != 1)
            {
                return(-3);
            }
            return(0);
        }
Esempio n. 2
0
        /// <summary>
        /// 初始化某一路CAN通道
        /// </summary>
        private bool InitDevice()
        {
            VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();
            UInt32          pData  = 0x060007;

            if (devType > 18 && devType < 23)
            {
                config.Mode = 0;
                SetBaudRate(baudRate, ref pData);
                VCI_SetReference(devType, devIndex, 0, 0, ref pData);
            }
            else
            {
                config.AccCode = accCode;
                config.AccMask = accMask;
                config.Filter  = 1;
                config.Mode    = mode;
                config.Timing0 = timing0;
                config.Timing1 = timing1;
            }
            UInt32 res = VCI_InitCAN(devType, devIndex, devChannel, ref config);

            if ((Status)res == Status.ERROR)
            {
                return(false);
            }
            return(true);
        }
Esempio n. 3
0
        public void Connect()
        {
            if (m_bOpen == 0)
            {
                m_devtype = default_devtype;

                m_devind = default_devint;
                m_canind = default_canind;
                if (VCI_OpenDevice(m_devtype, m_devind, 0) == 0)
                {
                    MessageBox.Show("USB-CAN Adaptor connection fail", "Error",
                                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }

                m_bOpen = 1;
                VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();
                config.AccCode = default_AccCode;
                config.AccMask = default_AccMask;
                config.Timing0 = default_Timing0;
                config.Timing1 = default_Timing1;
                config.Filter  = default_Filter;
                config.Mode    = default_Mode;
                VCI_InitCAN(m_devtype, m_devind, m_canind, ref config);
            }
        }
Esempio n. 4
0
        private void buttonConnect_Click(object sender, EventArgs e)
        {
            if (m_bOpen == 1)
            {
                VCI_CloseDevice(m_devtype, m_devind);
                m_bOpen = 0;
            }
            else
            {
                m_devtype = m_arrdevtype[comboBox_devtype.SelectedIndex];

                m_devind = (UInt32)comboBox_DevIndex.SelectedIndex;
                m_canind = (UInt32)comboBox_CANIndex.SelectedIndex;
                if (VCI_OpenDevice(m_devtype, m_devind, 0) == 0)
                {
                    MessageBox.Show("打开设备失败,请检查设备类型和设备索引号是否正确", "错误",
                                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }

                m_bOpen = 1;
                VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();
                config.AccCode = System.Convert.ToUInt32("0x" + textBox_AccCode.Text, 16);
                config.AccMask = System.Convert.ToUInt32("0x" + textBox_AccMask.Text, 16);
                config.Timing0 = System.Convert.ToByte("0x" + textBox_Time0.Text, 16);
                config.Timing1 = System.Convert.ToByte("0x" + textBox_Time1.Text, 16);
                config.Filter  = (Byte)(comboBox_Filter.SelectedIndex + 1);
                config.Mode    = (Byte)comboBox_Mode.SelectedIndex;
                VCI_InitCAN(m_devtype, m_devind, m_canind, ref config);
            }
            buttonConnect.Text = m_bOpen == 1?"断开":"连接";
            timer_rec.Enabled  = m_bOpen == 1?true:false;
        }
Esempio n. 5
0
 private UInt16 CANInd_1 = 1;   // 第1路CAN
 /// <summary>
 /// 开启CAN设备
 /// </summary>
 /// <returns>设备状态码</returns>
 public DeviceState OpenCAN_1()
 {
     if (isOpen == false)
     {
         VCI_ClearBuffer(4, 0, CANInd_1);
         VCI_CAN_OBJ[] CANObj = new VCI_CAN_OBJ[100];
         if (VCI_OpenDevice((UInt32)4, (UInt32)0, CANInd_1) == 0)
         {
             return(DeviceState.Fail);
         }
         isOpen  = true;
         config1 = new VCI_INIT_CONFIG
         {
             AccCode  = 0x00000000,
             AccMask  = 0xffffffff,
             Reserved = 0,
             Timing0  = boundFirst,
             Timing1  = boundSecond,
             Filter   = 1,
             Mode     = 0
         };
         return(DeviceState.Success);
     }
     else
     {
         return(DeviceState.IsOpen);
     }
 }
Esempio n. 6
0
        public void Reset()
        {
            VCI_ResetCAN(m_devtype, m_devind, m_canind);
            VCI_ClearBuffer(m_devtype, m_devind, m_canind);
            VCI_CloseDevice(m_devtype, m_devind);

            if (Open())
            {
                VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();
                UInt32          can_id = Consts.CAN_ID;                     //滤波
                can_id       <<= 21;
                config.AccCode = System.Convert.ToUInt32("0x80000000", 16); //can_id;// System.Convert.ToUInt32("0x80000000", 16);
                config.AccMask = System.Convert.ToUInt32("0xFFFFFFFF", 16); //0x1fffffff;//过滤前3BIT  0x1f000000

                config.Timing0 = System.Convert.ToByte(Kbps((int)m_timing, 0), 16);
                config.Timing1 = System.Convert.ToByte(Kbps((int)m_timing, 1), 16);
                config.Filter  = (Byte)(1); //接收方式 1:接收全部类型 2:只接收标准帧 3:只接收扩展帧

                config.Mode = (Byte)0;      //模式 0 正常 1只听 2 自测

                UInt32 res = new UInt32();
                res = VCI_InitCAN(m_devtype, m_devind, m_canind, ref config);//初始化CAN参数f
                if (res == 1)
                {
                    VCI_StartCAN(m_devtype, m_devind, m_canind); //启动CAN
                }
            }
        }
 public override bool initializeCAN(uint DeviceType, uint DeviceIndex, uint CANIndex, byte baudratio)
 {
     try
     {
         VCI_OpenDevice(DeviceType, DeviceIndex, 0);
         VCI_INIT_CONFIG _CONFIG = new VCI_INIT_CONFIG()
         {
             AccCode  = 0,           //验收代码
             AccMask  = 0xffffffff,  //屏蔽代码
             Reserved = 0,           //保留位
             Filter   = 1,           //滤波方式,1 表示单滤波,0 表示双滤波
             Mode     = 0,           //模式,0 表示正常模式,1 表示只听模式
             Timing0  = 0,           //设置波特率
             Timing1  = baudratio    //设置波特率
         };
         UInt32 ss = VCI_InitCAN(DeviceType, DeviceIndex, CANIndex, ref _CONFIG);
         if (ss != 0)
         {
             VCI_StartCAN(DeviceType, DeviceIndex, CANIndex);
             IsOpen = true;
         }
         else
         {
             return(IsOpen);
         }
         return(IsOpen);
     }
     catch (Exception ex)
     {
         throw new Exception(ex + "初始化CAN 失败");
     }
 }
Esempio n. 8
0
        private void buttonConnect_Click(object sender, EventArgs e)
        {
            if (m_bOpen == 1)
            {
                VCI_CloseDevice(m_devtype, m_devind);
                m_bOpen = 0;
            }
            else
            {
                m_devtype = m_arrdevtype[comboBox_devtype.SelectedIndex];

                m_devind = (UInt32)comboBox_DevIndex.SelectedIndex;
                m_canind = (UInt32)comboBox_CANIndex.SelectedIndex;
                if (VCI_OpenDevice(m_devtype, m_devind, 0) == 0)
                {
                    MessageBox.Show("Failed to open the device, please check whether the device type and device index number are correct", "Error",
                                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }

                m_bOpen = 1;
                VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();
                config.AccCode = System.Convert.ToUInt32("0x" + textBox_AccCode.Text, 16);
                config.AccMask = System.Convert.ToUInt32("0x" + textBox_AccMask.Text, 16);
                config.Timing0 = System.Convert.ToByte("0x" + textBox_Time0.Text, 16);
                config.Timing1 = System.Convert.ToByte("0x" + textBox_Time1.Text, 16);
                config.Filter  = (Byte)(comboBox_Filter.SelectedIndex + 1);
                config.Mode    = (Byte)comboBox_Mode.SelectedIndex;
                VCI_InitCAN(m_devtype, m_devind, m_canind, ref config);
            }
            buttonConnect.Text = m_bOpen == 1?"Disconnect":"Connection";
            timer_rec.Enabled  = m_bOpen == 1?true:false;
        }
        /// <summary>
        /// CAN连接
        /// </summary>
        public bool CANConnect(UInt32 m_devtype, UInt32 m_devind, UInt32 m_canind)
        {
            //m_devtype = m_devtype;设备类型
            //m_devind = m_devind;设备索引号
            //m_canind = m_canind;地基路CAN
            if (VCI_OpenDevice(m_devtype, m_devind, 0) == 0)
            {
                //MessageBox.Show("打开设备失败,请检查设备类型和设备索引号是否正确", "错误",
                //MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return(false);
            }

            VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();

            config.AccCode = System.Convert.ToUInt32("0x" + "00000000", 16);
            config.AccMask = System.Convert.ToUInt32("0x" + "FFFFFFFF", 16);
            config.Timing0 = System.Convert.ToByte("0x" + "00", 16);
            config.Timing1 = System.Convert.ToByte("0x" + "1C", 16);
            config.Filter  = (Byte)1;
            config.Mode    = (Byte)0;


            if (VCI_InitCAN(m_devtype, m_devind, m_canind, ref config) == 0)
            {
                //MessageBox.Show("初始化设备失败", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

                return(false);
            }

            return(true);
        }
Esempio n. 10
0
        unsafe private void buttonConnect_Click(object sender, EventArgs e)
        {
            Form1 main = (Form1)this.Owner;

            if (m_bOpen == 1)
            {
                VCI_CloseDevice(m_devtype, m_devind);
                m_bOpen = 0;
            }
            else
            {
                m_devtype = m_arrdevtype[comboBox_devtype.SelectedIndex];

                m_devind = (UInt32)comboBox_DevIndex.SelectedIndex;
                m_canind = (UInt32)comboBox_CANIndex.SelectedIndex;//(UInt32)0x00200001U;//=
                if (VCI_OpenDevice(m_devtype, m_devind, 0) == 0)
                {
                    MessageBox.Show("打开设备失败,请检查设备类型和设备索引号是否正确", "错误",
                                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }
                main.button_loadBootCfg.Enabled = true;    //LC:bug fixed
                m_bOpen = 1;
                VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();
                config.AccCode          = System.Convert.ToUInt32("0x" + textBox_AccCode.Text, 16);
                config.AccMask          = System.Convert.ToUInt32("0x" + textBox_AccMask.Text, 16);
                config.Timing0          = System.Convert.ToByte("0x" + textBox_Time0.Text, 16);
                config.Timing1          = System.Convert.ToByte("0x" + textBox_Time1.Text, 16);
                config.Filter           = (Byte)(comboBox_Filter.SelectedIndex + 1);
                config.Mode             = (Byte)comboBox_Mode.SelectedIndex;
                main.frame_desc.RxState = 0;

                /* fixed (byte* rxBuf = &main.g_can_rx_buffer[0])
                 * {
                 *   main.frame_desc.pRxBuffPtr = rxBuf;
                 * }*/

                main.frame_desc.RxBuffSize  = 256;
                main.frame_desc.RxXferCount = 0;
                VCI_InitCAN(m_devtype, m_devind, m_canind, ref config);
                VCI_StartCAN(m_devtype, m_devind, m_canind);
            }
            buttonConnect.Text = m_bOpen == 1 ? "断开" : "连接";

            main.remoteflag        = comboBox_FrameFormat.SelectedIndex;
            main.extflag           = comboBox_FrameType.SelectedIndex;
            main.id                = textBox_ID.Text;
            main.devtype           = m_devtype;
            main.devind            = m_devind;
            main.canind            = m_canind;
            main.bopen             = m_bOpen;
            main.timer_rec.Enabled = (m_bOpen == 1) ? true : false;
            main.listBox_debug.Items.Clear();

            main.listBox_debug.Items.Add("setup transport, open=" + System.Convert.ToString(m_bOpen, 16));
            main.listBox_debug.SelectedIndex = main.listBox_debug.Items.Count - 1;
        }
Esempio n. 11
0
        /// <summary>
        /// //我 打开usbcan
        /// </summary>
        /// <returns></returns>
        public bool Open()
        {
            int m_bOpen = Convert.ToInt16(VCI_OpenDevice(d_Type, 0, 0)); //解决can通讯问题

            if (m_bOpen == 1)                                            //1表示高频,表示打开
            {
                VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();          //can数据
                config.AccCode = 0x00000000;
                config.AccMask = 0xFFFFFFFF;                             //接收所有ID
                switch (2)                                               //(MainWindow.baudrate)
                {
                case 0:
                    config.Timing0 = 0x03;    //125K ,波特率
                    config.Timing1 = 0x1c;
                    break;

                case 1:
                    config.Timing0 = 0x01;    //250K ,波特率
                    config.Timing1 = 0x1c;
                    break;

                case 2:
                    config.Timing0 = 0x00;    //500K ,波特率
                    config.Timing1 = 0x1c;
                    break;

                default:
                    break;
                }
                config.Filter = 1; //滤波模式,接收所有类型
                config.Mode   = 0; //正常工作模式
                if (VCI_InitCAN(d_Type, m_devind, m_canind, ref config) != 1)
                {
                    VCI_CloseDevice(d_Type, 0);
                    m_bOpen = 0;
                    return(false);
                }
                //开始CAN设备
                VCI_StartCAN(d_Type, m_devind, m_canind);

                isRunTimer = true;
                recTimer   = new Timer(new TimerCallback(ReadCANData), null, 0, 100); //1s调用ReadCANData函数
            }
            else
            {
                //打开CAN 分析仪
                if (VCI_OpenDevice(d_Type, 0, 0) == 0)
                {
                    MessageBox.Show("打开设备失败,请检查设备类型和设备索引号是否正确");
                }
                else
                {
                    m_bOpen = 1;
                }
            }
            return(true);
        }
        /// <summary>
        /// 
        /// </summary>
        void IDataCommunication.Open()
        {
            if (isOpen)
            {
                try
                {
                    VCI_CloseDevice(VCI_USBCAN1, DeviceInd);
                    isOpen = false;
                }
                catch
                {
                    return;
                }
            }
            if (readThread != null && readThread.ThreadState == ThreadState.Running)
            {
                readThread.Abort();
            }
            //打开设备
            if (VCI_OpenDevice(VCI_USBCAN1, DeviceInd, 0) != STATUS_OK)
            {
                WriteLog("打开设备失败!");
                return;
            }
            //初始化设备
            VCI_INIT_CONFIG init_config = new VCI_INIT_CONFIG();
            init_config.AccCode = 0;
            init_config.AccMask = 0xffffffff;
            init_config.Filter = 0;
            init_config.Mode = 0;
            init_config.Timing0 = 0; //波特率设为500Kbps,定时器1为0,2为0x1c
            init_config.Timing1 = 0x1c;
            //init_config.Timing0 = 0; //波特率设为1Mbps,定时器1为0,2为0x14
            //init_config.Timing1 = 0x14;

            if (VCI_InitCAN(VCI_USBCAN1, DeviceInd, CNDInd, ref init_config) != STATUS_OK)
            {
                WriteLog("初始化设备失败!");
                return;
            }

            //启动设备
            if (VCI_StartCAN(VCI_USBCAN1, DeviceInd, CNDInd) != STATUS_OK)
            {
                WriteLog("启动设备失败!");
                return;
            }

            isOpen = true;

            //开始读数据
            readThread = new Thread(Recieve);
            readThread.Start();
        }
Esempio n. 13
0
        public override bool InitializeDevice(string[] args)
        {
            useDeviceIndex = 0;
            useCANIndex    = useCANIndex = DeviceUtil.SelectSubDeviceByIndex(0, 1, "CAN端口");
            uint openResult = iTekAnalyst2API.VCI_OpenDevice(devideType, useDeviceIndex, 0);

            if (openResult == 0)
            {
                Logger.logError("iTek(CANPRO)打开失败!原因:" + openResult.ToString());
                return(false);
            }
            VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();

            config.AccCode = 0;
            config.AccMask = 0xffffff;
            List <string> selectBaudRate = new List <string>()
            {
                "250kbps", "500kbps"
            };
            FrmDeviceSelect frmSelectBaudRate = new FrmDeviceSelect();

            frmSelectBaudRate.LoadDeviceList(selectBaudRate);
            frmSelectBaudRate.SetTitle("请选择合适的波特率");
            frmSelectBaudRate.ShowDialog();
            if (frmSelectBaudRate.selectedText == "250kbps")
            {
                //250kbps
                config.Timing0 = 0x01;
                config.Timing1 = 0x1c;
            }
            else if (frmSelectBaudRate.selectedText == "500kbps")
            {
                //250kbps
                config.Timing0 = 0x00;
                config.Timing1 = 0x1c;
            }
            else
            {
                return(false);
            }
            frmSelectBaudRate.Dispose();
            config.Filter = 0;
            config.Mode   = 0;
            uint initResult = iTekAnalyst2API.VCI_InitCAN(devideType, useDeviceIndex, useCANIndex, ref config);

            Logger.logInfo("iTek(CANPRO)初始化结果:" + initResult.ToString());
            uint startResult = iTekAnalyst2API.VCI_StartCAN(devideType, useDeviceIndex, useCANIndex);

            Logger.logInfo("iTek(CANPRO)启动结果:" + startResult.ToString());
            return(true);
        }
Esempio n. 14
0
        /// <summary>
        /// 启动CAN的端口号
        /// </summary>
        /// <param name="id"></param>
        unsafe public Int16 CAN_Open(UInt32 id)
        {
            if (ConnectStatus == 0 || 1 == OpenStatus)
            {
                return(-1);
            }

            //USB-E-U 代码
            UInt32 baud = GCanBrTab[2];

            if (VCI_SetReference(m_devtype, m_devind, id, 0, (byte *)&baud) != STATUS_OK)
            {
                MessageBox.Show("设置波特率错误,打开设备0失败!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                VCI_CloseDevice(m_devtype, m_devind);
                return(-1);
            }
            //滤波设置
            //////////////////////////////////////////////////////////////////////////
            VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();

            config.AccCode = 00000000;   // System.Convert.ToUInt32("0x" + textBox_AccCode.Text, 16);
            config.AccMask = 0xFFFFFFFF; // System.Convert.ToUInt32("0x" + textBox_AccMask.Text, 16);
            config.Timing0 = 0;          // System.Convert.ToByte("0x" + textBox_Time0.Text, 16);
            config.Timing1 = 14;         // System.Convert.ToByte("0x" + textBox_Time1.Text, 16);
            config.Filter  = 1;          // 单滤波 (Byte)comboBox_Filter.SelectedIndex;
            config.Mode    = 0;          //正常模式 (Byte)comboBox_Mode.SelectedIndex;
            VCI_InitCAN(m_devtype, m_devind, id, ref config);
            //////////////////////////////////////////////////////////////////////////
            Int32 filterMode = 2; // comboBox_e_u_Filter.SelectedIndex;

            if (2 != filterMode)  //不是禁用
            {
                VCI_FILTER_RECORD filterRecord = new VCI_FILTER_RECORD();
                filterRecord.ExtFrame = (UInt32)filterMode;
                filterRecord.Start    = 1;    // System.Convert.ToUInt32("0x" + textBox_e_u_startid.Text, 16);
                filterRecord.End      = 0xff; // System.Convert.ToUInt32("0x" + textBox_e_u_endid.Text, 16);
                                              //填充滤波表格

                VCI_SetReference(m_devtype, m_devind, id, 1, (byte *)&filterRecord);
                //使滤波表格生效
                byte tm = 0;
                if (VCI_SetReference(m_devtype, m_devind, id, 2, &tm) != STATUS_OK)
                {
                    MessageBox.Show("设置滤波失败", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    VCI_CloseDevice(m_devtype, m_devind);
                    return(-1);
                }
            }
            VCI_StartCAN(m_devtype, m_devind, id);
            return(0);
        }
Esempio n. 15
0
        public void start()
        {
            //init((UInt32)0, 8);//8 = 250k  10 = 500k


            //VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();
            ////           UInt32 can_id = Consts.MASTER_CAN_ID;   //滤波
            ////            can_id <<= 21;


            //config.AccCode = System.Convert.ToUInt32("0x80000000", 16);//can_id;// System.Convert.ToUInt32("0x80000000", 16);
            //config.AccMask = System.Convert.ToUInt32("0xFFFFFFFF", 16);//0x1fffffff;//过滤前3BIT  0x1f000000

            //config.Timing0 = System.Convert.ToByte(Kbps((int)m_timing, 0), 16);
            //config.Timing1 = System.Convert.ToByte(Kbps((int)m_timing, 1), 16);

            //config.Filter = (Byte)(1);//接收方式 1:接收全部类型 2:只接收标准帧 3:只接收扩展帧

            //config.Mode = (Byte)0;//模式 0 正常 1只听 2 自测

            //UInt32 res = new UInt32();


            //res = VCI_InitCAN(m_devtype, m_devind, m_canind, ref config);//初始化CAN参数f
            //if (res == 1)       //操作成功
            //{
            //    VCI_StartCAN(m_devtype, m_devind, m_canind); //启动CAN
            //}


            VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();
            UInt32          can_id = Consts.CAN_ID; //滤波

            can_id       <<= 21;
            config.AccCode = System.Convert.ToUInt32("0x80000000", 16); //can_id;// System.Convert.ToUInt32("0x80000000", 16);
            config.AccMask = System.Convert.ToUInt32("0xFFFFFFFF", 16); //0x1fffffff;//过滤前3BIT  0x1f000000

            config.Timing0 = System.Convert.ToByte(Kbps((int)m_timing, 0), 16);
            config.Timing1 = System.Convert.ToByte(Kbps((int)m_timing, 1), 16);

            config.Filter = (Byte)(1); //接收方式 1:接收全部类型 2:只接收标准帧 3:只接收扩展帧

            config.Mode = (Byte)0;     //模式 0 正常 1只听 2 自测
            UInt32 res = new UInt32();

            res = VCI_InitCAN(m_devtype, m_devind, m_canind, ref config);//初始化CAN参数f
            if (res == 1)
            {
                VCI_StartCAN(m_devtype, m_devind, m_canind); //启动CAN
            }
        }
Esempio n. 16
0
        //初始化所有can通道
        private void InitCanAll()
        {
            VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();

            config.AccCode = System.Convert.ToUInt32("0x" + textBox_AccCode.Text, 16);
            config.AccMask = System.Convert.ToUInt32("0x" + textBox_AccMask.Text, 16);
            config.Filter  = mFilter; //(Byte)comboBox_Filter.SelectedIndex;
            config.Mode    = mMode;   //(Byte)comboBox_Mode.SelectedIndex;
            config.Timing0 = System.Convert.ToByte(can0T0TextBox.Text, 16);
            config.Timing1 = System.Convert.ToByte(can0T1TextBox.Text, 16);
            DllAdapte.VCI_InitCAN(mDevType, mDevInd, 0 /*(UInt32)CanIndex.Can0*/, ref config);
            config.Timing0 = System.Convert.ToByte(can1T0TextBox.Text, 16);
            config.Timing1 = System.Convert.ToByte(can1T1TextBox.Text, 16);
            DllAdapte.VCI_InitCAN(mDevType, mDevInd, 1 /*(UInt32)CanIndex.Can1*/, ref config);
        }
Esempio n. 17
0
        /// <summary>
        //CAN连接
        /// </summary>
        public unsafe bool ConncetCan()
        {
            if (connected)
            {
                return(connected);
            }
            var config = new VCI_INIT_CONFIG
            {
                AccCode = Convert.ToUInt32("0x00000000", 16),
                AccMask = Convert.ToUInt32("0xFFFFFFFF", 16),
                Timing0 = Convert.ToByte("0x00", 16),
                Timing1 = Convert.ToByte("0x1C", 16),
                Filter  = Convert.ToByte(1),
                Mode    = Convert.ToByte(0)
            };

            if (VCI_OpenDevice(m_devtype, m_devind, 0) == 0)
            {
                MessageBox.Show("CAN卡未正常连接,请连接CAN卡", "提示");
            }
            else
            {
                var baud = Convert.ToUInt32("0x060007", 16);
                if (VCI_SetReference(m_devtype, m_devind, m_canind, 0, (byte *)&baud) != STATUS_OK)
                {
                    MessageBox.Show("设置波特率错误,打开设备失败!", "错误");
                    VCI_CloseDevice(m_devtype, m_devind);
                }
                else
                {
                    VCI_InitCAN(m_devtype, m_devind, m_canind, ref config);
                    var open = VCI_StartCAN(m_devtype, m_devind, m_canind);
                    if (open == 1)
                    {
                        connected = true;
                    }

                    if (open == 0)
                    {
                        connected = false;
                        VCI_CloseDevice(m_devtype, m_devind);
                    }
                    CanConnectStats?.Invoke(connected);
                }
            }
            return(connected);
        }
Esempio n. 18
0
        private void but1_Click(object sender, RoutedEventArgs e)
        {
            UInt32 i = VCI_OpenDevice(4, 0, 0);
            int    j = (int)i;

            lab1.Content = j.ToString();

            VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();

            config.AccCode = 0x00000000;
            config.AccMask = 0xFFFFFFFF;
            config.Timing0 = 0x04;
            config.Timing1 = 0x1C;
            config.Filter  = 0;
            config.Mode    = 0;
            VCI_InitCAN(4, 0, 0, ref config);
        }
Esempio n. 19
0
        public uint Connect()
        {
            uint connection_status = ~(1U);

            if (m_bOpen == 0)
            {
                m_devtype = default_devtype;
                m_devind  = default_devint;
                m_canind  = default_canind;
                try
                {
                    connection_status = VCI_OpenDevice(m_devtype, m_devind, 0);
                }
                catch (DllNotFoundException Ex)
                {
                    Console.WriteLine(Ex.ToString());
                    MessageBox.Show(Ex.Message.ToString(), "Canbus can't start !");
                }
                if (connection_status == 1)
                {
                    VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();
                    config.AccCode    = default_AccCode;
                    config.AccMask    = default_AccMask;
                    config.Timing0    = default_Timing0;
                    config.Timing1    = default_Timing1;
                    config.Filter     = default_Filter;
                    config.Mode       = default_Mode;
                    connection_status = VCI_InitCAN(m_devtype, m_devind, m_canind, ref config);
                    if (connection_status == 1)
                    {
                        m_bOpen = 1;
                    }
                    else
                    {
                        Disconnect();
                        connection_status = 0x03;
                    }
                }
            }
            else
            {
                connection_status = 0x1000;
            }
            return(connection_status);
        }
Esempio n. 20
0
        /// <summary>
        /// 设置工作模式,需提供工作模式Id
        /// 必须先设置波特率再设置工模式
        /// </summary>
        /// <param name="modeId"> =0 表示正常模式(相当于正常节点), =1 表示只听模式(只接收,不影响总线)</param>
        /// <returns></returns>
        public bool SetWorkingMode(byte modeId = 0)
        {
            if (Thread.VolatileRead(ref disposed) != 0)
            {
                throw new ObjectDisposedException("CanDevice already disposed");
            }

            VCI_INIT_CONFIG initConfig = new VCI_INIT_CONFIG();

            initConfig.Mode = modeId;//正常模式

            if (VCI_InitCAN(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID, ref initConfig) == 0)
            {
                log.Error("Failed to set CAN working mode");
                return(false);
            }

            return(true);
        }
Esempio n. 21
0
        //根据指定的can通道进行初始化
        private void InitCanByIndex(UInt32 canInd)
        {
            VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();

            if (canInd == 0)
            {
                config.Timing0 = System.Convert.ToByte(can0T0TextBox.Text, 16);
                config.Timing1 = System.Convert.ToByte(can0T1TextBox.Text, 16);
            }
            else if (canInd == 1)
            {
                config.Timing0 = System.Convert.ToByte(can1T0TextBox.Text, 16);
                config.Timing1 = System.Convert.ToByte(can1T1TextBox.Text, 16);
            }

            config.AccCode = System.Convert.ToUInt32("0x" + textBox_AccCode.Text, 16);
            config.AccMask = System.Convert.ToUInt32("0x" + textBox_AccMask.Text, 16);
            config.Filter  = mFilter; //(Byte)comboBox_Filter.SelectedIndex;
            config.Mode    = mMode;   //(Byte)comboBox_Mode.SelectedIndex;
            DllAdapte.VCI_InitCAN(mDevType, mDevInd, canInd, ref config);
        }
Esempio n. 22
0
        unsafe public static bool canConnect()
        {
            if (!isOpen)
            {
                if (VCI_OpenDevice(deviceType, deviceIndex, 0) == 0)
                {
                    VCI_ReadErrInfo(deviceType, deviceIndex, canIndex, ref errorInfo);
                    return(false);
                }

                isOpen = true;
                VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();

                config.AccCode = 0;
                config.AccMask = 0xFFFFFFFF;
                config.Timing0 = 0;
                config.Timing1 = 28;
                config.Filter  = 1;
                config.Mode    = 0;

                VCI_InitCAN(deviceType, deviceIndex, canIndex, ref config);
                VCI_StartCAN(deviceType, deviceIndex, canIndex);

                obj.SendType   = 0;
                obj.RemoteFlag = 0;
                obj.ExternFlag = 0;
                obj.DataLen    = 8;

                fixed(byte *pData = obj.Data)
                {
                    for (int n = 0; n < 8; n++)
                    {
                        pData[n] = 0xFF;
                    }
                }
            }

            return(isOpen);
        }
Esempio n. 23
0
        public uint Connect()
        {
            uint connection_status = ~(1U);

            if (m_bOpen == 0)
            {
                m_devtype         = default_devtype;
                m_devind          = default_devint;
                m_canind          = default_canind;
                connection_status = VCI_OpenDevice(m_devtype, m_devind, 0);
                if (connection_status == 1)
                {
                    VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();
                    config.AccCode    = default_AccCode;
                    config.AccMask    = default_AccMask;
                    config.Timing0    = default_Timing0;
                    config.Timing1    = default_Timing1;
                    config.Filter     = default_Filter;
                    config.Mode       = default_Mode;
                    connection_status = VCI_InitCAN(m_devtype, m_devind, m_canind, ref config);
                    if (connection_status == 1)
                    {
                        m_bOpen = 1;
                    }
                    else
                    {
                        Disconnect();
                        connection_status = 0x03;
                    }
                }
            }
            else
            {
                connection_status = 0x1000;
            }
            return(connection_status);
        }
Esempio n. 24
0
        /// <summary>
        /// 设置CAN相关参数
        /// </summary>
        /// <param name="config"></param>
        /// <returns></returns>
        public bool InitCAN(_VCI_INIT_CONFIG config)
        {
            if (Thread.VolatileRead(ref disposed) != 0)
            {
                throw new ObjectDisposedException("CanDevice already disposed");
            }

            VCI_INIT_CONFIG obj = new VCI_INIT_CONFIG
            {
                AccCode  = config.AccCode,
                AccMask  = config.AccMask,
                Mode     = config.Mode,
                Filter   = config.Filter,
                Timing0  = config.Timing0,
                Timing1  = config.Timing1,
                Reserved = config.Reserved
            };

            if (VCI_InitCAN(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID, ref obj) == 0)
            {
                return(false);
            }
            return(true);
        }
Esempio n. 25
0
        /// <summary>
        /// 初始化设备
        /// </summary>
        /// <param name="canBand"></param>
        /// <param name="runMode"></param>
        /// <param name="filter"></param>
        /// <param name="accCode"></param>
        /// <param name="accMark"></param>
        /// <returns></returns>
        public bool InitalCanBus(UInt32 canBusId, ECanBaud canBand, out string er,
                                 UInt32 accCode   = 0x0, UInt32 accMark           = 0xFFFFFFFF,
                                 ERunMode runMode = ERunMode.正常模式, EFilter filter = EFilter.单滤波
                                 )
        {
            er = string.Empty;

            try
            {
                if (!_devOpen)
                {
                    er = "CanBus总线未打开";
                    return(false);
                }

                VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();
                config.AccCode = accCode;
                config.AccMask = accMark;
                config.Timing0 = BTR0[(int)canBand];
                config.Timing1 = BTR1[(int)canBand];
                config.Filter  = (Byte)filter;
                config.Mode    = (Byte)runMode;

                if (VCI_InitCAN(_devType, _canBusId, canBusId, ref config) != STATUS_OK)
                {
                    er = "初始化【" + ((EVCI)_devType).ToString() + "】设备【" + canBusId.ToString() + "】失败";
                    return(false);
                }
                return(true);
            }
            catch (Exception ex)
            {
                er = ex.ToString();
                return(false);
            }
        }
Esempio n. 26
0
        public static void CANConnectAndStart(Timer timer1)//打开和连接CAN
        {
            m_devtype = 3;
            m_devind  = 0;
            m_canind  = 0;
            //VCI_OpenDevice(m_devtype, m_devind, 0);
            if (VCI_OpenDevice(m_devtype, m_devind, 0) == 0)
            {
                MessageBox.Show("打开设备失败,请检查设备是否连接正确", "错误",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();

            config.AccCode = 0x00000000;
            config.AccMask = 0xFFFFFFFF;
            config.Timing0 = 0x00;
            config.Timing1 = 0x1C;
            config.Filter  = 1;
            config.Mode    = 0;
            VCI_InitCAN(m_devtype, m_devind, m_canind, ref config);
            timer1.Enabled = true;
            VCI_StartCAN(m_devtype, m_devind, m_canind);
        }
Esempio n. 27
0
 public static extern UInt32 VCI_InitCAN(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd, ref VCI_INIT_CONFIG pInitConfig);
 static protected extern UInt32 VCI_InitCAN(UInt32 DeviceType, UInt32 DeviceIndex, UInt32 CANIndex, ref VCI_INIT_CONFIG pInitConfig);
Esempio n. 29
0
        unsafe private void buttonConnect_Click(object sender, EventArgs e)
        {
            if (m_bOpen == 1)
            {
                VCI_CloseDevice(m_devtype, m_devind);
                m_bOpen = 0;
            }
            else
            {
                m_devind = (UInt32)comboBox_DevIndex.SelectedIndex;
                m_canind = (UInt32)comboBox_CANIndex.SelectedIndex;
                if (VCI_OpenDevice(m_devtype, m_devind, 0) == 0)
                {
                    MessageBox.Show("打开设备失败,请检查设备类型和设备索引号是否正确", "错误",
                                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }
                //USB-E-U 代码
                UInt32 baud;
                baud = GCanBrTab[comboBox_e_u_baud.SelectedIndex];
                if (VCI_SetReference(m_devtype, m_devind, m_canind, 0, (byte *)&baud) != STATUS_OK)
                {
                    MessageBox.Show("设置波特率错误,打开设备失败!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    VCI_CloseDevice(m_devtype, m_devind);
                    return;
                }
                //滤波设置


                //////////////////////////////////////////////////////////////////////////

                m_bOpen = 1;
                VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();
                config.AccCode = System.Convert.ToUInt32("0x" + textBox_AccCode.Text, 16);
                config.AccMask = System.Convert.ToUInt32("0x" + textBox_AccMask.Text, 16);
                config.Timing0 = System.Convert.ToByte("0x" + textBox_Time0.Text, 16);
                config.Timing1 = System.Convert.ToByte("0x" + textBox_Time1.Text, 16);
                config.Filter  = (Byte)comboBox_Filter.SelectedIndex;
                config.Mode    = (Byte)comboBox_Mode.SelectedIndex;
                VCI_InitCAN(m_devtype, m_devind, m_canind, ref config);

                //////////////////////////////////////////////////////////////////////////
                Int32 filterMode = comboBox_e_u_Filter.SelectedIndex;
                if (2 != filterMode)//不是禁用
                {
                    VCI_FILTER_RECORD filterRecord = new VCI_FILTER_RECORD();
                    filterRecord.ExtFrame = (UInt32)filterMode;
                    filterRecord.Start    = System.Convert.ToUInt32("0x" + textBox_e_u_startid.Text, 16);
                    filterRecord.End      = System.Convert.ToUInt32("0x" + textBox_e_u_endid.Text, 16);
                    //填充滤波表格
                    VCI_SetReference(m_devtype, m_devind, m_canind, 1, (byte *)&filterRecord);
                    //使滤波表格生效
                    byte tm = 0;
                    if (VCI_SetReference(m_devtype, m_devind, m_canind, 2, &tm) != STATUS_OK)
                    {
                        MessageBox.Show("设置滤波失败", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        VCI_CloseDevice(m_devtype, m_devind);
                        return;
                    }
                }
                //////////////////////////////////////////////////////////////////////////
            }
            buttonConnect.Text = m_bOpen == 1?"断开":"连接";
            timer_rec.Enabled  = m_bOpen == 1?true:false;
        }
Esempio n. 30
0
 static extern uint VCI_InitCAN(uint DevType, uint DevIndex, uint CANIndex, ref VCI_INIT_CONFIG pInitConfig);
Esempio n. 31
0
/*==========================================实现对CAN设备的连接===============================================================*/

        unsafe private void CAN_Connnection_Button_Click_1(object sender, EventArgs e)
        {
            if (The_Device_Statu == The_Device_is_Open)
            {
                VCI_CloseDevice(Current_Dev_Type, Current_Dev_Index);
                The_Device_Statu = The_Device_is_close;
                CAN_Start_Or_Reset_Button.Text = "启动CAN";
                CAN_Connnection_Button.Text    = "建立连接";
            }
            else if (The_Device_Statu == The_Device_is_close)
            {
                if (Current_Dev_Type == VCI_USBCAN_2E_U || Current_Dev_Type == VCI_USBCAN_E_U) //如果设备类型为 USBCAN-2E-U 或者 USBCAN-E-U 则执行以下代码
                {
                    if (VCI_OpenDevice(Current_Dev_Type, Current_Dev_Index, 0) == 0)
                    {
                        MessageBox.Show("打开设备失败,请检查设备类型和设备索引号是否正确", "错误",
                                        MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        return;
                    }

                    UInt32 baud = Current_BaudRate; // 如果不间接使用则会出现问题。

                    if (VCI_SetReference(Current_Dev_Type, Current_Dev_Index, Current_Can_Gallery, 0, (byte *)&baud) != BaudRate_STATUS_OK)
                    {
                        MessageBox.Show("设置波特率错误,打开设备失败!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        VCI_CloseDevice(Current_Dev_Type, Current_Dev_Index);
                        return;
                    }



                    VCI_INIT_CONFIG VCI_Init_Structure = new VCI_INIT_CONFIG();

                    VCI_Init_Structure.AccCode = Convert.ToUInt32("0x00000000", 16);
                    VCI_Init_Structure.AccMask = Convert.ToUInt32("0xFFFFFFFF", 16);
                    VCI_Init_Structure.Timing0 = Convert.ToByte("0x00", 16);
                    VCI_Init_Structure.Timing1 = Convert.ToByte("0x14", 16);
                    VCI_Init_Structure.Filter  = 1;
                    VCI_Init_Structure.Mode    = Normal_Mode;                                                                           // 在 USBCAN-E-U/2E-U PCI-5010-U、 PCI-5020-U 时 只有 MODE是 有效的 0 代表正常模式,1 代表只听模式

                    if (VCI_InitCAN(Current_Dev_Type, Current_Dev_Index, Current_Can_Gallery, ref VCI_Init_Structure) == Init_Statu_OK) //调用初始化函数,但是波特率是在 VCI_SETReference 实现的

                    {
                        MessageBox.Show("初始化 CAN 设备成功");

                        CAN_Connnection_Button.Text = "断开连接";

                        The_Device_Statu = The_Device_is_Open;
                    }
                }
                else if (Current_Dev_Type == VCI_USBCAN2) // 如果设备类型为 USBCANII 则执行以下代码
                {
                    if (VCI_OpenDevice(Current_Dev_Type, Current_Dev_Index, 0) == 0)
                    {
                        MessageBox.Show("打开设备失败,请检查设备类型和设备索引号是否正确", "错误",
                                        MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        return;
                    }

                    VCI_INIT_CONFIG VCI_Init_Structure = new VCI_INIT_CONFIG();

                    VCI_Init_Structure.AccCode = Convert.ToUInt32("0x00000000", 16);
                    VCI_Init_Structure.AccMask = Convert.ToUInt32("0xFFFFFFFF", 16);
                    VCI_Init_Structure.Timing0 = Convert.ToByte("0xbf", 16);
                    VCI_Init_Structure.Timing1 = Convert.ToByte("0xff", 16);
                    VCI_Init_Structure.Filter  = 1;
                    VCI_Init_Structure.Mode    = Normal_Mode;                                                                                                                                                                                                 // 在 USBCAN-E-U/2E-U PCI-5010-U、 PCI-5020-U 时 只有 MODE是 有效的 0 代表正常模式,1 代表只听模式

                    if (VCI_InitCAN(Current_Dev_Type, Current_Dev_Index, Current_Can_Gallery, ref VCI_Init_Structure) == Init_Statu_OK && VCI_InitCAN(Current_Dev_Type, Current_Dev_Index, Current_Can_Gallery + 1, ref VCI_Init_Structure) == Init_Statu_OK) //调用初始化函数,但是波特率是在 VCI_SETReference 实现的

                    {
                        MessageBox.Show("初始化 CAN 设备成功");

                        CAN_Connnection_Button.Text = "断开连接";

                        The_Device_Statu = The_Device_is_Open;
                    }
                    else
                    {
                        MessageBox.Show("未能初始化CAN设备");
                    }
                }
                else
                {
                    MessageBox.Show("设备类型暂未支持");

                    The_Device_Statu = The_Device_is_close;
                }
            }
            Scan_Timer.Enabled = The_Device_Statu == The_Device_is_Open ? true : false;
        }
Esempio n. 32
0
        unsafe public static bool canConnect()
        {
            if (!isOpen)
            {
                if (VCI_OpenDevice(deviceType, deviceIndex, 0) == 0)
                {
                    VCI_ReadErrInfo(deviceType, deviceIndex, canIndex, ref errorInfo);
                    return false;
                }

                isOpen = true;
                VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();

                config.AccCode = 0;
                config.AccMask = 0xFFFFFFFF;
                config.Timing0 = 0;
                config.Timing1 = 28;
                config.Filter = 1;
                config.Mode = 0;

                VCI_InitCAN(deviceType, deviceIndex, canIndex, ref config);
                VCI_StartCAN(deviceType, deviceIndex, canIndex);

                obj.SendType = 0;
                obj.RemoteFlag = 0;
                obj.ExternFlag = 0;
                obj.DataLen = 8;

                fixed (byte* pData = obj.Data)
                {
                    for (int n = 0; n < 8; n++)
                    {
                        pData[n] = 0xFF;
                    }
                }
            }

            return isOpen;
        }
 static extern uint VCI_InitCAN(uint DeviceType, uint DeviceInd, uint CANInd, ref VCI_INIT_CONFIG pInitConfig);
        /// <summary>
        /// 
        /// </summary>
        void IDataCommunication.Open()
        {
            if (isOpen)
            {
                try
                {
                    VCI_CloseDevice(DEVICETYPE, DeviceInd);
                    isOpen = false;
                }
                catch
                {
                    return;
                }
            }
            if (readThread != null && readThread.ThreadState == ThreadState.Running)
            {
                readThread.Abort();
            }
            //打开设备
            if (VCI_OpenDevice(DEVICETYPE, DeviceInd, 0) != STATUS_OK)
            {
                WriteLog("打开设备失败!");
                return;
            }

            //char[20] = new char[]{'1','9'};

            //VCI_SetReference(DEVICETYPE,DeviceInd,0,CMD_DESIP,

            //初始化设备
            VCI_INIT_CONFIG init_config = new VCI_INIT_CONFIG();
            init_config.AccCode = 0;
            init_config.AccMask = 0xffffffff;
            init_config.Filter = 0;
            init_config.Mode = 0;
            init_config.Timing0 = 0; //波特率设为500Kbps,定时器1为0,2为0x1c
            init_config.Timing1 = 0x1c;
            //init_config.Timing0 = 0; //波特率设为1Mbps,定时器1为0,2为0x14
            //init_config.Timing1 = 0x14;

            //init_config.Timing0 = 0x01; //波特率设为250Kbps,定时器1为1,2为0x1c
            //init_config.Timing1 = 0x1c;

            IntPtr intPtrIP;
            IntPtr intPtrPort;

            unsafe
            {
                byte[] byteIp = Encoding.ASCII.GetBytes(ip);
                fixed (void* pIP = &byteIp[0])
                {
                    intPtrIP = new IntPtr(pIP);
                }
                fixed (void* pPort = &port)
                {
                    intPtrPort = new IntPtr(pPort);
                }
            }

            VCI_SetReference(DEVICETYPE, DeviceInd, 0, CMD_DESIP, intPtrIP);
            VCI_SetReference(DEVICETYPE, DeviceInd, 0, CMD_DESPORT, intPtrPort);

            //if (VCI_InitCAN(DEVICETYPE, DeviceInd, CNDInd, ref init_config) != STATUS_OK)
            //{
            //    WriteLog("初始化设备失败!");
            //    return;
            //}

            //启动设备
            uint r = VCI_StartCAN(DEVICETYPE, DeviceInd, CNDInd);
            if (r != STATUS_OK)
            {
                WriteLog("启动失败!");
                return;
            }

            isOpen = true;

            //开始读数据
            readThread = new Thread(Recieve);
            readThread.Start();
        }