Bläddra i källkod

DryRun 표시

DESKTOP-Kang 5 år sedan
förälder
incheckning
4ceb03158a

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

@@ -177,7 +177,7 @@
                                     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"/>
+                                    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="Dry Run" FontSize="15"/>
                                 </StackPanel>
                             </Button>
 

+ 8 - 0
Dev/OHV/VehicleControlSystem/ControlLayer/MQ/ZmqManager.cs

@@ -7,6 +7,7 @@ using NetMQ.Monitoring;
 using NetMQ.Sockets;
 using OHV.Common.Model;
 using OHV.Common.Shareds;
+using Quartz.Xml;
 using System;
 using System.Collections;
 using System.Collections.Concurrent;
@@ -189,6 +190,13 @@ namespace VehicleControlSystem.ControlLayer.MQ
             set { SetField( ref this.faultMessage, value ); }
         }
 
+        private bool isCanStanbyLocation;
+        public bool IsCanStanbyLocation
+        {
+            get { return isCanStanbyLocation; }
+            set { SetField(ref this.isCanStanbyLocation, value); }
+        }
+
         #endregion
 
         public ZmqManager( BMUManager bMU, Steering steering )

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

@@ -95,6 +95,7 @@ namespace VehicleControlSystem.ControlLayer
         }
 
         readonly object lockObject = new object();
+        bool isExecuteSteering = false;
         public int ControlSteering( bool isLeft = false )
         {
             //if ( this.isExecuteSteering )

+ 67 - 80
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs

@@ -38,6 +38,8 @@ namespace VehicleControlSystem.ControlLayer
         public ZmqManager ZmqManager { get; set; }
         public List<Alarm> Alarms { get; set; }
         public HostManager HostManager { get; set; }
+        public SqliteManager Sqlite { get; set; }
+        public AutoManager AutoManager { get; set; }
     }
 
     /// <summary>
@@ -74,9 +76,9 @@ namespace VehicleControlSystem.ControlLayer
             {
                 if ( SetField( ref this.currentTag, value ) )
                 {
-                    var info = sql.VehicleInfoDAL.GetAll().FirstOrDefault();
+                    var info = this.refObjects.Sqlite.VehicleInfoDAL.GetAll().FirstOrDefault();
                     info.CurrentTag = value.ToString();
-                    sql.VehicleInfoDAL.Update( info );
+                    this.refObjects.Sqlite.VehicleInfoDAL.Update( info );
 
                     this.OnCurrentTagChanged?.Invoke( value );
                 }
@@ -168,9 +170,9 @@ namespace VehicleControlSystem.ControlLayer
             {
                 if ( SetField( ref this.vehicleState, value ) )
                 {
-                    var info = sql.VehicleInfoDAL.GetAll().FirstOrDefault();
+                    var info = this.refObjects.Sqlite.VehicleInfoDAL.GetAll().FirstOrDefault();
                     info.VehicleState = value;
-                    sql.VehicleInfoDAL.Update( info );
+                    this.refObjects.Sqlite.VehicleInfoDAL.Update( info );
                 }
             }
         }
@@ -183,9 +185,9 @@ namespace VehicleControlSystem.ControlLayer
             {
                 if ( SetField( ref this.machineMode, value ) )
                 {
-                    var info = sql.VehicleInfoDAL.GetAll().FirstOrDefault();
+                    var info = this.refObjects.Sqlite.VehicleInfoDAL.GetAll().FirstOrDefault();
                     info.MachineMode = value;
-                    sql.VehicleInfoDAL.Update( info );
+                    this.refObjects.Sqlite.VehicleInfoDAL.Update( info );
                 }
             }
         }
@@ -438,8 +440,8 @@ namespace VehicleControlSystem.ControlLayer
 
         VehicleRefObjects refObjects = null;
 
