Browse Source

Add LeakTest Simulator;

niuyx 1 month ago
parent
commit
8e747af6dc

+ 2 - 1
CyberX8_Simulator/Config/SimulatorIOMapCfg.xml

@@ -11,5 +11,6 @@
 	<SimulatorIOMapItem SourceIOName="c_DPUF_A_CHUCK_A_RELEASE" TargetIONameA="r_DPUF_A_CHUCK_A_VAC"/>
 	<SimulatorIOMapItem SourceIOName="c_DPUF_A_CHUCK_B_RELEASE" TargetIONameA="r_DPUF_A_CHUCK_B_VAC"/>
 	<SimulatorIOMapItem SourceIOName="c_TRANSPORT1_DROP_BLOCK_LOCK" TargetIONameA="ProcessTransporterLock"/>			
-	<SimulatorIOMapItem SourceIOName="c_TRANSPORT2_DROP_BLOCK_LOCK" TargetIONameA="LoaderTransporterLock"/>			
+	<SimulatorIOMapItem SourceIOName="c_TRANSPORT2_DROP_BLOCK_LOCK" TargetIONameA="LoaderTransporterLock"/>
+	<SimulatorIOMapItem SourceIOName="c_Flow_Test_Clamp" TargetIONameA="FlowTestClamp"/>
 </SimulatorIOMapConfig>

+ 2 - 2
CyberX8_Simulator/Config/UILayout.xml

@@ -8,8 +8,8 @@
   </Navigation>
 
 	<Navigation Id="Wago" Name="Wago" >
-		<SubView Id="Wago0" Name="Wago0" ViewClass="CyberX8_Simulator.Views.WagoView" Assembly="CyberX8_Simulator" Port ="501"/>
-		<SubView Id="Wago1" Name="Wago1" ViewClass="CyberX8_Simulator.Views.WagoView" Assembly="CyberX8_Simulator" Port ="550"/>
+		<SubView Id="Wago0" Name="Loader" ViewClass="CyberX8_Simulator.Views.WagoView" Assembly="CyberX8_Simulator" Port ="501"/>
+		<SubView Id="Wago1" Name="Puf" ViewClass="CyberX8_Simulator.Views.WagoView" Assembly="CyberX8_Simulator" Port ="550"/>
 		<SubView Id="Wago2" Name="Wago2" ViewClass="CyberX8_Simulator.Views.WagoView" Assembly="CyberX8_Simulator" Port ="551"/>
 	</Navigation>
 

+ 52 - 6
CyberX8_Simulator/Devices/WagoSocketSimulator.cs

@@ -46,7 +46,14 @@ namespace CyberX8_Simulator.Devices
         /// 写AO锁
         /// </summary>
         private object _writeAOLocker = new object();
-
+        /// <summary>
+        /// Festo Data Buffer
+        /// </summary>
+        private Dictionary<string, bool> _festoDataBuffer = new Dictionary<string, bool>();
+        /// <summary>
+        /// 定时器
+        /// </summary>
+        private PeriodicJob _periodicJob;
         public WagoSocketSimulator(int port):base(port) 
         {
             SimulatorCommManager.Instance.OnUpdateVariableValueChanged += UpdataDataCausedByOtherModule;
@@ -57,6 +64,7 @@ namespace CyberX8_Simulator.Devices
         private void UpdataDataCausedByOtherModule(string name, bool value, bool invert)
         {
             value = invert ? !value : value;
+            //AI Data
             if (AINameIndexDic.ContainsKey(name))
             {
                 switch (name)
@@ -79,11 +87,12 @@ namespace CyberX8_Simulator.Devices
                         break;
                     default:
                         break;
-                }
-           
+                }          
             }
-            //DI
+            //DI Data
             UpdataDIBytes(name, value ? 1 : 0);
+            //Festo Data
+            if (name == "FlowTestClamp") _festoDataBuffer[name] = value;
         }
         /// <summary>
         /// 触发Wago对应数据更新
@@ -117,6 +126,10 @@ namespace CyberX8_Simulator.Devices
                     {
                         if (port == config.Port)
                         {
+                            if(config.Module == "Loader" && _periodicJob == null)
+                            {
+                                _periodicJob = new PeriodicJob(100, OnTimer, $"Wago {config.Module} timer",true);
+                            }
                             //加载DO
                             int i = 0;
                             DONameIndexDic = new Dictionary<string, int>();
@@ -125,6 +138,7 @@ namespace CyberX8_Simulator.Devices
                                 foreach (var item in group.WagoDOs)
                                 {
                                     DONameIndexDic[item.Name] = i;
+                                    i++;
                                 }
                             }
                             //加载DI
@@ -462,7 +476,39 @@ namespace CyberX8_Simulator.Devices
             bytes[8] = error;
             return bytes;
         }
-
-
+        /// <summary>
+        /// 定时器
+        /// </summary>
+        /// <returns></returns>
+        private bool OnTimer()
+        {
+            LeakTestSimulator();
+            return true;
+        }
+
+        #region 模拟方法
+        /// <summary>
+        /// Loader LeakTest模拟
+        /// </summary>
+        private void LeakTestSimulator()
+        {
+            if (DOBytes[DONameIndexDic["c_VACUUM_TEST"]] == 1 && _festoDataBuffer["FlowTestClamp"] && AIShorts[AINameIndexDic["r_LOADER_GasFlowSensor_FLOW"]] == 0)
+            {
+                AIShorts[AINameIndexDic["r_LOADER_GasFlowSensor_FLOW"]] = 15000;
+            }
+            else if (DOBytes[DONameIndexDic["c_VACUUM_TEST"]] == 0 && !_festoDataBuffer["FlowTestClamp"])
+            {
+                AIShorts[AINameIndexDic["r_LOADER_GasFlowSensor_FLOW"]] = 0;
+            }
+            if (DOBytes[DONameIndexDic["c_VACUUM_TEST"]] == 1 && _festoDataBuffer["FlowTestClamp"] && AIShorts[AINameIndexDic["r_LOADER_GasFlowSensor_FLOW"]] > 3500)
+            {
+                AIShorts[AINameIndexDic["r_LOADER_GasFlowSensor_FLOW"]] -= 40;
+                if (AIShorts[AINameIndexDic["r_LOADER_GasFlowSensor_FLOW"]] < 14000)
+                {
+                    AIShorts[AINameIndexDic["r_LOADER_GasFlowSensor_FLOW"]] -= 140;
+                }
+            }
+        }
+        #endregion
     }
 }