浏览代码

현장 작업 내용 업데이트

SK.Kang 6 年之前
父节点
当前提交
f42d4e5225
共有 27 个文件被更改,包括 370 次插入99 次删除
  1. 6 0
      Dev/OHV/OHV.Common/Events/MessageEventArgs.cs
  2. 10 0
      Dev/OHV/OHV.Common/OHV.Common.csproj
  3. 1 0
      Dev/OHV/OHV.Common/Shareds/SharedEnumType.cs
  4. 10 0
      Dev/OHV/OHV.LanguageHalper/OHV.LanguageHelper.csproj
  5. 10 0
      Dev/OHV/OHV.Module.Interactivity/OHV.Module.Interactivity.csproj
  6. 25 10
      Dev/OHV/OHV.Module.Interactivity/PopUp/OpticalReadingConfigViewModel.cs
  7. 10 0
      Dev/OHV/OHV.Module.Layout/OHV.Module.Layout.csproj
  8. 10 0
      Dev/OHV/OHV.Module.ListViews/OHV.Module.ListViews.csproj
  9. 10 0
      Dev/OHV/OHV.Module.MainViews/OHV.Module.MainViews.csproj
  10. 6 1
      Dev/OHV/OHV.Module.MainViews/Views/HistoryViewModel.cs
  11. 10 0
      Dev/OHV/OHV.Module.Monitoring/OHV.Module.Monitoring.csproj
  12. 10 0
      Dev/OHV/OHV.Module.Status/OHV.Module.Status.csproj
  13. 11 0
      Dev/OHV/OHV.OCS/OHV.OCS.csproj
  14. 10 0
      Dev/OHV/OHV.SqliteDAL/OHV.SqliteDAL.csproj
  15. 5 2
      Dev/OHV/OHV.SqliteDAL/OHVDbInitializer.cs
  16. 10 0
      Dev/OHV/OHV.UIControl/OHV.UIControl.csproj
  17. 1 1
      Dev/OHV/OHV.Vehicle/App.config
  18. 1 0
      Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs
  19. 11 0
      Dev/OHV/OHV.Vehicle/OHV.Vehicle.csproj
  20. 54 27
      Dev/OHV/OHV.sln
  21. 4 4
      Dev/OHV/VehicleControlSystem/ControlLayer/IO/EzIO.cs
  22. 1 1
      Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/Advantech/Advantech.cs
  23. 1 1
      Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/BMUManager.cs
  24. 72 41
      Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs
  25. 27 6
      Dev/OHV/VehicleControlSystem/Managers/AutoManager.cs
  26. 34 5
      Dev/OHV/VehicleControlSystem/VCSystem.cs
  27. 10 0
      Dev/OHV/VehicleControlSystem/VehicleControlSystem.csproj

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

@@ -32,6 +32,9 @@ namespace OHV.Common.Events
 
             RspConveyorLoad,
             RspConveyorUnload,
+
+            RspObstaclePatternChg,
+            RspObstaclePatternNo,
         }
 
         //Property 이름임.
@@ -75,6 +78,9 @@ namespace OHV.Common.Events
             ReqTest,
             ReqConveyorLoad,
             ReqConveyorUnload,
+
+            ReqObstaclePatternChg,
+            ReqObstaclePatternNo,
         }
 
         public eVCSMessageKind Kind { get; set; }

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

@@ -43,6 +43,16 @@
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
       <HintPath>..\packages\EntityFramework.6.4.0\lib\net45\EntityFramework.dll</HintPath>

+ 1 - 0
Dev/OHV/OHV.Common/Shareds/SharedEnumType.cs

@@ -155,6 +155,7 @@
 
 	public enum eLampState
 	{
+		None,
 		Alarm,
 		Charging,
 		AutoRunNChargingFull, //충전 완료시에도 점등

+ 10 - 0
Dev/OHV/OHV.LanguageHalper/OHV.LanguageHelper.csproj

@@ -40,6 +40,16 @@
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="PresentationCore" />
     <Reference Include="PresentationFramework" />

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

@@ -42,6 +42,16 @@
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="CommonServiceLocator, Version=2.0.4.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
       <HintPath>..\packages\CommonServiceLocator.2.0.4\lib\net45\CommonServiceLocator.dll</HintPath>

+ 25 - 10
Dev/OHV/OHV.Module.Interactivity/PopUp/OpticalReadingConfigViewModel.cs

@@ -151,6 +151,11 @@ namespace OHV.Module.Interactivity.PopUp
                     }
                 }
             }
+
+            if ( obj.Kind == GUIMessageEventArgs.eGUIMessageKind.RspObstaclePatternNo )
+            {
+                this.ObstacleDrive = Convert.ToInt32( obj.MessageText );
+            }
         }
 
         private void ChangeObstacleState( eObstacleState lazer )
@@ -169,16 +174,25 @@ namespace OHV.Module.Interactivity.PopUp
         {
             var numpad = new CalcuratorView();
 
-            if (obj.ToString().Equals("D"))
-            {
-                var result = numpad.ShowDialog( this.ObstacleDrive );
-                this.ObstacleDrive = (int)result;
-            }
-            else
-            {
-                var result = numpad.ShowDialog( this.ObstacleCurve );
-                this.ObstacleCurve = (int)result;
-            }
+            var result =  numpad.ShowDialog( this.ObstacleDrive );
+            this.ObstacleCurve = (int)result;
+
+            var msg = new VCSMessageEventArgs();
+            msg.Kind = VCSMessageEventArgs.eVCSMessageKind.ReqObstaclePatternChg;
+            msg.MessageText = this.ObstacleCurve.ToString();
+
+            this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
+
+            //if (obj.ToString().Equals("D"))
+            //{
+            //    var result = numpad.ShowDialog( this.ObstacleDrive );
+            //    this.ObstacleDrive = (int)result;
+            //}
+            //else
+            //{
+            //    var result = numpad.ShowDialog( this.ObstacleCurve );
+            //    this.ObstacleCurve = (int)result;
+            //}
         }
 
         private void ExecuteResultPattern(object _obj)
