Browse Source

opcua文件上传,启动程序接口

wzx 2 days ago
parent
commit
cacb702e12

+ 7 - 2
IMCS_CCS/Controllers/CcsController.cs

@@ -49,7 +49,7 @@ namespace IMCS.CCS.Controllers
         /// <summary>
         /// 查询设备状态: POST: api/GetEquipMent
         /// </summary> 
-        /// <returns></returns> 
+        /// <returns></returns>
         [Route("api/GetEquipMent")]
         [HttpPost]
         public async Task<ActionResult<List<EquipmentMonitor>>> GetEquipMent(){
@@ -71,7 +71,7 @@ namespace IMCS.CCS.Controllers
 
 
         /// <summary>
-        /// 预上传文件,下发请求上料nc指令: POST: api/PredictUploadFile
+        /// 预上传文件,下发请求上料nc指令: POST: api/PredictUploadFile  ===》只要海德汉操作系统会调用申请上料接口
         /// 300厂因为程序是提前放到机床里面的,所以不需要进行上传操作,只需要执行请求上料程序的启动即可
         /// </summary> 
         /// <returns></returns>
@@ -117,6 +117,11 @@ namespace IMCS.CCS.Controllers
             return await _httpRequestService.StartCleanMachine(data);
         }
 
+        /// <summary>
+        /// 启动吹气
+        /// </summary>
+        /// <param name="data"></param>
+        /// <returns></returns>
         [Route("api/StartDryMachine")]
         [HttpPost]
         public async Task<ActionResult<ResponseECSData>> StartDryMachine(RequestData<object> data)

+ 7 - 7
IMCS_CCS/Controllers/JobTasksController.cs

@@ -43,7 +43,7 @@ namespace IMCS.CCS.Controllers
             //return "not exist";
         }
         /// <summary>
-        /// 柔性产线,伺服回调任务
+        /// 柔性产线,伺服回调任务、机器人取放回调
         /// </summary> 
         /// <returns></returns>
         [HttpPost("CallbackJob2")]
@@ -52,7 +52,7 @@ namespace IMCS.CCS.Controllers
             return await _taskJobService.CallbackJob2();
         }
         /// <summary>
-        /// 打标机回调任务
+        /// 吹干机回调任务
         /// </summary> 
         /// <returns></returns>
         [HttpPost("CallbackJob3")]
@@ -61,7 +61,7 @@ namespace IMCS.CCS.Controllers
             return await _taskJobService.CallbackJob3();
         }
         /// <summary>
-        /// 启动机床程序,智能单元及质量中心取放回调任务
+        /// 启动机床程序回调任务
         /// </summary> 
         /// <returns></returns>
         [HttpPost("CallbackJob4")]
@@ -118,7 +118,7 @@ namespace IMCS.CCS.Controllers
         }
 
         /// <summary>
-        /// 监控设备状态
+        /// 监控设备状态 / 设备状态同步监控
         /// </summary> 
         /// <returns></returns>
         [HttpPost("MonitorEquipmentStatusJob")]
@@ -127,7 +127,7 @@ namespace IMCS.CCS.Controllers
             return await _taskJobService.MonitorEquipmentStatusJob();
         }
         /// <summary>
-        /// 监控设备状态
+        /// 监控设备状态  / 设备监控
         /// </summary> 
         /// <returns></returns>
         [HttpPost("DeviceStatusJob")]
@@ -141,9 +141,9 @@ namespace IMCS.CCS.Controllers
         /// <returns></returns> 
 
         [HttpPost("RemoveRedis")]
