Explorar o código

현장 업데이트

SWGroupSetup01 %!s(int64=4) %!d(string=hai) anos
pai
achega
896067c7a6
Modificáronse 29 ficheiros con 356 adicións e 230 borrados
  1. 2 2
      Dev/Connection/OHVProtocolServer/OHVProtocolClient/MainWindow.xaml.cs
  2. 1 0
      Dev/OHV/OHV.LanguageHalper/Languages/Chinese.xaml
  3. 1 0
      Dev/OHV/OHV.LanguageHalper/Languages/English.xaml
  4. 1 1
      Dev/OHV/OHV.LanguageHalper/LanguagesSelcter.cs
  5. 5 11
      Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoViewModel.cs
  6. 1 1
      Dev/OHV/OHV.Module.Interactivity/PopUp/SelectLanguageViewModel.cs
  7. 118 122
      Dev/OHV/OHV.SqliteDAL/DAL/AbstractDAL.cs
  8. 1 1
      Dev/OHV/OHV.SqliteDAL/OHVDbInitializer.cs
  9. 0 4
      Dev/OHV/OHV.SqliteDAL/SqliteManager.cs
  10. 1 1
      Dev/OHV/OHV.Vehicle/App.config
  11. 7 7
      Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs
  12. BIN=BIN
      Dev/OHV/OHV.Vehicle/Config/AlarmDefind.xlsx
  13. 6 4
      Dev/OHV/OHV.Vehicle/Config/log4net.xml
  14. 1 1
      Dev/OHV/OHV.Vehicle/OHV.Vehicle.csproj
  15. 4 4
      Dev/OHV/OHV.Vehicle/Properties/AssemblyInfo.cs
  16. 1 0
      Dev/OHV/VehicleControlSystem/ControlLayer/IO/EzIO.cs
  17. 0 2
      Dev/OHV/VehicleControlSystem/ControlLayer/MQ/ZmqManager.cs
  18. 2 1
      Dev/OHV/VehicleControlSystem/ControlLayer/Motion/GSIDrive.cs
  19. 1 1
      Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/Delegates.cs
  20. 59 20
      Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/Manager.cs
  21. 0 7
      Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/Peak/Peak.cs
  22. 61 34
      Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs
  23. 0 3
      Dev/OHV/VehicleControlSystem/Managers/AutoManager.cs
  24. 2 2
      Dev/OHV/VehicleControlSystem/Managers/HostManager.cs
  25. 66 0
      Dev/OHV/VehicleControlSystem/Managers/Scheduler.cs
  26. 10 0
      Dev/OHV/VehicleControlSystem/VCSystem.cs
  27. 4 0
      Dev/OHV/VehicleControlSystem/VehicleControlSystem.csproj
  28. 1 1
      Dev/OHVDriveLogger/OHVDriveLogger/OHVDriveLogger/App.config
  29. BIN=BIN
      Documents/천진SDI_OHT_Rail.pdf

+ 2 - 2
Dev/Connection/OHVProtocolServer/OHVProtocolClient/MainWindow.xaml.cs

@@ -187,7 +187,7 @@ namespace OHVProtocolClient
             meg.RevID = "V0001";
             meg.SendID = "S0";
             meg.Kind = (eKind)Enum.ToObject( typeof( eKind ), this.comboMessageKind.SelectedItem );
-            meg.Tag = this.txtTag.Text;
+            meg.Tag = this.txtTag.Text + "0000";
             meg.SubCode = this.txtSubCode.Text;
 
             this.manager.Send( meg );
@@ -200,7 +200,7 @@ namespace OHVProtocolClient
             meg.SendID = "S0";
             meg.Kind = (eKind)Enum.ToObject( typeof( eKind ), this.comboMessageKind.SelectedItem );
             meg.Tag = this.txtTag.Text;
-            meg.SubCode = this.txtSubCode.Text;
+            meg.SubCode = this.txtSubCode.Text + "0002";
             meg.ViaRouteList.Add( "0029" );
             meg.ViaRouteList.Add( "0030" );
 

+ 1 - 0
Dev/OHV/OHV.LanguageHalper/Languages/Chinese.xaml

@@ -17,6 +17,7 @@
 
     <!-->Notification</-->
     <system:String x:Key="AutoModeChangeWranOnRailState">车辆不是 Installed 状态 !</system:String>
+    <system:String x:Key="CurrentTagZeroWarn">当前标签为零, 无法更改自动模式</system:String>
 
     <!-->Main View</-->
     <system:String x:Key="MainView_Main">主板</system:String>

+ 1 - 0
Dev/OHV/OHV.LanguageHalper/Languages/English.xaml

@@ -18,6 +18,7 @@
 
     <!-->Notification</-->
     <system:String x:Key="AutoModeChangeWranOnRailState">On Rail State is not Install !</system:String>
+    <system:String x:Key="CurrentTagZeroWarn">Current Tag is Zero, Can not Change to AutoMode</system:String>
 
     <!-->Main View</-->
     <system:String x:Key="MainView_Main">Main</system:String>

+ 1 - 1
Dev/OHV/OHV.LanguageHalper/LanguagesSelcter.cs

@@ -15,7 +15,7 @@ namespace OHV.LanguageHalper
         Chinese,
     }
 
-    public static class LanguagesSelcter
+    public static class LanguagesSelecter
     {
         static English english = new English();
         static Korean korean = new Korean();

+ 5 - 11
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoViewModel.cs

@@ -268,7 +268,6 @@ namespace OHV.Module.Interactivity.PopUp
 
         SqliteManager sql;
         MessageController messageController;
-        VCSMessagePubSubEvent vcsMessagePublisher;
 
         public DriveServoViewModel(IEventAggregator _ea, SqliteManager _sql, MessageController _messageController, VCSystem system)
         {
@@ -351,7 +350,7 @@ namespace OHV.Module.Interactivity.PopUp
                 case "IN_F_STEERING_DETECT_RIGHT":
                 case "IN_R_STEERING_DETECT_LEFT":
                 case "IN_R_STEERING_DETECT_RIGHT":
-                    this.ChangeSteeringDirection(this.steerControl.GetSteerDirection());
+                    //this.ChangeSteeringDirection(this.steerControl.GetSteerDirection());
                     break;
 
                 default:
@@ -480,8 +479,8 @@ namespace OHV.Module.Interactivity.PopUp
                         case "SteeringState":
                             {
                                 //2021.08.12. Kang. 센서 상태를 이용해서 표시 방식으로 변경.
-                                //var dir = CastTo<eSteeringState>.From<object>(obj.Args);
-                                //this.ChangeSteeringDirection(dir);
+                                var dir = CastTo<eSteeringState>.From<object>(obj.Args);
+                                this.ChangeSteeringDirection(dir);
                             }
                             break;
                         case "VehicleStateProperty":
@@ -696,6 +695,7 @@ namespace OHV.Module.Interactivity.PopUp
                     break;
             }
         }
+
         private void ExecuteJogCommand(object obj)
         {
             if (this.JogSpeed <= 0)
@@ -724,11 +724,6 @@ namespace OHV.Module.Interactivity.PopUp
             this.PublishEvent(msg);
         }
 
