Преглед на файлове

增加自动轮询接口模型

xuwei преди 2 години
родител
ревизия
8ef43b6d7e

+ 10 - 1
HG5000.3/PLC_S/Core/PLC_Server.cs

@@ -27,10 +27,19 @@ namespace PLC_S
 
             switch (PLC_S_S.PLCServiceType)
             {
-
                 //自动调用API接口模块 xuwei add 2023-07-24
                 case "AA":
                     ServerSocket = new ApiAuto();
+                    ServerSocket.EPTS_CODE = PLC_S_S.EPTS_CODE;
+                    ServerSocket.Interval = PLC_S_S.Interval;
+                    break;
+                //======================================================
+
+                //轮询自动调用API接口模块 xuwei add 2024-01-02
+                case "ETPS_EAA":
+                    ServerSocket = new EPTS_ApiAuto();
+                    ServerSocket.EPTS_CODE = PLC_S_S.EPTS_CODE;
+                    ServerSocket.Interval = PLC_S_S.Interval;
                     break;
                 //======================================================
 

+ 247 - 0
HG5000.3/PLC_S/EPTS/ApiAuto/EPTS_ApiAuto.cs

@@ -0,0 +1,247 @@
+using System;
+using System.ComponentModel;
+using System.Data;
+using System.IO;
+using System.Net;
+using System.Text;
+using System.Threading;
+
+using Curtain.DataAccess;
+using Curtain.Extension.ExSystemData;
+using Curtain.Framework.Json;
+using Curtain.Log;
+using Curtain.Net.Sockets.PLC;
+using Curtain.Net.Sockets.PLC.Model.Melsec;
+using Curtain.Net.Sockets.PLC.Model.Siemens;
+
+using PLC_S.Proxy;
+
+/// <summary>
+/// 获取设备参数的定时服务
+/// </summary>
+namespace PLC_S.EPTS
+{
+    /// <summary>
+    /// 打磨
+    /// </summary>
+    public class EPTS_ApiAuto : IWindowsServer, IShowFormLog
+    {
+        public const string M_NAME = "EAA";
+        private Logger logger = null;
+        private Logger logger_t = null;
+        private Logger logger_e = null;
+        private Logger logger_e_out = null;
+
+        private bool _Started = false;
+        //private System.Timers.Timer _timing = null;
+        private BackgroundWorker backgroundWorker = null;
+        private MES_S _mes_s = null;
+
+        public bool Started
+        {
+            get
+            {
+                //return _timing?.Enabled ?? false;
+                return _Started;
+            }
+        }
+
+        public IFormLogShow FormLogShow
+        {
+            get;
+            set;
+        }
+        public int Interval
+        {
+            get;
+            set;
+        }
+        public string EPTS_CODE
+        {
+            get;
+            set;
+        }
+
+        public EPTS_ApiAuto()
+        {
+        }
+
+        public void Start(int value)
+        {
+            try
+            {
+                string S_NAME = "EPTS_" + EPTS_CODE;
+
+                logger = Logger.CreateLogger(S_NAME + "-S");
+
+                logger_t = Logger.CreateLogger(S_NAME + "-T");
+                logger_e = Logger.CreateLogger(S_NAME + "-E");
+                logger_e_out = Logger.CreateLogger(S_NAME + "-EO");
+
+                logger.FileNameWithoutDate = true;
+                logger.FileExistDays = 30;
+                logger.LevelOneFile = true;
+                logger.FilePrefix = null;
+                logger.FileSuffix = logger.Name;
+
+                logger_t.FileExistDays = 30;
+                logger_t.LevelOneFile = true;
+                logger_t.SubFolderFormat = logger_t.Name;
+
+                logger_e.FileExistDays = 0;
+
+                logger_e_out.FileExistDays = 0;
+                logger_e_out.FilePrefix = null;
+                logger_e_out.FileSuffix = S_NAME;
+                logger_e_out.Directory = "..\\_PLC_Logs";
+
+                logger.OutputTrace($"{M_NAME}_Starting:[{EPTS_CODE}]");
+                FormLogShow?.ShowLog($"{M_NAME}_Starting:[{EPTS_CODE}]");
+
+                if (Interval < 1000)
+                {
+                    Interval = 1000;
+                }
+                //if (Interval > 60000)
+                //{
+                //    Interval = 60000;
+                //}
+
+                backgroundWorker = new BackgroundWorker();
+                backgroundWorker.WorkerSupportsCancellation = true;
+                backgroundWorker.DoWork += BackgroundWorker_DoWork;
+                backgroundWorker.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;
+
+                _Started = true;
+                backgroundWorker.RunWorkerAsync();
+
+                logger.OutputTrace($"{M_NAME}_Started:[{Interval}]");
+                FormLogShow?.ShowLog($"{M_NAME}_Started:[{Interval}]");
+            }
+            catch(Exception ex)
+            {
+                logger.OutputError(ex);
+            }
+        }
+
+        private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
+        {
+            logger.OutputTrace(JsonHelper.ToJson(e));
+        }
+
+        private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
+        {
+            try
+            {
+                _mes_s = MES_S.Get();
+                INI_EAA plc_ini = INI_EAA.Get(EPTS_CODE);
+
+                while (_Started && !e.Cancel)
+                {
+                    this.Do(plc_ini);
+                    Thread.Sleep(Interval);
+                }
+            }
+            catch (Exception ex)
+            {
+                logger_e_out.OutputError(ex);
+                logger_e.OutputError(ex);
+            }
+        }
+
+        private void Do(INI_EAA plc_ini)
+        {
+            try
+            {
+                logger_t.BeginTracking();
+                #region 自动调用API接口
+                string outputMessage = "";
+                if (!string.IsNullOrEmpty(plc_ini.API_URL))
+                {
+                    outputMessage = $"接口地址={plc_ini.API_URL}";
+                    logger_t.OutputTrace(outputMessage);
+                    outputMessage = $"执行结果={GetApi(plc_ini.API_URL)}";
+                    logger_t.OutputTrace(outputMessage);
+                }
+                else
+                {
+                    outputMessage = $"API_URL未设置,请检查确认!";
+                    logger_t.OutputTrace(outputMessage);
+                }
+                #endregion
+                logger_t.EndTracking();
+            }
+            catch (Exception ex)
+            {
+                logger_e_out.OutputError(ex);
+                logger_e.OutputError(ex);
+                logger_t.OutputError(ex);
+            }
+            finally
+            {
+                
+            }
+        }
+
+        public static string GetApi(string url)
+        {
+            //拼合URL参数
+            string webUrl = url;
+            //创建Web访问对象
+            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(webUrl);
+            //通过Web访问对象获取响应内容
+            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
+            //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
+            StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
+            //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
+            string returnXml = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
+            reader.Close();
+            myResponse.Close();
+            return returnXml;
+        }
+
+        public void Stop()
+        {
+            try
+            {
+                logger.OutputTrace($"{M_NAME}_Stoping:[{EPTS_CODE}]");
+                FormLogShow?.ShowLog($"{M_NAME}_Stoping:[{EPTS_CODE}]");
+
+                _Started = false;
+                backgroundWorker?.CancelAsync();
+                backgroundWorker?.Dispose();
+                backgroundWorker = null;
+
+                logger.OutputTrace($"{M_NAME}_Stoped:[{EPTS_CODE}]");
+                FormLogShow?.ShowLog($"{M_NAME}_Stoped:[{EPTS_CODE}]");
+            }
+            catch (Exception ex)
+            {
+                logger.OutputError(ex);
+            }
+            finally
+            {
+                _Started = false;
+            }
+        }
+
+        public void Dispose()
+        {
+            try
+            {
+                _Started = false;
+                backgroundWorker?.CancelAsync();
+                backgroundWorker?.Dispose();
+                backgroundWorker = null;
+            }
+            catch (Exception ex)
+            {
+                logger.OutputError(ex);
+            }
+            finally
+            {
+                _Started = false;
+            }
+        }
+    }
+}

+ 34 - 0
HG5000.3/PLC_S/EPTS/ApiAuto/INI_EAA.cs

@@ -0,0 +1,34 @@
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using Curtain.Extension.ExObjectConvert;
+using Curtain.Helpers;
+
+namespace PLC_S.EPTS
+{
+    /// <summary>
+    /// 打磨
+    /// </summary>
+    public class INI_EAA
+    {
+        public string INI_WS_CODE;
+        public int Interval;
+
+        public string API_URL;
+
+        public static INI_EAA Get(string flag)
+        {
+            INI_EAA ini_plc = new INI_EAA();
+            ini_plc.INI_WS_CODE = flag;
+
+            INIHelper ini = INIHelper.Create($@"EPTS_INI\EPTS_EAA.ini");
+            
+            ini_plc.API_URL = ini.Read(flag, "API_URL");
+
+            return ini_plc;
+        }
+    }
+}

+ 3 - 0
HG5000.3/PLC_S/EPTS_INI/EPTS_EAA.ini

@@ -0,0 +1,3 @@
+;API接口调用
+[EAA51]
+API_URL=http://172.18.32.32:9700/api/plc/autopacking/autoPacking6151.ashx

+ 3 - 0
HG5000.3/PLC_S/PLC_S.csproj

@@ -34,6 +34,8 @@
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
   </PropertyGroup>
   <ItemGroup>
+    <Compile Include="EPTS\ApiAuto\EPTS_ApiAuto.cs" />
+    <Compile Include="EPTS\ApiAuto\INI_EAA.cs" />
     <Compile Include="EPTS\DefectiveArea\EPTS_DefectiveArea_OUT.cs" />
     <Compile Include="EPTS\DefectiveArea\INI_DA_OUT.cs" />
     <Compile Include="EPTS\GLK_W\EPTS_GoodsLeak_Water.cs" />
@@ -120,6 +122,7 @@
     <Reference Include="System.ServiceModel" />
   </ItemGroup>
   <ItemGroup>
+    <None Include="EPTS_INI\EPTS_EAA.ini" />
     <None Include="EPTS_INI\EPTS_GLK_W.ini">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>

+ 13 - 13
HG5000.3/PLC_S/PLC_S_INI/PLC_S_S.ini

@@ -3,29 +3,29 @@
 LOG_LEN=5000
 
 [Oracle]
-Server=172.18.32.30
+Server=172.18.32.116
 Port=1521
-Database=hgmestest
+Database=dkmes
 UserName=hgiboss
-Password=SWrxDk8Q8eU=
+Password=etLHPkLTOLw=
 
 [iBOSS.MES]
-IP=127.0.0.1
-Port=1234
+IP=172.18.32.32
+Port=5678
 ServiceName=DKService
 AccountCode=dongke
 UserCode=P15
 Password=
 
 [PLCService]
-#GC 产品型号 HPG 高压注浆 PW 工序计件 KL 登窑 KI 入窑 KUL 卸窑
-PLCServiceType=EPTS_DA
+#EAA 自动轮询调用接口
+PLCServiceType=ETPS_EAA
 AutoStart=False
-Port=6001
-Interval=60000
-EPTS_CODE=EPTS_DA
-Description=提供产品型号的服务【】
-DisplayName=Dongke PLC [GC][6001]
-ServiceName=DK.PLC[GC][6001]
+Port=0
+Interval=8000
+EPTS_CODE=EAA51
+Description=3#1F@包装码垛@6151轮询
+DisplayName=DK.PLC[3#1F@63][6151]轮询
+ServiceName=DK.PLC[3#1F@63][6151]轮询
 S_Name=DK.PLC
 D_Name='DK.PLC '

+ 3 - 0
HG5000.3/PLC_WF/F_Main.cs

@@ -43,6 +43,9 @@ namespace PLC_WF
             //xuwei add 2023-07-24
             dataTable.Rows.Add("AA", "[AA]自动接口", "自动调用接口");
 
+            //xuwei add 2024-01-02
+            dataTable.Rows.Add("ETPS_EAA", "[EAA]自动轮询接口", "自动轮询调用接口");
+
             //xuwei add 2022-01-10
             dataTable.Rows.Add("GA", "[GA]自动", "自动识别模块");