ys-hwang %!s(int64=6) %!d(string=hai) anos
pai
achega
dc495a4b7a
Modificáronse 21 ficheiros con 672 adicións e 111 borrados
  1. 3 17
      Dev/OHV/OHV.Module.Interactivity/PopUp/BatteryConfigView.xaml
  2. 2 12
      Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs
  3. BIN=BIN
      Dev/SerialModule/BatteryTabos/BatteryTabos/.vs/BatteryTabos/v16/Server/sqlite3/storage.ide
  4. BIN=BIN
      Dev/SerialModule/BatteryTabos/BatteryTabos/.vs/BatteryTabos/v16/Server/sqlite3/storage.ide-shm
  5. BIN=BIN
      Dev/SerialModule/BatteryTabos/BatteryTabos/.vs/BatteryTabos/v16/Server/sqlite3/storage.ide-wal
  6. 6 0
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/App.config
  7. 9 0
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/App.xaml
  8. 17 0
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/App.xaml.cs
  9. 111 0
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/BatteryCommTest.csproj
  10. 20 0
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/MainWindow.xaml
  11. 40 0
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/MainWindow.xaml.cs
  12. 55 0
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/Properties/AssemblyInfo.cs
  13. 71 0
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/Properties/Resources.Designer.cs
  14. 117 0
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/Properties/Resources.resx
  15. 30 0
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/Properties/Settings.Designer.cs
  16. 7 0
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/Properties/Settings.settings
  17. 4 0
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/packages.config
  18. 6 0
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryTabos.sln
  19. 6 0
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryTabos/BatteryTabos.csproj
  20. 137 66
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryTabos/Manager.cs
  21. 31 16
      Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryTabos/Rs232c.cs

+ 3 - 17
Dev/OHV/OHV.Module.Interactivity/PopUp/BatteryConfigView.xaml

@@ -197,16 +197,7 @@
                         </TextBlock>
                     </Border>
                 </Grid>
-
-                <!--<Grid Grid.Row="1">
-                    <StackPanel VerticalAlignment="Center">
-                        <GroupBox
-                            Margin="30,0,20,0"
-                            Header="Data Receive" FontSize="15">
-                            <TextBox Text="{Binding BatteryReceive, FallbackValue=[Receive] : xxxxx}" IsReadOnly="True" Foreground="Orange"/>
-                        </GroupBox>
-                    </StackPanel>
-                </Grid>-->
+                
                 <Grid Grid.Row="1">
                     <Grid.RowDefinitions>
                         <RowDefinition/>
@@ -234,7 +225,7 @@
                         <Button Command="{Binding BatteryCloseCommand}" Content="Battery Close" Grid.Column="2" Margin="10" Height="Auto"/>
                         <Button Content="Pakcet Send" Grid.Column="2" Grid.Row="1" Margin="10" Height="Auto"/>
                     </Grid>
-                    
+
                     <Border Grid.Row="1" BorderBrush="Gray" BorderThickness="1">
                         <TextBox Grid.Row="1" Text="{Binding BatteryReceive, FallbackValue=[Receive] : xxxxx}" 
                                  IsReadOnly="True" Foreground="Orange"
@@ -256,9 +247,4 @@
             </StackPanel>
         </Grid>
     </Grid>
-</UserControl>
-
-
-<!--<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
-    <TextBlock><Run Text="{Binding Title, FallbackValue=Battery Config View}" FontSize="40"/></TextBlock>
-</StackPanel>-->
+</UserControl>

+ 2 - 12
Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs

@@ -147,13 +147,12 @@ namespace OHV.Vehicle.Concept
         public ICommand TestCommand { get; set; }
         public ICommand NavigateCommand { get; set; }
         public ICommand SystemOffCommand { get; set; }
-<<<<<<< HEAD
+
         public ICommand BuzzerStopCommand { get; set; }
         public ICommand EmergencyStopCommand { get; set; }
-=======
+
         public ICommand StartCommand { get; set; }
         public ICommand StopCommand { get; set; }
->>>>>>> 52c448e88e2005d6b9bc85ad2c7b734e5cb29907
 
         IRegionManager regionManager;
         public Common.Events.HostConnectedEventArgs.eConnectedState State { get; set; }
@@ -167,7 +166,6 @@ namespace OHV.Vehicle.Concept
             //LanguageHalper.LanguagesSelcter.ChangLanguage(LanguageHalper.eLanguageType.Chinese);
         }
 
