Browse Source

Pull Merge

ys-hwang 6 years ago
parent
commit
6a687bf916
29 changed files with 925 additions and 94 deletions
  1. 3 0
      Dev/OHV/OHV.Common/Events/MessageEventArgs.cs
  2. 2 0
      Dev/OHV/OHV.Common/Shareds/RegionNames.cs
  3. 6 0
      Dev/OHV/OHV.Module.Interactivity/MessageController.cs
  4. 10 0
      Dev/OHV/OHV.Module.Interactivity/OHV.Module.Interactivity.csproj
  5. 127 0
      Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlView.xaml
  6. 28 0
      Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlView.xaml.cs
  7. 167 0
      Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlViewModel.cs
  8. 3 1
      Dev/OHV/OHV.Module.ListViews/SubViews/VehicleCommandDeleteView.xaml
  9. 1 0
      Dev/OHV/OHV.Module.MainViews/Views/AutoView.xaml
  10. 5 5
      Dev/OHV/OHV.Module.MainViews/Views/UnitView.xaml
  11. 7 0
      Dev/OHV/OHV.Module.MainViews/Views/UnitViewModel.cs
  12. 116 0
      Dev/OHV/OHV.Module.Status/OHV.Module.Status.csproj
  13. 55 0
      Dev/OHV/OHV.Module.Status/Properties/AssemblyInfo.cs
  14. 62 0
      Dev/OHV/OHV.Module.Status/Properties/Resources.Designer.cs
  15. 117 0
      Dev/OHV/OHV.Module.Status/Properties/Resources.resx
  16. 30 0
      Dev/OHV/OHV.Module.Status/Properties/Settings.Designer.cs
  17. 7 0
      Dev/OHV/OHV.Module.Status/Properties/Settings.settings
  18. 15 0
      Dev/OHV/OHV.Module.Status/UserControl1.xaml
  19. 28 0
      Dev/OHV/OHV.Module.Status/UserControl1.xaml.cs
  20. 9 0
      Dev/OHV/OHV.Module.Status/packages.config
  21. 24 23
      Dev/OHV/OHV.Vehicle/Concept/D_MainWindow.xaml
  22. 10 4
      Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs
  23. 7 0
      Dev/OHV/OHV.sln
  24. 10 3
      Dev/OHV/VehicleControlSystem/ControlLayer/Clamp.cs
  25. BIN
      Dev/SerialModule/BatteryTabos/BatteryTabos/.vs/BatteryTabos/v16/Server/sqlite3/storage.ide
  26. BIN
      Dev/SerialModule/BatteryTabos/BatteryTabos/.vs/BatteryTabos/v16/Server/sqlite3/storage.ide-shm
  27. BIN
      Dev/SerialModule/BatteryTabos/BatteryTabos/.vs/BatteryTabos/v16/Server/sqlite3/storage.ide-wal
  28. 4 3
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/MainWindow.xaml.cs
  29. 72 55
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryTabos/Manager.cs

+ 3 - 0
Dev/OHV/OHV.Common/Events/MessageEventArgs.cs

@@ -85,6 +85,8 @@ namespace OHV.Common.Events
             ReqCurrentPosition,
             ReqStopCurrentPosition,
             FaultReset,
+            Lock,
+            UnLock
         }
 
         public enum eJogMoveDir
@@ -97,6 +99,7 @@ namespace OHV.Common.Events
         {
             LEFT = 0,
             RIGHT,
+            LR_SYNC
         }
 
         public eAxises Axis { get; set; }

+ 2 - 0
Dev/OHV/OHV.Common/Shareds/RegionNames.cs

@@ -13,5 +13,7 @@ namespace OHV.Common.Shareds
         public const string VehicleCommandListSub = "VehicleCommandListSub";
 
         public const string VehicleSubCmdList = "VehicleSubCmdList";
+
+        public const string VehicleStatus = "VehicleStatus";
     }
 }

+ 6 - 0
Dev/OHV/OHV.Module.Interactivity/MessageController.cs

@@ -36,6 +36,7 @@ namespace OHV.Module.Interactivity
             containerRegistry.RegisterDialog<BatteryConfigView , BatteryConfigViewModel>();
             containerRegistry.RegisterDialog<OpticalReadingConfigView , OpticalReadingConfigViewModel>();
             containerRegistry.RegisterDialog<InOutControlView , InOutControlViewModel>();
+            containerRegistry.RegisterDialog<ConveyorControlView , ConveyorControlViewModel>();
         }
 
         public void ShowNotificationView( string Message , bool isOK = true )
@@ -90,5 +91,10 @@ namespace OHV.Module.Interactivity
         {
             this.dialogService.ShowDialog( "InOutControlView" , new DialogParameters() , null );
         }
+
+        public void ShowConveyorControlPopupView()
+        {
+            this.dialogService.ShowDialog( "ConveyorControlView" , new DialogParameters() , null );
+        }
     }
 }

+ 10 - 0
Dev/OHV/OHV.Module.Interactivity/OHV.Module.Interactivity.csproj

@@ -99,6 +99,12 @@
     <Compile Include="PopUp\CalcuratorView.xaml.cs">
       <DependentUpon>CalcuratorView.xaml</DependentUpon>
     </Compile>
+    <Compile Include="PopUp\ConveyorControlView.xaml.cs">
+      <DependentUpon>ConveyorControlView.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="PopUp\ConveyorControlViewModel.cs">
+      <DependentUpon>ConveyorControlView.xaml</DependentUpon>
+    </Compile>
     <Compile Include="PopUp\DriveServoView.xaml.cs">
       <DependentUpon>DriveServoView.xaml</DependentUpon>
     </Compile>
