| 
															
																@@ -20,6 +20,7 @@ using System.Collections.Generic; 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 using System.Diagnostics;
 
															 | 
															
															 | 
															
																 using System.Diagnostics;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 using System.IO;
 
															 | 
															
															 | 
															
																 using System.IO;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 using System.Linq;
 
															 | 
															
															 | 
															
																 using System.Linq;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+using System.Reflection;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 using System.Text;
 
															 | 
															
															 | 
															
																 using System.Text;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 using System.Threading.Tasks;
 
															 | 
															
															 | 
															
																 using System.Threading.Tasks;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 using System.Xml;
 
															 | 
															
															 | 
															
																 using System.Xml;
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -28,6 +29,8 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 {
 
															 | 
															
															 | 
															
																 {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     public class IoAPC : BaseDevice, IDevice
 
															 | 
															
															 | 
															
																     public class IoAPC : BaseDevice, IDevice
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																     {
 
															 | 
															
															 | 
															
																     {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private Dictionary<string, Dictionary<string, string>> _pIDFileInfo = new Dictionary<string, Dictionary<string, string>>();
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         #region Filed
 
															 | 
															
															 | 
															
																         #region Filed
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private DIAccessor _diP1ZeroOffsetOutRangeAlm;
 
															 | 
															
															 | 
															
																         private DIAccessor _diP1ZeroOffsetOutRangeAlm;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private DIAccessor _diP1ZeroAdjOutRangeAlm;
 
															 | 
															
															 | 
															
																         private DIAccessor _diP1ZeroAdjOutRangeAlm;
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -46,7 +49,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private DIAccessor _diPumpStopInterlockAlm;
 
															 | 
															
															 | 
															
																         private DIAccessor _diPumpStopInterlockAlm;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private DIAccessor _diAutoTeachingErr1Alm;
 
															 | 
															
															 | 
															
																         private DIAccessor _diAutoTeachingErr1Alm;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private DIAccessor _diAutoTeachingErr2Alm;
 
															 | 
															
															 | 
															
																         private DIAccessor _diAutoTeachingErr2Alm;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-        
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private DOAccessor _doVGUnit;
 
															 | 
															
															 | 
															
																         private DOAccessor _doVGUnit;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private DOAccessor _doAoDataReadSysConfig;
 
															 | 
															
															 | 
															
																         private DOAccessor _doAoDataReadSysConfig;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private DOAccessor _doAoDataWriteSysConfig;
 
															 | 
															
															 | 
															
																         private DOAccessor _doAoDataWriteSysConfig;
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -187,6 +190,91 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private AOAccessor _aoController10CL;
 
															 | 
															
															 | 
															
																         private AOAccessor _aoController10CL;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private AOAccessor _aoController10Offset;
 
															 | 
															
															 | 
															
																         private AOAccessor _aoController10Offset;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
 
															 | 
															
															 | 
															
																 
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController1P;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController1I;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController1D;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController1A;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController1CH;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController1CL;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController1Offset;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController2;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController2P;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController2I;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController2D;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController2A;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController2CH;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController2CL;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController2Offset;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController3;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController3P;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController3I;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController3D;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController3A;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController3CH;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController3CL;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController3Offset;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController4;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController4P;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController4I;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController4D;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController4A;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController4CH;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController4CL;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController4Offset;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController5;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController5P;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController5I;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController5D;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController5A;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController5CH;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController5CL;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController5Offset;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController6;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController6P;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController6I;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController6D;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController6A;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController6CH;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController6CL;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController6Offset;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController7;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController7P;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController7I;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController7D;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController7A;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController7CH;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController7CL;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController7Offset;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController8;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController8P;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController8I;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController8D;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController8A;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController8CH;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController8CL;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController8Offset;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController9;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController9P;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController9I;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController9D;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController9A;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController9CH;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController9CL;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController9Offset;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController10;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController10P;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController10I;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController10D;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController10A;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController10CH;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController10CL;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiController10Offset;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiSlowVacuumP;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiSlowVacuumI;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiSlowVacuumD;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private AIAccessor _aiSlowVacuumA;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private bool _isFloatAioType = false;
 
															 | 
															
															 | 
															
																         private bool _isFloatAioType = false;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private AITAPCData _deviceData;
 
															 | 
															
															 | 
															
																         private AITAPCData _deviceData;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
 
															 | 
															
															 | 
															
																 
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -217,7 +305,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         {
 
															 | 
															
															 | 
															
																         {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             get
 
															 | 
															
															 | 
															
																             get
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             {
 
															 | 
															
															 | 
															
																             {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                if(_unloadTimer != null && _unloadTimer.IsRunning && _unloadTimer.ElapsedMilliseconds > 3000)
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                if (_unloadTimer != null && _unloadTimer.IsRunning && _unloadTimer.ElapsedMilliseconds > 3000)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 {
 
															 | 
															
															 | 
															
																                 {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     return _aiValveStatusThreshold.FloatValue;
 
															 | 
															
															 | 
															
																                     return _aiValveStatusThreshold.FloatValue;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 }
 
															 | 
															
															 | 
															
																                 }
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -446,6 +534,10 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _aoSlowVacuumI = ParseAoNode("aoSlowVacuumI", node, ioModule);
 
															 | 
															
															 | 
															
																             _aoSlowVacuumI = ParseAoNode("aoSlowVacuumI", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _aoSlowVacuumD = ParseAoNode("aoSlowVacuumD", node, ioModule);
 
															 | 
															
															 | 
															
																             _aoSlowVacuumD = ParseAoNode("aoSlowVacuumD", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _aoSlowVacuumA = ParseAoNode("aoSlowVacuumA", node, ioModule);
 
															 | 
															
															 | 
															
																             _aoSlowVacuumA = ParseAoNode("aoSlowVacuumA", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiSlowVacuumP = ParseAiNode("aiSlowVacuumP", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiSlowVacuumI = ParseAiNode("aiSlowVacuumI", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiSlowVacuumD = ParseAiNode("aiSlowVacuumD", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiSlowVacuumA = ParseAiNode("aiSlowVacuumA", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _aoControllerModeSelect = ParseAoNode("aoControllerModeSelect", node, ioModule);
 
															 | 
															
															 | 
															
																             _aoControllerModeSelect = ParseAoNode("aoControllerModeSelect", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _aoSpecifyTargetVacuumPressureControl = ParseAoNode("aoSpecifyTargetVacuumPressureControl", node, ioModule);
 
															 | 
															
															 | 
															
																             _aoSpecifyTargetVacuumPressureControl = ParseAoNode("aoSpecifyTargetVacuumPressureControl", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _aoSpecifyTargetOpeningForValveOpeningControl = ParseAoNode("aoSpecifyTargetOpeningForValveOpeningControl", node, ioModule);
 
															 | 
															
															 | 
															
																             _aoSpecifyTargetOpeningForValveOpeningControl = ParseAoNode("aoSpecifyTargetOpeningForValveOpeningControl", node, ioModule);
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -532,6 +624,86 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _aoController10CL = ParseAoNode("aoController10CL", node, ioModule);
 
															 | 
															
															 | 
															
																             _aoController10CL = ParseAoNode("aoController10CL", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _aoController10Offset = ParseAoNode("aoController10Offset", node, ioModule);
 
															 | 
															
															 | 
															
																             _aoController10Offset = ParseAoNode("aoController10Offset", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
 
															 | 
															
															 | 
															
																 
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController1P = ParseAiNode("aiController1P", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController1I = ParseAiNode("aiController1I", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController1D = ParseAiNode("aiController1D", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController1A = ParseAiNode("aiController1A", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController1CH = ParseAiNode("aiController1CH", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController1CL = ParseAiNode("aiController1CL", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController1Offset = ParseAiNode("aiController1Offset", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController2 = ParseAiNode("aiController2", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController2P = ParseAiNode("aiController2P", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController2I = ParseAiNode("aiController2I", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController2D = ParseAiNode("aiController2D", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController2A = ParseAiNode("aiController2A", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController2CH = ParseAiNode("aiController2CH", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController2CL = ParseAiNode("aiController2CL", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController2Offset = ParseAiNode("aiController2Offset", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController3 = ParseAiNode("aiController3", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController3P = ParseAiNode("aiController3P", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController3I = ParseAiNode("aiController3I", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController3D = ParseAiNode("aiController3D", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController3A = ParseAiNode("aiController3A", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController3CH = ParseAiNode("aiController3CH", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController3CL = ParseAiNode("aiController3CL", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController3Offset = ParseAiNode("aiController3Offset", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController4 = ParseAiNode("aiController4", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController4P = ParseAiNode("aiController4P", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController4I = ParseAiNode("aiController4I", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController4D = ParseAiNode("aiController4D", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController4A = ParseAiNode("aiController4A", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController4CH = ParseAiNode("aiController4CH", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController4CL = ParseAiNode("aiController4CL", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController4Offset = ParseAiNode("aiController4Offset", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController5 = ParseAiNode("aiController5", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController5P = ParseAiNode("aiController5P", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController5I = ParseAiNode("aiController5I", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController5D = ParseAiNode("aiController5D", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController5A = ParseAiNode("aiController5A", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController5CH = ParseAiNode("aiController5CH", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController5CL = ParseAiNode("aiController5CL", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController5Offset = ParseAiNode("aiController5Offset", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController6 = ParseAiNode("aiController6", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController6P = ParseAiNode("aiController6P", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController6I = ParseAiNode("aiController6I", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController6D = ParseAiNode("aiController6D", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController6A = ParseAiNode("aiController6A", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController6CH = ParseAiNode("aiController6CH", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController6CL = ParseAiNode("aiController6CL", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController6Offset = ParseAiNode("aiController6Offset", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController7 = ParseAiNode("aiController7", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController7P = ParseAiNode("aiController7P", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController7I = ParseAiNode("aiController7I", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController7D = ParseAiNode("aiController7D", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController7A = ParseAiNode("aiController7A", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController7CH = ParseAiNode("aiController7CH", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController7CL = ParseAiNode("aiController7CL", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController7Offset = ParseAiNode("aiController7Offset", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController8 = ParseAiNode("aiController8", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController8P = ParseAiNode("aiController8P", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController8I = ParseAiNode("aiController8I", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController8D = ParseAiNode("aiController8D", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController8A = ParseAiNode("aiController8A", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController8CH = ParseAiNode("aiController8CH", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController8CL = ParseAiNode("aiController8CL", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController8Offset = ParseAiNode("aiController8Offset", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController9 = ParseAiNode("aiController9", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController9P = ParseAiNode("aiController9P", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController9I = ParseAiNode("aiController9I", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController9D = ParseAiNode("aiController9D", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController9A = ParseAiNode("aiController9A", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController9CH = ParseAiNode("aiController9CH", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController9CL = ParseAiNode("aiController9CL", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController9Offset = ParseAiNode("aiController9Offset", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController10 = ParseAiNode("aiController10", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController10P = ParseAiNode("aiController10P", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController10I = ParseAiNode("aiController10I", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController10D = ParseAiNode("aiController10D", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController10A = ParseAiNode("aiController10A", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController10CH = ParseAiNode("aiController10CH", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController10CL = ParseAiNode("aiController10CL", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _aiController10Offset = ParseAiNode("aiController10Offset", node, ioModule);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             PressureUnit = SC.GetStringValue($"{Module}.{Name}.PressureUnit");
 
															 | 
															
															 | 
															
																             PressureUnit = SC.GetStringValue($"{Module}.{Name}.PressureUnit");
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         }
 
															 | 
															
															 | 
															
																         }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         public bool Initialize()
 
															 | 
															
															 | 
															
																         public bool Initialize()
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -578,6 +750,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             DATA.Subscribe($"{Module}.{Name}.InterlockConstantOfInterlock3", () => InterlockConstantOfInterlock3);
 
															 | 
															
															 | 
															
																             DATA.Subscribe($"{Module}.{Name}.InterlockConstantOfInterlock3", () => InterlockConstantOfInterlock3);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             DATA.Subscribe($"{Module}.{Name}.P1SensorOffsetSetting", () => P1SensorOffsetSetting);
 
															 | 
															
															 | 
															
																             DATA.Subscribe($"{Module}.{Name}.P1SensorOffsetSetting", () => P1SensorOffsetSetting);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             DATA.Subscribe($"{Module}.{Name}.PosMonOffsetSetting", () => PosMonOffsetSetting);
 
															 | 
															
															 | 
															
																             DATA.Subscribe($"{Module}.{Name}.PosMonOffsetSetting", () => PosMonOffsetSetting);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            DATA.Subscribe($"{Module}.{Name}.AllPIDFileInfo", () => _pIDFileInfo);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             //DATA.Subscribe($"{Module}.{Name}.IsSwitch", () => IsSwitch);
 
															 | 
															
															 | 
															
																             //DATA.Subscribe($"{Module}.{Name}.IsSwitch", () => IsSwitch);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             //DATA.Subscribe($"{Module}.{Name}.SetSpeed", () => SetSpeed);
 
															 | 
															
															 | 
															
																             //DATA.Subscribe($"{Module}.{Name}.SetSpeed", () => SetSpeed);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             //DATA.Subscribe($"{Module}.{Name}.MaxSpeed", () => MaxSpeed);
 
															 | 
															
															 | 
															
																             //DATA.Subscribe($"{Module}.{Name}.MaxSpeed", () => MaxSpeed);
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -622,12 +795,21 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 SetConfig(param);
 
															 | 
															
															 | 
															
																                 SetConfig(param);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 return true;
 
															 | 
															
															 | 
															
																                 return true;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             });
 
															 | 
															
															 | 
															
																             });
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            OP.Subscribe($"{Module}.{Name}.GetAllPIDFileInfo", (string cmd, object[] param) =>
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                //command;pidTable;setValue;LowPressWait
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                _pIDFileInfo = GetAllPID();
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                return true;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            });
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             OP.Subscribe($"{Module}.{Name}.SetPID", (string cmd, object[] param) =>
 
															 | 
															
															 | 
															
																             OP.Subscribe($"{Module}.{Name}.SetPID", (string cmd, object[] param) =>
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             {
 
															 | 
															
															 | 
															
																             {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 if (param != null && param.Length > 1)
 
															 | 
															
															 | 
															
																                 if (param != null && param.Length > 1)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 {
 
															 | 
															
															 | 
															
																                 {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     int.TryParse(param[1].ToString(), out int controllerID);
 
															 | 
															
															 | 
															
																                     int.TryParse(param[1].ToString(), out int controllerID);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     SetControllerParameters(param[0].ToString(), controllerID);
 
															 | 
															
															 | 
															
																                     SetControllerParameters(param[0].ToString(), controllerID);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    SetSlowVacParameters(param[0].ToString());
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 }
 
															 | 
															
															 | 
															
																                 }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 return true;
 
															 | 
															
															 | 
															
																                 return true;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             });
 
															 | 
															
															 | 
															
																             });
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -648,6 +830,61 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _unloadTimer.Restart();
 
															 | 
															
															 | 
															
																             _unloadTimer.Restart();
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _doAoDataReadSysConfig.SetPulseValue(true, 3000);
 
															 | 
															
															 | 
															
																             _doAoDataReadSysConfig.SetPulseValue(true, 3000);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         }
 
															 | 
															
															 | 
															
																         }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        public Dictionary<string, Dictionary<string, string>> GetAllPID()
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _pIDFileInfo.Clear();
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            FieldInfo[] fields = typeof(IoAPC).GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            Dictionary<string, FieldInfo> fieldCache = new Dictionary<string, FieldInfo>();
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            for (int i = 1; i <= 10; i++)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                var prefix = $"_aiController{i}";
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                var aiControllerP = GetFieldValue(prefix + "P", fields, fieldCache) as AIAccessor;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                var aiControllerI = GetFieldValue(prefix + "I", fields, fieldCache) as AIAccessor;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                var aiControllerD = GetFieldValue(prefix + "D", fields, fieldCache) as AIAccessor;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                var aiControllerA = GetFieldValue(prefix + "A", fields, fieldCache) as AIAccessor;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                var aiControllerCH = GetFieldValue(prefix + "CH", fields, fieldCache) as AIAccessor;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                var aiControllerCL = GetFieldValue(prefix + "CL", fields, fieldCache) as AIAccessor;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                var aiControllerOffset = GetFieldValue(prefix + "Offset", fields, fieldCache) as AIAccessor;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                _pIDFileInfo.Add(i.ToString(), new Dictionary<string, string>()
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                     {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                         { "P", aiControllerP != null ? aiControllerP.FloatValue.ToString() : "0" },
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                         { "I", aiControllerI != null ? aiControllerI.FloatValue.ToString() : "0" },
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                         { "D", aiControllerD != null ? aiControllerD.FloatValue.ToString() : "0" },
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                         { "A", aiControllerA != null ? aiControllerA.FloatValue.ToString() : "0" },
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                         { "CH", aiControllerCH != null ? aiControllerCH.FloatValue.ToString() : "0" },
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                         { "CL", aiControllerCL != null ? aiControllerCL.FloatValue.ToString() : "0" },
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                         { "Offset", aiControllerOffset != null ? aiControllerOffset.FloatValue.ToString() : "0" }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                     });
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                 }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            var aiSlowVacuumP = _aiSlowVacuumP?.FloatValue;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            var aiSlowVacuumI = _aiSlowVacuumI?.FloatValue;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            var aiSlowVacuumD = _aiSlowVacuumD?.FloatValue;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            var aiSlowVacuumA = _aiSlowVacuumA?.FloatValue;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _pIDFileInfo.Add("0", new Dictionary<string, string>()
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    { "P", aiSlowVacuumP != null ? aiSlowVacuumP.ToString() : "0" },
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    { "I", aiSlowVacuumI != null ? aiSlowVacuumI.ToString() : "0" },
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    { "D", aiSlowVacuumD != null ? aiSlowVacuumD.ToString() : "0" },
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                    { "A", aiSlowVacuumA != null ? aiSlowVacuumA.ToString() : "0" }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                });
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            _doAoDataReadCusConfig?.SetPulseValue(true, 3000);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            return _pIDFileInfo;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private object GetFieldValue(string fieldName, FieldInfo[] fields, Dictionary<string, FieldInfo> fieldCache)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            if (!fieldCache.TryGetValue(fieldName, out FieldInfo field))
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                field = Array.Find(fields, f => f.Name == fieldName);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                fieldCache[fieldName] = field;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            return field?.GetValue(this);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private void SetDownload(object[] param)
 
															 | 
															
															 | 
															
																         private void SetDownload(object[] param)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         {
 
															 | 
															
															 | 
															
																         {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             SetConfig(param);
 
															 | 
															
															 | 
															
																             SetConfig(param);
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -682,7 +919,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         }
 
															 | 
															
															 | 
															
																         }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private void SetConfig(object[] param)
 
															 | 
															
															 | 
															
																         private void SetConfig(object[] param)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         {
 
															 | 
															
															 | 
															
																         {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            if(param != null && param.Length > 7)
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            if (param != null && param.Length > 7)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             {
 
															 | 
															
															 | 
															
																             {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 float.TryParse(param[0].ToString(), out float value);
 
															 | 
															
															 | 
															
																                 float.TryParse(param[0].ToString(), out float value);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 ValveStatusThreshold = value;
 
															 | 
															
															 | 
															
																                 ValveStatusThreshold = value;
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -697,7 +934,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 Interlock2 = value;
 
															 | 
															
															 | 
															
																                 Interlock2 = value;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
 
															 | 
															
															 | 
															
																 
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 float.TryParse(param[4].ToString(), out value);
 
															 | 
															
															 | 
															
																                 float.TryParse(param[4].ToString(), out value);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                Interlock3= value;
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                Interlock3 = value;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
 
															 | 
															
															 | 
															
																 
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 float.TryParse(param[5].ToString(), out value);
 
															 | 
															
															 | 
															
																                 float.TryParse(param[5].ToString(), out value);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 InterlockConstantOfInterlock3 = value;
 
															 | 
															
															 | 
															
																                 InterlockConstantOfInterlock3 = value;
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -712,12 +949,12 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
 
															 | 
															
															 | 
															
																 
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         public void Monitor()
 
															 | 
															
															 | 
															
																         public void Monitor()
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         {
 
															 | 
															
															 | 
															
																         {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            if(!_isInit)
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            if (!_isInit)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             {
 
															 | 
															
															 | 
															
																             {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 if (!_initTimer.IsRunning)
 
															 | 
															
															 | 
															
																                 if (!_initTimer.IsRunning)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     _initTimer.Start();
 
															 | 
															
															 | 
															
																                     _initTimer.Start();
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
 
															 | 
															
															 | 
															
																 
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                if(_initTimer.ElapsedMilliseconds > 5 * 1000)
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                if (_initTimer.ElapsedMilliseconds > 5 * 1000)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 {
 
															 | 
															
															 | 
															
																                 {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     _initTimer.Stop();
 
															 | 
															
															 | 
															
																                     _initTimer.Stop();
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     _isInit = true;
 
															 | 
															
															 | 
															
																                     _isInit = true;
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -726,7 +963,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     SetControllerParameters(pidTableName, controllerID);
 
															 | 
															
															 | 
															
																                     SetControllerParameters(pidTableName, controllerID);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 }
 
															 | 
															
															 | 
															
																                 }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             }
 
															 | 
															
															 | 
															
																             }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            if(_valveAV71 == null)
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            if (_valveAV71 == null)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 _valveAV71 = DEVICE.GetDevice<IoValve>($"{Module}.ValveAV71");
 
															 | 
															
															 | 
															
																                 _valveAV71 = DEVICE.GetDevice<IoValve>($"{Module}.ValveAV71");
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
 
															 | 
															
															 | 
															
																 
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             //if(_valveAV71 != null && Singleton<EquipmentManager>.Instance.Modules.ContainsKey(ModuleName.PM1) &&
 
															 | 
															
															 | 
															
																             //if(_valveAV71 != null && Singleton<EquipmentManager>.Instance.Modules.ContainsKey(ModuleName.PM1) &&
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -749,7 +986,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             //    }
 
															 | 
															
															 | 
															
																             //    }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             //}
 
															 | 
															
															 | 
															
																             //}
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
 
															 | 
															
															 | 
															
																 
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            if(_apcSetModeTimer.IsRunning && _apcSetModeTimer.ElapsedMilliseconds > _apcSetModeTimeOutSec * 1000)
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            if (_apcSetModeTimer.IsRunning && _apcSetModeTimer.ElapsedMilliseconds > _apcSetModeTimeOutSec * 1000)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             {
 
															 | 
															
															 | 
															
																             {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 APCSetModeAlarm.Set("APC set mode timeout");
 
															 | 
															
															 | 
															
																                 APCSetModeAlarm.Set("APC set mode timeout");
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             }
 
															 | 
															
															 | 
															
																             }
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -926,7 +1163,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _deviceData.PIDTable = $"{controllerID}:{paras[10]}";
 
															 | 
															
															 | 
															
																             _deviceData.PIDTable = $"{controllerID}:{paras[10]}";
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _deviceData.LowPressWaitSetPoint = paras[3];
 
															 | 
															
															 | 
															
																             _deviceData.LowPressWaitSetPoint = paras[3];
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
 
															 | 
															
															 | 
															
																 
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            if(av71 == "close")
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            if (av71 == "close")
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             {
 
															 | 
															
															 | 
															
																             {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 //av71 close,就设置为close
 
															 | 
															
															 | 
															
																                 //av71 close,就设置为close
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 _valveAV71.TurnValve(false, out _);
 
															 | 
															
															 | 
															
																                 _valveAV71.TurnValve(false, out _);
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -956,13 +1193,13 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         }
 
															 | 
															
															 | 
															
																         }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private void SetManualParameters(object[] param)
 
															 | 
															
															 | 
															
																         private void SetManualParameters(object[] param)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         {
 
															 | 
															
															 | 
															
																         {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            if(param == null || param.Length < 1)
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            if (param == null || param.Length < 1)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             {
 
															 | 
															
															 | 
															
																             {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 EV.PostWarningLog(Module, $"Invalid APC set parameter");
 
															 | 
															
															 | 
															
																                 EV.PostWarningLog(Module, $"Invalid APC set parameter");
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 return;
 
															 | 
															
															 | 
															
																                 return;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             }
 
															 | 
															
															 | 
															
																             }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             var paras = param[0].ToString().Split(';');
 
															 | 
															
															 | 
															
																             var paras = param[0].ToString().Split(';');
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            if(paras.Length < 4)
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            if (paras.Length < 4)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             {
 
															 | 
															
															 | 
															
																             {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 EV.PostWarningLog(Module, $"Invalid APC set parameter");
 
															 | 
															
															 | 
															
																                 EV.PostWarningLog(Module, $"Invalid APC set parameter");
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 return;
 
															 | 
															
															 | 
															
																                 return;
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -974,7 +1211,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             bool av71 = _valveAV71.Status;
 
															 | 
															
															 | 
															
																             bool av71 = _valveAV71.Status;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             if (paras.Length > 4)
 
															 | 
															
															 | 
															
																             if (paras.Length > 4)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 bool.TryParse(paras[4], out av71);
 
															 | 
															
															 | 
															
																                 bool.TryParse(paras[4], out av71);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             //小于 10 torr, full open或者根据设定的模式
 
															 | 
															
															 | 
															
																             //小于 10 torr, full open或者根据设定的模式
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             //大于10 torr,5秒内需要设定的模式
 
															 | 
															
															 | 
															
																             //大于10 torr,5秒内需要设定的模式
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             if (av71)
 
															 | 
															
															 | 
															
																             if (av71)
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -998,7 +1235,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 command = "Full Close";
 
															 | 
															
															 | 
															
																                 command = "Full Close";
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 _apcSetModeTimer.Stop();
 
															 | 
															
															 | 
															
																                 _apcSetModeTimer.Stop();
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             }
 
															 | 
															
															 | 
															
																             }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             if (command.ToLower() == "none")
 
															 | 
															
															 | 
															
																             if (command.ToLower() == "none")
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 return;
 
															 | 
															
															 | 
															
																                 return;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
 
															 | 
															
															 | 
															
																 
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -1015,7 +1252,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     int.TryParse(pidTables[1], out controllerID);
 
															 | 
															
															 | 
															
																                     int.TryParse(pidTables[1], out controllerID);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 }
 
															 | 
															
															 | 
															
																                 }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             }
 
															 | 
															
															 | 
															
																             }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             float.TryParse(paras[2], out float setValue);
 
															 | 
															
															 | 
															
																             float.TryParse(paras[2], out float setValue);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _deviceData.SetPoint = setValue;
 
															 | 
															
															 | 
															
																             _deviceData.SetPoint = setValue;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             _deviceData.CommandSetPoint = command;
 
															 | 
															
															 | 
															
																             _deviceData.CommandSetPoint = command;
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -1024,7 +1261,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
 
															 | 
															
															 | 
															
																 
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             SetCommandParameters(command, setValue, pidTableName, controllerID);
 
															 | 
															
															 | 
															
																             SetCommandParameters(command, setValue, pidTableName, controllerID);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         }
 
															 | 
															
															 | 
															
																         }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-        private void SetCommandParameters(string command, float setValue, string pidTableName, int controllerID, string recipePIDTableName="")
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+        private void SetCommandParameters(string command, float setValue, string pidTableName, int controllerID, string recipePIDTableName = "")
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         {
 
															 | 
															
															 | 
															
																         {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             LOG.Write($"APC command={command}, setpoint={setValue}, Controller ID={controllerID}, PID={pidTableName}");
 
															 | 
															
															 | 
															
																             LOG.Write($"APC command={command}, setpoint={setValue}, Controller ID={controllerID}, PID={pidTableName}");
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             switch (command)
 
															 | 
															
															 | 
															
																             switch (command)
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -1197,7 +1434,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         private void SetControllerParameters(string fileNameAndPath, int controllerID, string recipePIDTableName = "")
 
															 | 
															
															 | 
															
																         private void SetControllerParameters(string fileNameAndPath, int controllerID, string recipePIDTableName = "")
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         {
 
															 | 
															
															 | 
															
																         {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             //var defaultPID = SC.GetStringValue("PM1.APCPID");
 
															 | 
															
															 | 
															
																             //var defaultPID = SC.GetStringValue("PM1.APCPID");
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            if(string.IsNullOrEmpty(fileNameAndPath))
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            if (string.IsNullOrEmpty(fileNameAndPath))
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             {
 
															 | 
															
															 | 
															
																             {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 fileNameAndPath = SC.GetStringValue("PM1.APCPID");
 
															 | 
															
															 | 
															
																                 fileNameAndPath = SC.GetStringValue("PM1.APCPID");
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             }
 
															 | 
															
															 | 
															
																             }
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -1211,11 +1448,11 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 EV.PostWarningLog(Module, $"{fileNameAndPath} APC PID name is empty");
 
															 | 
															
															 | 
															
																                 EV.PostWarningLog(Module, $"{fileNameAndPath} APC PID name is empty");
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 return;
 
															 | 
															
															 | 
															
																                 return;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             }
 
															 | 
															
															 | 
															
																             }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            var fileName = string.Join( "\\", para.ToArray());
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            var fileName = string.Join("\\", para.ToArray());
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             if (!string.IsNullOrEmpty(recipePIDTableName))
 
															 | 
															
															 | 
															
																             if (!string.IsNullOrEmpty(recipePIDTableName))
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 fileName = recipePIDTableName;
 
															 | 
															
															 | 
															
																                 fileName = recipePIDTableName;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
 
															 | 
															
															 | 
															
																 
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            if(controllerID <= 0)
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            if (controllerID <= 0)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             {
 
															 | 
															
															 | 
															
																             {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 int.TryParse(SC.GetStringValue("PM1.APCPIDControllerID"), out controllerID);
 
															 | 
															
															 | 
															
																                 int.TryParse(SC.GetStringValue("PM1.APCPIDControllerID"), out controllerID);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             }
 
															 | 
															
															 | 
															
																             }
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -1233,7 +1470,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             XmlNodeList nodeSteps = doc.SelectNodes($"Aitex/TableParameterData/Module[@Name='']/Step");
 
															 | 
															
															 | 
															
																             XmlNodeList nodeSteps = doc.SelectNodes($"Aitex/TableParameterData/Module[@Name='']/Step");
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             if (nodeSteps == null)
 
															 | 
															
															 | 
															
																             if (nodeSteps == null)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 nodeSteps = doc.SelectNodes($"Aitex/TableParameterData/Step");
 
															 | 
															
															 | 
															
																                 nodeSteps = doc.SelectNodes($"Aitex/TableParameterData/Step");
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            if(nodeSteps == null)
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            if (nodeSteps == null)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             {
 
															 | 
															
															 | 
															
																             {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 EV.PostWarningLog(Module, $"Invalid APC PID file {fileNameAndPath}");
 
															 | 
															
															 | 
															
																                 EV.PostWarningLog(Module, $"Invalid APC PID file {fileNameAndPath}");
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 return;
 
															 | 
															
															 | 
															
																                 return;
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -1265,7 +1502,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 float.TryParse(parameters["offset"], out offset);
 
															 | 
															
															 | 
															
																                 float.TryParse(parameters["offset"], out offset);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 float.TryParse(parameters["CH"], out ch);
 
															 | 
															
															 | 
															
																                 float.TryParse(parameters["CH"], out ch);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 float.TryParse(parameters["CL"], out cl);
 
															 | 
															
															 | 
															
																                 float.TryParse(parameters["CL"], out cl);
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                if(dic.ContainsKey(no))
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                if (dic.ContainsKey(no))
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 {
 
															 | 
															
															 | 
															
																                 {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     EV.PostWarningLog(Module, $"Invalid APC PID file {fileNameAndPath}, duplicate no={no}");
 
															 | 
															
															 | 
															
																                     EV.PostWarningLog(Module, $"Invalid APC PID file {fileNameAndPath}, duplicate no={no}");
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     return;
 
															 | 
															
															 | 
															
																                     return;
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -1290,7 +1527,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             }
 
															 | 
															
															 | 
															
																             }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             if (!dic.ContainsKey(controllerID))
 
															 | 
															
															 | 
															
																             if (!dic.ContainsKey(controllerID))
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 return;
 
															 | 
															
															 | 
															
																                 return;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             p = dic[controllerID].P;
 
															 | 
															
															 | 
															
																             p = dic[controllerID].P;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             i = dic[controllerID].I;
 
															 | 
															
															 | 
															
																             i = dic[controllerID].I;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             d = dic[controllerID].D;
 
															 | 
															
															 | 
															
																             d = dic[controllerID].D;
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -1298,7 +1535,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             ch = dic[controllerID].CH;
 
															 | 
															
															 | 
															
																             ch = dic[controllerID].CH;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             cl = dic[controllerID].CL;
 
															 | 
															
															 | 
															
																             cl = dic[controllerID].CL;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             offset = dic[controllerID].Offset;
 
															 | 
															
															 | 
															
																             offset = dic[controllerID].Offset;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            switch(controllerID)
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            switch (controllerID)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             {
 
															 | 
															
															 | 
															
																             {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 case 1:
 
															 | 
															
															 | 
															
																                 case 1:
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     _aoController1P.FloatValue = p;
 
															 | 
															
															 | 
															
																                     _aoController1P.FloatValue = p;
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -1403,7 +1640,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         public bool CheckWaitCondition(out string reason)
 
															 | 
															
															 | 
															
																         public bool CheckWaitCondition(out string reason)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																         {
 
															 | 
															
															 | 
															
																         {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             reason = "";
 
															 | 
															
															 | 
															
																             reason = "";
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-            if(IsNeedWaitComplete)
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+            if (IsNeedWaitComplete)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																             {
 
															 | 
															
															 | 
															
																             {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 var command = _deviceData.CommandSetPoint;
 
															 | 
															
															 | 
															
																                 var command = _deviceData.CommandSetPoint;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                 var setValue = _deviceData.SetPoint;
 
															 | 
															
															 | 
															
																                 var setValue = _deviceData.SetPoint;
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -1425,7 +1662,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     case "Press2":
 
															 | 
															
															 | 
															
																                     case "Press2":
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                         if (_deviceData.ModeSetPoint == _deviceData.ModeFeedback && _deviceData.ModeSetPoint == (int)PressureControlMode.Press2Control &&
 
															 | 
															
															 | 
															
																                         if (_deviceData.ModeSetPoint == _deviceData.ModeFeedback && _deviceData.ModeSetPoint == (int)PressureControlMode.Press2Control &&
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                           ((_deviceData.Pressure2Feedback > _deviceData.PressureSetPoint - _waitLow &&
 
															 | 
															
															 | 
															
																                           ((_deviceData.Pressure2Feedback > _deviceData.PressureSetPoint - _waitLow &&
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                            _deviceData.Pressure2Feedback < _deviceData.PressureSetPoint + _waitHigh )||
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                            _deviceData.Pressure2Feedback < _deviceData.PressureSetPoint + _waitHigh) ||
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                             (_waitLow <= 0 && _waitHigh <= 0)))
 
															 | 
															
															 | 
															
																                             (_waitLow <= 0 && _waitHigh <= 0)))
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                         {
 
															 | 
															
															 | 
															
																                         {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                             return true;
 
															 | 
															
															 | 
															
																                             return true;
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -1447,7 +1684,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                         break;
 
															 | 
															
															 | 
															
																                         break;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     case "Valve Angle":
 
															 | 
															
															 | 
															
																                     case "Valve Angle":
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                         if (_deviceData.ModeSetPoint == _deviceData.ModeFeedback && _deviceData.ModeSetPoint == (int)PressureControlMode.PositionControl &&
 
															 | 
															
															 | 
															
																                         if (_deviceData.ModeSetPoint == _deviceData.ModeFeedback && _deviceData.ModeSetPoint == (int)PressureControlMode.PositionControl &&
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                           ((_deviceData.PositionFeedback > _waitLow && _deviceData.PositionFeedback < _waitHigh )||
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                           ((_deviceData.PositionFeedback > _waitLow && _deviceData.PositionFeedback < _waitHigh) ||
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                            (_waitLow <= 0 && _waitHigh <= 0)))
 
															 | 
															
															 | 
															
																                            (_waitLow <= 0 && _waitHigh <= 0)))
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                         {
 
															 | 
															
															 | 
															
																                         {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                             return true;
 
															 | 
															
															 | 
															
																                             return true;
 
															 | 
														
													
												
											
												
													
														
															 | 
															
																@@ -1458,7 +1695,7 @@ namespace FurnaceRT.Devices 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                         }
 
															 | 
															
															 | 
															
																                         }
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                         break;
 
															 | 
															
															 | 
															
																                         break;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                     case "Full Open":
 
															 | 
															
															 | 
															
																                     case "Full Open":
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																-                        if(_deviceData.ModeSetPoint== _deviceData.ModeFeedback && _deviceData.ModeSetPoint == (int)PressureControlMode.Open)
 
															 | 
															
															 | 
															
																 
															 | 
														
													
												
													
														
															| 
															 | 
															
																 
															 | 
															
															 | 
															
																+                        if (_deviceData.ModeSetPoint == _deviceData.ModeFeedback && _deviceData.ModeSetPoint == (int)PressureControlMode.Open)
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                         {
 
															 | 
															
															 | 
															
																                         {
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                             return true;
 
															 | 
															
															 | 
															
																                             return true;
 
															 | 
														
													
												
													
														
															| 
															 | 
															
																                         }
 
															 | 
															
															 | 
															
																                         }
 
															 |