Bläddra i källkod

增加刀具取刀、零件设备绑定信息

wang.sq@aliyun.com 1 månad sedan
förälder
incheckning
869d6f1609

+ 49 - 0
IMCS_CCS/Controllers/CcsController.cs

@@ -227,6 +227,30 @@ namespace IMCS.CCS.Controllers
             return await _httpRequestService.SendOffsetSetting(data);
         }
 
+        /// <summary>
+        /// 查询rfid数据
+        /// </summary> 
+        /// <returns></returns>
+        [Route("api/findRfidData")]
+        [HttpPost]
+        public async Task<ActionResult<ResponseECSData>> findRfidData(RequestData<RequestToolData> data)
+        {
+            Console.WriteLine("查询rfid数据" + JsonConvert.SerializeObject(data));
+            return await _httpRequestService.findRfidData(data);
+        }
+
+        /// <summary>
+        /// rfid重置
+        /// </summary> 
+        /// <returns></returns>
+        [Route("api/rfidReset")]
+        [HttpPost]
+        public async Task<ActionResult<ResponseECSData>> rfidReset(RequestData<RequestToolData> data)
+        {
+            Console.WriteLine("rfid重置" + JsonConvert.SerializeObject(data));
+            return await _httpRequestService.rfidReset(data);
+        }
+
         /// <summary>
         /// 查询刀具上下料站、机床刀具位是否允许取
         /// </summary> 
@@ -251,5 +275,30 @@ namespace IMCS.CCS.Controllers
             return await _httpRequestService.getCutterDeviceIsPut(data);
         }
 
+        /// <summary>
+        /// 设置刀具取状态
+        /// </summary> 
+        /// <returns></returns>
+        [Route("api/setWriteTakeCutter")]
+        [HttpPost]
+        public async Task<ActionResult<ResponseECSData>> setWriteTakeCutter(RequestData<CutterTestData> data)
+        {
+            Console.WriteLine("设置刀具取状态" + JsonConvert.SerializeObject(data));
+            return await _httpRequestService.setWriteTakeCutter(data);
+        }
+
+        
+        /// <summary>
+        /// 设备绑定信息
+        /// </summary> 
+        /// <returns></returns>
+        [Route("api/sendTheBindingInfo")]
+        [HttpPost]
+        public async Task<ActionResult<ResponseECSData>> sendTheBindingInfo(RequestData<BindInfo> data)
+        {
+            Console.WriteLine("设备绑定信息" + JsonConvert.SerializeObject(data));
+            return await _httpRequestService.sendTheBindingInfo(data);
+        }
+
     }
 }

+ 7 - 1
IMCS_CCS/Entitys/CcsAction.cs

@@ -64,7 +64,13 @@ namespace IMCS.CCS.Entitys
         [EnumDescription("三坐标启动")]
         ThreeDimensionalRun,
         [EnumDescription("偏移量设置")]
-        WriteDeviationValue
+        WriteDeviationValue,
+        [EnumDescription("读取rfid数据")]
+        RfidRead,
+        [EnumDescription("重置rfid数据")]
+        RfidReset,
+        [EnumDescription("绑定数据")]
+        BindingInfo
     }
 
     /// <summary>

+ 2 - 0
IMCS_CCS/Entitys/CcsActionAddress.cs

@@ -42,6 +42,8 @@ namespace IMCS.CCS.Entitys
     {
         [EnumDescription("写入")] 
         WRITE,
+        [EnumDescription("读取")]
+        READ,
         [EnumDescription("写入校验下一个是否条件写入")]
         WRITE_CHECK,
         [EnumDescription("校验")]

+ 32 - 15
IMCS_CCS/Entitys/RequestData.cs

@@ -76,6 +76,12 @@ namespace IMCS.CCS.Models
         /// </summary>
         public string IsAllowFlag { get; set; }
 
+        /// <summary>
+        /// rfid
+        /// </summary>
+        public string rfid { get; set; }
+
+
 
 
     }
@@ -346,63 +352,67 @@ namespace IMCS.CCS.Models
 
 
         /*在刀具轴方向上的刀齿长*/
