zhuhao 3 éve
szülő
commit
fb548db98c

+ 22 - 1
IMCS_CCS/IMCS.CCS.xml

@@ -601,6 +601,11 @@
             address
             </summary>
         </member>
+        <member name="T:IMCS.CCS.Entitys.TagValueReadTypeEnum">
+            <summary>
+            s7读取类型
+            </summary>
+        </member>
         <member name="T:IMCS.CCS.Entitys.ProtocalTypeEnum">
             <summary>
             协议类型
@@ -1306,6 +1311,10 @@
             采集数据OPCUA
             </summary> 
             <returns></returns>
+            <summary>
+            采集数据OPCUA
+            </summary> 
+            <returns></returns>
         </member>
         <member name="M:IMCS.CCS.Service.Impl.TaskJobService.DataCollectS7Job">
             <summary>
@@ -1373,6 +1382,13 @@
             </summary> 
             <returns></returns>
         </member>
+        <member name="M:IMCS.CCS.Service.Impl.TaskJobService.ChangeToDecimal(System.String)">
+            <summary>
+            数字科学计数法处理
+            </summary>
+            <param name="strData"></param>
+            <returns></returns>
+        </member>
         <member name="T:IMCS.CCS.Service.Impl.TaskService">
             <summary>
             任务服务
@@ -1900,7 +1916,7 @@
             </summary>
             <returns></returns>
         </member>
-        <member name="M:IMCS.CCS.DeviceProtocol.DeviceOPCUat.OpcUa_Read(System.Collections.Generic.List{System.String},System.Collections.Generic.List{System.String}@)">
+        <member name="M:IMCS.CCS.DeviceProtocol.DeviceOPCUat.OpcUa_Read(System.Collections.Generic.List{System.String})">
             <summary>
             
             </summary>
@@ -1984,5 +2000,10 @@
             SCP获取文件
             </summary> 
         </member>
+        <member name="T:IMCS_CCS.Model.vo.OpcUaActionTypeEnum">
+            <summary>
+            类型名称
+            </summary>
+        </member>
     </members>
 </doc>

+ 1 - 2
IMCS_CCS/Model/vo/RequestOpcUaData.cs

@@ -37,8 +37,7 @@ namespace IMCS_CCS.Model.vo
         Connect,
         Write,
         Read,
-        Upload,
-        SelectNc,
+        Upload, 
         StartNcProgram
     }
 }

+ 115 - 40
IMCS_CCS/Service/Impl/HttpRequestService.cs

@@ -12,7 +12,10 @@ using IMCS_CCS.Utils;
 using Newtonsoft.Json;
 using IMCS_CCS.Utils.DeviceProtocol;
 using HslCommunication.Profinet.Siemens;
-using HslCommunication;
+using Microsoft.Extensions.Configuration;
+using IMCS.CCS.Service;
+using IMCS_CCS.Model.vo;
+using FTP;
 
 namespace IMCS.CCS.Services
 {
@@ -32,26 +35,50 @@ namespace IMCS.CCS.Services
 
         string LocalPath = "D:\\PROG";
 
+        private string fanucUrlContext;
+
+        private string opcuacUrlContext;
+
+        private string ftpUrlContext;
+
+        private string ftpUserContext;
+
+        private string ftpPwdContext;
+
+        public IConfiguration Configuration { get; }
+
+        private readonly IApiRequestService _apiRequestService;
+
         public HttpRequestService(IDeviceService deviceService, ITaskCallbackService taskCallbackService,
-                                  ICcsActionService ccsActionService, ICcsTagValueService ccsTagValueService, IEquipmentMonitorService equipmentMonitorService)
+                                  ICcsActionService ccsActionService, ICcsTagValueService ccsTagValueService,
+                                  IEquipmentMonitorService equipmentMonitorService, IApiRequestService apiRequestService,
+                                  IConfiguration configuration)
         {
             _deviceService = deviceService;
             _taskCallbackService = taskCallbackService;
             _ccsActionService = ccsActionService;
             _ccsTagValueService = ccsTagValueService;
             _equipmentMonitorService = equipmentMonitorService;
+            _apiRequestService = apiRequestService;
+            Configuration = configuration;
+            fanucUrlContext = Configuration.GetConnectionString("fanucUrlContext");
+            opcuacUrlContext = Configuration.GetConnectionString("opcuacUrlContext");
+            ftpUrlContext = Configuration.GetConnectionString("FTPServer");
+            ftpUserContext = Configuration.GetConnectionString("FTPUser");
+            ftpPwdContext = Configuration.GetConnectionString("FTPPwd");
         }
 
         /// <summary>
         /// 获取状态当前值
         /// </summary> 
