ys-hwang 6 éve
szülő
commit
09f9baeeed

+ 3 - 10
Dev/OHV/OHV.Common/Model/SubCmd.cs

@@ -1,4 +1,5 @@
-using System;
+using OHV.Common.Shareds;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -11,14 +12,6 @@ namespace OHV.Common.Model
     /// </summary>
     public class SubCmd
     {
-        public enum eType
-        {
-            Move,
-            Load,
-            Unload,
-            Charge,
-        }
-
         public enum eCmdType
         {
             Auto,
@@ -43,7 +36,7 @@ namespace OHV.Common.Model
         public string CmdID { get; set; }
         public string TargetID { get; set; }
 
-        public eType Type { get; set; }
+        public eSubCommandType Type { get; set; }
 
         public eCmdType CmdType { get; set; }
         public eSubCmdState State { get; set; }

+ 9 - 0
Dev/OHV/OHV.Common/Shareds/SharedEnumType.cs

@@ -130,6 +130,15 @@
 		AbortByHost,
 		AbortByAbnormal,
 	}
+
+	public enum eSubCommandType
+	{
+		Move,
+		Load,
+		Unload,
+		Charge,
+	}
+
 	#endregion
 
 	public enum eAlarmLevel

+ 32 - 11
Dev/OHV/OHV.Module.Interactivity/PopUp/OpticalReadingConfigView.xaml

@@ -57,10 +57,11 @@
             <Grid Grid.Row="0">
                 <Border BorderBrush="Gray" BorderThickness="1"/>
                 <StackPanel VerticalAlignment="Center" 
-                                HorizontalAlignment="Center">
+                                HorizontalAlignment="Left"
+                            Margin="30">
                     <Button Height="60">
                         <StackPanel>
-                            <TextBlock><Run Text=" Lazer State " FontSize="20"/></TextBlock>
+                            <TextBlock><Run Text="SafeDetect State" FontSize="20"/></TextBlock>
                         </StackPanel>
                     </Button>
 
@@ -70,14 +71,11 @@
                         </StackPanel>
                     </Button>
                 </StackPanel>
-            </Grid>
 
-            <Grid Grid.Row="1">
-                <Border BorderBrush="Gray" BorderThickness="1"/>
                 <StackPanel Orientation="Horizontal"
                                 VerticalAlignment="Center"
-                                HorizontalAlignment="Center">
-                    <StackPanel Margin="5"
+                                HorizontalAlignment="Right">
+                    <StackPanel Margin="30"
                                     VerticalAlignment="Center"
                                     HorizontalAlignment="Center">
 
@@ -94,10 +92,23 @@
                                 <TextBlock><Run Text="{Binding CurrentPattern, FallbackValue=NONE}" FontSize="25" Foreground="Orange"/></TextBlock>
                             </StackPanel>
                         </Button>
+                    </StackPanel>
+                </StackPanel>
+            </Grid>
 
-                        <!--<Button Height="60">
+            <Grid Grid.Row="1">
+                <Border BorderBrush="Gray" BorderThickness="1"/>
+                <StackPanel Orientation="Horizontal"
+                            VerticalAlignment="Center"
+                            HorizontalAlignment="Center">
+                    <StackPanel Orientation="Vertical"
+                                HorizontalAlignment="Center"
+                                VerticalAlignment="Center"
+                                Margin="5">
+
+                        <Button Height="60">
                             <StackPanel>
-                                <TextBlock><Run Text="Current Pattern" FontSize="20"/></TextBlock>
+                                <TextBlock><Run Text="Pattern Seting" FontSize="20"/></TextBlock>
                             </StackPanel>
                         </Button>
 
@@ -105,9 +116,9 @@
                                     Command="{Binding PatternResultKyein}"
                                     CommandParameter="D">
                             <StackPanel>
-                                <TextBlock><Run Text="{Binding ObstacleDrive, FallbackValue=0}" FontSize="25" Foreground="Orange"/></TextBlock>
+                                <TextBlock><Run Text="{Binding SetPattern, FallbackValue=0}" FontSize="25" Foreground="Orange"/></TextBlock>
                             </StackPanel>
-                        </Button>-->
+                        </Button>
                     </StackPanel>
                 </StackPanel>
             </Grid>
@@ -165,6 +176,16 @@
             </StackPanel>
 
             <StackPanel VerticalAlignment="Bottom">
+
+                <Button Margin="10,0,10,7" HorizontalAlignment="Stretch" Height="90" 
+                        BorderBrush="Gray" BorderThickness="2" 
+                        Command="{Binding DetectPatternSave}" CommandParameter="true">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="CalendarExport" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Save" FontSize="20" VerticalAlignment="Stretch" HorizontalAlignment="Center" />
+                    </StackPanel>
+                </Button>
+
                 <Button Margin="10,0,10,7" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2" 
                         Command="{Binding CloseDialogCommand}" CommandParameter="true">
                     <StackPanel>

+ 31 - 80
Dev/OHV/OHV.Module.Interactivity/PopUp/OpticalReadingConfigViewModel.cs

@@ -34,17 +34,17 @@ namespace OHV.Module.Interactivity.PopUp
             }
         }
 
