public void Receive() { if (Enabled == false || isSend == false) { return; } rxpA429Result.data = 0; Channel429DriverRx driverRx = (Channel429DriverRx)ChannelDriver; RxpA429 rxpA429 = new RxpA429(); uint maxRxp = 1; int rxpNum; WaitStatusA429 opt = WaitStatusA429.BHT_L1_OPT_NOWAIT; uint ret = driverRx.ChannelRecvRx(out rxpA429, maxRxp, out rxpNum, opt);//这里设置为存储一个数据,那么可以操作的data只有一个 if (ret != 0) { errCount++; RunningLog.Record(string.Format("return value is {0} when receive data", ret)); } else if (rxpNum > 0 && ret == 0) { count++; rxpA429Result = rxpA429;//这里将out的数据保存到类中 FileHelper.WriteLogForReceive(Convert.ToString(rxpA429.data, 2)); } MibDataA429 mibDataA429; ret = driverRx.ChannelMibGetRx(out mibDataA429); if (ret != 0) { RunningLog.Record(string.Format("return value is {0} when ChannelMibGetRx data", ret)); } DeviceCount = mibDataA429.cnt; errDeviceCount = mibDataA429.err_cnt; if (IsFileSaveAllow)//如果允许保存文件,那么就执行这一步操作 { DataProcessModule.Save(rxpA429, rxpNum); } }
//17. ChannelRecvRx HandleRef rxpBuf为RxpA429类型 public uint ChannelRecvRx(out RxpA429 rxpBuf, uint maxRxp, out int rxpNum, WaitStatusA429 opt) { IntPtr ptr = _rxpA429IntPtr; byte[] bytes = _rxpA429InitArray; //获取数据前清空,内存中的数据 Marshal.Copy(bytes, 0, ptr, bytes.Length); Marshal.Copy(_rxpNumInitArray, 0, _rxpNumIntPtr, _rxpNumInitArray.Length); //调用方法,获取数据 uint ret = NativeMethods429.ChannelRecvRx(DeviceID, ChannelID, ptr, maxRxp, _rxpNumIntPtr, opt); //转换非托管数据为托管数据 rxpBuf = null; rxpNum = 0; if (ret == Normal) { rxpBuf = (RxpA429)Marshal.PtrToStructure(ptr, typeof(RxpA429)); rxpNum = (int)Marshal.PtrToStructure(_rxpNumIntPtr, typeof(int)); } return(ret); }
public static extern uint ChannelRecvRx(uint devID, uint chanID, IntPtr rxpBuf, uint maxRxp, IntPtr rxpNum, WaitStatusA429 opt);