lxb 10 ماه پیش
والد
کامیت
85164af757

+ 101 - 0
IMCS_CCS/Controllers/CcsController.cs

@@ -180,5 +180,106 @@ namespace IMCS.CCS.Controllers
         {
             return await _httpRequestService.DeleteFileWithOutTask(data);
         }
+
+        /// <summary>
+        /// 读取点位: POST: api/readPoint
+        /// </summary> 
+        /// <returns></returns>
+        [Route("api/readPoint")]
+        [HttpPost]
+        public async Task<ActionResult<ResponseCCSData<List<ResponseEcsPoint>>>> readPoint(RequestData<RequestPoint> data)
+        {
+            return await _httpRequestService.readPoint(data);
+        }
+
+        /// <summary>
+        /// 写入点位: POST: api/writePoint
+        /// </summary> 
+        /// <returns></returns>
+        [Route("api/writePoint")]
+        [HttpPost]
+        public async Task<ActionResult<ResponseECSData>> writePoint(RequestData<RequestPoint> data)
+        {
+            return await _httpRequestService.writePoint(data);
+        }
+
+        /// <summary>
+        /// 更新刀具库数据: POST: api/updateToolInfo
+        /// </summary> 
+        /// <returns></returns>
+        [Route("api/updateToolInfo")]
+        [HttpPost]
+        public async Task<ActionResult<ResponseECSData>> updateToolInfo(RequestData<ToolData> data)
+        {
+            return await _httpRequestService.updateToolInfo(data);
+        }
+
+        /// <summary>
+        /// 读写RFID临时: POST: api/WriteRFIDTemp
+        /// </summary> 
+        /// <returns></returns>
+        [Route("api/WriteRFIDTemp")]
+        [HttpPost]
+        public async Task<ActionResult<ResponseECSData>> WriteRFIDTemp(RequestData<RFIData> data)
+        {
+            return await _httpRequestService.WriteRFIDTemp(data);
+        }
+
+        /// <summary>
+        /// 手动换刀
+        /// </summary> 
+        /// <returns></returns>
+        [Route("api/HandleChangeTool")]
+        [HttpPost]
+        public async Task<ActionResult<ResponseECSData>> HandleChangeTool(RequestData<HandleChangeTool> data)
+        {
+            return await _httpRequestService.HandleChangeTool(data);
+        }
+
+
+        /// <summary>
+        /// 刀具出库
+        /// </summary> 
+        /// <returns></returns>
+        [Route("api/StorgeOut")]
+        [HttpPost]
+        public async Task<ActionResult<ResponseECSData>> StorgeOut(RequestData<RFIData> data)
+        {
+            return await _httpRequestService.StorgeOut(data);
+        }
+
+        /// <summary>
+        /// 手动处理机器人取放动作: POST: api/HandRobotAction
+        /// </summary> 
+        /// <returns></returns>
+        [Route("api/HandRobotAction")]
+        [HttpPost]
+        public async Task<ActionResult<ResponseECSData>> HandRobotAction(RequestData<LocationData> data)
+        {
+            return await _httpRequestService.HandRobotAction(data);
+        }
+
+        /// <summary>
+        /// 拍照: POST: api/TakePhoto
+        /// </summary> 
+        /// <returns></returns>
+        [Route("api/TakePhoto")]
+        [HttpPost]
+        public async Task<ActionResult<ResponseECSData>> TakePhoto(RequestData<LocationData> data)
+        {
+            return await _httpRequestService.TakePhoto(data);
+        }
+
+        /// <summary>
+        /// 任务更新刀库数据: POST: api/UpdateMachineTool
+        /// </summary> 
+        /// <returns></returns>
+        [Route("api/UpdateMachineTool")]
+        [HttpPost]
+        public async Task<ResponseECSData> UpdateMachineTool(RequestData<ToolData> data)
+        {
+            return await _httpRequestService.UpdateMachineTool(data);
+        }
+
     }
 }

+ 42 - 2
IMCS_CCS/Controllers/JobTasksController.cs

@@ -105,11 +105,11 @@ namespace IMCS.CCS.Controllers
         /// 监控设备状态
         /// </summary> 
         /// <returns></returns>
-        [HttpPost("MonitorEquipmentStatusJob")]
+        /*[HttpPost("MonitorEquipmentStatusJob")]
         public async Task<string> MonitorEquipmentStatusJob()
         {
             return await _taskJobService.MonitorEquipmentStatusJob();
-        }
+        }*/
         /// <summary>
         /// 监控设备状态
         /// </summary> 
@@ -139,5 +139,45 @@ namespace IMCS.CCS.Controllers
         {
             return await _taskJobService.PlcHeartbeatJob();
         }
+
+        /// <summary>
+        /// 监控设备状态
+        /// </summary> 
+        /// <returns></returns>
+        [HttpPost("MonitorEquipmentStatusJob")]
+        public async Task<string> MonitorEquipmentStatusJob2()
+        {
+            return await _taskJobService.MonitorEquipmentStatusJob2();
+        }
+
+        /// <summary>
+        /// 拍照回调
+        /// </summary> 
+        /// <returns></returns>
+        [HttpPost("CallTakePhoto")]
+        public async Task<string> CallTakePhoto()
+        {
+            return await _taskJobService.CallTakePhoto();
+        }
+
+        /// <summary>
+        ///  PLC报警信息
+        /// </summary> 
+        /// <returns></returns>
+        [HttpPost("PlcAlarm")]
+        public async Task<string> PlcAlarm()
+        {
+            return await _taskJobService.PlcAlarm();
+        }
+
+        /// <summary>
+        ///  更新机床刀库回调
+        /// </summary> 
+        /// <returns></returns>
+        [HttpPost("CallUpdateMachineTool")]
+        public async Task<string> CallUpdateMachineTool()
+        {
+            return await _taskJobService.CallUpdateMachineTool();
+        }
     }
 }

+ 6 - 1
IMCS_CCS/Entitys/CcsAction.cs

@@ -55,7 +55,12 @@ namespace IMCS.CCS.Entitys
         WriteRFID,
         [EnumDescription("读RFID")]
         ReadRFID,
-
+        [EnumDescription("手动刀具出库")]
+        ToolOut,
+        [EnumDescription("机器人拍照")]
+        TakePhoto,
+        [EnumDescription("更新机床刀库")]
+        UpdateMachineTool
     }
 
     /// <summary>

+ 3 - 0
IMCS_CCS/Entitys/CcsActionAddress.cs

@@ -33,6 +33,9 @@ namespace IMCS.CCS.Entitys
 
         [Column("description")]
         public string Description { get; set; }
+
+        [Column("data_type")]
+        public string dataType { get; set; }
     }
 
     /// <summary>

+ 245 - 5
IMCS_CCS/Entitys/RequestData.cs

@@ -1,4 +1,4 @@
-
+using System.Collections.Generic;
 namespace IMCS.CCS.Models
 {
     public class LocationData   
@@ -32,7 +32,7 @@ namespace IMCS.CCS.Models
         /// <summary>
         /// 任务类型 1:运输   512:移动至位置 1024:换工具 2048:读写RFID
         /// </summary>
-        public string taskType { get; set; }
+        public string taskType { get; set; } 
 
         /// <summary>
         /// 搬运类型 1:托盘类型1-单孔 2:托盘类型2-双孔 4:刀具类型 256:手爪类型1-托盘 257:手爪类型2-刀具 
@@ -43,6 +43,24 @@ namespace IMCS.CCS.Models
         /// IPC模式 0:无模式 1:手动模式 256:自动模式
         /// </summary>
         public string mode { get; set; }
+        /// <summary>
+        /// RFID 确认
+        /// </summary>
+        public string rfidConfirm { get; set; } = "0";
+
+        /// <summary>
+        /// RFID
+        /// </summary>
+        public string rfid { get; set; }
+        /// <summary>
+        /// AGV状态
+        /// </summary>
+        public string agvState { get; set; }
+
+        /// <summary>
+        /// rfid距离
+        /// </summary>
+        public string rfidRange { get; set; } = "0";
     }
 
     public class UploadFileData
@@ -56,6 +74,11 @@ namespace IMCS.CCS.Models
         /// 文件路径
         /// </summary>
         public string remotePath { get; set; }
+
+        /// <summary>
+        /// 子文件集合
+        /// </summary>
+        public List<string> subFileList { get; set; }
     }
 
     public class StartNCProgramData
@@ -143,9 +166,97 @@ namespace IMCS.CCS.Models
     public class RFIData
     {
         /// <summary>
-        /// 写入内容
+        /// 刀具ID
+        /// </summary>
+        public string toolId { get; set; }
+        /// <summary>
+        /// 刀柄ID
+        /// </summary>
+        public string toolHandleId { get; set; }
+        /// <summary>
+        /// 刀号
+        /// </summary>
+        public string tno { get; set; }
+        /// <summary>
+        /// 刀具长度
+        /// </summary>
+        public string length { get; set; }
+        /// <summary>
+        /// 刀具名称
+        /// </summary>
+        public string name { get; set; }
+        /// <summary>
+        /// 公称径
+        /// </summary>
+        public string int0 { get; set; }
+        /// <summary>
+        /// 刀具径刀尖角
+        /// </summary>
+        public string diameter { get; set; }
+        /// <summary>
+        /// 刀具额定使用寿命
+        /// </summary>
+        public string lifetime { get; set; }
+        /// <summary>
+        /// 刀具额定使用次数
+        /// </summary>
+        public string lifenumber { get; set; }
+        /// <summary>
+        /// 刀具已使用寿命
+        /// </summary>
+        public string usetime { get; set; }
+        /// <summary>
+        /// 刀具已使用次数
+        /// </summary>
+        public string usenumber { get; set; }
+        /// <summary>
+        /// 组号
+        /// </summary>
+        public string int1 { get; set; }
+        /// <summary>
+        /// 磨损补偿
+        /// </summary>
+        public string wearcompZ { get; set; }
+        /// <summary>
+        /// 磨损极限
+        /// </summary>
+        public string maxwearZ { get; set; }
+        /// <summary>
+        /// 刀具补偿
+        /// </summary>
+        public string angle { get; set; }
+        /// <summary>
+        /// 最高转速
+        /// </summary>
+        public string easycompX { get; set; }
+        /// <summary>
+        /// 径量补偿
+        /// </summary>
+        public string easycompY { get; set; }
+        /// <summary>
+        /// 长度补偿
+        /// </summary>
+        public string conscompZ { get; set; }
+
+        /// <summary>
+        /// 托盘编号
+        /// </summary>
+        public string trayNo { get; set; }
+
+        /// <summary>
+        /// 托盘类型
         /// </summary>
-        public string content { get; set; } 
+        public string trayType { get; set; }
+
+        /// <summary>
+        /// 托盘状态
+        /// </summary>
+        public string trayState { get; set; }
+
+        /// <summary>
+        /// 托盘状态
+        /// </summary>
+        public string bomId { get; set; } = "";
     }
     public class RequestToolData
     {
@@ -202,8 +313,27 @@ namespace IMCS.CCS.Models
         /// 任务节点id
         /// </summary>
         public string taskNodeId { get; set; }
+        /// <summary>
+        /// 任务回调标识
+        /// </summary>
+        public string resendFlag { get; set; } = "0";
+
+        /// <summary>
+        /// 类型
+        /// </summary>
+        public string type { get; set; }
+
+        /// <summary>
+        /// 刀具号
+        /// </summary>
+        public ushort toolNo { get; set; }
+
+        /// <summary>
+        /// 出入库标识
+        /// </summary>
+        public string storgeFlag { get; set; }
+
 
-       
         /// <summary>
         /// 参数数据
         /// </summary>
@@ -248,4 +378,114 @@ namespace IMCS.CCS.Models
 
     }
 
