示例#1
0
        public override bool InitializeDevice(string[] args)
        {
            useDeviceIndex = 0;
            useCANIndex    = DeviceUtil.SelectSubDeviceByIndex(0, 1, "CAN端口");
            if (ECANDLL.OpenDevice(deviceType, useDeviceIndex, 0)
                != ECANStatus.STATUS_OK)
            {
                GetErrorInfo();
                return(false);
            }
            INIT_CONFIG InitialConfig = new INIT_CONFIG();

            InitialConfig.AccCode = 0;
            InitialConfig.AccMask = 0xffffff;
            InitialConfig.Filter  = 0;
            InitialConfig.Mode    = 0;

            List <string> SelectBaudRate = new List <string>()
            {
                "250kbps", "500kbps"
            };
            FrmDeviceSelect FrmSelectBaudRate = new FrmDeviceSelect();

            FrmSelectBaudRate.LoadDeviceList(SelectBaudRate);
            FrmSelectBaudRate.SetTitle("请选择合适的波特率");
            FrmSelectBaudRate.ShowDialog();
            if (FrmSelectBaudRate.selectedText == "250kbps")
            {
                //250kbps
                InitialConfig.Timing0 = 0x01;
                InitialConfig.Timing1 = 0x1c;
            }
            else if (FrmSelectBaudRate.selectedText == "500kbps")
            {
                //250kbps
                InitialConfig.Timing0 = 0x00;
                InitialConfig.Timing1 = 0x1c;
            }
            else
            {
                // TODO add more baud rate setting here
                return(false);
            }
            if (ECANDLL.InitCAN(deviceType, useDeviceIndex, useCANIndex, ref InitialConfig) != ECANStatus.STATUS_OK)
            {
                ECANDLL.CloseDevice(deviceType, useDeviceIndex);
                GetErrorInfo();
                return(false);
            }
            //uint bRel = ECANDLL.ClearBuffer(deviceType, useDeviceIndex, useCANIndex);
            //Logger.logDebug("Clean Buffer结果(1 成功,0 失败):" + bRel.ToString());
            //之所以发送这么一个毫无意义的东西是驱动的锅, 砍死开发驱动的
            SendData(new CANData(0x1, new byte[] { 1, 2, 4, 8, 16, 32, 64, 128 }));
            return(true);
        }
示例#2
0
        public ComProc()        //构造函数,对参数进行初始化
        {
            this.init_config = InitCan();

            if (!OpenComm())
            {
                MessageBox.Show("连接失败!");
                isOpen = false;
            }
            else
            {
                isOpen = true;
            }
        }