-        SqliteManager sql = null;
-        AutoManager autoManager = null;
+        //SqliteManager sql = null;
+        //AutoManager autoManager = null;
 
         ThreadCancel cancel = new ThreadCancel();
         TaskCancel taskCancel = new TaskCancel();
@@ -447,9 +449,29 @@ namespace VehicleControlSystem.ControlLayer
 
         IEventAggregator eventAggregator;
 
-        public Vehicle( VehicleRefObjects vehicleRef, IIO io, SqliteManager sqliteManager, IEventAggregator ea, AutoManager auto )
+        public Vehicle( IEventAggregator ea )
         {
-            this.refObjects = vehicleRef;
+            this.obstacleBitList.AddRange( new string[]
+            {
+                "OUT_OBSTRUCTION_PATTERN_00",
+                "OUT_OBSTRUCTION_PATTERN_01",
+                "OUT_OBSTRUCTION_PATTERN_02",
+                "OUT_OBSTRUCTION_PATTERN_03",
+                "OUT_OBSTRUCTION_PATTERN_04",
+            } );
+
+            this.eventAggregator = ea;
+
+            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Unsubscribe( ReceiveDriveControlEvent );
+            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Subscribe( ReceiveDriveControlEvent );
+
+            this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Unsubscribe( ObstacleReceiveEvent );
+            this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Subscribe( ObstacleReceiveEvent );
+        }
+
+        public void DependencyInjection( VehicleRefObjects vehicleRefObjects )
+        {
+            this.refObjects = vehicleRefObjects;
 
             this.refObjects.IO.OnChangedIO += IO_OnChangedIO;
 
@@ -467,33 +489,13 @@ namespace VehicleControlSystem.ControlLayer
 
             this.refObjects.ZmqManager.PropertyChanged += ZmqManager_PropertyChanged;
 
-
-            this.sql = sqliteManager;
-            this.autoManager = auto;
-            this.autoManager.OnOperationModeChanged += AutoManager_OnOperationModeChanged;
-
-            this.obstacleBitList.AddRange( new string[]
-            {
-                "OUT_OBSTRUCTION_PATTERN_00",
-                "OUT_OBSTRUCTION_PATTERN_01",
-                "OUT_OBSTRUCTION_PATTERN_02",
-                "OUT_OBSTRUCTION_PATTERN_03",
-                "OUT_OBSTRUCTION_PATTERN_04",
-            } );
-
-            this.eventAggregator = ea;
-
-            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Unsubscribe( ReceiveDriveControlEvent );
-            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Subscribe( ReceiveDriveControlEvent );
-
-            this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Unsubscribe( ObstacleReceiveEvent );
-            this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Subscribe( ObstacleReceiveEvent );
+            this.refObjects.AutoManager.OnOperationModeChanged += AutoManager_OnOperationModeChanged;
         }
 
 
         private void ObstacleReceiveEvent( ObstacleControlEventArgs obj )
         {
-            if ( this.autoManager.OperationModeProperty != eOperatationMode.ManualMode )
+            if ( this.refObjects.AutoManager.OperationModeProperty != eOperatationMode.ManualMode )
                 return;
 
             if ( obj.EventDir == ObstacleControlEventArgs.eEventDir.ToBack )
@@ -640,19 +642,17 @@ namespace VehicleControlSystem.ControlLayer
             this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish( args );
         }
 
-        public void Init( HostManager host )
+        public void Init()
         {
             ThreadStart();
 
-            this.refObjects.HostManager = host;
-
             //TimerUtils.Once(5000, () => { this.CurrentPosition = 1000; });
-            var v = sql.VehicleInfoDAL.GetAll().FirstOrDefault();
+            var v = refObjects.Sqlite.VehicleInfoDAL.GetAll().FirstOrDefault();
             v.CurrentTag = "0000";
             v.VehicleState = eVehicleState.None;
             v.MachineMode = eMachineMode.LocalMode;
 
-            sql.VehicleInfoDAL.Update( v );
+            refObjects.Sqlite.VehicleInfoDAL.Update( v );
         }
 
         public int InitializationVehicle()