+    public class RequestPoint
+    {
+        public List<string> pointList { get; set; } = null;
+    }
+
+    public class ToolData
+    {
+        /// <summary>
+        /// 刀位号
+        /// </summary>
+        public ushort pkno { get; set; }
+
+        /// <summary>
+        /// 刀具长度
+        /// </summary>
+        public int lengthA { get; set; }
+
+        /// <summary>
+        /// 刀具名称
+        /// </summary>
+        public byte name { get; set; }
+
+        /// <summary>
+        /// 公称径
+        /// </summary>
+        public int int0 { get; set; }
+
+        /// <summary>
+        /// 刀具径刀尖角
+        /// </summary>
+        public int diameter { get; set; }
+
+        /// <summary>
+        /// 材料
+        /// </summary>
+        public string string0 { get; set; }
+
+        /// <summary>
+        /// 刀具寿命
+        /// </summary>
+        public int lifetime { get; set; }
+
+        /// <summary>
+        /// 刀具次数
+        /// </summary>
+        public ushort lifenumber { get; set; }
+
+        /// <summary>
+        /// 刀具使用时间
+        /// </summary>
+        public int usetime { get; set; }
+
+        /// <summary>
+        /// 刀具使用次数
+        /// </summary>
+        public ushort usenumber { get; set; }
+
+        /// <summary>
+        /// 组号
+        /// </summary>
+        public int int1 { get; set; }
+
+        /// <summary>
+        /// 磨损补偿
+        /// </summary>
+        public int wearcompZ { get; set; }
+
+        /// <summary>
+        /// 磨损极限
+        /// </summary>
+        public int maxwearZ { get; set; }
+
+        /// <summary>
+        /// 刀尖补偿
+        /// </summary>
+        public short angle { get; set; }
+
+        /// <summary>
+        /// 最高转速
+        /// </summary>
+        public int easycompX { get; set; }
+
+        /// <summary>
+        /// 径补偿量
+        /// </summary>
+        public int easycompY { get; set; }
+
+        /// <summary>
+        /// 长度补偿
+        /// </summary>
+        public int conscompZ { get; set; }
+    }
+
+    public class HandleChangeTool
+    {
+        /// <summary>
+        /// 设备位置
+        /// </summary>
+        public string location { get; set; }
+        /// <summary>
+        /// 刀号
+        /// </summary>
+        public string tno { get; set; }
+        /// <summary>
+        /// 取放标识
+        /// </summary>
+        public string handleFlag { get; set; }
+
+    }
+
 }

+ 433 - 8
IMCS_CCS/IMCS.CCS.xml

@@ -283,6 +283,60 @@
             </summary> 
             <returns></returns>
         </member>
+        <member name="M:IMCS.CCS.Controllers.CcsController.readPoint(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.RequestPoint})">
+            <summary>
+            读取点位: POST: api/readPoint
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Controllers.CcsController.writePoint(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.RequestPoint})">
+            <summary>
+            写入点位: POST: api/writePoint
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Controllers.CcsController.updateToolInfo(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.ToolData})">
+            <summary>
+            更新刀具库数据: POST: api/updateToolInfo
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Controllers.CcsController.WriteRFIDTemp(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.RFIData})">
+            <summary>
+            读写RFID临时: POST: api/WriteRFIDTemp
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Controllers.CcsController.HandleChangeTool(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.HandleChangeTool})">
+            <summary>
+            手动换刀
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Controllers.CcsController.StorgeOut(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.RFIData})">
+            <summary>
+            刀具出库
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Controllers.CcsController.HandRobotAction(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.LocationData})">
+            <summary>
+            手动处理机器人取放动作: POST: api/HandRobotAction
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Controllers.CcsController.TakePhoto(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.LocationData})">
+            <summary>
+            拍照: POST: api/TakePhoto
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Controllers.CcsController.UpdateMachineTool(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.ToolData})">
+            <summary>
+            任务更新刀库数据: POST: api/UpdateMachineTool
+            </summary> 
+            <returns></returns>
+        </member>
         <member name="M:IMCS.CCS.Controllers.DeviceController.GetDevice(System.Int32)">
             <summary>
             获取设备详情:GET: api/Device/5
@@ -387,12 +441,6 @@
             </summary> 
             <returns></returns>
         </member>
-        <member name="M:IMCS.CCS.Controllers.JobTasksController.MonitorEquipmentStatusJob">
-            <summary>
-            监控设备状态
-            </summary> 
-            <returns></returns>
-        </member>
         <member name="M:IMCS.CCS.Controllers.JobTasksController.DeviceStatusJob">
             <summary>
             监控设备状态
@@ -411,6 +459,30 @@
             </summary> 
             <returns></returns> 
         </member>
+        <member name="M:IMCS.CCS.Controllers.JobTasksController.MonitorEquipmentStatusJob2">
+            <summary>
+            监控设备状态
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Controllers.JobTasksController.CallTakePhoto">
+            <summary>
+            拍照回调
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Controllers.JobTasksController.PlcAlarm">
+            <summary>
+             PLC报警信息
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Controllers.JobTasksController.CallUpdateMachineTool">
+            <summary>
+             更新机床刀库回调
+            </summary> 
+            <returns></returns>
+        </member>
         <member name="T:IMCS.CCS.Controllers.ProjectController">
             <summary>
             项目控制器
@@ -798,6 +870,26 @@
             IPC模式 0:无模式 1:手动模式 256:自动模式
             </summary>
         </member>
+        <member name="P:IMCS.CCS.Models.LocationData.rfidConfirm">
+            <summary>
+            RFID 确认
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.LocationData.rfid">
+            <summary>
+            RFID
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.LocationData.agvState">
+            <summary>
+            AGV状态
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.LocationData.rfidRange">
+            <summary>
+            rfid距离
+            </summary>
+        </member>
         <member name="P:IMCS.CCS.Models.UploadFileData.fileName">
             <summary>
             文件名称
@@ -808,6 +900,11 @@
             文件路径
             </summary>
         </member>
+        <member name="P:IMCS.CCS.Models.UploadFileData.subFileList">
+            <summary>
+            子文件集合
+            </summary>
+        </member>
         <member name="P:IMCS.CCS.Models.StartNCProgramData.remotePath">
             <summary>
             文件路径
@@ -868,9 +965,114 @@
             工位
             </summary>
         </member>
-        <member name="P:IMCS.CCS.Models.RFIData.content">
+        <member name="P:IMCS.CCS.Models.RFIData.toolId">
+            <summary>
+            刀具ID
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.toolHandleId">
+            <summary>
+            刀柄ID
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.tno">
+            <summary>
+            刀号
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.length">
+            <summary>
+            刀具长度
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.name">
+            <summary>
+            刀具名称
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.int0">
+            <summary>
+            公称径
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.diameter">
+            <summary>
+            刀具径刀尖角
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.lifetime">
+            <summary>
+            刀具额定使用寿命
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.lifenumber">
+            <summary>
+            刀具额定使用次数
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.usetime">
+            <summary>
+            刀具已使用寿命
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.usenumber">
+            <summary>
+            刀具已使用次数
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.int1">
+            <summary>
+            组号
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.wearcompZ">
+            <summary>
+            磨损补偿
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.maxwearZ">
+            <summary>
+            磨损极限
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.angle">
+            <summary>
+            刀具补偿
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.easycompX">
             <summary>
-            写入内容
+            最高转速
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.easycompY">
+            <summary>
+            径量补偿
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.conscompZ">
+            <summary>
+            长度补偿
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.trayNo">
+            <summary>
+            托盘编号
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.trayType">
+            <summary>
+            托盘类型
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.trayState">
+            <summary>
+            托盘状态
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RFIData.bomId">
+            <summary>
+            托盘状态
             </summary>
         </member>
         <member name="P:IMCS.CCS.Models.RequestToolData.url">
@@ -923,6 +1125,26 @@
             任务节点id
             </summary>
         </member>
+        <member name="P:IMCS.CCS.Models.RequestData`1.resendFlag">
+            <summary>
+            任务回调标识
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RequestData`1.type">
+            <summary>
+            类型
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RequestData`1.toolNo">
+            <summary>
+            刀具号
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.RequestData`1.storgeFlag">
+            <summary>
+            出入库标识
+            </summary>
+        </member>
         <member name="P:IMCS.CCS.Models.RequestData`1.data">
             <summary>
             参数数据
@@ -958,6 +1180,106 @@
             设备警报
             </summary>
         </member>
+        <member name="P:IMCS.CCS.Models.ToolData.pkno">
+            <summary>
+            刀位号
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.ToolData.lengthA">
+            <summary>
+            刀具长度
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.ToolData.name">
+            <summary>
+            刀具名称
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.ToolData.int0">
+            <summary>
+            公称径
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.ToolData.diameter">
+            <summary>
+            刀具径刀尖角
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.ToolData.string0">
+            <summary>
+            材料
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.ToolData.lifetime">
+            <summary>
+            刀具寿命
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.ToolData.lifenumber">
+            <summary>
+            刀具次数
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.ToolData.usetime">
+            <summary>
+            刀具使用时间
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.ToolData.usenumber">
+            <summary>
+            刀具使用次数
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.ToolData.int1">
+            <summary>
+            组号
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.ToolData.wearcompZ">
+            <summary>
+            磨损补偿
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.ToolData.maxwearZ">
+            <summary>
+            磨损极限
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.ToolData.angle">
+            <summary>
+            刀尖补偿
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.ToolData.easycompX">
+            <summary>
+            最高转速
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.ToolData.easycompY">
+            <summary>
+            径补偿量
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.ToolData.conscompZ">
+            <summary>
+            长度补偿
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.HandleChangeTool.location">
+            <summary>
+            设备位置
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.HandleChangeTool.tno">
+            <summary>
+            刀号
+            </summary>
+        </member>
+        <member name="P:IMCS.CCS.Models.HandleChangeTool.handleFlag">
+            <summary>
+            取放标识
+            </summary>
+        </member>
         <member name="P:IMCS.CCS.Models.vo.ResponseDigitalTwinsData.id">
             <summary>
             id
@@ -1518,6 +1840,30 @@
             心跳任务
             </summary>
         </member>
+        <member name="M:IMCS.CCS.Service.Impl.TaskJobService.MonitorEquipmentStatusJob2">
+            <summary>
+            监控设备状态
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Service.Impl.TaskJobService.CallTakePhoto">
+            <summary>
+            拍照回调任务
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Service.Impl.TaskJobService.PlcAlarm">
+            <summary>
+            PLC报警信息
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Service.Impl.TaskJobService.CallUpdateMachineTool">
+            <summary>
+            更新机床刀库回调
+            </summary> 
+            <returns></returns>
+        </member>
         <member name="T:IMCS.CCS.Service.Impl.TaskService">
             <summary>
             任务服务
@@ -1692,6 +2038,30 @@
             </summary> 
             <returns></returns>
         </member>
+        <member name="M:IMCS.CCS.Service.ITaskJobService.MonitorEquipmentStatusJob2">
+            <summary>
+            监控设备状态2
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Service.ITaskJobService.CallTakePhoto">
+            <summary>
+            拍照回调任务
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Service.ITaskJobService.PlcAlarm">
+            <summary>
+            PLC报警信息
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Service.ITaskJobService.CallUpdateMachineTool">
+            <summary>
+            更新机床刀库回调
+            </summary>
+            <returns></returns>
+        </member>
         <member name="T:IMCS.CCS.Service.ITaskService">
             <summary>
             任务 Job 服务
