Răsfoiți Sursa

代码处理

oyq28 1 lună în urmă
părinte
comite
53b2c58ed3

+ 11 - 0
IMCS_CCS/Controllers/CcsController.cs

@@ -341,5 +341,16 @@ namespace IMCS.CCS.Controllers
         {
             return await _httpRequestService.GetTools(data);
         }
+
+        /// <summary>
+        /// 产线警报列表: POST: api/GetLineWarn
+        /// </summary> 
+        /// <returns></returns>
+        [Route("api/GetLineWarn")]
+        [HttpPost]
+        public async Task<ActionResult<List<ProductionStatus>>> GetLineWarn(RequestData<object> data)
+        {
+            return await _httpRequestService.GetLineWarn(data);
+        }
     }
 }

+ 11 - 0
IMCS_CCS/IMCS.CCS.xml

@@ -373,6 +373,12 @@
             </summary> 
             <returns></returns>
         </member>
+        <member name="M:IMCS.CCS.Controllers.CcsController.GetLineWarn(IMCS.CCS.Models.RequestData{System.Object})">
+            <summary>
+            产线警报列表: POST: api/GetLineWarn
+            </summary> 
+            <returns></returns>
+        </member>
         <member name="M:IMCS.CCS.Controllers.DeviceController.GetDevice(System.Int32)">
             <summary>
             获取设备详情:GET: api/Device/5
@@ -2028,6 +2034,11 @@
             节点复位回调状态更新
             </summary> 
         </member>
+        <member name="M:IMCS.CCS.Services.IHttpRequestService.GetLineWarn(IMCS.CCS.Models.RequestData{System.Object})">
+            <summary>
+            获取产线警报信息
+            </summary> 
+        </member>
         <member name="M:IMCS.CCS.Services.HttpRequestService.GetTagValue(IMCS.CCS.Models.RequestTagValueData)">
             <summary>
             获取状态当前值

+ 6 - 5
IMCS_CCS/Program.cs

@@ -29,12 +29,13 @@ namespace IMCS.CCS
             }
             catch (Exception exception)
             {
-                if (!(exception is MessageBox))
-                {
-                    //NLog: catch setup errors
+                //if (!(exception is MessageBox))
+                //{
+                //NLog: catch setup errors
+                    Console.WriteLine($"应用程序异常: {exception.Message}");
                     logger.Error(exception, exception.Message);
                     logger.Error(exception, "由于异常而停止程序!");
-                }
+                //}
             }
             finally
             {
@@ -51,7 +52,7 @@ namespace IMCS.CCS
                     webBuilder.ConfigureKestrel(options =>
                     {
                         //监听端口 5001 用于 Web Service
-                        options.ListenAnyIP(8089, configure => configure.Protocols = HttpProtocols.Http1);
+                        options.ListenAnyIP(8089, configure => configure.Protocols = HttpProtocols.Http1AndHttp2);
                         //监听端口 5001 用于 Web Service
                         //options.ListenAnyIP(5201, configure => configure.Protocols = HttpProtocols.Http2);
 

+ 5 - 2
IMCS_CCS/Repository/CcsTagValueRepository.cs

@@ -38,8 +38,11 @@ namespace IMCS.CCS.Repository
             if (!string.IsNullOrEmpty(vo.ComponentNumber))
             {
                 tags = tags.Where(x => x.ComponentNumber.Equals(vo.ComponentNumber));
-            } 
-             
+            }
+            if (!string.IsNullOrEmpty(vo.Description))
+            {
+                tags = tags.Where(x => x.Description.Equals(vo.Description));
+            }
             return tags.ToList();
 
         } 

+ 5 - 0
IMCS_CCS/Service/IHttpRequestService .cs

@@ -165,5 +165,10 @@ namespace IMCS.CCS.Services
         /// 节点复位回调状态更新
         /// </summary> 
         Task<ResponseCommonData> UpdateReCallState(RequestCallBackData vo);
+
+        /// <summary>
+        /// 获取产线警报信息
+        /// </summary> 
+        Task<List<ProductionStatus>> GetLineWarn(RequestData<Object> req);
     }
 }

+ 14 - 4
IMCS_CCS/Service/Impl/ApiRequestService.cs

@@ -1,7 +1,9 @@
-using Flurl.Http; 
+using Flurl.Http;
 using IMCS.CCS.Entitys;
 using Microsoft.Extensions.Logging;
 using System;