-<<<<<<< HEAD
         SqliteManager sql;
 
         public D_MainWindowViewModel( IEventAggregator _ea , VCSystem cSystem , IRegionManager _regionManager , MessageController _msgController, SqliteManager _sql )
@@ -177,16 +175,8 @@ namespace OHV.Vehicle.Concept
             this.eventAggregator = _ea;
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe( UICallbackCommunication , ThreadOption.UIThread );
             this.eventAggregator.GetEvent<HostConnectedPubSubEvent>().Subscribe( OcsConnectCallBack , ThreadOption.UIThread , false );
-=======
-        public D_MainWindowViewModel(IEventAggregator ea, VCSystem cSystem, IRegionManager _regionManager, MessageController messageController)
-        {
-            this.regionManager = _regionManager;
 
-            this.eventAggregator = ea;
-            this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe(UICallbackCommunication, ThreadOption.UIThread);
-            this.eventAggregator.GetEvent<HostConnectedPubSubEvent>().Subscribe(OcsConnectCallBack, ThreadOption.UIThread, false);
             vcsMessagePublisher = this.eventAggregator.GetEvent<VCSMessagePubSubEvent>();
->>>>>>> 52c448e88e2005d6b9bc85ad2c7b734e5cb29907
 
             this.VCSystem = cSystem;
             this.messageController = _msgController;

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


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


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


+ 6 - 0
Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/App.config

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
+    </startup>
+</configuration>

+ 9 - 0
Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/App.xaml

@@ -0,0 +1,9 @@
+<Application x:Class="BatteryCommTest.App"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:local="clr-namespace:BatteryCommTest"
+             StartupUri="MainWindow.xaml">
+    <Application.Resources>
+         
+    </Application.Resources>
+</Application>

+ 17 - 0
Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/App.xaml.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace BatteryCommTest
+{
+    /// <summary>
+    /// App.xaml에 대한 상호 작용 논리
+    /// </summary>
+    public partial class App : Application
+    {
+    }
+}

+ 111 - 0
Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/BatteryCommTest.csproj

@@ -0,0 +1,111 @@
+<?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>{B791F486-2213-4BF5-9A3F-9CF4264075F8}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>BatteryCommTest</RootNamespace>
+    <AssemblyName>BatteryCommTest</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <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' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\MSTest.TestFramework.2.1.0\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\MSTest.TestFramework.2.1.0\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <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>
+    <ApplicationDefinition Include="App.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </ApplicationDefinition>
+    <Page Include="MainWindow.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Compile Include="App.xaml.cs">
+      <DependentUpon>App.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="MainWindow.xaml.cs">
+      <DependentUpon>MainWindow.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>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\BatteryTabos\BatteryTabos.csproj">
+      <Project>{915bd4d3-768f-466a-9df0-984f04e5a05f}</Project>
+      <Name>BatteryTabos</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>

+ 20 - 0
Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/MainWindow.xaml

@@ -0,0 +1,20 @@
+<Window x:Class="BatteryCommTest.MainWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:BatteryCommTest"
+        mc:Ignorable="d"
+        Title="MainWindow" Height="600" Width="1000"
+        Background="Black">
+
+    <Grid >
+        <Grid Margin="15" Background="Gray">
+            <Button x:Name="SerialOpen" Content="Open" Margin="10,10,822,457" Click="SerialOpen_Click"/>
+            <Button x:Name="SerialClose" Content="Close" Margin="145,10,686,457" Click="SerialClose_Click"/>
+            <Button x:Name="WriteToByte" Content="Write Byte" Margin="10,122,818,345" Click="WriteToByte_Click"/>
+            <Button x:Name="WriteToString" Content="Write String" Margin="149,122,686,345" Click="WriteToString_Click"/>
+            <TextBox x:Name="tbRecv" Margin="10,199,0,0" IsReadOnly="True"/>
+        </Grid>
+    </Grid>
+</Window>

+ 40 - 0
Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/MainWindow.xaml.cs

@@ -0,0 +1,40 @@
+using BatteryTabos;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System.Windows;
+
+namespace BatteryCommTest
+{
+    /// <summary>
+    /// MainWindow.xaml에 대한 상호 작용 논리
+    /// </summary>
+    public partial class MainWindow : Window
+    {
+        Manager tabos;
+        public MainWindow( )
+        {
+            InitializeComponent();
+
+            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();
+        }
+
+        private void WriteToByte_Click( object sender , RoutedEventArgs e )
+        {
+            this.tabos.WriteToByte();
+        }
+
+        private void WriteToString_Click( object sender , RoutedEventArgs e )
+        {
+            this.tabos.WriteToString();
+        }
+    }
+}

+ 55 - 0
Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/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( "BatteryCommTest" )]
+[assembly: AssemblyDescription( "" )]
+[assembly: AssemblyConfiguration( "" )]
+[assembly: AssemblyCompany( "" )]
+[assembly: AssemblyProduct( "BatteryCommTest" )]
+[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" )]

+ 71 - 0
Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/Properties/Resources.Designer.cs

@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     이 코드는 도구를 사용하여 생성되었습니다.
+//     런타임 버전:4.0.30319.42000
+//
+//     파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
+//     이러한 변경 내용이 손실됩니다.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace BatteryCommTest.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( "BatteryCommTest.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/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/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/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/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 BatteryCommTest.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/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/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>

+ 4 - 0
Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryCommTest/packages.config

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="MSTest.TestFramework" version="2.1.0" targetFramework="net472" />
+</packages>

+ 6 - 0
Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryTabos.sln

@@ -5,6 +5,8 @@ VisualStudioVersion = 16.0.29709.97
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BatteryTabos", "BatteryTabos\BatteryTabos.csproj", "{915BD4D3-768F-466A-9DF0-984F04E5A05F}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BatteryCommTest", "BatteryCommTest\BatteryCommTest.csproj", "{B791F486-2213-4BF5-9A3F-9CF4264075F8}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -15,6 +17,10 @@ Global
 		{915BD4D3-768F-466A-9DF0-984F04E5A05F}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{915BD4D3-768F-466A-9DF0-984F04E5A05F}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{915BD4D3-768F-466A-9DF0-984F04E5A05F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B791F486-2213-4BF5-9A3F-9CF4264075F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B791F486-2213-4BF5-9A3F-9CF4264075F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B791F486-2213-4BF5-9A3F-9CF4264075F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B791F486-2213-4BF5-9A3F-9CF4264075F8}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 6 - 0
Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryTabos/BatteryTabos.csproj

@@ -31,6 +31,12 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="GSG.NET">
+      <HintPath>..\..\..\..\OHV\Assambly\GSG.NET.dll</HintPath>
+    </Reference>
+    <Reference Include="GSG.NET.WPF">
+      <HintPath>..\..\..\..\OHV\Assambly\GSG.NET.WPF.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
     <Reference Include="System.Xml.Linq" />

+ 137 - 66
Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryTabos/Manager.cs

@@ -1,4 +1,6 @@
-using System;
+using GSG.NET.Concurrent;
+using GSG.NET.Utils;
+using System;
 using System.Collections.Generic;
 using System.IO.Ports;
 using System.Linq;
@@ -13,7 +15,7 @@ namespace BatteryTabos
         #region Total Packet Data
         readonly byte StartSentence1 = 0xAF;
         readonly byte StartSentence2 = 0xFA;
-        readonly byte Address = 0x60;
+        readonly byte Address = 0x61;
         readonly byte Length = 0x05;
         readonly byte ReqCommand = 0x01;
         readonly byte Order = 0x60;
@@ -42,127 +44,196 @@ namespace BatteryTabos
             get { return battery.serial.IsOpen; }
         }
 