@@ -1820,6 +2190,36 @@
             非任务上传文件
             </summary> 
         </member>
+        <member name="M:IMCS.CCS.Services.IHttpRequestService.WriteRFIDTemp(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.RFIData})">
+            <summary>
+            读写RFID临时
+            </summary> 
+        </member>
+        <member name="M:IMCS.CCS.Services.IHttpRequestService.HandleChangeTool(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.HandleChangeTool})">
+            <summary>
+            手动换刀
+            </summary> 
+        </member>
+        <member name="M:IMCS.CCS.Services.IHttpRequestService.StorgeOut(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.RFIData})">
+            <summary>
+            手动出库
+            </summary> 
+        </member>
+        <member name="M:IMCS.CCS.Services.IHttpRequestService.HandRobotAction(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.LocationData})">
+            <summary>
+            手动处理机器人取放动作
+            </summary> 
+        </member>
+        <member name="M:IMCS.CCS.Services.IHttpRequestService.TakePhoto(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.LocationData})">
+            <summary>
+            拍照
+            </summary> 
+        </member>
+        <member name="M:IMCS.CCS.Services.IHttpRequestService.UpdateMachineTool(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.ToolData})">
+            <summary>
+            任务更新刀库数据
+            </summary> 
+        </member>
         <member name="M:IMCS.CCS.Services.HttpRequestService.GetTagValue(IMCS.CCS.Models.RequestTagValueData)">
             <summary>
             获取状态当前值
@@ -1890,6 +2290,31 @@
             非任务删除文件
             </summary> 
         </member>
+        <member name="M:IMCS.CCS.Services.HttpRequestService.WriteRFIDTemp(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.RFIData})">
+            <summary>
+            写RFID
+            </summary> 
+        </member>
+        <member name="M:IMCS.CCS.Services.HttpRequestService.HandleChangeTool(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.HandleChangeTool})">
+            <summary>
+            手动换刀
+            </summary> 
+        </member>
+        <member name="M:IMCS.CCS.Services.HttpRequestService.HandRobotAction(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.LocationData})">
+            <summary>
+            手动处理机器人取放动作
+            </summary> 
+        </member>
+        <member name="M:IMCS.CCS.Services.HttpRequestService.TakePhoto(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.LocationData})">
+            <summary>
+            拍照
+            </summary> 
+        </member>
+        <member name="M:IMCS.CCS.Services.HttpRequestService.UpdateMachineTool(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.ToolData})">
+            <summary>
+            任务更新刀库数据
+            </summary> 
+        </member>
         <member name="M:IMCS.CCS.Utils.CommonAtrr.FirstOrDefaultYG``1(``0,System.Action{``0})">
             <summary>
             判断当前的FirstOrDefaul是否为空,如果为空,那么不执行参数函数

+ 3 - 1
IMCS_CCS/Model/RedisKeyEnum.cs

@@ -18,6 +18,8 @@ namespace IMCS_CCS.Model
         //监控设备状态key
         MonitorEquipmentStatusJob,
         //字典key
-        DictKeyList
+        DictKeyList,
+        //PLC报警
+        PlcAlarm
     }
 }

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

@@ -29,6 +29,51 @@ namespace IMCS_CCS.Model.vo
         { get; set; }
         public string deviceType
         { get; set; }
+
+        public string prgName
+        { get; set; }
+    }
+
+    public class RequestBody<T>
+    {
+        public string deviceType
+        { get; set; }
+
+        public string machineName
+        { get; set; }
+        public string port
+        { get; set; }
+
+        public string prgName
+        { get; set; }
+
+        public string serverUrl
+        { get; set; }
+
+        public string userName
+        { get; set; }
+
+
+        public string password
+        { get; set; }
+
+
+        public string path
+        { get; set; }
+
+        public string address
+        { get; set; }
+
+        public string value
+        { get; set; }
+
+        public string type
+        { get; set; }
+
+        public ushort toolNo
+        { get; set; }
+
+        public T data { get; set; }
     }
 
     /// <summary>
@@ -43,6 +88,10 @@ namespace IMCS_CCS.Model.vo
         SelectNcProgram,
         StartNcProgram,
         DeleteNc,
-        UploadNoSet
+        UploadNoSet,
+        SetMainProgram,
+        SetTool,
+        DeleteOrSetTool,
+        ToolNoData
     }
 }

+ 19 - 0
IMCS_CCS/Model/vo/ResponseECSData.cs

@@ -25,4 +25,23 @@ namespace IMCS.CCS.Models.vo
         }
 
     }
+
+    public class ResponseCCSData<T>
+    {
+        public string result { get; set; } = "true";
+
+        public string msg { get; set; }
+
+        public T data { get; set; }
+    }
+
+    public class ResponseEcsPoint
+    {
+        public string point { get; set; }
+
+        public string result { get; set; }
+
+    }
+
+
 }

+ 2 - 0
IMCS_CCS/Model/vo/ResponseOpcUaData .cs

@@ -20,5 +20,7 @@ namespace IMCS_CCS.Model.vo
 
         public List<string> values
         { get; set; }
+
+        public string toolsData { get; set; }
     }
 }

+ 5 - 0
IMCS_CCS/Repository/TaskCallbackRepository.cs

@@ -60,6 +60,11 @@ namespace IMCS.CCS.Repository
                 list = list.Where(x => x.TaskNodeId == vo.TaskNodeId);
             }
 
+            if (!string.IsNullOrEmpty(vo.OperateType))
+            {
+                list = list.Where(x => x.OperateType == vo.OperateType);
+            }
+
             return await list.ToListAsync();
 
         }

+ 34 - 0
IMCS_CCS/Service/IHttpRequestService .cs

@@ -3,6 +3,7 @@ using IMCS.CCS.Entitys;
 using IMCS.CCS.Models;
 using IMCS.CCS.Models.vo;
 using IMCS_CCS.Model.vo;
+using Microsoft.AspNetCore.Mvc;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -84,5 +85,38 @@ namespace IMCS.CCS.Services
         Task<ResponseECSData> UploadFileWithOutTask(RequestData<UploadFileData> req);
 
         Task<ResponseECSData> DeleteFileWithOutTask(RequestData<UploadFileData> req);
+
+        Task<ResponseCCSData<List<ResponseEcsPoint>>> readPoint(RequestData<RequestPoint> req); 
+
+        Task<ResponseECSData> writePoint(RequestData<RequestPoint> req);
+
+        Task<ResponseECSData> updateToolInfo(RequestData<ToolData> req);
+
+        /// <summary>
+        /// 读写RFID临时
+        /// </summary> 
+        Task<ResponseECSData> WriteRFIDTemp(RequestData<RFIData> req);
+
+        /// <summary>
+        /// 手动换刀
+        /// </summary> 
+        Task<ResponseECSData> HandleChangeTool(RequestData<HandleChangeTool> req);
+        /// <summary>
+        /// 手动出库
+        /// </summary> 
+        Task<ResponseECSData> StorgeOut(RequestData<RFIData> req);
+
+        /// <summary>
+        /// 手动处理机器人取放动作
+        /// </summary> 
+        Task<ResponseECSData> HandRobotAction(RequestData<LocationData> req);
+        /// <summary>
+        /// 拍照
+        /// </summary> 
+        Task<ResponseECSData> TakePhoto(RequestData<LocationData> req);
+        /// <summary>
+        /// 任务更新刀库数据
+        /// </summary> 
+        Task<ResponseECSData> UpdateMachineTool(RequestData<ToolData> req);
     }
 }

+ 24 - 0
IMCS_CCS/Service/ITaskJobService.cs

@@ -73,5 +73,29 @@ namespace IMCS.CCS.Service
         //void removeRedis();
 
         Task<string> PlcHeartbeatJob();
+
+        /// <summary>
+        /// 监控设备状态2
+        /// </summary>
+        /// <returns></returns>
+        Task<string> MonitorEquipmentStatusJob2();
+
+        /// <summary>
+        /// 拍照回调任务
+        /// </summary>
+        /// <returns></returns>
+        Task<string> CallTakePhoto();
+
+        /// <summary>
+        /// PLC报警信息
+        /// </summary>
+        /// <returns></returns>
+        Task<string> PlcAlarm();
+
+        /// <summary>
+        /// 更新机床刀库回调
+        /// </summary>
+        /// <returns></returns>
+        Task<string> CallUpdateMachineTool();
     }
 }

+ 6 - 4
IMCS_CCS/Service/Impl/DataService.cs

@@ -62,9 +62,10 @@ namespace IMCS.CCS.Service.Impl
 
                     data = await File.ReadAllTextAsync(path);
                 }
-                catch (Exception)
+                catch (Exception ex)
                 {
-                    return await ReadDataAsync<T>();
+                    Console.WriteLine("读取文件失败====》" + ex.Message);
+                    //return await ReadDataAsync<T>();
                 }
             }
 
@@ -101,9 +102,10 @@ namespace IMCS.CCS.Service.Impl
                     await File.WriteAllTextAsync(path, json);
 
                 }
-                catch (Exception)
+                catch (Exception ex)
                 {
-                    return await WriteDataAsync(contents);
+                    Console.WriteLine("更新JSON文件失败==>"+ex.Message);
+                    //return await WriteDataAsync(contents);
                 }
             }
 

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 575 - 116
IMCS_CCS/Service/Impl/HttpRequestService.cs


+ 1057 - 155
IMCS_CCS/Service/Impl/TaskJobService.cs

@@ -20,6 +20,10 @@ using System.Net.NetworkInformation;
 using IMCS_CCS.Model;
 using MySqlX.XDevAPI.Common;
 using Microsoft.AspNetCore.Mvc;
+using AutoMapper.Execution;
+using Org.BouncyCastle.Asn1.Ocsp;
+using System.Reflection;
+using Org.BouncyCastle.Ocsp;
 
 namespace IMCS.CCS.Service.Impl
 {
@@ -72,9 +76,15 @@ namespace IMCS.CCS.Service.Impl
 
         private string LOG_TITLE_DEVICE = "设备监控";
 
+        private string LOG_HEART_PLC = "PLC心跳";
+
         private string PLC_ALARM_INFO = "PLC有异常";
 
-        private string imcs_redis_key = "IMCS_CCS:"; 
+        private string imcs_redis_key = "IMCS_CCS:";
+
+        private string LOG_RESOURCE_STATE = "设备状态";
+
+        private Boolean repeatFlag = false;
 
         public IConfiguration Configuration { get; }
 
@@ -121,7 +131,6 @@ namespace IMCS.CCS.Service.Impl
         /// <returns></returns>
         public async Task<string> DataCollectS7Job()
         {
-
             try
             { 
                 List<Device> deviceList = await getDeviceList();
@@ -220,12 +229,10 @@ namespace IMCS.CCS.Service.Impl
 
                     }
                 }
-      
                 return "S7采集成功";
             }
             catch (Exception ex)
             {
-                Console.WriteLine("S7采集异常===>>" + ex.Message);
                 Log.Instance.WriteLogAdd("S7采集异常===>>" + ex.Message, LOG_TITLE_S7);
                 return "S7采集失败";
             }
@@ -319,12 +326,10 @@ namespace IMCS.CCS.Service.Impl
                     }
 
                 }