-        private string lcuts { get; set; }
+        public string lcuts { get; set; }
 
 
         /*准确定义刀具的切削刃正面宽度*/
-        private string rcuts { get; set; }
+        public string rcuts { get; set; }
 
 
         /*准确定义刀具的刀具可用长度*/
-        private string lu { get; set; }
+        public string lu { get; set; }
 
 
         /*准确定义刀具的刀颈半径*/
-        private string rn { get; set; }
+        public string rn { get; set; }
 
 
         /*最大的切入角度*/
-        private string angle { get; set; }
+        public string angle { get; set; }
 
 
         /*最高速度*/
-        private string nmax { get; set; }
+        public string nmax { get; set; }
 
 
         /*刀具长度1的差值*/
-        private string dzl { get; set; }
+        public string dzl { get; set; }
 
 
         /*刀具长度2的差值*/
-        private string dxl { get; set; }
+        public string dxl { get; set; }
 
 
         /*刀具长3的差值*/
-        private string dyl { get; set; }
+        public string dyl { get; set; }
 
 
         /*刀具半径的差值*/
-        private string drs { get; set; }
+        public string drs { get; set; }
 
 
         /*开槽刀宽度的差值*/
-        private string dcw { get; set; }
+        public string dcw { get; set; }
 
 
         /*下刀角*/
-        private string tangle { get; set; }
+        public string tangle { get; set; }
 
 
         /*刀尖角*/
-        private string pangle { get; set; }
+        public string pangle { get; set; }
 
 
         /*切槽刀的切削长度*/
-        private string cutlength { get; set; }
+        public string cutlength { get; set; }
 
 
         /*槽加工刀宽度*/
-        private string cutwidth { get; set; }
+        public string cutwidth { get; set; }
+
+
+        /*doc 取刀状态*/
+        public string doc { get; set; }
 
     }
 
@@ -430,6 +440,13 @@ namespace IMCS.CCS.Models
 
     }
 
+    public class BindInfo
+    {
+        public string uniqueCode { get; set; } = ""; // 零件编码
+        public string trayCode { get; set; } = ""; // 子盘号
+
+    }
+
 
 
 }

+ 58 - 0
IMCS_CCS/IMCS.CCS.xml

@@ -301,6 +301,18 @@
             </summary> 
             <returns></returns>
         </member>
+        <member name="M:IMCS.CCS.Controllers.CcsController.findRfidData(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.RequestToolData})">
+            <summary>
+            查询rfid数据
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Controllers.CcsController.rfidReset(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.RequestToolData})">
+            <summary>
+            rfid重置
+            </summary> 
+            <returns></returns>
+        </member>
         <member name="M:IMCS.CCS.Controllers.CcsController.getCutterDeviceIsTake(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.RequestToolData})">
             <summary>
             查询刀具上下料站、机床刀具位是否允许取
@@ -313,6 +325,18 @@
             </summary> 
             <returns></returns>
         </member>
+        <member name="M:IMCS.CCS.Controllers.CcsController.setWriteTakeCutter(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.CutterTestData})">
+            <summary>
+            设置刀具取状态
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Controllers.CcsController.sendTheBindingInfo(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.BindInfo})">
+            <summary>
+            设备绑定信息
+            </summary> 
+            <returns></returns>
+        </member>
         <member name="M:IMCS.CCS.Controllers.DeviceController.GetDevice(System.Int32)">
             <summary>
             获取设备详情:GET: api/Device/5
@@ -873,6 +897,11 @@
             条件限制标志 空或1 限制规则,0不限制
             </summary>
         </member>
+        <member name="P:IMCS.CCS.Models.CutterLocationData.rfid">
+            <summary>
+            rfid
+            </summary>
+        </member>
         <member name="P:IMCS.CCS.Models.UploadFileData.fileName">
             <summary>
             文件名称
@@ -1223,6 +1252,11 @@
             刀具锁定
             </summary>
         </member>