-        public Manager()
+        byte[] pp;
+        string pk;
+        public Manager( string _com )
         {
             this._config = new Config();
 
             /*Test ComPort*/
-            this.battery = new Rs232c("COM1");
-            this._allpacket = new byte[] { StartSentence1, StartSentence2, Address, Length, ReqCommand, Order, Kind1, Kind2, _CheckSum, EndSentence1, EndSentence2 };
+            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;
 
-            this.battery.serial.DataReceived += Receive;
 
             /*event Thread Pull Start*/
-            QW = ThreadUitls.Invoke(QueWorker);
+            QW = ThreadUtils.Invoke( QueWorker );
 
-            /*생성 후 Send ? Thread Send ?*/
-            //Thread.Sleep(10);
-            SendAllData();
+            //this.battery.Open();
         }
 
-        private void Receive(object sender, SerialDataReceivedEventArgs e)
+        public Int32 Checksum(byte[] _checksum)
+        {
+            Int32 check = 0;
+            for(int i = 2; i < _checksum[3]+3; i++ )
+            {
+                check += _checksum[ i ];
+            }
+
+            return check;
+        }
+
+        public void Open( )
+        {
+            if ( this.battery != null && !this.battery.serial.IsOpen )
+            {
+                this.battery.Open();
+
+                this.battery.serial.DataReceived += Receive;
+
+                System.Diagnostics.Debug.WriteLine( $"[Serial] - Open {this.battery.serial.PortName} -" );
+            }
+        }
+
+        public void Close( )
+        {
+            if ( this.battery != null && this.battery.serial.IsOpen )
+            {
+                this.battery.Close();
+                System.Diagnostics.Debug.WriteLine( $"[Serial] - Close -" );
+            }
+        }
+
+        private void Receive( object sender , SerialDataReceivedEventArgs e )
         {
             try
             {
-                if (this.battery.serial.IsOpen && this.battery.serial != null)
+                if ( this.battery.serial.IsOpen && this.battery.serial != null )
                 {
-                    var recv = new byte[this.battery.serial.BytesToRead];
-                    this.battery.serial.Read(recv, 0, recv.Length);
-                    ByteParse(recv);
+                    var recv = new byte[ this.battery.serial.BytesToRead ];
+                    this.battery.serial.Read( recv , 0 , recv.Length );
+                    ByteParse( recv );
+
+                    System.Diagnostics.Debug.WriteLine( $"[Serial] - Recv :{recv} -" );
                 }
             }
-            catch (Exception ex) { }
+            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 stvol = BitConverter.ToString( data , 6 , 2 );
+            var _voltage = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 0.01;
 
             /*-32768 ~ +32767*/
-            var stcur = BitConverter.ToString(data, 8, 2);
-            var _current = Convert.ToInt16(stcur, 16) * 0.01;
+            var stcur = BitConverter.ToString( data , 8 , 2 );
+            var _current = Convert.ToInt16( stcur , 16 ) * 0.01;
 
-            var stsoc = BitConverter.ToString(data, 10, 2);
-            var _soc = Int32.Parse(stvol, System.Globalization.NumberStyles.HexNumber) * 1;
+            var stsoc = BitConverter.ToString( data , 10 , 2 );
+            var _soc = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 1;
 
-            var stbr = BitConverter.ToString(data, 12, 2);
-            var _batteryStatus = Int32.Parse(stvol, System.Globalization.NumberStyles.HexNumber);
+            var stbr = BitConverter.ToString( data , 12 , 2 );
+            var _batteryStatus = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber );
 
