/// <summary> /// 摘要:打开CAN口 /// /// 返回值:-1 CAN打开失败;-2 CAN初始化失败;-3 启动CAN失败 /// </summary> /// <returns></returns> public static int OpenCan() { if (VCI_OpenDevice(4, 0, 0) != 1) { return(-1); } VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); config.AccCode = 0x00000000; //Std_11 config.AccMask = 0xFFFFFFFF; //STD config.Timing0 = 0x00; //500 Kbps config.Timing1 = 0x1C; //500 Kbps config.Filter = 1; config.Mode = 0; //Normal Model if (VCI_InitCAN(4, 0, 0, ref config) != 1) { return(-2); } if (VCI_StartCAN(4, 0, 0) != 1) { return(-3); } return(0); }
/// <summary> /// 初始化某一路CAN通道 /// </summary> private bool InitDevice() { VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); UInt32 pData = 0x060007; if (devType > 18 && devType < 23) { config.Mode = 0; SetBaudRate(baudRate, ref pData); VCI_SetReference(devType, devIndex, 0, 0, ref pData); } else { config.AccCode = accCode; config.AccMask = accMask; config.Filter = 1; config.Mode = mode; config.Timing0 = timing0; config.Timing1 = timing1; } UInt32 res = VCI_InitCAN(devType, devIndex, devChannel, ref config); if ((Status)res == Status.ERROR) { return(false); } return(true); }
public void Connect() { if (m_bOpen == 0) { m_devtype = default_devtype; m_devind = default_devint; m_canind = default_canind; if (VCI_OpenDevice(m_devtype, m_devind, 0) == 0) { MessageBox.Show("USB-CAN Adaptor connection fail", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } m_bOpen = 1; VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); config.AccCode = default_AccCode; config.AccMask = default_AccMask; config.Timing0 = default_Timing0; config.Timing1 = default_Timing1; config.Filter = default_Filter; config.Mode = default_Mode; VCI_InitCAN(m_devtype, m_devind, m_canind, ref config); } }
private void buttonConnect_Click(object sender, EventArgs e) { if (m_bOpen == 1) { VCI_CloseDevice(m_devtype, m_devind); m_bOpen = 0; } else { m_devtype = m_arrdevtype[comboBox_devtype.SelectedIndex]; 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; } 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 + 1); config.Mode = (Byte)comboBox_Mode.SelectedIndex; VCI_InitCAN(m_devtype, m_devind, m_canind, ref config); } buttonConnect.Text = m_bOpen == 1?"断开":"连接"; timer_rec.Enabled = m_bOpen == 1?true:false; }
private UInt16 CANInd_1 = 1; // 第1路CAN /// <summary> /// 开启CAN设备 /// </summary> /// <returns>设备状态码</returns> public DeviceState OpenCAN_1() { if (isOpen == false) { VCI_ClearBuffer(4, 0, CANInd_1); VCI_CAN_OBJ[] CANObj = new VCI_CAN_OBJ[100]; if (VCI_OpenDevice((UInt32)4, (UInt32)0, CANInd_1) == 0) { return(DeviceState.Fail); } isOpen = true; config1 = new VCI_INIT_CONFIG { AccCode = 0x00000000, AccMask = 0xffffffff, Reserved = 0, Timing0 = boundFirst, Timing1 = boundSecond, Filter = 1, Mode = 0 }; return(DeviceState.Success); } else { return(DeviceState.IsOpen); } }
public void Reset() { VCI_ResetCAN(m_devtype, m_devind, m_canind); VCI_ClearBuffer(m_devtype, m_devind, m_canind); VCI_CloseDevice(m_devtype, m_devind); if (Open()) { VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); UInt32 can_id = Consts.CAN_ID; //滤波 can_id <<= 21; config.AccCode = System.Convert.ToUInt32("0x80000000", 16); //can_id;// System.Convert.ToUInt32("0x80000000", 16); config.AccMask = System.Convert.ToUInt32("0xFFFFFFFF", 16); //0x1fffffff;//过滤前3BIT 0x1f000000 config.Timing0 = System.Convert.ToByte(Kbps((int)m_timing, 0), 16); config.Timing1 = System.Convert.ToByte(Kbps((int)m_timing, 1), 16); config.Filter = (Byte)(1); //接收方式 1:接收全部类型 2:只接收标准帧 3:只接收扩展帧 config.Mode = (Byte)0; //模式 0 正常 1只听 2 自测 UInt32 res = new UInt32(); res = VCI_InitCAN(m_devtype, m_devind, m_canind, ref config);//初始化CAN参数f if (res == 1) { VCI_StartCAN(m_devtype, m_devind, m_canind); //启动CAN } } }
public override bool initializeCAN(uint DeviceType, uint DeviceIndex, uint CANIndex, byte baudratio) { try { VCI_OpenDevice(DeviceType, DeviceIndex, 0); VCI_INIT_CONFIG _CONFIG = new VCI_INIT_CONFIG() { AccCode = 0, //验收代码 AccMask = 0xffffffff, //屏蔽代码 Reserved = 0, //保留位 Filter = 1, //滤波方式,1 表示单滤波,0 表示双滤波 Mode = 0, //模式,0 表示正常模式,1 表示只听模式 Timing0 = 0, //设置波特率 Timing1 = baudratio //设置波特率 }; UInt32 ss = VCI_InitCAN(DeviceType, DeviceIndex, CANIndex, ref _CONFIG); if (ss != 0) { VCI_StartCAN(DeviceType, DeviceIndex, CANIndex); IsOpen = true; } else { return(IsOpen); } return(IsOpen); } catch (Exception ex) { throw new Exception(ex + "初始化CAN 失败"); } }
private void buttonConnect_Click(object sender, EventArgs e) { if (m_bOpen == 1) { VCI_CloseDevice(m_devtype, m_devind); m_bOpen = 0; } else { m_devtype = m_arrdevtype[comboBox_devtype.SelectedIndex]; m_devind = (UInt32)comboBox_DevIndex.SelectedIndex; m_canind = (UInt32)comboBox_CANIndex.SelectedIndex; if (VCI_OpenDevice(m_devtype, m_devind, 0) == 0) { MessageBox.Show("Failed to open the device, please check whether the device type and device index number are correct", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 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 + 1); config.Mode = (Byte)comboBox_Mode.SelectedIndex; VCI_InitCAN(m_devtype, m_devind, m_canind, ref config); } buttonConnect.Text = m_bOpen == 1?"Disconnect":"Connection"; timer_rec.Enabled = m_bOpen == 1?true:false; }
/// <summary> /// CAN连接 /// </summary> public bool CANConnect(UInt32 m_devtype, UInt32 m_devind, UInt32 m_canind) { //m_devtype = m_devtype;设备类型 //m_devind = m_devind;设备索引号 //m_canind = m_canind;地基路CAN if (VCI_OpenDevice(m_devtype, m_devind, 0) == 0) { //MessageBox.Show("打开设备失败,请检查设备类型和设备索引号是否正确", "错误", //MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); config.AccCode = System.Convert.ToUInt32("0x" + "00000000", 16); config.AccMask = System.Convert.ToUInt32("0x" + "FFFFFFFF", 16); config.Timing0 = System.Convert.ToByte("0x" + "00", 16); config.Timing1 = System.Convert.ToByte("0x" + "1C", 16); config.Filter = (Byte)1; config.Mode = (Byte)0; if (VCI_InitCAN(m_devtype, m_devind, m_canind, ref config) == 0) { //MessageBox.Show("初始化设备失败", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } return(true); }
unsafe private void buttonConnect_Click(object sender, EventArgs e) { Form1 main = (Form1)this.Owner; if (m_bOpen == 1) { VCI_CloseDevice(m_devtype, m_devind); m_bOpen = 0; } else { m_devtype = m_arrdevtype[comboBox_devtype.SelectedIndex]; m_devind = (UInt32)comboBox_DevIndex.SelectedIndex; m_canind = (UInt32)comboBox_CANIndex.SelectedIndex;//(UInt32)0x00200001U;//= if (VCI_OpenDevice(m_devtype, m_devind, 0) == 0) { MessageBox.Show("打开设备失败,请检查设备类型和设备索引号是否正确", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } main.button_loadBootCfg.Enabled = true; //LC:bug fixed 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 + 1); config.Mode = (Byte)comboBox_Mode.SelectedIndex; main.frame_desc.RxState = 0; /* fixed (byte* rxBuf = &main.g_can_rx_buffer[0]) * { * main.frame_desc.pRxBuffPtr = rxBuf; * }*/ main.frame_desc.RxBuffSize = 256; main.frame_desc.RxXferCount = 0; VCI_InitCAN(m_devtype, m_devind, m_canind, ref config); VCI_StartCAN(m_devtype, m_devind, m_canind); } buttonConnect.Text = m_bOpen == 1 ? "断开" : "连接"; main.remoteflag = comboBox_FrameFormat.SelectedIndex; main.extflag = comboBox_FrameType.SelectedIndex; main.id = textBox_ID.Text; main.devtype = m_devtype; main.devind = m_devind; main.canind = m_canind; main.bopen = m_bOpen; main.timer_rec.Enabled = (m_bOpen == 1) ? true : false; main.listBox_debug.Items.Clear(); main.listBox_debug.Items.Add("setup transport, open=" + System.Convert.ToString(m_bOpen, 16)); main.listBox_debug.SelectedIndex = main.listBox_debug.Items.Count - 1; }
/// <summary> /// //我 打开usbcan /// </summary> /// <returns></returns> public bool Open() { int m_bOpen = Convert.ToInt16(VCI_OpenDevice(d_Type, 0, 0)); //解决can通讯问题 if (m_bOpen == 1) //1表示高频,表示打开 { VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); //can数据 config.AccCode = 0x00000000; config.AccMask = 0xFFFFFFFF; //接收所有ID switch (2) //(MainWindow.baudrate) { case 0: config.Timing0 = 0x03; //125K ,波特率 config.Timing1 = 0x1c; break; case 1: config.Timing0 = 0x01; //250K ,波特率 config.Timing1 = 0x1c; break; case 2: config.Timing0 = 0x00; //500K ,波特率 config.Timing1 = 0x1c; break; default: break; } config.Filter = 1; //滤波模式,接收所有类型 config.Mode = 0; //正常工作模式 if (VCI_InitCAN(d_Type, m_devind, m_canind, ref config) != 1) { VCI_CloseDevice(d_Type, 0); m_bOpen = 0; return(false); } //开始CAN设备 VCI_StartCAN(d_Type, m_devind, m_canind); isRunTimer = true; recTimer = new Timer(new TimerCallback(ReadCANData), null, 0, 100); //1s调用ReadCANData函数 } else { //打开CAN 分析仪 if (VCI_OpenDevice(d_Type, 0, 0) == 0) { MessageBox.Show("打开设备失败,请检查设备类型和设备索引号是否正确"); } else { m_bOpen = 1; } } return(true); }
/// <summary> /// /// </summary> void IDataCommunication.Open() { if (isOpen) { try { VCI_CloseDevice(VCI_USBCAN1, DeviceInd); isOpen = false; } catch { return; } } if (readThread != null && readThread.ThreadState == ThreadState.Running) { readThread.Abort(); } //打开设备 if (VCI_OpenDevice(VCI_USBCAN1, DeviceInd, 0) != STATUS_OK) { WriteLog("打开设备失败!"); return; } //初始化设备 VCI_INIT_CONFIG init_config = new VCI_INIT_CONFIG(); init_config.AccCode = 0; init_config.AccMask = 0xffffffff; init_config.Filter = 0; init_config.Mode = 0; init_config.Timing0 = 0; //波特率设为500Kbps,定时器1为0,2为0x1c init_config.Timing1 = 0x1c; //init_config.Timing0 = 0; //波特率设为1Mbps,定时器1为0,2为0x14 //init_config.Timing1 = 0x14; if (VCI_InitCAN(VCI_USBCAN1, DeviceInd, CNDInd, ref init_config) != STATUS_OK) { WriteLog("初始化设备失败!"); return; } //启动设备 if (VCI_StartCAN(VCI_USBCAN1, DeviceInd, CNDInd) != STATUS_OK) { WriteLog("启动设备失败!"); return; } isOpen = true; //开始读数据 readThread = new Thread(Recieve); readThread.Start(); }
public override bool InitializeDevice(string[] args) { useDeviceIndex = 0; useCANIndex = useCANIndex = DeviceUtil.SelectSubDeviceByIndex(0, 1, "CAN端口"); uint openResult = iTekAnalyst2API.VCI_OpenDevice(devideType, useDeviceIndex, 0); if (openResult == 0) { Logger.logError("iTek(CANPRO)打开失败!原因:" + openResult.ToString()); return(false); } VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); config.AccCode = 0; config.AccMask = 0xffffff; List <string> selectBaudRate = new List <string>() { "250kbps", "500kbps" }; FrmDeviceSelect frmSelectBaudRate = new FrmDeviceSelect(); frmSelectBaudRate.LoadDeviceList(selectBaudRate); frmSelectBaudRate.SetTitle("请选择合适的波特率"); frmSelectBaudRate.ShowDialog(); if (frmSelectBaudRate.selectedText == "250kbps") { //250kbps config.Timing0 = 0x01; config.Timing1 = 0x1c; } else if (frmSelectBaudRate.selectedText == "500kbps") { //250kbps config.Timing0 = 0x00; config.Timing1 = 0x1c; } else { return(false); } frmSelectBaudRate.Dispose(); config.Filter = 0; config.Mode = 0; uint initResult = iTekAnalyst2API.VCI_InitCAN(devideType, useDeviceIndex, useCANIndex, ref config); Logger.logInfo("iTek(CANPRO)初始化结果:" + initResult.ToString()); uint startResult = iTekAnalyst2API.VCI_StartCAN(devideType, useDeviceIndex, useCANIndex); Logger.logInfo("iTek(CANPRO)启动结果:" + startResult.ToString()); return(true); }
/// <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); }
public void start() { //init((UInt32)0, 8);//8 = 250k 10 = 500k //VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); //// UInt32 can_id = Consts.MASTER_CAN_ID; //滤波 //// can_id <<= 21; //config.AccCode = System.Convert.ToUInt32("0x80000000", 16);//can_id;// System.Convert.ToUInt32("0x80000000", 16); //config.AccMask = System.Convert.ToUInt32("0xFFFFFFFF", 16);//0x1fffffff;//过滤前3BIT 0x1f000000 //config.Timing0 = System.Convert.ToByte(Kbps((int)m_timing, 0), 16); //config.Timing1 = System.Convert.ToByte(Kbps((int)m_timing, 1), 16); //config.Filter = (Byte)(1);//接收方式 1:接收全部类型 2:只接收标准帧 3:只接收扩展帧 //config.Mode = (Byte)0;//模式 0 正常 1只听 2 自测 //UInt32 res = new UInt32(); //res = VCI_InitCAN(m_devtype, m_devind, m_canind, ref config);//初始化CAN参数f //if (res == 1) //操作成功 //{ // VCI_StartCAN(m_devtype, m_devind, m_canind); //启动CAN //} VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); UInt32 can_id = Consts.CAN_ID; //滤波 can_id <<= 21; config.AccCode = System.Convert.ToUInt32("0x80000000", 16); //can_id;// System.Convert.ToUInt32("0x80000000", 16); config.AccMask = System.Convert.ToUInt32("0xFFFFFFFF", 16); //0x1fffffff;//过滤前3BIT 0x1f000000 config.Timing0 = System.Convert.ToByte(Kbps((int)m_timing, 0), 16); config.Timing1 = System.Convert.ToByte(Kbps((int)m_timing, 1), 16); config.Filter = (Byte)(1); //接收方式 1:接收全部类型 2:只接收标准帧 3:只接收扩展帧 config.Mode = (Byte)0; //模式 0 正常 1只听 2 自测 UInt32 res = new UInt32(); res = VCI_InitCAN(m_devtype, m_devind, m_canind, ref config);//初始化CAN参数f if (res == 1) { VCI_StartCAN(m_devtype, m_devind, m_canind); //启动CAN } }
//初始化所有can通道 private void InitCanAll() { 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.Filter = mFilter; //(Byte)comboBox_Filter.SelectedIndex; config.Mode = mMode; //(Byte)comboBox_Mode.SelectedIndex; config.Timing0 = System.Convert.ToByte(can0T0TextBox.Text, 16); config.Timing1 = System.Convert.ToByte(can0T1TextBox.Text, 16); DllAdapte.VCI_InitCAN(mDevType, mDevInd, 0 /*(UInt32)CanIndex.Can0*/, ref config); config.Timing0 = System.Convert.ToByte(can1T0TextBox.Text, 16); config.Timing1 = System.Convert.ToByte(can1T1TextBox.Text, 16); DllAdapte.VCI_InitCAN(mDevType, mDevInd, 1 /*(UInt32)CanIndex.Can1*/, ref config); }
/// <summary> //CAN连接 /// </summary> public unsafe bool ConncetCan() { if (connected) { return(connected); } var config = new VCI_INIT_CONFIG { AccCode = Convert.ToUInt32("0x00000000", 16), AccMask = Convert.ToUInt32("0xFFFFFFFF", 16), Timing0 = Convert.ToByte("0x00", 16), Timing1 = Convert.ToByte("0x1C", 16), Filter = Convert.ToByte(1), Mode = Convert.ToByte(0) }; if (VCI_OpenDevice(m_devtype, m_devind, 0) == 0) { MessageBox.Show("CAN卡未正常连接,请连接CAN卡", "提示"); } else { var baud = Convert.ToUInt32("0x060007", 16); if (VCI_SetReference(m_devtype, m_devind, m_canind, 0, (byte *)&baud) != STATUS_OK) { MessageBox.Show("设置波特率错误,打开设备失败!", "错误"); VCI_CloseDevice(m_devtype, m_devind); } else { VCI_InitCAN(m_devtype, m_devind, m_canind, ref config); var open = VCI_StartCAN(m_devtype, m_devind, m_canind); if (open == 1) { connected = true; } if (open == 0) { connected = false; VCI_CloseDevice(m_devtype, m_devind); } CanConnectStats?.Invoke(connected); } } return(connected); }
private void but1_Click(object sender, RoutedEventArgs e) { UInt32 i = VCI_OpenDevice(4, 0, 0); int j = (int)i; lab1.Content = j.ToString(); VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); config.AccCode = 0x00000000; config.AccMask = 0xFFFFFFFF; config.Timing0 = 0x04; config.Timing1 = 0x1C; config.Filter = 0; config.Mode = 0; VCI_InitCAN(4, 0, 0, ref config); }
public uint Connect() { uint connection_status = ~(1U); if (m_bOpen == 0) { m_devtype = default_devtype; m_devind = default_devint; m_canind = default_canind; try { connection_status = VCI_OpenDevice(m_devtype, m_devind, 0); } catch (DllNotFoundException Ex) { Console.WriteLine(Ex.ToString()); MessageBox.Show(Ex.Message.ToString(), "Canbus can't start !"); } if (connection_status == 1) { VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); config.AccCode = default_AccCode; config.AccMask = default_AccMask; config.Timing0 = default_Timing0; config.Timing1 = default_Timing1; config.Filter = default_Filter; config.Mode = default_Mode; connection_status = VCI_InitCAN(m_devtype, m_devind, m_canind, ref config); if (connection_status == 1) { m_bOpen = 1; } else { Disconnect(); connection_status = 0x03; } } } else { connection_status = 0x1000; } return(connection_status); }
/// <summary> /// 设置工作模式,需提供工作模式Id /// 必须先设置波特率再设置工模式 /// </summary> /// <param name="modeId"> =0 表示正常模式(相当于正常节点), =1 表示只听模式(只接收,不影响总线)</param> /// <returns></returns> public bool SetWorkingMode(byte modeId = 0) { if (Thread.VolatileRead(ref disposed) != 0) { throw new ObjectDisposedException("CanDevice already disposed"); } VCI_INIT_CONFIG initConfig = new VCI_INIT_CONFIG(); initConfig.Mode = modeId;//正常模式 if (VCI_InitCAN(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID, ref initConfig) == 0) { log.Error("Failed to set CAN working mode"); return(false); } return(true); }
//根据指定的can通道进行初始化 private void InitCanByIndex(UInt32 canInd) { VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); if (canInd == 0) { config.Timing0 = System.Convert.ToByte(can0T0TextBox.Text, 16); config.Timing1 = System.Convert.ToByte(can0T1TextBox.Text, 16); } else if (canInd == 1) { config.Timing0 = System.Convert.ToByte(can1T0TextBox.Text, 16); config.Timing1 = System.Convert.ToByte(can1T1TextBox.Text, 16); } config.AccCode = System.Convert.ToUInt32("0x" + textBox_AccCode.Text, 16); config.AccMask = System.Convert.ToUInt32("0x" + textBox_AccMask.Text, 16); config.Filter = mFilter; //(Byte)comboBox_Filter.SelectedIndex; config.Mode = mMode; //(Byte)comboBox_Mode.SelectedIndex; DllAdapte.VCI_InitCAN(mDevType, mDevInd, canInd, ref config); }
unsafe public static bool canConnect() { if (!isOpen) { if (VCI_OpenDevice(deviceType, deviceIndex, 0) == 0) { VCI_ReadErrInfo(deviceType, deviceIndex, canIndex, ref errorInfo); return(false); } isOpen = true; VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); config.AccCode = 0; config.AccMask = 0xFFFFFFFF; config.Timing0 = 0; config.Timing1 = 28; config.Filter = 1; config.Mode = 0; VCI_InitCAN(deviceType, deviceIndex, canIndex, ref config); VCI_StartCAN(deviceType, deviceIndex, canIndex); obj.SendType = 0; obj.RemoteFlag = 0; obj.ExternFlag = 0; obj.DataLen = 8; fixed(byte *pData = obj.Data) { for (int n = 0; n < 8; n++) { pData[n] = 0xFF; } } } return(isOpen); }
public uint Connect() { uint connection_status = ~(1U); if (m_bOpen == 0) { m_devtype = default_devtype; m_devind = default_devint; m_canind = default_canind; connection_status = VCI_OpenDevice(m_devtype, m_devind, 0); if (connection_status == 1) { VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); config.AccCode = default_AccCode; config.AccMask = default_AccMask; config.Timing0 = default_Timing0; config.Timing1 = default_Timing1; config.Filter = default_Filter; config.Mode = default_Mode; connection_status = VCI_InitCAN(m_devtype, m_devind, m_canind, ref config); if (connection_status == 1) { m_bOpen = 1; } else { Disconnect(); connection_status = 0x03; } } } else { connection_status = 0x1000; } return(connection_status); }
/// <summary> /// 设置CAN相关参数 /// </summary> /// <param name="config"></param> /// <returns></returns> public bool InitCAN(_VCI_INIT_CONFIG config) { if (Thread.VolatileRead(ref disposed) != 0) { throw new ObjectDisposedException("CanDevice already disposed"); } VCI_INIT_CONFIG obj = new VCI_INIT_CONFIG { AccCode = config.AccCode, AccMask = config.AccMask, Mode = config.Mode, Filter = config.Filter, Timing0 = config.Timing0, Timing1 = config.Timing1, Reserved = config.Reserved }; if (VCI_InitCAN(objCANDevice.DevType, objCANDevice.DevID, objCANDevice.CANID, ref obj) == 0) { return(false); } return(true); }
/// <summary> /// 初始化设备 /// </summary> /// <param name="canBand"></param> /// <param name="runMode"></param> /// <param name="filter"></param> /// <param name="accCode"></param> /// <param name="accMark"></param> /// <returns></returns> public bool InitalCanBus(UInt32 canBusId, ECanBaud canBand, out string er, UInt32 accCode = 0x0, UInt32 accMark = 0xFFFFFFFF, ERunMode runMode = ERunMode.正常模式, EFilter filter = EFilter.单滤波 ) { er = string.Empty; try { if (!_devOpen) { er = "CanBus总线未打开"; return(false); } VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); config.AccCode = accCode; config.AccMask = accMark; config.Timing0 = BTR0[(int)canBand]; config.Timing1 = BTR1[(int)canBand]; config.Filter = (Byte)filter; config.Mode = (Byte)runMode; if (VCI_InitCAN(_devType, _canBusId, canBusId, ref config) != STATUS_OK) { er = "初始化【" + ((EVCI)_devType).ToString() + "】设备【" + canBusId.ToString() + "】失败"; return(false); } return(true); } catch (Exception ex) { er = ex.ToString(); return(false); } }
public static void CANConnectAndStart(Timer timer1)//打开和连接CAN { m_devtype = 3; m_devind = 0; m_canind = 0; //VCI_OpenDevice(m_devtype, m_devind, 0); if (VCI_OpenDevice(m_devtype, m_devind, 0) == 0) { MessageBox.Show("打开设备失败,请检查设备是否连接正确", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); config.AccCode = 0x00000000; config.AccMask = 0xFFFFFFFF; config.Timing0 = 0x00; config.Timing1 = 0x1C; config.Filter = 1; config.Mode = 0; VCI_InitCAN(m_devtype, m_devind, m_canind, ref config); timer1.Enabled = true; VCI_StartCAN(m_devtype, m_devind, m_canind); }
public static extern UInt32 VCI_InitCAN(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd, ref VCI_INIT_CONFIG pInitConfig);
static protected extern UInt32 VCI_InitCAN(UInt32 DeviceType, UInt32 DeviceIndex, UInt32 CANIndex, ref VCI_INIT_CONFIG pInitConfig);
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; }
static extern uint VCI_InitCAN(uint DevType, uint DevIndex, uint CANIndex, ref VCI_INIT_CONFIG pInitConfig);
/*==========================================实现对CAN设备的连接===============================================================*/ unsafe private void CAN_Connnection_Button_Click_1(object sender, EventArgs e) { if (The_Device_Statu == The_Device_is_Open) { VCI_CloseDevice(Current_Dev_Type, Current_Dev_Index); The_Device_Statu = The_Device_is_close; CAN_Start_Or_Reset_Button.Text = "启动CAN"; CAN_Connnection_Button.Text = "建立连接"; } else if (The_Device_Statu == The_Device_is_close) { if (Current_Dev_Type == VCI_USBCAN_2E_U || Current_Dev_Type == VCI_USBCAN_E_U) //如果设备类型为 USBCAN-2E-U 或者 USBCAN-E-U 则执行以下代码 { if (VCI_OpenDevice(Current_Dev_Type, Current_Dev_Index, 0) == 0) { MessageBox.Show("打开设备失败,请检查设备类型和设备索引号是否正确", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } UInt32 baud = Current_BaudRate; // 如果不间接使用则会出现问题。 if (VCI_SetReference(Current_Dev_Type, Current_Dev_Index, Current_Can_Gallery, 0, (byte *)&baud) != BaudRate_STATUS_OK) { MessageBox.Show("设置波特率错误,打开设备失败!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); VCI_CloseDevice(Current_Dev_Type, Current_Dev_Index); return; } VCI_INIT_CONFIG VCI_Init_Structure = new VCI_INIT_CONFIG(); VCI_Init_Structure.AccCode = Convert.ToUInt32("0x00000000", 16); VCI_Init_Structure.AccMask = Convert.ToUInt32("0xFFFFFFFF", 16); VCI_Init_Structure.Timing0 = Convert.ToByte("0x00", 16); VCI_Init_Structure.Timing1 = Convert.ToByte("0x14", 16); VCI_Init_Structure.Filter = 1; VCI_Init_Structure.Mode = Normal_Mode; // 在 USBCAN-E-U/2E-U PCI-5010-U、 PCI-5020-U 时 只有 MODE是 有效的 0 代表正常模式,1 代表只听模式 if (VCI_InitCAN(Current_Dev_Type, Current_Dev_Index, Current_Can_Gallery, ref VCI_Init_Structure) == Init_Statu_OK) //调用初始化函数,但是波特率是在 VCI_SETReference 实现的 { MessageBox.Show("初始化 CAN 设备成功"); CAN_Connnection_Button.Text = "断开连接"; The_Device_Statu = The_Device_is_Open; } } else if (Current_Dev_Type == VCI_USBCAN2) // 如果设备类型为 USBCANII 则执行以下代码 { if (VCI_OpenDevice(Current_Dev_Type, Current_Dev_Index, 0) == 0) { MessageBox.Show("打开设备失败,请检查设备类型和设备索引号是否正确", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } VCI_INIT_CONFIG VCI_Init_Structure = new VCI_INIT_CONFIG(); VCI_Init_Structure.AccCode = Convert.ToUInt32("0x00000000", 16); VCI_Init_Structure.AccMask = Convert.ToUInt32("0xFFFFFFFF", 16); VCI_Init_Structure.Timing0 = Convert.ToByte("0xbf", 16); VCI_Init_Structure.Timing1 = Convert.ToByte("0xff", 16); VCI_Init_Structure.Filter = 1; VCI_Init_Structure.Mode = Normal_Mode; // 在 USBCAN-E-U/2E-U PCI-5010-U、 PCI-5020-U 时 只有 MODE是 有效的 0 代表正常模式,1 代表只听模式 if (VCI_InitCAN(Current_Dev_Type, Current_Dev_Index, Current_Can_Gallery, ref VCI_Init_Structure) == Init_Statu_OK && VCI_InitCAN(Current_Dev_Type, Current_Dev_Index, Current_Can_Gallery + 1, ref VCI_Init_Structure) == Init_Statu_OK) //调用初始化函数,但是波特率是在 VCI_SETReference 实现的 { MessageBox.Show("初始化 CAN 设备成功"); CAN_Connnection_Button.Text = "断开连接"; The_Device_Statu = The_Device_is_Open; } else { MessageBox.Show("未能初始化CAN设备"); } } else { MessageBox.Show("设备类型暂未支持"); The_Device_Statu = The_Device_is_close; } } Scan_Timer.Enabled = The_Device_Statu == The_Device_is_Open ? true : false; }
unsafe public static bool canConnect() { if (!isOpen) { if (VCI_OpenDevice(deviceType, deviceIndex, 0) == 0) { VCI_ReadErrInfo(deviceType, deviceIndex, canIndex, ref errorInfo); return false; } isOpen = true; VCI_INIT_CONFIG config = new VCI_INIT_CONFIG(); config.AccCode = 0; config.AccMask = 0xFFFFFFFF; config.Timing0 = 0; config.Timing1 = 28; config.Filter = 1; config.Mode = 0; VCI_InitCAN(deviceType, deviceIndex, canIndex, ref config); VCI_StartCAN(deviceType, deviceIndex, canIndex); obj.SendType = 0; obj.RemoteFlag = 0; obj.ExternFlag = 0; obj.DataLen = 8; fixed (byte* pData = obj.Data) { for (int n = 0; n < 8; n++) { pData[n] = 0xFF; } } } return isOpen; }
static extern uint VCI_InitCAN(uint DeviceType, uint DeviceInd, uint CANInd, ref VCI_INIT_CONFIG pInitConfig);
/// <summary> /// /// </summary> void IDataCommunication.Open() { if (isOpen) { try { VCI_CloseDevice(DEVICETYPE, DeviceInd); isOpen = false; } catch { return; } } if (readThread != null && readThread.ThreadState == ThreadState.Running) { readThread.Abort(); } //打开设备 if (VCI_OpenDevice(DEVICETYPE, DeviceInd, 0) != STATUS_OK) { WriteLog("打开设备失败!"); return; } //char[20] = new char[]{'1','9'}; //VCI_SetReference(DEVICETYPE,DeviceInd,0,CMD_DESIP, //初始化设备 VCI_INIT_CONFIG init_config = new VCI_INIT_CONFIG(); init_config.AccCode = 0; init_config.AccMask = 0xffffffff; init_config.Filter = 0; init_config.Mode = 0; init_config.Timing0 = 0; //波特率设为500Kbps,定时器1为0,2为0x1c init_config.Timing1 = 0x1c; //init_config.Timing0 = 0; //波特率设为1Mbps,定时器1为0,2为0x14 //init_config.Timing1 = 0x14; //init_config.Timing0 = 0x01; //波特率设为250Kbps,定时器1为1,2为0x1c //init_config.Timing1 = 0x1c; IntPtr intPtrIP; IntPtr intPtrPort; unsafe { byte[] byteIp = Encoding.ASCII.GetBytes(ip); fixed (void* pIP = &byteIp[0]) { intPtrIP = new IntPtr(pIP); } fixed (void* pPort = &port) { intPtrPort = new IntPtr(pPort); } } VCI_SetReference(DEVICETYPE, DeviceInd, 0, CMD_DESIP, intPtrIP); VCI_SetReference(DEVICETYPE, DeviceInd, 0, CMD_DESPORT, intPtrPort); //if (VCI_InitCAN(DEVICETYPE, DeviceInd, CNDInd, ref init_config) != STATUS_OK) //{ // WriteLog("初始化设备失败!"); // return; //} //启动设备 uint r = VCI_StartCAN(DEVICETYPE, DeviceInd, CNDInd); if (r != STATUS_OK) { WriteLog("启动失败!"); return; } isOpen = true; //开始读数据 readThread = new Thread(Recieve); readThread.Start(); }