Ejemplo n.º 1
0
        /// <summary>
        /// 打开CAN
        /// </summary>
        /// <returns>成功否</returns>
        public unsafe static bool Start(int CanCount)
        {
            if (m_bOpen)
            {
                return(true);
            }
            m_CanCount = CanCount;
            try
            {
                m_bOpen = false;
                if (AdvCan.VCI_OpenDevice(m_devtype, m_devind, 0) != AdvCan.STATUS_OK)
                {
                    return(false);
                }
                if (LogInfo.Constant.CanType != AdvCan.VCI_CANETTCP)
                {
                    //can卡链接
                    for (uint m_canind = 0; m_canind < m_CanCount; m_canind++)
                    {
                        //0x060003--1000Kbps
                        //0x060004--800Kbps
                        //0x060007--500Kbps
                        //0x1C0008--250Kbps
                        //0x1C0011--125Kbps
                        //0x160023--100Kbps
                        //0x1C002C--50Kbps
                        //0x1600B3--20Kbps
                        //0x1C00E0--10Kbps
                        //0x1C01C1--5Kbps
                        //UInt32 canbaud = 0x1C0011;
                        //if (AdvCan.VCI_SetReference(m_devtype, m_devind, m_canind, 0, (byte*)&canbaud) != AdvCan.STATUS_OK)
                        //{
                        //    AdvCan.VCI_CloseDevice(m_devtype, m_devind);
                        //    return false;
                        //}
                        //滤波设置
                        VCI_INIT_CONFIG config = new VCI_INIT_CONFIG();
                        config.AccCode = 0;
                        config.AccMask = 0xFFFFFFFF;
                        config.Timing0 = 0x03;                  //125K
                        config.Timing1 = 0x1c;
                        config.Filter  = 0;                     //双滤波 单滤波
                        config.Mode    = 0;                     //正常 只听
                        if (AdvCan.VCI_InitCAN(m_devtype, m_devind, m_canind, ref config) != AdvCan.STATUS_OK)
                        {
                            AdvCan.VCI_CloseDevice(m_devtype, m_devind);
                            return(false);
                        }

                        if (AdvCan.VCI_StartCAN(m_devtype, m_devind, m_canind) != AdvCan.STATUS_OK)
                        {
                            AdvCan.VCI_CloseDevice(m_devtype, m_devind);
                            return(false);
                        }
                    }
                }
                else
                {
                    //can net 模块链接

                    /*VCI_SetReference(m_devtype,index,0,CMD_DESIP,(PVOID)szdesip);
                     * VCI_SetReference(m_devtype, index, 0, CMD_DESPORT, (PVOID) & desport);
                     *
                     * if (VCI_StartCAN(m_devtype, index, 0) != STATUS_OK)
                     * {
                     *      MessageBox("打开设备失败!", "警告", MB_OK | MB_ICONQUESTION);
                     *      return;
                     * }*/
                    m_CanCount = 1;
                    byte[] buf = System.Text.Encoding.ASCII.GetBytes(LogInfo.Constant.CanNetIP);
                    fixed(byte *pbuf = buf)
                    {
                        if (AdvCan.VCI_SetReference(m_devtype, m_devind, 0, AdvCan.CMD_DESIP, pbuf) != AdvCan.STATUS_OK)
                        {
                            AdvCan.VCI_CloseDevice(m_devtype, m_devind);
                            return(false);
                        }
                    }
                    int iPort = LogInfo.Constant.CanNetPort;
                    if (AdvCan.VCI_SetReference(m_devtype, m_devind, 0, AdvCan.CMD_DESPORT, (byte *)(&iPort)) != AdvCan.STATUS_OK)
                    {
                        AdvCan.VCI_CloseDevice(m_devtype, m_devind);
                        return(false);
                    }
                    if (AdvCan.VCI_StartCAN(m_devtype, m_devind, 0) != AdvCan.STATUS_OK)
                    {
                        AdvCan.VCI_CloseDevice(m_devtype, m_devind);
                        return(false);
                    }
                }
                m_bOpen = true;
                Thread t = new Thread(new ThreadStart(GetCanData));
                t.Start();
                return(true);
            }
            catch (Exception ee)
            {
                Log.WriteFileLog("打开CAN:" + ee.ToString());
                return(false);
            }
        }
Ejemplo n.º 2
0
 public static extern UInt32 VCI_InitCAN(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd, ref VCI_INIT_CONFIG pInitConfig);