-            var stct = BitConverter.ToString(data, 14, 2);
-            var _chargeTime = Int32.Parse(stvol, System.Globalization.NumberStyles.HexNumber) * 1;
+            var stct = BitConverter.ToString( data , 14 , 2 );
+            var _chargeTime = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 1;
 
-            var stdct = BitConverter.ToString(data, 16, 2);
-            var _disChargeTime = Int32.Parse(stvol, System.Globalization.NumberStyles.HexNumber) * 1;
+            var stdct = BitConverter.ToString( data , 16 , 2 );
+            var _disChargeTime = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 1;
 
             /*-32768 ~ +32767*/
-            var sttp = BitConverter.ToString(data, 18, 2);
-            var _temperature = Convert.ToInt16(sttp, 16) * 0.01;
+            var sttp = BitConverter.ToString( data , 18 , 2 );
+            var _temperature = Convert.ToInt16( sttp , 16 ) * 0.01;
 
-            var stsoh = BitConverter.ToString(data, 20, 2);
-            var _soh = Int32.Parse(stvol, System.Globalization.NumberStyles.HexNumber) * 1;
+            var stsoh = BitConverter.ToString( data , 20 , 2 );
+            var _soh = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 1;
 
-            var stps = BitConverter.ToString(data, 22, 2);
-            var _residualcapacity = Int32.Parse(stvol, System.Globalization.NumberStyles.HexNumber) * 0.01;
+            var stps = BitConverter.ToString( data , 22 , 2 );
+            var _residualcapacity = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 0.01;
 
-            var stpe = BitConverter.ToString(data, 24, 2);
-            var _residualEnergy = Int32.Parse(stvol, System.Globalization.NumberStyles.HexNumber) * 0.1;
+            var stpe = BitConverter.ToString( data , 24 , 2 );
+            var _residualEnergy = Int32.Parse( stvol , System.Globalization.NumberStyles.HexNumber ) * 0.1;
         }
 