-        private int _obstacleDrive;
-        public int ObstacleDrive
+        private int currentPattern;
+        public int CurrentPattern
         {
-            get { return this._obstacleDrive; }
-            set { this.SetProperty( ref this._obstacleDrive , value ); }
+            get { return this.currentPattern; }
+            set { this.SetProperty( ref this.currentPattern , value ); }
         }
-        private int _obstacleCurve;
-        public int ObstacleCurve
+        private int setPattern;
+        public int SetPattern
         {
-            get { return this._obstacleCurve; }
-            set { this.SetProperty( ref this._obstacleCurve , value ); }
+            get { return this.setPattern; }
+            set { this.SetProperty( ref this.setPattern , value ); }
         }
 
         string _obstacleState;
@@ -54,16 +54,6 @@ namespace OHV.Module.Interactivity.PopUp
             set { this.SetProperty( ref this._obstacleState , value ); }
         }
 
-        string currentPattern;
-        public string CurrentPattern
-        {
-            get { return this.currentPattern; }
-            set
-            {
-                this.SetProperty( ref this.currentPattern , value );
-            }
-        }
-
         public ICommand DetectPatternSave { get; set; }
         public ICommand ResultPattern { get; set; }
         public ICommand PatternResultKyein { get; set; }
@@ -106,35 +96,14 @@ namespace OHV.Module.Interactivity.PopUp
                     case ObstacleControlEventArgs.eControlKind.STATE:
                         break;
                     case ObstacleControlEventArgs.eControlKind.INFO:
-                        this.ObstacleDrive = obj.Drive;
-                        this.ObstacleCurve = obj.Curve;
                         this.ObstacleState = obj.ObstacleState;
                         break;
                     case ObstacleControlEventArgs.eControlKind.SAVE:
-                        ResponsePatternSave(obj);
                         break;
                 }
             }
         }
 
-        private void ResponsePatternSave( ObstacleControlEventArgs args)
-        {
-            var msg = string.Empty;
-            if ( args.Result.IsSuccess )
-            {
-                msg = "Save Successs";
-            }
-            else
-            {
-                //var error = args.Result.Errors.FirstOrDefault();
-                //var alarm = error.Metadata[ "Alarm" ] as Alarm;
-                //msg = alarm.Name + " " + alarm.Text;
-                msg = "Save Fail";
-            }
-
-            this.messageController.ShowNotificationView( msg );
-        }
-
         private void UICallbackCommunication( GUIMessageEventArgs obj )
         {
             // 상태변화 Response
@@ -148,15 +117,9 @@ namespace OHV.Module.Interactivity.PopUp
                             var lazer = CastTo<eObstacleState>.From<object>( obj.Args );
                             this.ChangeObstacleState( lazer );
                             break;
-                        case "ObstacleDrive":
-                            var drive = CastTo<int>.From<object>( obj.Args );
-                            this.ObstacleDrive = drive;
-                            this.CurrentPattern = " Drive ";
-                            break;
-                        case "ObstacleCurve":
-                            var curve = CastTo<int>.From<object>( obj.Args );
-                            this.ObstacleCurve = curve;
-                            this.CurrentPattern = " Curve ";
+                        case "ObstaclePattern":
+                            var current = CastTo<int>.From<object>( obj.Args );
+                            this.CurrentPattern = current;
                             break;
                         default:
                             break;
@@ -166,12 +129,7 @@ namespace OHV.Module.Interactivity.PopUp
 
             if ( obj.Kind == GUIMessageEventArgs.eGUIMessageKind.RspObstaclePatternNo ) 
             {
-                if ( Convert.ToInt32( obj.MessageText ) <= 0 )
-                    this.CurrentPattern = "Drive";
-                else
-                    this.CurrentPattern = "Curve";
-
-                //this.ObstacleDrive = Convert.ToInt32( obj.MessageText );
+                this.CurrentPattern = Convert.ToInt32( obj.MessageText );
             }
         }
 
