浏览代码

현장 업데이트

unque781 6 年之前
父节点
当前提交
00f95fad36

+ 2 - 0
Dev/OHV/OHV.Common/Model/Command.cs

@@ -24,6 +24,7 @@ namespace OHV.Common.Model
         public bool IsSecondCommanded { get; set; }
 
         public virtual bool IsSelected { get; set; }
+        public List<string> TargetList { get; set; }
 
         public Command()
         {
@@ -33,6 +34,7 @@ namespace OHV.Common.Model
             State = eCommandState.Queued;
             Result = eCommandResult.Completed;
             this.IsSecondCommanded = false;
+            this.TargetList = new List<string>();
         }
     }
 }

+ 2 - 0
Dev/OHV/OHV.Common/Model/SubCmd.cs

@@ -29,6 +29,7 @@ namespace OHV.Common.Model
         {
             ID = $"{Guid.NewGuid()}_{DateTime.Now.ToString("HHmmssfff")}";
             this.CreateTime = DateTime.Now;
+            this.TargetList = new List<string>();
         }
 
         public string ID { get; set; }
@@ -43,6 +44,7 @@ namespace OHV.Common.Model
         public DateTime CreateTime { get; set; }
 
         public virtual bool IsSelected { get; set; }
+        public List<string> TargetList { get; set; }
 
     }
 }

+ 17 - 32
Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoView.xaml

@@ -98,7 +98,7 @@
                         <Button Background="{x:Null}" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             materialDesign:ButtonAssist.CornerRadius="10"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            >
                             <StackPanel>
                                 <TextBlock HorizontalAlignment="Center"><Run Text="Axis" FontSize="20"/></TextBlock>
                                 <TextBlock HorizontalAlignment="Center"><Run Text="Select" FontSize="20"/></TextBlock>
@@ -109,7 +109,7 @@
                         <Button Grid.Column="0" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             materialDesign:ButtonAssist.CornerRadius="10"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            >
                             <StackPanel>
                                 <TextBlock HorizontalAlignment="Center"><Run Text="Target" FontSize="20"/></TextBlock>
                                 <TextBlock HorizontalAlignment="Center"><Run Text="Pos" FontSize="20"/></TextBlock>
@@ -120,7 +120,7 @@
                         <Button Grid.Column="0" Grid.Row="2" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             materialDesign:ButtonAssist.CornerRadius="10"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            >
                             <StackPanel>
                                 <TextBlock HorizontalAlignment="Center"><Run Text="Current" FontSize="18"/></TextBlock>
                                 <TextBlock HorizontalAlignment="Center"><Run Text="Pos" FontSize="20"/></TextBlock>
@@ -130,7 +130,7 @@
                         <Button Grid.Column="0" Grid.Row="3" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             materialDesign:ButtonAssist.CornerRadius="10"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            >
                             <StackPanel>
                                 <TextBlock HorizontalAlignment="Center"><Run Text="Difference" FontSize="14"/></TextBlock>
                                 <TextBlock HorizontalAlignment="Center"><Run Text="Pos" FontSize="20"/></TextBlock>
@@ -142,7 +142,6 @@
                         <Button Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             materialDesign:ButtonAssist.CornerRadius="10"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners"
                             Command="{Binding SelectAxisCommand}"
                             CommandParameter="Axis_CarrierLock_Left"
                             BorderBrush="{Binding LeftAxisBrush}"
@@ -158,8 +157,7 @@
 
                         <Button Background="{x:Null}" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
-                            materialDesign:ButtonAssist.CornerRadius="10"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            materialDesign:ButtonAssist.CornerRadius="10">
                             <Button.InputBindings>
                                 <MouseBinding Gesture="LeftClick" Command="{Binding KeyInTargetPosCommand}" CommandParameter="Left"/>
                             </Button.InputBindings>
@@ -168,15 +166,13 @@
 
                         <Button Background="{x:Null}" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
-                            materialDesign:ButtonAssist.CornerRadius="10"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            materialDesign:ButtonAssist.CornerRadius="10">
                             <TextBlock><Run Text="{Binding CurrentLockLeft, StringFormat=0.000, FallbackValue=0.000}" FontSize="20"/></TextBlock>
                         </Button>
 
                         <Button Background="{x:Null}" Grid.Column="1" Grid.Row="3" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
-                            materialDesign:ButtonAssist.CornerRadius="10"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            materialDesign:ButtonAssist.CornerRadius="10">
                             <TextBlock><Run Text="{Binding DifferenceLockLeft, StringFormat=0.000, FallbackValue=0.000}" FontSize="20"/></TextBlock>
                         </Button>
 
@@ -184,7 +180,6 @@
                         <Button Grid.Column="2" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             materialDesign:ButtonAssist.CornerRadius="10"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners"
                             Command="{Binding SelectAxisCommand}"
                             CommandParameter="Axis_CarrierLock_Right"
                             BorderBrush="{Binding RightAxisBrush}"
@@ -200,8 +195,7 @@
 
                         <Button Background="{x:Null}" Grid.Column="2" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
-                            materialDesign:ButtonAssist.CornerRadius="10"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            materialDesign:ButtonAssist.CornerRadius="10">
                             <Button.InputBindings>
                                 <MouseBinding Gesture="LeftClick" Command="{Binding KeyInTargetPosCommand}" CommandParameter="Right"/>
                             </Button.InputBindings>
@@ -210,15 +204,13 @@
 
                         <Button Background="{x:Null}" Grid.Column="2" Grid.Row="2" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
-                            materialDesign:ButtonAssist.CornerRadius="10"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            materialDesign:ButtonAssist.CornerRadius="10">
                             <TextBlock><Run Text="{Binding CurrentLockRight, StringFormat=0.000, FallbackValue=0.000}" FontSize="20"/></TextBlock>
                         </Button>
 
                         <Button Background="{x:Null}" Grid.Column="2" Grid.Row="3" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                            Style="{StaticResource MaterialDesignRaisedButton}"