@@ -163,6 +169,10 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </Page>
+    <Page Include="PopUp\ConveyorControlView.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
     <Page Include="PopUp\DriveServoView.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>

+ 127 - 0
Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlView.xaml

@@ -0,0 +1,127 @@
+<UserControl x:Class="OHV.Module.Interactivity.PopUp.ConveyorControlView"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:OHV.Module.Interactivity.PopUp"
+             mc:Ignorable="d" 
+             xmlns:prism="http://prismlibrary.com/"
+             prism:ViewModelLocator.AutoWireViewModel="True"
+             xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+             Background="#455a64"
+             Height="600"
+             Width="800">
+
+    <prism:Dialog.WindowStyle>
+        <Style TargetType="Window">
+            <Setter Property="prism:Dialog.WindowStartupLocation" Value="CenterScreen" />
+            <Setter Property="Background" Value="Transparent"/>
+            <Setter Property="AllowsTransparency" Value="True"/>
+            <Setter Property="ResizeMode" Value="NoResize"/>
+            <Setter Property="WindowStyle" Value="None"/>
+            <Setter Property="BorderThickness" Value="1"/>
+            <Setter Property="BorderBrush" Value="{DynamicResource BorderSolidNormal}"/>
+            <Setter Property="Template" Value="{DynamicResource WindowTemplateKey}"/>
+
+            <!--<Style.Triggers>
+                <Trigger Property="ResizeMode" Value="CanResizeWithGrip">
+                    <Setter Property="Template" Value="{StaticResource WindowTemplateKey}"/>
+                </Trigger>
+            </Style.Triggers>-->
+        </Style>
+    </prism:Dialog.WindowStyle>
+
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="*"/>
+            <ColumnDefinition Width="130"/>
+        </Grid.ColumnDefinitions>
+
+        <Grid Grid.Column="0">
+            <Grid Margin="15" Background="#37474f">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="*"/>
+                    <RowDefinition Height="*"/>
+                </Grid.RowDefinitions>
+
+                <Grid Grid.Row="0">
+                    <Button Content="Conveyor Control" Foreground="Orange" Background="{x:Null}" Margin="0,10,455,168"/>
+                    <StackPanel Orientation="Horizontal"
+                                HorizontalAlignment="Center">
+
+                        <Button HorizontalAlignment="Stretch"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            Command="{Binding ConveyorRunCommand}"
+                            CommandParameter="CW"
+                            Height="100" Width="100"
+                            Margin="15">
+                            <TextBlock Text="CW"/>
+                        </Button>
+
+                        <Button 
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            Height="100" Width="100"
+                            Margin="15"
+                            Command="{Binding ConveyorRunCommand}"
+                            CommandParameter="CCW">
+                            <TextBlock Text="CCW"/>
+                        </Button>
+
+                        <Button HorizontalAlignment="Stretch"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            Command="{Binding ConveyorRunCommand}"
+                            CommandParameter="STOP"
+                            Height="100" Width="100"
+                            Margin="15">
+                            <StackPanel>
+                                <!--<materialDesign:PackIcon Kind="OneUp" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto"/>-->
+                                <TextBlock Text="Stop" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                            </StackPanel>
+                        </Button>
+                    </StackPanel>
+                </Grid>
+
+                <Grid Grid.Row="1">
+                    <Button Content="Lock UnLock" Foreground="Orange" Background="{x:Null}" Margin="0,10,455,168"/>
+                    <StackPanel Orientation="Horizontal"
+                                HorizontalAlignment="Center">
+
+                        <Button Margin="15" 
+                                Width="100" Height="100"
+                                Style="{StaticResource MaterialDesignRaisedButton}"
+                                materialDesign:ButtonAssist.CornerRadius="10"
+                                Command="{Binding PosMoveCommand}"
+                                CommandParameter="Lock">
+                            <TextBlock Text="Lock"/>
+                        </Button>
+
+                        <Button Margin="15"
+                                Width="100" Height="100"
+                                Style="{StaticResource MaterialDesignRaisedButton}"
+                                materialDesign:ButtonAssist.CornerRadius="10"
+                                Command="{Binding PosMoveCommand}"
+                                CommandParameter="UnLock">
+                            <TextBlock Text="UnLock"/>
+                        </Button>
+
+                    </StackPanel>
+                </Grid>
+            </Grid>
+        </Grid>
+        
+        <Grid Grid.Column="1" Background="#37474f">
+            <Border Margin="1" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
+            <StackPanel>
+                <Button Margin="7,20" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding CloseDialogCommand}" CommandParameter="true">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="ExitToApp" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Close" VerticalAlignment="Stretch" HorizontalAlignment="Center" />
+                    </StackPanel>
+                </Button>
+            </StackPanel>
+        </Grid>
+    </Grid>
+</UserControl>

+ 28 - 0
Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlView.xaml.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+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.Navigation;
+using System.Windows.Shapes;
+
+namespace OHV.Module.Interactivity.PopUp
+{
+    /// <summary>
+    /// ConveyorControlView.xaml에 대한 상호 작용 논리
+    /// </summary>
+    public partial class ConveyorControlView : UserControl
+    {
+        public ConveyorControlView( )
+        {
+            InitializeComponent();
+        }
+    }
+}

+ 167 - 0
Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlViewModel.cs

