Browse Source

알람 리셋 버튼 수정 및 Vehicle Class 수정

DESKTOP-Kang 6 years ago
parent
commit
06cd50a761

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

@@ -6,7 +6,7 @@ using System.Threading.Tasks;
 
 namespace OHV.Common.Model
 {
-    public class VehicleState
+    public class VehicleInfo
     {
         public string VehicleID { get; set; }
         public string CurrentTag { get; set; }

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

@@ -79,6 +79,7 @@
     <Compile Include="Model\SelectionItem.cs" />
     <Compile Include="Model\SelectionList.cs" />
     <Compile Include="Model\SubCmd.cs" />
+    <Compile Include="Model\VehicleInfo.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Shareds\ConstString.cs" />
     <Compile Include="Shareds\SharedEnumType.cs" />

+ 2 - 2
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoViewModel.cs

@@ -296,8 +296,8 @@ namespace OHV.Module.Interactivity.PopUp
 
         private void ResponseVehicleState(DriveControlEventArgs args)
         {
-            //var state = CastTo<VehicleState>.From<object>(args.Args);
-            //this.CurrentDrive = state.CurrentPosition;
+            var state = CastTo<VehicleInfo>.From<object>(args.Args);
+            this.CurrentDrive = state.CurrentPosition;
         }
 
         private void ResponseMove( DriveControlEventArgs args )

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

@@ -12,6 +12,8 @@
         Title="D_MainWindow" Height="1080" Width="1920"
         xmlns:OHVCommonShareds="clr-namespace:OHV.Common.Shareds;assembly=OHV.Common"
         Background="{x:Null}" WindowStartupLocation="CenterScreen"
+        xmlns:c ="clr-namespace:GSG.NET.WPF.CalcBinding;assembly=GSG.NET.WPF"
+        xmlns:media ="clr-namespace:System.Windows.Media;assembly=PresentationCore"
         >
 
     <Grid x:Name="GridMain" Background="{x:Null}">
@@ -210,9 +212,9 @@
                     <Border Margin="5" BorderBrush="#FF00FFD3" BorderThickness="2">
                     </Border>
                     <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
-                        <Button Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="60" Width="250" Command="{Binding AlarmResetCommand}">
+                        <Button Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="60" Width="250" Command="{Binding AlarmResetCommand}" Background="{c:Binding 'IsVehicleAlarm ? media:Brushes.Red : media:Brushes.DodgerBlue'}" >
                             <StackPanel Orientation="Horizontal">
-                                <materialDesign:PackIcon Kind="CircleArrows" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="40" Width="auto" Margin="0,0,10,0" Background="DarkRed"/>
+                                <materialDesign:PackIcon Kind="CircleArrows" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="40" Width="auto" Margin="0,0,10,0"/>
                                 <TextBlock Text="Alarm Reset" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="30"/>
                             </StackPanel>
                         </Button>

+ 98 - 75
Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs

@@ -1,4 +1,5 @@
 using CommonServiceLocator;
+using GSG.NET.Extensions;
 using GSG.NET.Logging;
 using GSG.NET.Utils;
 using OHV.Common.Events;
@@ -30,6 +31,7 @@ namespace OHV.Vehicle.Concept
     {
         Logger loggerRemote = Logger.GetLogger("RemoteLogger");
 
+        #region Properties
         private string _title = "Prism Unity Application";
         public string Title
         {
@@ -91,15 +93,62 @@ namespace OHV.Vehicle.Concept
         public string VehicleIP
         {
             get { return this._vehicleIP; }
-            set { this.SetProperty( ref this._vehicleIP , value ); }
+            set { this.SetProperty(ref this._vehicleIP, value); }
         }
         private string _ocsIP;
         public string OcsIP
         {
             get { return this._ocsIP; }
-            set { this.SetProperty( ref this._ocsIP , value ); }
+            set { this.SetProperty(ref this._ocsIP, value); }
+        }
+
+        private string _swVersion;
+        public string SwVersion
+        {
+            get { return this._swVersion; }
+            set { this.SetProperty(ref this._swVersion, value); }
+        }
+
+        bool _startEnable = true;
+        public bool StartEnable
+        {
+            get { return this._startEnable; }
+            set { this.SetProperty(ref this._startEnable, value); }
+        }
+
+        bool _stopEnable = false;
+        public bool StopEnable
+        {
+            get { return this._stopEnable; }
+            set { this.SetProperty(ref this._stopEnable, value); }
+        }
+
+        private DateTime _lastBuildedTime;
+        public DateTime LastBuildedTime
+        {
+            get { return this._lastBuildedTime; }
+            set { this.SetProperty(ref this._lastBuildedTime, value); }
+        }
+
+        private bool isManualMode = true;
+
+        public bool IsManualMode
+        {
+            get { return isManualMode; }
+            set { SetProperty(ref isManualMode, value); }
         }
 
+        private bool isVehicleAlarm = false;
+
+        public bool IsVehicleAlarm
+        {
+            get { return isVehicleAlarm; }
+            set { SetProperty(ref this.isVehicleAlarm, value); }
+        }
+
+        #endregion
+
+        #region Brushes
         private Brush _ocsBrush;// = Brushes.Gray;
         private Brush _batteryBrush;// = Brushes.Gray;
         private Brush _laserBrush;// = Brushes.Gray;
@@ -129,39 +178,7 @@ namespace OHV.Vehicle.Concept
             }
         }
 
-        private string _swVersion;
-        public string SwVersion
-        {
-            get { return this._swVersion; }
-            set { this.SetProperty(ref this._swVersion, value); }
-        }
-
-        private DateTime _lastBuildedTime;
-        public DateTime LastBuildedTime
-        {
-            get { return this._lastBuildedTime; }
-            set { this.SetProperty(ref this._lastBuildedTime, value); }
-        }
-
-        bool _startEnable = true;
-        public bool StartEnable
-        {
-            get { return this._startEnable; }
-            set { this.SetProperty( ref this._startEnable , value ); }
-        }
-
-        bool _stopEnable = false;
-        public bool StopEnable
-        {
-            get { return this._stopEnable; }
-            set { this.SetProperty( ref this._stopEnable , value ); }
-        }
-
-        IEventAggregator eventAggregator = null;
-        VCSystem VCSystem = null;
-        MessageController messageController;
-
-        VCSMessagePubSubEvent vcsMessagePublisher;
+        #endregion
 
         #region Commands
         public ICommand TestCommand { get; set; }
@@ -172,32 +189,22 @@ namespace OHV.Vehicle.Concept
         public ICommand StartCommand { get; set; }
         public ICommand StopCommand { get; set; }
         public ICommand AlarmResetCommand { get; set; }
+        public ICommand ChangeLanguage { get; set; }
         #endregion
 
-        #region Properties
-        private bool isManualMode = true;
+        IEventAggregator eventAggregator = null;
+        VCSystem VCSystem = null;
+        MessageController messageController;
 
-        public bool IsManualMode
-        {
-            get { return isManualMode; }
-            set { SetProperty(ref isManualMode, value); }
-        }
+        VCSMessagePubSubEvent vcsMessagePublisher;
 
-        #endregion
         IRegionManager regionManager;
         public Common.Events.HostConnectedEventArgs.eConnectedState State { get; set; }
 
         private DeskTopInfo dti = new DeskTopInfo();
-
-        public ICommand ChangeLanguage { get; set; }
-
-        private void Execte_ChangeLanguage()
-        {
-            //LanguageHalper.LanguagesSelcter.ChangLanguage(LanguageHalper.eLanguageType.Chinese);
-        }
-
         SqliteManager sql;
 
+
         public D_MainWindowViewModel( IEventAggregator _ea , VCSystem cSystem , IRegionManager _regionManager , MessageController _msgController, SqliteManager _sql )
         {
             this.regionManager = _regionManager;
@@ -233,34 +240,12 @@ namespace OHV.Vehicle.Concept
             dateTimer.Interval = TimeSpan.FromMilliseconds(500);
             dateTimer.Start();
 
-            //DispatcherTimer deskTopTimer = new DispatcherTimer();
-            //deskTopTimer.Tick += (object sender, EventArgs e) =>
-            //{
-            //    this.CPU = dti.GetCpuUsage();
-            //    this.UsageCPU = (int)dti.GetCpuUsage();
-            //    this.RAM = dti.GetRamUsage();
-            //};
-            //deskTopTimer.Interval = TimeSpan.FromMilliseconds(1000);
-            //deskTopTimer.Start();
-
-            //this._totalCPU = dti.cpuResult;
-            //this._cDrive = dti.GetCDrive();
-
             this.SwVersion = AssemblyUtils.GetVersion();
             this.LastBuildedTime = new Helpler.AssemblyInfo().Get_BuildDateTime();
 
             GSG.NET.Quartz.QuartzUtils.Invoke("RESOURCE_CHECK", GSG.NET.Quartz.QuartzUtils.GetExpnSecond(1), QuzOnResourceUsage);
         }
 
-        private void ExecuteEStop()
-        {
-            var msg = new VCSMessageEventArgs
-            {
-                Kind = VCSMessageEventArgs.eVCSMessageKind.ReqEStop,
-            };
-            vcsMessagePublisher.Publish(msg);
-        }
-
         void QuzOnResourceUsage()
         {
             this.CPU = GSG.NET.OSView.Mgnt.CpuUseRate();
@@ -270,9 +255,35 @@ namespace OHV.Vehicle.Concept
             this.CDrive = ll.FirstOrDefault().AvailableFreeSpace / ConstUtils.ONE_GIGA_BYTES;
         }
 
+        private void Execte_ChangeLanguage()
+        {
+            //LanguageHalper.LanguagesSelcter.ChangLanguage(LanguageHalper.eLanguageType.Chinese);
+        }
+
+        private void ExecuteEStop()
+        {
+            var msg = new VCSMessageEventArgs
+            {
+                Kind = VCSMessageEventArgs.eVCSMessageKind.ReqEStop,
+            };
+            vcsMessagePublisher.Publish(msg);
+        }
+
         private void ExecuteAlarmResetCommand( )
         {
-            loggerRemote.I("1231435463547");
+            loggerRemote.I("123214wefsadfsdafsd");
+            this.messageController.ShowConfirmationPopupView(" Alarm Reset ? ", r =>
+            {
+                if (r.Result == ButtonResult.OK)
+                {
+                    var msg = new VCSMessageEventArgs
+                    {
+                        Kind = VCSMessageEventArgs.eVCSMessageKind.ReqAlarmReset,
+                    };
+
+                    vcsMessagePublisher.Publish(msg);
+                }
+            });
         }
 
         private void ExecuteStopCommand()
@@ -402,6 +413,19 @@ namespace OHV.Vehicle.Concept
             {
                 var hisAlarm = args.Args as HisAlarm;
                 this.messageController.ShowNotificationView(args.MessageText);
+                this.VehicleModeChang(false);//알람이 발생하면 자동으로 Manual Mode 로 변경됨
+            }
+
+            if (args.MessageKey.Equals(MessageKey.Vehicle))
+            {
+                if (args.ModelPropertyName.Equals("VehicleStateProperty"))
+                {
+                    var vehicleState = CastTo<eVehicleState>.From<object>(args.Args);
+                    if (vehicleState == eVehicleState.Abnormal)
+                        this.IsVehicleAlarm = true;
+                    else
+                        this.IsVehicleAlarm = false;
+                }
             }
         }
 
@@ -415,7 +439,6 @@ namespace OHV.Vehicle.Concept
             //this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish(m);
         }
 