-                            materialDesign:ButtonAssist.CornerRadius="10"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            materialDesign:ButtonAssist.CornerRadius="10">
                             <TextBlock><Run Text="{Binding DifferenceLockRight, StringFormat=0.000, FallbackValue=0.000}" FontSize="20"/></TextBlock>
                         </Button>
 
@@ -227,14 +219,12 @@
 
                         <Button Background="{x:Null}" Grid.Column="3" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                            Style="{StaticResource MaterialDesignRaisedButton}"
-                            materialDesign:ButtonAssist.CornerRadius="10"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            materialDesign:ButtonAssist.CornerRadius="10">
                             <TextBlock><Run Text="Left Axis" FontSize="20"/></TextBlock>
                         </Button>
                         <Button Background="{x:Null}" Grid.Column="4" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                            Style="{StaticResource MaterialDesignRaisedButton}"
-                            materialDesign:ButtonAssist.CornerRadius="10"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            materialDesign:ButtonAssist.CornerRadius="10">
                             <TextBlock><Run Text="Right Axis" FontSize="18"/></TextBlock>
                         </Button>
 
@@ -248,16 +238,14 @@
                         </Button>
                         <Button Grid.Column="3" Grid.Row="2" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
-                            materialDesign:ButtonAssist.CornerRadius="10" Background="{c:Binding 'IsLeftServoOriginReturn ? media:Brushes.DodgerBlue : media:Brushes.Transparent'}"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            materialDesign:ButtonAssist.CornerRadius="10" Background="{c:Binding 'IsLeftServoOriginReturn ? media:Brushes.DodgerBlue : media:Brushes.Transparent'}">
                             <StackPanel>
                                 <TextBlock HorizontalAlignment="Center" TextWrapping="Wrap"><Run Text="Origin Return"/></TextBlock>
                             </StackPanel>
                         </Button>
                         <Button Grid.Column="3" Grid.Row="3" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
-                            materialDesign:ButtonAssist.CornerRadius="10" Background="{c:Binding 'IsLeftServoFault ? media:Brushes.DodgerBlue : media:Brushes.Transparent'}"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            materialDesign:ButtonAssist.CornerRadius="10" Background="{c:Binding 'IsLeftServoFault ? media:Brushes.DodgerBlue : media:Brushes.Transparent'}">
                             <StackPanel>
                                 <TextBlock HorizontalAlignment="Center" TextWrapping="Wrap"><Run Text="Servo Fault"/></TextBlock>
                             </StackPanel>
@@ -276,24 +264,21 @@
                         </Border>
                         <Button Grid.Column="4" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
-                            materialDesign:ButtonAssist.CornerRadius="10" Background="{c:Binding 'IsRightServoOn ? media:Brushes.DodgerBlue : media:Brushes.Transparent'}"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            materialDesign:ButtonAssist.CornerRadius="10" Background="{c:Binding 'IsRightServoOn ? media:Brushes.DodgerBlue : media:Brushes.Transparent'}">
                             <StackPanel>
                                 <TextBlock HorizontalAlignment="Center"><Run Text="Servo On"/></TextBlock>
                             </StackPanel>
                         </Button>
                         <Button Grid.Column="4" Grid.Row="2" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
-                            materialDesign:ButtonAssist.CornerRadius="10" Background="{c:Binding 'IsRightServoOriginReturn ? media:Brushes.DodgerBlue : media:Brushes.Transparent'}"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            materialDesign:ButtonAssist.CornerRadius="10" Background="{c:Binding 'IsRightServoOriginReturn ? media:Brushes.DodgerBlue : media:Brushes.Transparent'}">
                             <StackPanel>
                                 <TextBlock HorizontalAlignment="Center" TextWrapping="Wrap"><Run Text="Origin Return"/></TextBlock>
                             </StackPanel>
                         </Button>
                         <Button Grid.Column="4" Grid.Row="3" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
-                            materialDesign:ButtonAssist.CornerRadius="10" Background="{c:Binding 'IsRightServoFault ? media:Brushes.DodgerBlue : media:Brushes.Transparent'}"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                            materialDesign:ButtonAssist.CornerRadius="10" Background="{c:Binding 'IsRightServoFault ? media:Brushes.DodgerBlue : media:Brushes.Transparent'}">
                             <StackPanel>
                                 <TextBlock HorizontalAlignment="Center" TextWrapping="Wrap"><Run Text="Servo Fault"/></TextBlock>
                             </StackPanel>

+ 4 - 4
Dev/OHV/VehicleControlSystem/ControlLayer/Clamp.cs

@@ -530,7 +530,7 @@ namespace VehicleControlSystem.ControlLayer
         public int MoveToLockPosition( string axisName )
         {
             var servo = this.axes.Where( x => x.Config.AxisName.Equals( axisName ) ).Single();
-            var axisPositionDatas = sql.AxisPositionDataDAL.Get(x=>x.Name.Equals( axisName )).ToList();
+            var axisPositionDatas = sql.AxisPositionDataDAL.Get(x=>x.AxisName.Equals( axisName )).ToList();
             var data = axisPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_LOCK ) ).Single();
 
             int result = servo.Move( data.Value );
@@ -541,7 +541,7 @@ namespace VehicleControlSystem.ControlLayer
         public int MoveToUnlockPosition( string axisName )
         {
             var servo = this.axes.Where( x => x.Config.AxisName.Equals( axisName ) ).Single();
-            var axisPositionDatas = sql.AxisPositionDataDAL.Get( x => x.Name.Equals( axisName ) ).ToList();
+            var axisPositionDatas = sql.AxisPositionDataDAL.Get( x => x.AxisName.Equals( axisName ) ).ToList();
             var data = axisPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_UNLOCK ) ).Single();
 
             int result = servo.Move( data.Value );
@@ -564,11 +564,11 @@ namespace VehicleControlSystem.ControlLayer
             if ( result != 0 )
                 return result;
 
-            var leftPositionDatas = sql.AxisPositionDataDAL.Get(x=>x.Name.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT) ).ToList();
+            var leftPositionDatas = sql.AxisPositionDataDAL.Get(x=>x.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT) ).ToList();
             var leftData = leftPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_LOCK ) ).Single();
             var left = this.axes.Where( x => x.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) ).Single();
 