@@ -0,0 +1,167 @@
+using OHV.Common.Events;
+using Prism.Commands;
+using Prism.Events;
+using Prism.Mvvm;
+using Prism.Services.Dialogs;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+
+namespace OHV.Module.Interactivity.PopUp
+{
+    public class ConveyorControlViewModel : BindableBase, IDialogAware
+    {
+        private DelegateCommand<string> _closeDialogCommand;
+        public DelegateCommand<string> CloseDialogCommand =>
+            _closeDialogCommand ?? ( _closeDialogCommand = new DelegateCommand<string>( CloseDialog ) );
+
+        public event Action<IDialogResult> RequestClose;
+
+
+        private string _title = "ConveyorControlView";
+        public string Title
+        {
+            get { return this._title; }
+            set
+            {
+                this.SetProperty( ref this._title , value );
+            }
+        }
+
+        public ICommand ConveyorRunCommand { get; set; }
+        public ICommand PosMoveCommand { get; set; }
+
+        IEventAggregator eventAggregator;
+        public ConveyorControlViewModel( IEventAggregator _ea )
+        {
+            this.eventAggregator = _ea;
+
+            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Unsubscribe( UICallbackCommunivation );
+            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Subscribe( UICallbackCommunivation , ThreadOption.UIThread );
+
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe( AxisUICallbackCommunication );
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Subscribe( AxisUICallbackCommunication , ThreadOption.UIThread );
+
+            this.ConveyorRunCommand = new DelegateCommand<object>( ExecuteCvCommand );
+            this.PosMoveCommand = new DelegateCommand<object>( ExecutePosMoveCommand );
+        }
+
+        private void ExecutePosMoveCommand( object obj )
+        {
+            var selectedPos = obj.ToString();
+
+            switch(selectedPos)
+            {
+                case "Lock":
+                    break;
+                case "UnLock":
+                    break;
+            }
+
+            var msg = new AxisControlEventArgs
+            {
+                Dir = AxisControlEventArgs.eEventDir.ToBack ,
+                Kind = AxisControlEventArgs.eAxisControlKind.Move ,
+                Axis = AxisControlEventArgs.eAxises.LR_SYNC ,
+            };
+
+            this.AxisPublishEvent( msg );
+        }
+
+        private void AxisPublishEvent( AxisControlEventArgs msg )
+        {
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( msg );
+        }
+
+        private void AxisUICallbackCommunication( AxisControlEventArgs _args )
+        {
+            if ( _args.Dir == AxisControlEventArgs.eEventDir.ToFront )
+            {
+
+            }
+        }
+
+        private void UICallbackCommunivation( IOControlEventArgs _args )
+        {
+            if ( _args.EventDir == IOControlEventArgs.eEventDir.ToFront )
+            {
+
+            }
+        }
+
+        private void ExecuteCvCommand( object _obj )
+        {
+            var type = _obj.ToString();
+            var order = string.Empty;
+            switch(type)
+            {
+                case "CW":
+                    order = "OUT_CV_CWCCW";
+                    break;
+                case "CCW":
+                    order = "OUT_CV_CWCCW";
+                    break;
+                case "STOP":
+                    order = "STOP";
+                    break;
+            }
+
+            var msg = new IOControlEventArgs
+            {
+                OutPutTag = order.ToString()
+            };
+
+            this.PublishEvent( msg );
+        }
+
+        private void PublishEvent( IOControlEventArgs _args )
+        {
+            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Publish( _args );
+        }
+
+        #region Dialog
+        public bool CanCloseDialog( )
+        {
+            return true;
+        }
+
+        public void OnDialogClosed( )
+        {
+            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Publish( new IOControlEventArgs { EventDir = IOControlEventArgs.eEventDir.ToBack } );
+            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Unsubscribe( UICallbackCommunivation );
+
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack } );
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe( AxisUICallbackCommunication );
+        }
+
+        public void OnDialogOpened( IDialogParameters parameters )
+        {
+            /*IO*/
+            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Publish( new IOControlEventArgs { EventDir = IOControlEventArgs.eEventDir.ToBack } );
+
+            /*Lock Axis*/
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack } );
+        }
+
+        private void CloseDialog( string parameter )
+        {
+            ButtonResult result = ButtonResult.None;
+
+            if ( parameter?.ToLower() == "true" )
+                result = ButtonResult.OK;
+            else if ( parameter?.ToLower() == "false" )
+                result = ButtonResult.Cancel;
+
+            RaiseRequestClose( new DialogResult( result ) );
+        }
+
+        public virtual void RaiseRequestClose( IDialogResult dialogResult )
+        {
+            RequestClose?.Invoke( dialogResult );
+        }
+        #endregion
+    }
+}

+ 3 - 1
Dev/OHV/OHV.Module.ListViews/SubViews/VehicleCommandDeleteView.xaml

@@ -5,7 +5,9 @@
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
              xmlns:local="clr-namespace:OHV.Module.ListViews.SubViews"
              mc:Ignorable="d" 
-             d:DesignHeight="450" d:DesignWidth="800">
+             d:DesignHeight="450" d:DesignWidth="800"
+             Background="#263238">
+    
     <Grid>
             
     </Grid>

+ 1 - 0
Dev/OHV/OHV.Module.MainViews/Views/AutoView.xaml

@@ -27,6 +27,7 @@
             <GridSplitter Height="3" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Background="Gray"></GridSplitter>
             <ContentControl Grid.Row="1" prism:RegionManager.RegionName="{x:Static OHVCommonShareds:RegionNames.VehicleSubCmdList}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="auto" Height="auto"/>
             <GridSplitter Grid.Row="1" Height="3" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Background="Gray"></GridSplitter>
+            <!--<ContentControl Grid.Row="2" prism:RegionManager.RegionName="{x:Static OHVCommonShareds:RegionNames.VehicleStatus}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="auto" Height="auto"/>-->
         </Grid>
 
     </Grid>

+ 5 - 5
Dev/OHV/OHV.Module.MainViews/Views/UnitView.xaml