+        <member name="P:IMCS.CCS.Models.vo.ResponseToolData.doc">
+            <summary>
+            刀具使用完毕此刀位可以换刀
+            </summary>
+        </member>
         <member name="T:IMCS.CCS.Filter.ApiExceptionFilter">
             <summary>
             异常过滤器
@@ -1988,6 +2022,18 @@
             上传文件
             </summary> 
         </member>
+        <member name="M:IMCS.CCS.Services.IHttpRequestService.findRfidData(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.RequestToolData})">
+            <summary>
+            查询rfid数据
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Services.IHttpRequestService.rfidReset(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.RequestToolData})">
+            <summary>
+            重置rfid
+            </summary> 
+            <returns></returns>
+        </member>
         <member name="M:IMCS.CCS.Services.IHttpRequestService.getCutterDeviceIsTake(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.RequestToolData})">
             <summary>
             查询刀具上下料站、机床刀具位是否允许取
@@ -2000,6 +2046,18 @@
             </summary> 
             <returns></returns>
         </member>
+        <member name="M:IMCS.CCS.Services.IHttpRequestService.setWriteTakeCutter(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.CutterTestData})">
+            <summary>
+            设置刀具取状态
+            </summary> 
+            <returns></returns>
+        </member>
+        <member name="M:IMCS.CCS.Services.IHttpRequestService.sendTheBindingInfo(IMCS.CCS.Models.RequestData{IMCS.CCS.Models.BindInfo})">
+            <summary>
+            设备绑定信息
+            </summary> 
+            <returns></returns>
+        </member>
         <member name="M:IMCS.CCS.Services.HttpRequestService.GetTagValue(IMCS.CCS.Models.RequestTagValueData)">
             <summary>
             获取状态当前值

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

@@ -28,6 +28,8 @@ namespace IMCS_CCS.Model.vo
         { get; set; }
         public string DeviationValue
         { get; set; }
+        public string BindInfo
+        { get; set; }
     }
 
     /// <summary>

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

@@ -40,6 +40,7 @@ namespace IMCS_CCS.Model.vo
         Upload,
         SelectNcProgram,
         StartNcProgram,
-        WriteDeviationValue
+        WriteDeviationValue,
+        BindingInfo
     }
 }

+ 28 - 0
IMCS_CCS/Service/IHttpRequestService .cs

@@ -109,6 +109,20 @@ namespace IMCS.CCS.Services
         /// </summary> 
         Task<ResponseECSData> SendOffsetSetting(RequestData<ThreeDimensionalOffset> req);
 
+
+        /// <summary>
+        /// 查询rfid数据
+        /// </summary> 
+        /// <returns></returns>
+        Task<ResponseECSData> findRfidData(RequestData<RequestToolData> reqs);
+
+
+        /// <summary>
+        /// 重置rfid
+        /// </summary> 
+        /// <returns></returns>
+        Task<ResponseECSData> rfidReset(RequestData<RequestToolData> reqs);
+
         /// <summary>
         /// 查询刀具上下料站、机床刀具位是否允许取
         /// </summary> 
@@ -122,6 +136,20 @@ namespace IMCS.CCS.Services
         Task<ResponseECSData> getCutterDeviceIsPut(RequestData<RequestToolData> reqs);
 
 
+        /// <summary>
+        /// 设置刀具取状态
+        /// </summary> 
+        /// <returns></returns>
+        Task<ResponseECSData> setWriteTakeCutter(RequestData<CutterTestData> reqs);
+
+
+        /// <summary>
+        /// 设备绑定信息
+        /// </summary> 
+        /// <returns></returns>
+        Task<ResponseECSData> sendTheBindingInfo(RequestData<BindInfo> reqs);
+
+
 
     }
 }

+ 406 - 4
IMCS_CCS/Service/Impl/HttpRequestService.cs

@@ -26,6 +26,8 @@ using IMCS_CCS.Service;
 using IMCS_CCS.Entitys;
 using static Google.Protobuf.Reflection.SourceCodeInfo.Types;
 using Newtonsoft.Json.Linq;