-        public void RemoveRedis()
+        public  void RemoveRedis()
         {
-            //_taskJobService.removeRedis();
+             _taskJobService.removeRedis();
         }
 
         /*

+ 38 - 7
IMCS_CCS/IMCS.CCS.xml

@@ -215,7 +215,7 @@
             <summary>
             查询设备状态: POST: api/GetEquipMent
             </summary> 
-            <returns></returns> 
+            <returns></returns>
         </member>
         <member name="M:IMCS.CCS.Controllers.CcsController.RobotAction(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.LocationData})">
             <summary>
@@ -225,7 +225,7 @@
         </member>
         <member name="M:IMCS.CCS.Controllers.CcsController.PredictUploadFile(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.UploadFileData})">
             <summary>
-            预上传文件,下发请求上料nc指令: POST: api/PredictUploadFile
+            预上传文件,下发请求上料nc指令: POST: api/PredictUploadFile  ===》只要海德汉操作系统会调用申请上料接口
             300厂因为程序是提前放到机床里面的,所以不需要进行上传操作,只需要执行请求上料程序的启动即可
             </summary> 
             <returns></returns>
@@ -248,6 +248,13 @@
             </summary> 
             <returns></returns>
         </member>
+        <member name="M:IMCS.CCS.Controllers.CcsController.StartDryMachine(IMCS.CCS.Models.RequestData{System.Object})">
+            <summary>
+            启动吹气
+            </summary>
+            <param name="data"></param>
+            <returns></returns>
+        </member>
         <member name="M:IMCS.CCS.Controllers.CcsController.UpdateDeviceState(IMCS.CCS.Models.RequestDeviceUpdateData)">
             <summary>
             设备上线离线: POST: api/UpdateDeviceState
@@ -348,13 +355,13 @@
         </member>
         <member name="M:IMCS.CCS.Controllers.JobTasksController.CallbackJob2">
             <summary>
-            柔性产线,伺服回调任务
+            柔性产线,伺服回调任务、机器人取放回调
             </summary> 
             <returns></returns>
         </member>
         <member name="M:IMCS.CCS.Controllers.JobTasksController.CallbackJob3">
             <summary>
-            打标机回调任务
+            吹干机回调任务
             </summary> 
             <returns></returns>
         </member>
@@ -396,13 +403,13 @@
         </member>
         <member name="M:IMCS.CCS.Controllers.JobTasksController.MonitorEquipmentStatusJob">
             <summary>
-            监控设备状态
+            监控设备状态 / 设备状态同步监控
             </summary> 
             <returns></returns>
         </member>
         <member name="M:IMCS.CCS.Controllers.JobTasksController.DeviceStatusJob">
             <summary>
-            监控设备状态
+            监控设备状态  / 设备监控
             </summary> 
             <returns></returns>
         </member>
@@ -412,6 +419,12 @@
             </summary> 
             <returns></returns> 
         </member>
+        <member name="M:IMCS.CCS.Controllers.JobTasksController.CallbackJob6">
+            <summary>
+            启动三坐标回调任务
+            </summary> 
+            <returns></returns>
+        </member>
         <member name="T:IMCS.CCS.Controllers.ProjectController">
             <summary>
             项目控制器
@@ -1481,7 +1494,7 @@
         </member>
         <member name="M:IMCS.CCS.Service.Impl.TaskJobService.DeviceStatusJob">
             <summary>
-            监控设备状态
+            监控设备状态 (实时监控设备状态,进行状态同步)
             </summary> 
             <returns></returns>
         </member>
@@ -1497,6 +1510,12 @@
             </summary> 
             <returns></returns>
         </member>
+        <member name="M:IMCS.CCS.Service.Impl.TaskJobService.CallbackJob6">
+            <summary>
+            放三坐标回调任务
+            </summary> 
+            <returns></returns>
+        </member>
         <member name="M:IMCS.CCS.Service.Impl.TaskJobService.GetFanucValue(IMCS_CCS.Model.vo.ResponseFanucData,System.String)">
             <summary>
             fanuc根据类型获取值
@@ -1661,6 +1680,12 @@
             </summary>
             <returns></returns>
         </member>
+        <member name="M:IMCS.CCS.Service.ITaskJobService.CallbackJob6">
+            <summary>
+            启动三坐标回调任务
+            </summary>
+            <returns></returns>
+        </member>
         <member name="M:IMCS.CCS.Service.ITaskJobService.DataCollectOPCUAJob">
             <summary>
             OPCUA采集
@@ -1697,6 +1722,12 @@
             </summary>
             <returns></returns>
         </member>
+        <member name="M:IMCS.CCS.Service.ITaskJobService.removeRedis">
+            <summary>
+            删除redis
+            </summary> 
+            <returns></returns>
+        </member>
         <member name="M:IMCS.CCS.Service.ITaskJobService.ManualModeCallback">
             <summary>
             plc手动模式下对点位移动数据进行同步

+ 3 - 0
IMCS_CCS/Model/vo/RequestOpcUaData.cs

@@ -27,6 +27,9 @@ namespace IMCS_CCS.Model.vo
 
         public List<string> Values
         { get; set; }
+
+        public string Ip
+        { get; set; }
     }
 
     /// <summary>

+ 2 - 2
IMCS_CCS/Service/ITaskJobService.cs

@@ -88,7 +88,7 @@ namespace IMCS.CCS.Service
         /// 删除redis
         /// </summary> 
         /// <returns></returns>
-        //void removeRedis();
+        void removeRedis();
 
 
 
@@ -97,6 +97,6 @@ namespace IMCS.CCS.Service
         /// </summary>
         /// <returns></returns>
         Task<string> ManualModeCallback();
-
+  
     }
 }

+ 257 - 118
IMCS_CCS/Service/Impl/HttpRequestService.cs

@@ -172,7 +172,9 @@ namespace IMCS.CCS.Services
         {
             Console.WriteLine("获取imcs数据:" + JsonConvert.SerializeObject(req));
             ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
-            
+            SiemensS7Net s7 = null;
+
+
             try
             {
                 List<Device> devices = _deviceService.GetDeviceList();
@@ -192,11 +194,10 @@ namespace IMCS.CCS.Services
                 actionQuery.Ip = req.url;
                 CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
 
-                SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
+                s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
                 OperateResult ConnectionResult = s7.ConnectServer();
                 if (!ConnectionResult.IsSuccess)
                 {
-                    s7.ConnectClose();
                     Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
                     EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
                     responseData.result = "false";
@@ -205,7 +206,7 @@ namespace IMCS.CCS.Services
                 } 
                 CcsActionAddress actionAddressQuery = new CcsActionAddress();
                 actionAddressQuery.ActionId = actionInfo.Id;
-                List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery); 
+                List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
                
                 //查询条件
                 List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
@@ -216,7 +217,6 @@ namespace IMCS.CCS.Services
                         string operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
                         if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
                         {
-                            s7.ConnectClose();
                             Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
                             EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
                             responseData.msg = ActionTypeEnum.RobotAction + "异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req);
@@ -263,7 +263,7 @@ namespace IMCS.CCS.Services
                     }
                 }
 
-                
+
                 //CcsActionAddress checkAddressSucess = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK_SUCESS.ToString()).FirstOrDefault();
                 //if (checkAddressSucess != null)
                 //{
@@ -277,7 +277,6 @@ namespace IMCS.CCS.Services
                 //        return responseData;
                 //    }
                 //}
-                s7.ConnectClose();
 
                 //插入回调
                 TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.RobotAction.ToString(),
@@ -289,6 +288,36 @@ namespace IMCS.CCS.Services
                    , EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
                 responseData.msg = EnumHelper.GetDescription(ActionTypeEnum.RobotAction) + "取成功===>>" + JsonConvert.SerializeObject(req);
                 return responseData;
+
+                //查询回调表是否存在此数据(避免在数据重复下发时,产生多条回调数据)  ************************
+                //TaskCallback vo = new TaskCallback(req.url, ActionTypeEnum.UploadFile.ToString(),
+                //    null, req.taskId, req.taskNodeId);
+
+                /*TaskCallback vo = new TaskCallback(req.url, ActionTypeEnum.RobotAction.ToString(),
+                    null, req.taskId, req.taskNodeId);
+                
+
+                List<TaskCallback> taskCallbackList = await _taskCallbackService.GetListByCondition(vo);
+                //插入回调
+                TaskCallback taskCallbackData = new TaskCallback();
+                if (taskCallbackList != null && taskCallbackList.Count > 0)
+                {
+                    taskCallbackData = taskCallbackList[0];
+
+                    taskCallbackData.State = true;
+                }
+                else
+                {
+                    taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.RobotAction.ToString(),
+                                        EnumHelper.GetDescription(ActionTypeEnum.RobotAction), req.taskId, req.taskNodeId);
+                }
+                taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData);
+                await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
+                Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.RobotAction) + "取成功===>>" + JsonConvert.SerializeObject(req)
+                   , EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
+                responseData.msg = EnumHelper.GetDescription(ActionTypeEnum.RobotAction) + "取成功===>>" + JsonConvert.SerializeObject(req);
+                return responseData;*/
+
             }
             catch (Exception ex)
             {
@@ -298,6 +327,10 @@ namespace IMCS.CCS.Services
                 responseData.msg = ActionTypeEnum.RobotAction + "取异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
                 return responseData;
             }
