Bladeren bron

Scheduler, AutoManager 수정.

SK.Kang 6 jaren geleden
bovenliggende
commit
08b5959438

+ 12 - 5
Dev/OHV/OHV.Common/Events/MessageEventArgs.cs

@@ -15,9 +15,13 @@ namespace OHV.Common.Events
         /// </summary>
         public enum eGUIMessageKind
         {
+            ModelPropertyChange, //각 Model 마다 사용 할 예정.
+
             RspIOObject,
             RspIOMapList,
             RspCommandList,
+            RspAutoModeChange,
+            RspManualmodeChange,
         }
 
         public eGUIMessageKind Kind { get; set; }
@@ -26,12 +30,13 @@ namespace OHV.Common.Events
         public Command Command { get; set; }
         public Dictionary<string, object> Dic { get; set; }
         public object Args { get; set; }
+        public FluentResults.Result Result { get; set; }
 
-        public GUIMessageEventArgs(eGUIMessageKind kind, object args)
-        {
-            this.Kind = kind;
-            this.Args = args;
-        }
+        //public GUIMessageEventArgs(eGUIMessageKind kind, object args)
+        //{
+        //    this.Kind = kind;
+        //    this.Args = args;
+        //}
     }
 
     /// <summary>
@@ -44,6 +49,8 @@ namespace OHV.Common.Events
             ReqIOObject,
             ReqIOMapList,
             ReqCommandList,
+            ReqAutoModeChange,
+            ReqManualModeChange,
         }
 
         public eVCSMessageKind Kind { get; set; }

+ 1 - 1
Dev/OHV/OHV.Common/Model/SubCmd.cs

@@ -16,7 +16,7 @@ namespace OHV.Common.Model
             Move,
             Load,
             Unload,
-            Chaging,
+            Charge,
         }
 
         public enum eCmdType

+ 2 - 1
Dev/OHV/OHV.Common/Shareds/SharedEnumType.cs

@@ -58,6 +58,7 @@
 		StartRun,
 		Run,
 		Stop,
+		WaitStop,
 	}
 
     #endregion
@@ -74,9 +75,9 @@
 	public enum eCommandState
 	{
 		Queued,
-		Assign,
 		Processing,
 		Complete,
+		Paused,
 	}
 
 	public enum eCommandResult

+ 1 - 1
Dev/OHV/OHV.Module.ListViews/Views/SubCommandListView.xaml

@@ -46,7 +46,7 @@
                 <ColumnDefinition Width="2*"/>
                 <ColumnDefinition Width="*"/>
             </Grid.ColumnDefinitions>
-            <DataGrid ItemsSource="{Binding CommandList}" CanUserSortColumns="True" CanUserAddRows="False" AutoGenerateColumns="False" materialDesign:DataGridAssist.CellPadding="13 8 8 8" 
+            <DataGrid ItemsSource="{Binding SubCmdList}" CanUserSortColumns="True" CanUserAddRows="False" AutoGenerateColumns="False" materialDesign:DataGridAssist.CellPadding="13 8 8 8" 
                                   materialDesign:DataGridAssist.ColumnHeaderPadding="8" Background="{x:Null}" Foreground="White" IsReadOnly="True" >
 
                 <DataGrid.Resources>

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

@@ -227,14 +227,14 @@
                 <DockPanel Grid.Row="4">
                     <Border BorderBrush="#FF00FFD3" BorderThickness="2" Margin="5">
                         <StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
-                            <Button Margin="15" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="60" Width="250">
+                            <Button Margin="15" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="60" Width="250" Command="{Binding StartCommand}">
                                 <StackPanel Orientation="Horizontal">
                                     <materialDesign:PackIcon Kind="GooglePlay" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="40" Width="auto" Margin="0,0,20,0" Background="DarkGreen"/>
                                     <TextBlock Text="START" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="30"/>
                                 </StackPanel>
                             </Button>
 