-        private void QueWorker()
+        private void QueWorker( )
         {
-            for(; ; )
+            for (; ; )
             {
-                try
+                if(this.QQ.Count > 0)
                 {
-                    var qo = this.QQ.Dequeue();
-                    if(qo is QoConnect) { DelegateUtils.Invoke(OnConnect, this.battery.serial.PortName); }
-                    if (qo is QoVoltage) { DelegateUtils.Invoke(OnVoltage, _config.Voltage); }
-                    else if (qo is QoCurrent) { DelegateUtils.Invoke(OnCurrent, _config.Current); }
-                    else if (qo is QoSOC) { DelegateUtils.Invoke(OnSOC, _config.SOC); }
-                    else if (qo is QoBattery) { DelegateUtils.Invoke(OnBattery, _config.BatteryStatus); }
-                    else if (qo is QoCharge) { DelegateUtils.Invoke(OnCharge, _config.ChargeTime); }
-                    else if (qo is QoDisCharge) { DelegateUtils.Invoke(OnDisCharge, _config.DisChargeTime); }
-                    else if (qo is QoTemperature) { DelegateUtils.Invoke(OnTemperature, _config.Temperature); }
-                    else if (qo is QoCapacity) { DelegateUtils.Invoke(OnCapacity, _config.Capacity); }
-                    else if (qo is QoEnergy) { DelegateUtils.Invoke(OnEnergy, _config.Energy); }
-                    else { /* null */ }
+                    try
+                    {
+                        var qo = this.QQ.Dequeue();
+                        if ( qo is QoConnect ) { DelegateUtils.Invoke( OnConnect , this.battery.serial.PortName ); }
+                        else if ( qo is QoVoltage ) { DelegateUtils.Invoke( OnVoltage , _config.Voltage ); }
+                        else if ( qo is QoCurrent ) { DelegateUtils.Invoke( OnCurrent , _config.Current ); }
+                        else if ( qo is QoSOC ) { DelegateUtils.Invoke( OnSOC , _config.SOC ); }
+                        else if ( qo is QoBattery ) { DelegateUtils.Invoke( OnBattery , _config.BatteryStatus ); }
+                        else if ( qo is QoCharge ) { DelegateUtils.Invoke( OnCharge , _config.ChargeTime ); }
+                        else if ( qo is QoDisCharge ) { DelegateUtils.Invoke( OnDisCharge , _config.DisChargeTime ); }
+                        else if ( qo is QoTemperature ) { DelegateUtils.Invoke( OnTemperature , _config.Temperature ); }
+                        else if ( qo is QoCapacity ) { DelegateUtils.Invoke( OnCapacity , _config.Capacity ); }
+                        else if ( qo is QoEnergy ) { DelegateUtils.Invoke( OnEnergy , _config.Energy ); }
+                        else { /* null */ }
+                    }
+                    catch ( Exception ex ) { }
                 }
-                catch (Exception ex) { }
             }
         }
 
-        public void SendAllData()
+        public void WriteToByte( /*byte[] _packet*/ )
         {
             try
             {
-                if (this.IsOpen && this.battery.serial != null)
+                if ( this.IsOpen && this.battery.serial != null )
                 {
                     /*byte*/
-                    this.battery.serial.Write(this._allpacket, 0, this._allpacket.Length);
+                    //this.battery.serial.Write( _packet , 0 , _packet.Length );
+                    //this.battery.serial.Write( _allpacket , 0 , _allpacket.Length );
+                    this.battery.serial.Write( pp , 0 , pp.Length );
 
-                    /*ascii*/
-                    //this.battery.serial.Write();
+                    System.Diagnostics.Debug.WriteLine( $"[Serial] - Write : {_allpacket.ToString()} -" );
+                }
+            }
+            catch ( Exception ex ) { }
+        }
+
+        public void WriteToString( /*string _packet*/ )
+        {
+            //var _packet = Encoding.Default.GetString( _allpacket );
+            try
+            {
+                if ( this.IsOpen )
+                {
+                    //this.battery.serial.Write( _packet );
+                    this.battery.serial.Write( pk );
                 }
             }
-            catch (Exception ex) { }
+            catch ( Exception ex ) { throw new Exception(); }
         }
 