+            finally
+            {
+                s7.ConnectClose();
+            }
         }
 
         // 预上传文件,下发请求上料nc指令
@@ -326,52 +359,54 @@ namespace IMCS.CCS.Services
                 }
 
                 //海德汉系统需要进行预上传,发送上料请求
-/*               if (deviceHeidenhain != null)
+                /*               if (deviceHeidenhain != null)
+                                {
+                                    RequestHeidhData hdhReq = new RequestHeidhData();
+                                    hdhReq.ServerUrl = deviceHeidenhain.ServerUrl;
+                                    hdhReq.MachineName = deviceHeidenhain.UserName;
+                                    hdhReq.Path = req.data.fileName;
+                                    hdhReq.Type = OpcUaActionTypeEnum.Upload.ToString();
+                                    //远程机床相对路径
+                                    hdhReq.Address = req.data.remotePath;
+
+                                    Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "预上传传参,发送请求上料申请===>>" + JsonConvert.SerializeObject(hdhReq),
+                                       EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
+
+                                    var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
+                                    ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
+                                    if (!Result.IsSuccess || !responseHeidhData.result)
+                                    {
+                                        Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "预上传异常,发送请求上料申请===>>" + JsonConvert.SerializeObject(req),
+                                        EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
+                                        responseData.result = "false";
+                                        responseData.msg = ActionTypeEnum.UploadFile + "预上传异常,发送请求上料申请===>>" + JsonConvert.SerializeObject(req);
+                                        return responseData;
+                                    }
+                                }
+
+                                Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "预上传成功,发送请求上料申请===>>" + JsonConvert.SerializeObject(req),
+                                    EnumHelper.GetDescription(ActionTypeEnum.UploadFile));*/
+
+                if (deviceHeidenhain != null)
                 {
-                    RequestHeidhData hdhReq = new RequestHeidhData();
-                    hdhReq.ServerUrl = deviceHeidenhain.ServerUrl;
-                    hdhReq.MachineName = deviceHeidenhain.UserName;
-                    hdhReq.Path = req.data.fileName;
-                    hdhReq.Type = OpcUaActionTypeEnum.Upload.ToString();
-                    //远程机床相对路径
-                    hdhReq.Address = req.data.remotePath;
-
-                    Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "预上传传参,发送请求上料申请===>>" + JsonConvert.SerializeObject(hdhReq),
-                       EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
-
-                    var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
-                    ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
-                    if (!Result.IsSuccess || !responseHeidhData.result)
+                    // 启动程序,使机床变为可上料状态
+                    RequestHeidhData hdhReq2 = new RequestHeidhData();
+                    hdhReq2.ServerUrl = deviceHeidenhain.ServerUrl;
+                    hdhReq2.MachineName = deviceHeidenhain.UserName;
+                    hdhReq2.Path = Path.GetFileName(req.data.fileName);
+                    hdhReq2.Type = HeidnActionTypeEnum.ApplyFeeding.ToString();
+                    hdhReq2.Address = req.data.remotePath;
+                    var ResultStatus = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq2, null);
+                    ResponseHeidhData responseHeidhData2 = JsonConvert.DeserializeObject<ResponseHeidhData>(ResultStatus.Message);
+                    if (!ResultStatus.IsSuccess || !responseHeidhData2.result)
                     {
-                        Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "预上传异常,发送请求上料申请===>>" + JsonConvert.SerializeObject(req),
-                        EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
+                        Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(hdhReq2),
+                        EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
                         responseData.result = "false";
-                        responseData.msg = ActionTypeEnum.UploadFile + "预上传异常,发送请求上料申请===>>" + JsonConvert.SerializeObject(req);
+                        responseData.msg = ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(hdhReq2);
                         return responseData;
                     }
                 }
