Example #1
0
 public bool Receive(out CAN_OBJ obj, uint timeout = 0)
 {
     return(ECANStatus.STATUS_OK ==
            ECANDLL.Receive(DefaultDeviceType, 0, 0, out obj, 1, timeout));
 }
Example #2
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");
                }
            }
        }