public static void Read() { NCTYPE_CAN_STRUCT _STRUCT = new NCTYPE_CAN_STRUCT(); NCTYPE_CAN_STRUCT *p = &_STRUCT; int size = sizeof(NCTYPE_CAN_STRUCT); ncRead(pObjHandlePtr, size, p); DateTime date = DateTime.FromFileTime((long)p->Timestamp); Console.Write("Timestamp:{0}\t", date); Console.Write("Id:{0:X2}\t", p->ArbitrationId); Console.Write("FrameType:{0:X2}\t", p->FrameType); Console.Write("Length:{0:X2}\t", p->DataLength); byte *pdata = p->Data; for (int i = 0; i < 8; i++) { Console.Write("{0:X2}" + " ", *pdata); pdata++; } Console.WriteLine(); }
public static void ReadMult() { //读取多帧只是依次读取多帧,导致不能实时读到发送后的值,需在一段时间内读去查询值。 var cancelTokenSource = new CancellationTokenSource(1000); while (!cancelTokenSource.IsCancellationRequested)//设置读取超时 { NCTYPE_CAN_STRUCT[] _STRUCT1 = new NCTYPE_CAN_STRUCT[150]; fixed(NCTYPE_CAN_STRUCT *p = _STRUCT1) //指针指向数组的首指针 { NCTYPE_CAN_STRUCT *pp = p; //fixed语句的指针不能移动需赋值给新指针才可操作。 int szie = sizeof(NCTYPE_CAN_STRUCT) * _STRUCT1.Length; //结构体数组的总元素个数。 ncReadMult(pObjHandlePtr, szie, pp, ref pActualDataSize); pActualDataSize = pActualDataSize / (uint)sizeof(NCTYPE_CAN_STRUCT); for (int i = 0; i < pActualDataSize; i++) { if (pp->ArbitrationId == 0x7ab) { DateTime date = DateTime.FromFileTime((long)pp->Timestamp); Console.Write("Timestamp:{0}\t", date); Console.Write("Id:{0:X2}\t", pp->ArbitrationId); Console.Write("FrameType:{0:X2}\t", pp->FrameType); Console.Write("Length:{0:X2}\t", pp->DataLength); byte *pdata = pp->Data; for (int t = 0; t < 8; t++) { Console.Write("{0:X2}" + " ", *pdata); pdata++; } Console.WriteLine(); } pp++;//指针操作地址加一(数组的下一个元素) } } } }
public static extern int ncRead( uint ObjHandle, //NCTYPE_OBJH uint SizeofData, //NCTYPE_UINT32 ref NCTYPE_CAN_STRUCT Data // IntPtr Data //NCTYPE_ANY_P );