-
-                Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "预上传成功,发送请求上料申请===>>" + JsonConvert.SerializeObject(req),
-                    EnumHelper.GetDescription(ActionTypeEnum.UploadFile));*/
-
-                // 启动程序,使机床变为可上料状态
-                RequestHeidhData hdhReq2 = new RequestHeidhData();
-                hdhReq2.ServerUrl = deviceHeidenhain.ServerUrl;
-                hdhReq2.MachineName = deviceHeidenhain.UserName;
-                hdhReq2.Path = Path.GetFileName(req.data.fileName);                
-                hdhReq2.Type = HeidnActionTypeEnum.ApplyFeeding.ToString();
-                hdhReq2.Address = req.data.remotePath;
-                var ResultStatus = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq2, null);
-                ResponseHeidhData responseHeidhData2 = JsonConvert.DeserializeObject<ResponseHeidhData>(ResultStatus.Message);
-                if (!ResultStatus.IsSuccess || !responseHeidhData2.result)
-                {
-                    Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(hdhReq2),
-                    EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
-                    responseData.result = "false";
-                    responseData.msg = ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(hdhReq2);
-                    return responseData;
-                }
-
             }
             catch (Exception ex)
             {
@@ -414,6 +449,7 @@ namespace IMCS.CCS.Services
         public async Task<ResponseECSData> UploadFile(RequestData<UploadFileData> req)
         {
             ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
+            SiemensS7Net s7 = null;
 
             try
             {
@@ -437,13 +473,59 @@ namespace IMCS.CCS.Services
                 //西门子系统上传
                 if (deviceOpcUa != null)
                 {
+                    //前置条件 机床是否空闲  
+                    CcsAction actionQuery = new CcsAction();
+                    actionQuery.Ip = req.url;
+                    CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
+
+                    s7 = DevicePlcS7.SiemensS7(actionInfo.PlcIp);
+                    OperateResult ConnectionResult = s7.ConnectServer();
+                    if (!ConnectionResult.IsSuccess)
+                    {
+                        Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "上传程序异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
+                        EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
+                        responseData.result = "false";
+                        responseData.msg = req.url + "PLC连接不上";
+                        return responseData;
+                    }
+
+
+                    CcsActionAddress actionAddressQuery = new CcsActionAddress();
+                    actionAddressQuery.ActionId = actionInfo.Id;
+                    List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
+
+                    //查询启动条件
+                    List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
+                    foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
+                    {   //机床是否空闲
+                        if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
+                        {
+                            string operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
+
+                            if (actionAddress.CheckType ? !(operateResult.Equals(actionAddress.Value)) : operateResult != actionAddress.Value)
+                            {
+                                Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传程序异常===>>" + "机床状态不满足" + JsonConvert.SerializeObject(req),
+                                EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
+                                responseData.result = "false";
+                                responseData.msg = ActionTypeEnum.UploadFile + "上传程序异常,机床状态不满足===>>" + JsonConvert.SerializeObject(req);
+
+                                Thread.Sleep(5000); // 等待机床上料完成,处于空闲状态(目前的上料完成信号是机器人的)
+                                return responseData;
+                            }
+                        }
+                    }
+
+
                     RequestOpcUaData opcUaReq = new RequestOpcUaData();
                     opcUaReq.ServerUrl = deviceOpcUa.ServerUrl;
                     opcUaReq.UserName = deviceOpcUa.UserName;
                     opcUaReq.Password = deviceOpcUa.Password;
-                    opcUaReq.Path = req.data.fileName;
                     opcUaReq.Type = OpcUaActionTypeEnum.Upload.ToString();
+                    opcUaReq.Path = req.data.fileName;
+                    opcUaReq.Ip = req.url;
+
                     var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, opcuacUrlContext, opcUaReq, null);
+                    
                     ResponseOpcUaData responseOpcUaData = JsonConvert.DeserializeObject<ResponseOpcUaData>(Result.Message);
                     if (!Result.IsSuccess || !responseOpcUaData.result)
                     {
@@ -453,6 +535,7 @@ namespace IMCS.CCS.Services
                         responseData.msg = ActionTypeEnum.UploadFile + "上传异常===>>" + JsonConvert.SerializeObject(req);
                         return responseData;
                     }
+                    
                 }
                 else if(deviceHeidenhain != null)
                 { 
@@ -469,6 +552,7 @@ namespace IMCS.CCS.Services
                        EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
 
                     var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
+                    //因为报错信息是:
                     ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
                     if (!Result.IsSuccess || !responseHeidhData.result)
                     {
@@ -478,7 +562,9 @@ namespace IMCS.CCS.Services
                         responseData.msg = ActionTypeEnum.UploadFile + "上传异常===>>" + JsonConvert.SerializeObject(req);
                         return responseData;
                     }  
-                }  
+                }
+
+
                 //插入回调
                 TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.UploadFile.ToString(),
                 EnumHelper.GetDescription(ActionTypeEnum.UploadFile), req.taskId, req.taskNodeId);