-        void Publish(VCSMessageEventArgs msg)
-        {
-            this.vcsMessagePublisher.Publish(msg);
-        }
-
         private void ExecuteJogVelPopupCommand(object obj)
         {
             var numPad = new CalcuratorView();
@@ -759,8 +754,7 @@ namespace OHV.Module.Interactivity.PopUp
         {
             this.SelectDirection = obj.ToString();
         }
-
-
+        
         private void ExecutePositionSaveCommand()
         {
             this.messageController.ShowConfirmationPopupView("Save To Data ?", r =>

+ 1 - 1
Dev/OHV/OHV.Module.Interactivity/PopUp/SelectLanguageViewModel.cs

@@ -50,7 +50,7 @@ namespace OHV.Module.Interactivity.PopUp
                 default:
                     break;
             }
-            LanguageHalper.LanguagesSelcter.ChangLanguage(selectedLanguage);
+            LanguageHalper.LanguagesSelecter.ChangLanguage(selectedLanguage);
         }
 
         public void Init()

+ 118 - 122
Dev/OHV/OHV.SqliteDAL/DAL/AbstractDAL.cs

@@ -1,13 +1,11 @@
 using System;
 using System.Collections.Generic;
 using System.Data.Entity;
-using System.Data.Entity.Core.Objects;
 using System.Data.Entity.Infrastructure;
 using System.Data.Entity.Validation;
 using System.Linq;
 using System.Linq.Expressions;
-using System.Text;
-using System.Threading.Tasks;
+using System.Threading;
 using GSG.NET.Logging;
 
 namespace OHV.SqliteDAL.DAL
@@ -19,7 +17,7 @@ namespace OHV.SqliteDAL.DAL
 
         protected virtual void OnChangedProperty()
         {
-            ChangedProperty?.BeginInvoke( null, null );
+            ChangedProperty?.BeginInvoke(null, null);
         }
 
         public List<T> All
@@ -27,7 +25,7 @@ namespace OHV.SqliteDAL.DAL
             get
             {
                 List<T> ll = new List<T>();
-                using ( var db = new OHVDbContext( "OHVDb" ) )
+                using (var db = new OHVDbContext("OHVDb"))
                 {
                     ll = db.Set<T>().ToList();
                 }
@@ -39,7 +37,7 @@ namespace OHV.SqliteDAL.DAL
         {
             get
             {
-                using ( var db = new OHVDbContext( "OHVDb" ) )
+                using (var db = new OHVDbContext("OHVDb"))
                 {
                     return db.Set<T>().Count();
                 }
@@ -47,63 +45,63 @@ namespace OHV.SqliteDAL.DAL
 
         }
 
-        public T GetK( object key )
+        public T GetK(object key)
         {
-            using ( var db = new OHVDbContext( "OHVDb" ) )
+            using (var db = new OHVDbContext("OHVDb"))
             {
-                return db.Set<T>().Find( key );
+                return db.Set<T>().Find(key);
             }
         }
 
-        public List<T> ListN( Expression<Func<T, bool>> where )
+        public List<T> ListN(Expression<Func<T, bool>> where)
         {
-            using ( var db = new OHVDbContext( "OHVDb" ) )
+            using (var db = new OHVDbContext("OHVDb"))
             {
-                return db.Set<T>().Where( where ).ToList();
+                return db.Set<T>().Where(where).ToList();
             }
         }
 
-        public virtual bool HasK( object key )
+        public virtual bool HasK(object key)
         {
-            return GetK( key ) == null ? false : true;
+            return GetK(key) == null ? false : true;
         }
 
-        public virtual bool HasN( Expression<Func<T, bool>> where )
+        public virtual bool HasN(Expression<Func<T, bool>> where)
         {
             List<T> ll = new List<T>();
-            using ( var db = new OHVDbContext( "OHVDb" ) )
+            using (var db = new OHVDbContext("OHVDb"))
             {
-                ll = db.Set<T>().Where( where ).ToList();
+                ll = db.Set<T>().Where(where).ToList();
             }
             return ll.Count > 0;
         }
 
-        public void Add( T entity )
+        public void Add(T entity)
         {
-            using ( var db = new OHVDbContext( "OHVDb" ) )
+            using (var db = new OHVDbContext("OHVDb"))
             {
-                db.Set<T>().Add( entity );
+                db.Set<T>().Add(entity);
                 db.SaveChanges();
             }
             OnChangedProperty();
         }
 
-        public void Delete( T entity )
+        public void Delete(T entity)
         {
-            using ( var db = new OHVDbContext( "OHVDb" ) )
+            using (var db = new OHVDbContext("OHVDb"))
             {
-                db.Entry( entity ).State = EntityState.Deleted;
+                db.Entry(entity).State = EntityState.Deleted;
                 //db.Set<T>().Remove(entity);
                 db.SaveChanges();
             }
             OnChangedProperty();
         }
 
-        public virtual void Update( T entity )
+        public virtual void Update(T entity)
         {
-            using ( var db = new OHVDbContext( "OHVDb" ) )
+            using (var db = new OHVDbContext("OHVDb"))
             {
-                db.Entry( entity ).State = EntityState.Modified;
+                db.Entry(entity).State = EntityState.Modified;
                 db.SaveChanges();
             }
             OnChangedProperty();
@@ -111,9 +109,9 @@ namespace OHV.SqliteDAL.DAL
 
         public void Clean()
         {
-            using ( var db = new OHVDbContext( "OHVDb" ) )
+            using (var db = new OHVDbContext("OHVDb"))
             {
-                db.Set<T>().RemoveRange( db.Set<T>() );
+                db.Set<T>().RemoveRange(db.Set<T>());
                 db.SaveChanges();
             }
             OnChangedProperty();
@@ -126,12 +124,12 @@ namespace OHV.SqliteDAL.DAL
         event Action OnChangeTable;
         int Count { get; }
         IEnumerable<T> GetAll();
-        IEnumerable<T> Get( Expression<Func<T, bool>> filter = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, string includeProperties = "" );
-        T GetById( object id );
-        void Insert( T obj );
-        void Update( T obj );
-        void Delete( object id );
-        void Delete( Expression<Func<T, bool>> filter = null );
+        IEnumerable<T> Get(Expression<Func<T, bool>> filter = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, string includeProperties = "");
+        T GetById(object id);
+        void Insert(T obj);
+        void Update(T obj);
+        void Delete(object id);
+        void Delete(Expression<Func<T, bool>> filter = null);
         void Clean();
         void Save();
         void Dispose();
@@ -152,11 +150,11 @@ namespace OHV.SqliteDAL.DAL
 
         public GenericRepository()
         {
-            this._context = new OHVDbContext( "OHVDb" );
+            this._context = new OHVDbContext("OHVDb");
             this.table = this._context.Set<T>();
         }
 
-        public GenericRepository( OHVDbContext dbContext )
+        public GenericRepository(OHVDbContext dbContext)
         {
             this._context = dbContext;
             this.table = _context.Set<T>();
@@ -164,94 +162,93 @@ namespace OHV.SqliteDAL.DAL
 
         public IEnumerable<T> GetAll()
         {
-            lock ( lockObj )
+            lock (this.lockObj)
                 return table.ToList();
         }
 
-        public virtual IEnumerable<T> Get( Expression<Func<T, bool>> filter = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, string includeProperties = "" )
+        public virtual IEnumerable<T> Get(Expression<Func<T, bool>> filter = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, string includeProperties = "")
         {
             IQueryable<T> query = this.table;
 
-            lock ( lockObj )
+            lock (this.lockObj)
             {
-                if ( filter != null )
-                    query = query.Where( filter );
+                query = query.Where(filter);
 
-                if ( includeProperties != null )
+                if (includeProperties != null)
                 {
-                    foreach ( var includeProperty in includeProperties.Split( new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries ) )
-                        query = query.Include( includeProperty );
+                    foreach (var includeProperty in includeProperties.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
+                        query = query.Include(includeProperty);
                 }
 
-                if ( orderBy != null )
-                    return orderBy( query ).ToList();
+                if (orderBy != null)
+                    return orderBy(query).ToList();
                 else
                     return query.ToList();
             }
         }
 
-        public T GetById( object id )
+        public T GetById(object id)
         {
-            lock ( lockObj )
-                return table.Find( id );
+            lock (this.lockObj)
+                return table.Find(id);
         }
 
-        public void Insert( T obj )
+        public void Insert(T obj)
         {
-            lock ( lockObj )
+            lock (this.lockObj)
             {
-                table.Add( obj );
+                table.Add(obj);
                 this.Save();
             }
 
             this.OnChangeTable?.Invoke();
         }
 
-        public void Update( T obj )
+        public void Update(T obj)
         {
-            if ( obj == null )
+            if (obj == null)
             {
-                logger.E( $"[DataBase] - Update obj is Null {this.table.GetType().Name}" );
+                logger.E($"[DataBase] - Update obj is Null {this.table.GetType().Name}");
                 return;
             }
 
-            lock ( lockObj )
+            lock (this.lockObj)
             {
-                table.Attach( obj );
-                _context.Entry( obj ).State = EntityState.Modified;
+                table.Attach(obj);
+                _context.Entry(obj).State = EntityState.Modified;
                 this.Save();
             }
 
             this.OnChangeTable?.Invoke();
         }
 
-        public void Delete( object id )
+        public void Delete(object id)
         {
-            T existing = table.Find( id );
-            if ( existing == null )
-                return;
-
-            lock ( lockObj )
+            lock (this.lockObj)
             {
-                if ( _context.Entry( existing ).State == EntityState.Detached )
+                T existing = table.Find(id);
+                if (existing == null)
+                    return;
+
+                if (_context.Entry(existing).State == EntityState.Detached)
                 {
-                    table.Attach( existing );
+                    table.Attach(existing);
                 }
 
-                table.Remove( existing );
+                table.Remove(existing);
                 this.Save();
             }
             this.OnChangeTable?.Invoke();
         }
 
-        public void Delete( Expression<Func<T, bool>> filter )
+        public void Delete(Expression<Func<T, bool>> filter)
         {
-            lock ( lockObj )
+            lock (this.lockObj)
             {
-                var delList = this.table.Where( filter ).ToList();
-                if ( delList.Any() && delList != null )
+                var delList = this.table.Where(filter).ToList();
+                if (delList.Any() && delList != null)
                 {
-                    this.table.RemoveRange( delList );
+                    this.table.RemoveRange(delList);
                     Save();
                 }
             }
@@ -260,13 +257,13 @@ namespace OHV.SqliteDAL.DAL
 
         public void Clean()
         {
-            lock ( lockObj )
+            lock (this.lockObj)
             {
                 var delList = table.ToList();
 
-                if ( delList != null && delList.Any() )
+                if (delList != null && delList.Any())
                 {
-                    table.RemoveRange( delList );
+                    table.RemoveRange(delList);
                     this.Save();
                 }
             }
@@ -279,24 +276,23 @@ namespace OHV.SqliteDAL.DAL
             try
             {
                 _context.SaveChanges();
+                //_context.SaveChangesAsync();
+
             }
-            catch ( DbEntityValidationException dbEx )
+            catch (DbEntityValidationException dbEx)
             {
-                foreach ( var validationErrors in dbEx.EntityValidationErrors )
+                foreach (var validationErrors in dbEx.EntityValidationErrors)
                 {
-                    foreach ( var validationError in validationErrors.ValidationErrors )
+                    foreach (var validationError in validationErrors.ValidationErrors)
                     {
-                        logger.E( "Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage );
+                        logger.E("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
                     }
                 }
-
-                return;
             }
-            catch ( DbUpdateConcurrencyException ex )
+            catch (DbUpdateConcurrencyException ex)
             {
                 ex.Entries.Single().Reload();
-                logger.E( $"[DataBase] - DbUpdateConcurrencyException {this.table.GetType().Name}" );
-                return;
+                logger.E($"[DataBase] - DbUpdateConcurrencyException {this.table.GetType().Name}");
             }
         }
 
@@ -311,10 +307,10 @@ namespace OHV.SqliteDAL.DAL
     public interface IGenericRepositoryType1<T> where T : class
     {
         IQueryable<T> GetAll();
-        IQueryable<T> FindBy( Expression<Func<T, bool>> predicate );
-        void Add( T entity );
-        void Delete( T entity );
-        void Edit( T entity );
+        IQueryable<T> FindBy(Expression<Func<T, bool>> predicate);
+        void Add(T entity);
+        void Delete(T entity);
+        void Edit(T entity);
         void Save();
     }
 
@@ -333,25 +329,25 @@ namespace OHV.SqliteDAL.DAL
             return query;
         }
 
-        public IQueryable<T> FindBy( System.Linq.Expressions.Expression<Func<T, bool>> predicate )
+        public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
         {
-            IQueryable<T> query = _entities.Set<T>().Where( predicate );
+            IQueryable<T> query = _entities.Set<T>().Where(predicate);
             return query;
         }
 
-        public virtual void Add( T entity )
+        public virtual void Add(T entity)
         {
-            _entities.Set<T>().Add( entity );
+            _entities.Set<T>().Add(entity);
         }
 
-        public virtual void Delete( T entity )
+        public virtual void Delete(T entity)
         {
-            _entities.Set<T>().Remove( entity );
+            _entities.Set<T>().Remove(entity);
         }
 
-        public virtual void Edit( T entity )
+        public virtual void Edit(T entity)
         {
-            _entities.Entry( entity ).State = EntityState.Modified;
+            _entities.Entry(entity).State = EntityState.Modified;
         }
 
         public virtual void Save()
@@ -364,10 +360,10 @@ namespace OHV.SqliteDAL.DAL
     public interface IRepository<T> where T : class
     {
         IEnumerable<T> GetAll();
-        T GetById( object Id );
-        T Insert( T obj );
-        void Delete( object Id );
-        T Update( T obj );
+        T GetById(object Id);
+        T Insert(T obj);
+        void Delete(object Id);
+        T Update(T obj);
         void Save();
     }
 
@@ -377,44 +373,44 @@ namespace OHV.SqliteDAL.DAL
         private DbSet<T> dbSet;
         public Repository()
         {
-            context = new OHVDbContext( "OHVDb" );
+            context = new OHVDbContext("OHVDb");
             dbSet = context.Set<T>();
         }
         public IEnumerable<T> GetAll()
         {
             return dbSet.ToList();
         }
-        public T GetById( object id )
+        public T GetById(object id)
         {
-            return dbSet.Find( id );
+            return dbSet.Find(id);
         }
-        public T Insert( T obj )
+        public T Insert(T obj)
         {
-            dbSet.Add( obj );
+            dbSet.Add(obj);
             Save();
             return obj;
         }
 
-        public void Delete( object id )
+        public void Delete(object id)
         {
-            T entityToDelete = dbSet.Find( id );
-            Delete( entityToDelete );
+            T entityToDelete = dbSet.Find(id);
+            Delete(entityToDelete);
         }
 
-        public void Delete( T entityToDelete )
+        public void Delete(T entityToDelete)
         {
-            if ( context.Entry( entityToDelete ).State == EntityState.Detached )
+            if (context.Entry(entityToDelete).State == EntityState.Detached)
             {
-                dbSet.Attach( entityToDelete );
+                dbSet.Attach(entityToDelete);
             }
 
-            dbSet.Remove( entityToDelete );
+            dbSet.Remove(entityToDelete);
         }
 
-        public T Update( T obj )
+        public T Update(T obj)
         {
-            dbSet.Attach( obj );
-            context.Entry( obj ).State = EntityState.Modified;
+            dbSet.Attach(obj);
+            context.Entry(obj).State = EntityState.Modified;
             Save();
             return obj;
         }
@@ -425,23 +421,23 @@ namespace OHV.SqliteDAL.DAL
             {
                 context.SaveChanges();
             }
-            catch ( DbEntityValidationException dbEx )
+            catch (DbEntityValidationException dbEx)
             {
-                foreach ( var validationErrors in dbEx.EntityValidationErrors )
+                foreach (var validationErrors in dbEx.EntityValidationErrors)
                 {
-                    foreach ( var validationError in validationErrors.ValidationErrors )
+                    foreach (var validationError in validationErrors.ValidationErrors)
                     {
-                        System.Console.WriteLine( "Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage );
+                        System.Console.WriteLine("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
                     }
                 }
             }
         }
 
-        protected virtual void Dispose( bool disposing )
+        protected virtual void Dispose(bool disposing)
         {
-            if ( disposing )
+            if (disposing)
             {
-                if ( context != null )
+                if (context != null)
                 {
                     context.Dispose();
                     context = null;

+ 1 - 1
Dev/OHV/OHV.SqliteDAL/OHVDbInitializer.cs

@@ -82,7 +82,7 @@ namespace OHV.SqliteDAL
                 {
                     ID = ConstString.PIOTimeOut,
                     Name= ConstString.PIOTimeOut,
-                    Value = "10000",
+                    Value = "30",
                     Desc = "PIO Time Out",
                     EditTime = DateTime.Now,
                 },

+ 0 - 4
Dev/OHV/OHV.SqliteDAL/SqliteManager.cs

@@ -1,8 +1,4 @@
 using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using OHV.Common.Events;
 using OHV.Common.Interfaces;
 using OHV.Common.Model;

+ 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=C:\DB\OHVDb.sqlite;foreign keys=true" providerName="System.Data.SQLite" />
+    <add name="OHVDb" connectionString="data source=C:\DB\OHVDb.sqlite;foreign keys=true;Version=3;Pooing=True;Max PoolSize=100" providerName="System.Data.SQLite" />
   </connectionStrings>
   <startup>
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />

+ 7 - 7
Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs

@@ -414,7 +414,7 @@ namespace OHV.Vehicle.Concept
             else
                 msg.Arg = eVehicleOnRailState.Removed;
 
-            var question = string.Format(LanguageHalper.LanguagesSelcter.GetStringFromResourceDic(Question.VehicleOnRailStateChange) + $" {msg.Arg} ?");
+            var question = string.Format(LanguageHalper.LanguagesSelecter.GetStringFromResourceDic(Question.VehicleOnRailStateChange) + $" {msg.Arg} ?");
             this.messageController.ShowConfirmationPopupView(question, r =>
             {
                 if (r.Result == ButtonResult.OK)
@@ -434,7 +434,7 @@ namespace OHV.Vehicle.Concept
             else
                 msg.Arg = eMachineMode.LocalMode;
 
-            var question = string.Format(LanguageHalper.LanguagesSelcter.GetStringFromResourceDic(Question.VehicleModeChange) + $" {msg.Arg} ?");
+            var question = string.Format(LanguageHalper.LanguagesSelecter.GetStringFromResourceDic(Question.VehicleModeChange) + $" {msg.Arg} ?");
             this.messageController.ShowConfirmationPopupView( question, r =>
             {
                 if ( r.Result == ButtonResult.OK )
@@ -490,7 +490,7 @@ namespace OHV.Vehicle.Concept
 
         private void ExecuteStopCommand()
         {
-            this.messageController.ShowConfirmationPopupView( LanguageHalper.LanguagesSelcter.GetStringFromResourceDic(Question.VehicleManualMode), r =>
+            this.messageController.ShowConfirmationPopupView( LanguageHalper.LanguagesSelecter.GetStringFromResourceDic(Question.VehicleManualMode), r =>
              {
                  if ( r.Result == ButtonResult.OK )
                  {
@@ -514,11 +514,11 @@ namespace OHV.Vehicle.Concept
             //this.IsBusy = true;
             if (this.VehicleOnRailState != eVehicleOnRailState.Install)
             {
-                this.messageController.ShowNotificationView(LanguageHalper.LanguagesSelcter.GetStringFromResourceDic(Notification.AutoModeChangeWranOnRailState), false);
+                this.messageController.ShowNotificationView(LanguageHalper.LanguagesSelecter.GetStringFromResourceDic(Notification.AutoModeChangeWranOnRailState), false);
                 return;
             }
 
-            this.messageController.ShowConfirmationPopupView( LanguageHalper.LanguagesSelcter.GetStringFromResourceDic(Question.VehicleAutoMode), r =>
+            this.messageController.ShowConfirmationPopupView( LanguageHalper.LanguagesSelecter.GetStringFromResourceDic(Question.VehicleAutoMode), r =>
              {
                  if ( r.Result == ButtonResult.OK )
                  {
@@ -550,7 +550,7 @@ namespace OHV.Vehicle.Concept
 
         private void ExecuteSystemOffCommand()
         {
-            this.messageController.ShowConfirmationPopupView( LanguageHalper.LanguagesSelcter.GetStringFromResourceDic(Question.ProgramExit), r =>
+            this.messageController.ShowConfirmationPopupView( LanguageHalper.LanguagesSelecter.GetStringFromResourceDic(Question.ProgramExit), r =>
                {
                    if ( r.Result == ButtonResult.OK )
                        App.Current.Shutdown();
@@ -816,7 +816,7 @@ namespace OHV.Vehicle.Concept
             this.CurrentTag = this.VCSystem.ZmqManager.CurrentPointNo.ToString();
             this.IsOnRoute = this.VCSystem.ZmqManager.IsCanStanbyLocation;
 
-            LanguageHalper.LanguagesSelcter.ChangLanguage(LanguageHalper.eLanguageType.English);
+            LanguageHalper.LanguagesSelecter.ChangLanguage(LanguageHalper.eLanguageType.English);
         }
 
         public void Dispose()

BIN=BIN
Dev/OHV/OHV.Vehicle/Config/AlarmDefind.xlsx


+ 6 - 4
Dev/OHV/OHV.Vehicle/Config/log4net.xml

@@ -16,6 +16,7 @@
 
 	<logger name="PIO" additivity="false">
 		<appender-ref ref="PIOAppender" />
+		<appender-ref ref="remotingAppender" />
 	</logger>
 
 	<logger name="RemoteLogger" additivity="false">
@@ -34,8 +35,8 @@
 		<appender-ref ref="SteerFileAppender" />
 	</logger>
 
-<!--
-	ALL    DEBUG   INFO    WARN    ERROR   FATAL   OFF
+	<!--
+     ALL    DEBUG   INFO    WARN    ERROR   FATAL   OFF
 	•All
 	•DEBUG  •DEBUG
 	•INFO   •INFO   •INFO
@@ -159,17 +160,18 @@
 
 	<appender name="remotingAppender" type="log4net.Appender.RemotingAppender">
 		<!-- The remoting URL to the remoting server object -->
-		<sink value="tcp://192.168.127.123:8085/Log4netRemotingServerService"/>
+		<sink value="tcp://109.19.54.163:8085/Log4netRemotingServerService"/>
 		<!-- Send all events, do not discard events when the buffer is full -->
 		<lossy value="false"/>
 		<!-- The number of events to buffer before sending -->
-		<bufferSize value="10"/>
+		<bufferSize value="1"/>
 		<!-- Do not store event data that is slow to generate -->
 		<onlyFixPartialEventData value="true"/>
 		<!-- Specify an evaluator to send the events immediately under certain conditions, e.g. when an error event ocurrs -->
 		<!--<evaluator type="log4net.Core.LevelEvaluator">
 			<threshold value="WARN"/>
 		</evaluator>-->
+		<threshold value="WARN"/>
 	</appender>
 
 	<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"   >

+ 1 - 1
Dev/OHV/OHV.Vehicle/OHV.Vehicle.csproj

@@ -28,7 +28,7 @@
     <UpdateRequired>false</UpdateRequired>
     <MapFileExtensions>true</MapFileExtensions>
     <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <ApplicationVersion>2.0.0.%2a</ApplicationVersion>
     <UseApplicationTrust>false</UseApplicationTrust>
     <BootstrapperEnabled>true</BootstrapperEnabled>
   </PropertyGroup>

+ 4 - 4
Dev/OHV/OHV.Vehicle/Properties/AssemblyInfo.cs

@@ -8,9 +8,9 @@ using System.Windows;
 // 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
 // 이러한 특성 값을 변경하세요.
 [assembly: AssemblyTitle( "OHV.Vehicle" )]
-[assembly: AssemblyDescription( "" )]
+[assembly: AssemblyDescription("TSDI NS2 Line OHT")]
 [assembly: AssemblyConfiguration( "" )]
-[assembly: AssemblyCompany( "" )]
+[assembly: AssemblyCompany("GSI")]
 [assembly: AssemblyProduct( "OHV.Vehicle" )]
 [assembly: AssemblyCopyright( "Copyright ©  2020" )]
 [assembly: AssemblyTrademark( "" )]
@@ -51,5 +51,5 @@ using System.Windows;
 // 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
 // 기본값으로 할 수 있습니다.
 //[assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion( "1.0.0.0" )]
-[assembly: AssemblyFileVersion( "1.0.0.0" )]
+[assembly: AssemblyVersion("2.0.0.0")]
+[assembly: AssemblyFileVersion("2.0.0.0")]

+ 1 - 0
Dev/OHV/VehicleControlSystem/ControlLayer/IO/EzIO.cs

@@ -398,6 +398,7 @@ namespace VehicleControlSystem.ControlLayer.IO
             }
             catch ( Exception ex )
             {
+                logger.E(ex);
             }
             finally
             {

+ 0 - 2
Dev/OHV/VehicleControlSystem/ControlLayer/MQ/ZmqManager.cs

@@ -48,8 +48,6 @@ namespace VehicleControlSystem.ControlLayer.MQ
         IO.EzIO iO = null;
         string endServer = "tcp://127.0.0.1:5567";
 
-        VCSystem vcsSystem;
-        HostManager hostManager;
         IEventAggregator eventAggregator;
 
         public event Action<BitArray> OnDriveAlarmBitArrayChg;

+ 2 - 1
Dev/OHV/VehicleControlSystem/ControlLayer/Motion/GSIDrive.cs

@@ -314,6 +314,7 @@ namespace VehicleControlSystem.ControlLayer.Drive
             //if ( result != ConstInt.EXECUTE_SUCCESS )
             //    return result;
 
+            //10sec 동안 출발 하는지 확인.
             int waitTime = 10000;
             long st = SwUtils.CurrentTimeMillis;
             while ( true )
@@ -322,7 +323,7 @@ namespace VehicleControlSystem.ControlLayer.Drive
 
                 if ( SwUtils.Gt( st, waitTime ) )
                 {
-                    logger.D( "MoveToPoint Time Out" );
+                    logger.D( "Move Start Time Out In 10sec!" );
                     return 37;
                 }
 

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

@@ -29,7 +29,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
         public event DlgCharge OnCharge;
         public event DlgDisCharge OnDisCharge;
         public event DlgTemperature OnTemperature;
-        public event DlgSOH OnSOH;
+        //public event DlgSOH OnSOH;
         public event DlgCapacity OnCapacity;
         public event DlgEnergy OnEnergy;
     }

+ 59 - 20
Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/Manager.cs

@@ -1,17 +1,17 @@
 using System;
 using System.Collections.Generic;
 using System.IO.Ports;
-using System.Linq;
-using System.Text;
 using System.Threading;
-using System.Threading.Tasks;
 using GSG.NET.Concurrent;
+using GSG.NET.Logging;
 using GSG.NET.Utils;
 
 namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
 {
     public partial class Manager
     {
+        static Logger logger = Logger.GetLogger();
+
         #region Total Packet Data
         readonly byte StartSentence1 = 0xAF;
         readonly byte StartSentence2 = 0xFA;
@@ -73,8 +73,8 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
                     ByteParse(recv);
                 }
             }
-            catch (Exception) 
-            { 
+            catch (Exception)
+            {
             }
         }
 
@@ -118,24 +118,64 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
 
         private void QueWorker()
         {
-            for(; ; )
+            for (; ; )
             {
                 try
                 {
                     var qo = this.QQ.Dequeue();
-                    if(qo is QoConnect) { DelegateUtils.Invoke(OnConnect, this.battery.serial.PortName); }
-                    if (qo is QoVoltage) { DelegateUtils.Invoke(OnVoltage, _config.Voltage); }
-                    else if (qo is QoCurrent) { DelegateUtils.Invoke(OnCurrent, _config.Current); }
-                    else if (qo is QoSOC) { DelegateUtils.Invoke(OnSOC, _config.SOC); }
-                    else if (qo is QoBattery) { DelegateUtils.Invoke(OnBattery, _config.BatteryStatus); }
-                    else if (qo is QoCharge) { DelegateUtils.Invoke(OnCharge, _config.ChargeTime); }
-                    else if (qo is QoDisCharge) { DelegateUtils.Invoke(OnDisCharge, _config.DisChargeTime); }
-                    else if (qo is QoTemperature) { DelegateUtils.Invoke(OnTemperature, _config.Temperature); }
-                    else if (qo is QoCapacity) { DelegateUtils.Invoke(OnCapacity, _config.Capacity); }
-                    else if (qo is QoEnergy) { DelegateUtils.Invoke(OnEnergy, _config.Energy); }
-                    else { /* null */ }
+
+                    switch (qo)
+                    {
+                        case QoConnect _:
+                            DelegateUtils.Invoke(OnConnect, this.battery.serial.PortName);
+                            break;
+                        case QoVoltage _:
+                            DelegateUtils.Invoke(OnVoltage, _config.Voltage);
+                            break;
+                        case QoCurrent _:
+                            DelegateUtils.Invoke(OnCurrent, _config.Current);
+                            break;
+                        case QoSOC _:
+                            DelegateUtils.Invoke(OnSOC, _config.SOC);
+                            break;
+                        case QoBattery _:
+                            DelegateUtils.Invoke(OnBattery, _config.BatteryStatus);
+                            break;
+                        case QoCharge _:
+                            DelegateUtils.Invoke(OnCharge, _config.ChargeTime);
+                            break;
+                        case QoDisCharge _:
+                            DelegateUtils.Invoke(OnDisCharge, _config.DisChargeTime);
+                            break;
+                        case QoTemperature _:
+                            DelegateUtils.Invoke(OnTemperature, _config.Temperature);
+                            break;
+                        case QoCapacity _:
+                            DelegateUtils.Invoke(OnCapacity, _config.Capacity);
+                            break;
+                        case QoEnergy _:
+                            DelegateUtils.Invoke(OnEnergy, _config.Energy);
+                            break;
+                        default:
+                            break;
+
+                    }
+                    //    if (qo is QoConnect) { DelegateUtils.Invoke(OnConnect, this.battery.serial.PortName); }
+                    //    if (qo is QoVoltage) { DelegateUtils.Invoke(OnVoltage, _config.Voltage); }
+                    //    else if (qo is QoCurrent) { DelegateUtils.Invoke(OnCurrent, _config.Current); }
+                    //    else if (qo is QoSOC) { DelegateUtils.Invoke(OnSOC, _config.SOC); }
+                    //    else if (qo is QoBattery) { DelegateUtils.Invoke(OnBattery, _config.BatteryStatus); }
+                    //    else if (qo is QoCharge) { DelegateUtils.Invoke(OnCharge, _config.ChargeTime); }
+                    //    else if (qo is QoDisCharge) { DelegateUtils.Invoke(OnDisCharge, _config.DisChargeTime); }
+                    //    else if (qo is QoTemperature) { DelegateUtils.Invoke(OnTemperature, _config.Temperature); }
+                    //    else if (qo is QoCapacity) { DelegateUtils.Invoke(OnCapacity, _config.Capacity); }
+                    //    else if (qo is QoEnergy) { DelegateUtils.Invoke(OnEnergy, _config.Energy); }
+                    //    else { /* null */ }
+                }
+                catch (Exception ex)
+                {
+                    logger.E(ex);
                 }
-                catch (Exception ex) { }
             }
         }
 
@@ -152,7 +192,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
                     //this.battery.serial.Write();
                 }
             }
-            catch (Exception ) { }
+            catch (Exception) { }
         }
 
         private bool CheckSum(byte[] _data)
@@ -181,7 +221,6 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
             var batteryState = BitConverter.GetBytes(_data);
         }
 
-
         /*
          * 미처리 작업 내용
          * Enque 시 값이 같으면 return 어떻게할? 

+ 0 - 7
Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/Peak/Peak.cs

@@ -1,18 +1,13 @@
 using GSG.NET.Concurrent;
 using GSG.NET.Extensions;
 using GSG.NET.Logging;
-using GSG.NET.TCP;
 using GSG.NET.Utils;
 using Peak.Can.Basic;
 using System;
 using System.Collections;
-using System.Collections.Generic;
 using System.IO;
 using System.Linq;
-using System.Text;
 using System.Threading;
-using System.Threading.Tasks;
-using VehicleControlSystem.ControlLayer.IO;
 using VehicleControlSystem.ControlLayer.Serial.DataModel;
 
 
@@ -395,8 +390,6 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
 
         bool GetStatus()
         {
-            bool result = false;
-
             TPCANMsg msg;
             msg.DATA = new byte[8];
             TPCANTimestamp canTimeStamp;

+ 61 - 34
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs

@@ -66,6 +66,7 @@ namespace VehicleControlSystem.ControlLayer
 
         static Logger logger = Logger.GetLogger();
         static Logger loggerPIO = Logger.GetLogger("PIO");
+        static Logger remoteLogger = Logger.GetLogger("RemoteLogger");
 
         #region Properties
         /// <summary>
@@ -268,11 +269,7 @@ namespace VehicleControlSystem.ControlLayer
                 {
                     if (value)
                     {
-                        this.OnChargingStart?.Invoke();
-                        LockUtils.Wait(1000);
                         this.OnCharging?.Invoke();
-
-                        //QuartzUtils.Invoke("BatterLogger", QuartzUtils.GetExpnMinute(1), () => { batteryLogger.I($"SOC - {this.BatteryStateOfCharge} / Current - {this.BatteryCurrent} / Voltage - {this.BatteryVoltage} / Capacity - {this.BatteryCapacity} / Energy - {this.BatteryEnergy}"); });
                     }
                     else
                     {
@@ -1014,6 +1011,7 @@ namespace VehicleControlSystem.ControlLayer
                     switch (this.refObjects.AutoManager.OperationModeProperty)
                     {
                         case eOperatationMode.ManualMode:
+                            //DBStressTest();
                             break;
                         case eOperatationMode.AutoMode:
                             {
@@ -1056,6 +1054,29 @@ namespace VehicleControlSystem.ControlLayer
             logger.D("Vehicle - Process Disposed");
         }
 
+        private void DBStressTest()
+        {
+            var subCmd = this.refObjects.Sqlite.SubCmdDAL.GetAll().FirstOrDefault();
+            if (subCmd == null) return;
+
+            switch (subCmd.State)
+            {
+                case SubCmd.eSubCmdState.Processing:
+                    subCmd.State = SubCmd.eSubCmdState.Complete;
+                    break;
+                case SubCmd.eSubCmdState.Block:
+                    break;
+                case SubCmd.eSubCmdState.Complete:
+                    break;
+                default:
+                    break;
+            }
+            refObjects.Sqlite.SubCmdDAL.Update(subCmd);
+
+            if (subCmd.State == SubCmd.eSubCmdState.Complete)
+                refObjects.Sqlite.SubCmdDAL.Delete(subCmd.ID);
+        }
+
         void DoWork()
         {
             //2020.08.18.Kang. 상위 연결이 안되어 있으면 SubCmd 실행을 안하고 대기함.
@@ -1455,7 +1476,11 @@ namespace VehicleControlSystem.ControlLayer
             int result = 0;
             result = this.StartBatteryCharge();
             if (result != ConstInt.EXECUTE_SUCCESS)
+            {
                 this.OccurVehicleAlarm(result);
+                if ( !IsChargeCylinderForword() )
+                    this.OnChargingFull?.Invoke();
+            }
 
             this.refObjects.Sqlite.SubCmdDAL.Clean();
 
@@ -1585,6 +1610,9 @@ namespace VehicleControlSystem.ControlLayer
             PIOClear();
             this.PIOSensorOn();
 
+            //충전 시작 보고.
+            this.OnChargingStart?.Invoke();
+
             var pioTimeout = Convert.ToInt32(this.refObjects.Sqlite.ConfigDal.GetById(ConstString.PIOTimeOut).Value);
 
             loggerPIO.I($"Start Battery Charge PIO");
@@ -1815,7 +1843,7 @@ namespace VehicleControlSystem.ControlLayer
             Thread.Sleep( 1000 );
             this.OnLoadComplete?.Invoke();
 #else
-            loggerPIO.I($"Start Load PIO - [{targetName}]");
+            loggerPIO.I($"Load Action / Start Load PIO - [{targetName}]");
 
             PIOClear();
             this.PIOSensorOn();
@@ -1838,7 +1866,7 @@ namespace VehicleControlSystem.ControlLayer
 
             if (!this.refObjects.IO.WaitChangeInputIO(true, 40 * ConstUtils.ONE_SECOND, "IN_LIFTER_POSITION_DETECT"))
             {
-                loggerPIO.E("[Port] - Lift Position Check Error");
+                loggerPIO.E($"Load Action / [Port {targetName}] - Lift Position Check Error / Timeout[40sec]");
                 TimerUtils.Once(1000, this.OnFailReport, eFailCode.LoadPIOInterlockTimeout);
                 //this.OnFailReport?.Invoke( eFailCode.LoadPIOInterlockTimeout );
                 return 0; //14
@@ -1861,17 +1889,17 @@ namespace VehicleControlSystem.ControlLayer
             this.OnPIOStart?.Invoke(true);
 
             this.refObjects.IO.WriteOutputIO("OUT_PIO_RECEIVABLE", true);
-            loggerPIO.I("[Vehicle] - 4 Receivable");
+            loggerPIO.I("Load Action / [Vehicle] - 4 Receivable");
 
-            if (!this.refObjects.IO.WaitChangeInputIO(true, 20 * ConstUtils.ONE_SECOND, "IN_PIO_SENDABLE"))
+            if (!this.refObjects.IO.WaitChangeInputIO(true, pioTimeout * ConstUtils.ONE_SECOND, "IN_PIO_SENDABLE"))
             {
                 PIOClear();
-                loggerPIO.E("[Port] - 4 Ready Time Out");
+                loggerPIO.E($"Load Action / [Port {targetName}] - 4 Ready Time Out / Timeout[{pioTimeout}]");
                 TimerUtils.Once(1000, this.OnFailReport, eFailCode.LoadPIOInterlockTimeout);
                 //this.OnFailReport?.Invoke( eFailCode.LoadPIOInterlockTimeout );
                 return 0;
             }
-            loggerPIO.I("[Port] - 4 Ready On");
+            loggerPIO.I("Load Action / [Port] - 4 Ready On");
 
             //this.conveyor.SetConveyorSpeed( true );
             result = this.refObjects.Conveyor.OnOffConveyor(true, true);
@@ -1879,21 +1907,20 @@ namespace VehicleControlSystem.ControlLayer
                 return result;
 
             this.refObjects.IO.WriteOutputIO("OUT_PIO_RECEIVE_RUN", true, 1000); //1Sec 이후 On
-            loggerPIO.I("[Vehicle] - Conveyor Run");
+            loggerPIO.I("Load Action / [Vehicle] - Conveyor Run");
             this.OnConveyorStart?.Invoke(true);
 
-            if (!this.refObjects.IO.WaitChangeInputIO(true, pioTimeout, "IN_PIO_SEND_RUN"))
+            if (!this.refObjects.IO.WaitChangeInputIO(true, 10 * ConstUtils.ONE_SECOND, "IN_PIO_SEND_RUN"))
             {
                 this.refObjects.Conveyor.OnOffConveyor(false, true);
                 PIOClear();
-                loggerPIO.E("[Port] - 5 Sending Run Time Out");
+                loggerPIO.E($"Load Action / [Port {targetName}] - 5 Sending Run Time Out");
                 TimerUtils.Once(1000, this.OnFailReport, eFailCode.LoadPIOInterlockTimeout);
                 //this.OnFailReport?.Invoke( eFailCode.LoadPIOInterlockTimeout );
                 return 0;
             }
-            loggerPIO.I("[Port] - 5 Sending Run On");
+            loggerPIO.I("Load Action / [Port] - 5 Sending Run On");
 
-            bool isStartDetected = false;
             var sTime = SwUtils.CurrentTimeMillis;
             while (true)
             {
@@ -1904,7 +1931,7 @@ namespace VehicleControlSystem.ControlLayer
                     this.refObjects.IO.WriteOutputIO("OUT_PIO_INTERLOCK", true);
 
                     this.refObjects.Conveyor.OnOffConveyor(false, true);
-                    loggerPIO.E("[Vehicle] Conveyor Wait Time Out");
+                    loggerPIO.E("Load Action / [Vehicle] Conveyor Wait Time Out / Timeout[30sec]");
                     //TimerUtils.Once( 1000, this.OnFailReport, eFailCode.LoadPIOInterlockTimeout );
 
                     return 10; //Conveyor Moving Timeout
@@ -1921,7 +1948,7 @@ namespace VehicleControlSystem.ControlLayer
                 if (this.refObjects.Conveyor.IsPIOInterLockOn())
                 {
                     this.refObjects.Conveyor.OnOffConveyor(false); //Stop
-                    loggerPIO.E("[Port] PIO InterLock On ");
+                    loggerPIO.E($"Load Action / [Port {targetName}] PIO InterLock On ");
                     return 19; //
                 }
             }
@@ -1932,21 +1959,21 @@ namespace VehicleControlSystem.ControlLayer
             this.refObjects.Conveyor.OnOffConveyor(false); //Stop
             PIOClear();
             this.OnConveyorStop?.Invoke(true);
-            loggerPIO.I("[Vehicle] Conveyor Stop");
+            loggerPIO.I("Load Action / [Vehicle] Conveyor Stop");
 
             this.refObjects.IO.WriteOutputIO("OUT_PIO_RECIVE_COMPLITE", true);
-            loggerPIO.I("[Vehicle] Receive Complete On");
+            loggerPIO.I("Load Action / [Vehicle] Receive Complete On");
 
-            if (!this.refObjects.IO.WaitChangeInputIO(true, pioTimeout, "IN_PIO_SEND_COMPLITE"))
+            if (!this.refObjects.IO.WaitChangeInputIO(true, 10 * ConstUtils.ONE_SECOND, "IN_PIO_SEND_COMPLITE"))
             {
                 this.refObjects.IO.WriteOutputIO("OUT_PIO_RECIVE_COMPLITE", false);
-                loggerPIO.E("[Port]  IN_PIO_SEND_COMPLITE On Time Out");
+                loggerPIO.E($"Load Action / [Port {targetName}]  IN_PIO_SEND_COMPLITE On Time Out / Timeout[10sec]");
             }
             loggerPIO.I("[Port] Send Complete On");
 
             this.refObjects.IO.WriteOutputIO("OUT_PIO_RECIVE_COMPLITE", false, 1000);
 
-            loggerPIO.I($"End Load PIO - [{targetName}]");
+            loggerPIO.I($"Load Action / End Load PIO - [{targetName}]");
 
             result = this.refObjects.Clamp.Lock_Sync();
             if (result != 0)
@@ -1987,7 +2014,7 @@ namespace VehicleControlSystem.ControlLayer
             Thread.Sleep( 1000 );
             this.OnUnloadComplete?.Invoke();
 #else
-            loggerPIO.I($"Start Unload PIO -[{targetName}]");
+            loggerPIO.I($"Unload Action / Start Unload PIO -[{targetName}]");
             PIOClear();
             this.PIOSensorOn();
 
@@ -2013,7 +2040,7 @@ namespace VehicleControlSystem.ControlLayer
 
             if (!this.refObjects.IO.WaitChangeInputIO(true, 40 * ConstUtils.ONE_SECOND, "IN_LIFTER_POSITION_DETECT"))
             {
-                loggerPIO.E("[Port] - Lift Position Check Error");
+                loggerPIO.E($"Unload Action / [Port {targetName}] - Lift Position Check Error");
                 TimerUtils.Once(1000, this.OnFailReport, eFailCode.UnlaodPIOInterlockTimeout);
                 //this.OnFailReport?.Invoke( eFailCode.UnlaodPIOInterlockTimeout );
                 return 0;
@@ -2029,9 +2056,9 @@ namespace VehicleControlSystem.ControlLayer
             PIOClear();
             this.OnPIOStart?.Invoke(false);
 
-            if (!this.refObjects.IO.WaitChangeInputIO(true, 20 * ConstUtils.ONE_SECOND, "IN_PIO_READY"))
+            if (!this.refObjects.IO.WaitChangeInputIO(true, pioTimeout * ConstUtils.ONE_SECOND, "IN_PIO_READY"))
             {
-                loggerPIO.E("[Port] - 1 Ready not On");
+                loggerPIO.E($"Unload Action / [Port {targetName}] - 1 Ready not On");
                 TimerUtils.Once(1000, this.OnFailReport, eFailCode.UnlaodPIOInterlockTimeout);
                 //this.OnFailReport?.Invoke( eFailCode.UnlaodPIOInterlockTimeout );
                 return 0;
@@ -2043,19 +2070,19 @@ namespace VehicleControlSystem.ControlLayer
             if (!this.refObjects.IO.WaitChangeInputIO(true, 10 * ConstUtils.ONE_SECOND, "IN_PIO_RECEIVE_RUN"))
             {
                 PIOClear();
-                loggerPIO.E("[Port] - 2 Receive CV Run Timeout");
+                loggerPIO.E($"Unload Action / [Port {targetName}] - 2 Receive CV Run Timeout");
                 TimerUtils.Once(1000, this.OnFailReport, eFailCode.UnlaodPIOInterlockTimeout);
                 //this.OnFailReport?.Invoke( eFailCode.UnlaodPIOInterlockTimeout );
                 return 0;
             }
-            loggerPIO.I("[Port] - 2 Receive CV Run On");
+            loggerPIO.I("Unload Action / [Port] - 2 Receive CV Run On");
 
             result = this.refObjects.Clamp.Unlock_Sync();
             if (result != 0)
                 return result;
 
             this.refObjects.IO.WriteOutputIO("OUT_PIO_SENDING_RUN", true);
-            loggerPIO.I("[Vehicle] - 2 Send Run On");
+            loggerPIO.I("Unload Action / [Vehicle] - 2 Send Run On");
 
             //this.conveyor.SetConveyorSpeed( true );
             this.refObjects.Conveyor.OnOffConveyor(true);
@@ -2071,7 +2098,7 @@ namespace VehicleControlSystem.ControlLayer
                     this.refObjects.IO.WriteOutputIO("OUT_PIO_INTERLOCK", true);
 
                     this.refObjects.Conveyor.OnOffConveyor(false, true);
-                    loggerPIO.E("[Port] Conveyor Wait Time Out");
+                    loggerPIO.E($"Unload Action / [Port {targetName}] Conveyor Wait Time Out");
                     //TimerUtils.Once( 1000, this.OnFailReport, eFailCode.UnlaodPIOInterlockTimeout );
 
                     return 12; // 2020.07.18 Kang. 센서에 걸리지 않아도 중간에 걸려 있을 가능성 때문에 알람 처리.
@@ -2098,7 +2125,7 @@ namespace VehicleControlSystem.ControlLayer
                 {
                     if (this.refObjects.IO.IsOn("IN_PIO_RECEIVE_COMPLITE"))
                     {
-                        loggerPIO.I("[Port] - 3 Receive Complete On");
+                        loggerPIO.I("Unload Action / [Port] - 3 Receive Complete On");
                         break;
                     }
                 }
@@ -2106,7 +2133,7 @@ namespace VehicleControlSystem.ControlLayer
                 if (this.refObjects.Conveyor.IsPIOInterLockOn())
                 {
                     this.refObjects.Conveyor.OnOffConveyor(false); //Stop
-                    loggerPIO.E("[Port] PIO InterLock On ");
+                    loggerPIO.E($"Unload Action / [Port {targetName}] PIO InterLock On ");
                     return 19; //
                 }
             }
@@ -2121,9 +2148,9 @@ namespace VehicleControlSystem.ControlLayer
             this.refObjects.IO.WriteOutputIO("OUT_PIO_SEND_COMPLITE", true);
             Thread.Sleep(1000);
             this.refObjects.IO.WriteOutputIO("OUT_PIO_SEND_COMPLITE", false);
-            loggerPIO.I("[Vehicle] - 3 Send Complete OnOff");
+            loggerPIO.I("Unload Action / [Vehicle] - 3 Send Complete OnOff");
 #endif
-            loggerPIO.I($"End Unload PIO - [{targetName}]");
+            loggerPIO.I($"Unload Action / End Unload PIO - [{targetName}]");
 
             //2020.08.18.Kang. Conveyor 작동후 OCS 연결이 끊어지면 알람 처리
             //if (!this.refObjects.HostManager.IsConnected)

+ 0 - 3
Dev/OHV/VehicleControlSystem/Managers/AutoManager.cs

@@ -12,8 +12,6 @@ using VehicleControlSystem.ControlLayer;
 using GSG.NET.Utils;
 using System.Collections.Generic;
 using System.Linq;
-using Newtonsoft.Json.Bson;
-using System.Security.Cryptography.X509Certificates;
 
 namespace VehicleControlSystem.Managers
 {
@@ -63,7 +61,6 @@ namespace VehicleControlSystem.Managers
         }
 
         private bool isBlockedMoving = false;
-
         public bool IsBlockedMoving             //210812 Kkm
         {
             get { return this.isBlockedMoving; }

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

@@ -530,6 +530,7 @@ namespace VehicleControlSystem.Managers
 
                         this.scheduler.AddCommand(cmd);
                         loggerHost.I($"[Command] - Add HostOverWrite : Target {cmd.TargetID} / Type {cmd.Type}");
+                        LockUtils.Wait(500);
                         this.scheduler.RemoveCommand(hasCommand);
                     }
                     else
@@ -552,7 +553,6 @@ namespace VehicleControlSystem.Managers
 
                 }
                 this.Reply(msg);
-
             }
         }
 
@@ -781,7 +781,7 @@ namespace VehicleControlSystem.Managers
             var msg = new OCSMessage();
 
             msg.Kind = eKind.W;
-            msg.Tag = "0000"; //Fix
+            msg.Tag = this.vehicle.CurrentTag.ToString("0000");
 
             if (mode == eMachineMode.HostMode)
                 msg.SubCode = "001";

+ 66 - 0
Dev/OHV/VehicleControlSystem/Managers/Scheduler.cs

@@ -141,6 +141,7 @@ namespace VehicleControlSystem.Managers
                     switch (state)
                     {
                         case OHV.Common.Shareds.eOperatationMode.ManualMode:
+                            //DBStressTest();
                             break;
                         case OHV.Common.Shareds.eOperatationMode.AutoMode:
                             {
@@ -181,6 +182,71 @@ namespace VehicleControlSystem.Managers
             logger.D("[Scheduler] - Command Thread Dispose");
         }
 
+        void DBStressTest()
+        {
+            var cmd = sql.CommandDAL.GetAll().FirstOrDefault();
+
+            if (cmd == null)
+            {
+                var createCMD = new Command();
+                createCMD.ByWho = eCommandByWho.LocalSystem;
+                createCMD.TargetID = "123555";
+                sql.CommandDAL.Insert(createCMD);
+            }
+            else
+            {
+                if (cmd.IsSecondCommanded)
+                {
+                    switch (cmd.State)
+                    {
+                        case eCommandState.Queued:
+                            cmd.State = eCommandState.Processing;
+                            break;
+
+                        case eCommandState.Processing:
+                            cmd.State = eCommandState.Complete;
+                            break;
+
+                        case eCommandState.Complete:
+                            break;
+
+                        case eCommandState.Paused:
+                            break;
+
+                        default:
+                            break;
+                    }
+                }
+                else
+                {
+                    cmd.IsSecondCommanded = true;
+                    switch (cmd.State)
+                    {
+                        case eCommandState.Queued:
+                            cmd.State = eCommandState.Processing;
+                            CreateSubCommand(cmd, eSubCommandType.Load);
+                            break;
+
+                        case eCommandState.Processing:
+                            break;
+
+                        case eCommandState.Complete:
+                            break;
+
+                        case eCommandState.Paused:
+                            break;
+
+                        default:
+                            break;
+                    }
+                }
+                sql.CommandDAL.Update(cmd);
+
+                if (cmd.State == eCommandState.Complete)
+                    sql.CommandDAL.Delete(cmd.CommandID);
+
+            }
+        }
 
         int copyTarget = 0;
         //bool isSTK = false;

+ 10 - 0
Dev/OHV/VehicleControlSystem/VCSystem.cs

@@ -13,6 +13,7 @@ using GSG.NET.Utils;
 using OHV.Common.Events;
 using OHV.Common.Model;
 using OHV.Common.Shareds;
+using OHV.LanguageHalper;
 using OHV.SqliteDAL;
 using Prism.Events;
 using Prism.Ioc;
@@ -749,6 +750,15 @@ namespace VehicleControlSystem
                     return;
                 }
 
+                LockUtils.Wait(ConstUtils.ONE_SECOND);
+                if (ZmqManager.CurrentPointNo <= 0)
+                {
+                    string errorText = LanguagesSelecter.GetStringFromResourceDic("CurrentTagZeroWarn");
+                    reply = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspVehicleModeChange, Result = FluentResults.Results.Fail(new Error(errorText)), MessageKey = MessageKey.ManualMode };
+                    GUIMessageEventPublish(reply);
+                    return;
+                }
+
                 if (!ZmqManager.SetOperationState(eOperatationMode.AutoMode))
                 {
                     var al = this.Alarms.Where(x => x.AlarmId == 38).FirstOrDefault();

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

@@ -220,6 +220,10 @@
       <Project>{0d1f7fbc-bfb0-4ee4-852d-e2a8d62c5708}</Project>
       <Name>OHV.Common</Name>
     </ProjectReference>
+    <ProjectReference Include="..\OHV.LanguageHalper\OHV.LanguageHelper.csproj">
+      <Project>{712D75B5-89DD-4064-BC4B-2F9D9F157604}</Project>
+      <Name>OHV.LanguageHelper</Name>
+    </ProjectReference>
     <ProjectReference Include="..\OHV.SqliteDAL\OHV.SqliteDAL.csproj">
       <Project>{122d81c8-9ab9-4ced-80d2-9c4f2f9deb4c}</Project>
       <Name>OHV.SqliteDAL</Name>

+ 1 - 1
Dev/OHVDriveLogger/OHVDriveLogger/OHVDriveLogger/App.config

@@ -5,7 +5,7 @@
     </startup>
 
 	<appSettings>
-		<add key="VehicleID" value="V06"/>
+		<add key="VehicleID" value="V02"/>
 		<add key="FTPUploadIP" value="109.19.54.164"/>
 		<add key="PLC_IP" value="192.168.0.20"/>
 		<add key="PLC_PORT" value="5000"/>

BIN=BIN
Documents/천진SDI_OHT_Rail.pdf