|
@@ -0,0 +1,113 @@
|
|
|
+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<ResponseData> ExcuteTask(RequestData<LocationData> data)
|
|
|
+ {
|
|
|
+ ResponseData responseData=new ResponseData(data.taskNodeId);
|
|
|
+ try
|
|
|
+ {
|
|
|
+ List<WcsDevice> 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<WcsActionType>(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<WcsActionType>(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<WcsActionType>(data.data.operateType), data.taskId, data.taskNodeId);
|
|
|
+ //taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData);
|
|
|
+
|
|
|
+ await taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
|
|
|
+ Log.Instance.WriteLogAdd(EnumHelper.GetEnumDescription<WcsActionType>(data.data.operateType) + "成功===>>" + JsonConvert.SerializeObject(data)
|
|
|
+ , EnumHelper.GetEnumDescription<WcsActionType>(data.data.operateType));
|
|
|
+
|
|
|
+ return responseData;
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Log.Instance.WriteLogAdd(data.data.operateType + "异常===>>" + ex.Message + JsonConvert.SerializeObject(data),
|
|
|
+ EnumHelper.GetEnumDescription<WcsActionType>(data.data.operateType));
|
|
|
+ responseData.IsSuccess = false;
|
|
|
+ return responseData;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|