Просмотр исходного кода

Redis DB Add, OCS Connecter M Command 수정.

DESKTOP-Kang 6 лет назад
Родитель
Сommit
f5d330a03c

+ 22 - 12
Dev/Connection/OHVProtocolServer/OHVConnector/Manager.cs

@@ -62,7 +62,6 @@ namespace OHVConnector
 
         #endregion
 
-
         #region Constactor
         public Manager()
         {
@@ -353,13 +352,29 @@ namespace OHVConnector
             ocsMeg.RevID = revID;
             ocsMeg.SendID = sendID;
             ocsMeg.Kind = h.ReadAscii( 1 ).ToEnum<eKind>( eKind.Unknown );
-            ocsMeg.Tag = h.ReadAscii( 4 );
-            ocsMeg.SubCode = h.ReadAscii( 3 );
 
-            //CheckSum 을 해야 하나??
-            ocsMeg.CheckSum = h.ReadByte();
+            if ( ocsMeg.Kind == eKind.M ) //M Command 가변으로 들어 온다.
+            {
+                ocsMeg.Tag = h.ReadAscii( 4 );
+                ocsMeg.SubCode = h.ReadAscii( 3 );
+                var viaCount = h.ReadBeInt(); //4byte
+                for(int i = 0; i < viaCount; i++ )
+                {
+                    ocsMeg.ViaRouteList.Add( h.ReadAscii( 4 ) );
+                }
+                ocsMeg.CheckSum = h.ReadByte();
+                h.ReadUntil( ETX );
+            }
+            else
+            {
+
+                ocsMeg.Tag = h.ReadAscii( 4 );
+                ocsMeg.SubCode = h.ReadAscii( 3 );
 
-            h.ReadUntil( ETX );
+                //CheckSum 을 해야 하나??
+                ocsMeg.CheckSum = h.ReadByte();
+                h.ReadUntil( ETX );
+            }
 
             //Todo: 응답으로 온건지 그냥 보낸건지 분류가 필요. = CheckSum 을 저장 했다가 이용하자.
 
@@ -398,12 +413,6 @@ namespace OHVConnector
                 return;
             }
 