-
                 return string.IsNullOrEmpty(message) ? "无回调任务" : message;
             }
             catch (Exception ex)
             {
-                Console.WriteLine("上传程序回调任务异常===>>" + ex.Message);
                 Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
                 return "回调异常" + ex.Message;
             }
@@ -338,55 +343,504 @@ namespace IMCS.CCS.Service.Impl
         {
             try
             {
+                
                 List<TaskCallback> taskList = new List<TaskCallback>();
-            var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
-            if (taskCallbackListData.IsNullOrEmpty)
-            {
-                taskList = await _taskCallbackService.GetAllList();
-            }
-            else
-            {
-                taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
-            }
-            //在线设备 
-            List<Device> deviceList = await getDeviceList(); 
+                var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
+                if (taskCallbackListData.IsNullOrEmpty)
+                {
+                    taskList = await _taskCallbackService.GetAllList();
+                }
+                else
+                {
+                    taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
+                }
+                //在线设备 
+                List<Device> deviceList = await getDeviceList(); 
 
-            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() ; 
-            if (taskList == null || taskList.Count == 0)
-            {
-                return "无回调任务" ;
-            } 
-            string message = "";
+                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() ; 
+                if (taskList == null || taskList.Count == 0)
+                {
+                   return "无回调任务" ;
+                } 
+                string message = "";
             
                 foreach(TaskCallback task in taskList)
-                { 
+                {
+                    
                     CcsTagValue tagValueQuery = new CcsTagValue();
                     tagValueQuery.Ip = task.IP;
                     //tagValueQuery.Address = task.Address;
                     List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery).ToList();
-                    CcsTagValue callBacktagValue = tagValues.Where(o => o.Address == task.Address).FirstOrDefault();
 
-                    if ((callBacktagValue != null && callBacktagValue.TagValue == task.CallbackValue) )
+                    //系统操作模式
+                    CcsTagValue tagValueMode = tagValues.Where(o => o.Address == "DB1.2").FirstOrDefault();
+                    if (tagValueMode.TagValue != "257")
                     {
-                        //执行位清零
-                        SiemensS7Net s7 = DevicePlcS7.SiemensS7(task.IP);
-                        HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
-                        if (ConnectionResult.IsSuccess)
+                        return "当前操作模式非自动并运行";
+                    }
+
+                    //执行位清零
+                    SiemensS7Net s7 = DevicePlcS7.SiemensS7(task.IP);
+                    HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
+                    if (!ConnectionResult.IsSuccess)
+                    {
+                        Log.Instance.WriteLogAdd("回调异常,PLC连接不上==>", LOG_TITLE_CALLBACK);
+                        return "回调异常,PLC连接不上==>";
+                    }
+
+                    //判断RFID是否读完成
+                    string rfidResult = s7.ReadInt16("DB1.18").Content.ToString();
+                    RFIData rFIData = new RFIData();
+                    if (rfidResult == "3" && !repeatFlag)
+                    {
+                        repeatFlag = true;
+                        //读完成,读RFID
+                        if (task.CallbackValue == "5")
                         {
-                            Log.Instance.WriteLogAdd("任务【"+task.TaskNodeId+"】回调清零,plc点位:"+task.Address + "值:"+ callBacktagValue.TagValue, LOG_TITLE_CALLBACK);
-                            s7.Write("DB2.2", Convert.ToInt16("0"));
-                            s7.Write("DB2.4", Convert.ToInt16("0"));
-                            s7.Write("DB2.6", Convert.ToInt16("0"));
-                            s7.Write("DB2.8", Convert.ToInt16("0"));
-                            s7.Write("DB2.10", Convert.ToInt16("0"));
+                            //托盘动作回调,读取RFID
+                            CcsActionAddress actionAddressQuery = new CcsActionAddress();
+                            actionAddressQuery.ActionId = 26;
+                            List<CcsActionAddress> CcsActionAddressRead = _ccsActionAddressService.GetList(actionAddressQuery);
+                            foreach (CcsActionAddress actionAddress in CcsActionAddressRead)
+                            {
+                                string value = "";
+                                if (actionAddress.dataType == "bytes")
+                                {
+                                    byte[] bytes = s7.Read(actionAddress.Address, 40).Content;
+                                    value = ToolUtils.ReturnStringByBytes(bytes);
+                                    value = value.Trim();
+                                }
+                                else if (actionAddress.dataType == "int")
+                                {
+                                    value = s7.ReadInt16(actionAddress.Address).Content.ToString();
+                                }
+                                else if (actionAddress.dataType == "float")
+                                {
+                                    value = s7.ReadFloat(actionAddress.Address).Content.ToString();
+                                }
+                                else if (actionAddress.dataType == "byte")
+                                {
+                                    value = s7.ReadByte(actionAddress.Address).Content.ToString();
+                                }
+                                SetProperty(rFIData, actionAddress.Description, value);
+                            }
+
+                            if (string.IsNullOrEmpty(rFIData.trayNo))
+                            {
+                                s7.ConnectClose();
+                                repeatFlag = false;
+                                Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,读取redis托盘RFID信息为空====>" + JsonConvert.SerializeObject(rFIData), LOG_TITLE_CALLBACK);
+                                return "任务【" + task.TaskNodeId + "】回调,读取redis托盘RFID信息为空";
+                            }
+                            string rfidDataObj = JsonConvert.SerializeObject(rFIData);
+                            await _redisService.Database.StringSetAsync("CCS_TRAY_RFID_" + task.TaskNodeId, JsonConvert.SerializeObject(rfidDataObj));
+
+                            Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,读取托盘RFID信息:" + JsonConvert.SerializeObject(rFIData), LOG_TITLE_CALLBACK);
+
+                            //判断当前托盘是否和缓存托盘RFID一致
+                            string callback_redis_key = "TRAY_RFID_";
+                            var trayRfid = await _redisService.Database.StringGetAsync(callback_redis_key + task.TaskNodeId);
+
+                            RFIData rfidWrite = new RFIData();
+                            if (!trayRfid.IsNullOrEmpty)
+                            {
+                                string bb = JsonConvert.DeserializeObject<string>(trayRfid);
+                                RFIData trayRdisRfid = JsonConvert.DeserializeObject<RFIData>(bb);
+                                //比较是否为同一托盘
+                                if (rFIData.trayNo != trayRdisRfid.trayNo)
+                                {
+                                    s7.ConnectClose();
+                                    repeatFlag = false;
+                                    Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,缓存托盘【" + trayRdisRfid.trayNo + "】 和从RFID读出托盘【" + rFIData.trayNo + "】不一致", LOG_TITLE_CALLBACK);
+                                    return "任务【" + task.TaskNodeId + "】回调,缓存托盘【" + trayRdisRfid.trayNo + "】 和从RFID读出托盘【" + rFIData.trayNo + "】不一致";
+                                }
+                                rfidWrite = trayRdisRfid;
+                            }
+                            else
+                            {
+                                rfidWrite = rFIData;
+                            }
+
+
+                            //写刀具信息
+                            CcsActionAddress actionAddressQueryWrite = new CcsActionAddress();
+                            actionAddressQueryWrite.ActionId = 27;
+                            List<CcsActionAddress> CcsActionAddressWrites = _ccsActionAddressService.GetList(actionAddressQueryWrite);
+                            foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
+                            {
+                                if (!string.IsNullOrEmpty(actionAddress.Address))
+                                {
+                                    if (string.IsNullOrEmpty(actionAddress.Value))
+                                    {
+                                        //取参数传参值
+                                        string dataValue = getProperties(rfidWrite, actionAddress.Description);
+                                        if (!string.IsNullOrEmpty(dataValue))
+                                        {
+                                            if (actionAddress.dataType == "bytes")
+                                            {
+                                                s7.Write(actionAddress.Address, ToolUtils.ReturnBtyesWtitString(dataValue, dataValue.Length));
+                                            }
+                                            else if (actionAddress.dataType == "int")
+                                            {
+                                                s7.Write(actionAddress.Address, Convert.ToInt16(dataValue));
+                                            }
+                                            else if (actionAddress.dataType == "float")
+                                            {
+                                                s7.Write(actionAddress.Address, float.Parse(dataValue));
+                                            }
+                                            else if (actionAddress.dataType == "byte")
+                                            {
+                                                s7.Write(actionAddress.Address, Convert.ToByte(dataValue));
+                                            }
+                                        }
+
+                                    }
+                                    else
+                                    {
+                                        s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
+                                    }
+                                }
+                            }
+
+                            //写入启动
+                            s7.Write("DB2.12", Convert.ToInt16("2"));
+
+                            Boolean nextFlag = true;
+                            //进入循环等待写入完成
+                            int count = 0;
+                            string writeResult = "";
+                            while (true)
+                            {
+                                Thread.Sleep(2000);
+                                writeResult = s7.ReadInt16("DB1.18").Content.ToString();
+                                if (writeResult == "5")
+                                {
+                                    //写完成,跳出循环
+                                    break;
+                                }
+
+                                /*if (count == 10)
+                                {
+                                    //超时,跳出循环
+                                    nextFlag = false;
+                                    break;
+                                }*/
+                                count++;
+                            }
+
+                            if (!nextFlag)
+                            {
+                                s7.ConnectClose();
+                                repeatFlag = false;
+                                Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,写入RFID超时,当前DB1.18值【" + writeResult + "】", LOG_TITLE_CALLBACK);
+                                return "任务【" + task.TaskNodeId + "】回调,写入RFID超时,当前DB1.18值【" + writeResult + "】";
+                            }
+
+                            //校验是否已写入RFID---读一下
+                            s7.Write("DB2.12", Convert.ToInt16("1"));
+
+                            //进入循环等待读完成
+                            count = 0;
+                            writeResult = "";
+                            while (true)
+                            {
+                                Thread.Sleep(2000);
+                                writeResult = s7.ReadInt16("DB1.18").Content.ToString();
+                                if (writeResult == "3")
+                                {
+                                    //写完成,跳出循环
+                                    break;
+                                }
+
+                                /*if (count == 10)
+                                {
+                                    //超时,跳出循环
+                                    nextFlag = false;
+                                    break;
+                                }*/
+                                count++;
+                            }
+
+                            if (!nextFlag)
+                            {
+                                s7.ConnectClose();
+                                repeatFlag = false;
+                                Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,读取RFID超时,当前DB1.18值【" + writeResult + "】", LOG_TITLE_CALLBACK);
+                                return "任务【" + task.TaskNodeId + "】回调,读取RFID超时,当前DB1.18值【" + writeResult + "】";
+                            }
+
+                            foreach (CcsActionAddress actionAddress in CcsActionAddressRead)
+                            {
+                                if (!string.IsNullOrEmpty(actionAddress.Address))
+                                {
+                                    //取参数传参值
+                                    string dataValue = getProperties(rfidWrite, actionAddress.Description);
+                                    //读取写入结果
+                                    string value = "";
+                                    if (actionAddress.dataType == "bytes")
+                                    {
+                                        byte[] bytes = s7.Read(actionAddress.Address, 40).Content;
+                                        value = ToolUtils.ReturnStringByBytes(bytes);
+                                        value = value.Trim();
+                                    }
+                                    else if (actionAddress.dataType == "int")
+                                    {
+                                        value = s7.ReadInt16(actionAddress.Address).Content.ToString();
+                                    }
+                                    else if (actionAddress.dataType == "float")
+                                    {
+                                        value = s7.ReadFloat(actionAddress.Address).Content.ToString();
+                                    }
+                                    else if (actionAddress.dataType == "byte")
+                                    {
+                                        value = s7.ReadByte(actionAddress.Address).Content.ToString();
+                                    }
+                                    if (value != dataValue)
+                                    {
+                                        s7.ConnectClose();
+                                        repeatFlag = false;
+                                        Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,RFID中【" + actionAddress.Description + "】,地址【" + actionAddress.Address + "】重新写入值【" + dataValue + "】 和从RFID读出值【" + value + "】不一致", LOG_TITLE_CALLBACK);
+                                        return "任务【" + task.TaskNodeId + "】回调,RFID中【" + actionAddress.Description + "】,地址【" + actionAddress.Address + "】重新写入值【" + dataValue + "】 和从RFID读出值【" + value + "】不一致";
+
+                                    }
+                                }
+                            }
+
+                            //点位清零
+                            s7.Write("DB2.12", Convert.ToInt16("0"));
                         }
                         else
                         {
-                            Log.Instance.WriteLogAdd("回调异常,PLC连接不上==>" , LOG_TITLE_CALLBACK);
-                            return "回调异常,PLC连接不上==>";
+                            //刀具动作回调,读取RFID
+                            CcsActionAddress actionAddressQuery = new CcsActionAddress();
+                            actionAddressQuery.ActionId = 15;
+                            List<CcsActionAddress> CcsActionAddressRead = _ccsActionAddressService.GetList(actionAddressQuery);
+                            foreach (CcsActionAddress actionAddress in CcsActionAddressRead)
+                            {
+                                string value = "";
+                                if (actionAddress.dataType == "bytes")
+                                {
+                                    byte[] bytes = s7.Read(actionAddress.Address, 19).Content;
+                                    value = ToolUtils.ReturnStringByBytes(bytes);
+                                }
+                                else if (actionAddress.dataType == "int")
+                                {
+                                    value = s7.ReadInt16(actionAddress.Address).Content.ToString();
+                                }
+                                else if (actionAddress.dataType == "float")
+                                {
+                                    value = s7.ReadFloat(actionAddress.Address).Content.ToString();
+                                }
+                                else if (actionAddress.dataType == "byte")
+                                {
+                                    value = s7.ReadByte(actionAddress.Address).Content.ToString();
+                                }
+                                SetProperty(rFIData, actionAddress.Description, value);
+                            }
+
+                            if(string.IsNullOrEmpty(rFIData.toolId) || rFIData.toolId == "0")
+                            {
+                                s7.ConnectClose();
+                                repeatFlag = false;
+                                Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,读取redis刀具RFID信息为空====>"+ JsonConvert.SerializeObject(rFIData), LOG_TITLE_CALLBACK);
+                                return "任务【" + task.TaskNodeId + "】回调,读取redis刀具RFID信息为空";
+                            }
+                            string rfidDataObj = JsonConvert.SerializeObject(rFIData);
+                            await _redisService.Database.StringSetAsync("CCS_TOOL_RFID_" + task.TaskNodeId, JsonConvert.SerializeObject(rfidDataObj));
+
+                            Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,读取刀具RFID信息:" + JsonConvert.SerializeObject(rFIData), LOG_TITLE_CALLBACK);
+                            
+                            //判断当前刀具是否和缓存刀具RFID一致
+                            string callback_redis_key = "CUTTING_TOOL_RFID_";
+                            var cuttingToolRfid = await _redisService.Database.StringGetAsync(callback_redis_key + task.TaskNodeId);
+
+                            RFIData rfidWrite = new RFIData();
+                            if (!cuttingToolRfid.IsNullOrEmpty)
+                            {
+                                string bb = JsonConvert.DeserializeObject<string>(cuttingToolRfid);
+                                RFIData toolRdisRfid = JsonConvert.DeserializeObject<RFIData>(bb);
+                                //比较是否为同一把刀
+                                if (rFIData.toolId != toolRdisRfid.toolId)
+                                {
+                                    s7.ConnectClose();
+                                    repeatFlag = false;
+                                    Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,缓存刀具【" + toolRdisRfid.toolId + "】 和从RFID读出刀具【" + rFIData.toolId + "】不一致", LOG_TITLE_CALLBACK);
+                                    return "任务【" + task.TaskNodeId + "】回调,缓存刀具【" + toolRdisRfid.toolId + "】 和从RFID读出刀具【" + rFIData.toolId + "】不一致";
+                                }
+                                rfidWrite = toolRdisRfid;
+                            }
+                            else
+                            {
+                                rfidWrite = rFIData;
+                            }
+                            
+
+                            //写刀具信息
+                            CcsActionAddress actionAddressQueryWrite = new CcsActionAddress();
+                            actionAddressQueryWrite.ActionId = 16;
+                            List<CcsActionAddress> CcsActionAddressWrites = _ccsActionAddressService.GetList(actionAddressQueryWrite);
+                            foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
+                            {
+                                if (!string.IsNullOrEmpty(actionAddress.Address))
+                                {
+                                    if (string.IsNullOrEmpty(actionAddress.Value))
+                                    {
+                                        //取参数传参值
+                                        string dataValue = getProperties(rfidWrite, actionAddress.Description);
+                                        if (!string.IsNullOrEmpty(dataValue))
+                                        {
+                                            if (actionAddress.dataType == "bytes")
+                                            {
+                                                s7.Write(actionAddress.Address, ToolUtils.ReturnBtyesWtitString(dataValue, 19));
+                                            }
+                                            else if (actionAddress.dataType == "int")
+                                            {
+                                                s7.Write(actionAddress.Address, Convert.ToInt16(dataValue));
+                                            }
+                                            else if (actionAddress.dataType == "float")
+                                            {
+                                                s7.Write(actionAddress.Address, float.Parse(dataValue));
+                                            }
+                                            else if (actionAddress.dataType == "byte")
+                                            {
+                                                s7.Write(actionAddress.Address, Convert.ToByte(dataValue));
+                                            }
+                                        }
+
+                                    }
+                                    else
+                                    {
+                                        s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
+                                    }
+                                }
+                            }
+
+                            //写入启动
+                            s7.Write("DB2.12", Convert.ToInt16("2"));
+
+                            Boolean nextFlag = true;
+                            //进入循环等待写入完成
+                            int count = 0;
+                            string writeResult = "";
+                            while (true)
+                            {
+                                Thread.Sleep(2000);
+                                writeResult  = s7.ReadInt16("DB1.18").Content.ToString();
+                                if(writeResult == "5")
+                                {
+                                    //写完成,跳出循环
+                                    break;
+                                }
+
+                                if(count == 10)
+                                {
+                                    //超时,跳出循环
+                                    nextFlag = false;
+                                    break;
+                                }
+                                count++;
+                            }
+
+                            if (!nextFlag)
+                            {
+                                s7.ConnectClose();
+                                repeatFlag = false;
+                                Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,写入RFID超时,当前DB1.18值【"+writeResult+"】", LOG_TITLE_CALLBACK);
+                                return "任务【" + task.TaskNodeId + "】回调,写入RFID超时,当前DB1.18值【" + writeResult + "】";
+                            }
+
+                            //校验是否已写入RFID---读一下
+                            s7.Write("DB2.12", Convert.ToInt16("1"));
+
+                            //进入循环等待读完成
+                            count = 0;
+                            writeResult = "";
+                            while (true)
+                            {
+                                Thread.Sleep(2000);
+                                writeResult = s7.ReadInt16("DB1.18").Content.ToString();
+                                if (writeResult == "3")
+                                {
+                                    //写完成,跳出循环
+                                    break;
+                                }
+
+                                if (count == 10)
+                                {
+                                    //超时,跳出循环
+                                    nextFlag = false;
+                                    break;
+                                }
+                                count++;
+                            }
+
+                            if (!nextFlag)
+                            {
+                                s7.ConnectClose();
+                                repeatFlag = false;
+                                Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,读取RFID超时,当前DB1.18值【" + writeResult + "】", LOG_TITLE_CALLBACK);
+                                return "任务【" + task.TaskNodeId + "】回调,读取RFID超时,当前DB1.18值【" + writeResult + "】";
+                            }
+
+                            foreach (CcsActionAddress actionAddress in CcsActionAddressRead)
+                            {
+                                if (!string.IsNullOrEmpty(actionAddress.Address))
+                                {
+                                    //取参数传参值
+                                    string dataValue = getProperties(rfidWrite, actionAddress.Description);
+                                    //读取写入结果
+                                    string value = "";
+                                    if (actionAddress.dataType == "bytes")
+                                    {
+                                        byte[] bytes = s7.Read(actionAddress.Address, 19).Content;
+                                        value = ToolUtils.ReturnStringByBytes(bytes);
+                                    }
+                                    else if (actionAddress.dataType == "int")
+                                    {
+                                        value = s7.ReadInt16(actionAddress.Address).Content.ToString();
+                                    }
+                                    else if (actionAddress.dataType == "float")
+                                    {
+                                        value = s7.ReadFloat(actionAddress.Address).Content.ToString();
+                                    }
+                                    else if (actionAddress.dataType == "byte")
+                                    {
+                                        value = s7.ReadByte(actionAddress.Address).Content.ToString();
+                                    }
+                                    if (value != dataValue)
+                                    {
+                                        s7.ConnectClose();
+                                        repeatFlag = false;
+                                        Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,RFID中【"+ actionAddress .Description+ "】,地址【"+actionAddress.Address+"】重新写入值【" + dataValue + "】 和从RFID读出值【" + value + "】不一致", LOG_TITLE_CALLBACK);
+                                        return "任务【" + task.TaskNodeId + "】回调,RFID中【" + actionAddress.Description + "】,地址【" + actionAddress.Address + "】重新写入值【" + dataValue + "】 和从RFID读出值【" + value + "】不一致";
+
+                                    }
+                                }
+                            }
+
+                            //点位清零
+                            s7.Write("DB2.12", Convert.ToInt16("0"));
+
                         }
+
+                        repeatFlag = false;
+                    }
+
+
+                    CcsTagValue callBacktagValue = tagValues.Where(o => o.Address == task.Address).FirstOrDefault();
+
+                    if ((callBacktagValue != null && callBacktagValue.TagValue == task.CallbackValue) )
+                    {   
+                        
+                        Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调清零,plc点位:" + task.Address + "值:" + callBacktagValue.TagValue, LOG_TITLE_CALLBACK);
+                        s7.Write("DB2.2", Convert.ToInt16("0"));
+                        s7.Write("DB2.4", Convert.ToInt16("0"));
+                        s7.Write("DB2.6", Convert.ToInt16("0"));
+                        s7.Write("DB2.8", Convert.ToInt16("0"));
+                        s7.Write("DB2.10", Convert.ToInt16("0"));
+                        s7.Write("DB2.12", Convert.ToInt16("0"));
                         s7.ConnectClose();
 
                         task.State = false;
@@ -396,7 +850,7 @@ namespace IMCS.CCS.Service.Impl
                         CallBackRequestData requestData = new CallBackRequestData();
                         requestData.taskId = long.Parse(task.TaskId);
                         requestData.taskNodeId = long.Parse(task.TaskNodeId);
-
+                        requestData.content = JsonConvert.SerializeObject(rFIData);
                         var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
                         ResponseECSCallbackData responseECSCallback = JsonConvert.DeserializeObject<ResponseECSCallbackData>(result.Message);
                         if (result.IsSuccess && responseECSCallback.code == 0)
@@ -429,6 +883,10 @@ namespace IMCS.CCS.Service.Impl
                         }
 
                     }
+                    else
+                    {
+                        s7.ConnectClose();
+                    }
                     //回调检测到失败,回调通知ecs
                     if (!string.IsNullOrEmpty(task.FailAddress) || !string.IsNullOrEmpty(task.FailAddress2) || !string.IsNullOrEmpty(task.FailAddress3))
                     {
@@ -489,12 +947,54 @@ namespace IMCS.CCS.Service.Impl
             }
             catch (Exception ex)
             {
-                Console.WriteLine("取和放回调任务异常===>>" + ex.Message);
+                repeatFlag = false;
                 Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
                 return "回调异常" + ex.Message;
             }
         }
 
+        public string getProperties<T>(T t, string propertyName)
+        {
+            string tStr = string.Empty;
+            if (t == null)
+            {
+                return tStr;
+            }
+            System.Reflection.PropertyInfo[] properties = t.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
+
+            if (properties.Length <= 0)
+            {
+                return tStr;
+            }
+            foreach (System.Reflection.PropertyInfo item in properties)
+            {
+                string name = item.Name;
+                object value = item.GetValue(t, null);
+                if ((item.PropertyType.IsValueType || item.PropertyType.Name.StartsWith("String")) && name == propertyName)
+                {
+                    tStr = value.ToString();
+                    break;
+                }
+
+            }
+            return tStr;
+        }
+
+        public void SetProperty<T>(T t, string propertyName, object value)
+        {
+            // 获取对象的类型
+            Type type = t.GetType();
+
+            // 获取指定名称的属性
+            PropertyInfo propertyInfo = type.GetProperty(propertyName);
+
+            if (propertyInfo != null && propertyInfo.CanWrite)
+            {
+                // 设置属性值
+                propertyInfo.SetValue(t, value);
+            }
+        }
+
         /// <summary>
         /// 读写回调任务
         /// </summary> 
@@ -503,70 +1003,71 @@ namespace IMCS.CCS.Service.Impl
         {
             try
             {
+             
                 List<TaskCallback> taskList = new List<TaskCallback>();
-            var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
-            if (taskCallbackListData.IsNullOrEmpty)
-            {
-                taskList = await _taskCallbackService.GetAllList();
-            }
-            else
-            {
-                taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
-            }
+                var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
+                if (taskCallbackListData.IsNullOrEmpty)
+                {
+                    taskList = await _taskCallbackService.GetAllList();
+                }
+                else
+                {
+                    taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
+                }
             
-            List<Device> deviceList = await getDeviceList();
-            //在线设备
-            taskList = taskList.Where(x => (x.OperateType.Equals(ActionTypeEnum.ReadRFID.ToString()) 
-                                         || x.OperateType.Equals(ActionTypeEnum.WriteRFID.ToString())) && x.State).ToList();
-            TaskCallback task = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).FirstOrDefault();
-            if (task == null)
-            {
-                return "无回调任务";
-            }
-            string message = "";
+                List<Device> deviceList = await getDeviceList();
+                //在线设备
+                taskList = taskList.Where(x => (x.OperateType.Equals(ActionTypeEnum.ReadRFID.ToString()) 
+                                             || x.OperateType.Equals(ActionTypeEnum.WriteRFID.ToString())) && x.State).ToList();
+                TaskCallback task = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).FirstOrDefault();
+                if (task == null)
+                {
+                    return "无回调任务";
+                }
+                string message = "";
             
-                    DateTime currentTime = DateTime.Now;
-                    CcsTagValue tagValueQuery = new CcsTagValue();
-                    tagValueQuery.Ip = task.IP;
-                    List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery).ToList();
-                    CcsTagValue callBacktagValue = tagValues.Where(o => o.Address == task.Address).FirstOrDefault();
+                DateTime currentTime = DateTime.Now;
+                CcsTagValue tagValueQuery = new CcsTagValue();
+                tagValueQuery.Ip = task.IP;
+                List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery).ToList();
+                CcsTagValue callBacktagValue = tagValues.Where(o => o.Address == task.Address).FirstOrDefault();
                    