@@ -191,14 +149,14 @@ namespace OHV.Module.Interactivity.PopUp
         {
             var numpad = new CalcuratorView();
 
-            var result =  numpad.ShowDialog( this.ObstacleDrive );
-            this.ObstacleCurve = (int)result;
+            var result =  numpad.ShowDialog( this.CurrentPattern );
+            this.SetPattern = (int)result;
 
-            var msg = new VCSMessageEventArgs();
-            msg.Kind = VCSMessageEventArgs.eVCSMessageKind.ReqObstaclePatternChg;
-            msg.MessageText = this.ObstacleCurve.ToString();
+            //var msg = new VCSMessageEventArgs();
+            //msg.Kind = VCSMessageEventArgs.eVCSMessageKind.ReqObstaclePatternChg;
+            //msg.MessageText = this.ObstacleCurve.ToString();
 
-            this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
+            //this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
 
             //if (obj.ToString().Equals("D"))
             //{
@@ -212,31 +170,25 @@ namespace OHV.Module.Interactivity.PopUp
             //}
         }
 
-        private void ExecuteResultPattern(object _obj)
-        {
-        }
-
-        private byte ConvertToByte( BitArray _bitArray)
-        {
-            byte[] bytes = new byte[ 1 ];
-            _bitArray.CopyTo( bytes , 0 );
-
-            return bytes[ 0 ];
-        }
-
         private void ExecuteDetectPatternSave( )
         {
             this.messageController.ShowConfirmationPopupView( "Pattern Save ?" , r =>
             {
                 if ( r.Result == ButtonResult.OK )
                 {
-                    var msg = new ObstacleControlEventArgs
-                    {
-                        Curve = this.ObstacleCurve ,
-                        Drive = this.ObstacleDrive,
-                        ControlKind = ObstacleControlEventArgs.eControlKind.SAVE
-                    };
-                    this.ObstaclePublishEvent( msg );
+                    //var msg = new ObstacleControlEventArgs
+                    //{
+                    //    Curve = this.ObstacleCurve ,
+                    //    Drive = this.ObstacleDrive,
+                    //    ControlKind = ObstacleControlEventArgs.eControlKind.SAVE
+                    //};
+                    //this.ObstaclePublishEvent( msg );
+
+                    var msg = new VCSMessageEventArgs();
+                    msg.Kind = VCSMessageEventArgs.eVCSMessageKind.ReqObstaclePatternChg;
+                    msg.MessageText = this.SetPattern.ToString();
+
+                    this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
                 }
             } );
         }
@@ -263,7 +215,6 @@ namespace OHV.Module.Interactivity.PopUp
         {
             this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( new VCSMessageEventArgs() { Kind = VCSMessageEventArgs.eVCSMessageKind.ReqObstaclePatternNo } );
             this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Publish( new ObstacleControlEventArgs { EventDir = ObstacleControlEventArgs.eEventDir.ToBack , ControlKind = ObstacleControlEventArgs.eControlKind.INFO } );
-            //this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Publish( new ObstacleControlEventArgs { EventDir = ObstacleControlEventArgs.eEventDir.ToBack , ControlKind = ObstacleControlEventArgs.eControlKind.CURVE } );
         }
 
         private void CloseDialog( string parameter )

+ 12 - 5
Dev/OHV/OHV.Module.ListViews/Views/SubCommandListView.xaml

@@ -4,6 +4,8 @@
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
              xmlns:local="clr-namespace:OHV.Module.ListViews.Views"
+             xmlns:Shared="clr-namespace:OHV.Common.Shareds;assembly=OHV.Common"
+             xmlns:System="clr-namespace:System;assembly=mscorlib"
              mc:Ignorable="d" 
              xmlns:prism="http://prismlibrary.com/"
              prism:ViewModelLocator.AutoWireViewModel="True"
@@ -12,13 +14,13 @@
 
     <UserControl.Resources>
         <ResourceDictionary>
-            <!--<ObjectDataProvider x:Key="CommandType" MethodName="GetValues"
+            <ObjectDataProvider x:Key="SubCommandType" MethodName="GetValues"
                             ObjectType="{x:Type System:Enum}">
                 <ObjectDataProvider.MethodParameters>
-                    <x:Type TypeName="Shared:eCommandType"/>
+                    <x:Type TypeName="Shared:eSubCommandType"/>
                 </ObjectDataProvider.MethodParameters>
             </ObjectDataProvider>
-            <ObjectDataProvider x:Key="CommandState" MethodName="GetValues"
+            <!--<ObjectDataProvider x:Key="CommandState" MethodName="GetValues"
                             ObjectType="{x:Type System:Enum}">
                 <ObjectDataProvider.MethodParameters>
                     <x:Type TypeName="Shared:eCommandState"/>