+using static AutoMapper.Internal.ExpressionFactory;
+using Microsoft.EntityFrameworkCore.Internal;
 
 namespace IMCS.CCS.Services
 {
@@ -749,7 +751,8 @@ namespace IMCS.CCS.Services
                         {
                             // 写入源刀位号
                             parValue = req.data.LocationNo;
-                            if (req.data.LocationNo == null || req.data.LocationNo == "") {
+                            if (req.data.LocationNo == null || req.data.LocationNo == "")
+                            {
                                 parValue = "0";
                             }
                             s7.Write(actionAddress.Address, Convert.ToByte(parValue));
@@ -764,6 +767,10 @@ namespace IMCS.CCS.Services
                             }
                             s7.Write(actionAddress.Address, Convert.ToByte(parValue));
                         }
+                        else if (actionAddress.Sort == 5) {
+                            parValue = req.data.rfid;
+                            s7.Write(actionAddress.Address, Convert.ToInt16(parValue));
+                        }
 
                         // 同步TagValue数据状态
                         CcsTagValue tagValueQuery = new CcsTagValue();
@@ -899,16 +906,21 @@ namespace IMCS.CCS.Services
 
                                 int separatorIndex = req.data.LocationNo.IndexOf(".");
                                 string substring = req.data.LocationNo.Substring(separatorIndex+1); // 从第7个字符开始截取5个字符
+                                int num = int.Parse(substring);
+                                string formatted = num.ToString("D2");  
 
-                                before = "ATC00" + substring + req.data.Location.Substring(7, 3);
+                                before = "ATC00" + formatted + req.data.Location.Substring(7, 3);
                             }
                             string theTail = "EMPTY00000";
                             if (req.data.DestLocation != null && req.data.DestLocation.Length>0) {
 
                                 int separatorIndex = req.data.DestLocationNo.IndexOf(".");
                                 string substring = req.data.DestLocationNo.Substring(separatorIndex+1); // 从第7个字符开始截取5个字符
+                                int num = int.Parse(substring);
+                                string formatted = num.ToString("D2");
+
 
-                                theTail = "ATC00" + substring + req.data.DestLocation.Substring(7, 3);
+                                theTail = "ATC00" + formatted + req.data.DestLocation.Substring(7, 3);
                             }
                             parValue = before + theTail;
 
@@ -1326,7 +1338,7 @@ namespace IMCS.CCS.Services
             List<Device> deviceList = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).ToList();
 
             if (deviceList ==null || deviceList.Count <= 0) {
-                throw new InvalidOperationException("没查询到设备数据");
+                throw new InvalidOperationException("没查询到在线设备数据");
             }
 
             Device device = deviceList.FirstOrDefault();
@@ -2046,6 +2058,267 @@ namespace IMCS.CCS.Services
             }
         }
 