-                    if (callBacktagValue != null && callBacktagValue.TagValue == task.CallbackValue )
-                    {
-                        CcsTagValue callBacktagValue2 = null;
-                        if (task.OperateType.Equals(ActionTypeEnum.ReadRFID.ToString())){
-                             callBacktagValue2 = tagValues.Where(o => o.Address == task.Address2).FirstOrDefault();
+                if (callBacktagValue != null && callBacktagValue.TagValue == task.CallbackValue )
+                {
+                    CcsTagValue callBacktagValue2 = null;
+                    if (task.OperateType.Equals(ActionTypeEnum.ReadRFID.ToString())){
+                            callBacktagValue2 = tagValues.Where(o => o.Address == task.Address2).FirstOrDefault();
                            
-                        }
+                    }
                    
-                        CallBackRequestData requestData = new CallBackRequestData();
-                        requestData.taskId = long.Parse(task.TaskId);
-                        requestData.taskNodeId = long.Parse(task.TaskNodeId);
-                        //读RFID的值返回ecs
-                        if (callBacktagValue2 != null)
-                        {
-                            requestData.content = callBacktagValue2.TagValue;
-                        }
-                        var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
-                        ResponseECSCallbackData responseECSCallback = JsonConvert.DeserializeObject<ResponseECSCallbackData>(result.Message);
-                        if (result.IsSuccess && responseECSCallback.code == 0)
-                        { 
-                            task.State = false;
-                            task.UpdateTime = DateTime.Now;
-                            await _taskCallbackService.CreateOrUpdateAndCache(task);
-                            message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + ",请求结果:" + result.Message + ";";
-                            Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
-                        }
-                        else
-                        {
-                            message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
-                            Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
-                        }
-
+                    CallBackRequestData requestData = new CallBackRequestData();
+                    requestData.taskId = long.Parse(task.TaskId);
+                    requestData.taskNodeId = long.Parse(task.TaskNodeId);
+                    //读RFID的值返回ecs
+                    if (callBacktagValue2 != null)
+                    {
+                        requestData.content = callBacktagValue2.TagValue;
+                    }
+                    var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
+                    ResponseECSCallbackData responseECSCallback = JsonConvert.DeserializeObject<ResponseECSCallbackData>(result.Message);
+                    if (result.IsSuccess && responseECSCallback.code == 0)
+                    { 
+                        task.State = false;
+                        task.UpdateTime = DateTime.Now;
+                        await _taskCallbackService.CreateOrUpdateAndCache(task);
+                        message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + ",请求结果:" + result.Message + ";";
+                        Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
+                    }
+                    else
+                    {
+                        message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
+                        Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
                     }
 
+                }
+
                     //回调检测到失败,回调通知ecs
-                    if (!string.IsNullOrEmpty(task.FailAddress) || !string.IsNullOrEmpty(task.FailAddress2) || !string.IsNullOrEmpty(task.FailAddress3))
+                if (!string.IsNullOrEmpty(task.FailAddress) || !string.IsNullOrEmpty(task.FailAddress2) || !string.IsNullOrEmpty(task.FailAddress3))
                     {
                         bool failFalg = false;
                         if (!string.IsNullOrEmpty(task.FailAddress))
@@ -620,12 +1121,10 @@ namespace IMCS.CCS.Service.Impl
                             }
                         }
                     }