-        public string GetTagValue(RequestTagValueData req) { 
+        public string GetTagValue(RequestTagValueData req)
+        {
             CcsTagValue queryParam = new CcsTagValue();
             queryParam.Ip = req.ip;
             queryParam.Address = req.tagname;
-            List<CcsTagValue> tagValues =  _ccsTagValueService.GetList(queryParam);
+            List<CcsTagValue> tagValues = _ccsTagValueService.GetList(queryParam);
             string tagValue = "0";
-            if(tagValues != null && tagValues.Count > 0)
+            if (tagValues != null && tagValues.Count > 0)
             {
                 tagValue = tagValues[0].TagValue;
             }
@@ -67,17 +94,18 @@ namespace IMCS.CCS.Services
             List<ResponseDigitalTwinsData> list = new List<ResponseDigitalTwinsData>();
 
             List<EquipmentMonitor> equipmentMonitors = await _equipmentMonitorService.GetList();
-            foreach(EquipmentMonitor  equipment in equipmentMonitors){
+            foreach (EquipmentMonitor equipment in equipmentMonitors)
+            {
                 ResponseDigitalTwinsData digitalTwinsData = new ResponseDigitalTwinsData();
-				digitalTwinsData.id = equipment.Id.ToString();
+                digitalTwinsData.id = equipment.Id.ToString();
                 digitalTwinsData.deviceType = equipment.Type;
                 digitalTwinsData.deviceName = equipment.Name;
                 digitalTwinsData.monitoringStatus = equipment.Status;
-				digitalTwinsData.operationName = "工序名称";
+                digitalTwinsData.operationName = "工序名称";
                 digitalTwinsData.orderName = "100001";
                 digitalTwinsData.orderNumber = "100002";
                 digitalTwinsData.productName = "100003";
-                digitalTwinsData.productNumber = "100004"; 
+                digitalTwinsData.productNumber = "100004";
                 digitalTwinsData.feedRate = "50";
                 digitalTwinsData.spindleLoad = "100";
                 digitalTwinsData.spindleMagnification = "80";
@@ -541,7 +569,7 @@ namespace IMCS.CCS.Services
 
                 //插入回调
                 TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.SendFlexibleWire.ToString(),
-                    EnumHelper.GetDescription(ActionTypeEnum.SendFlexibleWire), req.taskId, req.taskNodeId, actionInfo.Address, actionInfo.CallbackValue);
+                    EnumHelper.GetDescription(ActionTypeEnum.SendFlexibleWire), req.taskId, req.taskNodeId, actionInfo.CallbackAddress, actionInfo.CallbackValue);
 
                 taskCallbackData.Address3 = actionInfo.CallbackAddress3;
                 taskCallbackData.CallbackValue2 = actionInfo.CallbackValue2;
@@ -762,7 +790,7 @@ namespace IMCS.CCS.Services
             {
                 List<Device> devices = _deviceService.GetDeviceAllList();
 
-                Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)
+                Device device = devices.Where(x => x.Ip.Equals(req.url)
                                             && x.ProtocolType.Equals(ProtocalTypeEnum.FTP.ToString())).FirstOrDefault();
 
                 if (device == null)
@@ -779,27 +807,32 @@ namespace IMCS.CCS.Services
                 List<CcsAction> actions = _ccsActionService.GetList(actionQuery);
                 CcsAction actionInfo = actions[0]; */
 
-                new DeviceFtp().GetFile(req.data.fileName, LocalPath);
-
-                /* DeviceWinSCP winScp = new DeviceWinSCP(device.UserName, device.Password, device.Ip);
-                 winScp.PutFile(req.data.fileName, LocalPath, req.data.remotePath);*/
-
-                DeviceSFTP sftp = new DeviceSFTP(device.UserName, device.Port, device.Password, device.Ip);
-                if (sftp.Connect())
+                FtpClient ftpClient = new DeviceFtp().Connect(ftpUrlContext, ftpUserContext, ftpPwdContext);
+                ftpClient.Get(req.data.fileName, LocalPath, req.data.fileName);
+                ftpClient.DisConnect();
+                try
                 {
-                    sftp.Put(LocalPath + req.data.fileName, req.data.remotePath);
-                    sftp.Disconnect();
+                    DeviceSFTP sftp = new DeviceSFTP(device.Ip, device.Port, device.UserName, device.Password);
+                    bool ifcon = sftp.Connect();
+                    if (ifcon)
+                    {
+                        sftp.Put(LocalPath + "\\" + req.data.fileName, req.data.remotePath + req.data.fileName);
+                        sftp.Disconnect();
+                    }
+
                 }
-                else
+                catch (Exception exscp)
                 {
-                    Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常,scp连接失败," + JsonConvert.SerializeObject(req),
-                   EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
+                    Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常,scp连接失败," + exscp.Message + "," + JsonConvert.SerializeObject(req),
+                  EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
                     responseData.result = "false";
                     return responseData;
                 }
+
                 //插入回调
                 TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.UploadFile.ToString(),
                     EnumHelper.GetDescription(ActionTypeEnum.UploadFile), req.taskId, req.taskNodeId, null, null);
+                await _taskCallbackService.Create(taskCallbackData);
                 Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传成功===>>" + JsonConvert.SerializeObject(req),
                     EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
                 return responseData;
@@ -839,21 +872,62 @@ namespace IMCS.CCS.Services
                 List<CcsAction> actions = _ccsActionService.GetList(actionQuery);
                 CcsAction actionInfo = actions[0];
 
-                DeviceOPCUat opcUa = new DeviceOPCUat(device.ServerUrl, device.UserName, device.Password);
-                if (opcUa.IsConnection)
-                {
-                    bool isSuccess = opcUa.OpcUa_Select(req.data.remotePath);
-                    Thread.Sleep(500);
-                    if (isSuccess)
+                //opcua启动程序
+                if (actionInfo.ProtocolType == ProtocalTypeEnum.OPCUA.ToString())
+                {
+                    RequestOpcUaData opcUaReq = new RequestOpcUaData();
+                    opcUaReq.ServerUrl = device.ServerUrl;
+                    opcUaReq.UserName = device.UserName;
+                    opcUaReq.Password = device.Password;
+                    opcUaReq.Path = actionInfo.FilePath + req.data.remotePath;
+                    opcUaReq.Type = OpcUaActionTypeEnum.StartNcProgram.ToString();
+                    var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, opcuacUrlContext, opcUaReq, null);
+                    ResponseOpcUaData responseOpcUaData = JsonConvert.DeserializeObject<ResponseOpcUaData>(Result.Message);
+                    if (Result.IsSuccess && responseOpcUaData.result)
                     {
-                        opcUa.OpcUa_Write(actionInfo.Address, "True");
-                        opcUa.disConnect();
-                        //插入回调
-                        TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.StartNCProgram.ToString(),
-                            EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram), req.taskId, req.taskNodeId, actionInfo.CallbackAddress, null);
-                        Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req),
+
+                        Thread.Sleep(SLEEP_TIME);
+                        if (!string.IsNullOrEmpty(actionInfo.CheckAddress))
+                        {
+                            opcUaReq.Type = OpcUaActionTypeEnum.Read.ToString();
+                            opcUaReq.Addresses = new List<string>() { actionInfo.CheckAddress };
+                            Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, opcuacUrlContext, opcUaReq, null);
+                            responseOpcUaData = JsonConvert.DeserializeObject<ResponseOpcUaData>(Result.Message);
+                            if (Result.IsSuccess && responseOpcUaData.result)
+                            {
+                                string checkValue = responseOpcUaData.values.FirstOrDefault();
+                                if (checkValue != actionInfo.CheckValue)
+                                {
+                                    Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req),
+                                      EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
+                                    responseData.result = "false";
+                                    return responseData;
+                                }
+                            }
+                        }
+
+                        opcUaReq.Type = OpcUaActionTypeEnum.Write.ToString();
+                        opcUaReq.Addresses = new List<string>() { actionInfo.Address };
+                        opcUaReq.Values = new List<string>() { "True" };
+                        Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, opcuacUrlContext, opcUaReq, null);
+                        responseOpcUaData = JsonConvert.DeserializeObject<ResponseOpcUaData>(Result.Message);
+                        if (Result.IsSuccess && responseOpcUaData.result)
+                        {
+                            //插入回调
+                            TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.StartNCProgram.ToString(),
+                            EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram), req.taskId, req.taskNodeId, actionInfo.CallbackAddress, actionInfo.CallbackValue);
+                            await _taskCallbackService.Create(taskCallbackData);
+                            Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req),
+                                EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
+                            return responseData;
+                        }
+                        else
+                        {
+                            Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req),
                             EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
