//一次可以发送一条数据 public static void Transmit1() { byte[] dataValue1 = new byte[8] { 0xEC, 0xA0, 0x45, 0x2D, 0x43, 0x61, 0x72, 0x78 }; _VCI_CAN_OBJ nCTYPE_CAN_FRAME1 = new _VCI_CAN_OBJ(); nCTYPE_CAN_FRAME1.ID = 0x77a;//帧ID nCTYPE_CAN_FRAME1.SendType = 0; nCTYPE_CAN_FRAME1.RemoteFlag = 0; nCTYPE_CAN_FRAME1.ExternFlag = 0; nCTYPE_CAN_FRAME1.DataLen = 8; fixed(byte *pdata = dataValue1) { byte *pnewdata = pdata; for (int d = 0; d < 8; d++) { nCTYPE_CAN_FRAME1.Data[d] = *pnewdata; pnewdata++; } } { _VCI_CAN_OBJ *pcanObj = &nCTYPE_CAN_FRAME1; _VCI_CAN_OBJ *pNewcanObj = pcanObj; int szie = sizeof(_VCI_CAN_OBJ); uint FrameNumber = VCI_Transmit(DeviceType, DeviceInd, CANInd, pNewcanObj, 2); } }
//一次可以发送多条数据 public static void Transmit() { //byte[] dataValue1 = new byte[8] { 0x00, 0x74, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00 }; //byte[] dataValue2 = new byte[8] { 0x00, 0x74, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 }; //byte[] dataValue3 = new byte[8] { 0x00, 0x74, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00 }; byte[] dataValue1 = new byte[8] { 0xEC, 0xA0, 0x45, 0x2D, 0x43, 0x61, 0x72, 0x78 }; byte[] dataValue2 = new byte[8] { 0x11, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; List <byte[]> MultFrameValue = new List <byte[]>(); MultFrameValue.Add(dataValue1); //MultFrameValue.Add(dataValue2); //MultFrameValue.Add(dataValue3); List <_VCI_CAN_OBJ> nCTYPE_CAN_FRAMEs = NewMethod(MultFrameValue); _VCI_CAN_OBJ[] canObj = new _VCI_CAN_OBJ[2]; fixed(_VCI_CAN_OBJ *pcanObj = nCTYPE_CAN_FRAMEs.ToArray()) { _VCI_CAN_OBJ *pNewcanObj = pcanObj; int szie = sizeof(_VCI_CAN_OBJ) * canObj.Length; uint FrameNumber = VCI_Transmit(DeviceType, DeviceInd, CANInd, pNewcanObj, 2); } }
//一次可以发送多条数据 public static void Transmit() { //EC A0 45 2D 43 61 72 78 byte[] dataValue1 = new byte[8] { 0xEC, 0xA0, 0x45, 0x2D, 0x43, 0x61, 0x72, 0x78 }; //byte[] dataValue1 = new byte[8] { 0x11, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; //byte[] dataValue3 = new byte[8] { 0x00, 0x74, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00 }; //List<byte[]> MultFrameValue = new List<byte[]>(); //MultFrameValue.Add(dataValue1); ////MultFrameValue.Add(dataValue2); ////MultFrameValue.Add(dataValue3); //List<_VCI_CAN_OBJ> nCTYPE_CAN_FRAMEs = NewMethod(MultFrameValue); //_VCI_CAN_OBJ[] canObj = new _VCI_CAN_OBJ[1]; //fixed (_VCI_CAN_OBJ* pcanObj = nCTYPE_CAN_FRAMEs.ToArray()) //{ // _VCI_CAN_OBJ* pNewcanObj = pcanObj; // int szie = sizeof(_VCI_CAN_OBJ) * canObj.Length; // uint FrameNumber = VCI_Transmit(DeviceType, DeviceInd, CANInd, pNewcanObj, 1); //} _VCI_CAN_OBJ nCTYPE_CAN_FRAME1 = new _VCI_CAN_OBJ(); nCTYPE_CAN_FRAME1.ID = 0x77A;//帧ID nCTYPE_CAN_FRAME1.SendType = 0; nCTYPE_CAN_FRAME1.RemoteFlag = 0; nCTYPE_CAN_FRAME1.ExternFlag = 0; nCTYPE_CAN_FRAME1.DataLen = 8; for (int d = 0; d < 8; d++) { nCTYPE_CAN_FRAME1.Data[d] = dataValue1[d]; } _VCI_CAN_OBJ *pcanObj = &nCTYPE_CAN_FRAME1; int szie = sizeof(_VCI_CAN_OBJ); uint FrameNumber = VCI_Transmit(DeviceType, DeviceInd, CANInd, pcanObj, 1); }
//一次可以接收多条数据 public static void Receive() { //读取多帧只是依次读取多帧,导致不能实时读到发送后的值,需在一段时间内读去查询值。 var cancelTokenSource = new CancellationTokenSource(500); while (!cancelTokenSource.IsCancellationRequested)//设置读取超时 { uint dataNumber = VCI_GetReceiveNum(DeviceType, DeviceInd, CANInd); _VCI_CAN_OBJ[] canObj = new _VCI_CAN_OBJ[100]; fixed(_VCI_CAN_OBJ *pcanObj = canObj) { _VCI_CAN_OBJ *pNewcanObj = pcanObj; int szie = sizeof(_VCI_CAN_OBJ) * canObj.Length; uint FrameNumber = VCI_Receive(DeviceType, DeviceInd, CANInd, pcanObj, 100, 400); for (int i = 0; i < FrameNumber; i++) { if (pNewcanObj->ID == 0x77b) { DateTime date = DateTime.FromFileTime(pNewcanObj->TimeStamp); Console.Write("Timestamp:{0}\t", date); Console.Write("Id:{0:X2}\t", pNewcanObj->ID); Console.Write("FrameType:{0:X2}\t", pNewcanObj->RemoteFlag); Console.Write("Length:{0:X2}\t", pNewcanObj->DataLen); byte *pdata = pNewcanObj->Data; for (int t = 0; t < 8; t++) { Console.Write("{0:X2}" + " ", *pdata); pdata++; } pNewcanObj++; Console.WriteLine(); } } } } }
static extern uint VCI_Receive(uint DeviceType, uint DeviceInd, uint CANInd, _VCI_CAN_OBJ *pReceive, uint Len, int WaitTime);
static extern uint VCI_Transmit(uint DeviceType, uint DeviceInd, uint CANInd, _VCI_CAN_OBJ *pSend, uint Len);