-
         public void InitViewModel()
         {
             //VCSystem.Instance.Init();

+ 53 - 61
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs

@@ -103,6 +103,27 @@ namespace VehicleControlSystem.ControlLayer
             set { SetField(ref this.steeringState, value); }
         }
 
+        private eObstacleState obstacleState = eObstacleState.Normal;
+        public eObstacleState ObstacleStateProperty
+        {
+            get { return obstacleState; }
+            set 
+            { 
+                if (SetField(ref this.obstacleState, value))
+                {
+                    if (value == eObstacleState.Blocked)
+                        this.VehicleStateProperty = eVehicleState.Blocked;
+                }
+            }
+        }
+
+        private eVehicleState vehicleState;
+        public eVehicleState VehicleStateProperty
+        {
+            get { return vehicleState; }
+            set { SetField(ref this.vehicleState, value); }
+        }
+
         //이동
         public bool Busy
         {
@@ -147,6 +168,12 @@ namespace VehicleControlSystem.ControlLayer
         public event Action<eFailCode> OnFailReport;
         #endregion
 
+        #region List.
+        List<ICylinder> cylinders = new List<ICylinder>();
+
+        List<string> obstacleBitList = new List<string>();
+        #endregion
+
         EzIO iO = null;
         GSIMotion motion = null;
         SqliteManager sql = null;
@@ -154,29 +181,9 @@ namespace VehicleControlSystem.ControlLayer
         Steering steering = null;
         AutoManager autoManager = null;
 
-        #region List.
-        List<ICylinder> cylinders = new List<ICylinder>();
-
-        List<string> obstacleBitList = new List<string>();
-        #endregion
-
         ThreadCancel cancel = new ThreadCancel();
         TaskCancel taskCancel = new TaskCancel();
 
-        private eObstacleState obstacleState = eObstacleState.Normal;
-        public eObstacleState ObstacleStateProperty
-        {
-            get { return obstacleState; }
-            set { SetField(ref this.obstacleState, value); }
-        }
-
-        private eVehicleState vehicleState;
-        public eVehicleState VehicleStateProperty
-        {
-            get { return vehicleState; }
-            set { SetField(ref this.vehicleState, value); }
-        }
-
         IEventAggregator eventAggregator;
 
         public Vehicle(IIO io, SqliteManager sqliteManager, IEventAggregator ea, AutoManager auto)
@@ -329,7 +336,7 @@ namespace VehicleControlSystem.ControlLayer
 
         private void ReqVehicleState(DriveControlEventArgs args)
         {
-            VehicleState state = new VehicleState();
+            VehicleInfo state = new VehicleInfo();
             state.CurrentPosition = this.CurrentPosition;
             state.CurrentSpeed = this.CurrentSpeed;
             state.CurrentTag = this.CurrentTag;
@@ -442,37 +449,6 @@ namespace VehicleControlSystem.ControlLayer
         }
         #endregion
 
-        public void Init()
-        {
-            this.CreateClamp();
-            this.CreateSteering();
-
-            ThreadStart();
-
-            //TimerUtils.Once(5000, () => { this.CurrentPosition = 1000; });
-        }
-
-        public int InitializationVehicle()
-        {
-            int result = 0;
-            if (this.IsDetectedCenter()) //자제가 있으면 Lock
-                result = this.clamp.Lock_Sync();
-            else
-                result = this.clamp.Unlock_Sync();
-
-            if (this.motion.IsErrorOn)
-                return 22;
-
-            return result;
-        }
-
-        public void Dispose()
-        {
-            this.cancel.Cancel();
-            this.cancel.StopWaitAll();
-        }
-
-
         #region Thread
         void ThreadStart()
         {
@@ -581,7 +557,7 @@ namespace VehicleControlSystem.ControlLayer
             this.clamp.ClampEStop();
             this.motion.EStop();
 
-            this.autoManager.ProcessAlarm(23);
+            this.OccurVehicleAlarm(23);
         }
 
         void Move(SubCmd sub)
@@ -604,6 +580,7 @@ namespace VehicleControlSystem.ControlLayer
             ////TimerUtils.Once(3000, BuzzerOnOff, false, eBuzzerKind.StartWarn );
             //Thread.Sleep(3000);
             //this.BuzzerOnOff(false);
+            this.VehicleStateProperty = eVehicleState.Move;
 
             this.OnMoveReady?.Invoke();
 
@@ -621,6 +598,8 @@ namespace VehicleControlSystem.ControlLayer
             //this.BuzzerOnOff(false);
             this.OnMoveFinish?.Invoke();
 
+            this.VehicleStateProperty = eVehicleState.Idle;
+
             return result;
         }
 