- 
                 return string.IsNullOrEmpty(message) ? "无回调任务" : message;
             }
             catch (Exception ex)
             {
-                Console.WriteLine("读写任务异常===>>" + ex.Message);
                 Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
                 return "回调异常" + ex.Message;
             }
@@ -639,34 +1138,45 @@ namespace IMCS.CCS.Service.Impl
         {
             try
             {
+                
+
                 List<TaskCallback> taskList = new List<TaskCallback>();
-            var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
-            if (taskCallbackListData.IsNullOrEmpty)
-            {
-                taskList = await _taskCallbackService.GetAllList();
-            }
-            else
-            {
-                taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
-            }
-            List<Device> deviceList = await getDeviceList();
-            //在线设备 
-            taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.StartNCProgram.ToString()) && x.State &&  deviceList.Any(device => device.Ip == x.IP)).ToList();
-            if (taskList == null || taskList.Count == 0)
-            {
-                return "无回调任务";
-            }
-            string message = "";
+                var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
+                if (taskCallbackListData.IsNullOrEmpty)
+                {
+                    taskList = await _taskCallbackService.GetAllList();
+                }
+                else
+                {
+                    taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
+                }
+                List<Device> deviceList = await getDeviceList();
+                //在线设备 
+                taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.StartNCProgram.ToString()) && x.State &&  deviceList.Any(device => device.Ip == x.IP)).ToList();
+                if (taskList == null || taskList.Count == 0)
+                {
+                        return "无回调任务";
+                }
+                string message = "";
             
-                    DateTime currentTime = DateTime.Now;
-                    foreach (TaskCallback task in taskList)
+                DateTime currentTime = DateTime.Now;
+                foreach (TaskCallback task in taskList)
                     { 
                     CcsTagValue tagValueQuery = new CcsTagValue();
-                    tagValueQuery.Ip = task.IP;
+                    //tagValueQuery.Ip = task.IP;
                     //tagValueQuery.Address = task.Address;
+                    
                     List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery);
+
+                    //系统操作模式
+                    CcsTagValue tagValueMode = tagValues.Where(o => o.Address == "DB1.2").FirstOrDefault();
+                    if(tagValueMode.TagValue != "257")
+                    {
+                        return "当前操作模式非自动并运行";
+                    }
+
                     CcsTagValue tagValue = tagValues.Where(o => o.Address == task.Address.Trim()).FirstOrDefault(); 
-                
+                    
                     if (tagValue != null && tagValue.TagValue == task.CallbackValue ) 
                     {
                         CallBackRequestData requestData = new CallBackRequestData();
@@ -751,7 +1261,6 @@ namespace IMCS.CCS.Service.Impl
             }
             catch (Exception ex)
             {
-                Console.WriteLine("启动机床程序回调异常===>>" + ex.Message);
                 Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
                 return "回调异常" + ex.Message;
             }
@@ -764,29 +1273,26 @@ namespace IMCS.CCS.Service.Impl
         {
             try
             {
-                Console.WriteLine("进入启动清洗机回调任务");
-            List<TaskCallback> taskList = new List<TaskCallback>();
-            var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
-            if (taskCallbackListData.IsNullOrEmpty)
-            {
-                taskList = await _taskCallbackService.GetAllList();
-            }
-            else
-            {
-                taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
-            }
-            List<Device> deviceList = await getDeviceList();
-            //在线设备
-            taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.StartCleanMachine.ToString()) && x.State && deviceList.Any(device => device.Ip == x.IP)).ToList();
-           // TaskCallback task = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).FirstOrDefault();
-            if (taskList == null || taskList.Count == 0)
-            {
-                Console.WriteLine("启动清洗机回调任务=>>无回调任务");
-                return "无回调任务";
-            }
-            string message = "";
-            Console.WriteLine("启动清洗机回调任务=>>继续执行");
-            
+                List<TaskCallback> taskList = new List<TaskCallback>();
+                var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
+                if (taskCallbackListData.IsNullOrEmpty)
+                {
+                    taskList = await _taskCallbackService.GetAllList();
+                }
+                else
+                {
+                    taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
+                }
+                List<Device> deviceList = await getDeviceList();
+                //在线设备
+                taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.StartCleanMachine.ToString()) && x.State && deviceList.Any(device => device.Ip == x.IP)).ToList();
+                // TaskCallback task = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).FirstOrDefault();
+                if (taskList == null || taskList.Count == 0)
+                {
+                    return "无回调任务";
+                }
+                string message = "";
+         
                 DateTime currentTime = DateTime.Now; 
                 foreach (TaskCallback task in taskList)
                 { 
@@ -875,12 +1381,11 @@ namespace IMCS.CCS.Service.Impl
                         }
                     }
                     Thread.Sleep(1000);