+        public async Task<ResponseECSData> findRfidData(RequestData<RequestToolData> reqs)
+
+        {
+            Log.Instance.WriteLogAdd("查询rfid数据===>> " + JsonConvert.SerializeObject(reqs), "查询rfid数据");
+            // 1、根据url查询设备信息   2、调用httpserveer 发送执行消息
+
+            ResponseECSData responseData = new ResponseECSData(reqs.taskId, reqs.taskNodeId, "执行成功");
+            SiemensS7Net s7 = null;
+            try
+            {
+
+                // 获取所有在线的设备
+                List<Device> devices = _deviceService.GetDeviceList();
+
+                // 比较在线设备是否在其中
+                Device device = devices.Where(x => x.Ip == reqs.url && x.Port == reqs.port).FirstOrDefault();
+
+                if (device == null)
+                {
+                    Log.Instance.WriteLogAdd(ActionTypeEnum.RfidRead + "设备已离线===>>" + JsonConvert.SerializeObject(reqs),
+                    EnumHelper.GetDescription(ActionTypeEnum.RfidRead));
+                    responseData.result = "false";
+                    responseData.resultMsg = "设备已离线:" + reqs.url;
+                    return responseData;
+                }
+
+                // 根据ip查询设备
+                CcsAction actionQuery = new CcsAction();
+                actionQuery.OperateType = ActionTypeEnum.RfidRead.ToString();
+                actionQuery.Ip = reqs.url;
+                CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
+
+                // 进行plc的连接
+                s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
+                OperateResult ConnectionResult = s7.ConnectServer();
+                if (!ConnectionResult.IsSuccess)
+                {
+                    s7.ConnectClose();
+                    Log.Instance.WriteLogAdd(ActionTypeEnum.RfidRead + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(reqs),
+                    EnumHelper.GetDescription(ActionTypeEnum.RfidRead));
+                    responseData.result = "false";
+                    responseData.resultMsg = ActionTypeEnum.RfidRead + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(reqs);
+                    return responseData;
+                }
+
+
+                // 查询需要操作的plc的db块
+                CcsActionAddress actionAddressQuery = new CcsActionAddress();
+                actionAddressQuery.ActionId = actionInfo.Id;
+                List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
+
+                //查询出需要检查的地址列表
+                List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
+                foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
+                {
+                    if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
+                    {
+                        string operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
+                        if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
+                        {
+                            s7.ConnectClose();
+                            Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(reqs),
+                            EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
+                            responseData.result = "false";
+                            responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
+                            return responseData;
+                        }
+                    }
+                }
+
+                // 查询需要读取的地址列表
+                List<CcsActionAddress> CcsActionAddressReads = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.READ.ToString()).ToList();
+                Dictionary<string, string> map = new Dictionary<string, string>();
+
+                int i = 1;
+                foreach (CcsActionAddress actionAddress in CcsActionAddressReads)
+                {
+                    if (string.IsNullOrEmpty(actionAddress.Address)) {
+                        continue;
+                    }
+
+
+                    string operateResult = "";
+                    if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.BOOL.ToString()))
+                    {
+                        operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
+                    }
+                    else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.SHORT.ToString()))
+                    {
+                        operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
+                    }
+                    else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.String.ToString()))
+                    {
+                        operateResult = s7.ReadString(actionAddress.Address).Content.ToString();
+                    }
+                    else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.Byte.ToString()))
+                    {
+                        operateResult = s7.ReadByte(actionAddress.Address).Content.ToString();
+                    }
+
+                    map.Add("par"+1, operateResult);
+
+                }
+                responseData.returnData = JsonConvert.SerializeObject(map, Formatting.Indented);
+
+
+                //查询需要写入地址列表
+                List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
+                foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
+                {
+                    if (!string.IsNullOrEmpty(actionAddress.Address))
+                    {
+                        string parValue = "";
+                        if (actionAddress.Sort == 1)
+                        {
+                            parValue = actionAddress.Value;
+                            s7.Write(actionAddress.Address, Convert.ToBoolean(parValue));
+                        }
+                        else if (actionAddress.Sort == 2)
+                        {
+                            parValue = actionAddress.Value;
+                            s7.Write(actionAddress.Address, Convert.ToBoolean(parValue));
+                        }
+
+                        // 同步TagValue数据状态
+                        CcsTagValue tagValueQuery = new CcsTagValue();
+                        tagValueQuery.Ip = reqs.url;
+                        tagValueQuery.Address = actionAddress.Address;
+                        CcsTagValue tagValue = _ccsTagValueService.GetList(tagValueQuery).ToList().FirstOrDefault();
+                        if (tagValue != null)
+                        {
+                            tagValue.TagValue = parValue;
+                            await _ccsTagValueService.Update(tagValue);
+                        }
+
+                        Thread.Sleep(SLEEP_TIME);
+                    }
+                }
+
+                s7.ConnectClose();
+                Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.RfidRead) + "取成功===>>" + JsonConvert.SerializeObject(reqs)
+                   , EnumHelper.GetDescription(ActionTypeEnum.RfidRead));
+
+                return responseData;
+
+            }
+            catch (Exception ex)
+            {
+                s7.ConnectClose();
+                Log.Instance.WriteLogAdd(ActionTypeEnum.RfidRead + "设置异常===>>" + ex.Message + JsonConvert.SerializeObject(reqs),
+                    EnumHelper.GetDescription(ActionTypeEnum.RfidRead));
+                responseData.resultMsg = ActionTypeEnum.RfidRead + "设置异常===>>" + ex.Message + JsonConvert.SerializeObject(reqs);
+                responseData.result = "false";
+                return responseData;
+            }
+
+        }
+
+
+        public async Task<ResponseECSData> rfidReset(RequestData<RequestToolData> reqs)
+        {
+            Log.Instance.WriteLogAdd("rfid重置===>> " + JsonConvert.SerializeObject(reqs), "查询rfid数据");
+            // 1、根据url查询设备信息   2、调用httpserveer 发送执行消息
+
+            ResponseECSData responseData = new ResponseECSData(reqs.taskId, reqs.taskNodeId, "执行成功");
+            SiemensS7Net s7 = null;
+            try
+            {
+
+                // 获取所有在线的设备
+                List<Device> devices = _deviceService.GetDeviceList();
+
+                // 比较在线设备是否在其中
+                Device device = devices.Where(x => x.Ip == reqs.url && x.Port == reqs.port).FirstOrDefault();
+
+                if (device == null)
+                {
+                    Log.Instance.WriteLogAdd(ActionTypeEnum.RfidReset + "设备已离线===>>" + JsonConvert.SerializeObject(reqs),
+                    EnumHelper.GetDescription(ActionTypeEnum.RfidReset));
+                    responseData.result = "false";
+                    responseData.resultMsg = "设备已离线:" + reqs.url;
+                    return responseData;
+                }
+
+                // 根据ip查询设备
+                CcsAction actionQuery = new CcsAction();
+                actionQuery.OperateType = ActionTypeEnum.RfidReset.ToString();
+                actionQuery.Ip = reqs.url;
+                CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
+
+                // 进行plc的连接
+                s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
+                OperateResult ConnectionResult = s7.ConnectServer();
+                if (!ConnectionResult.IsSuccess)
+                {
+                    s7.ConnectClose();
+                    Log.Instance.WriteLogAdd(ActionTypeEnum.RfidReset + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(reqs),
+                    EnumHelper.GetDescription(ActionTypeEnum.RfidReset));
+                    responseData.result = "false";
+                    responseData.resultMsg = ActionTypeEnum.RfidReset + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(reqs);
+                    return responseData;
+                }
+
+
+                // 查询需要操作的plc的db块
+                CcsActionAddress actionAddressQuery = new CcsActionAddress();
+                actionAddressQuery.ActionId = actionInfo.Id;
+                List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
+
+                //查询需要写入地址列表
+                List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
+                
+                foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
+                {
+                    if (!string.IsNullOrEmpty(actionAddress.Address))
+                    {
+                        string parValue = "";
+                        if (actionAddress.Sort == 1)
+                        {
+                            parValue = actionAddress.Value;
+                            s7.Write(actionAddress.Address, Convert.ToBoolean(parValue));
+                        }
+                        else if (actionAddress.Sort == 2)
+                        {
+                            parValue = actionAddress.Value;
+                            s7.Write(actionAddress.Address, Convert.ToBoolean(parValue));
+                        }
+
+                        // 同步TagValue数据状态
+                        CcsTagValue tagValueQuery = new CcsTagValue();
+                        tagValueQuery.Ip = reqs.url;
+                        tagValueQuery.Address = actionAddress.Address;
+                        CcsTagValue tagValue = _ccsTagValueService.GetList(tagValueQuery).ToList().FirstOrDefault();
+                        if (tagValue != null)
+                        {
+                            tagValue.TagValue = parValue;
+                            await _ccsTagValueService.Update(tagValue);
+                        }
+
+                        Thread.Sleep(SLEEP_TIME);
+                    }
+                }
+
+                s7.ConnectClose();
+                Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.RfidReset) + "取成功===>>" + JsonConvert.SerializeObject(reqs)
+                   , EnumHelper.GetDescription(ActionTypeEnum.RfidReset));
+
+                return responseData;
+
+            }
+            catch (Exception ex)
+            {
+                s7.ConnectClose();
+                Log.Instance.WriteLogAdd(ActionTypeEnum.RfidReset + "设置异常===>>" + ex.Message + JsonConvert.SerializeObject(reqs),
+                    EnumHelper.GetDescription(ActionTypeEnum.RfidReset));
+                responseData.resultMsg = ActionTypeEnum.RfidReset + "设置异常===>>" + ex.Message + JsonConvert.SerializeObject(reqs);
+                responseData.result = "false";
+                return responseData;
+            }
+        }
+
         /// <summary>
         /// 查询刀具上下料站、机床刀具位是否允许取
         /// </summary> 