-                            <Button Margin="15" HorizontalAlignment="Stretch" Height="60">
+                            <Button Margin="15" HorizontalAlignment="Stretch" Height="60" Command="{Binding StopCommand}">
                                 <StackPanel Orientation="Horizontal">
                                     <materialDesign:PackIcon Kind="Stop" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="40" Width="auto" Margin="0,0,32,0" Background="Orange"/>
                                     <TextBlock Text="STOP" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="30"/>

+ 4 - 14
Dev/OHV/OHV.Vehicle/Concept/D_MainWindow.xaml.cs

@@ -1,17 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using System.ComponentModel;
 using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
 using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Shapes;
 using GSG.NET.WPF.Extensions;
 
 namespace OHV.Vehicle.Concept
@@ -37,8 +26,6 @@ namespace OHV.Vehicle.Concept
                 this.Closing += MainWindow_Closing;
             }
 
-            App.splashScreen.AddMessage( "Done !" );
-            App.splashScreen.LoadComplete();
         }
 
         private void GridMain_MouseLeftButtonDown( object sender , MouseButtonEventArgs e )
@@ -64,6 +51,9 @@ namespace OHV.Vehicle.Concept
         {
             //throw new NotImplementedException();
             WindowExternal.MaximizeToFirstMonitor(this);
+
+            App.splashScreen.AddMessage("Done !");
+            App.splashScreen.LoadComplete();
         }
 
         private void Button_Click(object sender, RoutedEventArgs e)

+ 44 - 0
Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs

@@ -127,9 +127,13 @@ namespace OHV.Vehicle.Concept
         VCSystem VCSystem = null;
         MessageController messageController;
 
+        VCSMessagePubSubEvent vcsMessagePublisher;
+
         public ICommand TestCommand { get; set; }
         public ICommand NavigateCommand { get; set; }
         public ICommand SystemOffCommand { get; set; }
+        public ICommand StartCommand { get; set; }
+        public ICommand StopCommand { get; set; }
 
         IRegionManager regionManager;
         public Common.Events.HostConnectedEventArgs.eConnectedState State { get; set; }
@@ -150,6 +154,7 @@ namespace OHV.Vehicle.Concept
             this.eventAggregator = ea;
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe( UICallbackCommunication , ThreadOption.UIThread );
             this.eventAggregator.GetEvent<HostConnectedPubSubEvent>().Subscribe( OcsConnectCallBack , ThreadOption.UIThread , false );
+            vcsMessagePublisher = this.eventAggregator.GetEvent<VCSMessagePubSubEvent>();
 
             this.VCSystem = cSystem;
             this.messageController = messageController;
@@ -158,6 +163,8 @@ namespace OHV.Vehicle.Concept
             this.NavigateCommand = new DelegateCommand<object>( this.Navigate );
             this.SystemOffCommand = new DelegateCommand( ExecuteSystemOffCommand );
             this.ChangeLanguage = new DelegateCommand(Execte_ChangeLanguage);
+            this.StartCommand = new DelegateCommand(ExecuteStartCommand);
+            this.StopCommand = new DelegateCommand(ExecuteStopCommand);
 
             DispatcherTimer dateTimer = new DispatcherTimer();
             dateTimer.Tick += ( object sender , EventArgs e ) =>
@@ -185,6 +192,26 @@ namespace OHV.Vehicle.Concept
             this.LastBuildedTime = new Helpler.AssemblyInfo().Get_BuildDateTime();
         }
 