@@ -101,7 +103,9 @@
                             <ColumnDefinition Width="*"/>
                         </Grid.ColumnDefinitions>
                         <TextBlock Text="ID" Style="{DynamicResource MaterialDesignTextBlock}" VerticalAlignment="Center"/>
-                        <TextBlock Grid.Column="1" Style="{DynamicResource MaterialDesignTextBlock}" VerticalAlignment="Center" HorizontalAlignment="Center" Text="{Binding SelectedSubCmdID, Mode=OneWay}"/>
+                        <!--<TextBlock Grid.Column="1" Style="{DynamicResource MaterialDesignTextBlock}" VerticalAlignment="Center" HorizontalAlignment="Center" Text="{Binding SelectedSubCmdID, Mode=OneWay}"/>-->
+                        <ComboBox ItemsSource="{Binding TargetIDList}" SelectedItem="{Binding TargetID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  Grid.Column="1">
+                        </ComboBox>
                     </Grid>
 
                     <Grid Margin="0,10,0,0" Grid.Row="1" Height="25">
@@ -110,12 +114,15 @@
                             <ColumnDefinition Width="*"/>
                         </Grid.ColumnDefinitions>
                         <TextBlock Text="Type" Style="{DynamicResource MaterialDesignTextBlock}" VerticalAlignment="Center"/>
-                        <TextBlock Grid.Column="1" Style="{DynamicResource MaterialDesignTextBlock}" VerticalAlignment="Center" HorizontalAlignment="Center" Text="{Binding SelectedSubCmdType, Mode=OneWay}"/>
+                        <ComboBox ItemsSource="{Binding Source={StaticResource SubCommandType}}" SelectedItem="{Binding SelectedCommandType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  Grid.Column="1">
+                        </ComboBox>
+                        <!--<TextBlock Grid.Column="1" Style="{DynamicResource MaterialDesignTextBlock}" VerticalAlignment="Center" HorizontalAlignment="Center" Text="{Binding SelectedSubCmdType, Mode=OneWay}"/>-->
                     </Grid>
 
                 </Grid>
 
                 <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Grid.Row="2" VerticalAlignment="Top" Margin="0,15,0,0">
+                    <Button Height="45" Content="Add" Command="{Binding AddCommand}" Width="100" Margin="0,0,10,0"/>
                     <Button Height="45" Content="Delete" Command="{Binding DeleteCommand}" Width="100"/>
                 </StackPanel>
             </Grid>

+ 50 - 0
Dev/OHV/OHV.Module.ListViews/Views/SubCommandListViewModel.cs

@@ -8,6 +8,7 @@ using System.Windows;
 using System.Windows.Input;
 using OHV.Common.Events;
 using OHV.Common.Model;
+using OHV.Common.Shareds;
 using OHV.SqliteDAL;
 using Prism.Commands;
 using Prism.Events;
@@ -24,9 +25,32 @@ namespace OHV.Module.ListViews.Views
             get { return this._subcmdList; }
             set { SetProperty(ref this._subcmdList, value); }
         }
+
+        private eSubCommandType selectedCommandType;
+        public eSubCommandType SelectedCommandType
+        {
+            get { return selectedCommandType; }
+            set { SetProperty( ref this.selectedCommandType , value ); }
+        }
+
+        private List<string> targetIDList;
+        public List<string> TargetIDList
+        {
+            get { return targetIDList; }
+            set { SetProperty( ref this.targetIDList , value ); }
+        }
+
+        private string targetID;
+        public string TargetID
+        {
+            get { return targetID; }
+            set { SetProperty( ref this.targetID , value ); }
+        }
+
         #endregion
 
         public ICommand DeleteCommand { get; set; }
+        public ICommand AddCommand { get; set; }
 
         IEventAggregator eventAggregator;
         SqliteManager sql;
@@ -40,6 +64,10 @@ namespace OHV.Module.ListViews.Views
             this.SubCmdList = new ObservableCollection<SubCmd>(sql.SubCmdDAL.All);
 
             this.DeleteCommand = new DelegateCommand(ExecuteDeleteCommand);
+            this.AddCommand = new DelegateCommand( ExecuteAddCommand );
+
+            this.TargetIDList = sql.RouteDal.All.Select( x => x.Name ).ToList();
+            this.TargetIDList.Add( "None" );
 
             this.eventAggregator.GetEvent<VehicleSubCmdListChanged>().Unsubscribe(UICallbackCommunication);
             this.eventAggregator.GetEvent<VehicleSubCmdListChanged>().Subscribe(UICallbackCommunication);
