Sonjiwon 3 vuotta sitten
vanhempi
commit
5437dab755
57 muutettua tiedostoa jossa 3826 lisäystä ja 0 poistoa
  1. 108 0
      InkjetScale/InkjetScale.BusinessLogic.Admin/AdminManager.cs
  2. 59 0
      InkjetScale/InkjetScale.BusinessLogic.Admin/InkjetScale.BusinessLogic.Admin.csproj
  3. 36 0
      InkjetScale/InkjetScale.BusinessLogic.Admin/Properties/AssemblyInfo.cs
  4. 33 0
      InkjetScale/InkjetScale.BusinessLogic.Admin/UsageInfo.cs
  5. 57 0
      InkjetScale/InkjetScale.BusinessLogic.Calculation/InkjetScale.BusinessLogic.Calculation.csproj
  6. 36 0
      InkjetScale/InkjetScale.BusinessLogic.Calculation/Properties/AssemblyInfo.cs
  7. 18 0
      InkjetScale/InkjetScale.BusinessLogic.Calculation/ScaleMath.cs
  8. 13 0
      InkjetScale/InkjetScale.BusinessLogic.ScaleCore/Icore.cs
  9. 74 0
      InkjetScale/InkjetScale.BusinessLogic.ScaleCore/InkjetScale.BusinessLogic.ScaleCore.csproj
  10. 36 0
      InkjetScale/InkjetScale.BusinessLogic.ScaleCore/Properties/AssemblyInfo.cs
  11. 57 0
      InkjetScale/InkjetScale.BusinessLogic.ScaleCore/ScaleCoreBase.cs
  12. 4 0
      InkjetScale/InkjetScale.BusinessLogic.ScaleCore/packages.config
  13. 24 0
      InkjetScale/InkjetScale.Common/Converter/BooleanToVisibilityConverter.cs
  14. 37 0
      InkjetScale/InkjetScale.Common/Enums.cs
  15. 12 0
      InkjetScale/InkjetScale.Common/Events/PubSubEvents.cs
  16. 22 0
      InkjetScale/InkjetScale.Common/Events/PubSubModel.cs
  17. 97 0
      InkjetScale/InkjetScale.Common/InkjetScale.Common.csproj
  18. 36 0
      InkjetScale/InkjetScale.Common/Properties/AssemblyInfo.cs
  19. 13 0
      InkjetScale/InkjetScale.Common/StringNames/RegionNames.cs
  20. 13 0
      InkjetScale/InkjetScale.Common/StringNames/ViewNames.cs
  21. 11 0
      InkjetScale/InkjetScale.Common/packages.config
  22. 111 0
      InkjetScale/InkjetScale.GUI.LogViews/InkjetScale.GUI.LogViews.csproj
  23. 27 0
      InkjetScale/InkjetScale.GUI.LogViews/LogViewModule.cs
  24. 36 0
      InkjetScale/InkjetScale.GUI.LogViews/Properties/AssemblyInfo.cs
  25. 49 0
      InkjetScale/InkjetScale.GUI.LogViews/Views/ScaleLogView.xaml
  26. 28 0
      InkjetScale/InkjetScale.GUI.LogViews/Views/ScaleLogView.xaml.cs
  27. 44 0
      InkjetScale/InkjetScale.GUI.LogViews/Views/ScaleLogViewModel.cs
  28. 13 0
      InkjetScale/InkjetScale.GUI.LogViews/packages.config
  29. 140 0
      InkjetScale/InkjetScale.GUI.MainViews/InkjetScale.GUI.MainViews.csproj
  30. 30 0
      InkjetScale/InkjetScale.GUI.MainViews/MainViewModule.cs
  31. 36 0
      InkjetScale/InkjetScale.GUI.MainViews/Properties/AssemblyInfo.cs
  32. 246 0
      InkjetScale/InkjetScale.GUI.MainViews/Views/ScaleMainView.xaml
  33. 35 0
      InkjetScale/InkjetScale.GUI.MainViews/Views/ScaleMainView.xaml.cs
  34. 249 0
      InkjetScale/InkjetScale.GUI.MainViews/Views/ScaleMainViewModel.cs
  35. 15 0
      InkjetScale/InkjetScale.GUI.MainViews/packages.config
  36. 122 0
      InkjetScale/InkjetScale.GUI.ScaleControlViews/InkjetScale.GUI.ScaleControlViews.csproj
  37. 36 0
      InkjetScale/InkjetScale.GUI.ScaleControlViews/Properties/AssemblyInfo.cs
  38. 26 0
      InkjetScale/InkjetScale.GUI.ScaleControlViews/ScaleControlViewModule.cs
  39. 78 0
      InkjetScale/InkjetScale.GUI.ScaleControlViews/Views/ScaleControlView.xaml
  40. 30 0
      InkjetScale/InkjetScale.GUI.ScaleControlViews/Views/ScaleControlView.xaml.cs
  41. 122 0
      InkjetScale/InkjetScale.GUI.ScaleControlViews/Views/ScaleControlViewModel.cs
  42. 13 0
      InkjetScale/InkjetScale.GUI.ScaleControlViews/packages.config
  43. 102 0
      InkjetScale/InkjetScale.sln
  44. 6 0
      InkjetScale/InkjetScale/App.config
  45. 18 0
      InkjetScale/InkjetScale/App.xaml
  46. 63 0
      InkjetScale/InkjetScale/App.xaml.cs
  47. 185 0
      InkjetScale/InkjetScale/InkjetScale.csproj
  48. 106 0
      InkjetScale/InkjetScale/InkjetScaleCore.cs
  49. 55 0
      InkjetScale/InkjetScale/Properties/AssemblyInfo.cs
  50. 70 0
      InkjetScale/InkjetScale/Properties/Resources.Designer.cs
  51. 117 0
      InkjetScale/InkjetScale/Properties/Resources.resx
  52. 29 0
      InkjetScale/InkjetScale/Properties/Settings.Designer.cs
  53. 7 0
      InkjetScale/InkjetScale/Properties/Settings.settings
  54. 496 0
      InkjetScale/InkjetScale/Shell.xaml
  55. 51 0
      InkjetScale/InkjetScale/Shell.xaml.cs
  56. 224 0
      InkjetScale/InkjetScale/ShellViewModel.cs
  57. 15 0
      InkjetScale/InkjetScale/packages.config

+ 108 - 0
InkjetScale/InkjetScale.BusinessLogic.Admin/AdminManager.cs

@@ -0,0 +1,108 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Management;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.BusinessLogic.Admin
+{
+
+    public class AdminManager
+    {
+        public static double GetTotalCpuUsage() //전체 cpu 사용률
+        {
+            try
+            {
+                var wmi = new ManagementObjectSearcher("select * from Win32_PerfFormattedData_PerfOS_Processor where Name != '_Total'");
+                var cpuUsages = wmi.Get().Cast<ManagementObject>().Select(mo => (long)(ulong)mo["PercentProcessorTime"]);
+                var totalUsage = cpuUsages.Average();
+
+                return (double)totalUsage;
+            }
+            catch (Exception)
+            {
+                return 0;
+            }
+        }
+
+        public static double GetProcessCpuUsage() //process 사용률
+        {
+            try
+            {
+                var wmi = new ManagementObjectSearcher($"select * from Win32_PerfFormattedData_PerfProc_Process where Name='{Process.GetCurrentProcess().ProcessName}'");
+                var procTime = wmi.Get().Cast<ManagementObject>().Select(mo => (long)(ulong)mo["PercentProcessorTime"]).FirstOrDefault();
+                var procUsage = (double)(procTime * 100 / Environment.ProcessorCount);
+
+                return (double)procUsage;
+            }
+            catch (Exception)
+            {
+                return 0;
+            }
+        }
+
+
+
+        public static UsageInfo GetMemoryUsage() //Memory 사용률
+        {
+            try
+            {
+                var wmi = new ManagementObjectSearcher("select * from Win32_OperatingSystem");
+                var info = wmi.Get().Cast<ManagementObject>().Select(mem => new UsageInfo()
+                {
+                    TotalSize = ulong.Parse(mem["TotalVisibleMemorySize"].ToString()),
+                    FreeSize = ulong.Parse(mem["FreePhysicalMemory"].ToString()),
+                }).FirstOrDefault();
+
+                return info;
+            }
+            catch (Exception)
+            {
+                return null;
+            }
+        }
+
+        public static UsageInfo GetHddUsage()
+        {
+            try
+            {
+                var driveName = Path.GetPathRoot(AppDomain.CurrentDomain.BaseDirectory);
+                var d = new DriveInfo(driveName);
+                var info = new UsageInfo()
+                {
+                    TotalSize = (ulong)d.TotalSize,
+                    FreeSize = (ulong)(d.TotalFreeSpace)
+                };
+
+                return info;
+            }
+            catch (Exception)
+            {
+                return null;
+            }
+        }
+
+        public static List<UsageInfo> GetDriveList()
+        {
+            var drives = DriveInfo.GetDrives().ToList();
+            var driveInfos = new List<UsageInfo>();
+
+            drives.ForEach(drive =>
+            {
+                var dInfo = new UsageInfo()
+                {
+                    Name = drive.Name,
+                    TotalSize = (ulong)drive.TotalSize,
+                    FreeSize = (ulong)drive.TotalFreeSpace,
+                };
+                driveInfos.Add(dInfo);
+            });
+
+            return driveInfos;
+        }
+
+    }
+}

+ 59 - 0
InkjetScale/InkjetScale.BusinessLogic.Admin/InkjetScale.BusinessLogic.Admin.csproj

@@ -0,0 +1,59 @@
+<?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>{3DDA8868-7FC0-4014-AA47-9375E608BD0C}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>InkjetScale.BusinessLogic.Admin</RootNamespace>
+    <AssemblyName>InkjetScale.BusinessLogic.Admin</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <Deterministic>true</Deterministic>
+  </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>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote_LAB|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote_LAB\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Management" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AdminManager.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="UsageInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>