-                }
+                    }
                 return string.IsNullOrEmpty(message) ? "无回调任务" : message;
             }
             catch (Exception ex)
             {
-                Console.WriteLine("启动清洗机回调任务=>>回调异常 ===>> " + ex.Message, LOG_TITLE_CALLBACK);
                 Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
                 return "回调异常" + ex.Message;
             }
@@ -1257,7 +1762,6 @@ namespace IMCS.CCS.Service.Impl
         {
             try
             {
-          
                 string message = "";
                 string all_use_device_redis_key = imcs_redis_key + RedisKeyEnum.ALLUseDeviceList ;
                 List<Device> devices = new List<Device>();
@@ -1313,14 +1817,11 @@ namespace IMCS.CCS.Service.Impl
                     //Thread.Sleep(50);
                    
                 }
-                
                 return message;
             }
             catch (Exception ex)
             {
-                Console.WriteLine("进入设备监控循设备连接异常,或以离线");
                 Log.Instance.WriteLogAdd("设备连接异常,或以离线" + ex.Message, LOG_TITLE_DEVICE);
-
                 return "设备连接异常,或以离线" + ex.Message;
             }
         }
@@ -1411,14 +1912,13 @@ namespace IMCS.CCS.Service.Impl
         {
             try
             {
-          
                 SiemensS7Net s7 = DevicePlcS7.SiemensS7("192.168.1.1");
                 OperateResult ConnectionResult = s7.ConnectServer();
                 if (!ConnectionResult.IsSuccess)
                 {
        
                     s7.ConnectClose();
-                    Log.Instance.WriteLogAdd("S7心跳写入异常,plc连不上==>" + "192.168.1.1", LOG_TITLE_S7);
+                    Log.Instance.WriteLogAdd("S7心跳写入异常,plc连不上==>" + "192.168.1.1", LOG_HEART_PLC);
                     return "心跳写入失败,plc连不上";
                 }
                 else
@@ -1438,12 +1938,414 @@ namespace IMCS.CCS.Service.Impl
                 s7.ConnectClose();
             }catch (Exception ex)
             {
-                Console.WriteLine("心跳写入异常");
-                Log.Instance.WriteLogAdd("心跳写入异常" + ex.Message, LOG_TITLE_S7);
-
+                Log.Instance.WriteLogAdd("心跳写入异常" + ex.Message, LOG_HEART_PLC);
                 return "心跳写入异常" + ex.Message;
             }
             return "心跳写入成功";
         }
+
+        /// <summary>
+        /// 监控设备状态
+        /// </summary>
+        /// <returns></returns>
+        public async Task<string> MonitorEquipmentStatusJob2()
+        {
+            try
+            {
+                SiemensS7Net s7 = DevicePlcS7.SiemensS7("192.168.1.1");
+                OperateResult ConnectionResult = s7.ConnectServer();
+                if (!ConnectionResult.IsSuccess)
+                {
+
+                    s7.ConnectClose();
+                    Log.Instance.WriteLogAdd("监控设备状态写入异常,plc连不上==>" + "192.168.1.1", LOG_RESOURCE_STATE);
+                    return "监控设备状态写入异常,plc连不上";
+                }
+
+                List<EquipmentMonitor> equipmentMonitors = new List<EquipmentMonitor>();
+                string equipment_monitors_redis_key = imcs_redis_key + RedisKeyEnum.MonitorEquipmentStatusJob;
+                var data = await _redisService.Database.StringGetAsync(equipment_monitors_redis_key);
+                if (data.IsNullOrEmpty)
+                {
+                    equipmentMonitors = await _equipmentMonitorService.GetList();
+                    //首次设置redis
+                    if (equipmentMonitors != null && equipmentMonitors.Count > 0)
+                    {
+                        await _redisService.Database.StringSetAsync(equipment_monitors_redis_key, JsonConvert.SerializeObject(equipmentMonitors));
+                    }
+                }
+                else
+                {
+                    equipmentMonitors = JsonConvert.DeserializeObject<List<EquipmentMonitor>>(data);
+                }
+                //变化的设备
+                List<EquipmentMonitor> changeEquipmentMonitors = new List<EquipmentMonitor>();
+                foreach (EquipmentMonitor equipment in equipmentMonitors)
+                {
+                    string operateResult = s7.ReadInt16(equipment.Address).Content.ToString();
+
+                    string state = operateResult == "0" ? "离线" : operateResult == "1" ? "生产中" : "空闲";
+
+                    if(equipment.Status == null || equipment.Status != state)
+                    {
+                        equipment.Status = state;
+                        changeEquipmentMonitors.Add(equipment);
+                    }
+                }
+                //初始化推送列表
+                List<ProductionStatus> productionStatusList = new List<ProductionStatus>();
+
+                //变化的修改 并且更新缓存
+                if (changeEquipmentMonitors.Count > 0)
+                {
+                    foreach (EquipmentMonitor changeEquipment in changeEquipmentMonitors)
+                    {
+                        ProductionStatus productionStatus = new ProductionStatus();
+                        productionStatus.id = changeEquipment.Id.ToString();
+                        productionStatus.onlineStatus = syncStatusMap[changeEquipment.Status].ToString();
+                        if (changeEquipment.Description != null)
+                        {
+                            productionStatus.ip = changeEquipment.IP;
+                        }
+                        productionStatusList.Add(productionStatus);
+
+                    }
+                    //修改并重置缓存
+                    await _equipmentMonitorService.UpdateAndCache(equipmentMonitors);
+                }
+             
+
+                //推送
+                if (productionStatusList != null && productionStatusList.Count > 0)
+                {
+                    //主动推送同步状态数据接口
+                    RequestSynStatusData requestData = new RequestSynStatusData();
+                    requestData.productionStatus = JsonConvert.SerializeObject(productionStatusList);
+                    String synStatusUrl = ecsRootUrlContext + "/api/authority/synStatus/synDeviceStatus";
+                    var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, synStatusUrl, requestData, null);
+                    //解析回调数据结果
+                    ResponseECSCallbackData responseECSCallback = JsonConvert.DeserializeObject<ResponseECSCallbackData>(result.Message);
+                    if (responseECSCallback != null && responseECSCallback.code == 0)
+                    {
+                        Log.Instance.WriteLogAdd("同步设备状态成功==>" + JsonConvert.SerializeObject(productionStatusList), LOG_RESOURCE_STATE);
+                    }
+                    else
+                    {
+                        Log.Instance.WriteLogAdd("同步设备状态操作失败==>:" + JsonConvert.SerializeObject(productionStatusList) + responseECSCallback.msg, LOG_RESOURCE_STATE);
+                    }
+                }
+                return "监控设备状态成功";
+            }
+            catch (Exception ex)
+            {
+                Log.Instance.WriteLogAdd("MonitorEquipmentStatusJob:" + ex.Message, LOG_RESOURCE_STATE);
+
+                return "MonitorEquipmentStatusJob : " + ex.Message;
+            }
+        }
+
+        /// <summary>
+        /// 拍照回调任务
+        /// </summary> 
+        /// <returns></returns>
+        public async Task<string> CallTakePhoto()
+        {   
+            try
+            {
+                List<TaskCallback> taskList = new List<TaskCallback>();
+                var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
+                if (taskCallbackListData.IsNullOrEmpty)
+                {
+                    taskList = await _taskCallbackService.GetAllList();
+                }
+                else
+                {
+                    taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
+                }
+                //在线设备 
+                List<Device> deviceList = await getDeviceList();
+
+                taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.TakePhoto.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() ; 
+                if (taskList == null || taskList.Count == 0)
+                {
+                    return "无回调任务";
+                }
+                string message = "";
+
+                foreach (TaskCallback task in taskList)
+                {
+                    CcsTagValue tagValueQuery = new CcsTagValue();
+                    tagValueQuery.Ip = task.IP;
+                    //tagValueQuery.Address = task.Address;
+                    List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery).ToList();
+
+                    //系统操作模式
+                    CcsTagValue tagValueMode = tagValues.Where(o => o.Address == "DB1.2").FirstOrDefault();
+                    if (tagValueMode.TagValue != "257")
+                    {
+                        return "当前操作模式非自动并运行";
+                    }
+
+                    CcsTagValue callBacktagValue = tagValues.Where(o => o.Address == task.Address).FirstOrDefault();
+
+                    if ((callBacktagValue != null && callBacktagValue.TagValue == task.CallbackValue))
+                    {
+                        //执行位清零
+                        SiemensS7Net s7 = DevicePlcS7.SiemensS7(task.IP);
+                        HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
+                        if (!ConnectionResult.IsSuccess)
+                        {
+                            Log.Instance.WriteLogAdd("回调异常,PLC连接不上==>", LOG_TITLE_CALLBACK);
+                            return "回调异常,PLC连接不上==>";
+                        }
+
+                        Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调清零,plc点位:" + task.Address + "值:" + callBacktagValue.TagValue, LOG_TITLE_CALLBACK);
+                        s7.Write("DB2.2", Convert.ToInt16("0"));
+                        s7.Write("DB2.4", Convert.ToInt16("0"));
+                        s7.Write("DB2.6", Convert.ToInt16("0"));
+                        s7.Write("DB2.8", Convert.ToInt16("0"));
+                        s7.Write("DB2.10", Convert.ToInt16("0"));
+                       
+
+                        short resultContent = s7.ReadInt16("DB1.2090").Content;
+                        Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,拍照结果:" + resultContent, LOG_TITLE_CALLBACK);
+
+                        s7.ConnectClose();
+
+                        task.State = false;
+                        task.UpdateTime = DateTime.Now;
+                        await _taskCallbackService.CreateOrUpdateAndCache(task);
+
+                        CallBackRequestData requestData = new CallBackRequestData();
+                        requestData.taskId = long.Parse(task.TaskId);
+                        requestData.taskNodeId = long.Parse(task.TaskNodeId);
+                        requestData.content = Convert.ToString(resultContent, 2); //拍照结果
+                        var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
+                        ResponseECSCallbackData responseECSCallback = JsonConvert.DeserializeObject<ResponseECSCallbackData>(result.Message);
+                        if (result.IsSuccess && responseECSCallback.code == 0)
+                        {
+                            task.State = false;
+                            task.UpdateTime = DateTime.Now;
+                            await _taskCallbackService.CreateOrUpdateAndCache(task);
+                            message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + ",请求结果:" + result.Message + ";";
+                            Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
+                        }
+                        else
+                        {
+                            //ecs返回-5 任务作废
+                            if (result.IsSuccess && responseECSCallback.code == -5)
+                            {
+                                task.State = false;
+                                task.UpdateTime = DateTime.Now;
+                                task.Description = "ecs返回-5,回调任务作废";
+                                await _taskCallbackService.CreateOrUpdateAndCache(task);
+                                message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
+                                Log.Instance.WriteLogAdd("回调异常,请求接口失败,ecs通知任务作废==>" + JsonConvert.SerializeObject(result), LOG_TITLE_CALLBACK);
+
+                            }
+                            else
+                            {
+                                message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
+                                Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(result), LOG_TITLE_CALLBACK);
+                            }
+
+                        }
+
+                    }
+                    //回调检测到失败,回调通知ecs
+                    if (!string.IsNullOrEmpty(task.FailAddress) || !string.IsNullOrEmpty(task.FailAddress2) || !string.IsNullOrEmpty(task.FailAddress3))
+                    {
+                        bool failFalg = false;
+                        if (!string.IsNullOrEmpty(task.FailAddress))
+                        {
+                            List<CcsTagValue> FailCallbackTagValues = tagValues.Where(o => o.Address == task.FailAddress && o.TagValue == task.CallbackFailValue).ToList();
+
+                            if (FailCallbackTagValues != null && FailCallbackTagValues.Count > 0)
+                            {
+                                failFalg = true;
+                            }
+                        }
+                        if (!string.IsNullOrEmpty(task.FailAddress2))
+                        {
+                            List<CcsTagValue> FailCallbackTagValues = tagValues.Where(o => o.Address == task.FailAddress2 && o.TagValue == task.CallbackFailValue2).ToList();
+
+                            if (FailCallbackTagValues != null && FailCallbackTagValues.Count > 0)
+                            {
+                                failFalg = true;
+                            }
+                        }
+                        if (!string.IsNullOrEmpty(task.FailAddress3))
+                        {
+                            List<CcsTagValue> FailCallbackTagValues = tagValues.Where(o => o.Address == task.FailAddress3 && o.TagValue == task.CallbackFailValue3).ToList();
+
+                            if (FailCallbackTagValues != null && FailCallbackTagValues.Count > 0)
+                            {
+                                failFalg = true;
+                            }
+                        }
+                        if (failFalg)
+                        {
+                            CallBackRequestData requestData = new CallBackRequestData();
+                            requestData.taskId = long.Parse(task.TaskId);
+                            requestData.taskNodeId = long.Parse(task.TaskNodeId);
+                            requestData.code = "0";
+                            requestData.msg = "操作失败";
+                            var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
+                            if (result.IsSuccess)
+                            {
+                                task.State = false;
+                                task.UpdateTime = DateTime.Now;
+                                await _taskCallbackService.CreateOrUpdateAndCache(task);
+                                message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + message + ",请求结果:" + result.Message + ";";
+                                Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
+                            }
+                            else
+                            {
+                                message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
+                                Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
+                            }
+                        }
+                    }
+                    Thread.Sleep(1000);
+                }
+                return string.IsNullOrEmpty(message) ? "无回调任务" : message;
+            }
+            catch (Exception ex)
+            {
+                Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
+                return "回调异常" + ex.Message;
+            }
+        }
+
+        /// <summary>
+        /// PLC报警信息
+        /// </summary> 
+        /// <returns></returns>
+        public async Task<string> PlcAlarm()
+        {
+            try
+            {
+                SiemensS7Net s7 = DevicePlcS7.SiemensS7("192.168.1.1");
+                OperateResult ConnectionResult = s7.ConnectServer();
+                if (!ConnectionResult.IsSuccess)
+                {
+
+                    s7.ConnectClose();
+                    return "PLC报警信息采集失败,plc连不上";
+                }
+
+                CcsActionAddress actionAddressQueryRead = new CcsActionAddress();
+                actionAddressQueryRead.ActionId = 17;
+                List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQueryRead);
+                string errorInfo = "@";
+                foreach (CcsActionAddress actionAddress in CcsActionAddresses)
+                {
+                    if (!string.IsNullOrEmpty(actionAddress.Address))
+                    {
+                        bool result = s7.ReadBool(actionAddress.Address).Content;
+                        if (result)
+                        {
+                            errorInfo += actionAddress.Description + "@";
+                        }
+                    }
+                }
+                string plc_alarm_redis_key = imcs_redis_key + RedisKeyEnum.PlcAlarm;
+                var data = await _redisService.Database.StringGetAsync(plc_alarm_redis_key);
+
+                if (data.IsNullOrEmpty)
+                {
+                    data = "@";
+                    await _redisService.Database.StringSetAsync(plc_alarm_redis_key, data);
+                }
+                string hisErrorInfo = data.ToString();
+
+                if (hisErrorInfo != errorInfo)
+                {
+                    //两次报警信息不一致
+                    //主动推送同步状态数据接口
+                    RequestSynStatusData requestData = new RequestSynStatusData();
+                    requestData.productionStatus = errorInfo;
+                    String synStatusUrl = ecsRootUrlContext + "/api/authority/synStatus/synPlcInfo";
+                    var returnResult = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, synStatusUrl, requestData, null);
+                    //解析回调数据结果
+                    ResponseECSCallbackData responseECSCallback = JsonConvert.DeserializeObject<ResponseECSCallbackData>(returnResult.Message);
+                    if (responseECSCallback != null && responseECSCallback.code == 0)
+                    {
+                        Log.Instance.WriteLogAdd("同步PLC状态成功==>" + JsonConvert.SerializeObject(errorInfo), LOG_RESOURCE_STATE);
+                    }
+                    else
+                    {
+                        Log.Instance.WriteLogAdd("同步PLC状状态操作失败==>:" + JsonConvert.SerializeObject(errorInfo) + responseECSCallback.msg, LOG_RESOURCE_STATE);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                Log.Instance.WriteLogAdd("同步PLC状态:" + ex.Message, LOG_RESOURCE_STATE);
+
+                return "同步PLC状态 : " + ex.Message;
+            }
+            return "PLC报警信息采集成功";
+        }
+
+        /// <summary>
+        /// 更新机床刀库回调
+        /// </summary> 
+        /// <returns></returns>
+        public async Task<string> CallUpdateMachineTool()
+        {
+            List<TaskCallback> list = new List<TaskCallback>();
+            var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
+            if (taskCallbackListData.IsNullOrEmpty)
+            {
+                list = await _taskCallbackService.GetAllList();
+            }
+            else
+            {
+                list = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
+            }
+
+            TaskCallback task = list.Where(x => x.OperateType.Equals(ActionTypeEnum.UpdateMachineTool.ToString())).FirstOrDefault();
+            if (task == null)
+            {
+                return "无回调任务";
+            }
+            string message = "";
+            try
+            {
+
+                DateTime currentTime = DateTime.Now;
+                if (currentTime.Subtract(task.CreateTime).TotalSeconds > 5)
+                {
+                    CallBackRequestData requestData = new CallBackRequestData();
+                    requestData.taskId = long.Parse(task.TaskId);
+                    requestData.taskNodeId = long.Parse(task.TaskNodeId);
+                    var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
+                    ResponseECSCallbackData responseECSCallback = JsonConvert.DeserializeObject<ResponseECSCallbackData>(result.Message);
+                    if (result.IsSuccess && responseECSCallback.code == 0)
+                    {
+                        task.State = false;
+                        task.UpdateTime = DateTime.Now;
+                        await _taskCallbackService.CreateOrUpdateAndCache(task);
+                        message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + ",请求结果:" + result.Message + ";";
+                        Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
+                    }
+                    else
+                    {
+                        message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
+                        Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(result), LOG_TITLE_CALLBACK);
+                    }
+
+                }
+                return string.IsNullOrEmpty(message) ? "无回调任务" : message;
+            }
+            catch (Exception ex)
+            {
+                Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
+                return "回调异常" + ex.Message;
+            }
+        }
     }
 }