@@ -105,17 +105,17 @@
                             </StackPanel>
                         </Button>
 
-                        <!--<Button HorizontalAlignment="Stretch"
+                        <Button HorizontalAlignment="Stretch"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             Margin="20"
                             materialDesign:ButtonAssist.CornerRadius="20"
-                            Command="{Binding OcsPopup}"
+                            Command="{Binding ConveyorPopup}"
                             Height="150" Width="220">
                             <StackPanel>
-                                <materialDesign:PackIcon Kind="NetworkOutline" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="auto" Height="100"/>
-                                <TextBlock FontSize="30" Text="OCS" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                                <materialDesign:PackIcon Kind="ElevatorUp" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="auto" Height="100"/>
+                                <TextBlock FontSize="30" Text="Conveyor" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                             </StackPanel>
-                        </Button>-->
+                        </Button>
                     </StackPanel>
                 </Grid>
             </Grid>

+ 7 - 0
Dev/OHV/OHV.Module.MainViews/Views/UnitViewModel.cs

@@ -22,6 +22,7 @@ namespace OHV.Module.MainViews.Views
         public ICommand InoutPupup { get; set; }
         public ICommand BatteryPopup { get; set; }
         public ICommand OpticalReaderPopup { get; set; }
+        public ICommand ConveyorPopup { get; set; }
 
         public UnitViewModel( IEventAggregator _ea , VCSystem _vcSystem , MessageController _msgController )
         {
@@ -33,6 +34,12 @@ namespace OHV.Module.MainViews.Views
             this.InoutPupup = new DelegateCommand( ExecuteInOutCommand );
             this.BatteryPopup = new DelegateCommand( ExecuteBatteryCommand );
             this.OpticalReaderPopup = new DelegateCommand( ExecuteOpticalReadCommand );
+            this.ConveyorPopup = new DelegateCommand( ExecuteConveyorPopup );
+        }
+
+        private void ExecuteConveyorPopup( )
+        {
+            this.msgController.ShowConveyorControlPopupView();
         }
 
         private void ExecuteOpticalReadCommand( )

+ 116 - 0
Dev/OHV/OHV.Module.Status/OHV.Module.Status.csproj

@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{D00450D6-DE54-4584-A377-7AA5D5964D2C}</ProjectGuid>
+    <OutputType>library</OutputType>
+    <RootNamespace>OHV.Module.Status</RootNamespace>
+    <AssemblyName>OHV.Module.Status</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <Deterministic>true</Deterministic>
+    <NuGetPackageImportStamp>
+    </NuGetPackageImportStamp>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="CommonServiceLocator, Version=2.0.4.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
+      <HintPath>..\packages\CommonServiceLocator.2.0.4\lib\net45\CommonServiceLocator.dll</HintPath>
+    </Reference>
+    <Reference Include="MaterialDesignColors, Version=1.2.2.920, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\MaterialDesignColors.1.2.2\lib\net45\MaterialDesignColors.dll</HintPath>
+    </Reference>
+    <Reference Include="MaterialDesignThemes.Wpf, Version=3.0.1.920, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\MaterialDesignThemes.3.0.1\lib\net45\MaterialDesignThemes.Wpf.dll</HintPath>
+    </Reference>
+    <Reference Include="Prism, Version=7.2.0.1422, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Core.7.2.0.1422\lib\net45\Prism.dll</HintPath>
+    </Reference>
+    <Reference Include="Prism.Wpf, Version=7.2.0.1422, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Wpf.7.2.0.1422\lib\net45\Prism.Wpf.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.ValueTuple.4.5.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Wpf.7.2.0.1422\lib\net45\System.Windows.Interactivity.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="UserControl1.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Compile Include="UserControl1.xaml.cs">
+      <DependentUpon>UserControl1.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="packages.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Import Project="..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets" Condition="Exists('..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets')" />
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets'))" />
+  </Target>
+</Project>

+ 55 - 0
Dev/OHV/OHV.Module.Status/Properties/AssemblyInfo.cs

@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 
+// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
+// 이러한 특성 값을 변경하세요.
+[assembly: AssemblyTitle("OHV.Module.Status")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("OHV.Module.Status")]
+[assembly: AssemblyCopyright("Copyright ©  2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
+[assembly: ComVisible(false)]
+
+//지역화 가능 애플리케이션 빌드를 시작하려면 다음을 설정하세요.
+//.csproj 파일에서 <PropertyGroup> 내에 <UICulture>CultureYouAreCodingWith</UICulture>를
+//설정하십시오. 예를 들어 소스 파일에서 영어(미국)를
+//사용하는 경우 <UICulture>를 en-US로 설정합니다. 그런 다음 아래
+//NeutralResourceLanguage 특성의 주석 처리를 제거합니다. 아래 줄의 "en-US"를 업데이트하여
+//프로젝트 파일의 UICulture 설정과 일치시킵니다.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly:ThemeInfo(
+    ResourceDictionaryLocation.None, //테마별 리소스 사전의 위치
+                             //(페이지 또는 응용 프로그램 리소스 사진에
+                             // 리소스가 없는 경우에 사용됨)
+    ResourceDictionaryLocation.SourceAssembly //제네릭 리소스 사전의 위치
+                                      //(페이지 또는 응용 프로그램 리소스 사진에
+                                      // 리소스가 없는 경우에 사용됨)
+)]
+
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+//      주 버전
+//      부 버전 
+//      빌드 번호
+//      수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
+// 기본값으로 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 62 - 0
Dev/OHV/OHV.Module.Status/Properties/Resources.Designer.cs