@@ -654,32 +633,34 @@ namespace VehicleControlSystem.ControlLayer
 
         public bool LoadCarrier(SubCmd sub)
         {
+            this.VehicleStateProperty = eVehicleState.Load;
+
             var route = sql.RouteDal.GetRoute(sub.TargetID);
 
             if (!CorrectPosition(route, this.CurrentPosition))
             {
-                this.autoManager.ProcessAlarm(20);
+                this.OccurVehicleAlarm(20);
                 return false; //Alarm
             }
 
             int result = this.clamp.Unlock_Sync();
             if (result != 0)
             {
-                this.autoManager.ProcessAlarm(result);
+                this.OccurVehicleAlarm(result);
                 return false;
             }
 
             result = this.PIOAndLoad(sub.TargetID);
             if (result != 0)
             {
-                this.autoManager.ProcessAlarm(result);
+                this.OccurVehicleAlarm(result);
                 return false;
             }
 
             result = this.clamp.Lock_Sync();
             if (result != 0)
             {
-                this.autoManager.ProcessAlarm(result);
+                this.OccurVehicleAlarm(result);
                 return false;
             }
 
@@ -687,36 +668,42 @@ namespace VehicleControlSystem.ControlLayer
             sql.CommandDAL.UpdateState(sub.CmdID, eCommandState.Complete);
             sql.SubCmdDAL.Delete(sub);
 
+            this.VehicleStateProperty = eVehicleState.Idle;
+
             return true;
         }
 
         public bool UnloadCarrier(SubCmd sub)
         {
+            this.VehicleStateProperty = eVehicleState.Unload;
+
             var route = sql.RouteDal.GetRoute(sub.TargetID);
 
             if (!CorrectPosition(route, this.CurrentPosition))
             {
-                this.autoManager.ProcessAlarm(21);
+                this.OccurVehicleAlarm(21);
                 return false; //Alarm
             }
 
             int result = this.clamp.Unlock_Sync();
             if (result != 0)
             {
-                this.autoManager.ProcessAlarm(result);
+                this.OccurVehicleAlarm(result);
                 return false;
             }
 
             result = this.PIOAndUnload(sub.TargetID);
             if (result != 0)
             {
-                this.autoManager.ProcessAlarm(result);
+                this.OccurVehicleAlarm(result);
                 return false;
             }
 
             sql.CommandDAL.UpdateState(sub.CmdID, eCommandState.Complete);
             sql.SubCmdDAL.Delete(sub);
 
+            this.VehicleStateProperty = eVehicleState.Idle;
+
             return true;
         }
 