@@ -230,6 +244,7 @@ namespace OHV.Module.Interactivity.PopUp
 
         public void OnDialogOpened( IDialogParameters parameters )
         {
+            this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( new VCSMessageEventArgs() { Kind = VCSMessageEventArgs.eVCSMessageKind.ReqObstaclePatternNo } );
             this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Publish( new ObstacleControlEventArgs { EventDir = ObstacleControlEventArgs.eEventDir.ToBack , ControlKind = ObstacleControlEventArgs.eControlKind.INFO } );
             //this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Publish( new ObstacleControlEventArgs { EventDir = ObstacleControlEventArgs.eEventDir.ToBack , ControlKind = ObstacleControlEventArgs.eControlKind.CURVE } );
         }

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

@@ -41,6 +41,16 @@
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="Microsoft.Practices.ServiceLocation, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
       <HintPath>..\packages\CommonServiceLocator.1.3\lib\portable-net4+sl5+netcore45+wpa81+wp8\Microsoft.Practices.ServiceLocation.dll</HintPath>

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

@@ -42,6 +42,16 @@
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="CommonServiceLocator, Version=2.0.4.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
       <HintPath>..\packages\CommonServiceLocator.2.0.4\lib\net45\CommonServiceLocator.dll</HintPath>

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

@@ -42,6 +42,16 @@
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="CommonServiceLocator, Version=2.0.4.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
       <HintPath>..\packages\CommonServiceLocator.2.0.4\lib\net45\CommonServiceLocator.dll</HintPath>

+ 6 - 1
Dev/OHV/OHV.Module.MainViews/Views/HistoryViewModel.cs

@@ -28,8 +28,13 @@ namespace OHV.Module.MainViews.Views
         public HistoryViewModel( SqliteManager _sql )
         {
             this.sql = _sql;
+            var ll = sql.HisAlarmDAL.All;
+            if ( ll == null )
+                this.AlarmList = new List<HisAlarm>();
+            else
+                this.AlarmList = ll;
+
             this.sql.HisAlarmDAL.ChangedProperty += HisAlarmDAL_ChangedProperty;
-            this.AlarmList = new List<HisAlarm>( sql.HisAlarmDAL.All );
             this.AlarmResetCommand = new DelegateCommand( ExecuteAlarmResetCommand );
         }
 

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

@@ -42,6 +42,16 @@
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="CommonServiceLocator, Version=2.0.4.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
       <HintPath>..\packages\CommonServiceLocator.2.0.4\lib\net45\CommonServiceLocator.dll</HintPath>

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

@@ -43,6 +43,16 @@
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="CommonServiceLocator, Version=2.0.4.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
       <HintPath>..\packages\CommonServiceLocator.2.0.4\lib\net45\CommonServiceLocator.dll</HintPath>

+ 11 - 0
Dev/OHV/OHV.OCS/OHV.OCS.csproj

@@ -44,6 +44,17 @@
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
     <Prefer32Bit>true</Prefer32Bit>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="System.Data" />

+ 10 - 0
Dev/OHV/OHV.SqliteDAL/OHV.SqliteDAL.csproj

@@ -43,6 +43,16 @@
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="CommonServiceLocator, Version=2.0.4.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
       <HintPath>..\packages\CommonServiceLocator.2.0.4\lib\net45\CommonServiceLocator.dll</HintPath>

+ 5 - 2
Dev/OHV/OHV.SqliteDAL/OHVDbInitializer.cs

@@ -182,8 +182,11 @@ namespace OHV.SqliteDAL
                 new Alarm { AlarmId = 25, Kind = eAlarmKind.Axis, Name = "Charge", Text="Charge Point Not Ready",                          Solution="", Description="", Level = eAlarmLevel.Falut, },
                 new Alarm { AlarmId = 26, Kind = eAlarmKind.Axis, Name = "Charge", Text="Charge Point PIO Error",                          Solution="", Description="", Level = eAlarmLevel.Falut, },
                 new Alarm { AlarmId = 27, Kind = eAlarmKind.Axis, Name = "Charge", Text="while Vehicle Move Obstacle Detected",Solution="", Description="", Level = eAlarmLevel.Falut, },
-                new Alarm { AlarmId = 28, Kind = eAlarmKind.Axis, Name = "Charge", Text="while Vehicle Move Obstacle Detected",Solution="", Description="", Level = eAlarmLevel.Falut, },
-                new Alarm { AlarmId = 29, Kind = eAlarmKind.Axis, Name = "Charge", Text="while Vehicle Move Obstacle Detected",Solution="", Description="", Level = eAlarmLevel.Falut, },
+                new Alarm { AlarmId = 28, Kind = eAlarmKind.Axis, Name = "System", Text="E - Stop Switch On",Solution="", Description="", Level = eAlarmLevel.Falut, },
+                new Alarm { AlarmId = 29, Kind = eAlarmKind.Axis, Name = "System", Text="MC Off",Solution="", Description="", Level = eAlarmLevel.Falut, },
+                new Alarm { AlarmId = 30, Kind = eAlarmKind.Axis, Name = "System", Text="CP Off 24V",Solution="", Description="", Level = eAlarmLevel.Falut, },
+                new Alarm { AlarmId = 31, Kind = eAlarmKind.Axis, Name = "System", Text="CP Off Safety",Solution="", Description="", Level = eAlarmLevel.Falut, },
+                new Alarm { AlarmId = 32, Kind = eAlarmKind.Axis, Name = "BMS", Text="Battery Manage System Disconnected",Solution="", Description="", Level = eAlarmLevel.Falut, },
             } );
 
             //context.Set<HisAlarm>().Add(new HisAlarm { AlarmId = 1, OccurTime = DateTime.Now.AddDays(-10) });

+ 10 - 0
Dev/OHV/OHV.UIControl/OHV.UIControl.csproj

@@ -41,6 +41,16 @@
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="GSG.NET.WPF, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>

+ 1 - 1
Dev/OHV/OHV.Vehicle/App.config

