private void processInputTag(object inputTagID) { string tagID = (string)inputTagID; while (true) { //Iscitaj vrednost sa uredjaja int scannedVal = 0; if (!tags.ContainsKey(tagID)) { return; } //Proveri koji drajver je u pitanju if (tags[tagID].Driver is RealTimeDriver) { lock (rt_driver) { scannedVal = rt_driver.readValue(tags[tagID].IOAddress); } } else { //ako je simulacioni moramo proveriti koje skeniranje je ukljuceno if (((TagInput)tags[tagID]).Read == readType.AUTO) { lock (sim_driver) { scannedVal = sim_driver.readValue(tags[tagID].IOAddress); } } else { lock (sim_driver) { scannedVal = sim_driver.manualRead(tags[tagID].IOAddress); //scan manual value sim_driver.manualWrite(tags[tagID].IOAddress, 0); //put back default value } } } //provera za alarm da li se dogodio foreach (Alarm alarm in ((TagInput)tags[tagID]).Alarms) { if (scannedVal < alarm.LowLimit || scannedVal > alarm.HightLimit) { if (alarmDisplayProxy != null) { DateTime currentTime = DateTime.Now; alarm.AlarmTime = currentTime; //ispisi na konzolu ako je ukljuceno skeniranje if (((TagInput)tags[tagID]).Scan == scanType.ON) { alarmDisplayProxy.logAlarmToConsole(alarm, scannedVal); } lock (alarmIO) { alarmIO.writeAlarmToFile(alarm); } } } } //Posalji podatke na trending if (trendingProxy != null) { trendingProxy.addNewValue(tagID, scannedVal); } Thread.Sleep(((TagInput)tags[tagID]).ScanTime * 1000); } }