-                        return responseData;
+                            responseData.result = "false";
+                            return responseData;
+                        }
                     }
                     else
                     {
@@ -866,11 +940,12 @@ namespace IMCS.CCS.Services
                 else
                 {
                     Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req),
-                  EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
+                     EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
                     responseData.result = "false";
                     return responseData;
                 }
 
+
             }
             catch (Exception ex)
             {
@@ -1065,7 +1140,7 @@ namespace IMCS.CCS.Services
                 CcsAction actionInfo = actions[0];
 
                 SiemensS7Net s7 = DevicePlcS7.SiemensS7(req.url);
-                OperateResult ConnectionResult = s7.ConnectServer();
+                HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
                 if (!ConnectionResult.IsSuccess)
                 {
                     s7.ConnectClose();
@@ -1244,7 +1319,7 @@ namespace IMCS.CCS.Services
                 CcsAction actionInfo = actions[0];
 
                 SiemensS7Net s7 = DevicePlcS7.SiemensS7(req.url);
-                OperateResult ConnectionResult = s7.ConnectServer();
+                HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
                 if (!ConnectionResult.IsSuccess)
                 {
                     s7.ConnectClose();
@@ -1298,6 +1373,7 @@ namespace IMCS.CCS.Services
                 //插入回调
                 TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.StartCoordinateMeasuringMachine.ToString(),
                     EnumHelper.GetDescription(ActionTypeEnum.StartCoordinateMeasuringMachine), req.taskId, req.taskNodeId, actionInfo.CallbackAddress, actionInfo.CallbackValue);
+                taskCallbackData.CallbackValue2 = actionInfo.CallbackValue2;
                 await _taskCallbackService.Create(taskCallbackData);
                 Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.StartCoordinateMeasuringMachine) + "启动三坐标成功===>>" + JsonConvert.SerializeObject(req)
                    , EnumHelper.GetDescription(ActionTypeEnum.StartCoordinateMeasuringMachine));
@@ -1768,5 +1844,4 @@ namespace IMCS.CCS.Services
         }
 
     }
- 
 }

+ 146 - 50
IMCS_CCS/Service/Impl/TaskJobService.cs

@@ -3,7 +3,6 @@ using HslCommunication.Profinet.Siemens;
 using IMCS.CCS.Common.Redis;
 using IMCS.CCS.DeviceProtocol;
 using IMCS.CCS.Entitys;
-using IMCS.CCS.Model.vo;
 using IMCS.CCS.Services;
 using IMCS_CCS.Model.vo;
 using IMCS_CCS.Utils;
@@ -73,6 +72,10 @@ namespace IMCS.CCS.Service.Impl
             opcuacUrlContext = Configuration.GetConnectionString("opcuacUrlContext");
         }
 
+        /// <summary>
+        /// 采集数据OPCUA
+        /// </summary> 
+        /// <returns></returns>
         /// <summary>
         /// 采集数据OPCUA
         /// </summary> 