@@ -55,6 +83,28 @@ namespace OHV.Module.ListViews.Views
             this.RefreshLIst();
         }
 
+        private void ExecuteAddCommand( )
+        {
+            //var route = sql.RouteDal.GetRoute( TargetID );
+            //if ( route == null )
+            //    messageController.ShowNotificationView( "Not Found TargetID" );
+            //else
+            //{
+            //    SubCmd cmd = new SubCmd() { TargetID = TargetID , Type = SelectedCommandType };
+
+            //    var msg = new VCSMessageEventArgs();
+            //    msg.Kind = VCSMessageEventArgs.eVCSMessageKind.ReqAddCommand;
+            //    msg.Command = cmd;
+
+            //    this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
+            //}
+
+            //UI 초기화
+            this.TargetID = "None";
+            this.SelectedCommandType = eSubCommandType.Move;
+
+        }
+
         private void ExecuteDeleteCommand()
         {
             List<SubCmd> deleteList = new List<SubCmd>();

+ 1 - 0
Dev/OHV/OHV.SqliteDAL/OHVDbInitializer.cs

@@ -187,6 +187,7 @@ namespace OHV.SqliteDAL
                 new Alarm { AlarmId = 30, Kind = eAlarmKind.Axis, Name = "System", Text="CP Off 24V",Solution="", Description="", Level = eAlarmLevel.Falut, },
                 new Alarm { AlarmId = 31, Kind = eAlarmKind.Axis, Name = "System", Text="CP Off Safety",Solution="", Description="", Level = eAlarmLevel.Falut, },
                 new Alarm { AlarmId = 32, Kind = eAlarmKind.Axis, Name = "BMS", Text="Battery Manage System Disconnected",Solution="", Description="", Level = eAlarmLevel.Falut, },
+                new Alarm { AlarmId = 33, Kind = eAlarmKind.Axis, Name = "Steering", Text="Steering State Abnormal",Solution="", Description="", Level = eAlarmLevel.Falut, },
             } );
 
             //context.Set<HisAlarm>().Add(new HisAlarm { AlarmId = 1, OccurTime = DateTime.Now.AddDays(-10) });

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

@@ -25,7 +25,6 @@ namespace OHV.Vehicle.Concept
                 this.Loaded += MainWindow_Loaded;
                 this.Closing += MainWindow_Closing;
             }
-
         }
 
         private void GridMain_MouseLeftButtonDown( object sender , MouseButtonEventArgs e )

BIN
Dev/OHV/OHV.Vehicle/Config/IO.xlsx


+ 1 - 0
Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/Advantech/Advantech.cs