@@ -2384,8 +2657,137 @@ namespace IMCS.CCS.Services
             return responseData;
         }
 
+        public async Task<ResponseECSData> setWriteTakeCutter(RequestData<CutterTestData> req)
+        {
+            Log.Instance.WriteLogAdd("设置刀具取状态===>> " + JsonConvert.SerializeObject(req), "设置刀具取状态");
+            // 1、根据url查询设备信息   2、调用httpserveer 发送执行消息
+
+            ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "设置刀具取状态");
+            try
+            {
+                // 获取所有在线的设备
+                List<Device> devices = _deviceService.GetDeviceList();
+
+                // 比较在线设备是否在其中
+                Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
+
+                if (device == null)
+                {
+                    Log.Instance.WriteLogAdd("设备已离线===>>" + JsonConvert.SerializeObject(req),
+                    "设置刀具取状态");
+                    responseData.result = "false";
+                    responseData.resultMsg = "设备已离线:" + req.url;
+                    return responseData;
+                }
+
+                // 调用httpserver 设置参数
+                if (null != device && device.ProtocolType == "HEIDEHAIN")
+                {
+                    RequestHeidhData hdhReq = new RequestHeidhData();
+                    hdhReq.ServerUrl = device.ServerUrl;
+                    hdhReq.MachineName = device.UserName;
+                    hdhReq.Type = "WriteTakeCutter";
+                    hdhReq.CutterData = JsonConvert.SerializeObject(req.data);
+
+                    var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
+                    ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
+                    if (!Result.IsSuccess || !responseHeidhData.result)
+                    {
+                        Log.Instance.WriteLogAdd(ActionTypeEnum.WriteDeviationValue + "设置失败===>>" + JsonConvert.SerializeObject(req) + "======结果数据:" + Result, "设置刀具取状态");
+                        responseData.result = "false";
+                        responseData.resultMsg = Result.Message;
+                        return responseData;
+                    }
+                    else
+                    {
+                        responseData.result = "true";
+                        responseData.resultMsg = "消费成功";
+                    }
+
+                }
+
+
+            }
+            catch (Exception ex)
+            {
+                //  关闭连接
+                Log.Instance.WriteLogAdd("任务执行异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
+                    "设置刀具取状态");
+                responseData.result = "false";
+                responseData.resultMsg = ex.Message;
+            }
+            return responseData;
+
+        }
+
+        public async Task<ResponseECSData> sendTheBindingInfo(RequestData<BindInfo> req)
+        {
+            ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "设置成功");
+
+            try
+            {
+                List<Device> devices = _deviceService.GetDeviceList();
+
+                Device deviceHeidenhain = devices.Where(x => x.Ip.Equals(req.url)
+                                            && x.ProtocolType.Equals(ProtocalTypeEnum.HEIDEHAIN.ToString())).FirstOrDefault();
+
+                if (deviceHeidenhain == null)
+                {
+                    Log.Instance.WriteLogAdd(ActionTypeEnum.BindingInfo + "设备已离线===>>" + JsonConvert.SerializeObject(req),
+                    EnumHelper.GetDescription(ActionTypeEnum.BindingInfo));
+                    responseData.result = "false";
+                    responseData.resultMsg = ActionTypeEnum.BindingInfo + "设备已离线===>>" + JsonConvert.SerializeObject(req);
+                    return responseData;
+                }
+
+                if (deviceHeidenhain != null)
+                {
 
+                    RequestHeidhData hdhReq = new RequestHeidhData();
+                    hdhReq.ServerUrl = deviceHeidenhain.ServerUrl;
+                    hdhReq.MachineName = deviceHeidenhain.UserName;
+                    hdhReq.Type = OpcUaActionTypeEnum.BindingInfo.ToString();
+                    hdhReq.BindInfo = JsonConvert.SerializeObject(req.data);
 
+                    var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
+                    ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
+                    if (!Result.IsSuccess || !responseHeidhData.result)
+                    {
+                        Log.Instance.WriteLogAdd(ActionTypeEnum.BindingInfo + "绑定数据设置失败===>>" + JsonConvert.SerializeObject(req) + "======结果数据:" + Result, "设备绑定数据设置");
+                        responseData.result = "false";
+                        responseData.resultMsg = Result.Message;
+                        return responseData;
+                    }
+                    else
+                    {
+                        responseData.result = "true";
+                        responseData.resultMsg = "消费成功";
+                    }
+                }
+                else
+                {
+                    responseData.result = "false";
+                    responseData.resultMsg = "没找到对应的类型方法";
 
+                    return responseData;
+                }
+
+                //插入回调
+                TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.BindingInfo.ToString(),
+                EnumHelper.GetDescription(ActionTypeEnum.BindingInfo), req.taskId, req.taskNodeId);
+                await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
+                Log.Instance.WriteLogAdd(ActionTypeEnum.BindingInfo + "设置成功===>>" + JsonConvert.SerializeObject(req),
+                    EnumHelper.GetDescription(ActionTypeEnum.BindingInfo));
+                return responseData;
+            }
+            catch (Exception ex)
+            {
+                Log.Instance.WriteLogAdd(ActionTypeEnum.BindingInfo + "设置异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
+                    EnumHelper.GetDescription(ActionTypeEnum.BindingInfo));
+                responseData.resultMsg = ActionTypeEnum.BindingInfo + "设置异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
+                responseData.result = "false";
+                return responseData;
+            }
+        }
     }
 }