@@ -732,7 +719,7 @@ namespace VehicleControlSystem.ControlLayer
 
             if (!CorrectPosition(route, this.CurrentPosition))
             {
-                this.autoManager.ProcessAlarm(21);
+                this.OccurVehicleAlarm(21);
                 return false; //Alarm
             }
 
@@ -1251,6 +1238,11 @@ namespace VehicleControlSystem.ControlLayer
             return BitUtils.ChgInt32(bitArray);
         }
 
+        void OccurVehicleAlarm(int alarmID)
+        {
+            this.VehicleStateProperty = eVehicleState.Abnormal;
+            this.autoManager.ProcessAlarm(alarmID);
+        }
         #endregion
 
         #region Event Subscribe 

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

@@ -255,6 +255,7 @@ namespace VehicleControlSystem.Managers
             }
             sql.HisAlarmDAL.Add(hisAlarm);
 
+            //UI 로는 처음 발생한 Error 만 전송한다.
             if (IsErrorProcessing)
                 return;
 

+ 7 - 7
Dev/OHV/VehicleControlSystem/VCSystem.cs

@@ -113,7 +113,7 @@ namespace VehicleControlSystem
             switch (msg.Kind)
             {
                 case VCSMessageEventArgs.eVCSMessageKind.ReqIOObject:
-                    RspIOObjectMessage();
+                    ReqIOObjectMessage();
                     break;
                 case VCSMessageEventArgs.eVCSMessageKind.ReqIOMapList:
                     break;
@@ -141,8 +141,8 @@ namespace VehicleControlSystem
 
         private void ReqAlarmReset()
         {
-            if (this.autoManager.IsErrorProcessing)
-                this.autoManager.IsErrorProcessing = false;
+            this.autoManager.IsErrorProcessing = false;
+            this.vehicle.VehicleStateProperty = eVehicleState.Idle;
         }
 
         private void ReqEStop()
@@ -176,21 +176,21 @@ namespace VehicleControlSystem
             GUIMessageEventPublish(reply);
         }
 
-        void RspIOObjectMessage()
+        void ReqIOObjectMessage()
         {
             var rspMsg = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspIOObject, Args = this.IO };
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Publish(rspMsg);
         }
 
-        void RspAutoModeChange(bool isAutoMode)
+        void ReqAutoModeChange(bool isAutoMode)
         {
             GUIMessageEventArgs msg;
             if (isAutoMode)
             {
                 int result = vehicle.InitializationVehicle();
-                if (result != 0 )
+                if (result != 0)
                 {
-                    this.autoManager.ProcessAlarm( result ); //Alarm 내용을 UI로 전달 해주니까 Reply 가 필요 없다.
+                    this.autoManager.ProcessAlarm(result); //Alarm 내용을 UI로 전달 해주니까 Reply 가 필요 없다.
                     return;
                 }