-            if ( recd.Kind == eKind.C )
-            {
-                this.qQ.Enqueue( new QoRecd { Arg0 = recd } );
-                return;
-            }
-
             //Send 한 Message 의 Reply 로 판단.
             if ( this.quzT3.HasId( recd.CheckSum ) )
             {
@@ -497,6 +506,7 @@ namespace OHVConnector
             if ( msg.Kind == eKind.C ) // Control Message 는 페어로 응답이 오지 않는다.
             {
                 qqW.Enqueue( msg );
+                return;
             }
 
             if ( this.quzT3.HasId( msg.GetCheckSum() ) )

+ 161 - 0
Dev/Connection/OHVProtocolServer/OHVProtocolServer/MainWindow.xaml.cs

@@ -3,6 +3,7 @@ using System.Threading;
 using System.Windows;
 using System.Windows.Media;
 using GSG.NET.Logging;
+using GSG.NET.Quartz;
 using OHVConnector;
 
 namespace OHVProtocolServer
@@ -22,6 +23,8 @@ namespace OHVProtocolServer
 
         private void Window_Loaded(object sender, RoutedEventArgs e)
         {
+            QuartzUtils.Init( 10 );
+
             double b = 1;
             var s = b.ToString("00.00").Replace(".", "");
 
@@ -58,8 +61,146 @@ namespace OHVProtocolServer
         private void Manager_OnRecd(OCSMessage msg)
         {
             logger.I(msg.LogFormat());
+
+            switch ( msg.Kind )
+            {
+                case OHVConnector.eKind.Unknown:
+                    break;
+                case OHVConnector.eKind.E://Error 보고 요청.
+                    break;
+                case OHVConnector.eKind.S://마지막으로 읽은 TagNo
+                    break;
+                case OHVConnector.eKind.B://battery Report
+                    break;
+                case OHVConnector.eKind.T://위치 응답
+                    break;
+                case OHVConnector.eKind.C://제어 요청
+                    break;
+                case OHVConnector.eKind.P://수동명령보고
+                    break;
+                case OHVConnector.eKind.I:
+                    break;
+                case OHVConnector.eKind.O:
+                    break;
+                case OHVConnector.eKind.A://Alive 
+                    break;
+                case OHVConnector.eKind.L:
+                    break;
+                case OHVConnector.eKind.U:
+                    break;
+                case OHVConnector.eKind.F:
+                    break;
+                case OHVConnector.eKind.M:
+                    ReceiveMCommand( msg );
+                    break;
+                case OHVConnector.eKind.R:
+                    ReceiveRCommand( msg );
+                    break;
+                case OHVConnector.eKind.H:
+                    break;
+                case OHVConnector.eKind.Z:
+                    break;
+                default:
+                    break;
+            }
+
+        }
+
+        void Reply( OCSMessage recieve )
+        {
+            var reply = new OCSMessage();
+            reply.Kind = recieve.Kind;
+            reply.Tag = recieve.Tag;
+            reply.SubCode = recieve.SubCode;
+            this.manager.Reply( reply );
         }
 
+
+        private void ReceiveRCommand( OCSMessage msg )
+        {
+            this.Reply( msg );
+
+            if ( msg.SubCode.Equals( "100" ) )
+            {
+                int tag = Convert.ToInt32( this.txtTag.Text );
+                Send_Scmd( tag );
+            }
+            if ( msg.SubCode.Equals( "010" ) )
+            {
+                Send_Bcmd( 12.34 );
+            }
+        }
+
+        public void Send_Scmd( int point )
+        {
+            var msg = new OCSMessage();
+            msg.Kind = eKind.S;
+            msg.Tag = point.ToString( "0000" );
+            msg.SubCode = this.txtSubCode.Text;
+
+            this.manager.Send( msg );
+        }
+
+
+        private void ReceiveMCommand( OCSMessage msg )
+        {
+            this.Reply( msg );
+
+            //var info = sql.VehicleInfoDAL.GetInfo();
+            //if ( info.MachineMode == eMachineMode.LocalMode )
+            //{
+            //    logger.E( $"[OCS] Cmd - Current Mode Local Mode " );
+            //    return;
+            //}
+
+            //var hasCommand = this.sql.CommandDAL.GetCmd();
+            //if ( hasCommand != null )
+            //{
+            //    //Todo: 충전 중에는 어떻게 하지???
+            //    if ( !hasCommand.IsSecondCommanded )
+            //        sql.CommandDAL.Delete( hasCommand );
+            //    else
+            //    {
+            //        logger.E( $"[OCS] Cmd - {msg.Kind} Message Tag [{msg.Tag}] - Already Load/Unload " );
+            //        return;
+            //    }
+
+            //}
+
+            //var cmd = new Command();
+
+            //switch ( msg.SubCode )
+            //{
+            //    case "000": //Move
+            //        cmd.Type = eCommandType.Move;
+            //        break;
+            //    case "001": //Move and Load
+            //        cmd.Type = eCommandType.MoveNLoad;
+            //        break;
+            //    case "002": //Move and Unload
+            //        cmd.Type = eCommandType.MoveNUnload;
+            //        break;
+            //    case "003": //Move and Charge
+            //        cmd.Type = eCommandType.Charging;
+            //        break;
+            //    default:
+            //        return;
+            //}
+
+            ////Todo: 등록 되어 있는 경로 가 있는 지 확인 필요.
+            //var route = this.sql.RouteDal.GetRouteFromOCSMatchID( msg.Tag );
+            //if ( route == null )
+            //{
+            //    logger.E( $"[OCS] Message Tag [{msg.Tag}] - not found route" );
+            //    return;
+            //}
+
+            //cmd.TargetID = route.Name;
+
+            //this.sql.CommandDAL.Add( cmd );
+        }
+
+
         private void Manager_OnLog(string id, string log)
         {
             logger.I(log);
@@ -73,11 +214,31 @@ namespace OHVProtocolServer
         private void Con_OnHsmsDiscontd(string id, Exception e)
         {
             this.btnConnect.Background = Brushes.Gray;
+
+            QuartzUtils.StopSchedule( "BatteryReport" );
         }
 
         private void Con_OnHsmsContd(string id)
         {
             this.btnConnect.Background = Brushes.Green;
+
+            QuartzUtils.Invoke( "BatteryReport", QuartzUtils.GetExpnMinute( 1 ), BatteryState_Report );
+        }
+
+        void BatteryState_Report()
+        {
+            Send_Bcmd( 55.12 );
+        }
+
+        public void Send_Bcmd( double volt )
+        {
+            var msg = new OCSMessage();
+            msg.Kind = eKind.B;
+            var bData = volt;
+            msg.Tag = bData.ToString( "00.00" ).Replace( ".", "" );
+            msg.SubCode = this.txtSubCode.Text;
+
+            this.manager.Send( msg );
         }
 
         private void btnConnect_Click(object sender, RoutedEventArgs e)

BIN
Dev/OHV/Assambly/OHVConnector.dll


BIN
Dev/OHV/Assambly/OHVConnector.pdb


+ 40 - 0
Dev/OHV/VehicleControlSystem/ControlLayer/DB/Redis.cs

@@ -0,0 +1,40 @@
+using GSG.NET.ObjectBase;
+using StackExchange.Redis;
+using StackExchange.Redis.Extensions.Core;
+using StackExchange.Redis.Extensions.Newtonsoft;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace VehicleControlSystem.ControlLayer.DB
+{
+    public class Redis : SingletonBase<Redis>, IDisposable
+    {
+        StackExchangeRedisCacheClient cacheClient = null;
+        ConnectionMultiplexer redisMaster = null;
+        IDatabase database = null;
+
+        private Redis()
+        {
+        }
+
+        public void Dispose()
+        {
+            this.cacheClient.Dispose();
+        }
+
+        public void Init()
+        {
+            var serializer = new NewtonsoftSerializer();
+            redisMaster = ConnectionMultiplexer.Connect( "127.0.0.1:6379" + ",allowAdmin=true,password=..." );
+            cacheClient = new StackExchangeRedisCacheClient( redisMaster, serializer );
+            database = cacheClient.Database;
+        }
+
+        public bool SetValue(string key, string val) => database.StringSet( key, val );
+        public string GetValue( string key ) => database.StringGet( key );
+
+    }
+}

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

@@ -70,6 +70,9 @@
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\Assambly\ExcelMapper\GSG.NET.Excel.dll</HintPath>
     </Reference>
+    <Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
+    </Reference>
     <Reference Include="NPOI">
       <HintPath>..\Assambly\ExcelMapper\NPOI.dll</HintPath>
     </Reference>
@@ -83,9 +86,19 @@
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\Assambly\Quartz.dll</HintPath>
     </Reference>
+    <Reference Include="StackExchange.Redis.Extensions.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=d7d863643bcd13ef, processorArchitecture=MSIL">
+      <HintPath>..\packages\StackExchange.Redis.Extensions.Core.3.5.0\lib\net45\StackExchange.Redis.Extensions.Core.dll</HintPath>
+    </Reference>
+    <Reference Include="StackExchange.Redis.Extensions.Newtonsoft, Version=3.5.0.0, Culture=neutral, PublicKeyToken=d7d863643bcd13ef, processorArchitecture=MSIL">
+      <HintPath>..\packages\StackExchange.Redis.Extensions.Newtonsoft.3.5.0\lib\net45\StackExchange.Redis.Extensions.Newtonsoft.dll</HintPath>
+    </Reference>
+    <Reference Include="StackExchange.Redis.StrongName, Version=1.2.6.0, Culture=neutral, PublicKeyToken=c219ff1ca8c2ce46, processorArchitecture=MSIL">
+      <HintPath>..\packages\StackExchange.Redis.StrongName.1.2.6\lib\net45\StackExchange.Redis.StrongName.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Configuration" />
     <Reference Include="System.Core" />
+    <Reference Include="System.IO.Compression" />
     <Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
       <HintPath>..\packages\System.ValueTuple.4.5.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath>
     </Reference>
@@ -115,6 +128,7 @@
     <Compile Include="ControlLayer\Clamp.cs" />
     <Compile Include="ControlLayer\ControlObjectBase.cs" />
     <Compile Include="ControlLayer\Conveyor.cs" />
+    <Compile Include="ControlLayer\DB\Redis.cs" />
     <Compile Include="ControlLayer\IO\BitBlock.cs" />
     <Compile Include="ControlLayer\IO\Delegates.cs" />
     <Compile Include="ControlLayer\IO\EzBoard.cs" />

+ 4 - 0
Dev/OHV/VehicleControlSystem/packages.config

@@ -2,7 +2,11 @@
 <packages>
   <package id="CommonServiceLocator" version="2.0.4" targetFramework="net45" />
   <package id="FluentFTP" version="32.2.2" targetFramework="net45" />
+  <package id="Newtonsoft.Json" version="11.0.2" targetFramework="net45" />
   <package id="Prism.Core" version="7.2.0.1422" targetFramework="net45" />
   <package id="Prism.Wpf" version="7.2.0.1422" targetFramework="net45" />
+  <package id="StackExchange.Redis.Extensions.Core" version="3.5.0" targetFramework="net45" />
+  <package id="StackExchange.Redis.Extensions.Newtonsoft" version="3.5.0" targetFramework="net45" />
+  <package id="StackExchange.Redis.StrongName" version="1.2.6" targetFramework="net45" />
   <package id="System.ValueTuple" version="4.5.0" targetFramework="net45" />
 </packages>