@@ -487,6 +573,9 @@ namespace IMCS.CCS.Services
                     EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
                 responseData.msg = ActionTypeEnum.UploadFile + "上传成功===>>" + JsonConvert.SerializeObject(req);
                 return responseData;
+
+
+                
             }
             catch (Exception ex)
             {
@@ -505,6 +594,8 @@ namespace IMCS.CCS.Services
         public async Task<ResponseECSData> StartNCProgram(RequestData<StartNCProgramData> req)
         {
             ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
+            SiemensS7Net s7 = null;
+            Boolean DEVICE_BUSY = false;
             try
             {
                 List<Device> devices = _deviceService.GetDeviceList();
@@ -528,70 +619,112 @@ namespace IMCS.CCS.Services
                 CcsActionAddress actionAddressQuery = new CcsActionAddress();
                 actionAddressQuery.ActionId = actionInfo.Id;
                 List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
-                //opcua启动程序
+
+
+                //opcua启动程序    
                 if (actionInfo.ProtocolType == ProtocalTypeEnum.OPCUA.ToString())
-                { 
-                    //插入回调
-                    //获取启动前放的 工位
-                    TaskCallback queryTaskCallBack = new TaskCallback();
-                    queryTaskCallBack.IP = actionInfo.PlcIp;
-                    queryTaskCallBack.Description = ProtocalTypeEnum.OPCUA.ToString();
-                    TaskCallback TaskBean = await _taskCallbackService.GetRobotActionList(queryTaskCallBack);
-
-                    TaskCallback taskCallbackData = new TaskCallback(actionInfo.PlcIp, ActionTypeEnum.StartNCProgram.ToString(),
-                    EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram), req.taskId, req.taskNodeId);
-                    taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData);
-                    taskCallbackData.Description = ProtocalTypeEnum.OPCUA.ToString();
-                    if(TaskBean != null)
+                {
+
+                    s7 = DevicePlcS7.SiemensS7(actionInfo.PlcIp);
+                    OperateResult ConnectionResult = s7.ConnectServer();
+
+                    
+                    if (!ConnectionResult.IsSuccess)
                     {
-                        taskCallbackData.Data = TaskBean.Data;
+                        Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
+                        EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
+                        responseData.result = "false";
+                        responseData.msg = req.url + "PLC连接不上";
+                        return responseData;
                     }
-                    else
+
+                    //查询启动条件 
+                    List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
+                    foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
+                    {   //机床是否空闲
+                        if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
+                        {
+                            string operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
+                                                        
+                            if (actionAddress.CheckType ? !(operateResult.Equals(actionAddress.Value)) : operateResult != actionAddress.Value)
+                            {                              
+                                                           
+                                Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "机床状态不满足" + JsonConvert.SerializeObject(req),
+                                EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
+                                responseData.result = "false";
+                                responseData.msg = req.url + "机床状态不满足,地址:" + actionAddress.Address + "值:" + operateResult;
+                                return responseData;
+                            }
+                        }
+                    }
+
+                    //写入地址
+                    List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
+                    foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
                     {
-                        Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "失败,上一放动作 没有工位信息===>>" + JsonConvert.SerializeObject(req),
-                       EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
-                        responseData.msg = ActionTypeEnum.StartNCProgram + "失败,上一放动作 没有工位信息===>>" + JsonConvert.SerializeObject(req);
-                        return responseData;
+                        if (!string.IsNullOrEmpty(actionAddress.Address))
+                        {
+                            s7.Write(actionAddress.Address, Convert.ToBoolean(actionAddress.Value));
+
+                            Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram) +
+                            "写入===>>" + "地址:" + actionAddress.Address + "【" + actionAddress.Value + "】"
+                            , EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
+                        }
+                    }
+                   
+
+                    Thread.Sleep(2000);
+
+                    /*
+                    //先查再写
+                    foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
+                    {   //机床是否空闲
+                        if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
+                        {
+                            string operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
+                            if (actionAddress.CheckType ? operateResult.Equals(actionAddress.Value) : operateResult != actionAddress.Value)
+                            {                               
+
+                                Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "机床启动后状态异常===>>" + JsonConvert.SerializeObject(req),
+                                EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
+                                responseData.result = "false";
+                                responseData.msg = req.url + "机床启动后状态异常==,地址:" + actionAddress.Address + "值:" + operateResult;
+                                
+
+                                List<CcsActionAddress> CcsActionAddressStart = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
+                                foreach (CcsActionAddress actionAddressSt in CcsActionAddressStart)
+                                {
+                                    if (!string.IsNullOrEmpty(actionAddressSt.Address))
+                                    {
+                                        s7.Write(actionAddressSt.Address, DEVICE_BUSY);
+                                        Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "机床启动后状态异常===>>西门子启动信号清零" + JsonConvert.SerializeObject(req),
+                                             EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
+                                    }
+                                }
+                                return responseData;
+                            }
+                        }
                     }
+                    */
                     
-                    await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
-                    Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req),
-                        EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
-                    responseData.msg = ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req);
-                    return responseData; 
+                    
+
+                    //查询写入地址   
+                    List<CcsActionAddress> CcsActionAddressDeclear = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
+                    foreach (CcsActionAddress actionAddressDe in CcsActionAddressDeclear)
+                    {
+                        if (!string.IsNullOrEmpty(actionAddressDe.Address))
+                        {
+                            s7.Write(actionAddressDe.Address, DEVICE_BUSY);
+                            Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "机床启动成功===>>西门子启动信号清零" + JsonConvert.SerializeObject(req),
+                                 EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
+                        }
+                    }
 