+        private void ExecuteStopCommand()
+        {
+            var msg = new VCSMessageEventArgs
+            {
+                Kind = VCSMessageEventArgs.eVCSMessageKind.ReqAutoModeChange,
+            };
+
+            vcsMessagePublisher.Publish(msg);
+        }
+
+        private void ExecuteStartCommand()
+        {
+            var msg = new VCSMessageEventArgs
+            {
+                Kind = VCSMessageEventArgs.eVCSMessageKind.ReqAutoModeChange,
+            };
+
+            vcsMessagePublisher.Publish(msg);
+        }
+
         private void OcsConnectCallBack( HostConnectedEventArgs obj )
         {
             this.State = obj.State;
@@ -218,6 +245,23 @@ namespace OHV.Vehicle.Concept
 
         private void UICallbackCommunication( GUIMessageEventArgs obj )
         {
+            switch (obj.Kind)
+            {
+                case GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange:
+                    break;
+                case GUIMessageEventArgs.eGUIMessageKind.RspIOObject:
+                    break;
+                case GUIMessageEventArgs.eGUIMessageKind.RspIOMapList:
+                    break;
+                case GUIMessageEventArgs.eGUIMessageKind.RspCommandList:
+                    break;
+                case GUIMessageEventArgs.eGUIMessageKind.RspAutoModeChange:
+                    break;
+                case GUIMessageEventArgs.eGUIMessageKind.RspManualmodeChange:
+                    break;
+                default:
+                    break;
+            }
         }
 
         private void ExecuteTextCommand( )

+ 3 - 1
Dev/OHV/OHV.Vehicle/Config/AlarmDefind..csv

@@ -16,4 +16,6 @@
 16,Conveyor,Inverter Error,,,1,0
 17,PIO,Port PIO Ready Off,,,1,0
 18,PIO,Port PIO Time Out,,,1,0
-19,,,,,,
+19,PIO,Port PIO InterLock On,,,1,0
+20,Conveyor,Loading Position Wrong,,,1,0
+21,Conveyor,Loading Position Wrong,,,1,0

+ 1 - 2
Dev/OHV/VehicleControlSystem/ControlLayer/Clamp.cs

@@ -14,7 +14,7 @@ using VehicleControlSystem.ControlLayer.Lib.EziPlusE;
 
 namespace VehicleControlSystem.ControlLayer
 {
-    public class Clamp
+    public class Clamp : ControlObjectBase
     {
         SqliteManager sql = null;
         List<EzAxis> axes = new List<EzAxis>();
@@ -79,7 +79,6 @@ namespace VehicleControlSystem.ControlLayer
             }
         }
 
-
         void PublishEvent(AxisControlEventArgs args)
         {
             this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish(args);

+ 51 - 0
Dev/OHV/VehicleControlSystem/ControlLayer/ControlObjectBase.cs

@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Runtime.CompilerServices;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace VehicleControlSystem.ControlLayer
+{
+    public abstract class ControlObjectBase : INotifyPropertyChanged
+    {
+        public event PropertyChangedEventHandler PropertyChanged;
+
+        protected void OnPropertyChanged(string name)
+        {
+            PropertyChangedEventHandler handler = PropertyChanged;
+            if (handler != null)
+            {
+                handler?.Invoke(this, new PropertyChangedEventArgs(name));
+            }
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="field">필드 변수</param>
+        /// <param name="newValue"></param>
+        /// <param name="isComparer">이전 값과 비교를 할지 Default = true</param>
+        /// <param name="propertyName"></param>
+        /// <returns></returns>
+        protected bool SetField<T>(ref T field, T newValue = default(T), bool isComparer = true, [CallerMemberName] string propertyName = null)
+        {
+            if (isComparer)
+                if (EqualityComparer<T>.Default.Equals(field, newValue)) return false;
+
+            field = newValue;
+
+            if (propertyName != null)
+            {
+                OnPropertyChanged(propertyName);
+
+                return true;
+            }
+
+            return false;
+        }
+
+    }
+}

+ 10 - 1
Dev/OHV/VehicleControlSystem/ControlLayer/Conveyor.cs

@@ -10,7 +10,7 @@ using VehicleControlSystem.ControlLayer.IO;
 
 namespace VehicleControlSystem.ControlLayer
 {
-    public class Conveyor
+    public class Conveyor :ControlObjectBase
     {
         static Logger loggerPIO = Logger.GetLogger("PIO");
         IIO iO = null;
@@ -61,6 +61,7 @@ namespace VehicleControlSystem.ControlLayer
         bool IsInverterError() => this.iO.IsOn("IN_CV_ERROR");
         bool IsLifterPositinCheck() => this.iO.IsOn("IN_LIFTER_POSITION_DETECT");
         bool IsLifterDuplication() => this.iO.IsOn("IN_LIFTER_DUPLICATION_DETECT");
+        bool IsPIOInterLockOn() => this.iO.IsOn("OUT_PIO_INTERLOCK");
 
         int Load_Carrier()
         {
@@ -165,6 +166,14 @@ namespace VehicleControlSystem.ControlLayer
                     this.SetConveyorSpeed(false);
 
                 if (this.IsDetectedLoadStop()) break;
+
+                if (this.IsPIOInterLockOn())
+                {
+                    PIOClear();
+                    this.OnOffConveyor(false); //Stop
+                    loggerPIO.E("[Port] PIO InterLock On ");
+                    return 19; //Conveyor Moving Timeout
+                }
             }
 
             this.OnOffConveyor(false); //Stop

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

@@ -1,18 +1,14 @@
 using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
 using System.Threading.Tasks;
 using GSG.NET.Logging;
 using GSG.NET.Utils;
 using OHV.SqliteDAL;
 using Prism.Events;
 using VehicleControlSystem.ControlLayer.IO;
-using VehicleControlSystem.Managers;
 
 namespace VehicleControlSystem.ControlLayer
 {
-    public class Steering
+    public class Steering : ControlObjectBase
     {
         static Logger logger = Logger.GetLogger();
 

+ 29 - 45
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs

@@ -2,9 +2,7 @@
 using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
-using System.Text;
 using System.Threading;
-using System.Threading.Tasks;
 using GSG.NET.Concurrent;
 using GSG.NET.Logging;
 using GSG.NET.Utils;
@@ -14,7 +12,6 @@ using OHV.Common.Shareds;
 using OHV.SqliteDAL;
 using Prism.Events;
 using VehicleControlSystem.ControlLayer.Actuator.Cylinder;
-using VehicleControlSystem.ControlLayer.Axis;
 using VehicleControlSystem.ControlLayer.IO;
 using VehicleControlSystem.ControlLayer.Motion;
 using VehicleControlSystem.Managers;
@@ -24,7 +21,7 @@ namespace VehicleControlSystem.ControlLayer
     /// <summary>
     /// Control Layer 의 자원을 여기서 사용하자.
     /// </summary>
-    public class Vehicle : IDisposable
+    public class Vehicle : ControlObjectBase, IDisposable
     {
         static Logger logger = Logger.GetLogger();
 
@@ -76,7 +73,7 @@ namespace VehicleControlSystem.ControlLayer
         public eVehicleState VehicleStateProperty
         {
             get { return vehicleState; }
-            set { vehicleState = value; }
+            set { SetField(ref this.vehicleState, value); }
         }
 
         IEventAggregator eventAggregator;
@@ -175,7 +172,8 @@ namespace VehicleControlSystem.ControlLayer
             {
                 try
                 {
-                    this.CheckObstacle();
+                    if ( this.autoManager.OperationModeProperty == eOperatationMode.AutoMode)
+                        this.CheckObstacle();
                 }
                 catch (ThreadInterruptedException threadInterruptedException)
                 {
@@ -225,12 +223,14 @@ namespace VehicleControlSystem.ControlLayer
 
                         case SubCmd.eType.Load:
                             this.CurrentSubCommand = subCmd;
-                            this.Load(subCmd);
+                            this.LoadCarrier(subCmd);
                             break;
 
                         case SubCmd.eType.Unload:
+                            this.CurrentSubCommand = subCmd;
+                            this.UnloadCarrier(subCmd);
                             break;
-                        case SubCmd.eType.Chaging:
+                        case SubCmd.eType.Charge:
                             break;
                         default:
                             break;
@@ -294,64 +294,48 @@ namespace VehicleControlSystem.ControlLayer
             return true;
         }
 
-        //Load
-        void Load(SubCmd sub)
-        {
-            if (this.LoadCarrier(sub))
-                sql.SubCmdDAL.Delete(sub);
-        }
-
         public bool LoadCarrier(SubCmd sub)
         {
             var route = sql.RouteDal.GetRoute(sub.TargetID);
 
             if (!CorrectPosition(route, this.CurrentPosition))
+            {
+                this.autoManager.ProcessAlarm(20);
                 return false; //Alarm
+            }
 
+            int result = this.conveyor.PIOAndLoad(sub.TargetID);
+            if (result != 0)
+                this.autoManager.ProcessAlarm(result);
 
-
-
-            return Wait4LoadCarreir();
+            return true;
         }
 
-        bool Wait4LoadCarreir()
+        public bool UnloadCarrier(SubCmd sub)
         {
-            int waitTime = 60000;
-            long st = SwUtils.CurrentTimeMillis;
+            var route = sql.RouteDal.GetRoute(sub.TargetID);
 
-            //Todo: 이동시 확인 사항들.
-            while (true)
+            if (!CorrectPosition(route, this.CurrentPosition))
             {
-                if (SwUtils.Gt(st, waitTime))
-                {
-                    //Todo: 이동시간 초과 시 동작들.
-                    break;
-                }
+                this.autoManager.ProcessAlarm(21);
+                return false; //Alarm
             }
-            return true;
-        }
 
-        public bool UnloadCarrier()
-        {
-            return Wait4UnloadCarreir();
+            int result = this.conveyor.PIOAndUnload(sub.TargetID);
+            if (result != 0)
+            {
+                this.autoManager.ProcessAlarm(result);
+            }
+
+            return true;
         }
 
-        bool Wait4UnloadCarreir()
+        public bool BatteryCharge(SubCmd sub)
         {
-            int waitTime = 60000;
-            long st = SwUtils.CurrentTimeMillis;
 
-            //Todo: 이동시 확인 사항들.
-            while (true)
-            {
-                if (SwUtils.Gt(st, waitTime))
-                {
-                    //Todo: 이동시간 초과 시 동작들.
-                    break;
-                }
-            }
             return true;
         }
+
         #endregion
 
         #region Check Method

+ 11 - 0
Dev/OHV/VehicleControlSystem/Managers/AutoManager.cs

@@ -39,6 +39,8 @@ namespace VehicleControlSystem.Managers
             set { autoModeState = value; }
         }
 
+        bool IsAutoModeStartByGUI = false;
+
         public AutoManager( IIO io )
         {
             this.iO = io;
@@ -76,13 +78,22 @@ namespace VehicleControlSystem.Managers
             switch (this.OperationModeProperty)
             {
                 case eOperatationMode.ManualMode:
+
                     break;
                 case eOperatationMode.AutoMode:
                     switch (this.AutoModeStateProperty)
                     {
                         case eAutoModeState.ErrorStop:
+                            this.AutoModeStateProperty = eAutoModeState.WaitStop;
+                            break;
+                        case eAutoModeState.WaitStop:
+                            this.AutoModeStateProperty = eAutoModeState.Stop;
+                            break;
+                        case eAutoModeState.Stop:
+                            this.OperationModeProperty = eOperatationMode.ManualMode;
                             break;
                         case eAutoModeState.StartRun:
+                            this.AutoModeStateProperty = eAutoModeState.Run;
                             break;
                         case eAutoModeState.Run:
                             break;

+ 25 - 28
Dev/OHV/VehicleControlSystem/Managers/Scheduler.cs

@@ -99,22 +99,32 @@ namespace VehicleControlSystem.Managers
                 Thread.Sleep(500);
                 try
                 {
-                    var state = this.autoManager.AutoModeStateProperty;
+                    var state = this.autoManager.OperationModeProperty;
                     switch (state)
                     {
-                        case OHV.Common.Shareds.eAutoModeState.ErrorStop:
+                        case OHV.Common.Shareds.eOperatationMode.ManualMode:
                             break;
-                        case OHV.Common.Shareds.eAutoModeState.StartRun:
-                            break;
-                        case OHV.Common.Shareds.eAutoModeState.Run:
+                        case OHV.Common.Shareds.eOperatationMode.AutoMode:
                             {
-                                Command cmd = sql.CommandDAL.GetCmd();
-                                if (cmd == null) continue;
-
-                                DoWork(cmd);
+                                switch (this.autoManager.AutoModeStateProperty)
+                                {
+                                    case OHV.Common.Shareds.eAutoModeState.ErrorStop:
+                                        break;
+                                    case OHV.Common.Shareds.eAutoModeState.StartRun:
+                                        break;
+                                    case OHV.Common.Shareds.eAutoModeState.Run:
+                                        Command cmd = sql.CommandDAL.GetCmd();
+                                        if (cmd == null) continue;
+                                        DoWork(cmd);
+                                        break;
+                                    case OHV.Common.Shareds.eAutoModeState.Stop:
+                                        break;
+                                    default:
+                                        break;
+                                }
                             }
                             break;
-                        case OHV.Common.Shareds.eAutoModeState.Stop:
+                        case OHV.Common.Shareds.eOperatationMode.InitialMode:
                             break;
                         default:
                             break;
@@ -132,7 +142,7 @@ namespace VehicleControlSystem.Managers
             switch (cmd.State)
             {
                 case OHV.Common.Shareds.eCommandState.Queued:
-                    if (sql.SubCmdDAL.Count <= 0)
+                    if (sql.SubCmdDAL.Count <= 0) //
                     {
                         switch (cmd.Type)
                         {
@@ -146,20 +156,8 @@ namespace VehicleControlSystem.Managers
                             default:
                                 break;
                         }
+                        this.sql.CommandDAL.UpdateState(cmd.CommandID, OHV.Common.Shareds.eCommandState.Processing);
                     }
-                    sql.CommandDAL.UpdateState(cmd.CommandID, OHV.Common.Shareds.eCommandState.Assign);
-                    break;
-
-                case OHV.Common.Shareds.eCommandState.Assign: //Assign 되면 Vehicle 의 상태가 Busy 면 Processing 으로 전환.
-                    { 
-                        var subCmd = sql.SubCmdDAL.GetSubCmd();
-                        if (subCmd == null) break;
-
-                        if (!subCmd.CmdID.Equals(cmd.CommandID))
-                            break;
-                    }
-
-                    sql.CommandDAL.UpdateState(cmd.CommandID, OHV.Common.Shareds.eCommandState.Processing);
                     break;
 
                 case OHV.Common.Shareds.eCommandState.Processing:
@@ -187,14 +185,13 @@ namespace VehicleControlSystem.Managers
                             }
                             else if ( cmd.Type == OHV.Common.Shareds.eCommandType.Charging)
                             {
-                                if ( this.CreateSubCommand(cmd, SubCmd.eType.Chaging))
+                                if ( this.CreateSubCommand(cmd, SubCmd.eType.Charge))
                                     cmd.IsSecondCommanded = true;
                                 break;
                             }
-                            else //Move Command
+                            else //Move Command complete
                             {
                                 sql.CommandDAL.UpdateState(cmd.CommandID, OHV.Common.Shareds.eCommandState.Complete);
-                                break;
                             }
                         }
 
@@ -225,7 +222,7 @@ namespace VehicleControlSystem.Managers
                     break;
                 case SubCmd.eType.Unload:
                     break;
-                case SubCmd.eType.Chaging:
+                case SubCmd.eType.Charge:
                     break;
                 default:
                     break;

+ 34 - 5
Dev/OHV/VehicleControlSystem/VCSystem.cs

@@ -19,7 +19,7 @@ using VehicleControlSystem.Managers;
 
 namespace VehicleControlSystem
 {
-    [Module(ModuleName ="VCSystem")]
+    [Module(ModuleName = "VCSystem")]
     public class VCSystem : IModule, IDisposable
     {
         Scheduler scheduler = null;
@@ -30,7 +30,7 @@ namespace VehicleControlSystem
         Vehicle vehicle = null;
         SqliteManager sql = null;
 
-        public VCSystem(IEventAggregator ea, SqliteManager sql) 
+        public VCSystem(IEventAggregator ea, SqliteManager sql)
         {
             this.sql = sql;
 
@@ -46,7 +46,7 @@ namespace VehicleControlSystem
         {
             QuartzUtils.Init(5);
             QuartzUtils.Invoke("HIS_ALARM", QuartzUtils.GetExpnMinute(1), this.CleanHisAlarm);
-            
+
             //Create IO
             this.IO = new EzIO();
             var mapPath = Path.Combine(System.Environment.CurrentDirectory) + @"\Config\IO.xlsx";
@@ -101,6 +101,14 @@ namespace VehicleControlSystem
                     break;
                 case VCSMessageEventArgs.eVCSMessageKind.ReqIOMapList:
                     break;
+                case VCSMessageEventArgs.eVCSMessageKind.ReqCommandList:
+                    break;
+                case VCSMessageEventArgs.eVCSMessageKind.ReqAutoModeChange:
+                    RspAutoModeChange(true);
+                    break;
+                case VCSMessageEventArgs.eVCSMessageKind.ReqManualModeChange:
+                    RspAutoModeChange(false);
+                    break;
                 default:
                     break;
             }
@@ -108,9 +116,30 @@ namespace VehicleControlSystem
 
         void RspIOObjectMessage()
         {
-            var rspMsg = new GUIMessageEventArgs(GUIMessageEventArgs.eGUIMessageKind.RspIOObject, this.IO );
+            var rspMsg = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspIOObject, Args = this.IO };
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Publish(rspMsg);
         }
+
+        void RspAutoModeChange(bool isAutoMode)
+        {
+            GUIMessageEventArgs msg;
+            if (isAutoMode)
+            {
+                //ToDo: 자동 모드로 들어가기전 확인 할 점들.
+
+                this.autoManager.OperationModeProperty = OHV.Common.Shareds.eOperatationMode.AutoMode;
+                this.autoManager.AutoModeStateProperty = OHV.Common.Shareds.eAutoModeState.StartRun;
+                msg = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspAutoModeChange, Result = FluentResults.Results.Ok() };
+
+            }
+            else
+            {
+                this.autoManager.OperationModeProperty = OHV.Common.Shareds.eOperatationMode.ManualMode;
+                msg = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspManualmodeChange, Result = FluentResults.Results.Ok() };
+            }
+            GUIMessageEventPublish(msg);
+
+        }
         #endregion
 
         /// <summary>
@@ -133,7 +162,7 @@ namespace VehicleControlSystem
 
         public void RegisterTypes(IContainerRegistry containerRegistry)
         {
-            if ( !containerRegistry.IsRegistered<VCSystem>() )
+            if (!containerRegistry.IsRegistered<VCSystem>())
                 containerRegistry.RegisterSingleton<VCSystem>();
         }
 

+ 1 - 0
Dev/OHV/VehicleControlSystem/VehicleControlSystem.csproj

@@ -93,6 +93,7 @@
     <Compile Include="ControlLayer\Axis\EzAxis.cs" />
     <Compile Include="ControlLayer\Axis\IAxis.cs" />
     <Compile Include="ControlLayer\Clamp.cs" />
+    <Compile Include="ControlLayer\ControlObjectBase.cs" />
     <Compile Include="ControlLayer\Conveyor.cs" />
     <Compile Include="ControlLayer\IO\BitBlock.cs" />
     <Compile Include="ControlLayer\IO\Delegates.cs" />

BIN
Documents/Schedule/OHV Set-Up 일정_20200309.xlsx