+ 9 - 5
IMCS_CCS/Service/Impl/TaskJobService.cs

@@ -1779,14 +1779,18 @@ namespace IMCS.CCS.Service.Impl
             List<TaskCallback> taskList = new List<TaskCallback>();
             var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
             // 判断redis是否有数据,没有则查询表中是否有没有完成任务
-            if (taskCallbackListData.IsNullOrEmpty)
-            {
-                taskList = await _taskCallbackService.GetAllList();
-            }
-            else
+            if (!taskCallbackListData.IsNullOrEmpty)
             {
+
                 taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
+
+            }
+
+            if (taskList.Count == 0) {
+                taskList = await _taskCallbackService.GetAllList();
+
             }
+
             //在线设备 
             List<Device> deviceList = await getDeviceList();
 

+ 2 - 2
IMCS_CCS/appsettings.json

@@ -24,8 +24,8 @@
   "RedisConnectionString": "192.168.50.111:6379,password=123456,defaultDatabase=0",
   "ConnectionStrings": {
     "mysqlContext": "server=127.0.0.1;port=3306;database=ccs_331;uid=root;pwd=123456;CharSet=utf8;Allow Zero Datetime=True",
-    "ecsUrlContext": "http://localhost:80/api/authority/taskNode/taskNodeCallback",
-    //"ecsUrlContext": "http://localhost:9099/api/authority/taskNode/taskNodeCallback",
+    //"ecsUrlContext": "http://localhost:80/api/authority/taskNode/taskNodeCallback",
+    "ecsUrlContext": "http://localhost:9099/api/authority/taskNode/taskNodeCallback",
     //"FTPServer": "192.168.170.25",
     //"FTPUser": "PROG",
     //"FTPPwd": "abc.1234",

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
IMCS_CCS/wwwroot/db/Tasks.json


Vissa filer visades inte eftersom för många filer har ändrats