+using System.Net;
+using System.Net.Http;
 using System.Threading.Tasks;
 
 namespace IMCS.CCS.Service.Impl
@@ -13,9 +15,13 @@ namespace IMCS.CCS.Service.Impl
     {
         private readonly ILogger<IApiRequestService> _logger;
 
-        public ApiRequestService(ILogger<IApiRequestService> logger)
+        private readonly IHttpClientFactory _httpClientFactory;        
+
+
+        public ApiRequestService(ILogger<IApiRequestService> logger, IHttpClientFactory httpClientFactory)
         {
             _logger = logger;
+            _httpClientFactory = httpClientFactory;
         }
 
         /// <summary>
@@ -27,6 +33,7 @@ namespace IMCS.CCS.Service.Impl
         /// <returns></returns>
         public async Task<(bool IsSuccess, string Message)> RequestAsync(RequsetModeEnum requsetMode, string apiUrl, object obj, string headerKeyValue = null)
         {
+            
             try
             {
                 var headerKey = "IMCS_CCS.Job.Request";
@@ -37,8 +44,11 @@ namespace IMCS.CCS.Service.Impl
                     headerKey = headerKeyValue.Split('=')[0];
                     headerValue = headerKeyValue.Split('=')[1];
                 }
-
-                IFlurlRequest flurlRequest = apiUrl.WithHeader(headerKey, headerValue).WithTimeout(30) ; 
+                               
+                var flurlClient = new FlurlClient(_httpClientFactory.CreateClient());
+                //IHttpClientFactory;
+                IFlurlRequest flurlRequest = flurlClient.Request(apiUrl).WithHeader(headerKey, headerValue).WithTimeout(60);
+                //IFlurlRequest flurlRequest = apiUrl.WithHeader(headerKey, headerValue).WithTimeout(60) ; 
                 if (flurlRequest == null)
                 {
                     return (false, "flurlRequest 空指针!");

+ 100 - 1
IMCS_CCS/Service/Impl/HttpRequestService.cs

@@ -39,6 +39,8 @@ namespace IMCS.CCS.Services
 
         private readonly ITaskJobService _taskJobService;
 
+        private readonly IDictionaryService _dictionaryService;
+
         private int SLEEP_TIME = 1000;
 
         string LocalPath = "D:\\PROG";
@@ -67,7 +69,7 @@ namespace IMCS.CCS.Services
         public HttpRequestService(IDeviceService deviceService, ITaskCallbackService taskCallbackService,
                                   ICcsActionService ccsActionService, ICcsTagValueService ccsTagValueService,
                                   IEquipmentMonitorService equipmentMonitorService, ICcsActionAddressService ccsActionAddressService,
-                                  IApiRequestService apiRequestService, ITaskJobService taskJobService,
+                                  IApiRequestService apiRequestService, ITaskJobService taskJobService, IDictionaryService dictionaryService,
                                   IConfiguration configuration)
         {
             _deviceService = deviceService;
@@ -78,6 +80,7 @@ namespace IMCS.CCS.Services
             _ccsActionAddressService = ccsActionAddressService;
             _apiRequestService = apiRequestService;
             _taskJobService = taskJobService;
+            _dictionaryService = dictionaryService;
             Configuration = configuration;
             fanucUrlContext = Configuration.GetConnectionString("fanucUrlContext");
             opcuacUrlContext = Configuration.GetConnectionString("opcuacUrlContext");
@@ -2799,6 +2802,102 @@ namespace IMCS.CCS.Services
         }
 
 
+        public async Task<List<ProductionStatus>> GetLineWarn(RequestData<Object> req)
+        {
+            List<ProductionStatus> list = new List<ProductionStatus>();
+            List<CcsTagValue> tagValues = new List<CcsTagValue>();
+            List<Dictionary> dictList = new List<Dictionary>();
+            CcsTagValue tagQuery = new CcsTagValue();
+            tagQuery.ProtocolType = "S7_1500";
+            tagQuery.Description = "PLC报警内容";            
+            tagValues = _ccsTagValueService.GetList(tagQuery);
+            tagValues = tagValues.Where(x => x.TagValue != "0").ToList();
+            foreach(CcsTagValue tagValue in tagValues)
+            {
+                Dictionary ccsDictionary = new Dictionary();
+                ccsDictionary.Type = tagValue.Ip;
+                ccsDictionary.Code = tagValue.TagValue.Trim();
+                dictList = await _dictionaryService.GetList(ccsDictionary);
+                Dictionary dicObj = dictList.Where(x => x.state).FirstOrDefault();
+
+                ProductionStatus productionStatus = new ProductionStatus();
+                productionStatus.ip = tagValue.Ip;
+                productionStatus.onlineStatus = "3";
+                productionStatus.alarmState = true;
+                productionStatus.alertMsg = dicObj.Description;
+                list.Add(productionStatus);
+            }
+            //判断指定报警设备的错误信息
+            if (!String.IsNullOrEmpty(req.url))
+            {
+                String[] ips = req.url.Split(",");
+                List<EquipmentMonitor> equipmentMonitors = new List<EquipmentMonitor>();
+                equipmentMonitors = await _equipmentMonitorService.GetList();
+                equipmentMonitors = equipmentMonitors.Where(x => ips.Contains(x.IP)).ToList();
+                if (equipmentMonitors.Count > 0)
+                {
+                    foreach (EquipmentMonitor alarmEquipment in equipmentMonitors)
+                    {
+                        List<Device> deviceList = _deviceService.GetDeviceList();
+                        Device onlineDevice = deviceList.Where(x => x.Ip == alarmEquipment.IP).FirstOrDefault();
+                        if (alarmEquipment != null && alarmEquipment.Type == "HEIDEHAIN")
+                        {                          
+                            RequestHeidhData hdhReq = new RequestHeidhData();
+                            hdhReq.ServerUrl = onlineDevice.ServerUrl;
+                            hdhReq.MachineName = onlineDevice.UserName;
+                            hdhReq.Type = OpcUaActionTypeEnum.Connect.ToString();
+                            var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
+                            if (Result.IsSuccess)
+                            {
+                                ResponseHeidhData responseData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
+                                if (!string.IsNullOrEmpty(responseData.errorsInfo) && !Result.Message.Contains("无报警"))
+                                {
+                                    ProductionStatus productionStatus = new ProductionStatus();
+                                    productionStatus.id = alarmEquipment.Id.ToString();
+                                    productionStatus.ip = onlineDevice.Ip;
+                                    productionStatus.alertMsg = responseData.errorsInfo;
+                                    productionStatus.alarmState = true;//报警 
+                                    productionStatus.onlineStatus = "1";
+                                    list.Add(productionStatus);
+                                }
+                            }
+                        }
+                        else if (alarmEquipment != null && alarmEquipment.Type == "FANUC")
+                        {                           
+                            string Url = fanucUrlContext + "?ip=" + onlineDevice.Ip + "&port=" + onlineDevice.Port;
+                            //调用发那科接口
+                            var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Get, Url + "&fun=AlmInfo", null, null);
+                            if (Result.IsSuccess)
+                            {
+                                List<AlmInfo> AlmMsg = JsonConvert.DeserializeObject<List<AlmInfo>>(Result.Message);
+                                //List<AlmInfo> AlmMsg = fncReq.AlmMsg;                                   
+                                if (AlmMsg != null && AlmMsg.Count > 0)
+                                {
+                                    var msgs = from o in AlmMsg select o.msg;
+                                    if (msgs != null && !Result.Message.Contains("无报警"))
+                                    {
+                                        ProductionStatus productionStatus = new ProductionStatus();
+                                        productionStatus.id = alarmEquipment.Id.ToString();
+                                        productionStatus.ip = onlineDevice.Ip;
+                                        productionStatus.alertMsg = string.Join(",", msgs.ToArray());
+                                        productionStatus.alarmState = true;//报警
+                                        productionStatus.onlineStatus = "1";
+                                        list.Add(productionStatus);
+                                    }
+
+                                }
+                            }
+
+                        }
+
+                    }
+                }
+
+            }
+            return list;
+        }
+
+
         //移动取放 条件限制
         private async Task<bool> robotActionCondition(string ip ,string isAllowFlag,string currentAction)
         {

+ 11 - 10
IMCS_CCS/Service/Impl/TaskJobService.cs

@@ -1348,7 +1348,6 @@ namespace IMCS.CCS.Service.Impl
                     var tagData = await _redisService.Database.StringGetAsync(tag_value_redis_key);
                     if (tagData.IsNullOrEmpty)
                     {
-
                         CcsTagValue tagQuery = new CcsTagValue();
                         tagQuery.ProtocolType = device.ProtocolType;
                         tagQuery.Ip = device.Ip;
@@ -1364,7 +1363,7 @@ namespace IMCS.CCS.Service.Impl
                         tagValues = JsonConvert.DeserializeObject<List<CcsTagValue>>(tagData);
                     }
                     
-                    CcsTagValue ccsTagValue = tagValues.Where(x => x.Ip == equipment.IP && x.Address == equipment.Address).FirstOrDefault();
+                    //CcsTagValue ccsTagValue = tagValues.Where(x => x.Ip == equipment.IP && x.Address == equipment.Address).FirstOrDefault();
                     if (device != null && !device.UseState)
                     {
                         if (equipment.Status != "离线")
@@ -1384,7 +1383,7 @@ namespace IMCS.CCS.Service.Impl
 
                         continue;
                     } 
-                    else if (device != null && device.State && device.UseState && (equipment.Type == "HEIDEHAIN" || equipment.Type == "FANUC"))
+                    else if (device != null && device.State && device.UseState && (equipment.Type == "HEIDEHAIN" || equipment.Type == "FANUC" || equipment.Type == "KEDE"))
                     {
                         //通过数组获取机床对应的PLC ip地址
                         string plcIp = jcIpDict[device.Ip]; 
@@ -1431,10 +1430,9 @@ namespace IMCS.CCS.Service.Impl
                             }
                         } 
                     }
-                    else if (device != null && (equipment.Name == "机械手" || equipment.Name == "保障中心_伺服舵机"))
+                    else if (device != null && (equipment.Name.Contains("机器人") || equipment.Name == "保障中心_伺服舵机"))
                     {
-                       
-                        ccsTagValue = tagValues.Where(x => x.Ip == equipment.IP && x.Address == equipment.Address).FirstOrDefault();
+                        CcsTagValue ccsTagValue = tagValues.Where(x => x.Ip == equipment.IP && x.Address == equipment.Address).FirstOrDefault();
                         if (ccsTagValue != null)
                         {
                             if (ccsTagValue.TagValue == "3")
@@ -1497,13 +1495,16 @@ namespace IMCS.CCS.Service.Impl
                     {
                         ProductionStatus productionStatus = new ProductionStatus();
                         productionStatus.id = changeEquipment.Id.ToString();
-                        productionStatus.onlineStatus = syncStatusMap[changeEquipment.Status].ToString(); 
+                        productionStatus.onlineStatus = syncStatusMap[changeEquipment.Status].ToString();
+                        productionStatus.ip = changeEquipment.IP.ToString();
                         productionStatusList.Add(productionStatus);
                        
                     }
                     //修改并重置缓存
                     await _equipmentMonitorService.UpdateAndCache(equipmentMonitors); 
                 }
+                
+                /*
                 //在线设备,报警放入推送数组
                 List<Device> onlineDeviceList = await getDeviceList(); 
                 foreach (Device onlineDevice in onlineDeviceList)
@@ -1622,13 +1623,13 @@ namespace IMCS.CCS.Service.Impl
                                 productionStatus.onlineStatus = "1";
                                 productionStatus.alarmState = true; //报警 
                                 productionStatusList.Add(productionStatus);
-                            }
+                            }                            
                            
                         }
                     }
                 }
-
-
+                */
+                
                 //推送
                 if (productionStatusList != null && productionStatusList.Count > 0)
                 { 

+ 3 - 4
IMCS_CCS/Startup.cs

@@ -54,8 +54,7 @@ namespace IMCS.CCS
             });
 
             //ʹÓÃmysql 
-            services.AddDbContext<CcsContext>(options => options.UseMySQL(Configuration.GetConnectionString("mysqlContext"))
-                                                                 .UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking));  
+            services.AddDbContext<CcsContext>(options => options.UseMySQL(Configuration.GetConnectionString("mysqlContext")).UseQueryTrackingBehavior(QueryTrackingBehavior.TrackAll));  
 
             services.AddCors(options =>
             {
@@ -69,9 +68,9 @@ namespace IMCS.CCS
                     //6877
                 });
             });
- 
 
-           
+            services.AddHttpClient();
+
 
             #region ʵÀý×¢²á
             //AutoMapper ÅäÖÃ