+ 36 - 0
InkjetScale/InkjetScale.BusinessLogic.Admin/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 
+// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
+// 이러한 특성 값을 변경하세요.
+[assembly: AssemblyTitle("InkjetScale.BusinessLogic.Admin")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("InkjetScale.BusinessLogic.Admin")]
+[assembly: AssemblyCopyright("Copyright ©  2022")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
+[assembly: ComVisible(false)]
+
+// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
+[assembly: Guid("3dda8868-7fc0-4014-aa47-9375e608bd0c")]
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+//      주 버전
+//      부 버전 
+//      빌드 번호
+//      수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
+// 기본값으로 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 33 - 0
InkjetScale/InkjetScale.BusinessLogic.Admin/UsageInfo.cs

@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.BusinessLogic.Admin
+{
+    public class UsageInfo
+    {
+        /// <summary>
+        /// 전체 용량
+        /// </summary>
+        public ulong TotalSize { get; set; }
+
+        /// <summary>
+        /// 남은 용량
+        /// </summary>
+        public ulong FreeSize { get; set; }
+
+        /// <summary>
+        /// (readonly) 사용량
+        /// </summary>
+        public ulong UsedSize => TotalSize - FreeSize;
+
+        /// <summary>
+        /// (readonly) 사용률 
+        /// </summary>
+        public double Usage => ((double)(UsedSize) / (double)TotalSize) * 100;
+
+        public string Name { get; set; }
+    }
+}

+ 57 - 0
InkjetScale/InkjetScale.BusinessLogic.Calculation/InkjetScale.BusinessLogic.Calculation.csproj

@@ -0,0 +1,57 @@
+<?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>{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>InkjetScale.BusinessLogic.Calculation</RootNamespace>
+    <AssemblyName>InkjetScale.BusinessLogic.Calculation</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <Deterministic>true</Deterministic>
+  </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>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote_LAB|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote_LAB\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ScaleMath.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>

+ 36 - 0
InkjetScale/InkjetScale.BusinessLogic.Calculation/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 
+// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
+// 이러한 특성 값을 변경하세요.
+[assembly: AssemblyTitle("InkjetScale.BusinessLogic.Calculation")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("InkjetScale.BusinessLogic.Calculation")]
+[assembly: AssemblyCopyright("Copyright ©  2022")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
+[assembly: ComVisible(false)]
+
+// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
+[assembly: Guid("74c4eb8f-0a6f-47a0-afda-158fb056c0c1")]
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+//      주 버전
+//      부 버전 
+//      빌드 번호
+//      수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
+// 기본값으로 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 18 - 0
InkjetScale/InkjetScale.BusinessLogic.Calculation/ScaleMath.cs

@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.BusinessLogic.Calculation
+{
+    public class ScaleMath
+    {
+        public static double GetPl(double scaleVal, int nozzle, int drops)
+        {
+            double pl = (scaleVal / (nozzle * drops)) * 1000000;
+            return pl;
+        }
+
+    }
+}

+ 13 - 0
InkjetScale/InkjetScale.BusinessLogic.ScaleCore/Icore.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.BusinessLogic.ScaleCore
+{
+    public interface Icore
+    {
+        void Init();
+    }
+}

+ 74 - 0
InkjetScale/InkjetScale.BusinessLogic.ScaleCore/InkjetScale.BusinessLogic.ScaleCore.csproj

@@ -0,0 +1,74 @@
+<?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>{307E7E0E-EE1E-4A2C-BD58-818AEF9F8B5C}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>InkjetScale.BusinessLogic.ScaleCore</RootNamespace>
+    <AssemblyName>InkjetScale.BusinessLogic.ScaleCore</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <Deterministic>true</Deterministic>
+  </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>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote_LAB|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote_LAB\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Prism, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Core.8.1.97\lib\net47\Prism.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ScaleCoreBase.cs" />
+    <Compile Include="Icore.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\InkjetScale.BusinessLogic.Calculation\InkjetScale.BusinessLogic.Calculation.csproj">
+      <Project>{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1}</Project>
+      <Name>InkjetScale.BusinessLogic.Calculation</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\InkjetScale.Common\InkjetScale.Common.csproj">
+      <Project>{BC7536F1-00FA-4970-8460-22B63D280108}</Project>
+      <Name>InkjetScale.Common</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>

+ 36 - 0
InkjetScale/InkjetScale.BusinessLogic.ScaleCore/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 
+// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
+// 이러한 특성 값을 변경하세요.
+[assembly: AssemblyTitle("InkjetScale.BusinessLogic.ScaleCore")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("InkjetScale.BusinessLogic.ScaleCore")]
+[assembly: AssemblyCopyright("Copyright ©  2022")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
+[assembly: ComVisible(false)]
+
+// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
+[assembly: Guid("307e7e0e-ee1e-4a2c-bd58-818aef9f8b5c")]
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+//      주 버전
+//      부 버전 
+//      빌드 번호
+//      수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
+// 기본값으로 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 57 - 0
InkjetScale/InkjetScale.BusinessLogic.ScaleCore/ScaleCoreBase.cs

@@ -0,0 +1,57 @@
+using InkjetScale.BusinessLogic.Calculation;
+using InkjetScale.Common.Events;
+using Prism.Events;
+using System;
+using System.Collections.Generic;
+using System.IO.Ports;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace InkjetScale.BusinessLogic.ScaleCore
+{
+    public abstract class ScaleCoreBase : Icore, IDisposable
+    {
+        public SerialPort scale = new SerialPort();
+
+        IEventAggregator ea = null;
+
+        public ScaleCoreBase(IEventAggregator eventAggregator)
+        {
+            this.ea = eventAggregator;
+        }
+
+        public void Init()
+        {
+            scale.PortName = "COM2";
+            scale.BaudRate = 9600;
+            scale.DataBits = 8;
+            scale.StopBits = StopBits.One;
+            scale.Parity = Parity.None;
+
+            if (!scale.IsOpen)
+            {
+                scale.Open();
+                if (scale.IsOpen)
+                    ConnectPubEvent(scale.PortName, true);
+
+                scale.Encoding = Encoding.Default;
+                scale.DataReceived += new SerialDataReceivedEventHandler(SerialDataReceived);
+            }
+        }
+
+        public abstract void SerialDataReceived(object sender, SerialDataReceivedEventArgs e);
+
+        private void ConnectPubEvent(string port, bool isOpen)
+        {
+            var c = new SerialEventArgs() { PortNum = port, IsOpen = isOpen };
+            this.ea.GetEvent<SerialConnectEvent>().Publish(c);
+        }
+
+        public virtual void Dispose()
+        {
+            scale.Close();
+        }
+    }
+}

+ 4 - 0
InkjetScale/InkjetScale.BusinessLogic.ScaleCore/packages.config

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

+ 24 - 0
InkjetScale/InkjetScale.Common/Converter/BooleanToVisibilityConverter.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Data;
+
+namespace InkjetScale.Common.Converter
+{
+    public class BooleanToVisibilityConverter : IMultiValueConverter
+    {
+        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
+        {
+            return values.Equals(true) ? Visibility.Visible : Visibility.Collapsed;
+        }
+
+        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
+        {
+            return null;
+        }
+    }
+}

+ 37 - 0
InkjetScale/InkjetScale.Common/Enums.cs

@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.Common
+{
+    public enum eCommand
+    {
+        S, //안정적인 값 받기
+        SI, //안정화 여부 상관없이 무게 출력
+        SIR,  //안정적인 값 계속 받기(근데 계속 안줌)
+        Z, //영점 잡기(한 번에 잘 안 잡힘)
+        ZI, //즉각적인 ZERO 적용
+        T, //Tare
+        C, //모든 Command 취소
+
+    }
+
+    public enum eHeadList
+    {
+        HeadPack1Head1 = 1,
+        HeadPack1Head2,
+        HeadPack1Head3,
+        HeadPack1Head4,
+        HeadPack2Head1,
+        HeadPack2Head2,
+        HeadPack2Head3,
+        HeadPack2Head4,
+        HeadPack3Head1,
+        HeadPack3Head2,
+        HeadPack3Head3,
+        HeadPack3Head4,
+    }
+
+}

+ 12 - 0
InkjetScale/InkjetScale.Common/Events/PubSubEvents.cs

@@ -0,0 +1,12 @@
+using Prism.Events;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.Common.Events
+{
+    public class SerialConnectEvent : PubSubEvent<SerialEventArgs> { };
+    public class ViewLogEvent : PubSubEvent<ViewLogArgs> { };
+}

+ 22 - 0
InkjetScale/InkjetScale.Common/Events/PubSubModel.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.Common.Events
+{
+    public class SerialEventArgs : EventArgs
+    {
+        public string PortNum { get; set; }
+        public bool IsOpen { get; set; }
+    }
+
+    public class ViewLogArgs : EventArgs
+    {
+        public eHeadList Head { get; set; }
+        public double Weight { get; set; }
+        public double pl { get; set; }
+    }
+
+}

+ 97 - 0
InkjetScale/InkjetScale.Common/InkjetScale.Common.csproj

@@ -0,0 +1,97 @@
+<?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>{BC7536F1-00FA-4970-8460-22B63D280108}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>InkjetScale.Common</RootNamespace>
+    <AssemblyName>InkjetScale.Common</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <Deterministic>true</Deterministic>
+  </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>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote_LAB|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote_LAB\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Microsoft.Xaml.Behaviors, Version=1.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\Microsoft.Xaml.Behaviors.Wpf.1.1.31\lib\net45\Microsoft.Xaml.Behaviors.dll</HintPath>
+    </Reference>
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+    <Reference Include="Prism, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Core.8.1.97\lib\net47\Prism.dll</HintPath>
+    </Reference>
+    <Reference Include="Prism.Unity.Wpf, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Unity.8.1.97\lib\net47\Prism.Unity.Wpf.dll</HintPath>
+    </Reference>
+    <Reference Include="Prism.Wpf, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Wpf.8.1.97\lib\net47\Prism.Wpf.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.2\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Xaml" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Unity.Abstractions, Version=5.11.7.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
+      <HintPath>..\packages\Unity.Abstractions.5.11.7\lib\net47\Unity.Abstractions.dll</HintPath>
+    </Reference>
+    <Reference Include="Unity.Container, Version=5.11.11.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
+      <HintPath>..\packages\Unity.Container.5.11.11\lib\net47\Unity.Container.dll</HintPath>
+    </Reference>
+    <Reference Include="WindowsBase" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Converter\BooleanToVisibilityConverter.cs" />
+    <Compile Include="Enums.cs" />
+    <Compile Include="Events\PubSubEvents.cs" />
+    <Compile Include="Events\PubSubModel.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="StringNames\RegionNames.cs" />
+    <Compile Include="StringNames\ViewNames.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Model\" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>

+ 36 - 0
InkjetScale/InkjetScale.Common/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 
+// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
+// 이러한 특성 값을 변경하세요.
+[assembly: AssemblyTitle("InkjetScale.Common")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("InkjetScale.Common")]
+[assembly: AssemblyCopyright("Copyright ©  2022")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
+[assembly: ComVisible(false)]
+
+// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
+[assembly: Guid("bc7536f1-00fa-4970-8460-22b63d280108")]
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+//      주 버전
+//      부 버전 
+//      빌드 번호
+//      수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
+// 기본값으로 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 13 - 0
InkjetScale/InkjetScale.Common/StringNames/RegionNames.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.Common.StringNames
+{
+    public class RegionNames
+    {
+        public const string MainRegion = "MainRegion";
+    }
+}

+ 13 - 0
InkjetScale/InkjetScale.Common/StringNames/ViewNames.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.Common.StringNames
+{
+    public class ViewNames
+    {
+        public const string ScaleMainView = "ScaleMainView";
+    }
+}

+ 11 - 0
InkjetScale/InkjetScale.Common/packages.config

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="Microsoft.Xaml.Behaviors.Wpf" version="1.1.31" targetFramework="net472" />
+  <package id="Prism.Core" version="8.1.97" targetFramework="net472" />
+  <package id="Prism.Unity" version="8.1.97" targetFramework="net472" />
+  <package id="Prism.Wpf" version="8.1.97" targetFramework="net472" />
+  <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" />
+  <package id="System.Threading.Tasks.Extensions" version="4.5.2" targetFramework="net472" />
+  <package id="Unity.Abstractions" version="5.11.7" targetFramework="net472" />
+  <package id="Unity.Container" version="5.11.11" targetFramework="net472" />
+</packages>

+ 111 - 0
InkjetScale/InkjetScale.GUI.LogViews/InkjetScale.GUI.LogViews.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>{799D6601-8F88-4C27-8952-7760BAE9DA0C}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>InkjetScale.GUI.LogViews</RootNamespace>
+    <AssemblyName>InkjetScale.GUI.LogViews</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <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="MaterialDesignColors, Version=2.0.6.0, Culture=neutral, PublicKeyToken=df2a72020bd7962a, processorArchitecture=MSIL">
+      <HintPath>..\packages\MaterialDesignColors.2.0.6\lib\net452\MaterialDesignColors.dll</HintPath>
+    </Reference>
+    <Reference Include="MaterialDesignThemes.Wpf, Version=4.5.0.0, Culture=neutral, PublicKeyToken=df2a72020bd7962a, processorArchitecture=MSIL">
+      <HintPath>..\packages\MaterialDesignThemes.4.5.0\lib\net452\MaterialDesignThemes.Wpf.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Xaml.Behaviors, Version=1.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\Microsoft.Xaml.Behaviors.Wpf.1.1.31\lib\net45\Microsoft.Xaml.Behaviors.dll</HintPath>
+    </Reference>
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+    <Reference Include="Prism, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Core.8.1.97\lib\net47\Prism.dll</HintPath>
+    </Reference>
+    <Reference Include="Prism.Unity.Wpf, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Unity.8.1.97\lib\net47\Prism.Unity.Wpf.dll</HintPath>
+    </Reference>
+    <Reference Include="Prism.Wpf, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Wpf.8.1.97\lib\net47\Prism.Wpf.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.2\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Xaml" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Unity.Abstractions, Version=5.11.7.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
+      <HintPath>..\packages\Unity.Abstractions.5.11.7\lib\net47\Unity.Abstractions.dll</HintPath>
+    </Reference>
+    <Reference Include="Unity.Container, Version=5.11.11.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
+      <HintPath>..\packages\Unity.Container.5.11.11\lib\net47\Unity.Container.dll</HintPath>
+    </Reference>
+    <Reference Include="WindowsBase" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="LogViewModule.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Views\ScaleLogView.xaml.cs">
+      <DependentUpon>ScaleLogView.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ScaleLogViewModel.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="Views\ScaleLogView.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\InkjetScale.Common\InkjetScale.Common.csproj">
+      <Project>{BC7536F1-00FA-4970-8460-22B63D280108}</Project>
+      <Name>InkjetScale.Common</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Import Project="..\packages\MaterialDesignThemes.4.5.0\build\MaterialDesignThemes.targets" Condition="Exists('..\packages\MaterialDesignThemes.4.5.0\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.4.5.0\build\MaterialDesignThemes.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MaterialDesignThemes.4.5.0\build\MaterialDesignThemes.targets'))" />
+  </Target>
+</Project>

+ 27 - 0
InkjetScale/InkjetScale.GUI.LogViews/LogViewModule.cs

@@ -0,0 +1,27 @@
+using InkjetScale.Common.StringNames;
+using Prism.Ioc;
+using Prism.Modularity;
+using Prism.Mvvm;
+using Prism.Regions;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.GUI.LogViews
+{
+    public class LogViewModule : IModule
+    {
+        public void OnInitialized(IContainerProvider containerProvider)
+        {
+            ViewModelLocationProvider.Register<Views.ScaleLogView, Views.ScaleLogViewModel>();
+        }
+
+        public void RegisterTypes(IContainerRegistry containerRegistry)
+        {
+
+        }
+    }
+}
+

+ 36 - 0
InkjetScale/InkjetScale.GUI.LogViews/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 
+// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
+// 이러한 특성 값을 변경하세요.
+[assembly: AssemblyTitle("InkjetScale.GUI.LogViews")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("InkjetScale.GUI.LogViews")]
+[assembly: AssemblyCopyright("Copyright ©  2022")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
+[assembly: ComVisible(false)]
+
+// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
+[assembly: Guid("799d6601-8f88-4c27-8952-7760bae9da0c")]
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+//      주 버전
+//      부 버전 
+//      빌드 번호
+//      수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
+// 기본값으로 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 49 - 0
InkjetScale/InkjetScale.GUI.LogViews/Views/ScaleLogView.xaml

@@ -0,0 +1,49 @@
+<UserControl x:Class="InkjetScale.GUI.LogViews.Views.ScaleLogView"
+             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:InkjetScale.GUI.LogViews.Views"
+             xmlns:prism="http://prismlibrary.com/"
+             prism:ViewModelLocator.AutoWireViewModel="True"
+             xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+             mc:Ignorable="d" 
+             d:DesignHeight="952.94" d:DesignWidth="400">
+    <Border Background="{DynamicResource PrimaryHueMidBrush}" Padding="5" BorderThickness="2" Margin="5" CornerRadius="5">
+
+        <Grid>
+            <Grid.RowDefinitions>
+                <RowDefinition Height="30"/>
+                <RowDefinition/>
+            </Grid.RowDefinitions>
+
+            <Grid Grid.Row="0">
+                <StackPanel Orientation="Horizontal" Grid.Row="0" Margin="10, 0,0,0">
+                    <materialDesign:PackIcon Kind="AlignHorizontalCentre" Height="32" Width="32" VerticalAlignment="Center" />
+                    <Button Style="{StaticResource MaterialDesignRaisedButton}" Command="{Binding ClearCommand}"  
+                                                HorizontalAlignment="Center" VerticalAlignment="Center" Background="{x:Null}" BorderThickness="0" >
+                        <TextBlock Margin="8,0,0,0" VerticalAlignment="Center" Style="{DynamicResource MaterialDesignSubtitle1TextBlock}" Text="Measurement Log" />
+                    </Button>
+                </StackPanel>
+            </Grid>
+
+            <Grid Grid.Row="1">
+                <DataGrid Margin="0 8 0 0" ItemsSource="{Binding MeasurementList}" CanUserSortColumns="True" CanUserAddRows="False" AutoGenerateColumns="False" 
+                                      materialDesign:DataGridAssist.CellPadding="13 8 8 8" materialDesign:DataGridAssist.ColumnHeaderPadding="8" IsReadOnly="True" Background="LightBlue">
+                    <DataGrid.Columns>
+                        <DataGridTextColumn Binding="{Binding Head}" Header="  Head" Width="*" FontSize="10"
+                                            EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}" />
+                        <DataGridTextColumn Binding="{Binding Weight}" Header="  Weight" FontSize="10"
+                                        EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}" Width="*" />
+                        <DataGridTextColumn Binding="{Binding pl}" Header="  pl" Width="*" FontSize="10"
+                                            EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}" />
+                    </DataGrid.Columns>
+                </DataGrid>
+
+            </Grid>
+
+        </Grid>
+
+
+    </Border>
+</UserControl>

+ 28 - 0
InkjetScale/InkjetScale.GUI.LogViews/Views/ScaleLogView.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 InkjetScale.GUI.LogViews.Views
+{
+    /// <summary>
+    /// ScaleLogView.xaml에 대한 상호 작용 논리
+    /// </summary>
+    public partial class ScaleLogView : UserControl
+    {
+        public ScaleLogView()
+        {
+            InitializeComponent();
+        }
+    }
+}

+ 44 - 0
InkjetScale/InkjetScale.GUI.LogViews/Views/ScaleLogViewModel.cs

@@ -0,0 +1,44 @@
+using InkjetScale.Common.Events;
+using InkjetScale.Common.Model;
+using Prism.Commands;
+using Prism.Events;
+using Prism.Mvvm;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+
+namespace InkjetScale.GUI.LogViews.Views
+{
+    public class ScaleLogViewModel : BindableBase
+    {
+        private ObservableCollection<ViewLogArgs> measurementList;
+        public ObservableCollection<ViewLogArgs> MeasurementList { get => this.measurementList; set => SetProperty(ref this.measurementList, value); }
+
+        public ICommand ClearCommand { get; set; }
+
+        IEventAggregator eventAggregator = null;
+        public ScaleLogViewModel(IEventAggregator eventAggregator)
+        {
+            this.ClearCommand = new DelegateCommand(ExecuteClear);
+            this.eventAggregator = eventAggregator;
+
+            MeasurementList = new ObservableCollection<ViewLogArgs>();
+            this.eventAggregator.GetEvent<ViewLogEvent>().Subscribe(ViewLogSubEvent);
+        }
+
+        private void ExecuteClear()
+        {
+            MeasurementList.Clear();
+        }
+
+        private void ViewLogSubEvent(ViewLogArgs args)
+        {
+            MeasurementList.Add(args);
+        }
+
+    }
+}

+ 13 - 0
InkjetScale/InkjetScale.GUI.LogViews/packages.config

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="MaterialDesignColors" version="2.0.6" targetFramework="net472" />
+  <package id="MaterialDesignThemes" version="4.5.0" targetFramework="net472" />
+  <package id="Microsoft.Xaml.Behaviors.Wpf" version="1.1.31" targetFramework="net472" />
+  <package id="Prism.Core" version="8.1.97" targetFramework="net472" />
+  <package id="Prism.Unity" version="8.1.97" targetFramework="net472" />
+  <package id="Prism.Wpf" version="8.1.97" targetFramework="net472" />
+  <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" />
+  <package id="System.Threading.Tasks.Extensions" version="4.5.2" targetFramework="net472" />
+  <package id="Unity.Abstractions" version="5.11.7" targetFramework="net472" />
+  <package id="Unity.Container" version="5.11.11" targetFramework="net472" />
+</packages>

+ 140 - 0
InkjetScale/InkjetScale.GUI.MainViews/InkjetScale.GUI.MainViews.csproj

@@ -0,0 +1,140 @@
+<?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>{A31E17BC-2226-4C99-8ADB-BF438F4EEFD5}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>InkjetScale.GUI.MainViews</RootNamespace>
+    <AssemblyName>InkjetScale.GUI.MainViews</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <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>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote_LAB|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote_LAB\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="CalcBinding, Version=2.5.2.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\CalcBinding.2.5.2\lib\net45\CalcBinding.dll</HintPath>
+    </Reference>
+    <Reference Include="DynamicExpresso.Core, Version=2.3.1.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\DynamicExpresso.Core.2.3.1\lib\net461\DynamicExpresso.Core.dll</HintPath>
+    </Reference>
+    <Reference Include="MaterialDesignColors, Version=2.0.6.0, Culture=neutral, PublicKeyToken=df2a72020bd7962a, processorArchitecture=MSIL">
+      <HintPath>..\packages\MaterialDesignColors.2.0.6\lib\net452\MaterialDesignColors.dll</HintPath>
+    </Reference>
+    <Reference Include="MaterialDesignThemes.Wpf, Version=4.5.0.0, Culture=neutral, PublicKeyToken=df2a72020bd7962a, processorArchitecture=MSIL">
+      <HintPath>..\packages\MaterialDesignThemes.4.5.0\lib\net452\MaterialDesignThemes.Wpf.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Xaml.Behaviors, Version=1.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\Microsoft.Xaml.Behaviors.Wpf.1.1.31\lib\net45\Microsoft.Xaml.Behaviors.dll</HintPath>
+    </Reference>
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+    <Reference Include="Prism, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Core.8.1.97\lib\net47\Prism.dll</HintPath>
+    </Reference>
+    <Reference Include="Prism.Unity.Wpf, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Unity.8.1.97\lib\net47\Prism.Unity.Wpf.dll</HintPath>
+    </Reference>
+    <Reference Include="Prism.Wpf, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Wpf.8.1.97\lib\net47\Prism.Wpf.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.2\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Xaml" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Unity.Abstractions, Version=5.11.7.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
+      <HintPath>..\packages\Unity.Abstractions.5.11.7\lib\net47\Unity.Abstractions.dll</HintPath>
+    </Reference>
+    <Reference Include="Unity.Container, Version=5.11.11.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
+      <HintPath>..\packages\Unity.Container.5.11.11\lib\net47\Unity.Container.dll</HintPath>
+    </Reference>
+    <Reference Include="WindowsBase" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="MainViewModule.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Views\ScaleMainView.xaml.cs">
+      <DependentUpon>ScaleMainView.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ScaleMainViewModel.cs">
+      <DependentUpon>ScaleMainView.xaml</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="Views\ScaleMainView.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\InkjetScale.BusinessLogic.Calculation\InkjetScale.BusinessLogic.Calculation.csproj">
+      <Project>{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1}</Project>
+      <Name>InkjetScale.BusinessLogic.Calculation</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\InkjetScale.Common\InkjetScale.Common.csproj">
+      <Project>{BC7536F1-00FA-4970-8460-22B63D280108}</Project>
+      <Name>InkjetScale.Common</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\InkjetScale.GUI.LogViews\InkjetScale.GUI.LogViews.csproj">
+      <Project>{799D6601-8F88-4C27-8952-7760BAE9DA0C}</Project>
+      <Name>InkjetScale.GUI.LogViews</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\InkjetScale.GUI.ScaleControlViews\InkjetScale.GUI.ScaleControlViews.csproj">
+      <Project>{EC2237E4-678C-4C05-81AC-4E3532FDC0A8}</Project>
+      <Name>InkjetScale.GUI.ScaleControlViews</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Import Project="..\packages\MaterialDesignThemes.4.5.0\build\MaterialDesignThemes.targets" Condition="Exists('..\packages\MaterialDesignThemes.4.5.0\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.4.5.0\build\MaterialDesignThemes.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MaterialDesignThemes.4.5.0\build\MaterialDesignThemes.targets'))" />
+  </Target>
+</Project>

+ 30 - 0
InkjetScale/InkjetScale.GUI.MainViews/MainViewModule.cs

@@ -0,0 +1,30 @@
+using InkjetScale.Common.StringNames;
+using Prism.Ioc;
+using Prism.Modularity;
+using Prism.Mvvm;
+using Prism.Regions;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.GUI.MainViews
+{
+    public class MainViewModule : IModule
+    {
+        public void OnInitialized(IContainerProvider containerProvider)
+        {
+            ViewModelLocationProvider.Register<Views.ScaleMainView, Views.ScaleMainViewModel>();
+
+            var regionManager = containerProvider.Resolve<IRegionManager>();
+            regionManager.RegisterViewWithRegion(RegionNames.MainRegion, typeof(Views.ScaleMainView));
+        }
+
+        public void RegisterTypes(IContainerRegistry containerRegistry)
+        {
+
+        }
+    }
+}
+

+ 36 - 0
InkjetScale/InkjetScale.GUI.MainViews/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 
+// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
+// 이러한 특성 값을 변경하세요.
+[assembly: AssemblyTitle("InkjetScale.GUI.MainViews")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("InkjetScale.GUI.MainViews")]
+[assembly: AssemblyCopyright("Copyright ©  2022")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
+[assembly: ComVisible(false)]
+
+// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
+[assembly: Guid("a31e17bc-2226-4c99-8adb-bf438f4eefd5")]
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+//      주 버전
+//      부 버전 
+//      빌드 번호
+//      수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
+// 기본값으로 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 246 - 0
InkjetScale/InkjetScale.GUI.MainViews/Views/ScaleMainView.xaml

@@ -0,0 +1,246 @@
+<UserControl x:Class="InkjetScale.GUI.MainViews.Views.ScaleMainView"
+             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:InkjetScale.GUI.MainViews.Views"
+             mc:Ignorable="d" 
+             xmlns:prism="http://prismlibrary.com/"
+             prism:ViewModelLocator.AutoWireViewModel="True"
+             xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+             xmlns:Converter ="clr-namespace:InkjetScale.Common.Converter;assembly=InkjetScale.Common"
+             xmlns:c ="clr-namespace:CalcBinding;assembly=CalcBinding"
+             d:DesignHeight="952.94" d:DesignWidth="1450" Background="{x:Null}">
+    
+    <UserControl.Resources>
+        <Converter:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
+    </UserControl.Resources>
+    
+    <Grid>
+
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition/>
+            <ColumnDefinition/>
+        </Grid.ColumnDefinitions>
+
+        <Grid Grid.Column="0">
+
+            <Grid.RowDefinitions>
+                <RowDefinition Height="2*"/>
+                <RowDefinition Height="*"/>
+            </Grid.RowDefinitions>
+
+            <Grid Grid.Row="0">
+                <ContentControl Content="{Binding ControlView}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5"/>
+            </Grid>
+
+            <Grid Grid.Row="1">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="1.5*"/>
+                    <RowDefinition Height="*"/>
+                </Grid.RowDefinitions>
+
+                <Grid Grid.Row="0">
+
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition/>
+                        <ColumnDefinition/>
+                    </Grid.ColumnDefinitions>
+
+                    <Grid Grid.Column="0">
+
+                        <Border BorderBrush="#0075ce" CornerRadius="5" BorderThickness="2" Margin="5"  >
+                            <materialDesign:Card Background="LightBlue" Foreground="{DynamicResource PrimaryHueLightForegroundBrush}" Padding="8">
+                                <Grid>
+
+                                    <Grid.RowDefinitions>
+                                        <RowDefinition Height="*"/>
+                                        <RowDefinition Height="6"/>
+                                        <RowDefinition Height="*"/>
+                                    </Grid.RowDefinitions>
+
+                                    <Grid Grid.Row="0">
+                                        <TextBlock Text="Head" FontSize="25" Foreground="Black" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                                    </Grid>
+
+                                    <Separator Grid.Row="1"/>
+
+                                    <Grid Grid.Row="2">
+                                        <ComboBox ItemsSource="{Binding HeadList}" SelectedItem="{Binding SelectedHead}" FontSize="25" Width="auto" HorizontalAlignment="Center"/>
+                                    </Grid>
+
+                                </Grid>
+                            </materialDesign:Card>
+                        </Border>
+                    </Grid>
+
+                    <Grid Grid.Column="1">
+
+                        <Border BorderBrush="#0075ce" CornerRadius="5" BorderThickness="2" Margin="5" >
+                            <materialDesign:Card Background="LightBlue" Foreground="{DynamicResource PrimaryHueLightForegroundBrush}" Padding="8">
+                                <Grid>
+
+                                    <Grid.RowDefinitions>
+                                        <RowDefinition Height="*"/>
+                                        <RowDefinition Height="6"/>
+                                        <RowDefinition Height="*"/>
+                                    </Grid.RowDefinitions>
+
+                                    <Grid Grid.Row="0">
+                                        <Button Style="{StaticResource MaterialDesignRaisedButton}" Command="{Binding SendCommand}"  
+                                                HorizontalAlignment="Center" VerticalAlignment="Center" Background="{x:Null}" BorderThickness="0" >
+                                            <TextBlock Text="Command" FontSize="25" Foreground="Black" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                                        </Button>
+                                    </Grid>
+
+                                    <Separator Grid.Row="1"/>
+
+                                    <Grid Grid.Row="2">
+                                        <ComboBox ItemsSource="{Binding CommandList}" SelectedItem="{Binding SelectedCommand}" FontSize="25" Width="auto" HorizontalAlignment="Center"/>
+                                    </Grid>
+
+                                </Grid>
+                                
+                            </materialDesign:Card>
+                            
+                        </Border>
+                        
+                    </Grid>
+
+                </Grid>
+
+                <Grid Grid.Row="1">
+
+                    
+                    
+
+                </Grid>
+                
+            </Grid>
+
+        </Grid>
+
+        <Grid Grid.Column="1">
+
+
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition/>
+                <ColumnDefinition/>
+            </Grid.ColumnDefinitions>
+
+            <Grid Grid.Column="0">
+
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="*"/>
+                    <RowDefinition Height="*"/>
+                    <RowDefinition Height="3*"/>
+                </Grid.RowDefinitions>
+
+                <Grid Grid.Row="0" >
+
+                    <Border CornerRadius="10" Background="LightBlue" BorderBrush="#0075ce" Padding="5" BorderThickness="2" Margin="5">
+                        
+                        <Grid>
+                            
+                            <Grid.RowDefinitions>
+                                <RowDefinition/>
+                                <RowDefinition/>
+                            </Grid.RowDefinitions>
+
+                            <Grid Grid.Row="0">
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition/>
+                                    <ColumnDefinition/>
+                                </Grid.ColumnDefinitions>
+
+                                <Grid Grid.Column="0">
+                                    <Button Style="{StaticResource MaterialDesignRaisedButton}" Content="Zero" Command="{Binding RunCommand}" CommandParameter="Z"
+                                HorizontalAlignment="Center" VerticalAlignment="Center" MinWidth="100"/>
+                                </Grid>
+
+                                <Grid Grid.Column="1">
+                                    <Button Style="{StaticResource MaterialDesignRaisedButton}" Content="Measure" Command="{Binding RunCommand}" CommandParameter="S"   
+                                HorizontalAlignment="Center" VerticalAlignment="Center" MinWidth="100"/>
+                                </Grid>
+                            </Grid>
+
+                            <Grid Grid.Row="1">
+
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition/>
+                                    <ColumnDefinition/>
+                                </Grid.ColumnDefinitions>
+
+                                <TextBlock Grid.Column="0" Text="Receive" Foreground="Black" FontSize="20" Width="auto"
+                                   HorizontalAlignment="Center" VerticalAlignment="Center" />
+
+                                <TextBlock Grid.Column="1" Text="{Binding ReceiveMsg}" Foreground="Black" FontSize="20" Width="auto"
+                                   HorizontalAlignment="Center" VerticalAlignment="Center" />
+                            </Grid>
+                            
+                        </Grid>
+                        
+                    </Border>
+                    
+                </Grid>
+
+
+                <Grid Grid.Row="1" >
+
+                    <Border CornerRadius="10" Background="LightBlue" BorderBrush="#0075ce" Padding="5" BorderThickness="2" Margin="5">
+
+                        <Grid>
+
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition/>
+                                <ColumnDefinition/>
+                            </Grid.ColumnDefinitions>
+
+                            <Grid.RowDefinitions>
+                                <RowDefinition Height="*"/>
+                                <RowDefinition Height="*"/>
+                            </Grid.RowDefinitions>
+
+                            <Grid Grid.Row="0" Grid.Column="0">
+                                <TextBlock Text="Weight(mg)" Foreground="Black" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center" />
+                            </Grid>
+
+                            <Grid Grid.Row="0" Grid.Column="1">
+                                <StackPanel HorizontalAlignment="Left" VerticalAlignment="Top">
+                                    <materialDesign:PackIcon Kind="Brightness1" Width="25" Height="35" Foreground="LimeGreen"  
+                                                 Visibility="{c:Binding IsStable , Converter={StaticResource BooleanToVisibilityConverter}}" />
+                                    <materialDesign:PackIcon Kind="Brightness1" Width="25" Height="35" Foreground="Red"
+                                                 Visibility="{c:Binding !IsStable , Converter={StaticResource BooleanToVisibilityConverter}}"/>
+                                </StackPanel>
+                                <TextBlock Text="{Binding WeightValue, FallbackValue=0.00}" Foreground="Black" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center" />
+                            </Grid>
+
+                            <Grid Grid.Row="1" Grid.Column="0">
+                                <TextBlock Text="pl" Foreground="Black" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center" />
+                            </Grid>
+
+                            <Grid Grid.Row="1" Grid.Column="1">
+                                <TextBlock Text="{Binding PlValue, FallbackValue=0.00}" Foreground="Black" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center" />
+                            </Grid>
+
+                        </Grid>
+
+                    </Border>
+
+
+
+                </Grid>
+
+            </Grid>
+
+            <Grid Grid.Column="1" Margin="5">
+
+                <ContentControl Content="{Binding LogView}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
+
+            </Grid>
+
+        </Grid>
+
+    </Grid>
+    
+</UserControl>

+ 35 - 0
InkjetScale/InkjetScale.GUI.MainViews/Views/ScaleMainView.xaml.cs

@@ -0,0 +1,35 @@
+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 InkjetScale.GUI.MainViews.Views
+{
+    /// <summary>
+    /// ScaleMainView.xaml에 대한 상호 작용 논리
+    /// </summary>
+    public partial class ScaleMainView : UserControl
+    {
+        ScaleMainViewModel ViewModel => this.DataContext as ScaleMainViewModel;
+        public ScaleMainView()
+        {
+            InitializeComponent();
+            this.Loaded += ScaleMainView_Loaded;
+        }
+
+        private void ScaleMainView_Loaded(object sender, RoutedEventArgs e)
+        {
+            ViewModel.Init();
+        }
+    }
+}

+ 249 - 0
InkjetScale/InkjetScale.GUI.MainViews/Views/ScaleMainViewModel.cs

@@ -0,0 +1,249 @@
+using InkjetScale.BusinessLogic.Calculation;
+using InkjetScale.Common;
+using InkjetScale.Common.Events;
+using InkjetScale.GUI.LogViews.Views;
+using InkjetScale.GUI.ScaleControlViews.Views;
+using Prism.Commands;
+using Prism.Events;
+using Prism.Ioc;
+using Prism.Mvvm;
+using Prism.Regions;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.IO.Ports;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Input;
+
+namespace InkjetScale.GUI.MainViews.Views
+{
+    public class ScaleMainViewModel : BindableBase
+    {
+        
+        #region Property
+        private eCommand commandName = eCommand.S;
+        public eCommand CommandName { get => this.commandName; set => SetProperty(ref this.commandName, value); }
+
+        private eHeadList selectedHead;
+        public eHeadList SelectedHead { get => this.selectedHead; set => SetProperty(ref this.selectedHead, value); }
+
+        private bool isStable;
+        public bool IsStable { get => this.isStable; set => SetProperty(ref this.isStable, value); }
+
+        private string weightValue;
+        public string WeightValue { get => this.weightValue; set => SetProperty(ref this.weightValue, value); }
+
+        private string receiveMsg;
+        public string ReceiveMsg { get => this.receiveMsg; set => SetProperty(ref this.receiveMsg, value); }
+
+        private string plValue;
+        public string PlValue { get => this.plValue; set => SetProperty(ref this.plValue, value); }
+
+        private ScaleControlView controlView;
+        public ScaleControlView ControlView { get => this.controlView; set => SetProperty(ref this.controlView, value); }
+
+        private ScaleLogView logView;
+        public ScaleLogView LogView { get => this.logView; set => SetProperty(ref this.logView, value); }
+
+        private List<eCommand> commandList;
+        public List<eCommand> CommandList { get => this.commandList; set => SetProperty(ref this.commandList, value); }
+        
+        private List<eHeadList> headList;
+        public List<eHeadList> HeadList { get => this.headList; set => SetProperty(ref this.headList, value); }
+
+        #endregion
+
+        SerialPort scale = new SerialPort();
+
+        public ICommand SendCommand { get; set; }
+        public ICommand RunCommand { get; set; }
+        IEventAggregator ea = null;
+        IContainerProvider provider = null;
+
+        string Command = null;
+
+        public ScaleMainViewModel(IEventAggregator eventAggregator, IContainerProvider proVider)
+        {
+            this.CommandList = new List<eCommand>();
+            this.HeadList = new List<eHeadList>();
+
+            this.ea = eventAggregator;
+            this.provider = proVider;
+
+            this.SendCommand = new DelegateCommand(ExecuteSend);
+            this.RunCommand = new DelegateCommand<string>(ExecuteRun);
+        }
+
+        
+
+        #region Execute
+        private void ExecuteSend()
+        {
+            if (!scale.IsOpen)
+                return;
+            if (SelectedHead < 0)
+                return;
+
+            Command = CommandName.ToString();            
+            scale.Write(Command + Environment.NewLine);
+        }
+
+        private void ExecuteRun(string command)
+        {
+            if (!scale.IsOpen)
+                return;
+            if (SelectedHead < 0)
+                return;
+
+            if (command != null)
+            {
+                Command = command;
+                scale.Write(Command + Environment.NewLine); // command 보낼 때 \r\n 또는 Environment.NesLine 붙여서 보내야함
+            }
+            else
+                return;
+
+        }
+        #endregion
+
+        bool isInit = false;
+        internal void Init()
+        {
+            if(!isInit)
+            {
+
+                this.ControlView = this.provider.Resolve<ScaleControlView>();
+                this.LogView = this.provider.Resolve<ScaleLogView>();
+
+                for (eHeadList head = eHeadList.HeadPack1Head1; head <= eHeadList.HeadPack3Head4; head++)
+                {
+                    this.HeadList.Add(head);
+                }
+
+                for (eCommand com = eCommand.S; com <= eCommand.C; com++)
+                {
+                    this.CommandList.Add(com);
+                }
+
+                OpenSerialPort();
+
+            }
+
+        }
+
+        private void OpenSerialPort()
+        {
+            scale.PortName = "COM2";
+            scale.BaudRate = 9600;
+            scale.DataBits = 8;
+            scale.StopBits = StopBits.One;
+            scale.Parity = Parity.None;
+
+            if (!scale.IsOpen)
+            {
+                scale.Open();
+                scale.Encoding = Encoding.Default;
+                scale.DataReceived += new SerialDataReceivedEventHandler(SerialDataReceived);
+            }
+        }
+
+        private void SerialDataReceived(object sender, SerialDataReceivedEventArgs e)
+        {
+            Thread.Sleep(50);
+
+            ReceiveMsg = String.Empty;
+            WeightValue = String.Empty;
+            byte[] ReceiveByte = new byte[28];
+            int num = this.scale.Read(ReceiveByte, 0, 28);
+
+            try
+            {
+                bool isNum;
+                char c;
+                int val;
+                
+                switch (Command) 
+                {
+                    case "S": //-> S S      3.14 mg \r\n 
+                        {
+
+                            for (int index = 0; index < num; index++)
+                            {
+                                c = Convert.ToChar((object)ReceiveByte[index]); // Char 변환
+                                ReceiveMsg += c;
+
+                                isNum = int.TryParse(c.ToString(), out val); //숫자인지 문자인지 확인 할 변수
+                                if (isNum)
+                                    WeightValue += c;
+                                else
+                                {
+                                    if (c == ' ' || c.ToString() == Command || c == '\r' || c == '\n')
+                                        continue;
+
+                                    WeightValue += c;
+                                }
+
+                            }
+
+                            var splitMsg = ReceiveMsg.Split(' ');
+                            var stableParam = splitMsg[1];
+                            if (stableParam == "S" || stableParam == "M")
+                                IsStable = true;
+                            else
+                                IsStable = false;
+                            
+                            var mgVal = WeightValue.Substring(0, (WeightValue.Length - 5));
+                            var nozzle = 1024;
+                            var drops = 100;
+                            PlValue = $"{ScaleMath.GetPl(double.Parse(mgVal), nozzle, drops)}";
+
+                            ViewLogPubEvent(SelectedHead, double.Parse(WeightValue), double.Parse(mgVal));
+                            break;
+                        }
+
+                    case "Z": //-> Z A \r\n
+                        {
+                            for (int index = 0; index < num; index++)
+                            {
+                                c = Convert.ToChar((object)ReceiveByte[index]); // Char 변환
+
+                                if (c == ' ' || c == '\r' || c == '\n')
+                                    continue;
+                                else
+                                    ReceiveMsg += c;
+                            }
+
+                            if (ReceiveMsg == "ZA") 
+                            {
+                                ReceiveMsg = "Zero Complete";
+                                scale.Write("S" + Environment.NewLine);
+                            }
+
+                            break;
+                        }
+
+                    default:
+                        {
+                            ReceiveMsg = "Wrong Command!";
+                            break;
+                        }
+
+                }
+
+            }
+
+            catch
+            {
+            }
+        }
+
+        private void ViewLogPubEvent(eHeadList head, double weight, double pl)
+        {
+            var c = new ViewLogArgs() { Head = head , Weight = weight, pl = pl};
+            ea.GetEvent<ViewLogEvent>().Publish(c);
+        }
+    }
+}

+ 15 - 0
InkjetScale/InkjetScale.GUI.MainViews/packages.config

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="CalcBinding" version="2.5.2" targetFramework="net472" />
+  <package id="DynamicExpresso.Core" version="2.3.1" targetFramework="net472" />
+  <package id="MaterialDesignColors" version="2.0.6" targetFramework="net472" />
+  <package id="MaterialDesignThemes" version="4.5.0" targetFramework="net472" />
+  <package id="Microsoft.Xaml.Behaviors.Wpf" version="1.1.31" targetFramework="net472" />
+  <package id="Prism.Core" version="8.1.97" targetFramework="net472" />
+  <package id="Prism.Unity" version="8.1.97" targetFramework="net472" />
+  <package id="Prism.Wpf" version="8.1.97" targetFramework="net472" />
+  <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" />
+  <package id="System.Threading.Tasks.Extensions" version="4.5.2" targetFramework="net472" />
+  <package id="Unity.Abstractions" version="5.11.7" targetFramework="net472" />
+  <package id="Unity.Container" version="5.11.11" targetFramework="net472" />
+</packages>

+ 122 - 0
InkjetScale/InkjetScale.GUI.ScaleControlViews/InkjetScale.GUI.ScaleControlViews.csproj

@@ -0,0 +1,122 @@
+<?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>{EC2237E4-678C-4C05-81AC-4E3532FDC0A8}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>InkjetScale.GUI.ScaleControlViews</RootNamespace>
+    <AssemblyName>InkjetScale.GUI.ScaleControlViews</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <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>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote_LAB|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote_LAB\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="MaterialDesignColors, Version=2.0.6.0, Culture=neutral, PublicKeyToken=df2a72020bd7962a, processorArchitecture=MSIL">
+      <HintPath>..\packages\MaterialDesignColors.2.0.6\lib\net452\MaterialDesignColors.dll</HintPath>
+    </Reference>
+    <Reference Include="MaterialDesignThemes.Wpf, Version=4.5.0.0, Culture=neutral, PublicKeyToken=df2a72020bd7962a, processorArchitecture=MSIL">
+      <HintPath>..\packages\MaterialDesignThemes.4.5.0\lib\net452\MaterialDesignThemes.Wpf.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Xaml.Behaviors, Version=1.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\Microsoft.Xaml.Behaviors.Wpf.1.1.31\lib\net45\Microsoft.Xaml.Behaviors.dll</HintPath>
+    </Reference>
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+    <Reference Include="Prism, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Core.8.1.97\lib\net47\Prism.dll</HintPath>
+    </Reference>
+    <Reference Include="Prism.Unity.Wpf, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Unity.8.1.97\lib\net47\Prism.Unity.Wpf.dll</HintPath>
+    </Reference>
+    <Reference Include="Prism.Wpf, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Wpf.8.1.97\lib\net47\Prism.Wpf.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.2\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Xaml" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Unity.Abstractions, Version=5.11.7.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
+      <HintPath>..\packages\Unity.Abstractions.5.11.7\lib\net47\Unity.Abstractions.dll</HintPath>
+    </Reference>
+    <Reference Include="Unity.Container, Version=5.11.11.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
+      <HintPath>..\packages\Unity.Container.5.11.11\lib\net47\Unity.Container.dll</HintPath>
+    </Reference>
+    <Reference Include="WindowsBase" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ScaleControlViewModule.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Views\ScaleControlView.xaml.cs">
+      <DependentUpon>ScaleControlView.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ScaleControlViewModel.cs">
+      <DependentUpon>ScaleControlView.xaml</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="Views\ScaleControlView.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\InkjetScale.Common\InkjetScale.Common.csproj">
+      <Project>{BC7536F1-00FA-4970-8460-22B63D280108}</Project>
+      <Name>InkjetScale.Common</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Import Project="..\packages\MaterialDesignThemes.4.5.0\build\MaterialDesignThemes.targets" Condition="Exists('..\packages\MaterialDesignThemes.4.5.0\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.4.5.0\build\MaterialDesignThemes.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MaterialDesignThemes.4.5.0\build\MaterialDesignThemes.targets'))" />
+  </Target>
+</Project>

+ 36 - 0
InkjetScale/InkjetScale.GUI.ScaleControlViews/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 
+// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
+// 이러한 특성 값을 변경하세요.
+[assembly: AssemblyTitle("InkjetScale.GUI.ScaleControlViews")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("InkjetScale.GUI.ScaleControlViews")]
+[assembly: AssemblyCopyright("Copyright ©  2022")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
+[assembly: ComVisible(false)]
+
+// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
+[assembly: Guid("ec2237e4-678c-4c05-81ac-4e3532fdc0a8")]
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+//      주 버전
+//      부 버전 
+//      빌드 번호
+//      수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
+// 기본값으로 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 26 - 0
InkjetScale/InkjetScale.GUI.ScaleControlViews/ScaleControlViewModule.cs

@@ -0,0 +1,26 @@
+using InkjetScale.Common.StringNames;
+using Prism.Ioc;
+using Prism.Modularity;
+using Prism.Mvvm;
+using Prism.Regions;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace InkjetScale.GUI.ScaleControlViews
+{
+    public class ScaleControlViewModule : IModule
+    {
+        public void OnInitialized(IContainerProvider containerProvider)
+        {
+            ViewModelLocationProvider.Register<Views.ScaleControlView, Views.ScaleControlViewModel>();
+        }
+
+        public void RegisterTypes(IContainerRegistry containerRegistry)
+        {
+
+        }
+    }
+}

+ 78 - 0
InkjetScale/InkjetScale.GUI.ScaleControlViews/Views/ScaleControlView.xaml

@@ -0,0 +1,78 @@
+<UserControl x:Class="InkjetScale.GUI.ScaleControlViews.Views.ScaleControlView"
+             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:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+             xmlns:local="clr-namespace:InkjetScale.GUI.ScaleControlViews.Views"
+             mc:Ignorable="d" 
+             d:DesignHeight="450" d:DesignWidth="500">
+    
+    <Border CornerRadius="10" Background="LightBlue" BorderBrush="#0075ce" Padding="5" BorderThickness="2">
+
+        <Grid>
+
+            <Grid.RowDefinitions>
+                <RowDefinition Height="*"/>
+                <RowDefinition Height="*"/>
+                <RowDefinition Height="*"/>
+                <RowDefinition Height="*"/>
+                <RowDefinition Height="*"/>
+            </Grid.RowDefinitions>
+
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="*"/>
+                <ColumnDefinition Width="2*"/>
+            </Grid.ColumnDefinitions>
+
+            <Grid Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center"  VerticalAlignment="Center">
+                <TextBlock Text="Port Name" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18"  Foreground="Black"/>
+            </Grid>
+
+            <Grid Grid.Row="0" Grid.Column="1" Width="160" HorizontalAlignment="Center" VerticalAlignment="Center">
+                <!--<ComboBox ItemsSource="{Binding ComPortList}" SelectedItem="{Binding SelectedComPort}" FontSize="15" Foreground="Black" />-->
+                <TextBlock Text="COM2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18"  Foreground="Black"/>
+            </Grid>
+
+            <Grid Grid.Row="1" Grid.Column="0" HorizontalAlignment="Center"  VerticalAlignment="Center">
+                <TextBlock Text="BaudRate" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18" Foreground="Black"/>
+            </Grid>
+
+            <Grid Grid.Row="1" Grid.Column="1"  Width="160" HorizontalAlignment="Center" VerticalAlignment="Center">
+                <!--<ComboBox ItemsSource="{Binding BaudRateList}" SelectedItem="{Binding SelectedBaudRate}" FontSize="15" Foreground="Black" />-->
+                <TextBlock Text="9600" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18"  Foreground="Black"/>
+            </Grid>
+
+            <Grid Grid.Row="2" Grid.Column="0" HorizontalAlignment="Center"  VerticalAlignment="Center">
+                <Label Content="Data Bits" HorizontalAlignment="Center" VerticalAlignment="Center" HorizontalContentAlignment="Center" FontSize="18" Width="150" Foreground="Black"/>
+            </Grid>
+
+            <Grid Grid.Row="2" Grid.Column="1"  Width="160" HorizontalAlignment="Center" VerticalAlignment="Center">
+                <!--<ComboBox ItemsSource="{Binding DataBitsList}" SelectedItem="{Binding SelectedDataBits}" FontSize="15" Foreground="Black" />-->
+                <TextBlock Text="8" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18"  Foreground="Black"/>
+            </Grid>
+
+            <Grid Grid.Row="3" Grid.Column="0" HorizontalAlignment="Center"  VerticalAlignment="Center">
+                <Label Content="Stop Bits" HorizontalAlignment="Center" VerticalAlignment="Center" HorizontalContentAlignment="Center" FontSize="18" Width="150" Foreground="Black"/>
+            </Grid>
+
+            <Grid Grid.Row="3" Grid.Column="1"  Width="160" HorizontalAlignment="Center" VerticalAlignment="Center">
+                <!--<ComboBox ItemsSource="{Binding StopBitsList}" SelectedItem="{Binding SelectedStopBits}" FontSize="15" Foreground="Black" />-->
+                <TextBlock Text="one" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18"  Foreground="Black"/>
+            </Grid>
+
+            <Grid Grid.Row="4" Grid.Column="0" HorizontalAlignment="Center"  VerticalAlignment="Center">
+                <Label Content="Parity" HorizontalAlignment="Center" VerticalAlignment="Center" HorizontalContentAlignment="Center" FontSize="18" Width="150" Foreground="Black"/>
+            </Grid>
+
+            <Grid Grid.Row="4" Grid.Column="1" Width="160" HorizontalAlignment="Center" VerticalAlignment="Center">
+                <!--<ComboBox ItemsSource="{Binding ParityList}" SelectedItem="{Binding SelectedParity}" FontSize="15" Foreground="Black" />-->
+                <TextBlock Text="None" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18"  Foreground="Black"/>
+            </Grid>
+
+
+
+        </Grid>
+    </Border>
+    
+</UserControl>

+ 30 - 0
InkjetScale/InkjetScale.GUI.ScaleControlViews/Views/ScaleControlView.xaml.cs

@@ -0,0 +1,30 @@
+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 InkjetScale.GUI.ScaleControlViews.Views
+{
+    /// <summary>
+    /// ScaleControlView.xaml에 대한 상호 작용 논리
+    /// </summary>
+    public partial class ScaleControlView : UserControl
+    {
+        ScaleControlViewModel ViewModel => this.DataContext as ScaleControlViewModel;
+        public ScaleControlView()
+        {
+            InitializeComponent();
+        }
+
+    }
+}

+ 122 - 0
InkjetScale/InkjetScale.GUI.ScaleControlViews/Views/ScaleControlViewModel.cs

@@ -0,0 +1,122 @@
+using InkjetScale.Common.Events;
+using Prism.Commands;
+using Prism.Events;
+using Prism.Mvvm;
+using Prism.Regions;
+using System;
+using System.Collections.Generic;
+using System.IO.Ports;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Input;
+
+namespace InkjetScale.GUI.ScaleControlViews.Views
+{
+
+    public class ScaleControlViewModel : BindableBase
+    {
+        //#region Property
+        //private string selectedComPort;
+        //public string SelectedComPort { get => this.selectedComPort; set => SetProperty(ref this.selectedComPort, value); }
+
+        //private int selectedBaudRate;
+        //public int SelectedBaudRate { get => this.selectedBaudRate; set => SetProperty(ref this.selectedBaudRate, value); }
+
+        //private int selectedDataBits;
+        //public int SelectedDataBits { get => this.selectedDataBits; set => SetProperty(ref this.selectedDataBits, value); }
+
+        //private StopBits selectedStopBits;
+        //public StopBits SelectedStopBits { get => this.selectedStopBits; set => SetProperty(ref this.selectedStopBits, value); }
+
+        //private Parity selectedParity;
+        //public Parity SelectedParity { get => this.selectedParity; set => SetProperty(ref this.selectedParity, value); }
+
+        //#endregion
+
+        //#region List
+        //private List<string> comPortList;
+        //public List<string> ComPortList
+        //{
+        //    get { return this.comPortList; }
+        //    set { SetProperty(ref this.comPortList, value); }
+        //}
+        //private List<int> baudRateList;
+        //public List<int> BaudRateList
+        //{
+        //    get { return this.baudRateList; }
+        //    set { SetProperty(ref this.baudRateList, value); }
+        //}
+        //private List<int> dataBitsList;
+        //public List<int> DataBitsList
+        //{
+        //    get { return this.dataBitsList; }
+        //    set { SetProperty(ref this.dataBitsList, value); }
+        //}
+        //private List<StopBits> stopBitsList;
+        //public List<StopBits> StopBitsList
+        //{
+        //    get { return this.stopBitsList; }
+        //    set { SetProperty(ref this.stopBitsList, value); }
+        //}
+        //private List<Parity> parityList;
+        //public List<Parity> ParityList
+        //{
+        //    get { return this.parityList; }
+        //    set { SetProperty(ref this.parityList, value); }
+        //}
+
+        //#endregion
+
+        public ScaleControlViewModel()
+        {
+            //ComPortList = new List<string>();
+            //BaudRateList = new List<int>();
+            //DataBitsList = new List<int>();
+            //StopBitsList = new List<StopBits>();
+            //ParityList = new List<Parity>();
+        }
+
+        internal void Init()
+        {
+            //InitSerialPort();
+            //InitSelectedVal();
+        }
+
+        void InitSerialPort()
+        {
+            //string[] ports = SerialPort.GetPortNames();
+
+            //foreach (string port in ports)
+            //{
+            //    ComPortList.Add(port); //PortComboBox에 COM1, COM3, COM4 추가
+            //}
+
+            //for (StopBits sb = StopBits.None; sb <= StopBits.OnePointFive; sb++)
+            //{
+            //    StopBitsList.Add(sb);
+            //}
+
+            //for (Parity parity = Parity.None; parity <= Parity.Space; parity++)
+            //{
+            //    ParityList.Add(parity);
+            //}
+
+            //BaudRateList.Add(9600);
+            //BaudRateList.Add(19200);
+
+            //DataBitsList.Add(8);
+        }
+
+        private void InitSelectedVal()
+        {
+            //SelectedComPort = ComPortList[0];
+            //SelectedBaudRate = BaudRateList[0]; //9600
+            //SelectedDataBits = DataBitsList[0]; //8
+            //SelectedStopBits = StopBitsList[(int)StopBits.One];
+            //SelectedParity = ParityList[(int)Parity.None];
+        }
+
+    }
+}

+ 13 - 0
InkjetScale/InkjetScale.GUI.ScaleControlViews/packages.config

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="MaterialDesignColors" version="2.0.6" targetFramework="net472" />
+  <package id="MaterialDesignThemes" version="4.5.0" targetFramework="net472" />
+  <package id="Microsoft.Xaml.Behaviors.Wpf" version="1.1.31" targetFramework="net472" />
+  <package id="Prism.Core" version="8.1.97" targetFramework="net472" />
+  <package id="Prism.Unity" version="8.1.97" targetFramework="net472" />
+  <package id="Prism.Wpf" version="8.1.97" targetFramework="net472" />
+  <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" />
+  <package id="System.Threading.Tasks.Extensions" version="4.5.2" targetFramework="net472" />
+  <package id="Unity.Abstractions" version="5.11.7" targetFramework="net472" />
+  <package id="Unity.Container" version="5.11.11" targetFramework="net472" />
+</packages>

+ 102 - 0
InkjetScale/InkjetScale.sln

@@ -0,0 +1,102 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.1.32228.430
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkjetScale", "InkjetScale\InkjetScale.csproj", "{9D711BC9-E822-4FF1-A81D-AD5759C337C0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{6EDF61B6-2F29-413F-B76E-D360900B056D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PresentationLayer", "PresentationLayer", "{34C2B50F-F924-438F-9F1C-8D656085E58A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BusinessLogicLayer", "BusinessLogicLayer", "{96A2A34C-DFF8-484E-A6BC-349EEC2B8C76}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GUI", "GUI", "{27AC19C6-C633-4862-A69E-42681B82C011}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkjetScale.GUI.ScaleControlViews", "InkjetScale.GUI.ScaleControlViews\InkjetScale.GUI.ScaleControlViews.csproj", "{EC2237E4-678C-4C05-81AC-4E3532FDC0A8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkjetScale.GUI.MainViews", "InkjetScale.GUI.MainViews\InkjetScale.GUI.MainViews.csproj", "{A31E17BC-2226-4C99-8ADB-BF438F4EEFD5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkjetScale.BusinessLogic.Calculation", "InkjetScale.BusinessLogic.Calculation\InkjetScale.BusinessLogic.Calculation.csproj", "{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkjetScale.Common", "InkjetScale.Common\InkjetScale.Common.csproj", "{BC7536F1-00FA-4970-8460-22B63D280108}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkjetScale.BusinessLogic.Admin", "InkjetScale.BusinessLogic.Admin\InkjetScale.BusinessLogic.Admin.csproj", "{3DDA8868-7FC0-4014-AA47-9375E608BD0C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkjetScale.BusinessLogic.ScaleCore", "InkjetScale.BusinessLogic.ScaleCore\InkjetScale.BusinessLogic.ScaleCore.csproj", "{307E7E0E-EE1E-4A2C-BD58-818AEF9F8B5C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkjetScale.GUI.LogViews", "InkjetScale.GUI.LogViews\InkjetScale.GUI.LogViews.csproj", "{799D6601-8F88-4C27-8952-7760BAE9DA0C}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+		Remote_LAB|Any CPU = Remote_LAB|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{9D711BC9-E822-4FF1-A81D-AD5759C337C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9D711BC9-E822-4FF1-A81D-AD5759C337C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9D711BC9-E822-4FF1-A81D-AD5759C337C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9D711BC9-E822-4FF1-A81D-AD5759C337C0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9D711BC9-E822-4FF1-A81D-AD5759C337C0}.Remote_LAB|Any CPU.ActiveCfg = Remote_LAB|Any CPU
+		{9D711BC9-E822-4FF1-A81D-AD5759C337C0}.Remote_LAB|Any CPU.Build.0 = Remote_LAB|Any CPU
+		{EC2237E4-678C-4C05-81AC-4E3532FDC0A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{EC2237E4-678C-4C05-81AC-4E3532FDC0A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{EC2237E4-678C-4C05-81AC-4E3532FDC0A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{EC2237E4-678C-4C05-81AC-4E3532FDC0A8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{EC2237E4-678C-4C05-81AC-4E3532FDC0A8}.Remote_LAB|Any CPU.ActiveCfg = Remote_LAB|Any CPU
+		{EC2237E4-678C-4C05-81AC-4E3532FDC0A8}.Remote_LAB|Any CPU.Build.0 = Remote_LAB|Any CPU
+		{A31E17BC-2226-4C99-8ADB-BF438F4EEFD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A31E17BC-2226-4C99-8ADB-BF438F4EEFD5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A31E17BC-2226-4C99-8ADB-BF438F4EEFD5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A31E17BC-2226-4C99-8ADB-BF438F4EEFD5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A31E17BC-2226-4C99-8ADB-BF438F4EEFD5}.Remote_LAB|Any CPU.ActiveCfg = Remote_LAB|Any CPU
+		{A31E17BC-2226-4C99-8ADB-BF438F4EEFD5}.Remote_LAB|Any CPU.Build.0 = Remote_LAB|Any CPU
+		{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1}.Remote_LAB|Any CPU.ActiveCfg = Remote_LAB|Any CPU
+		{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1}.Remote_LAB|Any CPU.Build.0 = Remote_LAB|Any CPU
+		{BC7536F1-00FA-4970-8460-22B63D280108}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{BC7536F1-00FA-4970-8460-22B63D280108}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{BC7536F1-00FA-4970-8460-22B63D280108}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{BC7536F1-00FA-4970-8460-22B63D280108}.Release|Any CPU.Build.0 = Release|Any CPU
+		{BC7536F1-00FA-4970-8460-22B63D280108}.Remote_LAB|Any CPU.ActiveCfg = Remote_LAB|Any CPU
+		{BC7536F1-00FA-4970-8460-22B63D280108}.Remote_LAB|Any CPU.Build.0 = Remote_LAB|Any CPU
+		{3DDA8868-7FC0-4014-AA47-9375E608BD0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3DDA8868-7FC0-4014-AA47-9375E608BD0C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3DDA8868-7FC0-4014-AA47-9375E608BD0C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3DDA8868-7FC0-4014-AA47-9375E608BD0C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3DDA8868-7FC0-4014-AA47-9375E608BD0C}.Remote_LAB|Any CPU.ActiveCfg = Remote_LAB|Any CPU
+		{3DDA8868-7FC0-4014-AA47-9375E608BD0C}.Remote_LAB|Any CPU.Build.0 = Remote_LAB|Any CPU
+		{307E7E0E-EE1E-4A2C-BD58-818AEF9F8B5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{307E7E0E-EE1E-4A2C-BD58-818AEF9F8B5C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{307E7E0E-EE1E-4A2C-BD58-818AEF9F8B5C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{307E7E0E-EE1E-4A2C-BD58-818AEF9F8B5C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{307E7E0E-EE1E-4A2C-BD58-818AEF9F8B5C}.Remote_LAB|Any CPU.ActiveCfg = Remote_LAB|Any CPU
+		{307E7E0E-EE1E-4A2C-BD58-818AEF9F8B5C}.Remote_LAB|Any CPU.Build.0 = Remote_LAB|Any CPU
+		{799D6601-8F88-4C27-8952-7760BAE9DA0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{799D6601-8F88-4C27-8952-7760BAE9DA0C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{799D6601-8F88-4C27-8952-7760BAE9DA0C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{799D6601-8F88-4C27-8952-7760BAE9DA0C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{799D6601-8F88-4C27-8952-7760BAE9DA0C}.Remote_LAB|Any CPU.ActiveCfg = Release|Any CPU
+		{799D6601-8F88-4C27-8952-7760BAE9DA0C}.Remote_LAB|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{9D711BC9-E822-4FF1-A81D-AD5759C337C0} = {34C2B50F-F924-438F-9F1C-8D656085E58A}
+		{EC2237E4-678C-4C05-81AC-4E3532FDC0A8} = {27AC19C6-C633-4862-A69E-42681B82C011}
+		{A31E17BC-2226-4C99-8ADB-BF438F4EEFD5} = {27AC19C6-C633-4862-A69E-42681B82C011}
+		{74C4EB8F-0A6F-47A0-AFDA-158FB056C0C1} = {96A2A34C-DFF8-484E-A6BC-349EEC2B8C76}
+		{BC7536F1-00FA-4970-8460-22B63D280108} = {6EDF61B6-2F29-413F-B76E-D360900B056D}
+		{3DDA8868-7FC0-4014-AA47-9375E608BD0C} = {96A2A34C-DFF8-484E-A6BC-349EEC2B8C76}
+		{307E7E0E-EE1E-4A2C-BD58-818AEF9F8B5C} = {96A2A34C-DFF8-484E-A6BC-349EEC2B8C76}
+		{799D6601-8F88-4C27-8952-7760BAE9DA0C} = {27AC19C6-C633-4862-A69E-42681B82C011}
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {4CA81647-D0FF-4C4A-AAA8-BF923044E336}
+	EndGlobalSection
+EndGlobal

+ 6 - 0
InkjetScale/InkjetScale/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>

+ 18 - 0
InkjetScale/InkjetScale/App.xaml

@@ -0,0 +1,18 @@
+<prism:PrismApplication x:Class="InkjetScale.App"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:local="clr-namespace:InkjetScale"
+             xmlns:prism="http://prismlibrary.com/"
+             Startup="PrismApplication_Startup" Exit="PrismApplication_Exit">
+    <Application.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml"/>
+                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml"/>
+                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Button.xaml" />
+                <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Indigo.xaml" />
+                <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" />
+            </ResourceDictionary.MergedDictionaries>
+        </ResourceDictionary>
+    </Application.Resources>
+</prism:PrismApplication>

+ 63 - 0
InkjetScale/InkjetScale/App.xaml.cs

@@ -0,0 +1,63 @@
+using InkjetScale.BusinessLogic.ScaleCore;
+using InkjetScale.GUI.LogViews;
+using InkjetScale.GUI.MainViews;
+using InkjetScale.GUI.ScaleControlViews;
+using Prism.Ioc;
+using Prism.Modularity;
+using Prism.Unity;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace InkjetScale
+{
+    /// <summary>
+    /// App.xaml에 대한 상호 작용 논리
+    /// </summary>
+    public partial class App : PrismApplication
+    {
+        private void PrismApplication_Startup(object sender, StartupEventArgs e)
+        {
+
+        }
+
+        private void PrismApplication_Exit(object sender, ExitEventArgs e)
+        {
+        }
+
+
+        #region prism
+        protected override Window CreateShell()
+        {
+            return this.Container.Resolve<Shell>();
+        }
+
+        protected override void RegisterTypes(IContainerRegistry containerRegistry)
+        {
+            containerRegistry.RegisterInstance(this.Container);
+            containerRegistry.RegisterInstance(containerRegistry);
+
+            containerRegistry.RegisterSingleton<Icore, InkjetScaleCore>();
+        }
+
+        protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
+        {
+            base.ConfigureModuleCatalog(moduleCatalog);
+
+            moduleCatalog.AddModule(typeof(MainViewModule));
+            moduleCatalog.AddModule(typeof(ScaleControlViewModule));
+            moduleCatalog.AddModule(typeof(LogViewModule));
+
+        }
+
+        protected override void ConfigureViewModelLocator()
+        {
+            base.ConfigureViewModelLocator();
+        }
+        #endregion
+    }
+}

+ 185 - 0
InkjetScale/InkjetScale/InkjetScale.csproj

@@ -0,0 +1,185 @@
+<?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>{9D711BC9-E822-4FF1-A81D-AD5759C337C0}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>InkjetScale</RootNamespace>
+    <AssemblyName>InkjetScale</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>
+    <NuGetPackageImportStamp>
+    </NuGetPackageImportStamp>
+  </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>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote_LAB|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>\\192.168.0.52\ScaleCalculator\InkjetScale\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="CalcBinding, Version=2.5.2.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\CalcBinding.2.5.2\lib\net45\CalcBinding.dll</HintPath>
+    </Reference>
+    <Reference Include="DynamicExpresso.Core, Version=2.3.1.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\DynamicExpresso.Core.2.3.1\lib\net461\DynamicExpresso.Core.dll</HintPath>
+    </Reference>
+    <Reference Include="MaterialDesignColors, Version=2.0.6.0, Culture=neutral, PublicKeyToken=df2a72020bd7962a, processorArchitecture=MSIL">
+      <HintPath>..\packages\MaterialDesignColors.2.0.6\lib\net452\MaterialDesignColors.dll</HintPath>
+    </Reference>
+    <Reference Include="MaterialDesignThemes.Wpf, Version=4.5.0.0, Culture=neutral, PublicKeyToken=df2a72020bd7962a, processorArchitecture=MSIL">
+      <HintPath>..\packages\MaterialDesignThemes.4.5.0\lib\net452\MaterialDesignThemes.Wpf.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Xaml.Behaviors, Version=1.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\Microsoft.Xaml.Behaviors.Wpf.1.1.31\lib\net45\Microsoft.Xaml.Behaviors.dll</HintPath>
+    </Reference>
+    <Reference Include="Prism, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Core.8.1.97\lib\net47\Prism.dll</HintPath>
+    </Reference>
+    <Reference Include="Prism.Unity.Wpf, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Unity.8.1.97\lib\net47\Prism.Unity.Wpf.dll</HintPath>
+    </Reference>
+    <Reference Include="Prism.Wpf, Version=8.1.97.5141, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
+      <HintPath>..\packages\Prism.Wpf.8.1.97\lib\net47\Prism.Wpf.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.2\lib\netstandard2.0\System.Threading.Tasks.Extensions.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="Unity.Abstractions, Version=5.11.7.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
+      <HintPath>..\packages\Unity.Abstractions.5.11.7\lib\net47\Unity.Abstractions.dll</HintPath>
+    </Reference>
+    <Reference Include="Unity.Container, Version=5.11.11.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
+      <HintPath>..\packages\Unity.Container.5.11.11\lib\net47\Unity.Container.dll</HintPath>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <ApplicationDefinition Include="App.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </ApplicationDefinition>
+    <Compile Include="InkjetScaleCore.cs" />
+    <Compile Include="ShellViewModel.cs">
+      <DependentUpon>Shell.xaml</DependentUpon>
+    </Compile>
+    <Page Include="Shell.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Compile Include="App.xaml.cs">
+      <DependentUpon>App.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Shell.xaml.cs">
+      <DependentUpon>Shell.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="..\InkjetScale.BusinessLogic.Admin\InkjetScale.BusinessLogic.Admin.csproj">
+      <Project>{3DDA8868-7FC0-4014-AA47-9375E608BD0C}</Project>
+      <Name>InkjetScale.BusinessLogic.Admin</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\InkjetScale.BusinessLogic.ScaleCore\InkjetScale.BusinessLogic.ScaleCore.csproj">
+      <Project>{307E7E0E-EE1E-4A2C-BD58-818AEF9F8B5C}</Project>
+      <Name>InkjetScale.BusinessLogic.ScaleCore</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\InkjetScale.Common\InkjetScale.Common.csproj">
+      <Project>{bc7536f1-00fa-4970-8460-22b63d280108}</Project>
+      <Name>InkjetScale.Common</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\InkjetScale.GUI.LogViews\InkjetScale.GUI.LogViews.csproj">
+      <Project>{799D6601-8F88-4C27-8952-7760BAE9DA0C}</Project>
+      <Name>InkjetScale.GUI.LogViews</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\InkjetScale.GUI.MainViews\InkjetScale.GUI.MainViews.csproj">
+      <Project>{A31E17BC-2226-4C99-8ADB-BF438F4EEFD5}</Project>
+      <Name>InkjetScale.GUI.MainViews</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\InkjetScale.GUI.ScaleControlViews\InkjetScale.GUI.ScaleControlViews.csproj">
+      <Project>{EC2237E4-678C-4C05-81AC-4E3532FDC0A8}</Project>
+      <Name>InkjetScale.GUI.ScaleControlViews</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Import Project="..\packages\MaterialDesignThemes.4.5.0\build\MaterialDesignThemes.targets" Condition="Exists('..\packages\MaterialDesignThemes.4.5.0\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.4.5.0\build\MaterialDesignThemes.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MaterialDesignThemes.4.5.0\build\MaterialDesignThemes.targets'))" />
+  </Target>
+</Project>

+ 106 - 0
InkjetScale/InkjetScale/InkjetScaleCore.cs

@@ -0,0 +1,106 @@
+using InkjetScale.BusinessLogic.ScaleCore;
+using Prism.Events;
+using System;
+using System.Collections.Generic;
+using System.IO.Ports;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace InkjetScale
+{
+    public class InkjetScaleCore : ScaleCoreBase
+    {
+        public InkjetScaleCore(IEventAggregator eventAggregator) : base(eventAggregator)
+        {
+
+        }
+
+        public override void SerialDataReceived(object sender, SerialDataReceivedEventArgs e)
+        {
+            //Thread.Sleep(50);
+
+            //string ReceiveMsg = String.Empty;
+            //string ReceiveVal = String.Empty;
+            //byte[] ReceiveByte = new byte[28];
+            //int num = this.scale.Read(ReceiveByte, 0, 28);
+
+            //try
+            //{
+            //    bool isNum;
+            //    char s;
+            //    int val;
+
+            //    switch (Command)
+            //    {
+            //        case "S":
+            //            {
+            //                if (Convert.ToChar((object)ReceiveByte[2]) != 'S')
+            //                    ReceiveVal = "Not Stable";
+
+            //                for (int index = 0; index < num; index++)
+            //                {
+            //                    s = Convert.ToChar((object)ReceiveByte[index]); // Char 변환
+            //                    ReceiveMsg += s;
+
+            //                    isNum = int.TryParse(s.ToString(), out val); //숫자인지 문자인지 확인 할 변수
+            //                    if (isNum)
+            //                        ReceiveVal += s;
+            //                    else
+            //                    {
+            //                        if (s == ' ' || s.ToString() == Command || s == '\r' || s == '\n')
+            //                            continue;
+
+            //                        ReceiveVal += s;
+            //                    }
+
+            //                }
+
+            //                var mgVal = ReceiveVal.Substring(0, (ReceiveVal.Length - 5));
+            //                var nozzle = 1024;
+            //                var drops = 100;
+            //                PlVal = $"{ScaleMath.GetPl(double.Parse(mgVal), nozzle, drops)}pl";
+            //                break;
+            //            }
+
+            //        case "Z":
+            //            {
+            //                for (int index = 0; index < num; index++)
+            //                {
+            //                    s = Convert.ToChar((object)ReceiveByte[index]); // Char 변환
+
+            //                    if (s == ' ' || s == '\r' || s == '\n')
+            //                        continue;
+            //                    else
+            //                        ReceiveMsg += s;
+            //                }
+
+            //                if (ReceiveMsg == "ZA")
+            //                    ReceiveMsg = "Zero Complete";
+
+            //                break;
+            //            }
+
+            //        default:
+            //            {
+            //                ReceiveMsg = "Wrong Command!";
+            //                break;
+            //            }
+
+            //    }
+
+            //}
+
+            //catch
+            //{
+            //}
+        }
+
+        public override void Dispose()
+        {
+            base.Dispose();
+        }
+
+    }
+}

+ 55 - 0
InkjetScale/InkjetScale/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("InkjetScale")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("InkjetScale")]
+[assembly: AssemblyCopyright("Copyright ©  2022")]
+[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")]

+ 70 - 0
InkjetScale/InkjetScale/Properties/Resources.Designer.cs

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

+ 29 - 0
InkjetScale/InkjetScale/Properties/Settings.Designer.cs

@@ -0,0 +1,29 @@
+//------------------------------------------------------------------------------
+// <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 InkjetScale.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
InkjetScale/InkjetScale/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>

+ 496 - 0
InkjetScale/InkjetScale/Shell.xaml

@@ -0,0 +1,496 @@
+<Window x:Class="InkjetScale.Shell"
+        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:InkjetScale"
+        mc:Ignorable="d"
+        xmlns:prism="http://prismlibrary.com/"
+        prism:ViewModelLocator.AutoWireViewModel="True"
+        xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+        xmlns:materialDesignColors="clr-namespace:MaterialDesignColors;assembly=MaterialDesignColors"
+        xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf;assembly=MaterialDesignThemes.Wpf"      
+        xmlns:CommonString="clr-namespace:InkjetScale.Common.StringNames;assembly=InkjetScale.Common"  
+        xmlns:c ="clr-namespace:CalcBinding;assembly=CalcBinding"
+        WindowStartupLocation="CenterScreen"
+        WindowStyle="None"
+        Background="{DynamicResource MaterialDesignPaper}" 
+        FontFamily="{DynamicResource MaterialDesignFont}"
+        TextElement.Foreground="White"
+        TextElement.FontWeight="Regular"
+        TextElement.FontSize="13"
+        TextOptions.TextFormattingMode="Ideal"
+        TextOptions.TextRenderingMode="Auto"
+        Height="1080" Width="1920" Foreground="White">
+
+    <Window.Resources>
+        <ResourceDictionary>
+
+
+            <DataTemplate x:Key="listBox3DriveResource">
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="1.5*"/>
+                        <RowDefinition/>
+                    </Grid.RowDefinitions>
+
+                    <StackPanel Orientation="Horizontal" Margin="10, 0, 0, 0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
+                        <TextBlock Text="{Binding Tag, StringFormat={}{0} -, Mode=OneWay}" VerticalAlignment="Center" FontWeight="Normal" Style="{StaticResource MaterialDesignHeadline6TextBlock}" 
+                                   Foreground="Black"/>
+                        <TextBlock Grid.Column="1" Text="{Binding Value1, StringFormat={}{0:0.0} %, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Foreground="Black" HorizontalAlignment="Center" 
+                                   VerticalAlignment="Center" Margin="5 0 0 0" Style="{StaticResource MaterialDesignSubtitle1TextBlock}"/>
+                    </StackPanel>
+
+                    <ProgressBar MinHeight="20" Grid.Row="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="5, 0, 5, 0" Maximum="100" Minimum="0" 
+                                 Value="{Binding Value1, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
+                </Grid>
+            </DataTemplate>
+
+        </ResourceDictionary>
+    </Window.Resources>
+
+    <materialDesign:DialogHost Identifier="RootDialog" >
+        <Grid>
+
+            <Grid.RowDefinitions>
+                <RowDefinition Height="1.3*"/>
+                <RowDefinition Height="*"/>
+                <RowDefinition Height="15*"/>
+            </Grid.RowDefinitions>
+
+            <Grid Grid.Row="0" x:Name="gridHead" Background="{DynamicResource PrimaryHueMidBrush}" >
+
+                <Grid>
+
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="0.8*"/>
+                        <ColumnDefinition Width="1.4*"/>
+                        <ColumnDefinition Width="0.2*"/>
+                        <ColumnDefinition Width="0.6*"/>
+                        <ColumnDefinition Width="5*"/>
+                        <ColumnDefinition Width="0.1*"/>
+                        <ColumnDefinition Width="1.5*"/>
+                        <ColumnDefinition Width="1.4*"/>
+                    </Grid.ColumnDefinitions>
+
+                    <Grid Grid.Column="0">
+                        <TextBlock Text="SON.220609" Margin="10,5,0,0" Background="{x:Null}" FontSize="15" Foreground="White" VerticalAlignment="Top" HorizontalAlignment="Left"/>
+                    </Grid>
+
+                    <Grid Grid.Column="1">
+
+                        <Grid.RowDefinitions>
+                            <RowDefinition/>
+                            <RowDefinition/>
+                        </Grid.RowDefinitions>
+
+                        <Grid Grid.Row="0">
+                            <!--<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center">
+                                <materialDesign:PackIcon Kind="AccessPoint" Foreground="Red" Margin="0,4,0,0" Width="20" 
+                                                                                     Visibility="{c:Binding !IsCam1Connected, Converter={StaticResource BooleanToVisibilityConverter}}"/>
+                                <materialDesign:PackIcon Kind="AccessPoint" Foreground="LimeGreen" Margin="0,4,0,0" Width="20" 
+                                                                                     Visibility="{c:Binding IsCam1Connected, Converter={StaticResource BooleanToVisibilityConverter}}"/>
+                                <TextBlock Text=" Head Align(Cam1)" FontSize="20"/>
+                            </StackPanel>-->
+                        </Grid>
+
+                        <Grid Grid.Row="1">
+                            <!--<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center">
+                                <materialDesign:PackIcon Kind="AccessPoint" Foreground="Red" Margin="0,4,0,0" Width="20" 
+                                                                                         Visibility="{c:Binding !IsCam2Connected, Converter={StaticResource BooleanToVisibilityConverter}}"/>
+                                <materialDesign:PackIcon Kind="AccessPoint" Foreground="LimeGreen" Margin="0,4,0,0" Width="20" 
+                                                                                         Visibility="{c:Binding IsCam2Connected, Converter={StaticResource BooleanToVisibilityConverter}}"/>
+                                <TextBlock Text=" HeadPack Align(Cam2)" FontSize="20"/>
+                            </StackPanel>-->
+                        </Grid>
+
+                    </Grid>
+
+                    <Grid Grid.Column="2">
+                        <Grid.RowDefinitions>
+                            <RowDefinition/>
+                            <RowDefinition/>
+                        </Grid.RowDefinitions>
+
+                        <!--<TextBlock Grid.Row="0" Text=":" FontSize="20" VerticalAlignment="Center" HorizontalAlignment="Center" />
+                            <TextBlock Grid.Row="1" Text=":" FontSize="20" VerticalAlignment="Center" HorizontalAlignment="Center" />-->
+                    </Grid>
+
+                    <Grid Grid.Column="3">
+                        <Grid.RowDefinitions>
+                            <RowDefinition/>
+                            <RowDefinition/>
+                        </Grid.RowDefinitions>
+
+                        <Grid Grid.Row="0">
+                            <!--<TextBlock Text="{Binding SerialNum1, FallbackValue= 12345678 }" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center" />-->
+                        </Grid>
+
+                        <Grid Grid.Row="1">
+                            <!--<TextBlock Text="{Binding SerialNum2, FallbackValue= 12345678 }" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center" />-->
+                        </Grid>
+
+                    </Grid>
+
+                    <Grid Grid.Column="4">
+                        <Label Content="Inkjet Scale" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White" FontSize="35" />
+                    </Grid>
+
+                    <Grid Grid.Column="5">
+
+                    </Grid>
+
+                    <Grid Grid.Column="6">
+
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height="*"/>
+                            <RowDefinition Height="*"/>
+                        </Grid.RowDefinitions>
+
+                        <Grid Grid.Row="0">
+                            <StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Left" >
+                                <TextBlock FontSize="22" Margin="10,0,0,0"><Run Text="ID : "/></TextBlock>
+                                <TextBlock Text="{Binding SystemID, FallbackValue=IMS}"  FontSize="22" />
+                            </StackPanel>
+                        </Grid>
+
+                        <Grid Grid.Row="1">
+                            <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
+                                <materialDesign:PackIcon HorizontalContentAlignment="Left" Kind="Timetable" VerticalAlignment="Stretch" HorizontalAlignment="Left" Height="24" Width="auto" />
+                                <TextBlock Text="{Binding CurrentTime, FallbackValue=2020-02-24 13:09:33, StringFormat=' \{0:yyyy-MM-dd HH:mm:ss\}'}" TextAlignment="Left" VerticalAlignment="Center" FontSize="20" Margin="6,0,0,0"/>
+                            </StackPanel>
+                        </Grid>
+
+                    </Grid>
+
+                    <Grid Grid.Column="7">
+                        <Grid.RowDefinitions>
+                            <RowDefinition/>
+                            <RowDefinition/>
+                        </Grid.RowDefinitions>
+
+                        <Grid Grid.Row="0">
+                           
+                        </Grid>
+
+                        <Grid Grid.Row="1">
+                        </Grid>
+
+
+                    </Grid>
+
+                </Grid>
+
+
+            </Grid>
+
+            <Grid Grid.Row="1" Background="{DynamicResource PrimaryHueDarkBrush}">
+
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width="*"/>
+                </Grid.ColumnDefinitions>
+
+                <Grid Grid.Column="0">
+                    <Button Background="{x:Null}" Height="Auto" HorizontalAlignment="Center" BorderThickness="0" Command="{Binding NavigateCommand}"  >
+                        <StackPanel Orientation="Horizontal">
+                            <materialDesign:PackIcon Kind="Scale" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,10,0" Height="25" Width="auto"/>
+                            <TextBlock Text="Scale" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="25"/>
+                        </StackPanel>
+                    </Button>
+                </Grid>
+
+                <Grid Grid.Column="1">
+                   
+                </Grid>
+
+                <Grid Grid.Column="2">
+                    
+                </Grid>
+
+                <Grid Grid.Column="3">
+                    <!--<Border CornerRadius="10" Background="{DynamicResource PrimaryHueDarkBrush}" BorderBrush="Gainsboro" Padding="5" BorderThickness="2">
+                        <Button Background="{x:Null}" Height="Auto" BorderThickness="0" Command="{Binding NavigateCommand}" CommandParameter="{x:Static Common:ViewNames.InterfaceView}">
+                            <StackPanel Orientation="Horizontal">
+                                <materialDesign:PackIcon Kind="ApplicationSettings" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,10,0" Height="25" Width="auto"/>
+                                <TextBlock Text="I/O" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="25"/>
+                            </StackPanel>
+                        </Button>
+                    </Border>-->
+                </Grid>
+
+                <Grid Grid.Column="4">
+                    <!--<Border CornerRadius="10" Background="{DynamicResource PrimaryHueDarkBrush}" BorderBrush="Gainsboro" Padding="5" BorderThickness="2">
+                        <Button  Background="{x:Null}" Height="Auto" BorderThickness="0" Command="{Binding NavigateCommand}" CommandParameter="{x:Static Common:ViewNames.LogView}">
+                            <StackPanel Orientation="Horizontal">
+                                <materialDesign:PackIcon Kind="PagePreviousOutline" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,10,0" Height="25" Width="auto"/>
+                                <TextBlock Text="Log" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="25"/>
+                            </StackPanel>
+                        </Button>
+                    </Border>-->
+                </Grid>
+
+                <Grid Grid.Column="5">
+                    <!--<Border CornerRadius="10" Background="{DynamicResource PrimaryHueDarkBrush}" BorderBrush="Gainsboro" Padding="5" BorderThickness="2">
+                        <Button Background="{x:Null}" Height="Auto" BorderThickness="0" Command="{Binding NavigateCommand}" CommandParameter="{x:Static Common:ViewNames.SettingView}">
+                            <StackPanel Orientation="Horizontal">
+                                <materialDesign:PackIcon Kind="SettingsTransferOutline" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,10,0" Height="25" Width="auto"/>
+                                <TextBlock Text="Setting" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="25"/>
+                            </StackPanel>
+                        </Button>
+                    </Border>-->
+                </Grid>
+
+                <Grid Grid.Column="6">
+
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition/>
+                        <ColumnDefinition/>
+                    </Grid.ColumnDefinitions>
+
+                    <Grid Grid.Column="0">
+                        <Button  Background="{x:Null}" Height="Auto" BorderThickness="0" Command="{Binding MinCommand}" >
+                            <StackPanel Orientation="Horizontal">
+                                <materialDesign:PackIcon Kind="CreditCardMinusOutline" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,10,0" Height="25" Width="auto"/>
+                                <TextBlock Text="Min" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="25"/>
+                            </StackPanel>
+                        </Button>
+
+                    </Grid>
+
+                    <Grid Grid.Column="1">
+                        <Button  Background="{x:Null}" Height="Auto" BorderThickness="0" Command="{Binding ExitCommand}" >
+                            <StackPanel Orientation="Horizontal">
+                                <materialDesign:PackIcon Kind="ExitToApp" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,10,0" Height="25" Width="auto"/>
+                                <TextBlock Text="Exit" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="25"/>
+                            </StackPanel>
+                        </Button>
+                    </Grid>
+
+
+                </Grid>
+
+            </Grid>
+
+            <Grid Grid.Row="2" Background="{DynamicResource PrimaryHueLightBrush}">
+                <Grid.ColumnDefinitions>
+                    <!--<ColumnDefinition Width="*"/>-->
+                    <ColumnDefinition Width="6*"/>
+                    <ColumnDefinition Width="*"/>
+                </Grid.ColumnDefinitions>
+
+                <!--<Grid Grid.Column="0">
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="6*"/>
+                        <RowDefinition Height="0.01*"/>
+                    </Grid.RowDefinitions>
+
+                    <Grid Grid.Row="0">
+                        <ContentControl prism:RegionManager.RegionName="{x:Static Common:RegionNames.InterfaceRegion}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />
+                    </Grid>
+
+                </Grid>-->
+
+
+                <Grid Grid.Column="0">
+                    <ContentControl prism:RegionManager.RegionName="{x:Static CommonString:RegionNames.MainRegion}" Width="auto" Height="auto"/>
+                </Grid>
+
+                <Grid Grid.Column="1">
+
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="*"/>
+                        <RowDefinition Height="*"/>
+                        <RowDefinition Height="2*"/>
+                        <RowDefinition Height="2.5*"/>
+                    </Grid.RowDefinitions>
+
+                    <Grid Grid.Row="0">
+
+                        <Border BorderBrush="#FF323232" Grid.Row="0" CornerRadius="5" BorderThickness="2" Margin="2" Background="#FFF0F0F0">
+
+                            <materialDesign:Card Background="#FFF0F0F0" Foreground="{DynamicResource PrimaryHueLightForegroundBrush}" Padding="8" Margin="5">
+
+                                <Grid>
+                                    <Grid.RowDefinitions>
+                                        <RowDefinition Height="*"/>
+                                        <RowDefinition Height="6"/>
+                                        <RowDefinition Height="*"/>
+                                    </Grid.RowDefinitions>
+
+                                    <Grid Grid.Row="0">
+                                        <TextBlock Text="Current Model" FontSize="25" Style="{DynamicResource MaterialDesignHeadline5TextBlock}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
+                                    </Grid>
+
+                                    <Grid Grid.Row="1">
+                                        <Separator />
+                                    </Grid>
+
+                                    <Grid Grid.Row="2">
+                                        <TextBlock Grid.Row="2" FontSize="25" Text="{Binding CurrentModelName, FallbackValue=DefaultModel}" Style="{DynamicResource MaterialDesignBody2TextBlock}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="{DynamicResource PrimaryHueMidBrush}" FontWeight="Bold"/>
+                                    </Grid>
+                                </Grid>
+
+                            </materialDesign:Card>
+
+                        </Border>
+
+                    </Grid>
+
+                    <Grid Grid.Row="1">
+
+                        <Border BorderBrush="#FF323232" Grid.Row="0" CornerRadius="5" BorderThickness="2" Margin="2" Background="#FFF0F0F0">
+
+                            <materialDesign:Card Background="#FFF0F0F0" Foreground="{DynamicResource PrimaryHueLightForegroundBrush}" Padding="8" Margin="5">
+
+                                <Grid>
+                                    <Grid.RowDefinitions>
+                                        <RowDefinition Height="*"/>
+                                        <RowDefinition Height="6"/>
+                                        <RowDefinition Height="*"/>
+                                    </Grid.RowDefinitions>
+
+                                    <Grid Grid.Row="0">
+                                        <TextBlock Text="Type" FontSize="25" Style="{DynamicResource MaterialDesignHeadline5TextBlock}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
+                                    </Grid>
+
+                                    <Grid Grid.Row="1">
+                                        <Separator/>
+                                    </Grid>
+
+                                    <Grid Grid.Row="2">
+                                        <TextBlock Grid.Row="2" FontSize="25" Text="Manual Align" Style="{DynamicResource MaterialDesignBody2TextBlock}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="{DynamicResource PrimaryHueMidBrush}" FontWeight="Bold"/>
+                                    </Grid>
+
+                                </Grid>
+
+                            </materialDesign:Card>
+
+                        </Border>
+
+                    </Grid>
+
+                    <Grid Grid.Row="2">
+                        <Border BorderBrush="#FF323232" Grid.Row="0" CornerRadius="5" BorderThickness="2" Margin="2" Background="#FFF0F0F0">
+                            <Grid>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition Height="*"/>
+                                    <RowDefinition Height="*"/>
+                                </Grid.RowDefinitions>
+
+                                <materialDesign:Card Background="#FFF0F0F0" Foreground="{DynamicResource PrimaryHueLightForegroundBrush}" Padding="8" Margin="5">
+                                    <Grid>
+                                        <Grid.RowDefinitions>
+                                            <RowDefinition Height="*"/>
+                                            <RowDefinition Height="5"/>
+                                            <RowDefinition Height="*"/>
+                                        </Grid.RowDefinitions>
+
+                                        <Grid Grid.Row="0">
+                                            <Border Grid.Row="0"  CornerRadius="10" >
+                                                <TextBlock Text="Model Manager" Style="{DynamicResource MaterialDesignBody2TextBlock}" FontWeight="Bold"
+                                                       Foreground="Black" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="18"/>
+                                            </Border>
+                                        </Grid>
+
+                                        <Grid Grid.Row="1">
+                                            <Separator />
+                                        </Grid>
+
+                                        <Grid Grid.Row="2">
+                                            <Button Grid.Row="2" FontSize="16" Command="{Binding CreateModelCommand}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
+                                                Content="Edit Model"/>
+                                        </Grid>
+                                    </Grid>
+                                </materialDesign:Card>
+
+                                <Grid Grid.Row="1">
+                                    <materialDesign:Card Background="#FFF0F0F0" Foreground="{DynamicResource PrimaryHueLightForegroundBrush}" Padding="8" Margin="5">
+                                        <Grid>
+                                            <Grid.RowDefinitions>
+                                                <RowDefinition Height="6*"/>
+                                                <RowDefinition/>
+                                                <RowDefinition Height="4*"/>
+                                            </Grid.RowDefinitions>
+                                            <Grid Grid.Row="0" >
+                                                <Grid.RowDefinitions>
+                                                    <RowDefinition Height="1*"/>
+                                                    <RowDefinition Height="2*"/>
+                                                </Grid.RowDefinitions>
+
+                                                <Grid Grid.Row="0">
+                                                    <StackPanel HorizontalAlignment="Left">
+                                                        <Label VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="14" FontWeight="Bold" >Target Model</Label>
+                                                    </StackPanel>
+                                                </Grid>
+
+                                                <Grid Grid.Row="1">
+                                                    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Bottom">
+                                                        <ComboBox ItemsSource="{Binding ModelList}" SelectedItem="{Binding TargetModel}" FontSize="18" Width="auto"/>
+                                                    </StackPanel>
+                                                </Grid>
+
+                                            </Grid>
+                                            <Separator Grid.Row="1"/>
+                                            <Button Grid.Row="2" FontSize="16" Command="{Binding ChangeModelCommand}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Content="Change Model"/>
+                                        </Grid>
+                                    </materialDesign:Card>
+
+                                </Grid>
+
+                            </Grid>
+
+                        </Border>
+
+                    </Grid>
+
+                    <Grid Grid.Row="3">
+
+                        <Border BorderBrush="#FF323232" CornerRadius="5" BorderThickness="2" Margin="2" Background="#FFF0F0F0">
+
+                            <materialDesign:Card Background="#FFF0F0F0" Padding="8" Margin="5">
+
+                                <Grid>
+
+                                    <Grid.RowDefinitions>
+                                        <RowDefinition Height="2*"/>
+                                        <RowDefinition Height="0.5*"/>
+                                        <RowDefinition Height="2*"/>
+                                        <RowDefinition Height="0.5*"/>
+                                        <RowDefinition Height="6*"/>
+                                    </Grid.RowDefinitions>
+
+                                    <Border Grid.Row="0" >
+                                        <ContentControl ContentTemplate="{StaticResource listBox3DriveResource}" Content="{Binding CPUUsage}" HorizontalAlignment="Stretch"/>
+                                    </Border>
+
+                                    <Border Grid.Row="2"  >
+                                        <ContentControl ContentTemplate="{StaticResource listBox3DriveResource}" Content="{Binding RAMUsage}" HorizontalAlignment="Stretch"/>
+                                    </Border>
+
+                                    <Border Grid.Row="4" >
+                                        <ItemsControl ItemTemplate="{StaticResource listBox3DriveResource}" ItemsSource="{Binding HDDDriveList}"
+                                                      VerticalContentAlignment="Stretch" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch"/>
+                                    </Border>
+
+                                </Grid>
+
+                            </materialDesign:Card>
+
+                        </Border>
+
+                    </Grid>
+
+                </Grid>
+
+            </Grid>
+
+        </Grid>
+
+    </materialDesign:DialogHost>
+</Window>

+ 51 - 0
InkjetScale/InkjetScale/Shell.xaml.cs

@@ -0,0 +1,51 @@
+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 InkjetScale
+{
+    /// <summary>
+    /// MainWindow.xaml에 대한 상호 작용 논리
+    /// </summary>
+    public partial class Shell : Window
+    {
+        ShellViewModel ViewModel => this.DataContext as ShellViewModel;
+        public Shell()
+        {
+            InitializeComponent();
+            this.Loaded += Shell_Loaded;
+            this.gridHead.MouseLeftButtonDown += GridHeader_MouseLeftButtonDown;
+        }
+
+        private void GridHeader_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+        {
+            e.Handled = true;
+            if (e.ClickCount > 1)
+            {
+                if (this.WindowState == WindowState.Maximized)
+                    this.WindowState = WindowState.Normal;
+                else
+                    this.WindowState = WindowState.Maximized;
+            }
+            else
+                this.DragMove();
+        }
+
+        private void Shell_Loaded(object sender, RoutedEventArgs e)
+        {
+            ViewModel.Init();
+            this.ViewModel.View = this;
+        }
+    }
+}

+ 224 - 0
InkjetScale/InkjetScale/ShellViewModel.cs

@@ -0,0 +1,224 @@
+using InkjetScale.BusinessLogic.Admin;
+using InkjetScale.Common.Events;
+using InkjetScale.Common.StringNames;
+using Prism.Commands;
+using Prism.Events;
+using Prism.Ioc;
+using Prism.Mvvm;
+using Prism.Regions;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+using System.Windows.Threading;
+
+namespace InkjetScale
+{
+    public class ShellViewModel : BindableBase
+    {
+
+        #region Properties
+        listBoxTemplate cpuUsage;
+        public listBoxTemplate CPUUsage
+        {
+            get { return this.cpuUsage; }
+            set { SetProperty(ref this.cpuUsage, value); }
+        }
+
+        listBoxTemplate ramUsage;
+        public listBoxTemplate RAMUsage
+        {
+            get { return this.ramUsage; }
+            set { SetProperty(ref this.ramUsage, value); }
+        }
+
+        private List<listBoxTemplate> hddDriveList;
+        public List<listBoxTemplate> HDDDriveList
+        {
+            get { return this.hddDriveList; }
+            set { SetProperty(ref this.hddDriveList, value); }
+        }
+
+        private string serialNum1 = "12345678";
+        public string SerialNum1
+        {
+            get { return this.serialNum1; }
+            set { SetProperty(ref this.serialNum1, value); }
+        }
+
+        private string serialNum2 = "12345678";
+        public string SerialNum2
+        {
+            get { return this.serialNum2; }
+            set { SetProperty(ref this.serialNum2, value); }
+        }
+
+        private string currentModelName;
+        public string CurrentModelName
+        {
+            get { return currentModelName; }
+            set { SetProperty(ref this.currentModelName, value); }
+        }
+
+        private List<string> modelList;
+        public List<string> ModelList
+        {
+            get { return this.modelList; }
+            set { SetProperty(ref this.modelList, value); }
+        }
+
+        private string targetModel;
+        public string TargetModel { get => this.targetModel; set => SetProperty(ref this.targetModel, value); }
+
+        private string systemID;
+        public string SystemID
+        {
+            get { return systemID; }
+            set { SetProperty(ref this.systemID, value); }
+        }
+
+        private long plcScanTime;
+        public long PLCScanTime
+        {
+            get { return plcScanTime; }
+            set { SetProperty(ref plcScanTime, value); }
+        }
+
+        DateTime currentTime;
+        public DateTime CurrentTime
+        {
+            get { return currentTime; }
+            set { this.SetProperty(ref currentTime, value); }
+        }
+
+        #endregion
+
+        #region Command
+        public ICommand MinCommand { get; set; }
+        public ICommand NavigateCommand { get; set; }
+        public ICommand ExitCommand { get; set; }
+        public ICommand CreateModelCommand { get; set; }
+        public ICommand ChangeModelCommand { get; set; }
+        #endregion
+
+        #region PrismInterface
+        IRegionManager regionmanager = null;
+        IEventAggregator eventAggregator = null;
+        IContainerProvider provider = null;
+        #endregion
+
+        public Shell View { get; set; }
+        DispatcherTimer Systemtimer = null;
+
+        public ShellViewModel(IEventAggregator ea, IRegionManager regionManager, IContainerProvider proVider)
+        {
+            #region InitCommand
+            this.MinCommand = new DelegateCommand(ExecuteMin);
+            this.NavigateCommand = new DelegateCommand<string>(ExecuteNavigate);
+            this.ExitCommand = new DelegateCommand(ExecuteExit);
+            #endregion
+
+            this.eventAggregator = ea;
+            this.regionmanager = regionManager;
+            this.provider = proVider;
+
+
+
+            this.HDDDriveList = new List<listBoxTemplate>();
+            this.CPUUsage = new listBoxTemplate() { Tag = "CPU" };
+            this.RAMUsage = new listBoxTemplate() { Tag = "RAM" };
+
+            this.Systemtimer = new DispatcherTimer();
+            #region time
+            DispatcherTimer dateTimer = new DispatcherTimer();
+            dateTimer.Tick += (object sender, EventArgs e) =>
+            {
+                this.CurrentTime = DateTime.Now;
+            };
+            dateTimer.Interval = TimeSpan.FromMilliseconds(500);
+            dateTimer.Start();
+            #endregion
+
+            #region system
+            var dl = AdminManager.GetDriveList();
+            dl.ForEach(d =>
+            {
+                var hdd = new listBoxTemplate();
+                hdd.Tag = d.Name;
+                hdd.Value1 = d.Usage;
+
+                this.HDDDriveList.Add(hdd);
+            });
+            #endregion
+        }
+        
+        #region Execute
+        
+
+        private void ExecuteMin()
+        {
+            View.WindowState = System.Windows.WindowState.Minimized;
+        }
+
+        private void ExecuteExit()
+        {
+            Systemtimer.Stop();
+            App.Current.Shutdown();
+        }
+        private void ExecuteNavigate(string view)
+        {
+            if (!string.IsNullOrEmpty(view))
+                regionmanager.RequestNavigate(RegionNames.MainRegion, view);
+        }
+        #endregion
+
+        internal void Init()
+        {
+            #region SystemInfo Timer
+            Systemtimer.Interval = TimeSpan.FromMilliseconds(1000);
+            Systemtimer.Tick += Timer_Tick;
+            Systemtimer.Start();
+            #endregion
+
+            regionmanager.RequestNavigate(RegionNames.MainRegion, nameof(ViewNames.ScaleMainView));
+        }
+
+        private void Timer_Tick(object sender, EventArgs e)
+        {
+            SystemInfoLoad();
+        }
+
+        private void SystemInfoLoad()
+        {
+            this.CPUUsage.Value1 = AdminManager.GetTotalCpuUsage();
+            this.RAMUsage.Value1 = AdminManager.GetMemoryUsage().Usage;
+
+            var dl = AdminManager.GetDriveList();
+            dl.ForEach(d =>
+            {
+                var hdd = HDDDriveList.FirstOrDefault(_ => _.Tag.Equals(d.Name));
+                hdd.Value1 = d.Usage;
+            });
+        }
+
+        public class listBoxTemplate : BindableBase
+        {
+            private string tag;
+            public string Tag
+            {
+                get { return tag; ; }
+                set { SetProperty(ref this.tag, value); }
+            }
+
+            private double value1;
+
+            public double Value1
+            {
+                get { return value1; }
+                set { SetProperty(ref this.value1, value); }
+            }
+        }
+    }
+}

+ 15 - 0
InkjetScale/InkjetScale/packages.config

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="CalcBinding" version="2.5.2" targetFramework="net472" />
+  <package id="DynamicExpresso.Core" version="2.3.1" targetFramework="net472" />
+  <package id="MaterialDesignColors" version="2.0.6" targetFramework="net472" />
+  <package id="MaterialDesignThemes" version="4.5.0" targetFramework="net472" />
+  <package id="Microsoft.Xaml.Behaviors.Wpf" version="1.1.31" targetFramework="net472" />
+  <package id="Prism.Core" version="8.1.97" targetFramework="net472" />
+  <package id="Prism.Unity" version="8.1.97" targetFramework="net472" />
+  <package id="Prism.Wpf" version="8.1.97" targetFramework="net472" />
+  <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" />
+  <package id="System.Threading.Tasks.Extensions" version="4.5.2" targetFramework="net472" />
+  <package id="Unity.Abstractions" version="5.11.7" targetFramework="net472" />
+  <package id="Unity.Container" version="5.11.11" targetFramework="net472" />
+</packages>