-                }  else if (actionInfo.ProtocolType == ProtocalTypeEnum.HEIDEHAIN.ToString()) 
+                }
+                else if (actionInfo.ProtocolType == ProtocalTypeEnum.HEIDEHAIN.ToString()) 
                 { 
-                    //调用机器人plc启动海德汉程序 
-                    //SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.PlcIp);
-                    //OperateResult ConnectionResult = s7.ConnectServer();
-                    //if (!ConnectionResult.IsSuccess)
-                    //{
-                    //    s7.ConnectClose();
-                    //    Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
-                    //    EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
-                    //    responseData.result = "false";
-                    //    return responseData;
-                    //}
-                        
-                    ////查询条件
-                    //List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
-                    //foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
-                    //{
-                    //    if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
-                    //    {
-                             
-                    //        string operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
-                    //        if (actionAddress.CheckType ? operateResult.Equals(actionAddress.Value) : operateResult != actionAddress.Value)
-                    //        {
-                    //            s7.ConnectClose();
-                    //            Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
-                    //            EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
-                    //            responseData.result = "false";
-                    //            return responseData;
-                    //        }
-                    //    }
-                    //}
+                   
                     
                         RequestHeidhData hdhReq = new RequestHeidhData();
                         hdhReq.ServerUrl = device.ServerUrl;
@@ -609,17 +742,6 @@ namespace IMCS.CCS.Services
                             return responseData;
                         }
 
-                    
-                    //s7.ConnectClose();
-
-                    //插入回调
-                    TaskCallback taskCallbackData = new TaskCallback(actionInfo.PlcIp, ActionTypeEnum.StartNCProgram.ToString(),
-                    EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram), req.taskId, req.taskNodeId);
-                    await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, taskCallbackData));
-                    Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req),
-                        EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
-                    responseData.msg = ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req);
-                    return responseData;
                 }
                 else
                 {
@@ -630,15 +752,30 @@ namespace IMCS.CCS.Services
                     return responseData;
                 }
 
