DESKTOP-Kang 5 år sedan
förälder
incheckning
7bd4741730

+ 1 - 1
Dev/OHV/OHV.Vehicle/Concept/D_MainWindow.xaml

@@ -174,7 +174,7 @@
 
                             <Button Margin="15" Width="200" Height="50"
                                     Command="{Binding EmergencyStopCommand}"
-                                    CommandParameter="Emergency">
+                                    CommandParameter="Emergency" Background="{c:Binding 'IsDryRun ? media:Brushes.LimeGreen : media:Brushes.DodgerBlue'}">
                                 <StackPanel Orientation="Horizontal">
                                     <materialDesign:PackIcon Kind="AlarmLightOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="35" Width="auto" Margin="0,0,20,0"/>
                                     <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="Emergency Stop" FontSize="15"/>

+ 17 - 4
Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs

@@ -166,7 +166,7 @@ namespace OHV.Vehicle.Concept
         public eBatteryState BatteryState
         {
             get { return this.batteryState; }
-            set { this.SetProperty( ref this.batteryState , value ); }
+            set { this.SetProperty( ref this.batteryState, value ); }
         }
 
         int currentTag;
@@ -176,6 +176,15 @@ namespace OHV.Vehicle.Concept
             set { this.SetProperty( ref this.currentTag, value ); }
         }
 
+        private bool isDryRun;
+
+        public bool IsDryRun
+        {
+            get { return isDryRun; }
+            set { SetProperty( ref this.isDryRun, value ); }
+        }
+
+
         #endregion
 
         #region Brushes
@@ -280,9 +289,11 @@ namespace OHV.Vehicle.Concept
             this.LastBuildedTime = new Helpler.AssemblyInfo().Get_BuildDateTime();
 
             GSG.NET.Quartz.QuartzUtils.Invoke( "RESOURCE_CHECK", GSG.NET.Quartz.QuartzUtils.GetExpnSecond( 1 ), QuzOnResourceUsage );
+
+            this.IsDryRun = false;
         }
 
-        private void ExecuteBatteryPopup( )
+        private void ExecuteBatteryPopup()
         {
             this.messageController.ShowBatteryPopupView();
         }
@@ -334,6 +345,8 @@ namespace OHV.Vehicle.Concept
 
         private void ExecuteEStop()
         {
+            this.IsDryRun = !this.IsDryRun;
+
             var msg = new VCSMessageEventArgs
             {
                 Kind = VCSMessageEventArgs.eVCSMessageKind.ReqEStop,
@@ -539,7 +552,7 @@ namespace OHV.Vehicle.Concept
                             if ( vehicleState == eVehicleState.Abnormal )
                                 this.IsVehicleAlarm = true;
                             else
-                                this.IsVehicleAlarm = false; 
+                                this.IsVehicleAlarm = false;
                         }
                         break;
 
@@ -570,7 +583,7 @@ namespace OHV.Vehicle.Concept
                             //    this.BatteryState = eBatteryState.Connect;
                         }
                         break;
-                        
+
                     case "BatteryChargeState":
                         {
                             var isCharge = CastTo<bool>.From<object>( args.Args );

+ 64 - 1
Dev/OHV/VehicleControlSystem/ControlLayer/Steering.cs

@@ -94,7 +94,6 @@ namespace VehicleControlSystem.ControlLayer
             return this.SteeringState;
         }
 
-        bool isExecuteSteering = false;
         readonly object lockObject = new object();
         public int ControlSteering( bool isLeft = false )
         {
@@ -170,6 +169,70 @@ namespace VehicleControlSystem.ControlLayer
             return 0;
         }
 
+        /// <summary>
+        /// Error 를 만들지 않고 동작 만 한다.
+        /// </summary>
+        /// <param name="isLeft"></param>
+        public void ControlSteeringNotResult(bool isLeft = false )
+        {
+            var sT = SwUtils.CurrentTimeMillis;
+
+            lock ( lockObject )
+            {
+                if ( isLeft ) //Left IO 가 직진 이라고 생각하자.
+                {
+                    this.iO.WriteOutputIO( "OUT_F_STEERING_CWCCW", false );
+                    this.iO.WriteOutputIO( "OUT_R_STEERING_CWCCW", true );
+                    this.SetHightVolt();
+                    if ( this.SteeringState == eSteeringState.Left )
+                    {
+                        return;
+                    }
+                }
+                else
+                {
+                    this.iO.WriteOutputIO( "OUT_F_STEERING_CWCCW", true );
+                    this.iO.WriteOutputIO( "OUT_R_STEERING_CWCCW", false );
+                    this.SetHightVolt();
+                    if ( this.SteeringState == eSteeringState.Right )
+                    {
+                        return;
+                    }
+                }
+
+                var task = Task<bool>.Run( () =>
+                {
+                    long sTime = SwUtils.CurrentTimeMillis;
+                    while ( true )
+                    {
+                        LockUtils.Wait( 5 );
+
+                        if ( SwUtils.Gt( sTime, 2 * ConstUtils.ONE_SECOND ) ) //Wait 3Sec
+                            return false;
+
+                        if ( isLeft )
+                        {
+                            if ( this.IsLeft() )
+                                break;
+                        }
+                        else
+                        {
+                            if ( this.IsRight() )
+                                break;
+                        }
+                    }
+                    return true;
+                } ).ContinueWith( t =>
+                {
+                    logger.D( $"[Steer Release Lock] - {SwUtils.Elapsed( sT )} ms" );
+
+                    LockUtils.Wait( 200 );
+                    GetSteeringState();
+                } );
+            }
+        }
+
+
         void SetHightVolt()
         {
             this.iO.WriteOutputIO( "OUT_F_STEERING_DA", true );