public static void DataChanged(int clientSubscription, bool allQualitiesGood, bool noErrors, ItemValueCallback[] itemValues) { int idx; // Transaction Handle Is the PLC's Index 1 Based So Must Decrement By 1 idx = clientSubscription -1; try { //iterate through array of returned values foreach (ItemValueCallback itemValue in itemValues) { if (itemValue.ResultID.Succeeded) { //logger.Debug("PLC Name: {5}, Client Subscription: {0} Item: {1}, Value: {2}, Quality: {3}, Timestamp: {4}", clientSubscription, itemValue.ClientHandle, itemValue.Value, itemValue.Quality.Name, itemValue.TimeStamp); IDCService.IDCConfig.model.plcs[idx].opcliitems[(int)itemValue.ClientHandle - 1].value = itemValue.Value; IDCService.IDCConfig.model.plcs[idx].opcliitems[(int)itemValue.ClientHandle - 1].quality = itemValue.Quality.Quality; IDCService.IDCConfig.model.plcs[idx].opcliitems[(int)itemValue.ClientHandle - 1].timestamp = itemValue.TimeStamp; } else { logger.Info("ItemError In Item: {0}", IDCService.IDCConfig.model.plcs[idx].opcliitems[(int)itemValue.ClientHandle - 1].path); } // If Succeeded } // ForEach Item Value if (IDCService.IDCConfig.model.plcs[idx].initDataReceived != true) { logger.Info("DataChanged Initial Data Received For {0} ItemCount: {1}", IDCService.IDCConfig.model.plcs[idx].name, itemValues.Count()); } } catch (Exception ex) { logger.Error(ex, "DataChanged exception. Reason:" + ex.Message); } }