@@ -0,0 +1,62 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     이 코드는 도구를 사용하여 생성되었습니다.
+//     런타임 버전:4.0.30319.42000
+//
+//     파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
+//     이러한 변경 내용이 손실됩니다.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace OHV.Module.Status.Properties {
+    
+    
+    /// <summary>
+    ///   지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
+    /// </summary>
+    // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
+    // 클래스에서 자동으로 생성되었습니다.
+    // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여
+    // ResGen을 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if ((resourceMan == null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("OHV.Module.Status.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을
+        ///   재정의합니다.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}

+ 117 - 0
Dev/OHV/OHV.Module.Status/Properties/Resources.resx

@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 30 - 0
Dev/OHV/OHV.Module.Status/Properties/Settings.Designer.cs

@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace OHV.Module.Status.Properties
+{
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}

+ 7 - 0
Dev/OHV/OHV.Module.Status/Properties/Settings.settings

@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

+ 15 - 0
Dev/OHV/OHV.Module.Status/UserControl1.xaml

@@ -0,0 +1,15 @@
+<UserControl x:Class="OHV.Module.Status.UserControl1"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:OHV.Module.Status"
+             xmlns:prism="http://prismlibrary.com/"
+             xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+             prism:ViewModelLocator.AutoWireViewModel="True"
+             mc:Ignorable="d" 
+             d:DesignHeight="450" d:DesignWidth="800">
+    <Grid>
+            
+    </Grid>
+</UserControl>

+ 28 - 0
Dev/OHV/OHV.Module.Status/UserControl1.xaml.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+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.Navigation;
+using System.Windows.Shapes;
+
+namespace OHV.Module.Status
+{
+    /// <summary>
+    /// UserControl1.xaml에 대한 상호 작용 논리
+    /// </summary>
+    public partial class UserControl1 : UserControl
+    {
+        public UserControl1()
+        {
+            InitializeComponent();
+        }
+    }
+}

+ 9 - 0
Dev/OHV/OHV.Module.Status/packages.config

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="CommonServiceLocator" version="2.0.4" targetFramework="net45" />
+  <package id="MaterialDesignColors" version="1.2.2" targetFramework="net45" />
+  <package id="MaterialDesignThemes" version="3.0.1" targetFramework="net45" />
+  <package id="Prism.Core" version="7.2.0.1422" targetFramework="net45" />
+  <package id="Prism.Wpf" version="7.2.0.1422" targetFramework="net45" />
+  <package id="System.ValueTuple" version="4.5.0" targetFramework="net45" />
+</packages>

+ 24 - 23
Dev/OHV/OHV.Vehicle/Concept/D_MainWindow.xaml

@@ -122,8 +122,8 @@
                 <Grid.RowDefinitions>
                     <RowDefinition/>
                     <RowDefinition/>
-                    <RowDefinition/>
-                    <RowDefinition/>
+                    <RowDefinition Height="140"/>
+                    <RowDefinition Height="110"/>
                     <RowDefinition/>
                 </Grid.RowDefinitions>
 
@@ -140,7 +140,7 @@
                                     <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="Buzzer Stop" FontSize="15"/>
                                 </StackPanel>
                             </Button>
-                            
+
                             <Button Margin="15" Width="200" Height="50"
                                     Command="{Binding EmergencyStopCommand}"
                                     CommandParameter="Emergency">
@@ -149,7 +149,7 @@
                                     <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="Emergency Stop" FontSize="15"/>
                                 </StackPanel>
                             </Button>
-                            
+
                         </StackPanel>
                     </StackPanel>
                 </Grid>
@@ -162,21 +162,6 @@
                             <Button Content="Vehicle ID" Margin="3" Background="{x:Null}"/>
                             <Button Content="Vehicle IP" Margin="3" Background="{x:Null}"/>
                             <Button Content="OCS IP" Margin="3" Background="{x:Null}"/>
-                        </StackPanel>
-
-                        <StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
-                            <Button Content="{Binding VehicleID, FallbackValue=VM00001}" Margin="3" Background="{x:Null}"/>
-                            <Button Content="{Binding VehicleIP, FallbackValue=127.0.0.1}" Margin="3" Background="{x:Null}"/>
-                            <Button Content="{Binding OcsIP, FallbackValue=192.168.0.10}" Margin="3" Background="{x:Null}"/>
-                        </StackPanel>
-                    </StackPanel>
-                </Grid>
-
-                <Grid Grid.Row="2">
-                    <Border Margin="5" BorderBrush="#FF00FFD3" BorderThickness="2">
-                    </Border>
-                    <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
-                        <StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
                             <Button Content="Version" Margin="3" Background="{x:Null}"/>
                             <Button Margin="3" Height="50" Background="{x:Null}">
                                 <StackPanel>
@@ -187,6 +172,9 @@
                         </StackPanel>
 
                         <StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
+                            <Button Content="{Binding VehicleID, FallbackValue=VM00001}" Margin="3" Background="{x:Null}"/>
+                            <Button Content="{Binding VehicleIP, FallbackValue=127.0.0.1}" Margin="3" Background="{x:Null}"/>
+                            <Button Content="{Binding OcsIP, FallbackValue=192.168.0.10}" Margin="3" Background="{x:Null}"/>
                             <Button Content="{Binding SwVersion, FallbackValue=OHV.1.0.0.1}" Margin="3" Background="{x:Null}"/>
                             <Button Height="50" Margin="3" Background="{x:Null}">
                                 <TextBlock Text="{Binding LastBuildedTime, FallbackValue=2020-03-09 14:53:06, StringFormat=' \{0:yyyy-MM-dd HH:mm:ss\}'}"/>
@@ -195,7 +183,7 @@
                     </StackPanel>
                 </Grid>
 
