void IOPCDataCallback.OnReadComplete( int dwTransid, int hGroup, int hrMasterquality, int hrMastererror, int dwCount, IntPtr phClientItems, IntPtr pvValues, IntPtr pwQualities, IntPtr pftTimeStamps, IntPtr ppErrors) { Trace.WriteLine($"{nameof(OpcGroup)}.{nameof(IOPCDataCallback.OnReadComplete)}, transID:{dwTransid}, count:{dwCount}, thread ID:{System.Threading.Thread.CurrentThread.ManagedThreadId}"); if ((dwCount == 0) || (hGroup != stateHandleClient)) { return; } ReadCompleteEventArgs eventArgs = new ReadCompleteEventArgs { TransactionID = dwTransid, GroupHandleClient = hGroup, MasterQuality = hrMasterquality, MasterError = hrMastererror, ItemStates = new OpcItemState[dwCount] }; for (int i = 0; i < dwCount; i++) { eventArgs.ItemStates[i] = new OpcItemState { Error = Extensions.ReadInt32(ppErrors, i), HandleClient = Extensions.ReadInt32(phClientItems, i) }; if (HRESULTS.Succeeded(eventArgs.ItemStates[i].Error)) { // Test if native variant is VT_ERROR short vt = Marshal.ReadInt16(pvValues, i * Extensions.NativeVariantSize); if (vt == (short)VarEnum.VT_ERROR) { eventArgs.ItemStates[i].Error = Marshal.ReadInt32(pvValues, (i * Extensions.NativeVariantSize) + 8); } eventArgs.ItemStates[i].DataValue = Extensions.GetObjectForNativeVariant(pvValues, i); eventArgs.ItemStates[i].Quality = Extensions.ReadInt16(pwQualities, i); eventArgs.ItemStates[i].TimeStamp = Extensions.ReadInt64(pftTimeStamps, i); } } readCompleted?.Invoke(this, eventArgs); }
public void TheGrpReadComplete(object sender, ReadCompleteEventArgs e) { lock (locker) { InstantLogger.msg("after read"); InstantLogger.msg("ReadComplete event: gh={0} id={1} me={2} mq={3}", e.groupHandleClient, e.transactionID, e.masterError, e.masterQuality); foreach (OPCItemState s in e.sts) { if (HRESULTS.Succeeded(s.Error)) InstantLogger.msg(" ih={0} v={1} q={2} t={3}", s.HandleClient, s.DataValue, s.Quality, s.TimeStamp); else InstantLogger.msg(" ih={0} ERROR=0x{1:x} !", s.HandleClient, s.Error); } } }
public void TheGrpReadComplete(object sender, ReadCompleteEventArgs e) { CoreEventGenerator(sender, e); }
void IOPCDataCallback.OnReadComplete( int dwTransid, int hGroup, int hrMasterquality, int hrMastererror, int dwCount, IntPtr phClientItems, IntPtr pvValues, IntPtr pwQualities, IntPtr pftTimeStamps, IntPtr ppErrors) { Trace.WriteLine( "OpcGroup.OnReadComplete" ); if( (dwCount == 0) || (hGroup != state.HandleClient) ) return; int count = (int) dwCount; int runh = (int) phClientItems; int runv = (int) pvValues; int runq = (int) pwQualities; int runt = (int) pftTimeStamps; int rune = (int) ppErrors; ReadCompleteEventArgs e = new ReadCompleteEventArgs(); e.transactionID = dwTransid; e.groupHandleClient = hGroup; e.masterQuality = hrMasterquality; e.masterError = hrMastererror; e.sts = new OPCItemState[ count ]; for( int i = 0; i < count; i++ ) { e.sts[i] = new OPCItemState(); e.sts[i].Error = Marshal.ReadInt32( (IntPtr) rune ); rune += 4; e.sts[i].HandleClient = Marshal.ReadInt32( (IntPtr) runh ); runh += 4; if( HRESULTS.Succeeded( e.sts[i].Error ) ) { short vt = Marshal.ReadInt16( (IntPtr) runv ); if( vt == (short) VarEnum.VT_ERROR ) e.sts[i].Error = Marshal.ReadInt32( (IntPtr) (runv + 8) ); e.sts[i].DataValue = Marshal.GetObjectForNativeVariant( (IntPtr) runv ); e.sts[i].Quality = Marshal.ReadInt16( (IntPtr) runq ); e.sts[i].TimeStamp = Marshal.ReadInt64( (IntPtr) runt ); } runv += DUMMY_VARIANT.ConstSize; runq += 2; runt += 8; } if( ReadCompleted != null ) ReadCompleted( this, e ); }
void IOPCDataCallback.OnReadComplete( int dwTransid, int hGroup, int hrMasterquality, int hrMastererror, int dwCount, IntPtr phClientItems, IntPtr pvValues, IntPtr pwQualities, IntPtr pftTimeStamps, IntPtr ppErrors) { Trace.WriteLine("OpcGroup.OnReadComplete"); if ((dwCount == 0) || (hGroup != state.HandleClient)) { return; } int count = (int)dwCount; int runh = (int)phClientItems; int runv = (int)pvValues; int runq = (int)pwQualities; int runt = (int)pftTimeStamps; int rune = (int)ppErrors; ReadCompleteEventArgs e = new ReadCompleteEventArgs(); e.transactionID = dwTransid; e.groupHandleClient = hGroup; e.masterQuality = hrMasterquality; e.masterError = hrMastererror; e.sts = new OPCItemState[count]; for (int i = 0; i < count; i++) { OPCItemState item = new OPCItemState(); e.sts[i] = item; item.Error = Marshal.ReadInt32((IntPtr)rune); rune += 4; item.HandleClient = Marshal.ReadInt32((IntPtr)runh); runh += 4; if (HRESULTS.Succeeded(item.Error)) { short vt = Marshal.ReadInt16((IntPtr)runv); if (vt == (short)VarEnum.VT_ERROR) { item.Error = Marshal.ReadInt32((IntPtr)(runv + 8)); } item.DataValue = Marshal.GetObjectForNativeVariant((IntPtr)runv); item.QualityString = QualityToString(Marshal.ReadInt16((IntPtr)runq)); try { item.TimeStamp = DateTime.FromFileTime(Marshal.ReadInt64((IntPtr)runt)); } catch { } } runv += DUMMY_VARIANT.ConstSize; runq += 2; runt += 8; } if (ReadCompleted != null) { ReadCompleted(this, e); } }