@@ -728,7 +728,7 @@ namespace VehicleControlSystem.ControlLayer
             var reply = new DriveControlEventArgs();
 
             int targetTag = args.TargetRouteID;
-            var route = sql.RouteDal.Get( x => x.Name.Equals( targetTag ) ).FirstOrDefault();
+            var route = this.refObjects.Sqlite.RouteDal.Get( x => x.Name.Equals( targetTag ) ).FirstOrDefault();
             if ( route == null )
             {
                 reply.Result = Results.Fail( "Not Found Route" );
@@ -869,18 +869,18 @@ namespace VehicleControlSystem.ControlLayer
                     if ( this.ObstacleStateProperty != eObstacleState.Normal ) //장애물 감지 상태 시 조그 동작만 가능하게.
                         continue;
 
-                    if ( this.autoManager.AutoModeStateProperty != eAutoModeState.Run ) // 
+                    if ( this.refObjects.AutoManager.AutoModeStateProperty != eAutoModeState.Run ) // 
                         continue;
 
 
-                    var subCmd = sql.SubCmdDAL.GetAll().FirstOrDefault();
+                    var subCmd = this.refObjects.Sqlite.SubCmdDAL.GetAll().FirstOrDefault();
                     if ( subCmd == null ) continue;
 
-                    if ( !sql.CommandDAL.GetAll().Any( x => x.CommandID.Equals( subCmd.CmdID ) ) )
+                    if ( !this.refObjects.Sqlite.CommandDAL.GetAll().Any( x => x.CommandID.Equals( subCmd.CmdID ) ) )
                     {
                         if ( subCmd.CmdType == SubCmd.eCmdType.Auto ) //자동 명령중 Main Command 가 없으면 삭제.
                         {
-                            sql.SubCmdDAL.Delete( subCmd.ID );
+                            this.refObjects.Sqlite.SubCmdDAL.Delete( subCmd.ID );
                             logger.I( $"SubCmd Deleted - ID={subCmd.ID}, CommandID={subCmd.CmdID}" );
                         }
                     }
@@ -930,10 +930,10 @@ namespace VehicleControlSystem.ControlLayer
         {
             this.refObjects.Drive.CancelCommand( subCmd );
 
-            var cmd = sql.CommandDAL.GetById( subCmd.CmdID );
+            var cmd = this.refObjects.Sqlite.CommandDAL.GetById( subCmd.CmdID );
             cmd.State = eCommandState.Complete;
-            sql.CommandDAL.Update( cmd );
-            sql.SubCmdDAL.Clean();
+            this.refObjects.Sqlite.CommandDAL.Update( cmd );
+            this.refObjects.Sqlite.SubCmdDAL.Clean();
 
             logger.D( $"[Cancel Command] {cmd.TargetID} / {cmd.Type}" );
         }
@@ -978,7 +978,7 @@ namespace VehicleControlSystem.ControlLayer
                 }
             }
 
-            sql.SubCmdDAL.Clean();
+            this.refObjects.Sqlite.SubCmdDAL.Clean();
 
             this.taskMoveCancel.Cancel();
             this.taskMoveCancel.WaitAll();