-            var rightPositionDatas = sql.AxisPositionDataDAL.Get( x => x.Name.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).ToList();
+            var rightPositionDatas = sql.AxisPositionDataDAL.Get( x => x.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).ToList();
             var rightData = leftPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_LOCK ) ).Single();
             var right = this.axes.Where( x => x.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).Single();
 

+ 31 - 3
Dev/OHV/VehicleControlSystem/ControlLayer/MQ/ZmqManager.cs

@@ -198,13 +198,18 @@ namespace VehicleControlSystem.ControlLayer.MQ
             switch ( kind )
             {
                 case eDataKind.Current:
-                    this.pub.SendMoreFrame( "BatteryCurrent" ).SendFrame( obj.Value.ToString() ); ;
+                    this.pub.SendMoreFrame( "BatteryCurrent" ).SendFrame( obj.Value.ToString() ); 
                     break;
                 case eDataKind.Voltage:
+                    this.pub.SendMoreFrame( "BatteryVoltage" ).SendFrame( obj.Value.ToString() ); 
+                    break;
                 case eDataKind.BatteryState:
                 case eDataKind.ChargeCompleteTime:
                 case eDataKind.DisChargeCompleteTime:
+                    break;
                 case eDataKind.SOC:
+                    this.pub.SendMoreFrame( "BatterySOC" ).SendFrame( obj.Value.ToString() ); 
+                    break;
                 case eDataKind.SOH:
                 case eDataKind.ResidualCapacity:
                 case eDataKind.ResidualEnergy:
@@ -232,6 +237,11 @@ namespace VehicleControlSystem.ControlLayer.MQ
             this.req.Dispose();
         }
 
+        public void Publish(string key, string val) 
+        {
+            this.pub.SendMoreFrame( key ).SendFrame( val );
+        }
+
         private void Rep_ReceiveReady( object sender, NetMQSocketEventArgs e )
         {
             var ret = e.Socket.ReceiveMultipartStrings();
@@ -279,6 +289,7 @@ namespace VehicleControlSystem.ControlLayer.MQ
                             break;
 
                         case "4012":
+
                             if ( v[1].Equals( "3" ) )
                                 IsDriveMoving = true;
                             else
@@ -593,9 +604,15 @@ namespace VehicleControlSystem.ControlLayer.MQ
         #endregion
 
         #region Set Request Method
-        internal int SetStartMove()
+        internal int SetStartMove( bool isArrayCommand = false )
         {
-            if ( !SetRequest( "3031", "2" ) )
+            string cmd = string.Empty;
+            if ( isArrayCommand )
+                cmd = "3";
+            else
+                cmd = "2";
+
+            if ( !SetRequest( "3031", cmd ) )
             {
                 logger.E( $"[Set Start Move] - Response Time Out" );
                 return 38;
@@ -614,6 +631,17 @@ namespace VehicleControlSystem.ControlLayer.MQ
             return ConstInt.EXECUTE_SUCCESS;
         }
 
+        internal int SetTargetPointArray(string point )
+        {
+            if ( !SetRequest( "3034", point ) )
+            {
+                logger.E( $"[Set TargetPoint] - Response Time Out" );
+                return 38;
+            }
+
+            return ConstInt.EXECUTE_SUCCESS;
+        }
+
         internal void SetObstruction( eObstacleState state )
         {
             string outStr = string.Empty;

+ 30 - 8
Dev/OHV/VehicleControlSystem/ControlLayer/Motion/GSIDrive.cs

@@ -6,6 +6,7 @@ using OHV.Common.Model;
 using OHV.Common.Shareds;
 using OHV.SqliteDAL;
 using System;
+using System.Text;
 using VehicleControlSystem.ControlLayer.MQ;
 using VehicleControlSystem.Managers;
 
@@ -217,7 +218,7 @@ namespace VehicleControlSystem.ControlLayer.Drive
             return eOperatationMode.InitialMode;
         }
 
-        public int MoveToPoint( string point, double velocity )
+        public int MoveToPoint( SubCmd sub, double velocity )
         {
             //if ( this.DriveServoState != eDriveServoState.ServoStop )
             //    return 9999;
@@ -231,15 +232,36 @@ namespace VehicleControlSystem.ControlLayer.Drive
 
             zmq.SetCurrentSteeringState( steering.GetSteeringState() );
             LockUtils.Wait( 100 );
-            result = zmq.SetTargetPoint( point );
-            if ( result != ConstInt.EXECUTE_SUCCESS )
-                return result;
 
-            LockUtils.Wait( 100 );
+            StringBuilder sb = new StringBuilder();
+            if ( sub.TargetList.Count <= 0 )
+            {
+                sb.Append( sub.TargetID );
+                result = zmq.SetTargetPoint( sb.ToString() );
+                LockUtils.Wait( 100 );
+                if ( result != ConstInt.EXECUTE_SUCCESS )
+                    return result;
+
+                result = zmq.SetStartMove();
+                if ( result != ConstInt.EXECUTE_SUCCESS )
+                    return result;
+            }
+            else
+            {
+                sub.TargetList.ForEach( x => { sb.Append( x ); sb.Append( ";" ); } );
+                result = zmq.SetTargetPointArray( sb.ToString() );
+                LockUtils.Wait( 100 );
+                if ( result != ConstInt.EXECUTE_SUCCESS )
+                    return result;
+
+                result = zmq.SetStartMove(true);
+                if ( result != ConstInt.EXECUTE_SUCCESS )
+                    return result;
+            }
 
-            result = zmq.SetStartMove();
-            if ( result != ConstInt.EXECUTE_SUCCESS )
-                return result;
+            //result = zmq.SetStartMove();
+            //if ( result != ConstInt.EXECUTE_SUCCESS )
+            //    return result;
 
             int waitTime = 10000;
             long st = SwUtils.CurrentTimeMillis;

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

@@ -186,7 +186,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
             } );
 
             //다음 timer 기동 시 까지 잠시 대기
-            polling.Once( _OnTimePoll, 500 );
+            polling.Once( _OnTimePoll, 100 );
         }
 
         void _OnTimePoll()