@@ -37,6 +37,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
             set
             {
                 if ( this.isConnected == value ) return;
+                this.isConnected = value;
                 if ( value )
                     this.manager._OnConnected();
                 else

+ 82 - 69
Dev/OHV/VehicleControlSystem/ControlLayer/Steering.cs

@@ -24,10 +24,10 @@ namespace VehicleControlSystem.ControlLayer
         public eSteeringState SteeringState
         {
             get { return steeringState; }
-            set { SetField(ref this.steeringState, value); }
+            set { SetField( ref this.steeringState , value ); }
         }
 
-        public Steering(IIO io, SqliteManager sql, IEventAggregator ea)
+        public Steering( IIO io , SqliteManager sql , IEventAggregator ea )
         {
             this.iO = io as EzIO;
             this.sql = sql;
@@ -35,113 +35,126 @@ namespace VehicleControlSystem.ControlLayer
             this.iO.OnChangedIO += IO_OnChangedIO;
         }
 
-        private void IO_OnChangedIO(BitBlock bit)
+        private void IO_OnChangedIO( BitBlock bit )
         {
-            if (bit.Tag.Equals("IN_F_STEERING_DETECT_LEFT") || bit.Tag.Equals("IN_F_STEERING_DETECT_RIGHT"))
+            if ( bit.Tag.Equals( "IN_F_STEERING_DETECT_LEFT" ) || bit.Tag.Equals( "IN_F_STEERING_DETECT_RIGHT" ) )
                 this.GetSteeringState();
-            if (bit.Tag.Equals("IN_R_STEERING_DETECT_LEFT") || bit.Tag.Equals("IN_R_STEERING_DETECT_RIGHT"))
+            if ( bit.Tag.Equals( "IN_R_STEERING_DETECT_LEFT" ) || bit.Tag.Equals( "IN_R_STEERING_DETECT_RIGHT" ) )
                 this.GetSteeringState();
         }
 
-        void GetSteeringState()
+        void GetSteeringState( )
         {
             eSteeringState frontState = eSteeringState.None;
-            if (this.IsFrontLeft() && this.IsFrontRight())
+            if ( this.IsFrontLeft() && this.IsFrontRight() )
                 frontState = eSteeringState.None;
-            if (!this.IsFrontLeft() && !this.IsFrontRight())
+            if ( !this.IsFrontLeft() && !this.IsFrontRight() )
                 frontState = eSteeringState.None;
 
-            if (this.IsFrontLeft() && !this.IsFrontRight())
+            if ( this.IsFrontLeft() && !this.IsFrontRight() )
                 frontState = eSteeringState.Left;
-            if (!this.IsFrontLeft() && this.IsFrontRight())
+            if ( !this.IsFrontLeft() && this.IsFrontRight() )
                 frontState = eSteeringState.Right;
 
             eSteeringState rearState = eSteeringState.None;
-            if (this.IsRearLeft() && this.IsRearRight())
+            if ( this.IsRearLeft() && this.IsRearRight() )
                 rearState = eSteeringState.None;
-            if (!this.IsRearLeft() && !this.IsRearRight())
+            if ( !this.IsRearLeft() && !this.IsRearRight() )
                 rearState = eSteeringState.None;
 
-            if (this.IsRearLeft() && !this.IsRearRight())
+            if ( this.IsRearLeft() && !this.IsRearRight() )
                 rearState = eSteeringState.Left;
-            if (!this.IsRearLeft() && this.IsRearRight())
+            if ( !this.IsRearLeft() && this.IsRearRight() )
                 rearState = eSteeringState.Right;
 
-            if (frontState == eSteeringState.Left && rearState == eSteeringState.Left)
+            if ( frontState == eSteeringState.Left && rearState == eSteeringState.Left )
                 this.SteeringState = eSteeringState.Left;
-            else if (frontState == eSteeringState.Right && rearState == eSteeringState.Right)
+            else if ( frontState == eSteeringState.Right && rearState == eSteeringState.Right )
                 this.SteeringState = eSteeringState.Right;
             else
                 this.SteeringState = eSteeringState.None;
         }
 
         object lockObj = new object();
-        public int ControlSteering(bool isLeft = false)
+        bool isExecuteSteering = false;
+        public int ControlSteering( bool isLeft = false )
         {
-            lock (lockObj)
+            if ( this.isExecuteSteering )
+                return 0;
+
+            this.isExecuteSteering = true;
+
+            if ( isLeft ) //Left IO 가 직진 이라고 생각하자.
             {
-                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 )
                 {
-                    this.iO.WriteOutputIO("OUT_F_STEERING_CWCCW", false);
-                    this.iO.WriteOutputIO("OUT_R_STEERING_CWCCW", false);
-                    this.SetHightVolt();
+                    this.isExecuteSteering = false;
+                    return 0;
                 }
-                else
+            }
+            else
+            {
+                this.iO.WriteOutputIO( "OUT_F_STEERING_CWCCW" , true );
+                this.iO.WriteOutputIO( "OUT_R_STEERING_CWCCW" , false );
+                this.SetHightVolt();
+                if ( this.SteeringState == eSteeringState.Right )
                 {
-                    this.iO.WriteOutputIO("OUT_F_STEERING_CWCCW", true);
-                    this.iO.WriteOutputIO("OUT_R_STEERING_CWCCW", true);
-                    this.SetHightVolt();
+                    this.isExecuteSteering = false;
+                    return 0;
                 }
-
-                var task = Task<bool>.Run(() =>
-                {
-                    long sTime = SwUtils.CurrentTimeMillis;
-                    while (true)
-                    {
-                        if (SwUtils.Gt(sTime, 5 * ConstUtils.ONE_SECOND)) //Wait 20Sec
-                            return false;
-
-                        if (isLeft)
-                        {
-                            if (this.IsFrontLeft() && this.IsRearLeft())
-                                break;
-                        }
-                        else
-                        {
-                            if (this.IsFrontRight() && this.IsRearRight())
-                                break;
-                        }
-                    }
-                    return true;
-                }).ContinueWith(t =>
-                {
-                    if (!t.Result)
-                    {
-                        this.OnSteeringError?.BeginInvoke(this, 9999, null, null);
-                    }
-                    else
-                        this.OnSteeringError?.BeginInvoke(this, 0, null, null);
-                });
-
             }
 
+            var task = Task<bool>.Run( ( ) =>
+             {
+                 long sTime = SwUtils.CurrentTimeMillis;
+                 while ( true )
+                 {
+                     if ( SwUtils.Gt( sTime , 5 * ConstUtils.ONE_SECOND ) ) //Wait 20Sec
+                         return false;
+
+                     if ( isLeft )
+                     {
+                         if ( this.IsFrontLeft() && this.IsRearLeft() )
+                             break;
+                     }
+                     else
+                     {
+                         if ( this.IsFrontRight() && this.IsRearRight() )
+                             break;
+                     }
+                 }
+                 return true;
+             } ).ContinueWith( t =>
+                  {
+                      if ( !t.Result )
+                          this.OnSteeringError?.BeginInvoke( this , 33 , null , null );
+                      else
+                          this.OnSteeringError?.BeginInvoke( this , 0 , null , null );
+
+                      GetSteeringState();
+                      this.isExecuteSteering = false;
+                  } );
+
             return 0;
         }
