Преглед на файлове

update transporter interlock

chenkui преди 2 седмици
родител
ревизия
a0566b0b96
променени са 1 файла, в които са добавени 38 реда и са изтрити 21 реда
  1. 38 21
      CyberX8_RT/Modules/Transporter/TransporterEntity.cs

+ 38 - 21
CyberX8_RT/Modules/Transporter/TransporterEntity.cs

@@ -727,12 +727,8 @@ namespace CyberX8_RT.Modules.Transporter
             bool result = ret == RState.End;
             if (result)
             {
-                _targetCell = "";
                 _currentRoutine = null;
-                if (!string.IsNullOrEmpty(_sourceCell))
-                {
-                    _sourceCell = "";
-                }
+                _sourceCell = "";
             }
             return result;
         }
@@ -757,7 +753,7 @@ namespace CyberX8_RT.Modules.Transporter
             }
             else
             {
-                _targetCell = "";
+                _sourceCell = "";
                 if (Singleton<RouteManager>.Instance.IsAutoRunning)
                 {
                     AlarmListManager.Instance.CheckModuleAlamAndRemove(Module.ToString(), TransporterState.MovingTo.ToString());
@@ -1227,7 +1223,9 @@ namespace CyberX8_RT.Modules.Transporter
             }
             else
             {
-                return false;
+                bool conflict = CheckOtherModuleCellConflict(otherModule, "", otherPosition, positive, targetPosition,motorPosition);
+
+                return conflict;
             }
         }
         /// <summary>
@@ -1262,8 +1260,20 @@ namespace CyberX8_RT.Modules.Transporter
         {
             int transporterMinimumDistance = SC.GetValue<int>("Transporter.TransporterMinimumDistance");
 
-            var result = AnalyseTargetCellPosition(otherModule, cell);
-            if (!result.result)
+            bool condition = true;
+            bool onlyCheckCurrentPosition = true;
+            double cellTargetPosition = double.MaxValue;
+            if (!string.IsNullOrEmpty(cell))
+            {
+                var result = AnalyseTargetCellPosition(otherModule, cell);
+                condition = result.result;
+                cellTargetPosition=result.targetPosition;
+                if (condition)
+                {
+                    onlyCheckCurrentPosition = false;
+                }
+            }
+            if (!condition)
             {
                 return false;
             }
@@ -1275,18 +1285,22 @@ namespace CyberX8_RT.Modules.Transporter
                     //    {
                     //        return true;
                     //    }
-                    if (result.targetPosition - transporterMinimumDistance <= targetPosition)
+                    if (!onlyCheckCurrentPosition)
                     {
-                        return true;
+                        if (cellTargetPosition - transporterMinimumDistance <= targetPosition)
+                        {
+                            return true;
+                        }
+
+                        if (cellTargetPosition - transporterMinimumDistance <= motorPosition)
+                        {
+                            return true;
+                        }
                     }
                     if (otherPosition - transporterMinimumDistance <= targetPosition)
                     {
                         return true;
                     }
-                    if (result.targetPosition - transporterMinimumDistance <= motorPosition)
-                    {
-                        return true;
-                    }
                     return false;
                 }
                 else
@@ -1295,18 +1309,21 @@ namespace CyberX8_RT.Modules.Transporter
                     //{
                     //    return true;
                     //}
-                    if (result.targetPosition + transporterMinimumDistance >= targetPosition)
+                    if (!onlyCheckCurrentPosition)
                     {
-                        return true;
+                        if (cellTargetPosition + transporterMinimumDistance >= targetPosition)
+                        {
+                            return true;
+                        }
+                        if (cellTargetPosition + transporterMinimumDistance >= motorPosition)
+                        {
+                            return true;
+                        }
                     }
                     if (otherPosition + transporterMinimumDistance >= targetPosition)
                     {
                         return true;
                     }
-                    if (result.targetPosition + transporterMinimumDistance >= motorPosition)
-                    {
-                        return true;
-                    }
                     return false;
                 }