-        private bool CheckSum(byte[] _data)
+        private bool CheckSum( byte[] _data )
         {
             bool ret = false;
 
             int size = _data.Length;
-            var cdLow = _data[size - 2];
-            var cdHigh = _data[size - 3];
+            var cdLow = _data[ size - 2 ];
+            var cdHigh = _data[ size - 3 ];
             var cdResult = cdHigh + cdLow;
 
-            var csData = _data[2] + _data[3] + _data[4] + _data[5] + _data[6] + _data[7] + _data[8] + _data[9];
+            var csData = _data[ 2 ] + _data[ 3 ] + _data[ 4 ] + _data[ 5 ] + _data[ 6 ] + _data[ 7 ] + _data[ 8 ] + _data[ 9 ];
 
-            if (cdResult == csData)
+            if ( cdResult == csData )
             {
                 ret = true;
                 return ret;
@@ -172,9 +243,9 @@ namespace BatteryTabos
             return ret;
         }
 
-        private void BatteryState(byte _data)
+        private void BatteryState( byte _data )
         {
-            var batteryState = BitConverter.GetBytes(_data);
+            var batteryState = BitConverter.GetBytes( _data );
         }
 
 

+ 31 - 16
Dev/SerialModule/BatteryTabos/BatteryTabos/BatteryTabos/Rs232c.cs

@@ -17,7 +17,7 @@ namespace BatteryTabos
             get => this.serial.PortName;
             set
             {
-                if (this.serial.PortName == value) return;
+                if ( this.serial.PortName == value ) return;
                 this.serial.PortName = value;
             }
         }
@@ -26,7 +26,7 @@ namespace BatteryTabos
             get => this.serial.BaudRate;
             set
             {
-                if (this.serial.BaudRate == value) return;
+                if ( this.serial.BaudRate == value ) return;
                 this.serial.BaudRate = value;
             }
         }
@@ -35,7 +35,7 @@ namespace BatteryTabos
             get => this.serial.DataBits;
             set
             {
-                if (this.serial.DataBits == value) return;
+                if ( this.serial.DataBits == value ) return;
                 this.serial.DataBits = value;
             }
         }
@@ -44,7 +44,7 @@ namespace BatteryTabos
             get => this.serial.Parity;
             set
             {
-                if (this.serial.Parity == value) return;
+                if ( this.serial.Parity == value ) return;
                 this.serial.Parity = value;
             }
         }
@@ -53,7 +53,7 @@ namespace BatteryTabos
             get => this.serial.StopBits;
             set
             {
-                if (this.serial.StopBits == value) return;
+                if ( this.serial.StopBits == value ) return;
                 this.serial.StopBits = value;
             }
         }
@@ -62,7 +62,7 @@ namespace BatteryTabos
             get => this.serial.ReadTimeout;
             set
             {
-                if (this.serial.ReadTimeout == value) return;
+                if ( this.serial.ReadTimeout == value ) return;
                 this.serial.ReadTimeout = value;
             }
         }
@@ -71,7 +71,7 @@ namespace BatteryTabos
             get => this.serial.WriteTimeout;
             set
             {
-                if (this.serial.WriteTimeout == value) return;
+                if ( this.serial.WriteTimeout == value ) return;
                 this.serial.WriteTimeout = value;
             }
         }
@@ -83,21 +83,36 @@ namespace BatteryTabos
         /// <para>setMode = false 세부항목 설정</para> 
         /// </summary>
 
-        public Rs232c(string _comPort, bool setMode = false)
+        public Rs232c( string _comPort , bool setMode = false )
         {
-            if(!setMode)
+            if ( !setMode )
             {
                 this.serial = new SerialPort
                 {
-                    BaudRate = 19200,
-                    DataBits = 8,
-                    Parity = Parity.None,
-                    StopBits = StopBits.One,
-                    ReadTimeout = 3000,
-                    WriteTimeout = 3000
+                    PortName = _comPort,
+                    BaudRate = 19200 ,
+                    DataBits = 8 ,
+                    Parity = Parity.None ,
+                    StopBits = StopBits.One ,
+                    //Encoding = Encoding.ASCII
                 };
             }
-            else this.serial = new SerialPort(_comPort);
+            else this.serial = new SerialPort( _comPort );
+        }
+
+        public void Open( )
+        {
+            this.serial.Open();
+        }
+
+        public void Close( )
+        {
+            this.serial.Close();
+        }
+
+        public void Write( )
+        {
+
         }
     }
 }