-        
-        void SetHightVolt()
+
+        void SetHightVolt( )
         {
-            this.iO.WriteOutputIO("OUT_F_STEERING_DA", true);
-            this.iO.WriteOutputIO("OUT_R_STEERING_DA", true);
-            this.iO.WriteOutputIO("OUT_F_STEERING_DA", false, 500);
-            this.iO.WriteOutputIO("OUT_R_STEERING_DA", false, 500);
+            this.iO.WriteOutputIO( "OUT_F_STEERING_DA" , true );
+            this.iO.WriteOutputIO( "OUT_R_STEERING_DA" , true );
+            this.iO.WriteOutputIO( "OUT_F_STEERING_DA" , false , 500 );
+            this.iO.WriteOutputIO( "OUT_R_STEERING_DA" , false , 500 );
         }
 
-        bool IsFrontLeft() => this.iO.IsOn("IN_F_STEERING_DETECT_LEFT");
-        bool IsFrontRight() => this.iO.IsOn("IN_F_STEERING_DETECT_RIGHT");
-        bool IsRearLeft() => this.iO.IsOn("IN_R_STEERING_DETECT_LEFT");
-        bool IsRearRight() => this.iO.IsOn("IN_R_STEERING_DETECT_RIGHT");
+        bool IsFrontLeft( ) => this.iO.IsOn( "IN_F_STEERING_DETECT_LEFT" );
+        bool IsFrontRight( ) => this.iO.IsOn( "IN_F_STEERING_DETECT_RIGHT" );
+        bool IsRearLeft( ) => this.iO.IsOn( "IN_R_STEERING_DETECT_LEFT" );
+        bool IsRearRight( ) => this.iO.IsOn( "IN_R_STEERING_DETECT_RIGHT" );
 
-        public bool IsLeft() => this.IsFrontLeft() && this.IsRearLeft();
-        public bool IsRight() => this.IsFrontRight() && this.IsRearRight();
+        public bool IsLeft( ) => this.IsFrontLeft() && this.IsRearLeft();
+        public bool IsRight( ) => this.IsFrontRight() && this.IsRearRight();
     }
 }

+ 18 - 7
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs

@@ -188,7 +188,17 @@ namespace VehicleControlSystem.ControlLayer
         public bool IsMoving { get; set; }
 
         double batteryVoltage;
-        public double BatteryVoltage { get { return this.batteryVoltage; } set { this.SetField( ref this.batteryVoltage , value ); } }
+        public double BatteryVoltage 
+        { 
+            get 
+            { 
+                return this.batteryVoltage; 
+            } 
+            set 
+            {
+                this.SetField( ref this.batteryVoltage , value ); 
+            } 
+        }
 
         double batteryCurrent;
         public double BatteryCurrent { get { return this.batteryCurrent; } set{this.SetField(ref this.batteryCurrent, value); } }
@@ -682,22 +692,22 @@ namespace VehicleControlSystem.ControlLayer
 
                     switch ( subCmd.Type )
                     {
-                        case SubCmd.eType.Move:
+                        case eSubCommandType.Move:
                             this.CurrentSubCommand = subCmd;
                             this.Move( subCmd );
                             break;
 
-                        case SubCmd.eType.Load:
+                        case eSubCommandType.Load:
                             this.CurrentSubCommand = subCmd;
                             this.LoadCarrier( subCmd );
                             break;
 
-                        case SubCmd.eType.Unload:
+                        case eSubCommandType.Unload:
                             this.CurrentSubCommand = subCmd;
                             this.UnloadCarrier( subCmd );
                             break;
 
-                        case SubCmd.eType.Charge:
+                        case eSubCommandType.Charge:
                             this.CurrentSubCommand = subCmd;
                             this.BatteryCharge( subCmd );
                             break;
@@ -1182,6 +1192,7 @@ namespace VehicleControlSystem.ControlLayer
                 if ( !IsDetectedLoadStart() && !IsDetectedCenter() )
                     break;
             }
