using WCS.DeviceProtocol; using WCS.Repository; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; using WCS.Common; using WCS.Entitys; using WCS.Model; using WCS.Services; using HslCommunication.Profinet.Siemens; using HslCommunication; using WCS.Utils; using IMCS.CCS.Services; namespace WCS.Service.Impl { public class TTaskService : ITTaskService { private readonly IDeviceRepository deviceRepository; private readonly IWcsActionService wcsActionService; private readonly IWcsActionAddressService wcsActionAddressService; private readonly ITaskCallbackService taskCallbackService; public TTaskService(IDeviceRepository deviceRepository, IWcsActionService wcsActionService,IWcsActionAddressService wcsActionAddressService, ITaskCallbackService taskCallbackService) { this.deviceRepository = deviceRepository; this.wcsActionService = wcsActionService; this.wcsActionAddressService = wcsActionAddressService; this.taskCallbackService = taskCallbackService; } public async Task ExcuteTask(RequestData data) { ResponseData responseData=new ResponseData(data.taskNodeId); try { List devices = deviceRepository.GetDeviceList(); WcsDevice? wcsDevice = devices.FirstOrDefault(x => x.Ip == data.ip); //WcsDevice device = devices.Where(x => x.Ip == data.url && x.Port == data.port).FirstOrDefault(); if (wcsDevice == null) { Log.Instance.WriteLogAdd("设备已离线===>>" + JsonConvert.SerializeObject(data)); responseData.IsSuccess = false; return responseData; } WcsAction action = new WcsAction(); action.Ip = data.ip; action.OperateType= data.data.operateType.ToString(); WcsAction? actionInfo = wcsActionService.GetList(action).FirstOrDefault(); if (actionInfo == null) { Log.Instance.WriteLogAdd(data.data.operateType.ToString() + "异常===>>" + "找不到对应实例" + JsonConvert.SerializeObject(data), EnumHelper.GetEnumDescription(data.data.operateType)); responseData.IsSuccess = false; return responseData; } SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.Ip); OperateResult ConnectionResult = s7.ConnectServer(); if (!ConnectionResult.IsSuccess) { s7.ConnectClose(); Log.Instance.WriteLogAdd(data.data.operateType.ToString() + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(data), EnumHelper.GetEnumDescription(data.data.operateType)); responseData.IsSuccess = false; return responseData; } WcsActionAddress actionAddressQuery = new WcsActionAddress(); actionAddressQuery.ActionId = actionInfo.Id; actionAddressQuery.Sort=data.data.type; WcsActionAddress? WcsActionAddresses = wcsActionAddressService.GetList(actionAddressQuery).FirstOrDefault(); if(WcsActionAddresses!=null && data.data.type == 0) { s7.Write(WcsActionAddresses.Address, data.data.startPosition); }else if(WcsActionAddresses != null && data.data.type == 1) { s7.Write(WcsActionAddresses.Address, data.data.endPosition); } s7.ConnectClose(); //插入回调 TaskCallback taskCallbackData = new TaskCallback(data.url, data.data.operateType.ToString(), EnumHelper.GetEnumDescription(data.data.operateType), data.taskId, data.taskNodeId); //taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData); await taskCallbackService.CreateOrUpdateAndCache(taskCallbackData); Log.Instance.WriteLogAdd(EnumHelper.GetEnumDescription(data.data.operateType) + "成功===>>" + JsonConvert.SerializeObject(data) , EnumHelper.GetEnumDescription(data.data.operateType)); return responseData; } catch (Exception ex) { Log.Instance.WriteLogAdd(data.data.operateType + "异常===>>" + ex.Message + JsonConvert.SerializeObject(data), EnumHelper.GetEnumDescription(data.data.operateType)); responseData.IsSuccess = false; return responseData; } } } }