-                <Grid Grid.Row="3">
+                <Grid Grid.Row="2">
                     <Border Margin="5" BorderBrush="#FF00FFD3" BorderThickness="2">
                     </Border>
                     <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
@@ -209,23 +197,36 @@
                             <Button Margin="0,4,0,0" Height="30" Width="auto" Background="{x:Null}">
                                 <TextBlock HorizontalAlignment="Center"><Run Text="{Binding CPU, StringFormat={}{0:0.0}%}"/></TextBlock>
                             </Button>
-                            
+
                             <Button Margin="0,8,0,0" Background="{x:Null}">
                                 <StackPanel>
                                     <TextBlock Text="{Binding RAM, StringFormat={}{0:0.0} GB}" HorizontalAlignment="Center"/>
                                 </StackPanel>
                             </Button>
-                            
+
                             <Button Margin="0,5,0,0" Background="{x:Null}">
                                 <StackPanel>
                                     <TextBlock Text="{Binding CDrive, StringFormat={}{0:0} GB}" HorizontalAlignment="Center"/>
                                 </StackPanel>
                             </Button>
-                            
+
                         </StackPanel>
                     </StackPanel>
                 </Grid>
 
+                <Grid Grid.Row="3">
+                    <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}">
+                            <StackPanel Orientation="Horizontal">
+                                <materialDesign:PackIcon Kind="CircleArrows" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="40" Width="auto" Margin="0,0,10,0" Background="DarkRed"/>
+                                <TextBlock Text="Alarm Reset" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="30"/>
+                            </StackPanel>
+                        </Button>
+                    </StackPanel>
+                </Grid>
+
                 <DockPanel Grid.Row="4">
                     <Border BorderBrush="#FF00FFD3" BorderThickness="2" Margin="5">
                         <StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">

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

@@ -153,6 +153,7 @@ namespace OHV.Vehicle.Concept
 
         public ICommand StartCommand { get; set; }
         public ICommand StopCommand { get; set; }
+        public ICommand AlarmResetCommand { get; set; }
 
         IRegionManager regionManager;
         public Common.Events.HostConnectedEventArgs.eConnectedState State { get; set; }
@@ -192,6 +193,7 @@ namespace OHV.Vehicle.Concept
             this.ChangeLanguage = new DelegateCommand(Execte_ChangeLanguage);
             this.StartCommand = new DelegateCommand(ExecuteStartCommand);
             this.StopCommand = new DelegateCommand(ExecuteStopCommand);
+            this.AlarmResetCommand = new DelegateCommand( ExecuteAlarmResetCommand);
 
             DispatcherTimer dateTimer = new DispatcherTimer();
             dateTimer.Tick += (object sender, EventArgs e) =>
@@ -219,6 +221,10 @@ namespace OHV.Vehicle.Concept
             this.LastBuildedTime = new Helpler.AssemblyInfo().Get_BuildDateTime();
         }
 
+        private void ExecuteAlarmResetCommand( )
+        {
+        }
+
         private void ExecuteStopCommand()
         {
             this.messageController.ShowConfirmationPopupView("Request Vehicle Auto Mode ?", r =>
@@ -267,10 +273,10 @@ namespace OHV.Vehicle.Concept
         private void ExecuteSystemOffCommand()
         {
             this.messageController.ShowConfirmationPopupView("System ShutDown ?", r =>
-          {
-              if (r.Result == ButtonResult.OK)
-                  App.Current.Shutdown();
-          });
+              {
+                  if (r.Result == ButtonResult.OK)
+                      App.Current.Shutdown();
+              });
         }
 
         private void Navigate(object obj)

+ 7 - 0
Dev/OHV/OHV.sln

@@ -43,6 +43,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OHV.LanguageHelper", "OHV.L
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OHV.Module.ListViews", "OHV.Module.ListViews\OHV.Module.ListViews.csproj", "{0043B4EC-A651-401C-9845-57A7C7576E28}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OHV.Module.Status", "OHV.Module.Status\OHV.Module.Status.csproj", "{D00450D6-DE54-4584-A377-7AA5D5964D2C}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -105,6 +107,10 @@ Global
 		{0043B4EC-A651-401C-9845-57A7C7576E28}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{0043B4EC-A651-401C-9845-57A7C7576E28}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{0043B4EC-A651-401C-9845-57A7C7576E28}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D00450D6-DE54-4584-A377-7AA5D5964D2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D00450D6-DE54-4584-A377-7AA5D5964D2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D00450D6-DE54-4584-A377-7AA5D5964D2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D00450D6-DE54-4584-A377-7AA5D5964D2C}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -124,6 +130,7 @@ Global
 		{D6402D97-2206-4D55-8097-8DA9A01568CB} = {6C7A1445-7F2F-46C4-9AAD-AEB739F9BD2D}
 		{712D75B5-89DD-4064-BC4B-2F9D9F157604} = {B2DE533E-C8A8-41CD-97CB-E88905233610}
 		{0043B4EC-A651-401C-9845-57A7C7576E28} = {6C7A1445-7F2F-46C4-9AAD-AEB739F9BD2D}
+		{D00450D6-DE54-4584-A377-7AA5D5964D2C} = {6C7A1445-7F2F-46C4-9AAD-AEB739F9BD2D}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {2222F9E2-CBEF-4156-9636-5DF54ECDDA89}

+ 10 - 3
Dev/OHV/VehicleControlSystem/ControlLayer/Clamp.cs

