コード例 #1
0
        /// <summary>
        /// 设置ID过滤,若不需要过滤,则无需使用设置此函数,使用不安全代码,返回0表示OK
        /// </summary>
        /// <param name="filterMode"></param>
        /// <param name="startId"></param>
        /// <param name="endId"></param>
        /// <returns></returns>
        unsafe private bool SetCanIndexFilter(uint canIndex)
        {
            UInt32 filterMode = 2;    //禁用过滤
            UInt32 startId    = 0x01; //起始id
            UInt32 endId      = 0xff; //结束id

            if (filterMode == 2)      //不设置滤波
            {
                return(true);
            }

            bool result = true;

            VCI_FILTER_RECORD filterRecord = new VCI_FILTER_RECORD();

            filterRecord.ExtFrame = filterMode; //0标准帧滤波,1扩展帧滤波
            filterRecord.Start    = startId;
            filterRecord.End      = endId;
            //填充滤波表格
            if (VCI_SetReference((uint)m_CanType, m_DeviceIndex, canIndex, 1, (byte *)&filterRecord) == 0)
            {
                result = false;
                return(result);
            }

            //按照表格设置滤波
            if (VCI_SetReference((uint)m_CanType, m_DeviceIndex, canIndex, 2, null) == 0)
            {
                result = false;
                return(result);
            }

            return(result);
        }
コード例 #2
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);
        }
コード例 #3
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;
        }