@@ -994,7 +994,7 @@ namespace VehicleControlSystem.ControlLayer
             {
                 this.OnMoveReady?.Invoke();
 
-                var moveReadyBuzzerTime = Convert.ToInt32( sql.ConfigDal.GetById( ConstString.BuzzerStartReadyTime ).Value );
+                var moveReadyBuzzerTime = Convert.ToInt32( this.refObjects.Sqlite.ConfigDal.GetById( ConstString.BuzzerStartReadyTime ).Value );
                 Thread.Sleep( moveReadyBuzzerTime );
 
                 this.VehicleStateProperty = eVehicleState.Move;
@@ -1047,10 +1047,10 @@ namespace VehicleControlSystem.ControlLayer
 
                 //Todo: 이동중 명령이 삭제 되면 처리 할일들.
                 //이동중 메인 명력이 없어진다면 정지 후 
-                if ( null == sql.CommandDAL.GetById( this.CurrentSubCommand.CmdID ) )
+                if ( null == this.refObjects.Sqlite.CommandDAL.GetById( this.CurrentSubCommand.CmdID ) )
                 {
                     logger.D( "[Wait Move Done] - 메인 명령 사라짐" );
-                    var cmd = sql.CommandDAL.GetAll();
+                    var cmd = this.refObjects.Sqlite.CommandDAL.GetAll();
                     if ( cmd == null )
                     {
                         logger.D( "[Wait Move Done] - Main Command not Exist Motion Stop" );
@@ -1118,12 +1118,12 @@ namespace VehicleControlSystem.ControlLayer
 
             //Load, Unload 가 끝나면 메인 Command 를 완료 했다고 판단.
             logger.I( $"[SubCommand Complete] - Target : {sub.TargetID} / Type : {sub.Type}" );
-            sql.SubCmdDAL.Clean();
-            var cmd = sql.CommandDAL.GetById( sub.CmdID );
+            this.refObjects.Sqlite.SubCmdDAL.Clean();
+            var cmd = this.refObjects.Sqlite.CommandDAL.GetById( sub.CmdID );
             if ( cmd != null )
             {
                 cmd.State = eCommandState.Complete;
-                sql.CommandDAL.Update( cmd );
+                this.refObjects.Sqlite.CommandDAL.Update( cmd );
             }
 
             TimerUtils.Once( 1000, this.OnLoadComplete );
@@ -1176,12 +1176,12 @@ namespace VehicleControlSystem.ControlLayer
             this.PIOSensorOff();
 
             logger.I( $"[SubCommand Complete] - Target : {sub.TargetID} / Type : {sub.Type}" );
-            sql.SubCmdDAL.Clean();
-            var cmd = sql.CommandDAL.GetById( sub.CmdID );
+            this.refObjects.Sqlite.SubCmdDAL.Clean();
+            var cmd = this.refObjects.Sqlite.CommandDAL.GetById( sub.CmdID );
             if ( cmd != null )
             {
                 cmd.State = eCommandState.Complete;
-                sql.CommandDAL.Update( cmd );
+                this.refObjects.Sqlite.CommandDAL.Update( cmd );
             }
 
             TimerUtils.Once( 1000, this.OnUnloadComplete );
@@ -1200,14 +1200,14 @@ namespace VehicleControlSystem.ControlLayer
             if ( result != ConstInt.EXECUTE_SUCCESS )
                 this.OccurVehicleAlarm( result );
 
-            sql.SubCmdDAL.Clean();
+            this.refObjects.Sqlite.SubCmdDAL.Clean();
 
-            var cmd = sql.CommandDAL.GetById( subCmd.CmdID );
+            var cmd = this.refObjects.Sqlite.CommandDAL.GetById( subCmd.CmdID );
             if ( cmd == null )
                 return;
 
             cmd.State = eCommandState.Complete;
-            sql.CommandDAL.Update( cmd );
+            this.refObjects.Sqlite.CommandDAL.Update( cmd );
         }
 
         /// <summary>
@@ -1218,7 +1218,7 @@ namespace VehicleControlSystem.ControlLayer
         /// <returns></returns>
         int PIOBatteryCharge( SubCmd sub )
         {
-            var route = sql.RouteDal.GetById( sub.TargetID );
+            var route = this.refObjects.Sqlite.RouteDal.GetById( sub.TargetID );
 
             if ( !CorrectPosition( route, this.CurrentPosition ) )
             {
@@ -1226,7 +1226,7 @@ namespace VehicleControlSystem.ControlLayer
                 return 0; //Alarm
             }
 
-            var pioTimeout = CastTo<int>.From<string>( sql.ConfigDal.GetById( ConstString.PIOTimeOut ).Value );
+            var pioTimeout = CastTo<int>.From<string>( this.refObjects.Sqlite.ConfigDal.GetById( ConstString.PIOTimeOut ).Value );
 
             PIOClear();
             loggerPIO.I( $"Start Charge PIO - [{sub.TargetID}]" );
@@ -1259,7 +1259,7 @@ namespace VehicleControlSystem.ControlLayer
                 if ( !this.refObjects.IO.IsOn( "IN_PIO_READY" ) || this.refObjects.IO.IsOn( "IN_PIO_RECEIVE_RUN" ) )
                     break;
 
-                if ( null == sql.CommandDAL.GetById( this.CurrentSubCommand.CmdID ) )
+                if ( null == this.refObjects.Sqlite.CommandDAL.GetById( this.CurrentSubCommand.CmdID ) )
                 {
                     PIOClear();
                     logger.D( "[Wait Charging] - 메인 명령 사라짐" );
@@ -1328,7 +1328,7 @@ namespace VehicleControlSystem.ControlLayer
             this.PIOSensorOn();
             LockUtils.Wait( 500 );
 
-            var pioTimeout = Convert.ToInt32( sql.ConfigDal.GetById( ConstString.PIOTimeOut ).Value );
+            var pioTimeout = Convert.ToInt32( this.refObjects.Sqlite.ConfigDal.GetById( ConstString.PIOTimeOut ).Value );
 
             PIOClear();
             loggerPIO.I( $"Start Battery Charge PIO" );
@@ -1396,7 +1396,7 @@ namespace VehicleControlSystem.ControlLayer
 #else
             loggerPIO.I( $"Stop Battery Charge PIO" );
 
-            var pioTimeout = Convert.ToInt32( sql.ConfigDal.GetById( ConstString.PIOTimeOut ).Value );
+            var pioTimeout = Convert.ToInt32( this.refObjects.Sqlite.ConfigDal.GetById( ConstString.PIOTimeOut ).Value );
 
             this.PIOClear();
 
@@ -1547,7 +1547,7 @@ namespace VehicleControlSystem.ControlLayer
             LockUtils.Wait( 500 );
 
             int result = 0;
-            var pioTimeout = Convert.ToInt32( sql.ConfigDal.GetById( ConstString.PIOTimeOut ).Value );
+            var pioTimeout = Convert.ToInt32( this.refObjects.Sqlite.ConfigDal.GetById( ConstString.PIOTimeOut ).Value );
 
             result = this.refObjects.Clamp.Unlock_Sync();
             if ( result != 0 )
@@ -1719,7 +1719,7 @@ namespace VehicleControlSystem.ControlLayer
 
             int result = 0;
 
-            var pioTimeout = Convert.ToInt32( sql.ConfigDal.GetById( ConstString.PIOTimeOut ).Value );
+            var pioTimeout = Convert.ToInt32( this.refObjects.Sqlite.ConfigDal.GetById( ConstString.PIOTimeOut ).Value );
 
             if ( this.refObjects.Conveyor.IsInverterError() )
                 return 16;
@@ -2017,7 +2017,7 @@ namespace VehicleControlSystem.ControlLayer
                     hisAlarm.Solution = alarm.Solution;
 
                     var clone = ObjectCopyUtils.DeepClone<Alarm>( alarm );
-                    sql.HisAlarmDAL.Insert( hisAlarm );
+                    this.refObjects.Sqlite.HisAlarmDAL.Insert( hisAlarm );
 
                     return;
                 }
@@ -2027,7 +2027,7 @@ namespace VehicleControlSystem.ControlLayer
             this.VehicleStateProperty = eVehicleState.Abnormal;
             this.ConveyorOff();
 
-            this.autoManager.ProcessAlarm( alarmID );
+            this.refObjects.AutoManager.ProcessAlarm( alarmID );
         }
 
         public void SetObstaclePattern( ObstacleControlEventArgs.eControlKind state, int value )
@@ -2097,19 +2097,6 @@ namespace VehicleControlSystem.ControlLayer
 
                 case eDataKind.SOC:
                     this.BatteryStateOfCharge = (double)obj.Value;
-                    //if ( this.BatteryStateOfCharge >= 78 )
-                    //{
-                    //    if ( this.autoManager.AutoModeStateProperty != eAutoModeState.Run )
-                    //        return;
-
-                    //    if ( this.VehicleStateProperty == eVehicleState.Charge || this.CheckBatteryCharge() || this.BatteryChargeState )
-                    //    {
-                    //        int result = ConstInt.EXECUTE_SUCCESS;
-                    //        result = this.StopBatteryCharge();
-                    //        if ( result != ConstInt.EXECUTE_SUCCESS )
-                    //            this.OccurVehicleAlarm( result );
-                    //    }
-                    //}
                     break;
 
                 case eDataKind.SOH:

+ 4 - 1
Dev/OHV/VehicleControlSystem/Managers/HostManager.cs

@@ -589,7 +589,10 @@ namespace VehicleControlSystem.Managers
 
         private void Manager_OnDiscontd( string id, Exception e )
         {
-            //this.vehicle.OccurVehicleAlarm( 43 );
+            //명령이 없는 상태에서는 Alarm 발생
+            var cl = this.sql.CommandDAL.GetAll().FirstOrDefault();
+            if (cl == null )
+                this.vehicle.OccurVehicleAlarm( 43 );
 
             var msg = new HostConnectedEventArgs( HostConnectedEventArgs.eConnectedState.Disconnected );
             this.eventAggregator.GetEvent<HostConnectedPubSubEvent>().Publish( msg );

+ 12 - 9
Dev/OHV/VehicleControlSystem/VCSystem.cs

@@ -124,6 +124,13 @@ namespace VehicleControlSystem
             this.drive = new GSIDrive( this.sql, this.steering, this.zmqManager );
             this.drive.Init();
 
+            //Process
+            this.autoManager = new AutoManager( this.IO, this.eventAggregator, this.sql, this.Alarms );
+            this.scheduler = new Scheduler( eventAggregator, this.autoManager, this.sql, this.bMUManager );
+            this.vehicle = new Vehicle( this.eventAggregator );
+
+            this.hostManager = new HostManager( this.eventAggregator, this.vehicle, this.sql, this.autoManager, this.scheduler );
+
             var refObject = new VehicleRefObjects();
             refObject.IO = this.IO as EzIO;
             refObject.BMUManager = this.bMUManager;
@@ -133,23 +140,19 @@ namespace VehicleControlSystem
             refObject.Steering = this.steering;
             refObject.ZmqManager = this.zmqManager;
             refObject.Alarms = this.Alarms;
+            refObject.Sqlite = this.sql;
+            refObject.AutoManager = this.autoManager;
+            refObject.HostManager = this.hostManager;
 
-            //Process
-            this.autoManager = new AutoManager( this.IO, this.eventAggregator, this.sql, this.Alarms );
-            this.scheduler = new Scheduler( eventAggregator, this.autoManager, this.sql, this.bMUManager );
-
-            this.vehicle = new Vehicle( refObject, this.IO, this.sql, this.eventAggregator, this.autoManager );
+            this.vehicle.DependencyInjection( refObject );
             this.vehicle.PropertyChanged += Vehicle_PropertyChanged;
 
-            this.hostManager = new HostManager( this.eventAggregator, this.vehicle, this.sql, this.autoManager, this.scheduler );
-
             this.hostManager.Init();
-            this.vehicle.Init(this.hostManager);
+            this.vehicle.Init();
             this.scheduler.Init();
             this.autoManager.Init( this.vehicle );
         }
 
-
         private void Vehicle_PropertyChanged( object sender, System.ComponentModel.PropertyChangedEventArgs e )
         {
             var arg = new GUIMessageEventArgs();