@@ -5,7 +5,7 @@
     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
   </configSections>
   <connectionStrings>
-    <add name="OHVDb" connectionString="data source=.\DB\OHVDb.sqlite;foreign keys=true" providerName="System.Data.SQLite" />
+    <add name="OHVDb" connectionString="data source=C:\DB\OHVDb.sqlite;foreign keys=true" providerName="System.Data.SQLite" />
   </connectionStrings>
   <startup>
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />

+ 1 - 0
Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs

@@ -475,6 +475,7 @@ namespace OHV.Vehicle.Concept
                 var hisAlarm = args.Args as HisAlarm;
                 this.messageController.ShowNotificationView(args.MessageText);
                 this.VehicleModeChange(false);//알람이 발생하면 자동으로 Manual Mode 로 변경됨
+                this.IsVehicleAlarm = true;
             }
 
             if (args.MessageKey.Equals(MessageKey.Vehicle))

+ 11 - 0
Dev/OHV/OHV.Vehicle/OHV.Vehicle.csproj

@@ -53,6 +53,17 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>\\192.168.127.20\VCS\</OutputPath>
+    <DefineConstants>TRACE;DEBUG</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote1|AnyCPU'">
     <DebugSymbols>true</DebugSymbols>
     <OutputPath>\\192.168.127.10\VCS\</OutputPath>
     <DefineConstants>TRACE;DEBUG</DefineConstants>

+ 54 - 27
Dev/OHV/OHV.sln

@@ -45,87 +45,114 @@ Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
 		Release|Any CPU = Release|Any CPU