+ 30 - 16
Dev/OHV/VehicleControlSystem/ControlLayer/Steering.cs

@@ -48,26 +48,40 @@ namespace VehicleControlSystem.ControlLayer
         public eSteeringState GetSteeringState( )
         {
             eSteeringState frontState = eSteeringState.None;
-            if ( this.IsFrontLeft() && this.IsFrontRight() )
-                frontState = eSteeringState.None;
-            if ( !this.IsFrontLeft() && !this.IsFrontRight() )
-                frontState = eSteeringState.None;
-
-            if ( this.IsFrontLeft() && !this.IsFrontRight() )
+            //if ( this.IsFrontLeft() && this.IsFrontRight() )
+            //    frontState = eSteeringState.None;
+            //else if ( !this.IsFrontLeft() && !this.IsFrontRight() )
+            //    frontState = eSteeringState.None;
+            //else
+            //{
+            //    this.SteeringState = eSteeringState.None;
+            //    return this.SteeringState;
+            //}
+
+            if ( !this.IsFrontRight() )
                 frontState = eSteeringState.Left;
-            if ( !this.IsFrontLeft() && this.IsFrontRight() )
+            else if ( !this.IsFrontLeft() )
                 frontState = eSteeringState.Right;
+            else
+                frontState = eSteeringState.None;
 
             eSteeringState rearState = eSteeringState.None;
-            if ( this.IsRearLeft() && this.IsRearRight() )
-                rearState = eSteeringState.None;
-            if ( !this.IsRearLeft() && !this.IsRearRight() )
-                rearState = eSteeringState.None;
-
-            if ( this.IsRearLeft() && !this.IsRearRight() )
+            //if ( this.IsRearLeft() && this.IsRearRight() )
+            //    rearState = eSteeringState.None;
+            //else if ( !this.IsRearLeft() && !this.IsRearRight() )
+            //    rearState = eSteeringState.None;
+            //else
+            //{
+            //    this.SteeringState = eSteeringState.None;
+            //    return this.SteeringState;
+            //}
+
+            if ( !this.IsRearRight() )
                 rearState = eSteeringState.Left;
-            if ( !this.IsRearLeft() && this.IsRearRight() )
+            else if ( !this.IsRearLeft() )
                 rearState = eSteeringState.Right;
+            else
+                rearState = eSteeringState.None;
 
             if ( frontState == eSteeringState.Left && rearState == eSteeringState.Left )
                 this.SteeringState = eSteeringState.Left;
@@ -122,12 +136,12 @@ namespace VehicleControlSystem.ControlLayer
 
                      if ( isLeft )
                      {
-                         if ( this.IsFrontLeft() && this.IsRearLeft() )
+                         if ( this.IsLeft())
                              break;
                      }
                      else
                      {
-                         if ( this.IsFrontRight() && this.IsRearRight() )
+                         if ( this.IsRight() )
                              break;
                      }
                  }

+ 67 - 44
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs

@@ -210,7 +210,6 @@ namespace VehicleControlSystem.ControlLayer
             set { SetField( ref this.rearDriveState, value ); }
         }
 
-
         //이동
         public bool Busy
         {
@@ -697,7 +696,10 @@ namespace VehicleControlSystem.ControlLayer
                 return;
             }
 
-            this.MoveTo( route.Name );
+            var subCommand = new SubCmd();
+            subCommand.TargetID = route.Name;
+
+            this.MoveTo( subCommand );
             reply.Result = Results.Ok( "Position Move" );
             this.DriveControlEventPublish( reply );
         }
@@ -906,15 +908,19 @@ namespace VehicleControlSystem.ControlLayer
                 result = this.StopBatteryCharge();
                 if ( result != 0 )
                 {
-                    //OccurVehicleAlarm( result );
-                    //return;
+                    OccurVehicleAlarm( result );
+                    return;
                 }
             }
 
-            result = this.MoveTo( sub.TargetID );
-            if ( result != ConstInt.EXECUTE_SUCCESS )
+            var iTarget = Convert.ToInt32( sub.TargetID );
+            if ( iTarget != CurrentTag ) //하나의 목표 위치로 왔을때 현재 위치와 동일 하면 이동안함.
             {
-                OccurVehicleAlarm( result );
+                result = this.MoveTo( sub );
+                if ( result != ConstInt.EXECUTE_SUCCESS )
+                {
+                    OccurVehicleAlarm( result );
+                }
             }
 
             this.taskMoveCancel.Cancel();
@@ -923,7 +929,7 @@ namespace VehicleControlSystem.ControlLayer
             sql.SubCmdDAL.Clean();
         }
 