@@ -88,7 +91,7 @@ namespace IMCS.CCS.Service.Impl
                 foreach (Device device in deviceList)
                 {
                     List<CcsTagValue> tagValues = new List<CcsTagValue>();
-                    string redis_key = device.Ip + ":" + device.ProtocolType;
+                    string redis_key = "IMCS_CCS:" + device.Ip + ":" + device.ProtocolType;
                     var data = await _redisService.Database.StringGetAsync(redis_key);
                     if (data.IsNullOrEmpty)
                     {
@@ -162,6 +165,22 @@ namespace IMCS.CCS.Service.Impl
                             await _redisService.Database.StringSetAsync(redis_key, JsonConvert.SerializeObject(tagValues));
                         }
 
+
+                        CcsTagValue tagQuery = new CcsTagValue();
+                        tagQuery.ProtocolType = device.ProtocolType;
+                        tagQuery.Ip = device.Ip;
+                        tagValues = _ccsTagValueService.GetList(tagQuery);
+
+                        //机床复位
+                        CcsTagValue tagValue1 = tagValues.Where(t => t.Address == "ns=2;s=/Plc/M1500.2").FirstOrDefault();
+                        CcsTagValue tagValue2 = tagValues.Where(t => t.Address == "ns=2;s=/Plc/M1500.4").FirstOrDefault();
+                        if (tagValue1.TagValue == "True" && tagValue2.TagValue == "True")
+                        {
+                            opcUaReq.Addresses = new List<string>() { "ns=2;s=/Plc/M1999.1" };
+                            opcUaReq.Values = new List<string>() { "False" };
+                            opcUaReq.Type = OpcUaActionTypeEnum.Write.ToString();
+                            await _apiRequestService.RequestAsync(RequsetModeEnum.Post, opcuacUrlContext, opcUaReq, null);
+                        }
                     }
                     else
                     {
@@ -191,7 +210,7 @@ namespace IMCS.CCS.Service.Impl
                 foreach (Device device in deviceList)
                 {
                     List<CcsTagValue> tagValues = new List<CcsTagValue>();
-                    string redis_key = device.Ip + ":" + device.ProtocolType;
+                    string redis_key = "IMCS_CCS:" + device.Ip + ":" + device.ProtocolType;
                     var data = await _redisService.Database.StringGetAsync(redis_key);
                     if (data.IsNullOrEmpty)
                     {
@@ -290,7 +309,7 @@ namespace IMCS.CCS.Service.Impl
                 foreach (Device device in deviceList)
                 {
                     List<CcsTagValue> tagValues = new List<CcsTagValue>();
-                    string redis_key = device.Ip + ":" + device.ProtocolType;
+                    string redis_key = "IMCS_CCS:" + device.Ip + ":" + device.ProtocolType;
                     var data = await _redisService.Database.StringGetAsync(redis_key);
                     if (data.IsNullOrEmpty)
                     {
@@ -325,7 +344,7 @@ namespace IMCS.CCS.Service.Impl
                             return "采集失败,FANUC连不上";
                         }
                         else
-                        {   
+                        {
                             //调用发那科采集接口
                             Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Get, Url + "&fun=All", null, null);
                             ResponseFanucData fanucData = JsonConvert.DeserializeObject<ResponseFanucData>(Result.Message);
@@ -370,7 +389,9 @@ namespace IMCS.CCS.Service.Impl
         {
             List<TaskCallback> list = await _taskCallbackService.GetAllList();
 
-            list = list.Where(x => x.OperateType.Equals(ActionTypeEnum.UploadFile.ToString())).ToList();
+            list = list.Where(x => x.OperateType.Equals(ActionTypeEnum.UploadFile.ToString())
+                                || x.OperateType.Equals(ActionTypeEnum.SendLinShift.ToString())
+                                || x.OperateType.Equals(ActionTypeEnum.SendLinShiftFine.ToString())).ToList();
             string message = "";
             try
             {
@@ -443,13 +464,9 @@ namespace IMCS.CCS.Service.Impl
                     CcsTagValue tagValueQuery = new CcsTagValue();
                     tagValueQuery.Ip = task.IP;
                     tagValueQuery.Address = task.Address;
-                    List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery);
-                    CcsTagValue tagValue = null;
-                    if (tagValues != null && tagValues.Count > 0)
-                    {
-                        tagValue = tagValues[0];
-                    }
-                    else
+                    CcsTagValue tagValue = _ccsTagValueService.GetList(tagValueQuery).FirstOrDefault();
+                    if (tagValue == null)
+
                     {
 
                         message = message + JsonConvert.SerializeObject(task) + ",此节点没配置;";
@@ -457,7 +474,7 @@ namespace IMCS.CCS.Service.Impl
                         continue;
 
                     }
-                    if (tagValue.TagValue.Equals(task.CallbackValue))
+                    if (tagValue.TagValue == task.CallbackValue)
                     {
                         CallBackRequestData requestData = new CallBackRequestData();
                         requestData.taskId = long.Parse(task.TaskId);
@@ -478,7 +495,7 @@ namespace IMCS.CCS.Service.Impl
                         }
 
                     }
-                    else if (!string.IsNullOrEmpty(task.CallbackValue2) && tagValue.TagValue.Equals(task.CallbackValue2))
+                    else if (tagValue.TagValue == task.CallbackValue2)
                     {
                         CallBackRequestData requestData = new CallBackRequestData();
                         requestData.taskId = long.Parse(task.TaskId);
@@ -510,7 +527,7 @@ namespace IMCS.CCS.Service.Impl
                         if (tagValues3 != null && tagValues3.Count > 0)
                         {
                             CcsTagValue tagValue3 = tagValues3[0];
-                            if (tagValue3.TagValue.Equals(task.CallbackValue3))
+                            if (tagValue3.TagValue == task.CallbackValue3)
                             {
                                 CallBackRequestData requestData = new CallBackRequestData();
                                 requestData.taskId = long.Parse(task.TaskId);
@@ -596,7 +613,7 @@ namespace IMCS.CCS.Service.Impl
                         continue;
 
                     }
-                    if (tagValue.TagValue.Equals(task.CallbackValue))
+                    if (tagValue.TagValue == task.CallbackValue)
                     {
                         CallBackRequestData requestData = new CallBackRequestData();
                         requestData.taskId = long.Parse(task.TaskId);
@@ -629,7 +646,7 @@ namespace IMCS.CCS.Service.Impl
                         }
 
                     }
-                    else if (!string.IsNullOrEmpty(task.CallbackValue2) && tagValue.TagValue.Equals(task.CallbackValue2))
+                    else if (tagValue.TagValue == task.CallbackValue2)
                     {
                         CallBackRequestData requestData = new CallBackRequestData();
                         requestData.taskId = long.Parse(task.TaskId);
@@ -709,7 +726,7 @@ namespace IMCS.CCS.Service.Impl
                         Log.Instance.WriteLogAdd("回调异常,此节点没配置" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
                         continue;
                     }
-                    if (tagValue.TagValue.Equals(task.CallbackValue))
+                    if (tagValue.TagValue == task.CallbackValue)
                     {
                         CallBackRequestData requestData = new CallBackRequestData();
                         requestData.taskId = long.Parse(task.TaskId);
@@ -769,19 +786,14 @@ namespace IMCS.CCS.Service.Impl
                     CcsTagValue tagValueQuery = new CcsTagValue();
                     tagValueQuery.Ip = task.IP;
                     tagValueQuery.Address = task.Address;
-                    List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery);
-                    CcsTagValue tagValue = null;
-                    if (tagValues != null && tagValues.Count > 0)
-                    {
-                        tagValue = tagValues[0];
-                    }
-                    else
+                    CcsTagValue tagValue = _ccsTagValueService.GetList(tagValueQuery).FirstOrDefault();
+                    if (tagValue == null)
                     {
                         message = message + JsonConvert.SerializeObject(task) + ",此节点没配置;";
                         Log.Instance.WriteLogAdd("回调异常,此节点没配置" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
                         continue;
                     }
-                    if (tagValue.TagValue.Equals(task.CallbackValue))
+                    if (tagValue.TagValue == task.CallbackValue)
                     {
                         CallBackRequestData requestData = new CallBackRequestData();
                         requestData.taskId = long.Parse(task.TaskId);
@@ -842,19 +854,15 @@ namespace IMCS.CCS.Service.Impl
                     CcsTagValue tagValueQuery = new CcsTagValue();
                     tagValueQuery.Ip = task.IP;
                     tagValueQuery.Address = task.Address;
-                    List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery);
-                    CcsTagValue tagValue = null;
-                    if (tagValues != null && tagValues.Count > 0)
-                    {
-                        tagValue = tagValues[0];
-                    }
-                    else
+                    CcsTagValue tagValue = _ccsTagValueService.GetList(tagValueQuery).FirstOrDefault();
+                    if (tagValue == null)
                     {
+
                         message = message + JsonConvert.SerializeObject(task) + ",此节点没配置;";
                         Log.Instance.WriteLogAdd("回调异常,此节点没配置" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
                         continue;
                     }
-                    if (tagValue.TagValue.Equals(task.CallbackValue))
+                    if (tagValue.TagValue == task.CallbackValue || tagValue.TagValue == task.CallbackValue2)
                     {
                         CallBackRequestData requestData = new CallBackRequestData();
                         requestData.taskId = long.Parse(task.TaskId);
@@ -893,30 +901,65 @@ namespace IMCS.CCS.Service.Impl
             try
             {
                 string message = "MonitorEquipmentStatusJob调度成功";
-                List<Device> devices = _deviceService.GetDeviceList();
+                List<Device> devices = new List<Device>() ;
+                string device_redis_key = "IMCS_CCS:DeviceList";
+                var deviceData = await _redisService.Database.StringGetAsync(device_redis_key);
+                if (deviceData.IsNullOrEmpty)
+                {
+                    devices = _deviceService.GetDeviceList();
+                }
+                else
+                {
+                    devices = JsonConvert.DeserializeObject<List<Device>>(deviceData);
+                }
                 //ftp不监控
-                devices = devices.Where(x => !x.ProtocolType.Equals(ProtocalTypeEnum.FTP.ToString())).ToList();
+                devices = devices.Where(x => !x.ProtocolType.Equals(ProtocalTypeEnum.FTP.ToString()) && x.State).ToList();
                 CcsTagValue tagQuery = new CcsTagValue();
                 List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagQuery);
-                List<EquipmentMonitor> equipmentMonitors = await _equipmentMonitorService.GetList();
+                List<EquipmentMonitor> equipmentMonitors = new List<EquipmentMonitor>();
+                string redis_key = "IMCS_CCS:MonitorEquipmentStatusJob";
+                var data = await _redisService.Database.StringGetAsync(redis_key);
+                if (data.IsNullOrEmpty)
+                {
+                    equipmentMonitors = await _equipmentMonitorService.GetList();
+                    //首次设置redis
+                    if (tagValues != null && tagValues.Count > 0)
+                    {
+                        await _redisService.Database.StringSetAsync(redis_key, JsonConvert.SerializeObject(equipmentMonitors));
+                    }
+                }
+                else
+                {
+                    equipmentMonitors = JsonConvert.DeserializeObject<List<EquipmentMonitor>>(data);
+                }
+                //变化的设备
+                List<EquipmentMonitor> changeEquipmentMonitors = new List<EquipmentMonitor>();
                 foreach (EquipmentMonitor equipment in equipmentMonitors)
                 {
                     Device device = devices.Where(x => x.Ip.Equals(equipment.IP)).FirstOrDefault();
                     if (device == null)
                     {
-                        equipment.Status = "离线";
+                        if(equipment.Status != "离线")
+                        {
+                            equipment.Status = "离线";
+                            changeEquipmentMonitors.Add(equipment);
+                        }
+                        
                         continue;
                     }
-                    else
-                    {
-                        if (equipment.Name == "机械手")
+                    else if (equipment.Name == "机械手")
                         {
                             CcsTagValue ccsTagValue = tagValues.Where(x => x.Ip.Equals(equipment.IP) && x.Address.Equals(equipment.Address)).FirstOrDefault();
                             if (ccsTagValue != null)
                             {
                                 if (ccsTagValue.TagValue == "3")
                                 {
-                                    equipment.Status = "报警";
+                                    if (equipment.Status != "报警")
+                                    {
+                                        equipment.Status = "报警";
+                                        changeEquipmentMonitors.Add(equipment);
+                                    }
+                                    
                                     continue;
                                 }
                             }
@@ -925,21 +968,48 @@ namespace IMCS.CCS.Service.Impl
                             {
                                 if (ccsTagValue2.TagValue == "9")
                                 {
-                                    equipment.Status = "报警";
+                                    if (equipment.Status != "报警")
+                                    {
+                                        equipment.Status = "报警";
+                                        changeEquipmentMonitors.Add(equipment);
+                                    }
                                     continue;
                                 }
                             }
 
                             if (ccsTagValue2.TagValue == "0" || ccsTagValue2.TagValue == "3" || ccsTagValue2.TagValue == "6" || ccsTagValue2.TagValue == "8")
-                            {
-                                equipment.Status = "空闲";
+                            { 
+                                if (equipment.Status != "空闲")
+                                {
+                                    equipment.Status = "空闲";
+                                    changeEquipmentMonitors.Add(equipment);
+                                }
                                 continue;
+                            } 
+                            if (equipment.Status != "生产中")
+                            {
+                                equipment.Status = "生产中";
+                                changeEquipmentMonitors.Add(equipment);
                             }
-                            equipment.Status = "生产中";
+                    }
+                    else
+                    { 
+                        if (equipment.Status != "在线")
+                        {
+                            equipment.Status = "在线";
+                            changeEquipmentMonitors.Add(equipment);
                         }
                     }
-                    _equipmentMonitorService.Update(equipment);
-
+                    
+                }
+                //变化的修改 并且更新缓存
+                if(changeEquipmentMonitors != null)
+                {
+                    foreach (EquipmentMonitor equipment in changeEquipmentMonitors)
+                    {
+                        await _equipmentMonitorService.Update(equipment);
+                    }
+                    await _redisService.Database.StringSetAsync(redis_key, JsonConvert.SerializeObject(equipmentMonitors));
 
                 }
                 return message;
@@ -961,7 +1031,20 @@ namespace IMCS.CCS.Service.Impl
             try
             {
                 string message = "";
-                List<Device> devices = _deviceService.GetDeviceAllList();
+                List<Device> devices = new List<Device>();
+                List<Device> changeDevices = new List<Device>();
+                string redis_key = "IMCS_CCS:DeviceList";
+                var data = await _redisService.Database.StringGetAsync(redis_key);
+                if (data.IsNullOrEmpty)
+                {
+                    devices = _deviceService.GetDeviceAllList();
+                    await _redisService.Database.StringSetAsync(redis_key, JsonConvert.SerializeObject(devices));
+                }
+                else
+                {
+                    devices = JsonConvert.DeserializeObject<List<Device>>(data);
+                }
+
                 //ftp不监控
                 devices = devices.Where(x => !x.ProtocolType.Equals(ProtocalTypeEnum.FTP.ToString())).ToList();
                 foreach (Device device in devices)
@@ -980,6 +1063,7 @@ namespace IMCS.CCS.Service.Impl
                                 {
                                     device.State = false;
                                     await _deviceService.UpdateDevice(device);
+                                    changeDevices.Add(device);
                                 }
                                 s7.Close();
                                 Log.Instance.WriteLogAdd("plc连接失败,或已离线", LOG_TITLE_DEVICE);
@@ -993,6 +1077,7 @@ namespace IMCS.CCS.Service.Impl
                                 {
                                     device.State = true;
                                     await _deviceService.UpdateDevice(device);
+                                    changeDevices.Add(device);
                                 }
                                 s7.Close();
                                 Log.Instance.WriteLogAdd("plc连接失败,或已离线", LOG_TITLE_DEVICE);
@@ -1007,6 +1092,7 @@ namespace IMCS.CCS.Service.Impl
                             {
                                 device.State = false;
                                 await _deviceService.UpdateDevice(device);
+                                changeDevices.Add(device);
                             }
                             Log.Instance.WriteLogAdd("plc连接失败,或已离线", LOG_TITLE_DEVICE);
                             message = message + ",plc连接失败,plc连不上" + s7ex.Message + ",ip:" + device.Ip + ",协议类型:" + device.ProtocolType;
@@ -1031,6 +1117,7 @@ namespace IMCS.CCS.Service.Impl
                                 if (oldDevice.State)
                                 {
                                     await _deviceService.UpdateDevice(device);
+                                    changeDevices.Add(device);
                                 }
                                 Log.Instance.WriteLogAdd("OPCUA连接异常,或已离线,ip:" + device.Ip + ",协议类型:" + device.ProtocolType, LOG_TITLE_OPCUA);
                                 message = message + ",OPCUA连接异常,或以离线,ip:" + device.Ip + ",协议类型:" + device.ProtocolType; ;
@@ -1040,6 +1127,7 @@ namespace IMCS.CCS.Service.Impl
                             {
                                 device.State = true;
                                 await _deviceService.UpdateDevice(device);
+                                changeDevices.Add(device);
                                 Log.Instance.WriteLogAdd("OPCUA连接成功,ip:" + device.Ip + ",协议类型:" + device.ProtocolType, LOG_TITLE_DEVICE);
                                 continue;
                             }
@@ -1051,6 +1139,7 @@ namespace IMCS.CCS.Service.Impl
                             {
                                 device.State = false;
                                 await _deviceService.UpdateDevice(device);
+                                changeDevices.Add(device);
                             }
                             Log.Instance.WriteLogAdd("OPCUA连接异常,或以离线" + opcex.Message + ",ip:" + device.Ip + ", 协议类型: " + device.ProtocolType, LOG_TITLE_DEVICE);
                             continue;
@@ -1071,6 +1160,7 @@ namespace IMCS.CCS.Service.Impl
                                 {
                                     device.State = false;
                                     await _deviceService.UpdateDevice(device);
+                                    changeDevices.Add(device);
                                 }
                                 Log.Instance.WriteLogAdd("Fanuc连接异常,或已离线,ip:" + device.Ip + ",协议类型:" + device.ProtocolType, LOG_TITLE_OPCUA);
                                 message = message + ",Fanuc连接异常,或以离线,ip:" + device.Ip + ",协议类型:" + device.ProtocolType; ;
@@ -1083,6 +1173,7 @@ namespace IMCS.CCS.Service.Impl
                                 {
                                     device.State = true;
                                     await _deviceService.UpdateDevice(device);
+                                    changeDevices.Add(device);
                                 }
                                 Log.Instance.WriteLogAdd("Fanuc连接成功,ip:" + device.Ip + ",协议类型:" + device.ProtocolType, LOG_TITLE_DEVICE);
                                 continue;
@@ -1095,12 +1186,17 @@ namespace IMCS.CCS.Service.Impl
                             {
                                 device.State = false;
                                 await _deviceService.UpdateDevice(device);
+                                changeDevices.Add(device);
                             }
                             Log.Instance.WriteLogAdd("Fanuc连接异常,或以离线" + opcex.Message + ",ip:" + device.Ip + ", 协议类型: " + device.ProtocolType, LOG_TITLE_DEVICE);
                             continue;
                         }
                     }
                 }
+                if(changeDevices != null)
+                {
+                    await _redisService.Database.StringSetAsync(redis_key, JsonConvert.SerializeObject(devices));
+                }
                 return message;
             }
             catch (Exception ex)

+ 8 - 0
IMCS_CCS/Utils/DeviceProtocol/DeviceFtp.cs

@@ -20,7 +20,15 @@ namespace IMCS_CCS.Utils.DeviceProtocol
         {  
            
         }
+        public FtpClient Connect(string url, string user, string pwd)
+        {
+            FtpClient.FtpMode mode = FtpClient.FtpMode.Passive;
 
+            FtpClient ftpClient = new FtpClient(url, "/",
+                   user, pwd, 21, mode);
+            ftpClient.Connect();
+            return ftpClient;
+        }
         public void GetFile(string FileName, string LocalPath)
         {
             string url = Configuration.GetConnectionString("FTPServer");

+ 22 - 1
IMCS_CCS/bin/Debug/netcoreapp3.1/IMCS.CCS.xml

@@ -601,6 +601,11 @@
             address
             </summary>
         </member>
+        <member name="T:IMCS.CCS.Entitys.TagValueReadTypeEnum">
+            <summary>
+            s7读取类型
+            </summary>
+        </member>
         <member name="T:IMCS.CCS.Entitys.ProtocalTypeEnum">
             <summary>
             协议类型
@@ -1306,6 +1311,10 @@
             采集数据OPCUA
             </summary> 
             <returns></returns>
+            <summary>
+            采集数据OPCUA
+            </summary> 
+            <returns></returns>
         </member>
         <member name="M:IMCS.CCS.Service.Impl.TaskJobService.DataCollectS7Job">
             <summary>
@@ -1373,6 +1382,13 @@
             </summary> 
             <returns></returns>
         </member>
+        <member name="M:IMCS.CCS.Service.Impl.TaskJobService.ChangeToDecimal(System.String)">
+            <summary>
+            数字科学计数法处理
+            </summary>
+            <param name="strData"></param>
+            <returns></returns>
+        </member>
         <member name="T:IMCS.CCS.Service.Impl.TaskService">
             <summary>
             任务服务
@@ -1900,7 +1916,7 @@
             </summary>
             <returns></returns>
         </member>
-        <member name="M:IMCS.CCS.DeviceProtocol.DeviceOPCUat.OpcUa_Read(System.Collections.Generic.List{System.String},System.Collections.Generic.List{System.String}@)">
+        <member name="M:IMCS.CCS.DeviceProtocol.DeviceOPCUat.OpcUa_Read(System.Collections.Generic.List{System.String})">
             <summary>
             
             </summary>
@@ -1984,5 +2000,10 @@
             SCP获取文件
             </summary> 
         </member>
+        <member name="T:IMCS_CCS.Model.vo.OpcUaActionTypeEnum">
+            <summary>
+            类型名称
+            </summary>
+        </member>
     </members>
 </doc>

+ 17 - 34
IMCS_CCS/bin/Debug/netcoreapp3.1/IMCS_CCS.deps.json

@@ -44,11 +44,10 @@
           "System.IdentityModel.Tokens.Jwt": "6.11.0",
           "FTP": "1.0.0.7",
           "HslCommunication": "7.0.1.0",
-          "Opc.Ua.Client": "1.3.341.0",
-          "Opc.Ua.Core": "1.3.341.0",
+          "Opc.Ua.Client": "1.0.238.1",
+          "Opc.Ua.Core": "1.0.238.1",
           "S7.Net": "1.0.0.0",
-          "SinumerikOpcUaAPI": "2.1.0.0",
-          "UAClientHelperAPI": "1.0.0.0",
+          "Siemens.OpcUA": "0.0.0.0",
           "WinSCPnet": "1.8.3.11933",
           "Microsoft.AspNetCore.Antiforgery": "3.1.0.0",
           "Microsoft.AspNetCore.Authentication.Abstractions": "3.1.0.0",
@@ -2356,22 +2355,22 @@
           "HslCommunication.dll": {}
         }
       },
-      "Opc.Ua.Client/1.3.341.0": {
+      "Opc.Ua.Client/1.0.238.1": {
         "runtime": {
           "Opc.Ua.Client.dll": {
-            "assemblyVersion": "1.3.341.0",
-            "fileVersion": "1.3.341.0"
+            "assemblyVersion": "1.0.238.1",
+            "fileVersion": "1.0.238.1"
           }
         },
         "compile": {
           "Opc.Ua.Client.dll": {}
         }
       },
-      "Opc.Ua.Core/1.3.341.0": {
+      "Opc.Ua.Core/1.0.238.1": {
         "runtime": {
           "Opc.Ua.Core.dll": {
-            "assemblyVersion": "1.3.341.0",
-            "fileVersion": "1.3.341.0"
+            "assemblyVersion": "1.0.238.1",
+            "fileVersion": "1.0.238.1"
           }
         },
         "compile": {
@@ -2389,26 +2388,15 @@
           "S7.Net.dll": {}
         }
       },
-      "SinumerikOpcUaAPI/2.1.0.0": {
+      "Siemens.OpcUA/0.0.0.0": {
         "runtime": {
-          "SinumerikOpcUaAPI.dll": {
-            "assemblyVersion": "2.1.0.0",
-            "fileVersion": "2.1.0.9"
+          "Siemens.OpcUA.dll": {
+            "assemblyVersion": "0.0.0.0",
+            "fileVersion": "0.0.0.0"
           }
         },
         "compile": {
-          "SinumerikOpcUaAPI.dll": {}
-        }
-      },
-      "UAClientHelperAPI/1.0.0.0": {
-        "runtime": {
-          "UAClientHelperAPI.dll": {
-            "assemblyVersion": "1.0.0.0",
-            "fileVersion": "2.1.0.9"
-          }
-        },
-        "compile": {
-          "UAClientHelperAPI.dll": {}
+          "Siemens.OpcUA.dll": {}
         }
       },
       "WinSCPnet/1.8.3.11933": {
@@ -5014,12 +5002,12 @@
       "serviceable": false,
       "sha512": ""
     },
-    "Opc.Ua.Client/1.3.341.0": {
+    "Opc.Ua.Client/1.0.238.1": {
       "type": "reference",
       "serviceable": false,
       "sha512": ""
     },
-    "Opc.Ua.Core/1.3.341.0": {
+    "Opc.Ua.Core/1.0.238.1": {
       "type": "reference",
       "serviceable": false,
       "sha512": ""
@@ -5029,12 +5017,7 @@
       "serviceable": false,
       "sha512": ""
     },
-    "SinumerikOpcUaAPI/2.1.0.0": {
-      "type": "reference",
-      "serviceable": false,
-      "sha512": ""
-    },
-    "UAClientHelperAPI/1.0.0.0": {
+    "Siemens.OpcUA/0.0.0.0": {
       "type": "reference",
       "serviceable": false,
       "sha512": ""

BIN
IMCS_CCS/bin/Debug/netcoreapp3.1/IMCS_CCS.dll


BIN
IMCS_CCS/bin/Debug/netcoreapp3.1/IMCS_CCS.pdb


+ 2 - 1
IMCS_CCS/bin/Debug/netcoreapp3.1/appsettings.json

@@ -32,6 +32,7 @@
     "FTPServer": "192.168.170.25",
     "FTPUser": "PROG",
     "FTPPwd": "abc.1234",
-    "fanucUrlContext": "http://localhost:5100/fanuc/"
+    "fanucUrlContext": "http://localhost:5100/fanuc/",
+    "opcuacUrlContext": "http://localhost:8010/opcua/"
   }
 }

BIN
IMCS_CCS/obj/Debug/netcoreapp3.1/CCS.csproj.AssemblyReference.cache


+ 1 - 1
IMCS_CCS/obj/Debug/netcoreapp3.1/CCS.csproj.CoreCompileInputs.cache

@@ -1 +1 @@
-8e95d899bbd490476278a84ddd2e4a698f1fc726
+e364bda56df560de8131e038ae52ae34c02c9704

BIN
IMCS_CCS/obj/Debug/netcoreapp3.1/IMCS_CCS.dll


BIN
IMCS_CCS/obj/Debug/netcoreapp3.1/IMCS_CCS.pdb