+            Thread.Sleep( 2000 );
             OnOffConveyor( false );
             logger.D( "[Manual Unload] - Conveyor Off" );
 
@@ -1489,7 +1500,7 @@ namespace VehicleControlSystem.ControlLayer
                     this.BatteryVoltage = (double)obj.Value * obj.Scale;
                     break;
                 case eDataKind.Current:
-                    this.BatteryCurrent = ( double )obj.Value * obj.Scale;
+                    this.BatteryCurrent = (double)obj.Value * obj.Scale;
                     break;
                 case eDataKind.BatteryState:
                     if ( obj.Value == null )
@@ -1686,7 +1697,7 @@ namespace VehicleControlSystem.ControlLayer
             if ( e != 0 )
             {
                 logger.E( $"[Steering] - Control Error {e}" );
-                this.autoManager.ProcessAlarm( e );
+                this.OccurVehicleAlarm( e ) ;
             }
             else
             {

+ 10 - 9
Dev/OHV/VehicleControlSystem/Managers/Scheduler.cs

@@ -10,6 +10,7 @@ using GSG.NET.Logging;
 using GSG.NET.Utils;
 using OHV.Common.Events;
 using OHV.Common.Model;
+using OHV.Common.Shareds;
 using OHV.SqliteDAL;
 using Prism.Events;
 
@@ -161,7 +162,7 @@ namespace VehicleControlSystem.Managers
                             case OHV.Common.Shareds.eCommandType.MoveNLoad:
                             case OHV.Common.Shareds.eCommandType.MoveNUnload:
                             case OHV.Common.Shareds.eCommandType.Charging:
-                                CreateSubCommand( cmd, SubCmd.eType.Move );
+                                CreateSubCommand( cmd, eSubCommandType.Move );
                                 break;
                             default:
                                 break;
@@ -183,19 +184,19 @@ namespace VehicleControlSystem.Managers
 
                             if ( cmd.Type == OHV.Common.Shareds.eCommandType.MoveNLoad )
                             {
-                                if ( this.CreateSubCommand( cmd, SubCmd.eType.Load ) )
+                                if ( this.CreateSubCommand( cmd, eSubCommandType.Load ) )
                                     cmd.IsSecondCommanded = true;
                                 break;
                             }
                             else if ( cmd.Type == OHV.Common.Shareds.eCommandType.MoveNUnload )
                             {
-                                if ( this.CreateSubCommand( cmd, SubCmd.eType.Unload ) )
+                                if ( this.CreateSubCommand( cmd, eSubCommandType.Unload ) )
                                     cmd.IsSecondCommanded = true;
                                 break;
                             }
                             else if ( cmd.Type == OHV.Common.Shareds.eCommandType.Charging )
                             {
-                                if ( this.CreateSubCommand( cmd, SubCmd.eType.Charge ) )
+                                if ( this.CreateSubCommand( cmd, eSubCommandType.Charge ) )
                                     cmd.IsSecondCommanded = true;
                                 break;
                             }
@@ -221,18 +222,18 @@ namespace VehicleControlSystem.Managers
             }
         }
 
-        private bool CreateSubCommand( Command cmd, SubCmd.eType type )
+        private bool CreateSubCommand( Command cmd, eSubCommandType type )
         {
             //명령을 만들기 전에 Vehicle 의 상태를 확인하여 만들자.
             switch ( type )
             {
-                case SubCmd.eType.Move:
+                case eSubCommandType.Move:
                     break;
-                case SubCmd.eType.Load:
+                case eSubCommandType.Load:
                     break;
-                case SubCmd.eType.Unload:
+                case eSubCommandType.Unload:
                     break;
-                case SubCmd.eType.Charge:
+                case eSubCommandType.Charge:
                     break;
                 default:
                     break;

+ 4 - 1
Dev/OHV/VehicleControlSystem/VCSystem.cs

@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using System.Text;
+using System.Threading;
 using System.Threading.Tasks;
 using GSG.NET;
 using GSG.NET.Extensions;
@@ -254,7 +255,9 @@ namespace VehicleControlSystem
             if ( !this.IO.IsOn( "IN_MC_ON" ) )
             {
                 this.IO.WriteOutputIO( "OUT_SAFETY_RESET", true );
-                this.IO.WriteOutputIO( "OUT_SAFETY_RESET", false, 3000 );
+                Thread.Sleep( 2000 );
+                this.IO.WriteOutputIO( "OUT_SAFETY_RESET" , false );
+                Thread.Sleep( 1000 );
             }
         }