-        int MoveTo( string pointID )
+        int MoveTo( SubCmd sub )
         {
             if ( this.VehicleStateProperty == eVehicleState.Idle )
             {
@@ -944,7 +950,7 @@ namespace VehicleControlSystem.ControlLayer
 
             this.VehicleStateProperty = eVehicleState.Move;
 
-            int result = this.refObjects.Drive.MoveToPoint( pointID, 100 );
+            int result = this.refObjects.Drive.MoveToPoint( sub, 100 );
             if ( result != ConstInt.EXECUTE_SUCCESS )
                 return result;
 
@@ -1053,7 +1059,7 @@ namespace VehicleControlSystem.ControlLayer
             //Load, Unload 가 끝나면 메인 Command 를 완료 했다고 판단.
             var cmd = sql.CommandDAL.GetById( sub.CmdID );
             cmd.State = eCommandState.Complete;
-            sql.CommandDAL.Update(cmd);
+            sql.CommandDAL.Update( cmd );
             sql.SubCmdDAL.Clean();
 
             LockUtils.Wait( 1000 );
@@ -1103,13 +1109,15 @@ namespace VehicleControlSystem.ControlLayer
 
             var cmd = sql.CommandDAL.GetById( sub.CmdID );
             cmd.State = eCommandState.Complete;
-            sql.CommandDAL.Update(cmd);
+            sql.CommandDAL.Update( cmd );
             sql.SubCmdDAL.Clean();
 
             LockUtils.Wait( 1000 );
             this.OnUnloadComplete?.Invoke(); //일찍 주면 다음 명령을 500ms 안에 주는 현상 있음. 그러니까 천천히 주자 
             this.VehicleStateProperty = eVehicleState.Idle;
 
+            logger.D( $"[Unloading End]--------------------------------------" );
+
             return true;
         }
 
@@ -1117,6 +1125,8 @@ namespace VehicleControlSystem.ControlLayer
         {
             int result = 0;
             result = this.StartBatteryCharge();
+            if ( result != ConstInt.EXECUTE_SUCCESS )
+                this.OccurVehicleAlarm( result );
 
             var cmd = sql.CommandDAL.GetById( subCmd.CmdID );
             cmd.State = eCommandState.Complete;
@@ -1315,7 +1325,7 @@ namespace VehicleControlSystem.ControlLayer
 
             this.refObjects.IO.WriteOutputIO( "OUT_PIO_RECIVE_COMPLITE", true );
             loggerPIO.I( "[Vehicle] Receive Complete On" );
-            
+
             if ( !this.refObjects.IO.WaitChangeInputIO( true, 10000, "IN_PIO_SEND_COMPLITE" ) )
             {
                 this.refObjects.IO.WriteOutputIO( "OUT_PIO_RECIVE_COMPLITE", false );
@@ -1843,7 +1853,6 @@ namespace VehicleControlSystem.ControlLayer
             switch ( kind )
             {
                 case eDataKind.Voltage:
-                    //this.BatteryVoltage = (double)obj.Value * obj.Scale;
                     this.BatteryVoltage = (double)obj.Value;
                     break;
                 case eDataKind.Current:
@@ -1857,17 +1866,30 @@ namespace VehicleControlSystem.ControlLayer
                 case eDataKind.ChargeCompleteTime:
                     if ( obj.Value == null /*|| obj.Value <= 0 */)
                         return;
-                    //this.BatteryChargeTime = (double)obj.Value / obj.Scale;
                     this.BatteryChargeTime = (double)obj.Value;
+                    if ( this.BatteryChargeTime > 0 )
+                        this.VehicleStateProperty = eVehicleState.Charge;
                     break;
                 case eDataKind.DisChargeCompleteTime:
                     if ( obj.Value == null || obj.Value <= 0 )
                         return;
-                    //this.BatteryDisChargeTime = (double)obj.Value / obj.Scale;
                     this.BatteryDisChargeTime = (double)obj.Value;
                     break;
                 case eDataKind.SOC:
                     this.BatteryStateOfCharge = (double)obj.Value;
+                    if ( this.BatteryStateOfCharge >= 80 )
+                    {
+                        if ( this.autoManager.AutoModeStateProperty != eAutoModeState.Run )
+                            return;
+
+                        if ( this.VehicleStateProperty == eVehicleState.Charge || this.IsCharging() )
+                        {
+                            int result = ConstInt.EXECUTE_SUCCESS;
+                            result = this.StopBatteryCharge();
+                            if ( result != ConstInt.EXECUTE_SUCCESS )
+                                this.OccurVehicleAlarm( result );
+                        }
+                    }
                     break;
                 case eDataKind.SOH:
                     this.BatteryStateOfHealth = (double)obj.Value;
@@ -2052,37 +2074,37 @@ namespace VehicleControlSystem.ControlLayer
                     }
                     break;
 
-                //case "FrontLoadFactor":
-                //    {
-                //        var v = CastTo<double>.From<object>( newValue );
-                //        this.FrontLoadFactor = v;
-                //        this.FrontTorque = Math.Truncate( ( ( v * 1.9 ) / 1000 ) * 100 ) / 100;
-                //    }
-                //    break;
-                //case "FrontRpm":
-                //    {
-                //        var v = CastTo<double>.From<object>( newValue );
-                //        this.FrontRpm = v;
+                    //case "FrontLoadFactor":
+                    //    {
+                    //        var v = CastTo<double>.From<object>( newValue );
+                    //        this.FrontLoadFactor = v;
+                    //        this.FrontTorque = Math.Truncate( ( ( v * 1.9 ) / 1000 ) * 100 ) / 100;
+                    //    }
+                    //    break;
+                    //case "FrontRpm":
+                    //    {
+                    //        var v = CastTo<double>.From<object>( newValue );
+                    //        this.FrontRpm = v;
 
-                //        var ll = ( ( ( ( v / 60 ) * ( 2 * Math.PI ) ) * 0.06 ) / 10 );
-                //        this.FrontSpeed = Math.Truncate( ll * 100 ) / 100;
-                //    }
-                //    break;
-                //case "RearLoadFactor":
-                //    {
-                //        var v = CastTo<double>.From<object>( newValue );
-                //        this.RearLoadFactor = v;
-                //        this.RearTorque = Math.Truncate( ( ( v * 1.9 ) / 1000 ) * 100 ) / 100;
-                //    }
-                //    break;
-                //case "RearRpm":
-                //    {
-                //        var v = CastTo<double>.From<object>( newValue );
-                //        this.RearRpm = v;
+                    //        var ll = ( ( ( ( v / 60 ) * ( 2 * Math.PI ) ) * 0.06 ) / 10 );
+                    //        this.FrontSpeed = Math.Truncate( ll * 100 ) / 100;
+                    //    }
+                    //    break;
+                    //case "RearLoadFactor":
+                    //    {
+                    //        var v = CastTo<double>.From<object>( newValue );
+                    //        this.RearLoadFactor = v;
+                    //        this.RearTorque = Math.Truncate( ( ( v * 1.9 ) / 1000 ) * 100 ) / 100;
+                    //    }
+                    //    break;
+                    //case "RearRpm":
+                    //    {
+                    //        var v = CastTo<double>.From<object>( newValue );
+                    //        this.RearRpm = v;
 
-                //        var ll = ( ( ( ( v / 60 ) * ( 2 * Math.PI ) ) * 0.06 ) / 10 );
-                //        this.RearSpeed = Math.Truncate( ll * 100 ) / 100;
-                //    }
+                    //        var ll = ( ( ( ( v / 60 ) * ( 2 * Math.PI ) ) * 0.06 ) / 10 );
+                    //        this.RearSpeed = Math.Truncate( ll * 100 ) / 100;
+                    //    }
                     break;
                 default:
                     break;
@@ -2122,6 +2144,7 @@ namespace VehicleControlSystem.ControlLayer
             {
                 case "IN_CV_DETECT_01":
                     this.IsContain = bit.IsBitOn;
+                    this.refObjects.ZmqManager.Publish( "Contain", this.IsContain.ToString() );
                     break;
 
                 case "IN_MC_ON":

+ 9 - 2
Dev/OHV/VehicleControlSystem/Managers/HostManager.cs

@@ -12,6 +12,7 @@ using GSG.NET.Quartz;
 using System.Text;
 using GSG.NET.LINQ;
 using System.Linq;
+using System.Collections.Generic;
 
 namespace VehicleControlSystem.Managers
 {
@@ -76,7 +77,9 @@ namespace VehicleControlSystem.Managers
             var msg = new OCSMessage();
             msg.Kind = eKind.E;
             msg.Tag = obj.ToString("0000");
-            msg.SubCode = "100";
+            msg.IsSubCode1 = vehicle.IsContain;
+            msg.IsSubCode2 = vehicle.IsMoving;
+            msg.IsSubCode3 = true;
             this.manager.Send( msg );
         }
 
@@ -85,7 +88,9 @@ namespace VehicleControlSystem.Managers
             var msg = new OCSMessage();
             msg.Kind = eKind.E;
             msg.Tag = obj.ToString("0000");
-            msg.SubCode = "101";
+            msg.IsSubCode1 = vehicle.IsContain;
+            msg.IsSubCode2 = vehicle.IsMoving;
+            msg.IsSubCode3 = false;
             this.manager.Send( msg );
         }
 
@@ -445,6 +450,7 @@ namespace VehicleControlSystem.Managers
                             return;
                     }
                     cmd.ByWho = eCommandByWho.HostOverWrite;
+                    cmd.TargetList = new List<string>( msg.ViaRouteList );
 
                     cmd.TargetID = msg.Tag;
 
@@ -484,6 +490,7 @@ namespace VehicleControlSystem.Managers
 
                 this.sql.CommandDAL.Insert( cmd );
                 logger.I( $"[Command] - Add Host : Target {cmd.TargetID} / Type {cmd.Type}" );
+
             }
 
         }