+ 1 - 1
IMCS_CCS/Service/Jobs/ResultfulApiJob.cs

@@ -70,7 +70,7 @@ namespace IMCS.CCS.Service.Jobs
                 }
                 else
                 {
-                    _logger.LogError($"Web Api RequestAsync(); 请求失败! WebApi 返回结果:{result.Message}");
+                   // _logger.LogError($"Web Api RequestAsync(); 请求失败! WebApi 返回结果:{result.Message}");
                 }
 
                 _stopwatch.Stop();

+ 5 - 6
IMCS_CCS/Utils/Log/Log.cs

@@ -20,12 +20,12 @@ namespace IMCS.CCS
             {
                 Directory.CreateDirectory(Path);
             }
-            //ThreadWrite();
+            ThreadWrite();
         }
          
         public void WriteLogAdd(string msg, string path=null)
         {
-          //  qs.Enqueue(new LogDefaultList() { msg = msg, path = path });
+            qs.Enqueue(new LogDefaultList() { msg = msg, path = path });
         }
         public delegate void DelShowLog(string msg);
         public event DelShowLog EveShowLog;
@@ -33,7 +33,6 @@ namespace IMCS.CCS
         {
             try
             {
-                Console.WriteLine("进入消息执行方法体:" + msg + "路径==》" + path);
                 if (string.IsNullOrEmpty(path))
                 {
                     path = DateTime.Now.ToString("yyyy-MM-dd");
@@ -46,10 +45,10 @@ namespace IMCS.CCS
                 streamWriter.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "-->>>" + msg);
                 streamWriter.Close();
                 this.EveShowLog?.Invoke(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "-->>>" + msg);
-                Console.WriteLine("完成日志写入");
-            }catch(Exception e)
+            }catch(Exception ex)
             {
-                Console.WriteLine("写入日志异常");
+                Console.WriteLine("写入日志文件失败:" + ex.Message);
+                streamWriter.Close();
             }
             
         }

+ 4 - 4
IMCS_CCS/appsettings.json

@@ -24,12 +24,12 @@
     "Tasks": "IMCS.CCS:Tasks"
   },
   //Redis �����ַ���
-  "RedisConnectionString": "192.168.1.240:6379,password=123456,defaultDatabase=0",
+  "RedisConnectionString": "localhost:6379,password=123456,defaultDatabase=0",
   //������������
   "ConnectionStrings": {
-    "mysqlContext": "server=192.168.1.240;port=3306;database=ccs_htl;uid=root;pwd=123456;CharSet=utf8;Allow Zero Datetime=True",
-    "ecsUrlContext": "http://192.168.1.240:80/api/authority/taskNode/taskNodeCallback",
-    "ecsRootUrlContext": "http://192.168.1.240:80",
+    "mysqlContext": "server=localhost;port=3306;database=ccs_htl;uid=root;pwd=123456;CharSet=utf8;Allow Zero Datetime=True",
+    "ecsUrlContext": "http://localhost:9099/api/authority/taskNode/taskNodeCallback",
+    "ecsRootUrlContext": "http://localhost:9099",
     //"FTPServer": "192.168.170.25",
     //"FTPUser": "PROG",
     //"FTPPwd": "abc.1234",

+ 1 - 1
IMCS_CCS/bin/Debug/netcoreapp3.1/wwwroot/db/Projects.json

@@ -1 +1 @@
-[{"Id":"39028940-7220-465f-9ad6-830df4bda250","Name":"数据采集中心 ","Remark":"数据采集中心  测试","CreateTime":"2021-05-17T16:36:18.6736805+08:00"},{"Id":"ae000d98-fd96-45a2-a3bc-b6bb55c2af79","Name":"回调任务","Remark":"回调任务","CreateTime":"2022-08-08T15:10:07.9579395+08:00"}]
+[{"Id":"39028940-7220-465f-9ad6-830df4bda250","Name":"数据采集中心 ","Remark":"数据采集中心  测试","CreateTime":"2021-05-17T16:36:18.6736805+08:00"},{"Id":"ae000d98-fd96-45a2-a3bc-b6bb55c2af79","Name":"回调任务","Remark":"回调任务","CreateTime":"2022-08-08T15:10:07.9579395+08:00"},{"Id":"d9d13c22-e311-4c00-8299-cd23384d56a9","Name":"心跳任务","Remark":"心跳任务","CreateTime":"2024-03-20T12:39:45.9318023+08:00"}]

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
IMCS_CCS/bin/Debug/netcoreapp3.1/wwwroot/db/Tasks.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
IMCS_CCS/wwwroot/db/Tasks.json


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است