+
+                //插入回调
+                TaskCallback taskCallbackData = new TaskCallback(actionInfo.PlcIp, ActionTypeEnum.StartNCProgram.ToString(),
+                EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram), req.taskId, req.taskNodeId);
+                await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, taskCallbackData));
+                Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req),
+                    EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
+                responseData.msg = ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req);
+                return responseData;
+
+
             }
             catch (Exception ex)
             {
-                Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "程序异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
+                Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动失败,程序异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
                     EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
                 responseData.result = "false";
-                responseData.msg = ActionTypeEnum.StartNCProgram + "程序异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
+                responseData.msg = ActionTypeEnum.StartNCProgram + "启动失败,程序异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
                 return responseData;
             }
+            finally
+            {
+                s7.ConnectClose();
+            }
         }
     
 
@@ -900,6 +1037,8 @@ namespace IMCS.CCS.Services
                 return responseData;
             }
         }
+
+
         /// <summary>
         /// 获取回调列表
         /// </summary> 

+ 21 - 13
IMCS_CCS/Service/Impl/TaskJobService.cs

@@ -122,6 +122,7 @@ namespace IMCS.CCS.Service.Impl
             syncStatusMap.Add("掉线", -1);
             
         }
+        
 
         /// <summary>
         /// 采集数据OPCUA
@@ -135,6 +136,12 @@ namespace IMCS.CCS.Service.Impl
 
                 deviceList = deviceList.Where(x => x.ProtocolType.Equals(ProtocalTypeEnum.OPCUA.ToString()) && x.State).ToList();
 
+
+                if (deviceList == null || deviceList.Count == 0)
+                {
+                    Log.Instance.WriteLogAdd("=== 无在线设备 ===", LOG_TITLE_OPCUA);
+                    return "无在线设备";
+                }
                 foreach (Device device in deviceList)
                 {
                     List<CcsTagValue> tagValues = new List<CcsTagValue>();
@@ -166,13 +173,13 @@ namespace IMCS.CCS.Service.Impl
                         {
                             addresses.Add(tagValue.Address);
                         }
-                        //调用opcua是否连接接口
+                        //调用opcua是否连接接口   采集数据 
                         RequestOpcUaData opcUaReq = new RequestOpcUaData();
                         opcUaReq.ServerUrl = device.ServerUrl;
                         opcUaReq.UserName = device.UserName;
                         opcUaReq.Password = device.Password;
                         opcUaReq.Type = OpcUaActionTypeEnum.Read.ToString();
-                        opcUaReq.Addresses = addresses;
+                        opcUaReq.Addresses = addresses; // 读取数据地址
                         var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, opcuacUrlContext, opcUaReq, null);
                         ResponseOpcUaData responseOpcUaData = JsonConvert.DeserializeObject<ResponseOpcUaData>(Result.Message);
                         if (!Result.IsSuccess || !responseOpcUaData.result)
@@ -302,7 +309,7 @@ namespace IMCS.CCS.Service.Impl
                         {
                             foreach (CcsTagValue tagValueData in tagValues)
                             {
-                                string operateResult = "";
+                                string operateResult = "";//操作结果
                                 if (tagValueData.Type.Equals(TagValueReadTypeEnum.BOOL.ToString()))
                                 {
                                     operateResult = s7.ReadBool(tagValueData.Address).Content.ToString();
@@ -452,8 +459,8 @@ namespace IMCS.CCS.Service.Impl
             {
                 list = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
             }
-
-            TaskCallback task = list.Where(x => x.OperateType.Equals(ActionTypeEnum.UploadFile.ToString())).FirstOrDefault();
+            
+            TaskCallback task = list.Where(x => x.OperateType.Equals(ActionTypeEnum.UploadFile.ToString()) && x.State).FirstOrDefault();
             if (task == null)
             {
                 return "无回调任务";
@@ -516,7 +523,7 @@ namespace IMCS.CCS.Service.Impl
 
             taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.RobotAction.ToString())).ToList();
             taskList = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).ToList();
-            //TaskCallback task = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).FirstOrDefault() ; 
+            // TaskCallback task = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).FirstOrDefault() ; 
             if (taskList == null || taskList.Count == 0)
             {
                 return "无回调任务" ;
@@ -806,7 +813,7 @@ namespace IMCS.CCS.Service.Impl
                     List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery);
                     CcsTagValue tagValue = tagValues.Where(o => o.Address == task.Address.Trim()).FirstOrDefault(); 
                 
-                    if (tagValue != null && tagValue.TagValue == task.CallbackValue ) 
+                    if (tagValue != null && tagValue.TagValue == task.CallbackValue ) // 
                     {
                         CallBackRequestData requestData = new CallBackRequestData();
                         requestData.taskId = long.Parse(task.TaskId);
@@ -894,6 +901,7 @@ namespace IMCS.CCS.Service.Impl
                 return "回调异常" + ex.Message;
             }
         }
+
         /// <summary>
         /// 启动清洗机回调任务
         /// </summary> 