+ 24 - 11
Dev/OHV/VehicleControlSystem/Managers/Scheduler.cs

@@ -134,7 +134,7 @@ namespace VehicleControlSystem.Managers
                                             this.DryRunTest();
                                             continue;
                                         }
-                                            
+
                                         DoWork( cmd );
                                         break;
                                     case OHV.Common.Shareds.eAutoModeState.Stop:
@@ -155,7 +155,7 @@ namespace VehicleControlSystem.Managers
                     logger.E( ex );
                 }
             }
-            logger.D("[Scheduler] - Command Thread Dispose");
+            logger.D( "[Scheduler] - Command Thread Dispose" );
         }
 
 
@@ -168,11 +168,11 @@ namespace VehicleControlSystem.Managers
 
             if ( this.bMUManager.ReceivedDataDic[eDataKind.SOC].Value <= 10 )
             {
-                var targetPoint = "2";
-                Command cmd = new Command() { TargetID = targetPoint, Type = eCommandType.Charging };
-                cmd.ByWho = eCommandByWho.LocalSystem;
+                //var targetPoint = "2";
+                //Command cmd = new Command() { TargetID = targetPoint, Type = eCommandType.Charging };
+                //cmd.ByWho = eCommandByWho.LocalSystem;
 
-                this.AddCommand( cmd );
+                //this.AddCommand( cmd );
 
                 this.IsCreateDryRunCommand = false;
                 return;
@@ -183,18 +183,29 @@ namespace VehicleControlSystem.Managers
                 return;
             else
             {
-                this.copyTarget = ram;
-
                 var target = RouteManager.Instance.Equipments[ram];
-                //if ( target.Name.Equals( "CHARGING_01" ) || target.pointID == 17 )
-                //    return;
+                this.copyTarget = ram;
 
                 var targetPoint = target.pointID.ToString();
                 Command cmd = new Command() { TargetID = targetPoint, Type = eCommandType.Move };
                 cmd.ByWho = eCommandByWho.LocalSystem;
 
                 this.AddCommand( cmd );
-                LockUtils.Wait( 2000 );
+                LockUtils.Wait( 2500 );
+
+                //if ( ( target.Name.Equals( "CHARGING_02" ) ) || ( target.Name.Equals( "STOKER_LIFT_IP01" ) ) ||
+                //    ( target.Name.Equals( "STOKER_LIFT_OP01" ) ) || ( target.Name.Equals( "WORK_STATION_IP01" ) ) ||
+                //    ( target.Name.Equals( "WORK_STATION_OP01" ) ) )
+                //{
+                //    this.copyTarget = ram;
+
+                //    var targetPoint = target.pointID.ToString();
+                //    Command cmd = new Command() { TargetID = targetPoint, Type = eCommandType.Move };
+                //    cmd.ByWho = eCommandByWho.LocalSystem;
+
+                //    this.AddCommand( cmd );
+                //    LockUtils.Wait( 2000 );
+                //}
             }
         }
 
@@ -303,7 +314,9 @@ namespace VehicleControlSystem.Managers
                 Type = type,
                 TargetID = cmd.TargetID,
                 CmdID = cmd.CommandID,
+                TargetList = new List<string>( cmd.TargetList ),
             };