示例#3
0
        public bool Open(UInt32 DeviceType, ref INIT_CONFIG init)
        {
            if (IsOpened)
            {
                return(true);
            }

            if (ECANDLL.OpenDevice(DeviceType, 0, 0) != ECANStatus.STATUS_OK)
            {
                MessageBox.Show("Usb Can打开失败", "错误", MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
                return(false);
            }

            if (ECANDLL.InitCAN(DeviceType, 0, 0, ref init) != ECANStatus.STATUS_OK)
            {
                MessageBox.Show("Usb Can初始化失败", "错误", MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
                return(false);
            }

            if (ECANDLL.ClearBuffer(DeviceType, 0, 0) != ECANStatus.STATUS_OK)
            {
                MessageBox.Show("清除CAN缓冲区失败", "错误", MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
                return(false);
            }

            if (ECANDLL.StartCAN(DeviceType, 0, 0) != ECANStatus.STATUS_OK)
            {
                MessageBox.Show("启动CAN失败", "错误", MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
                return(false);
            }
            else
            {
                opened = true;
                Console.WriteLine("USB CAN open successfully!");
                return(true);
            }
        }
示例#4
0
        private bool ConfigCAN()
        {
            INIT_CONFIG config = channel.Config;

            CAN_MODE mode     = (CAN_MODE)Enum.ToObject(typeof(CAN_MODE), this.cbxCANMode.SelectedIndex);
            int      baudRate = Convert.ToInt32(cbxCANBaudRate.SelectedItem);

            if (m_IsConfigured && mode == channel.Mode && baudRate == channel.BaudRate)
            {
                // already configured, no need to update
                return(true);
            }

            CAN.ConfigMode(mode, ref config);
            CAN.ConfigBaudRate(baudRate, ref config);

            if (channel.InitCAN(baudRate, ref config) != (uint)CAN_RESULT.SUCCESSFUL)
            {
                m_IsConfigured = false;
                return(false);
            }
            m_IsConfigured = true;
            return(true);
        }
示例#5
0
        public void openDevice()
        {
            try {
                INIT_CONFIG init_config = new INIT_CONFIG();

                init_config.AccCode = 0;
                init_config.AccMask = 0xffffff;
                init_config.Filter  = 0;
                init_config.Timing0 = 0x00;
                init_config.Timing1 = 0x1c;
                init_config.Mode    = model;
                if (ECANDLL.OpenDevice(4, 0, 0) != ECAN.ECANStatus.STATUS_OK)
                {
                    openResult(false);
                    return;
                }
                //Set can1 baud
                if (ECANDLL.InitCAN(4, 0, 0, ref init_config) != ECAN.ECANStatus.STATUS_OK)
                {
                    openResult(false);
                    ECANDLL.CloseDevice(1, 0);
                    return;
                }
                if (ECANDLL.StartCAN(1, 0, 0) == ECAN.ECANStatus.STATUS_OK)
                {
                    //MessageBox.Show("Start CAN1 Success");
                    openResult(true);
                }
                else
                {
                    openResult(false);
                }
            }catch (Exception e) {
                logger.Error("ECAN 打开失败: " + e);
            }
        }
示例#6
0
        /// <summary>
        /// 初始化
        /// </summary>
        /// <param name="baudrate">波特率</param>
        /// <param name="boardInfo">设备信息</param>
        /// <returns></returns>
        public EcanXcpResult GcCanInitialize(out BOARD_INFO boardInfo)
        {
            INIT_CONFIG   initConfig   = new INIT_CONFIG();   // 创建CAN初始化配置结构体
            FILTER_RECORD filterRecord = new FILTER_RECORD(); // 定义CAN滤波器的滤波范围

            boardInfo.hw_Version     = 0x00;
            boardInfo.fw_Version     = 0x00;
            boardInfo.dr_Version     = 0x00;
            boardInfo.in_Version     = 0x00;
            boardInfo.irq_Num        = 0x00;
            boardInfo.can_Num        = 0x00;
            boardInfo.str_Serial_Num = new byte[] { 0x00 };
            boardInfo.str_hw_Type    = new byte[] { 0x00 };
            boardInfo.Reserved       = new ushort[] { 0x00 };

            // 滤波设置
            initConfig.AccCode = ((UInt32)(slaveID) << 21);
            initConfig.AccMask = 0x001FFFFF;
            // 初始化配置滤波使能
            initConfig.Filter = 1;

            filterRecord.ExtFrame = 0;
            filterRecord.Start    = masterID;
            filterRecord.End      = slaveID;

            // 初始化配置波特率
            switch (baudrate)
            {
            case "1000K":

                initConfig.Timing0 = 0;
                initConfig.Timing1 = 0x14;
                break;

            case "800K":

                initConfig.Timing0 = 0;
                initConfig.Timing1 = 0x16;
                break;

            case "666K":

                initConfig.Timing0 = 0x80;
                initConfig.Timing1 = 0xb6;
                break;

            case "500K":

                initConfig.Timing0 = 0;
                initConfig.Timing1 = 0x1c;
                break;

            case "400K":

                initConfig.Timing0 = 0x80;
                initConfig.Timing1 = 0xfa;
                break;

            case "250K":

                initConfig.Timing0 = 0x01;
                initConfig.Timing1 = 0x1c;
                break;

            case "200K":

                initConfig.Timing0 = 0x81;
                initConfig.Timing1 = 0xfa;
                break;

            case "125K":

                initConfig.Timing0 = 0x03;
                initConfig.Timing1 = 0x1c;
                break;

            case "100K":

                initConfig.Timing0 = 0x04;
                initConfig.Timing1 = 0x1c;
                break;

            case "80K":

                initConfig.Timing0 = 0x83;
                initConfig.Timing1 = 0xff;
                break;

            case "50K":

                initConfig.Timing0 = 0x09;
                initConfig.Timing1 = 0x1c;
                break;
            }

            // 初始化配置为正常模式
            initConfig.Mode = 0;

            // 打开CAN
            if (ECANDLL.OpenDevice(deviceType, deviceIndex, canIndex) == ECAN.ECANStatus.STATUS_OK)
            {
                // 初始化CAN
                if (ECANDLL.InitCAN(deviceType, deviceIndex, canIndex, ref initConfig) == ECAN.ECANStatus.STATUS_OK)
                {
                    // 设置CAN 滤波器的滤波范围 实测不起作用
                    if (ECANDLL.SetReference(deviceType, deviceIndex, canIndex, 1, ref filterRecord) == ECAN.ECANStatus.STATUS_OK)
                    {
                        // 启动USBCAN设备的通道0
                        if (ECANDLL.StartCAN(deviceType, deviceIndex, canIndex) == ECAN.ECANStatus.STATUS_OK)
                        {
                            if (ECANDLL.ReadBoardInfo(deviceType, deviceIndex, out boardInfo) == ECAN.ECANStatus.STATUS_OK)
                            {
                                return(EcanXcpResult.XCP_ERR_OK);
                            }
                            else
                            {
                                return(EcanXcpResult.XCP_ERR_GENERIC);
                            }
                        }
                        else
                        {
                            return(EcanXcpResult.XCP_ERR_GENERIC);
                        }
                    }
                    else
                    {
                        return(EcanXcpResult.XCP_ERR_GENERIC);
                    }
                }
                else
                {
                    ECANDLL.CloseDevice(deviceType, deviceIndex);
                    return(EcanXcpResult.XCP_ERR_GENERIC);
                }
            }
            else
            {
                return(EcanXcpResult.XCP_ERR_GENERIC);
            }
        }
示例#7
0
 public static extern ECANStatus InitCAN(
     UInt32 DeviceType,
     UInt32 DeviceInd,
     UInt32 CANInd,
     ref INIT_CONFIG InitConfig);
示例#8
0
        /// <summary>
        /// open and close can device, baud is 500kbps
        /// </summary>
        private void canOpenClose()
        {
            if (m_connect == 1)
            {
                m_connect             = 0;
                this.mCan.EnableProc  = false;
                this.mCan.EnableProc2 = false;

                this.can_device_open = false;
                ECANDLL.CloseDevice(1, 0);
                btnInit.Text = "打开CAN";

                this.can_device_open = false;
                this.stopAllThread();

                /*
                 * btnReset.Enabled = false;
                 * btnWrite.Enabled = false;
                 * btnSendFile.Enabled = false;
                 * checkBoxCan1.Enabled = true;
                 * checkBoxCan2.Enabled = true;
                 */
                return;
            }

            INIT_CONFIG init_config = new INIT_CONFIG();

            init_config.AccCode = 0;
            init_config.AccMask = 0xffffff;
            init_config.Filter  = 0;

            switch (m_Baudrate)
            {
            case 0:     //1000

                init_config.Timing0 = 0;
                init_config.Timing1 = 0x14;
                break;

            case 1:     //800

                init_config.Timing0 = 0;
                init_config.Timing1 = 0x16;
                break;

            case 2:     //666

                init_config.Timing0 = 0x80;
                init_config.Timing1 = 0xb6;
                break;

            case 3:     //500

                init_config.Timing0 = 0;
                init_config.Timing1 = 0x1c;
                break;

            case 4:    //400

                init_config.Timing0 = 0x80;
                init_config.Timing1 = 0xfa;
                break;

            case 5:    //250

                init_config.Timing0 = 0x01;
                init_config.Timing1 = 0x1c;
                break;

            case 6:    //200

                init_config.Timing0 = 0x81;
                init_config.Timing1 = 0xfa;
                break;

            case 7:    //125

                init_config.Timing0 = 0x03;
                init_config.Timing1 = 0x1c;
                break;

            case 8:    //100

                init_config.Timing0 = 0x04;
                init_config.Timing1 = 0x1c;
                break;

            case 9:    //80

                init_config.Timing0 = 0x83;
                init_config.Timing1 = 0xff;
                break;

            case 10:    //50

                init_config.Timing0 = 0x09;
                init_config.Timing1 = 0x1c;
                break;
            }

            init_config.Mode = 0;


            if (ECANDLL.OpenDevice(1, 0, 0) != ECAN.ECANStatus.STATUS_OK)
            {
                MessageBox.Show("Open device fault!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);

                return;
            }
            //Set can1 baud
            if (ECANDLL.InitCAN(1, 0, 0, ref init_config) != ECAN.ECANStatus.STATUS_OK)
            {
                MessageBox.Show("Init can fault!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);

                ECANDLL.CloseDevice(1, 0);
                return;
            }


            //set can2 baud

            switch (m_Baudrate2)
            {
            case 0:     //1000

                init_config.Timing0 = 0;
                init_config.Timing1 = 0x14;
                break;

            case 1:     //800

                init_config.Timing0 = 0;
                init_config.Timing1 = 0x16;
                break;

            case 2:     //666

                init_config.Timing0 = 0x80;
                init_config.Timing1 = 0xb6;
                break;

            case 3:     //500

                init_config.Timing0 = 0;
                init_config.Timing1 = 0x1c;
                break;

            case 4:    //400

                init_config.Timing0 = 0x80;
                init_config.Timing1 = 0xfa;
                break;

            case 5:    //250

                init_config.Timing0 = 0x01;
                init_config.Timing1 = 0x1c;
                break;

            case 6:    //200

                init_config.Timing0 = 0x81;
                init_config.Timing1 = 0xfa;
                break;

            case 7:    //125

                init_config.Timing0 = 0x03;
                init_config.Timing1 = 0x1c;
                break;

            case 8:    //100

                init_config.Timing0 = 0x04;
                init_config.Timing1 = 0x1c;
                break;

            case 9:    //80

                init_config.Timing0 = 0x83;
                init_config.Timing1 = 0xff;
                break;

            case 10:    //50

                init_config.Timing0 = 0x09;
                init_config.Timing1 = 0x1c;
                break;
            }

            init_config.Mode = 0;

            if (cmbCanPorts.SelectedItem.ToString() == "CAN-1")
            {
                if (ECANDLL.InitCAN(1, 0, 1, ref init_config) != ECAN.ECANStatus.STATUS_OK)
                {
                    MessageBox.Show("Init can fault!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);

                    ECANDLL.CloseDevice(1, 0);
                    return;
                }
            }


            // enable the timer to rec can data frame from can device.
            m_connect            = 1;
            this.can_device_open = true;
            if (cmbCanPorts.SelectedItem.ToString() == "CAN-0")
            {
                this.mCan.EnableProc = false;

                //this.mCan.ThreadReadDataFormDevice.Start();
                //this.ThreadUpdateTable.Start();
                //this.ThreadGetCanDataBuff.Start();
                this.startAllThread();

                DateTimeStamp = DateTime.Now;  // this is the time base of the charts
            }
            else
            {
                this.mCan.EnableProc = false;
            }
            if (cmbCanPorts.SelectedItem.ToString() == "CAN-1")
            {
                this.mCan.EnableProc2 = false;
                DateTimeStamp         = DateTime.Now;
            }
            else
            {
                this.mCan.EnableProc2 = false;
            }

            btnInit.Text = "关闭CAN";

            /*
             * btnReset.Enabled = true;
             * btnWrite.Enabled = true;
             * btnSendFile.Enabled = true;
             * IncludeTextMessage("Open Success");
             *
             * if (checkBoxCan2.Checked)
             *  btnWrite2.Enabled = true;
             *
             * checkBoxCan1.Enabled = false;
             * checkBoxCan2.Enabled = false;
             * */
            cmbCanPorts.Enabled = false;

            if (m_connect == 0)
            {
                MessageBox.Show("Not open device!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);

                return;
            }

            //Start Can1
            if (cmbCanPorts.SelectedItem.ToString() == "CAN-0")
            {
                if (ECANDLL.StartCAN(1, 0, 0) == ECAN.ECANStatus.STATUS_OK)
                {
                    //IncludeTextMessage("Start CAN1 Success");
                    tmrRead.Enabled = false;
                }

                else
                {
                    //IncludeTextMessage("Start Fault");
                }
            }
            //start CAN2
            if (cmbCanPorts.SelectedItem.ToString() == "CAN-1")
            {
                if (ECANDLL.StartCAN(1, 0, 1) == ECAN.ECANStatus.STATUS_OK)
                {
                    //IncludeTextMessage("Start CAN2 Success");
                    tmrRead.Enabled = false;
                }
                else
                {
                    //IncludeTextMessage("Start Fault");
                }
            }
        }