@@ -41,16 +41,17 @@ namespace VehicleControlSystem.ControlLayer
         {
             if (args.Dir == AxisControlEventArgs.eEventDir.ToBack)
             {
-                switch (args.Kind)
+                switch ( args.Kind )
                 {
                     case AxisControlEventArgs.eAxisControlKind.Stop:
                         break;
                     case AxisControlEventArgs.eAxisControlKind.EStop:
                         break;
                     case AxisControlEventArgs.eAxisControlKind.Move:
+                        this.ReqOrderByMove( args );
                         break;
                     case AxisControlEventArgs.eAxisControlKind.Jog:
-                        this.ReqJog(args);
+                        this.ReqJog( args );
                         break;
                     case AxisControlEventArgs.eAxisControlKind.CurrentPosition:
                         break;
@@ -68,7 +69,7 @@ namespace VehicleControlSystem.ControlLayer
                         this.taskCancel.WaitAll();
                         break;
                     case AxisControlEventArgs.eAxisControlKind.OriginReturn:
-                        this.ReqOriginReturn(args);
+                        this.ReqOriginReturn( args );
                         break;
                     case AxisControlEventArgs.eAxisControlKind.FaultReset:
                         this.ReqFaultReset( args );
@@ -190,6 +191,12 @@ namespace VehicleControlSystem.ControlLayer
 
             this.PublishEvent(msg);
         }
+
+        void ReqOrderByMove( AxisControlEventArgs arg )
+        {
+            /*Lock & UnLock Manual 동시에 Move 사용*/
+        }
+
         #endregion
 
         void CreateAxis()

BIN
Dev/SerialModule/BatteryTabos/BatteryTabos/.vs/BatteryTabos/v16/Server/sqlite3/storage.ide


BIN
Dev/SerialModule/BatteryTabos/BatteryTabos/.vs/BatteryTabos/v16/Server/sqlite3/storage.ide-shm


BIN
Dev/SerialModule/BatteryTabos/BatteryTabos/.vs/BatteryTabos/v16/Server/sqlite3/storage.ide-wal


+ 4 - 3
Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/MainWindow.xaml.cs

@@ -1,6 +1,7 @@
 using BatteryTabos;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using System.Windows;
+using static BatteryTabos.Manager;
 
 namespace BatteryCommTest
 {
@@ -14,14 +15,14 @@ namespace BatteryCommTest
         {
             InitializeComponent();
 
-            this.tabos = new Manager("COM3");
+            this.tabos = new Manager( "COM3" );
         }
 
         private void SerialOpen_Click( object sender , RoutedEventArgs e )
         {
             this.tabos.Open();
         }
-         
+
         private void SerialClose_Click( object sender , RoutedEventArgs e )
         {
             this.tabos.Close();
@@ -29,7 +30,7 @@ namespace BatteryCommTest
 
         private void WriteToByte_Click( object sender , RoutedEventArgs e )
         {
-            this.tabos.WriteToByte();
+            this.tabos.WriteToByte( ePacketType.VCSST );
         }
 
         private void WriteToString_Click( object sender , RoutedEventArgs e )

+ 72 - 55
Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryTabos/Manager.cs

@@ -15,7 +15,7 @@ namespace BatteryTabos
         #region Total Packet Data
         readonly byte StartSentence1 = 0xAF;
         readonly byte StartSentence2 = 0xFA;
-        readonly byte Address = 0x61;
+        readonly byte Address = 0x60;
         readonly byte Length = 0x05;
         readonly byte ReqCommand = 0x01;
         readonly byte Order = 0x60;
@@ -30,6 +30,13 @@ namespace BatteryTabos
         readonly byte BatteryDataErrorCommand = 0x1F;
         #endregion
 
+        public enum ePacketType
+        {
+            VCSST = 0, // Voltage, Current, Soc, State
+            SCTDCT,    // Soh, ChargeTime, DisChargeTime
+        }
+        public ePacketType packetType { get; set; }
+
         Rs232c battery;
         Config _config { get; set; }
 
@@ -44,34 +51,13 @@ namespace BatteryTabos
             get { return battery.serial.IsOpen; }
         }
 
-        byte[] pp;
-        string pk;
+        byte[] packet;
+
         public Manager( string _com )
         {
             this._config = new Config();
 
-            /*Test ComPort*/
             this.battery = new Rs232c( _com );
-            var s = StartSentence1 + StartSentence2;
-            var e = EndSentence1 + EndSentence2;
-
-            string p = s.ToString()+ Address.ToString()+Length.ToString()+ReqCommand.ToString()+Order.ToString()+Kind1.ToString()+Kind2.ToString()+_CheckSum.ToString() + e.ToString();
-            pk = p;
-            //this._allpacket = new byte[] { s , Address , Length , ReqCommand , Order , Kind1 , Kind2 , _CheckSum , e };
-
-            pp = new byte[ 11 ];
-            pp[ 0 ] = 0xAF;
-            pp[ 1 ] = 0xFA;
-            pp[ 2 ] = 0x61;
-            pp[ 3 ] = 0x05;
-            pp[ 4 ] = 0x01;
-            pp[ 5 ] = 0x61;
-            pp[ 6 ] = 0x30;
-            pp[ 7 ] = 0x07;
-            pp[ 8 ] = 0x17;//CheckSum( pp );
-            pp[ 9 ] = 0xAF;
-            pp[ 10 ] = 0xA0;
-
 
             /*event Thread Pull Start*/
             QW = ThreadUtils.Invoke( QueWorker );
@@ -112,12 +98,12 @@ namespace BatteryTabos
         }
 
         private void Receive( object sender , SerialDataReceivedEventArgs e )
-        {
+        { 
             try
             {
                 if ( this.battery.serial.IsOpen && this.battery.serial != null )
                 {
-                    var recv = new byte[ this.battery.serial.BytesToRead ];
+                    var recv = new Byte[ this.battery.serial.BytesToRead ];
                     this.battery.serial.Read( recv , 0 , recv.Length );
                     ByteParse( recv );
 
@@ -127,42 +113,30 @@ namespace BatteryTabos
             catch ( Exception ex ) { }
         }
 
-        private void ByteParse( byte[] data )
+        private void ByteParse( Byte[] data )
         {
             //var rt = CheckSum(data);
             //if(rt){}
 
-            var stvol = BitConverter.ToString( data , 6 , 2 );
-            var _voltage = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 0.01;
+            var V = ( (int)data[6]*256 + (int)data[7] ) * 0.01;
 
-            /*-32768 ~ +32767*/
-            var stcur = BitConverter.ToString( data , 8 , 2 );
-            var _current = Convert.ToInt16( stcur , 16 ) * 0.01;
+            var A = ( data[ 8 ] * 256 + data[ 9 ] ) * 0.01;
 
-            var stsoc = BitConverter.ToString( data , 10 , 2 );
-            var _soc = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 1;
+            var SOC = ( data[ 10 ] * 256 + data[ 11 ] );
 
-            var stbr = BitConverter.ToString( data , 12 , 2 );
-            var _batteryStatus = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber );
+            var B = ( data[ 12 ] * 256 + data[ 13 ] );
 
-            var stct = BitConverter.ToString( data , 14 , 2 );
-            var _chargeTime = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 1;
+            var CT = ( data[ 14 ] * 256 + data[ 15 ] );
 
-            var stdct = BitConverter.ToString( data , 16 , 2 );
-            var _disChargeTime = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 1;
+            var DCT = ( data[ 16 ] * 256 + data[ 17 ] );
 
-            /*-32768 ~ +32767*/
-            var sttp = BitConverter.ToString( data , 18 , 2 );
-            var _temperature = Convert.ToInt16( sttp , 16 ) * 0.01;
+            var T = ( data[ 18 ] * 256 + data[ 19 ] ) * 0.1;
 
-            var stsoh = BitConverter.ToString( data , 20 , 2 );
-            var _soh = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 1;
+            var SOH = ( data[ 20 ] * 256 + data[ 21 ] );
 
-            var stps = BitConverter.ToString( data , 22 , 2 );
-            var _residualcapacity = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 0.01;
+            var Cap = ( data[ 22 ] * 256 + data[ 23 ] ) * 0.01;
 
-            var stpe = BitConverter.ToString( data , 24 , 2 );
-            var _residualEnergy = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 0.1;
+            var E = ( data[ 24 ] * 256 + data[ 25 ] ) * 0.1;
         }
 
         private void QueWorker( )
@@ -191,16 +165,24 @@ namespace BatteryTabos
             }
         }
 
-        public void WriteToByte( /*byte[] _packet*/ )
+        public void WriteToByte( ePacketType packetType )
         {
             try
             {
                 if ( this.IsOpen && this.battery.serial != null )
                 {
-                    /*byte*/
-                    //this.battery.serial.Write( _packet , 0 , _packet.Length );
-                    //this.battery.serial.Write( _allpacket , 0 , _allpacket.Length );
-                    this.battery.serial.Write( pp , 0 , pp.Length );
+                    byte[] _data = null;
+                    switch ( packetType )
+                    {
+                        case ePacketType.VCSST:
+                            _data = OrderToInfomation();
+                            break;
+                        case ePacketType.SCTDCT:
+                            _data = OrderToCharging();
+                            break;
+                    }
+                    
+                    this.battery.serial.Write( _data , 0 , _data.Length );
 
                     System.Diagnostics.Debug.WriteLine( $"[Serial] - Write : {_allpacket.ToString()} -" );
                 }
@@ -208,6 +190,42 @@ namespace BatteryTabos
             catch ( Exception ex ) { }
         }
 
+        private byte[] OrderToInfomation()
+        {
+            packet = new byte[ 11 ];
+            packet[ 0 ] = 0xAF;
+            packet[ 1 ] = 0xFA;
+            packet[ 2 ] = 0x61; //addr
+            packet[ 3 ] = 0x05;
+            packet[ 4 ] = 0x01;
+            packet[ 5 ] = 0x61;
+            packet[ 6 ] = 0x4F; // kind 1
+            packet[ 7 ] = 0x00; // kind 2
+            packet[ 8 ] = 0x17; //Checksum();
+            packet[ 9 ] = 0xAF;
+            packet[ 10 ] = 0xA0;
+
+            return packet;
+        }
+
+        private byte[] OrderToCharging()
+        {
+            packet = new byte[ 11 ];
+            packet[ 0 ] = 0xAF;
+            packet[ 1 ] = 0xFA;
+            packet[ 2 ] = 0x61; //addr
+            packet[ 3 ] = 0x05;
+            packet[ 4 ] = 0x01;
+            packet[ 5 ] = 0x61; //addr
+            packet[ 6 ] = 0x30; // kind 1
+            packet[ 7 ] = 0x07; // kind 2
+            packet[ 8 ] = 0x17; //0x4E; //0x17;//CheckSum( pp );
+            packet[ 9 ] = 0xAF;
+            packet[ 10 ] = 0xA0;
+
+            return packet;
+        }
+
         public void WriteToString( /*string _packet*/ )
         {
             //var _packet = Encoding.Default.GetString( _allpacket );
@@ -216,7 +234,6 @@ namespace BatteryTabos
                 if ( this.IsOpen )
                 {
                     //this.battery.serial.Write( _packet );
-                    this.battery.serial.Write( pk );
                 }
             }
             catch ( Exception ex ) { throw new Exception(); }