+
             sql.SubCmdDAL.Insert( sub );
             logger.I( $"{sub.ID} Sub Command Create - Type={sub.Type}, TargetID={sub.TargetID}, CommandID={sub.CmdID}" );
 

+ 21 - 1
Dev/OHV/VehicleControlSystem/VCSystem.cs

@@ -1,6 +1,10 @@
 using System;
+using System.Collections.Generic;
 using System.IO;
+using System.Linq;
 using System.Threading;
+using GSG.NET.Concurrent;
+using GSG.NET.Excel;
 using GSG.NET.Extensions;
 using GSG.NET.Logging;
 using GSG.NET.Quartz;
@@ -43,6 +47,8 @@ namespace VehicleControlSystem
 
         public RouteManager RouteManager { get; set; }
 
+        public List<Alarm> Alarms { get; set; }
+
         public VCSystem( IEventAggregator ea, SqliteManager sql )
         {
             this.sql = sql;
@@ -59,6 +65,8 @@ namespace VehicleControlSystem
         {
             QuartzUtils.Invoke( "HIS_ALARM", QuartzUtils.GetExpnHour( 5 ), this.CleanHisAlarm );
 
+            this.Alarms = new ExcelMapper( Path.Combine( System.Environment.CurrentDirectory ) + @"\Config\AlarmDefind.xlsx" ).Fetch<Alarm>( ).ToList();
+
             this.RouteManager = RouteManager.Instance;
             RouteManager.Instance.Init( this.sql );
 
@@ -109,7 +117,7 @@ namespace VehicleControlSystem
             refObject.ZmqManager = this.zmqManager;
 
             //Process
-            this.autoManager = new AutoManager( this.IO, this.eventAggregator, this.sql );
+            this.autoManager = new AutoManager( this.IO, this.eventAggregator, this.sql, this.Alarms );
             this.scheduler = new Scheduler( eventAggregator, this.autoManager, this.sql, this.bMUManager );
 
             this.vehicle = new Vehicle( refObject, this.IO, this.sql, this.eventAggregator, this.autoManager );
@@ -121,6 +129,18 @@ namespace VehicleControlSystem
             this.vehicle.Init();
             this.scheduler.Init();
             this.autoManager.Init( this.vehicle );
+
+            //Command cmd = new Command();
+            //cmd.TargetList = new List<string>();
+            //cmd.TargetList.Add( "1" );
+            //cmd.TargetList.Add( "2" );
+            //cmd.TargetList.Add( "3" );
+            //cmd.TargetList.Add( "4" );
+            //cmd.TargetList.Add( "5" );
+
+            //this.sql.CommandDAL.Insert( cmd );
+
+            //var cll = this.sql.CommandDAL.GetAll();
         }
 
 

二进制
Dev/OHVDriveLogger/OHVDriveLogger/.vs/OHVDriveLogger/v16/Server/sqlite3/storage.ide


+ 5 - 2
Dev/OHVDriveLogger/OHVDriveLogger/OHVDriveLogger/App.config

@@ -5,6 +5,9 @@
     </startup>
 
 	<appSettings>
-		<add key="VehicleID" value="V02"/>
-    </appSettings>
+		<add key="VehicleID" value="V01"/>
+		<add key="FTPUploadIP" value="192.168.127.123"/>
+		<add key="PLC_IP" value="192.168.0.20"/>
+		<add key="PLC_PORT" value="5000"/>
+	</appSettings>
 </configuration>

+ 7 - 4
Dev/OHVDriveLogger/OHVDriveLogger/OHVDriveLogger/FTPLogger.cs

@@ -12,11 +12,14 @@ namespace OHVDriveLogger
 {
     public class FTPLogger : SingletonBase<FTPLogger>
     {
+        public string UploadIP { get; set; } = string.Empty;
+        public string PLCAddress { get; set; }
+
         private FTPLogger() { }
 
         public void FTPUpload()
         {
-            using ( var ftp = new FtpClient( "192.168.127.123" ) )
+            using ( var ftp = new FtpClient( UploadIP ) )
             {
                 ftp.Connect();
                 ftp.UploadDirectory( @"C:\LOG\FTP\", @"\LOG\", FtpFolderSyncMode.Update );
@@ -31,7 +34,7 @@ namespace OHVDriveLogger
 
         public void FTPDriveLogUplaod()
         {
-            using ( var ftp = new FtpClient( "192.168.127.123" ) )
+            using ( var ftp = new FtpClient( UploadIP ) )
             {
                 ftp.Connect();
                 ftp.UploadDirectory( @"C:\LOG\OHV\DriveLogger\PhysicalCheckup\", @"\LOG\", FtpFolderSyncMode.Update );
@@ -43,7 +46,7 @@ namespace OHVDriveLogger
 
         public void FTPDownload()
         {
-            using ( var ftp = new FtpClient( "192.168.0.20", "KV", "1234" ) )
+            using ( var ftp = new FtpClient( PLCAddress, "KV", "1234" ) )
             {
                 ftp.Connect();
 
@@ -65,7 +68,7 @@ namespace OHVDriveLogger
         async Task DeleteDirectoryAsync()
         {
             var token = new CancellationToken();
-            using ( var conn = new FtpClient( "192.168.0.20", "KV", "1234" ) )
+            using ( var conn = new FtpClient( PLCAddress, "KV", "1234" ) )
             {
                 await conn.ConnectAsync( token );
 

+ 15 - 6
Dev/OHVDriveLogger/OHVDriveLogger/OHVDriveLogger/FormMain.cs

@@ -25,6 +25,9 @@ namespace OHVDriveLogger
         const string rearPreFix = @"C:\LOG\OHV\DriveLogger\PhysicalCheckup\Rear_Wheel";
 
         string vehicleID = string.Empty;
+        string UploadIP = string.Empty;
+        string PLCAddress = string.Empty;
+        int PLCPort = 0;
 
         public FormMain()
         {
@@ -34,6 +37,12 @@ namespace OHVDriveLogger
             this.FormClosing += FormMain_FormClosing;
 
             this.vehicleID = ConfigurationManager.AppSettings["VehicleID"];
+            this.UploadIP = ConfigurationManager.AppSettings["FTPUploadIP"];
+            this.PLCAddress = ConfigurationManager.AppSettings["PLC_IP"];
+            this.PLCPort = Convert.ToInt16( ConfigurationManager.AppSettings["PLC_PORT"] );
+
+            FTPLogger.Instance.UploadIP = this.UploadIP;
+            FTPLogger.Instance.PLCAddress = this.PLCAddress;
         }
 
         private void FormMain_FormClosing( object sender, FormClosingEventArgs e )
@@ -47,8 +56,8 @@ namespace OHVDriveLogger
         private void FormMain_Load( object sender, EventArgs e )
         {
             this.plc.Config.Id = "KV8000";
-            this.plc.Config.IpAddress = "192.168.0.20";
-            this.plc.Config.Port = 5000; //5000
+            this.plc.Config.IpAddress = this.PLCAddress;
+            this.plc.Config.Port = this.PLCPort; //5000
             this.plc.Config.MonitorInterval = 500;
 
             var grpB = new KncGroup { Device = KncDevice.MR, Name = "MR" };
@@ -121,8 +130,8 @@ namespace OHVDriveLogger
 
             long st = SwUtils.CurrentTimeMillis;
 
-            frontlogger.I( $"/ Speed / Torque / RPM / LoadFactor / Battery Current / Current Point / CurrentRailForm / CurrentMCR" );
-            rearlogger.I( $" / Speed / Torque / RPM / LoadFactor / Battery Current / Current Point / CurrentRailForm / CurrentMCR" );
+            frontlogger.I( $"/ Speed / Torque / RPM / LoadFactor / Battery Current / Battery Voltage / BatterySOC / Contain / Current Point / CurrentRailForm / CurrentMCR" );
+            rearlogger.I( $" / Speed / Torque / RPM / LoadFactor / Battery Current / Battery Voltage / BatterySOC / Contain / Current Point / CurrentRailForm / CurrentMCR" );
 
             while ( this.zmq.IsDriveMoving )
             {
@@ -139,8 +148,8 @@ namespace OHVDriveLogger
                 var rearSpeed = ( ( ( ( zmq.RearRPM / 60 ) * ( 2 * Math.PI ) ) * 0.06 ) / 10 );
                 var rearTorque = ( zmq.RearLoadFacter * 1.9 ) / 100;
 
-                frontlogger.I( $"/ {frontSpeed} / {frontTorque} / {zmq.FrontRPM} / {zmq.FrontLoadFacter} / {zmq.BatteryCurrent} / {zmq.CurrentPoint} / {zmq.CurrentRailForm} / {zmq.CurrentMCR}" );
-                rearlogger.I( $"/ {rearSpeed} / {rearTorque} / {zmq.RearRPM} / {zmq.RearLoadFacter} / {zmq.BatteryCurrent} / {zmq.CurrentPoint} / {zmq.CurrentRailForm} / {zmq.CurrentMCR}" );
+                frontlogger.I( $"/ {frontSpeed} / {frontTorque} / {zmq.FrontRPM} / {zmq.FrontLoadFacter} / {zmq.BatteryCurrent} / {zmq.BatteryVoltage} / {zmq.BatterySOC} / {zmq.IsContain} / {zmq.CurrentPoint} / {zmq.CurrentRailForm} / {zmq.CurrentMCR}" );
+                rearlogger.I( $"/ {rearSpeed} / {rearTorque} / {zmq.RearRPM} / {zmq.RearLoadFacter} / {zmq.BatteryCurrent} / {zmq.BatteryVoltage} / {zmq.BatterySOC} / {zmq.IsContain} / {zmq.CurrentPoint} / {zmq.CurrentRailForm} / {zmq.CurrentMCR}" );
 
                 if ( SwUtils.Gt( st, ConstUtils.ONE_MINUTE * 5 ) ) //5분동안 주행이 계속 되면 문제 발생으로 인식, 파일 정리 후 다음 이벤트 대기.
                 {

+ 1 - 1
Dev/OHVDriveLogger/OHVDriveLogger/OHVDriveLogger/OHVDriveLogger.csproj

@@ -43,7 +43,7 @@
     <Prefer32Bit>true</Prefer32Bit>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'RRmode|AnyCPU'">
-    <OutputPath>\\192.168.127.20\DriveLogger\</OutputPath>
+    <OutputPath>\\192.168.127.10\DriveLogger\</OutputPath>
     <DefineConstants>TRACE</DefineConstants>
     <Optimize>true</Optimize>
     <DebugType>pdbonly</DebugType>

+ 39 - 0
Dev/OHVDriveLogger/OHVDriveLogger/OHVDriveLogger/ZmqManager.cs

@@ -89,6 +89,33 @@ namespace OHVDriveLogger
             set { currentMCR = value; }
         }
 
+        private string isContain;
+
+        public string IsContain
+        {
+            get { return isContain; }
+            set { isContain = value; }
+        }
+
+        private string batteryVoltage;
+
+        public string BatteryVoltage
+        {
+            get { return batteryVoltage; }
+            set { batteryVoltage = value; }
+        }
+
+        private string batterySOC;
+
+        public string BatterySOC 
+        {
+            get { return batterySOC; }
+            set { batterySOC = value; }
+        }
+
+
+
+
         public ZmqManager()
         {
             NetMQ.NetMQConfig.Cleanup();
@@ -138,10 +165,22 @@ namespace OHVDriveLogger
                         this.CurrentMCR = v[0];
                         break;
 
+                    case "Contain":
+                        this.IsContain = v[0];
+                        break;
+
                     case "BatteryCurrent":
                         this.BatteryCurrent = Convert.ToDouble( v[0] );
                         break;
 
+                    case "BatteryVoltage":
+                        this.BatteryVoltage = v[0];
+                        break;
+
+                    case "BatterySOC":
+                        this.BatterySOC = v[0];
+                        break;
+
                     case "DriveStart":
                         if ( v[0].Equals( "True" ) )
                             this.IsDriveMoving = true;