@@ -1111,7 +1119,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 == "OPCUA"))
                     {
                         //通过数组获取机床对应的PLC ip地址
                         string plcIp = jcIpDict[device.Ip]; 
@@ -1383,7 +1391,7 @@ namespace IMCS.CCS.Service.Impl
         }
 
         /// <summary>
-        /// 监控设备状态
+        /// 监控设备状态 (实时监控设备状态,进行状态同步)
         /// </summary> 
         /// <returns></returns>
         public async Task<string> DeviceStatusJob()
@@ -1411,7 +1419,7 @@ namespace IMCS.CCS.Service.Impl
                 {
                     Ping pingSender = new Ping();
                     PingReply reply = pingSender.Send(device.Ip);
-                    if (reply.Status != IPStatus.Success)
+                    if (reply.Status != IPStatus.Success) // ping不通--修改状态
                     {
                         Device oldDevice = await _deviceService.GetDeviceById(device.Id);
                         if (oldDevice != null && oldDevice.State)
@@ -1425,7 +1433,7 @@ namespace IMCS.CCS.Service.Impl
                         message = message + device.Ip + ",连接失败,或已离线,ip:" + device.Ip + ",协议类型:" + device.ProtocolType;
                         continue;
                     }
-                    else
+                    else 
                     {
                         Device oldDevice = await _deviceService.GetDeviceById(device.Id);
                         if (oldDevice != null && !oldDevice.State)
@@ -1470,7 +1478,7 @@ namespace IMCS.CCS.Service.Impl
         /// plc手动模式下对点位移动数据进行同步
         /// </summary> 
         /// <returns></returns>
-        public async Task<string> ManualModeCallback()
+            public async Task<string> ManualModeCallback()
         {
             List<Device> deviceList = await getDeviceList();
             deviceList = deviceList.Where(x => x.ProtocolType.Equals(ProtocalTypeEnum.S7_1500.ToString()) && x.State).ToList();
@@ -1756,7 +1764,7 @@ namespace IMCS.CCS.Service.Impl
         {
             List<Device> deviceList = new List<Device>();
             var deviceListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.DeviceList);
-            if (deviceListData.IsNullOrEmpty || deviceListData.Length() == 0)
+            if (deviceListData.IsNullOrEmpty || deviceListData.Length() == 0 || "[]".Equals(deviceListData))
             {
                 deviceList = _deviceService.GetDeviceList();
                 await _redisService.Database.StringSetAsync(imcs_redis_key + RedisKeyEnum.DeviceList, JsonConvert.SerializeObject(deviceList));

+ 0 - 1
IMCS_CCS/Startup.cs

@@ -50,7 +50,6 @@ namespace IMCS.CCS
                 c.IncludeXmlComments(xmlPath, true);
 
             
-
             });
 
             //ʹÓÃmysql 

+ 12 - 6
IMCS_CCS/appsettings.json

@@ -10,21 +10,27 @@
   "TokenKey": "Authorization",
   "TokenValue": "123456",
   "JwtKeyName": "JwtKeyName",
-  "JwtSecurityKey": "1CC76841-F25D-4389-89FE-0F9451163CF1", 
+  "JwtSecurityKey": "1CC76841-F25D-4389-89FE-0F9451163CF1",
   "DbPath": {
     "Project": "/db/Projects.json",
     "Tasks": "/db/Tasks.json"
-  }, 
-  "UseRedis": "0",  
+  },
+  "UseRedis": "0",
   "RedisDbPath": {
     "Project": "IMCS.CCS:Project",
     "Tasks": "IMCS.CCS:Tasks"
-  },  
+  },
+  //"RedisConnectionString": "127.0.0.1:6379,password=,defaultDatabase=0",
   "RedisConnectionString": "20.20.47.108:6379,password=123456,defaultDatabase=0",
+
   "ConnectionStrings": {
     "mysqlContext": "server=20.20.47.108;port=3306;database=ccs_300;uid=root;pwd=adminoyq;CharSet=utf8;Allow Zero Datetime=True",
-    "ecsUrlContext": "http://20.20.47.108:9099/api/authority/taskNode/taskNodeCallback",
-    "ManualModeCallbackUrlContext": "http://20.20.47.108:9099/api/authority/toolbar/updateStorge",
+    //"mysqlContext": "server=127.0.0.1;port=3306;database=ccs_300;uid=root;pwd=root;CharSet=utf8;Allow Zero Datetime=True",
+
+    "ecsUrlContext": "http://127.0.0.1/api/authority/taskNode/taskNodeCallback",
+    //"ecsUrlContext": "http://127.0.0.1:9099/api/authority/taskNode/taskNodeCallback",
+
+    "ManualModeCallbackUrlContext": "http://127.0.0.1/api/authority/toolbar/updateStorgeCallback",
     //"FTPServer": "192.168.170.25",
     //"FTPUser": "PROG",
     //"FTPPwd": "abc.1234",

File diff suppressed because it is too large
+ 0 - 0
IMCS_CCS/wwwroot/db/Tasks.json


Some files were not shown because too many files changed in this diff