123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- 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;
- }
- }
- }
- }
|