/// <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); } }
public static extern UInt32 VCI_InitCAN(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd, ref VCI_INIT_CONFIG pInitConfig);