-		Remote|Any CPU = Remote|Any CPU
+		Remote1|Any CPU = Remote1|Any CPU
+		Remote2|Any CPU = Remote2|Any CPU
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{122D81C8-9AB9-4CED-80D2-9C4F2F9DEB4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{122D81C8-9AB9-4CED-80D2-9C4F2F9DEB4C}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{122D81C8-9AB9-4CED-80D2-9C4F2F9DEB4C}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{122D81C8-9AB9-4CED-80D2-9C4F2F9DEB4C}.Release|Any CPU.Build.0 = Release|Any CPU
-		{122D81C8-9AB9-4CED-80D2-9C4F2F9DEB4C}.Remote|Any CPU.ActiveCfg = Remote|Any CPU
-		{122D81C8-9AB9-4CED-80D2-9C4F2F9DEB4C}.Remote|Any CPU.Build.0 = Remote|Any CPU
+		{122D81C8-9AB9-4CED-80D2-9C4F2F9DEB4C}.Remote1|Any CPU.ActiveCfg = Remote1|Any CPU
+		{122D81C8-9AB9-4CED-80D2-9C4F2F9DEB4C}.Remote1|Any CPU.Build.0 = Remote1|Any CPU
+		{122D81C8-9AB9-4CED-80D2-9C4F2F9DEB4C}.Remote2|Any CPU.ActiveCfg = Remote|Any CPU
+		{122D81C8-9AB9-4CED-80D2-9C4F2F9DEB4C}.Remote2|Any CPU.Build.0 = Remote|Any CPU
 		{12D8B660-6FC6-4228-9198-63E3E455CAAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{12D8B660-6FC6-4228-9198-63E3E455CAAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{12D8B660-6FC6-4228-9198-63E3E455CAAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{12D8B660-6FC6-4228-9198-63E3E455CAAF}.Release|Any CPU.Build.0 = Release|Any CPU
-		{12D8B660-6FC6-4228-9198-63E3E455CAAF}.Remote|Any CPU.ActiveCfg = Remote|Any CPU
-		{12D8B660-6FC6-4228-9198-63E3E455CAAF}.Remote|Any CPU.Build.0 = Remote|Any CPU
+		{12D8B660-6FC6-4228-9198-63E3E455CAAF}.Remote1|Any CPU.ActiveCfg = Remote1|Any CPU
+		{12D8B660-6FC6-4228-9198-63E3E455CAAF}.Remote1|Any CPU.Build.0 = Remote1|Any CPU
+		{12D8B660-6FC6-4228-9198-63E3E455CAAF}.Remote2|Any CPU.ActiveCfg = Remote|Any CPU
+		{12D8B660-6FC6-4228-9198-63E3E455CAAF}.Remote2|Any CPU.Build.0 = Remote|Any CPU
 		{165DD79F-9DC2-4441-8E83-3FA973CB82FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{165DD79F-9DC2-4441-8E83-3FA973CB82FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{165DD79F-9DC2-4441-8E83-3FA973CB82FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{165DD79F-9DC2-4441-8E83-3FA973CB82FD}.Release|Any CPU.Build.0 = Release|Any CPU
-		{165DD79F-9DC2-4441-8E83-3FA973CB82FD}.Remote|Any CPU.ActiveCfg = Remote|Any CPU
-		{165DD79F-9DC2-4441-8E83-3FA973CB82FD}.Remote|Any CPU.Build.0 = Remote|Any CPU
+		{165DD79F-9DC2-4441-8E83-3FA973CB82FD}.Remote1|Any CPU.ActiveCfg = Remote1|Any CPU
+		{165DD79F-9DC2-4441-8E83-3FA973CB82FD}.Remote1|Any CPU.Build.0 = Remote1|Any CPU
+		{165DD79F-9DC2-4441-8E83-3FA973CB82FD}.Remote2|Any CPU.ActiveCfg = Remote|Any CPU
+		{165DD79F-9DC2-4441-8E83-3FA973CB82FD}.Remote2|Any CPU.Build.0 = Remote|Any CPU
 		{902A80B4-DECE-41C1-9552-51A1362537C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{902A80B4-DECE-41C1-9552-51A1362537C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{902A80B4-DECE-41C1-9552-51A1362537C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{902A80B4-DECE-41C1-9552-51A1362537C9}.Release|Any CPU.Build.0 = Release|Any CPU
-		{902A80B4-DECE-41C1-9552-51A1362537C9}.Remote|Any CPU.ActiveCfg = Remote|Any CPU
-		{902A80B4-DECE-41C1-9552-51A1362537C9}.Remote|Any CPU.Build.0 = Remote|Any CPU
+		{902A80B4-DECE-41C1-9552-51A1362537C9}.Remote1|Any CPU.ActiveCfg = Remote1|Any CPU
+		{902A80B4-DECE-41C1-9552-51A1362537C9}.Remote1|Any CPU.Build.0 = Remote1|Any CPU
+		{902A80B4-DECE-41C1-9552-51A1362537C9}.Remote2|Any CPU.ActiveCfg = Remote|Any CPU
+		{902A80B4-DECE-41C1-9552-51A1362537C9}.Remote2|Any CPU.Build.0 = Remote|Any CPU
 		{0D1F7FBC-BFB0-4EE4-852D-E2A8D62C5708}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{0D1F7FBC-BFB0-4EE4-852D-E2A8D62C5708}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{0D1F7FBC-BFB0-4EE4-852D-E2A8D62C5708}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{0D1F7FBC-BFB0-4EE4-852D-E2A8D62C5708}.Release|Any CPU.Build.0 = Release|Any CPU
-		{0D1F7FBC-BFB0-4EE4-852D-E2A8D62C5708}.Remote|Any CPU.ActiveCfg = Remote|Any CPU
-		{0D1F7FBC-BFB0-4EE4-852D-E2A8D62C5708}.Remote|Any CPU.Build.0 = Remote|Any CPU
+		{0D1F7FBC-BFB0-4EE4-852D-E2A8D62C5708}.Remote1|Any CPU.ActiveCfg = Remote1|Any CPU
+		{0D1F7FBC-BFB0-4EE4-852D-E2A8D62C5708}.Remote1|Any CPU.Build.0 = Remote1|Any CPU
+		{0D1F7FBC-BFB0-4EE4-852D-E2A8D62C5708}.Remote2|Any CPU.ActiveCfg = Remote|Any CPU
+		{0D1F7FBC-BFB0-4EE4-852D-E2A8D62C5708}.Remote2|Any CPU.Build.0 = Remote|Any CPU
 		{D045DC91-1AD5-4EBF-A062-0C6C5FE203C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{D045DC91-1AD5-4EBF-A062-0C6C5FE203C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{D045DC91-1AD5-4EBF-A062-0C6C5FE203C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{D045DC91-1AD5-4EBF-A062-0C6C5FE203C5}.Release|Any CPU.Build.0 = Release|Any CPU
-		{D045DC91-1AD5-4EBF-A062-0C6C5FE203C5}.Remote|Any CPU.ActiveCfg = Remote|Any CPU
-		{D045DC91-1AD5-4EBF-A062-0C6C5FE203C5}.Remote|Any CPU.Build.0 = Remote|Any CPU
+		{D045DC91-1AD5-4EBF-A062-0C6C5FE203C5}.Remote1|Any CPU.ActiveCfg = Remote1|Any CPU
+		{D045DC91-1AD5-4EBF-A062-0C6C5FE203C5}.Remote1|Any CPU.Build.0 = Remote1|Any CPU
+		{D045DC91-1AD5-4EBF-A062-0C6C5FE203C5}.Remote2|Any CPU.ActiveCfg = Remote|Any CPU
+		{D045DC91-1AD5-4EBF-A062-0C6C5FE203C5}.Remote2|Any CPU.Build.0 = Remote|Any CPU
 		{73BAB40E-FC7D-4AB5-85CA-B4CF221DFBD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{73BAB40E-FC7D-4AB5-85CA-B4CF221DFBD1}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{73BAB40E-FC7D-4AB5-85CA-B4CF221DFBD1}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{73BAB40E-FC7D-4AB5-85CA-B4CF221DFBD1}.Release|Any CPU.Build.0 = Release|Any CPU
-		{73BAB40E-FC7D-4AB5-85CA-B4CF221DFBD1}.Remote|Any CPU.ActiveCfg = Remote|Any CPU
-		{73BAB40E-FC7D-4AB5-85CA-B4CF221DFBD1}.Remote|Any CPU.Build.0 = Remote|Any CPU
+		{73BAB40E-FC7D-4AB5-85CA-B4CF221DFBD1}.Remote1|Any CPU.ActiveCfg = Remote1|Any CPU
+		{73BAB40E-FC7D-4AB5-85CA-B4CF221DFBD1}.Remote1|Any CPU.Build.0 = Remote1|Any CPU
+		{73BAB40E-FC7D-4AB5-85CA-B4CF221DFBD1}.Remote2|Any CPU.ActiveCfg = Remote|Any CPU
+		{73BAB40E-FC7D-4AB5-85CA-B4CF221DFBD1}.Remote2|Any CPU.Build.0 = Remote|Any CPU
 		{CF748E61-69C2-4DEC-A9EC-755B6999077E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{CF748E61-69C2-4DEC-A9EC-755B6999077E}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{CF748E61-69C2-4DEC-A9EC-755B6999077E}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{CF748E61-69C2-4DEC-A9EC-755B6999077E}.Release|Any CPU.Build.0 = Release|Any CPU
-		{CF748E61-69C2-4DEC-A9EC-755B6999077E}.Remote|Any CPU.ActiveCfg = Remote|Any CPU
-		{CF748E61-69C2-4DEC-A9EC-755B6999077E}.Remote|Any CPU.Build.0 = Remote|Any CPU
+		{CF748E61-69C2-4DEC-A9EC-755B6999077E}.Remote1|Any CPU.ActiveCfg = Remote1|Any CPU
+		{CF748E61-69C2-4DEC-A9EC-755B6999077E}.Remote1|Any CPU.Build.0 = Remote1|Any CPU
+		{CF748E61-69C2-4DEC-A9EC-755B6999077E}.Remote2|Any CPU.ActiveCfg = Remote|Any CPU
+		{CF748E61-69C2-4DEC-A9EC-755B6999077E}.Remote2|Any CPU.Build.0 = Remote|Any CPU
 		{EAFDB5FF-20F9-4172-9A11-EC8CF3AB6EDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{EAFDB5FF-20F9-4172-9A11-EC8CF3AB6EDC}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{EAFDB5FF-20F9-4172-9A11-EC8CF3AB6EDC}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{EAFDB5FF-20F9-4172-9A11-EC8CF3AB6EDC}.Release|Any CPU.Build.0 = Release|Any CPU
-		{EAFDB5FF-20F9-4172-9A11-EC8CF3AB6EDC}.Remote|Any CPU.ActiveCfg = Remote|Any CPU
-		{EAFDB5FF-20F9-4172-9A11-EC8CF3AB6EDC}.Remote|Any CPU.Build.0 = Remote|Any CPU
+		{EAFDB5FF-20F9-4172-9A11-EC8CF3AB6EDC}.Remote1|Any CPU.ActiveCfg = Remote1|Any CPU
+		{EAFDB5FF-20F9-4172-9A11-EC8CF3AB6EDC}.Remote1|Any CPU.Build.0 = Remote1|Any CPU
+		{EAFDB5FF-20F9-4172-9A11-EC8CF3AB6EDC}.Remote2|Any CPU.ActiveCfg = Remote|Any CPU
+		{EAFDB5FF-20F9-4172-9A11-EC8CF3AB6EDC}.Remote2|Any CPU.Build.0 = Remote|Any CPU
 		{D6402D97-2206-4D55-8097-8DA9A01568CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{D6402D97-2206-4D55-8097-8DA9A01568CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{D6402D97-2206-4D55-8097-8DA9A01568CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{D6402D97-2206-4D55-8097-8DA9A01568CB}.Release|Any CPU.Build.0 = Release|Any CPU
-		{D6402D97-2206-4D55-8097-8DA9A01568CB}.Remote|Any CPU.ActiveCfg = Remote|Any CPU
-		{D6402D97-2206-4D55-8097-8DA9A01568CB}.Remote|Any CPU.Build.0 = Remote|Any CPU
+		{D6402D97-2206-4D55-8097-8DA9A01568CB}.Remote1|Any CPU.ActiveCfg = Remote1|Any CPU
+		{D6402D97-2206-4D55-8097-8DA9A01568CB}.Remote1|Any CPU.Build.0 = Remote1|Any CPU
+		{D6402D97-2206-4D55-8097-8DA9A01568CB}.Remote2|Any CPU.ActiveCfg = Remote|Any CPU
+		{D6402D97-2206-4D55-8097-8DA9A01568CB}.Remote2|Any CPU.Build.0 = Remote|Any CPU
 		{712D75B5-89DD-4064-BC4B-2F9D9F157604}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{712D75B5-89DD-4064-BC4B-2F9D9F157604}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{712D75B5-89DD-4064-BC4B-2F9D9F157604}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{712D75B5-89DD-4064-BC4B-2F9D9F157604}.Release|Any CPU.Build.0 = Release|Any CPU
-		{712D75B5-89DD-4064-BC4B-2F9D9F157604}.Remote|Any CPU.ActiveCfg = Remote|Any CPU
-		{712D75B5-89DD-4064-BC4B-2F9D9F157604}.Remote|Any CPU.Build.0 = Remote|Any CPU
+		{712D75B5-89DD-4064-BC4B-2F9D9F157604}.Remote1|Any CPU.ActiveCfg = Remote1|Any CPU
+		{712D75B5-89DD-4064-BC4B-2F9D9F157604}.Remote1|Any CPU.Build.0 = Remote1|Any CPU
+		{712D75B5-89DD-4064-BC4B-2F9D9F157604}.Remote2|Any CPU.ActiveCfg = Remote|Any CPU
+		{712D75B5-89DD-4064-BC4B-2F9D9F157604}.Remote2|Any CPU.Build.0 = Remote|Any CPU
 		{0043B4EC-A651-401C-9845-57A7C7576E28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{0043B4EC-A651-401C-9845-57A7C7576E28}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{0043B4EC-A651-401C-9845-57A7C7576E28}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{0043B4EC-A651-401C-9845-57A7C7576E28}.Release|Any CPU.Build.0 = Release|Any CPU
-		{0043B4EC-A651-401C-9845-57A7C7576E28}.Remote|Any CPU.ActiveCfg = Remote|Any CPU
-		{0043B4EC-A651-401C-9845-57A7C7576E28}.Remote|Any CPU.Build.0 = Remote|Any CPU
+		{0043B4EC-A651-401C-9845-57A7C7576E28}.Remote1|Any CPU.ActiveCfg = Remote1|Any CPU
+		{0043B4EC-A651-401C-9845-57A7C7576E28}.Remote1|Any CPU.Build.0 = Remote1|Any CPU
+		{0043B4EC-A651-401C-9845-57A7C7576E28}.Remote2|Any CPU.ActiveCfg = Remote|Any CPU
+		{0043B4EC-A651-401C-9845-57A7C7576E28}.Remote2|Any CPU.Build.0 = Remote|Any CPU
 		{D00450D6-DE54-4584-A377-7AA5D5964D2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{D00450D6-DE54-4584-A377-7AA5D5964D2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{D00450D6-DE54-4584-A377-7AA5D5964D2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{D00450D6-DE54-4584-A377-7AA5D5964D2C}.Release|Any CPU.Build.0 = Release|Any CPU
-		{D00450D6-DE54-4584-A377-7AA5D5964D2C}.Remote|Any CPU.ActiveCfg = Remote|Any CPU
-		{D00450D6-DE54-4584-A377-7AA5D5964D2C}.Remote|Any CPU.Build.0 = Remote|Any CPU
+		{D00450D6-DE54-4584-A377-7AA5D5964D2C}.Remote1|Any CPU.ActiveCfg = Remote1|Any CPU
+		{D00450D6-DE54-4584-A377-7AA5D5964D2C}.Remote1|Any CPU.Build.0 = Remote1|Any CPU
+		{D00450D6-DE54-4584-A377-7AA5D5964D2C}.Remote2|Any CPU.ActiveCfg = Remote|Any CPU
+		{D00450D6-DE54-4584-A377-7AA5D5964D2C}.Remote2|Any CPU.Build.0 = Remote|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 4 - 4
Dev/OHV/VehicleControlSystem/ControlLayer/IO/EzIO.cs

@@ -89,9 +89,9 @@ namespace VehicleControlSystem.ControlLayer.IO
                 this.isConnectError = value;
 
                 if ( isConnectError )
-                    this.qQ.Enqueue( new QoDiconnected() );
+                    this.qQ.Enqueue( new QoDiconnected() {Arg0 = "EzIO" } );
                 else
-                    this.qQ.Enqueue( new QoConnected() );
+                    this.qQ.Enqueue( new QoConnected() {Arg0 = "EzIO" } );
             }
         }
 
@@ -558,9 +558,9 @@ namespace VehicleControlSystem.ControlLayer.IO
                     var o = qQ.Dequeue();
 
                     if ( o is QoConnected )
-                        DelegateUtils.Invoke( OnContd );
+                        DelegateUtils.Invoke( OnContd, o.Arg0 );
                     else if ( o is QoDiconnected )
-                        DelegateUtils.Invoke( OnDiscontd );
+                        DelegateUtils.Invoke( OnDiscontd, o.Arg0 );
                     else if ( o is QoChangedIO )
                         DelegateUtils.Invoke( OnChangedIO, o.Arg0 );
                     else if ( o is QoWriteIO )

+ 1 - 1
Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/Advantech/Advantech.cs

@@ -31,7 +31,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
 
         //Todo:Dll 에서 상태 가져오기
         //bool IsConnected = false;
-        bool IsConnected
+        public bool IsConnected
         {
             get 
             {

+ 1 - 1
Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/BMUManager.cs

@@ -20,7 +20,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
         Peak com = null;
         Advantech adCom = null;
         public Config BMUConfig { get; set; }
-        public bool IsConnected { get; set; }
+        public bool IsConnected { get { return this.adCom.IsConnected; } }
 
         internal Dictionary<eDataKind, ReceivedData> ReceivedDataDic = new Dictionary<eDataKind , DataModel.ReceivedData>();
         protected TsQueue<QueObject> qq = new TsQueue<QueObject>( 512 );

+ 72 - 41
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs

@@ -167,6 +167,14 @@ namespace VehicleControlSystem.ControlLayer
             }
         }
 
+        private int obstaclePattern;
+        public int ObstaclePattern
+        {
+            get { return obstaclePattern; }
+            set { SetField( ref this.obstaclePattern, value ); }
+        }
+
+
         //이동
         public bool Busy
         {
@@ -451,6 +459,8 @@ namespace VehicleControlSystem.ControlLayer
             if ( this.motion.IsErrorOn )
                 return 22;
 
+            this.VehicleStateProperty = eVehicleState.Idle;
+
             return result;
         }
 
@@ -600,6 +610,8 @@ namespace VehicleControlSystem.ControlLayer
                 {
                     if ( this.autoManager.OperationModeProperty == eOperatationMode.AutoMode )
                         this.CheckObstacle();
+
+                    this.CheckIOState();
                 }
                 catch ( ThreadInterruptedException threadInterruptedException )
                 {
@@ -616,6 +628,19 @@ namespace VehicleControlSystem.ControlLayer
             logger.D( "Vehicle - _ThObstacleChecker Dispose" );
         }
 
+        private void CheckIOState()
+        {
+            //이미 알람이면 체크 안함.
+            if ( this.VehicleStateProperty == eVehicleState.Abnormal ) return;
+
+            if ( this.iO.IsConnectError ) return;
+
+            if ( this.iO.IsOn( "IN_EMS_SW" ) ) this.OccurVehicleAlarm( 28 );
+            if ( !this.iO.IsOn( "IN_CP_ON_SAFETY" ) ) this.OccurVehicleAlarm( 31 );
+            if ( !this.iO.IsOn( "IN_CP_ON_24V" ) ) this.OccurVehicleAlarm( 30 );
+            if ( !this.iO.IsOn( "IN_MC_ON" ) ) this.OccurVehicleAlarm( 29 );
+        }
+
         /// <summary>
         /// Scheduler 가 주는 Sub Command 를 이용하여 동작하자.
         /// </summary>
@@ -787,18 +812,19 @@ namespace VehicleControlSystem.ControlLayer
                     }
                 }
 
-                if ( this.ObstacleStateProperty != eObstacleState.Normal )
-                {
-                    if ( this.ObstacleStateProperty == eObstacleState.Blocked )
-                        this.VehicleStateProperty = eVehicleState.Blocked;
-
-                    if ( this.ObstacleStateProperty == eObstacleState.Abnormal )
-                    {
-                        this.VehicleStateProperty = eVehicleState.Abnormal;
-                        this.OccurVehicleAlarm( 24 );
-                        return false;
-                    }
-                }
+                //20.04.04 Kang Drive 측으로 상태만 알려주면 알아서 처리함.
+                //if ( this.ObstacleStateProperty != eObstacleState.Normal )
+                //{
+                //    if ( this.ObstacleStateProperty == eObstacleState.Blocked )
+                //        this.VehicleStateProperty = eVehicleState.Blocked;
+
+                //    if ( this.ObstacleStateProperty == eObstacleState.Abnormal )
+                //    {
+                //        this.VehicleStateProperty = eVehicleState.Abnormal;
+                //        this.OccurVehicleAlarm( 24 );
+                //        return false;
+                //    }
+                //}
             }
 
             return true;
@@ -815,6 +841,8 @@ namespace VehicleControlSystem.ControlLayer
                     Thread.Sleep( 10 );
 
                     //ToDo: approach Cross Point Check
+
+                    //ToDo: Obstacle Laser Sensor Pattern Change Method 구현 필요.
                 }
             } );
 
@@ -1001,26 +1029,26 @@ namespace VehicleControlSystem.ControlLayer
         #region Check Method
         bool CheckObstacle()
         {
-            if ( this.iO.IsOn( "IN_OBSTRUCTION_DETECT_SAFETY" ) || this.iO.IsOn( "IN_OBSTRUCTION_DETECT_ERROR" ) )
-            {
-                this.ObstacleStateProperty = eObstacleState.Abnormal;
-                this.motion.SetObstacleState( this.ObstacleStateProperty );
-                return true;
-            }
-
-            if ( this.iO.IsOn( "IN_OBSTRUCTION_DETECT_STOP" ) )
-            {
-                this.ObstacleStateProperty = eObstacleState.Blocked;
-                this.motion.SetObstacleState( this.ObstacleStateProperty );
-                return true;
-            }
-
-            if ( this.iO.IsOn( "IN_OBSTRUCTION_DETECT_SLOW" ) )
-            {
-                this.ObstacleStateProperty = eObstacleState.Decelerate;
-                this.motion.SetObstacleState( this.ObstacleStateProperty );
-                return true;
-            }
+            //if ( this.iO.IsOn( "IN_OBSTRUCTION_DETECT_SAFETY" ) || this.iO.IsOn( "IN_OBSTRUCTION_DETECT_ERROR" ) )
+            //{
+            //    this.ObstacleStateProperty = eObstacleState.Abnormal;
+            //    this.motion.SetObstacleState( this.ObstacleStateProperty );
+            //    return true;
+            //}
+
+            //if ( this.iO.IsOn( "IN_OBSTRUCTION_DETECT_STOP" ) )
+            //{
+            //    this.ObstacleStateProperty = eObstacleState.Blocked;
+            //    this.motion.SetObstacleState( this.ObstacleStateProperty );
+            //    return true;
+            //}
+
+            //if ( this.iO.IsOn( "IN_OBSTRUCTION_DETECT_SLOW" ) )
+            //{
+            //    this.ObstacleStateProperty = eObstacleState.Decelerate;
+            //    this.motion.SetObstacleState( this.ObstacleStateProperty );
+            //    return true;
+            //}
 
             this.ObstacleStateProperty = eObstacleState.Normal;
             this.motion.SetObstacleState( this.ObstacleStateProperty );
@@ -1045,9 +1073,9 @@ namespace VehicleControlSystem.ControlLayer
                 return 16;
 
             if ( isLoad )
-                this.iO.OutputOff( "OUT_CV_CWCCW" );
-            else
                 this.iO.OutputOn( "OUT_CV_CWCCW" );
+            else
+                this.iO.OutputOff( "OUT_CV_CWCCW" );
 
             if ( isOn )
                 this.iO.OutputOn( "OUT_CV_RUN" );
@@ -1081,7 +1109,7 @@ namespace VehicleControlSystem.ControlLayer
         public bool IsDetectedCenter() => this.iO.IsOn( "IN_CV_DETECT_01" );
 
         bool IsDetectedLoadStop() => this.iO.IsOn( "IN_CV_DETECT_02" );
-        bool IsInverterError() => this.iO.IsOn( "IN_CV_ERROR" );
+        bool IsInverterError() => !this.iO.IsOn( "IN_CV_ERROR" ); //Normal Close로 생각 됨.
         bool IsLifterPositinCheck() => this.iO.IsOn( "IN_LIFTER_POSITION_DETECT" );
         bool IsLifterDuplication() => this.iO.IsOn( "IN_LIFTER_DUPLICATION_DETECT" );
         bool IsPIOInterLockOn() => this.iO.IsOn( "OUT_PIO_INTERLOCK" );
@@ -1124,7 +1152,7 @@ namespace VehicleControlSystem.ControlLayer
 
         public int ConveyorUnload()
         {
-            if ( !IsDetectedLoadStart() )
+            if ( !IsDetectedCenter() )
                 return 11;
 
             logger.D( "[Manual Unload] - Conveyor On" );
@@ -1139,7 +1167,7 @@ namespace VehicleControlSystem.ControlLayer
                     return 12;
                 }
 
-                if ( !IsDetectedLoadStart() )
+                if ( !IsDetectedLoadStart() && !IsDetectedCenter() )
                     break;
             }
             OnOffConveyor( false );
@@ -1427,6 +1455,7 @@ namespace VehicleControlSystem.ControlLayer
 
         private void BMUManager_OnDisconnect( string obj )
         {
+            this.OccurVehicleAlarm( 32 );
         }
 
         private void BMUManager_OnConnect( string obj )
@@ -1510,7 +1539,7 @@ namespace VehicleControlSystem.ControlLayer
         /// </summary>
         /// <param name="no"> 0 == Off Laser</param>
         /// <returns></returns>
-        bool ChgObstacleDetectPattern( int no )
+        public bool ChgObstacleDetectPattern( int no )
         {
             var bitArray = BitUtils.ChgBitArray( no );
 
@@ -1524,10 +1553,12 @@ namespace VehicleControlSystem.ControlLayer
                  bitIndex++;
              } );
 
+            ObstaclePattern = no;
+
             return true;
         }
 
-        int GetObstacleDetectPattern()
+        public int GetObstacleDetectPattern()
         {
             int bitIndex = 0;
 
@@ -1535,7 +1566,7 @@ namespace VehicleControlSystem.ControlLayer
 
             this.obstacleBitList.ForEach( b =>
              {
-                 if ( this.iO.IsOn( b ) )
+                 if ( this.iO.IsOn( b, false ) )
                      bitArray.Set( bitIndex, false );
                  else
                      bitArray.Set( bitIndex, true );
@@ -1552,7 +1583,7 @@ namespace VehicleControlSystem.ControlLayer
             this.autoManager.ProcessAlarm( alarmID );
         }
 
-        void SetObstaclePattern( ObstacleControlEventArgs.eControlKind state, int value )
+        public void SetObstaclePattern( ObstacleControlEventArgs.eControlKind state, int value )
         {
             if ( state == ObstacleControlEventArgs.eControlKind.DRIVE )
             {

+ 27 - 6
Dev/OHV/VehicleControlSystem/Managers/AutoManager.cs

@@ -84,10 +84,30 @@ namespace VehicleControlSystem.Managers
 
                 autoModeState = value;
                 logger.D($"[AutoManager] AutoModeState - {value}");
+                switch ( value )
+                {
+                    case eAutoModeState.ErrorStop:
+                        this.LampStateProperty = eLampState.Alarm;
+                        break;
+                    case eAutoModeState.StartRun:
+                        this.LampStateProperty = eLampState.AutoRunNChargingFull;
+                        break;
+                    case eAutoModeState.Run:
+                        this.LampStateProperty = eLampState.AutoRunNChargingFull;
+                        break;
+                    case eAutoModeState.Stop:
+                        this.LampStateProperty = eLampState.Alarm;
+                        break;
+                    case eAutoModeState.WaitStop:
+                        this.LampStateProperty = eLampState.Alarm;
+                        break;
+                    default:
+                        break;
+                }
             }
         }
 
-        private eLampState lampState;
+        private eLampState lampState = eLampState.None;
         public eLampState LampStateProperty
         {
             get { return lampState; }
@@ -168,14 +188,14 @@ namespace VehicleControlSystem.Managers
             switch (state)
             {
                 case eLampState.Alarm:
-                    this.iO.OutputOff("OUT_TOWER_LAMP_RED");
+                    this.iO.OutputOn("OUT_TOWER_LAMP_RED");
                     break;
                 case eLampState.Charging:
-                    this.iO.OutputOff( "OUT_TOWER_LAMP_RED" );
-                    this.iO.OutputOff( "OUT_TOWER_LAMP_GREEN" );
+                    this.iO.OutputOn( "OUT_TOWER_LAMP_RED" );
+                    this.iO.OutputOn( "OUT_TOWER_LAMP_GREEN" );
                     break;
                 case eLampState.AutoRunNChargingFull:
-                    this.iO.OutputOff( "OUT_TOWER_LAMP_GREEN" );
+                    this.iO.OutputOn( "OUT_TOWER_LAMP_GREEN" );
                     //Blue 없음
                     //this.iO.OutputOff("OUT_TOWER_LAMP_BLUE");
                     break;
@@ -249,7 +269,6 @@ namespace VehicleControlSystem.Managers
                             break;
                         case eAutoModeState.StartRun:
                             this.AutoModeStateProperty = eAutoModeState.Run;
-                            this.LampStateProperty = eLampState.AutoRunNChargingFull;
                             break;
                         case eAutoModeState.Run:
                             break;
@@ -262,8 +281,10 @@ namespace VehicleControlSystem.Managers
                 default:
                     break;
             }
+
         }
 
+
         public void ProcessAlarm(int alarmID)
         {
             this.AutoModeStateProperty = eAutoModeState.ErrorStop;

+ 34 - 5
Dev/OHV/VehicleControlSystem/VCSystem.cs

@@ -108,7 +108,9 @@ namespace VehicleControlSystem
         }
         private void EzIO_OnContd(string ID)
         {
+            //IO 연결 시 할일 들을 여기서 하자.
             this.IO.OutputOn( "OUT_TEACH_MODE" );
+            this.autoManager.LampStateProperty = eLampState.Alarm;
 
             //throw new NotImplementedException();
         }
@@ -158,11 +160,38 @@ namespace VehicleControlSystem
                 case VCSMessageEventArgs.eVCSMessageKind.ReqConveyorUnload:
                     ReqConveyorUnload();
                     break;
+                case VCSMessageEventArgs.eVCSMessageKind.ReqObstaclePatternChg:
+                    ReqObsticlePatternChange(msg);
+                    break;
+                case VCSMessageEventArgs.eVCSMessageKind.ReqObstaclePatternNo:
+                    ReqObsticlePatternNo();
+                    break;
                 default:
                     break;
             }
         }
 
+        private void ReqObsticlePatternNo()
+        {
+            var reply = new GUIMessageEventArgs();
+            reply.Kind = GUIMessageEventArgs.eGUIMessageKind.RspObstaclePatternNo;
+            reply.MessageText = this.vehicle.GetObstacleDetectPattern().ToString();
+
+            GUIMessageEventPublish( reply );
+        }
+
+        private void ReqObsticlePatternChange( VCSMessageEventArgs msg )
+        {
+            var patternNo = Convert.ToInt32( msg.MessageText );
+            this.vehicle.ChgObstacleDetectPattern( patternNo );
+
+            var reply = new GUIMessageEventArgs();
+            reply.Kind = GUIMessageEventArgs.eGUIMessageKind.RspObstaclePatternChg;
+            reply.Result = FluentResults.Results.Ok();
+
+            GUIMessageEventPublish( reply );
+        }
+
         private void ReqConveyorUnload()
         {
             int result = 0;
@@ -177,11 +206,11 @@ namespace VehicleControlSystem
 
         private void ReqTest()
         {
-            logger.D( "Test Request" );
-            if ( this.IO.WaitChangeInputIO( true, 30000, "IN_CV_DETECT_00" ) )
-                logger.D( "Test - Time in" );
-            else
-                logger.D( "Test - Time out" );
+            //logger.D( "Test Request" );
+            //if ( this.IO.WaitChangeInputIO( true, 30000, "IN_CV_DETECT_00" ) )
+            //    logger.D( "Test - Time in" );
+            //else
+            //    logger.D( "Test - Time out" );
         }
 
         private void ReqMachineModeChg( VCSMessageEventArgs msg )

+ 10 - 0
Dev/OHV/VehicleControlSystem/VehicleControlSystem.csproj

@@ -43,6 +43,16 @@
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Remote1\</OutputPath>
+    <DefineConstants>TRACE;DEBUG</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="CommonServiceLocator, Version=2.0.4.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
       <HintPath>..\packages\CommonServiceLocator.2.0.4\lib\net45\CommonServiceLocator.dll</HintPath>