using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Threading;
using IMCS.CCS.Entitys;
using IMCS.CCS.Models.vo;
using IMCS.CCS.Models;
using IMCS.CCS.DeviceProtocol;
using System;
using S7.Net;
using IMCS_CCS.Utils;
using Newtonsoft.Json;
using IMCS_CCS.Utils.DeviceProtocol;
namespace IMCS.CCS.Services
{
public class HttpRequestService : IHttpRequestService
{
private readonly IDeviceService _deviceService;
private readonly ITaskCallbackService _taskCallbackService;
private readonly ICcsActionService _ccsActionService;
private readonly ICcsTagValueService _ccsTagValueService;
private readonly IEquipmentMonitorService _equipmentMonitorService;
private int SLEEP_TIME = 500;
string LocalPath = "D:\\PROG";
public HttpRequestService(IDeviceService deviceService, ITaskCallbackService taskCallbackService,
ICcsActionService ccsActionService, ICcsTagValueService ccsTagValueService, IEquipmentMonitorService equipmentMonitorService)
{
_deviceService = deviceService;
_taskCallbackService = taskCallbackService;
_ccsActionService = ccsActionService;
_ccsTagValueService = ccsTagValueService;
_equipmentMonitorService = equipmentMonitorService;
}
///
/// 获取状态当前值
///
public string GetTagValue(RequestTagValueData req) {
CcsTagValue queryParam = new CcsTagValue();
queryParam.Ip = req.ip;
queryParam.Address = req.tagname;
List tagValues = _ccsTagValueService.GetList(queryParam);
string tagValue = "0";
if(tagValues != null && tagValues.Count > 0)
{
tagValue = tagValues[0].TagValue;
}
return tagValue;
}
///
/// 益模调用接口,显示3D
///
public async Task> GetDigitalTwins()
{
List list = new List();
List equipmentMonitors = await _equipmentMonitorService.GetList();
foreach(EquipmentMonitor equipment in equipmentMonitors){
ResponseDigitalTwinsData digitalTwinsData = new ResponseDigitalTwinsData();
digitalTwinsData.deviceType = equipment.Type;
digitalTwinsData.deviceName = equipment.Name;
digitalTwinsData.monitoringStatus = equipment.Status;
digitalTwinsData.orderName = "100001";
digitalTwinsData.orderNumber = "100002";
digitalTwinsData.productName = "100003";
digitalTwinsData.productNumber = "100004";
digitalTwinsData.processingParameters.feedRate = "50";
digitalTwinsData.processingParameters.spindleLoad = "100";
digitalTwinsData.processingParameters.spindleMagnification = "80";
digitalTwinsData.processingParameters.spindleSpeed = "40";
list.Add(digitalTwinsData);
}
return list;
}
///
/// 查询设备状态
///
public async Task> GetEquipMent()
{
return await _equipmentMonitorService.GetList();
}
///
/// 智能单元取物品
///
public async Task GetIntelligenceUnit(RequestData req)
{
ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
try
{
List devices = _deviceService.GetDeviceList();
Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
if (device == null)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.GetIntelligenceUnit + "设备已离线===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetIntelligenceUnit));
responseData.result = "false";
return responseData;
}
CcsAction actionQuery = new CcsAction();
actionQuery.OperateType = ActionTypeEnum.GetIntelligenceUnit.ToString();
actionQuery.Ip = req.url;
List actions = _ccsActionService.GetList(actionQuery);
CcsAction actionInfo = actions[0];
Plc s7 = DevicePlcS7.S7(req.url, ProtocalTypeEnum.S7_1500.ToString());
if (s7.IsConnected != true)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.GetIntelligenceUnit + "取物品异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetIntelligenceUnit));
responseData.result = "false";
return responseData;
}
if(!string.IsNullOrEmpty(actionInfo.CheckAddress) && !string.IsNullOrEmpty(actionInfo.CheckValue))
{
string CheckAddress = ToolUtils.AddressConvertDBW(actionInfo.CheckAddress);
var operateResult = ((ushort)s7.Read(CheckAddress)).ConvertToShort();
if (actionInfo.CheckType ? operateResult.ToString().Equals(actionInfo.CheckValue) : operateResult.ToString() != actionInfo.CheckValue)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.GetIntelligenceUnit + "取物品异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetIntelligenceUnit));
responseData.result = "false";
return responseData;
}
}
if (!string.IsNullOrEmpty(actionInfo.Address))
{
string Address1 = ToolUtils.AddressConvertDBW(actionInfo.Address);
s7.Write(Address1, Convert.ToInt16(req.data.Location));
Thread.Sleep(SLEEP_TIME);
}
if (!string.IsNullOrEmpty(actionInfo.Address2))
{
string Address2 = ToolUtils.AddressConvertDBW(actionInfo.Address2);
s7.Write(Address2, Convert.ToInt16(actionInfo.MoveIndex));
}
s7.Close();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.GetIntelligenceUnit.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.GetIntelligenceUnit), req.taskId, req.taskNodeId, actionInfo.CallbackAddress, actionInfo.CallbackValue);
taskCallbackData.CallbackValue2 = actionInfo.CallbackValue2;
await _taskCallbackService.Create(taskCallbackData);
Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.GetIntelligenceUnit) + "取物品成功===>>" + JsonConvert.SerializeObject(req)
, EnumHelper.GetDescription(ActionTypeEnum.GetIntelligenceUnit));
return responseData;
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.GetIntelligenceUnit + "取物品异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetIntelligenceUnit));
responseData.result = "false";
return responseData;
}
}
///
/// 柔性线取物品
///
public async Task GetFlexibleWire(RequestData req)
{
ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
try
{
List devices = _deviceService.GetDeviceList();
Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
if (device == null)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.GetFlexibleWire + "设备已离线===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetFlexibleWire));
responseData.result = "false";
return responseData;
}
CcsAction actionQuery = new CcsAction();
actionQuery.OperateType = ActionTypeEnum.GetFlexibleWire.ToString();
actionQuery.Ip = req.url;
List actions = _ccsActionService.GetList(actionQuery);
CcsAction actionInfo = actions[0];
Plc s7 = DevicePlcS7.S7(req.url, ProtocalTypeEnum.S7_1500.ToString());
if (s7.IsConnected != true)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.GetFlexibleWire + "取物品异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetFlexibleWire));
responseData.result = "false";
return responseData;
}
if (!string.IsNullOrEmpty(actionInfo.CheckAddress))
{
string CheckAddress = ToolUtils.AddressConvertDBW(actionInfo.CheckAddress);
var operateResult = ((ushort)s7.Read(CheckAddress)).ConvertToShort();
bool CheckFlag = string.IsNullOrEmpty(actionInfo.CheckValue) ? false : (actionInfo.CheckType ? (operateResult.ToString() == actionInfo.CheckValue) : (operateResult.ToString() != actionInfo.CheckValue));
bool CheckFlag2 = string.IsNullOrEmpty(actionInfo.CheckValue2) ? true : (actionInfo.CheckType2 ? (operateResult.ToString() == actionInfo.CheckValue2) : (operateResult.ToString() != actionInfo.CheckValue2));
bool CheckFlag3 = string.IsNullOrEmpty(actionInfo.CheckValue3) ? true : (actionInfo.CheckType3 ? (operateResult.ToString() == actionInfo.CheckValue3) : (operateResult.ToString() != actionInfo.CheckValue3));
if (CheckFlag && CheckFlag2 && CheckFlag3)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.GetFlexibleWire + "取物品故障===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetFlexibleWire));
responseData.result = "false";
return responseData;
}
}
if (!string.IsNullOrEmpty(actionInfo.CheckAddress4))
{
string CheckAddress4 = ToolUtils.AddressConvertDBW(actionInfo.CheckAddress4);
var operateResult = ((ushort)s7.Read(CheckAddress4)).ConvertToShort();
if (actionInfo.CheckType ? operateResult.ToString() == actionInfo.CheckValue4 : operateResult.ToString() != actionInfo.CheckValue4)
{
responseData.result = "false";
Log.Instance.WriteLogAdd(ActionTypeEnum.GetFlexibleWire + "取物品故障===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetFlexibleWire));
s7.Close();
return responseData;
}
}
if (!string.IsNullOrEmpty(actionInfo.CheckAddress5))
{
string CheckAddress5 = ToolUtils.AddressConvertDBW(actionInfo.CheckAddress5);
var operateResult = ((ushort)s7.Read(CheckAddress5)).ConvertToShort();
if (actionInfo.CheckType ? operateResult.ToString() == actionInfo.CheckValue5 : operateResult.ToString() != actionInfo.CheckValue5)
{
responseData.result = "false";
Log.Instance.WriteLogAdd(ActionTypeEnum.GetFlexibleWire + "取物品故障===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetFlexibleWire));
s7.Close();
return responseData;
}
}
string Address1 = ToolUtils.AddressConvertDBW(actionInfo.Address);
s7.Write(Address1, Convert.ToInt16(req.data.Location));
Thread.Sleep(SLEEP_TIME);
string Address2 = ToolUtils.AddressConvertDBW(actionInfo.Address2);
s7.Write(Address2, Convert.ToInt16(actionInfo.MoveIndex));
s7.Close();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.GetFlexibleWire.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.GetFlexibleWire), req.taskId, req.taskNodeId, actionInfo.CallbackAddress, actionInfo.CallbackValue);
taskCallbackData.Address3 = actionInfo.Address5;
taskCallbackData.CallbackValue2 = actionInfo.CallbackValue2;
taskCallbackData.CallbackValue3 = actionInfo.CallbackValue3;
await _taskCallbackService.Create(taskCallbackData);
Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.GetFlexibleWire) + "取物品成功===>>" + JsonConvert.SerializeObject(req)
, EnumHelper.GetDescription(ActionTypeEnum.GetFlexibleWire));
return responseData;
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.GetFlexibleWire + "取物品异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetFlexibleWire));
responseData.result = "false";
return responseData;
}
}
///
/// 质量中心取物品
///
public async Task GetQualityCenter(RequestData req)
{
ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
try
{
List devices = _deviceService.GetDeviceList();
Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
if (device == null)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.GetQualityCenter + "设备已离线===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetQualityCenter));
responseData.result = "false";
return responseData;
}
CcsAction actionQuery = new CcsAction();
actionQuery.OperateType = ActionTypeEnum.GetQualityCenter.ToString();
actionQuery.Ip = req.url;
List actions = _ccsActionService.GetList(actionQuery);
CcsAction actionInfo = actions[0];
Plc s7 = DevicePlcS7.S7(req.url, ProtocalTypeEnum.S7_1500.ToString());
if (s7.IsConnected != true)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.GetQualityCenter + "取物品异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetQualityCenter));
responseData.result = "false";
return responseData;
}
if (!string.IsNullOrEmpty(actionInfo.CheckAddress) && !string.IsNullOrEmpty(actionInfo.CheckValue))
{
string CheckAddress = ToolUtils.AddressConvertDBW(actionInfo.CheckAddress);
var operateResult = ((ushort)s7.Read(CheckAddress)).ConvertToShort();
if (actionInfo.CheckType ? operateResult.ToString().Equals(actionInfo.CheckValue) : operateResult.ToString() != actionInfo.CheckValue)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.GetQualityCenter + "取物品异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetQualityCenter));
responseData.result = "false";
return responseData;
}
}
string Address1 = ToolUtils.AddressConvertDBW(actionInfo.Address);
s7.Write(Address1, Convert.ToInt16(req.data.Location));
Thread.Sleep(SLEEP_TIME);
string Address2 = ToolUtils.AddressConvertDBW(actionInfo.Address2);
s7.Write(Address2, Convert.ToInt16(actionInfo.MoveIndex));
s7.Close();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.GetQualityCenter.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.GetQualityCenter), req.taskId, req.taskNodeId, actionInfo.CallbackAddress, actionInfo.CallbackValue);
taskCallbackData.CallbackValue2 = actionInfo.CallbackValue2;
await _taskCallbackService.Create(taskCallbackData);
Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.GetQualityCenter) + "取物品成功===>>" + JsonConvert.SerializeObject(req)
, EnumHelper.GetDescription(ActionTypeEnum.GetQualityCenter));
return responseData;
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.GetQualityCenter + "取物品异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetQualityCenter));
responseData.result = "false";
return responseData;
}
}
///
/// 智能单元送物品
///
public async Task SendIntelligenceUnit(RequestData req)
{
ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
try
{
List devices = _deviceService.GetDeviceList();
Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
if (device == null)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.SendIntelligenceUnit + "设备已离线===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendIntelligenceUnit));
responseData.result = "false";
return responseData;
}
CcsAction actionQuery = new CcsAction();
actionQuery.OperateType = ActionTypeEnum.SendIntelligenceUnit.ToString();
actionQuery.Ip = req.url;
List actions = _ccsActionService.GetList(actionQuery);
CcsAction actionInfo = actions[0];
Plc s7 = DevicePlcS7.S7(req.url, ProtocalTypeEnum.S7_1500.ToString());
if (s7.IsConnected != true)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.SendIntelligenceUnit + "放物品异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendIntelligenceUnit));
responseData.result = "false";
return responseData;
}
//条件判断
if (!string.IsNullOrEmpty(actionInfo.CheckAddress) && !string.IsNullOrEmpty(actionInfo.CheckValue))
{
string CheckAddress = ToolUtils.AddressConvertDBW(actionInfo.CheckAddress);
var operateResult = ((ushort)s7.Read(CheckAddress)).ConvertToShort();
if (actionInfo.CheckType ? operateResult.ToString().Equals(actionInfo.CheckValue) : operateResult.ToString() != actionInfo.CheckValue)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.SendIntelligenceUnit + "放物品异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendIntelligenceUnit));
responseData.result = "false";
return responseData;
}
}
string Address1 = ToolUtils.AddressConvertDBW(actionInfo.Address);
s7.Write(Address1, Convert.ToInt16(req.data.Location));
Thread.Sleep(SLEEP_TIME);
string Address2 = ToolUtils.AddressConvertDBW(actionInfo.Address2);
s7.Write(Address2, Convert.ToInt16(actionInfo.MoveIndex));
s7.Close();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.SendIntelligenceUnit.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.SendIntelligenceUnit), req.taskId, req.taskNodeId, actionInfo.CallbackAddress, actionInfo.CallbackValue);
taskCallbackData.CallbackValue2 = actionInfo.CallbackValue2;
await _taskCallbackService.Create(taskCallbackData);
Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.SendIntelligenceUnit) + "放物品成功===>>" + JsonConvert.SerializeObject(req)
, EnumHelper.GetDescription(ActionTypeEnum.SendIntelligenceUnit));
return responseData;
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.SendIntelligenceUnit + "放物品故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendIntelligenceUnit));
responseData.result = "false";
return responseData;
}
}
///
/// 柔性线送物品
///
public async Task SendFlexibleWire(RequestData req)
{
ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
try
{
List devices = _deviceService.GetDeviceList();
Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
if (device == null)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.SendFlexibleWire + "设备已离线===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendFlexibleWire));
responseData.result = "false";
return responseData;
}
CcsAction actionQuery = new CcsAction();
actionQuery.OperateType = ActionTypeEnum.SendFlexibleWire.ToString();
actionQuery.Ip = req.url;
List actions = _ccsActionService.GetList(actionQuery);
CcsAction actionInfo = actions[0];
Plc s7 = DevicePlcS7.S7(req.url, ProtocalTypeEnum.S7_1500.ToString());
if (s7.IsConnected != true)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.SendFlexibleWire + "放物品异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendFlexibleWire));
responseData.result = "false";
return responseData;
}
if (!string.IsNullOrEmpty(actionInfo.CheckAddress))
{
string CheckAddress = ToolUtils.AddressConvertDBW(actionInfo.CheckAddress);
var operateResult = ((ushort)s7.Read(CheckAddress)).ConvertToShort();
bool CheckFlag = string.IsNullOrEmpty(actionInfo.CheckValue) ? false : (actionInfo.CheckType ? (operateResult.ToString() == actionInfo.CheckValue) : (operateResult.ToString() != actionInfo.CheckValue));
bool CheckFlag2 = string.IsNullOrEmpty(actionInfo.CheckValue2) ? true : (actionInfo.CheckType2 ? (operateResult.ToString() == actionInfo.CheckValue2) : (operateResult.ToString() != actionInfo.CheckValue2));
bool CheckFlag3 = string.IsNullOrEmpty(actionInfo.CheckValue3) ? true : (actionInfo.CheckType3 ? (operateResult.ToString() == actionInfo.CheckValue3) : (operateResult.ToString() != actionInfo.CheckValue3));
if (CheckFlag && CheckFlag2 && CheckFlag3)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.SendFlexibleWire + "放物品异常===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendFlexibleWire));
responseData.result = "false";
return responseData;
}
}
if (!string.IsNullOrEmpty(actionInfo.CheckAddress4))
{
string CheckAddress4 = ToolUtils.AddressConvertDBW(actionInfo.CheckAddress4);
var operateResult = ((ushort)s7.Read(CheckAddress4)).ConvertToShort();
if (actionInfo.CheckType ? operateResult.ToString() == actionInfo.CheckValue4 : operateResult.ToString() != actionInfo.CheckValue4)
{
responseData.result = "false";
Log.Instance.WriteLogAdd(ActionTypeEnum.SendFlexibleWire + "放物品故障===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendFlexibleWire));
s7.Close();
return responseData;
}
}
if (!string.IsNullOrEmpty(actionInfo.CheckAddress5))
{
string CheckAddress5 = ToolUtils.AddressConvertDBW(actionInfo.CheckAddress5);
var operateResult = ((ushort)s7.Read(CheckAddress5)).ConvertToShort();
if (actionInfo.CheckType ? operateResult.ToString() == actionInfo.CheckValue5 : operateResult.ToString() != actionInfo.CheckValue5)
{
responseData.result = "false";
Log.Instance.WriteLogAdd(ActionTypeEnum.SendFlexibleWire + "放物品故障===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendFlexibleWire));
s7.Close();
return responseData;
}
}
string Address1 = ToolUtils.AddressConvertDBW(actionInfo.Address);
s7.Write(Address1, Convert.ToInt16(req.data.Location));
Thread.Sleep(SLEEP_TIME);
string Address2 = ToolUtils.AddressConvertDBW(actionInfo.Address2);
s7.Write(Address2, Convert.ToInt16(actionInfo.MoveIndex));
s7.Close();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.SendFlexibleWire.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.SendFlexibleWire), req.taskId, req.taskNodeId, actionInfo.Address, actionInfo.CallbackValue);
taskCallbackData.Address3 = actionInfo.CallbackAddress3;
taskCallbackData.CallbackValue2 = actionInfo.CallbackValue2;
taskCallbackData.CallbackValue3 = actionInfo.CallbackValue3;
await _taskCallbackService.Create(taskCallbackData);
Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.SendFlexibleWire) + "放物品成功===>>" + JsonConvert.SerializeObject(req)
, EnumHelper.GetDescription(ActionTypeEnum.SendFlexibleWire));
return responseData;
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.SendFlexibleWire + "放物品异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendFlexibleWire));
responseData.result = "false";
return responseData;
}
}
///
/// 质量中心送物品
///
public async Task SendQualityCenter(RequestData req)
{
ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
try
{
List devices = _deviceService.GetDeviceList();
Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
if (device == null)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.SendQualityCenter + "设备已离线===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendQualityCenter));
responseData.result = "false";
return responseData;
}
CcsAction actionQuery = new CcsAction();
actionQuery.OperateType = ActionTypeEnum.SendQualityCenter.ToString();
actionQuery.Ip = req.url;
List actions = _ccsActionService.GetList(actionQuery);
CcsAction actionInfo = actions[0];
Plc s7 = DevicePlcS7.S7(req.url, ProtocalTypeEnum.S7_1500.ToString());
if (s7.IsConnected != true)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.SendQualityCenter + "放物品异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendQualityCenter));
responseData.result = "false";
return responseData;
}
//条件判断
if (!string.IsNullOrEmpty(actionInfo.CheckAddress))
{
string CheckAddress = ToolUtils.AddressConvertDBW(actionInfo.CheckAddress);
var operateResult = ((ushort)s7.Read(CheckAddress)).ConvertToShort();
if (actionInfo.CheckType ? (operateResult.ToString() == actionInfo.CheckValue) : (operateResult.ToString() != actionInfo.CheckValue))
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.SendQualityCenter + "放物品故障===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendQualityCenter));
responseData.result = "false";
return responseData;
}
}
string Address1 = ToolUtils.AddressConvertDBW(actionInfo.Address);
s7.Write(Address1, Convert.ToInt16(req.data.Location));
Thread.Sleep(SLEEP_TIME);
string Address2 = ToolUtils.AddressConvertDBW(actionInfo.Address2);
s7.Write(Address2, Convert.ToInt16(actionInfo.MoveIndex));
s7.Close();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.SendQualityCenter.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.SendQualityCenter), req.taskId, req.taskNodeId, actionInfo.CallbackAddress, actionInfo.CallbackValue);
taskCallbackData.CallbackValue2 = actionInfo.CallbackValue2;
await _taskCallbackService.Create(taskCallbackData);
Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.SendQualityCenter) + "放物品成功===>>" + JsonConvert.SerializeObject(req)
, EnumHelper.GetDescription(ActionTypeEnum.SendQualityCenter));
return responseData;
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.SendQualityCenter + "放物品故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendQualityCenter));
responseData.result = "false";
return responseData;
}
}
///
/// 柔性线机器人移动物品
///
public async Task MoveRobotPosition(RequestData req)
{
ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
try
{
List devices = _deviceService.GetDeviceList();
Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
if (device == null)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.MoveRobotPosition + "设备已离线===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.MoveRobotPosition));
responseData.result = "false";
return responseData;
}
CcsAction actionQuery = new CcsAction();
actionQuery.OperateType = ActionTypeEnum.MoveRobotPosition.ToString();
actionQuery.Ip = req.url;
List actions = _ccsActionService.GetList(actionQuery);
CcsAction actionInfo = actions[0];
Plc s7 = DevicePlcS7.S7(req.url, ProtocalTypeEnum.S7_1500.ToString());
if (s7.IsConnected != true)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.MoveRobotPosition + "移动物品异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.MoveRobotPosition));
responseData.result = "false";
return responseData;
}
if (!string.IsNullOrEmpty(actionInfo.CheckAddress))
{
string CheckAddress = ToolUtils.AddressConvertDBW(actionInfo.CheckAddress);
var operateResult = ((ushort)s7.Read(CheckAddress)).ConvertToShort();
bool CheckFlag = string.IsNullOrEmpty(actionInfo.CheckValue) ? false : (actionInfo.CheckType ? (operateResult.ToString() == actionInfo.CheckValue) : (operateResult.ToString() != actionInfo.CheckValue));
bool CheckFlag2 = string.IsNullOrEmpty(actionInfo.CheckValue2) ? true : (actionInfo.CheckType2 ? (operateResult.ToString() == actionInfo.CheckValue2) : (operateResult.ToString() != actionInfo.CheckValue2));
bool CheckFlag3 = string.IsNullOrEmpty(actionInfo.CheckValue3) ? true : (actionInfo.CheckType3 ? (operateResult.ToString() == actionInfo.CheckValue3) : (operateResult.ToString() != actionInfo.CheckValue3));
if (CheckFlag && CheckFlag2 && CheckFlag3)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.MoveRobotPosition + "移动物品故障===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.MoveRobotPosition));
responseData.result = "false";
return responseData;
}
}
if (!string.IsNullOrEmpty(actionInfo.CheckAddress4))
{
string CheckAddress4 = ToolUtils.AddressConvertDBW(actionInfo.CheckAddress4);
var operateResult = ((ushort)s7.Read(CheckAddress4)).ConvertToShort();
if (actionInfo.CheckType ? operateResult.ToString() == actionInfo.CheckValue4 : operateResult.ToString() != actionInfo.CheckValue4)
{
responseData.result = "false";
Log.Instance.WriteLogAdd(ActionTypeEnum.MoveRobotPosition + "移动物品故障===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.MoveRobotPosition));
s7.Close();
return responseData;
}
}
if (!string.IsNullOrEmpty(actionInfo.CheckAddress5))
{
string CheckAddress5 = ToolUtils.AddressConvertDBW(actionInfo.CheckAddress5);
var operateResult = ((ushort)s7.Read(CheckAddress5)).ConvertToShort();
if (actionInfo.CheckType ? operateResult.ToString() == actionInfo.CheckValue5 : operateResult.ToString() != actionInfo.CheckValue5)
{
responseData.result = "false";
Log.Instance.WriteLogAdd(ActionTypeEnum.MoveRobotPosition + "移动物品故障===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.MoveRobotPosition));
s7.Close();
return responseData;
}
}
string Address1 = ToolUtils.AddressConvertDBW(actionInfo.Address);
s7.Write(Address1, Convert.ToInt16(req.data.Location));
Thread.Sleep(SLEEP_TIME);
string Address2 = ToolUtils.AddressConvertDBW(actionInfo.Address2);
s7.Write(Address2, Convert.ToInt16(actionInfo.MoveIndex));
s7.Close();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.MoveRobotPosition.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.MoveRobotPosition), req.taskId, req.taskNodeId, actionInfo.CallbackAddress, actionInfo.CallbackValue);
taskCallbackData.Address3 = actionInfo.Address3;
taskCallbackData.CallbackValue2 = actionInfo.CallbackValue2;
taskCallbackData.CallbackValue3 = actionInfo.CallbackValue3;
await _taskCallbackService.Create(taskCallbackData);
Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.MoveRobotPosition) + "移动物品成功===>>" + JsonConvert.SerializeObject(req)
, EnumHelper.GetDescription(ActionTypeEnum.MoveRobotPosition));
return responseData;
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.MoveRobotPosition + "移动物品故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.MoveRobotPosition));
responseData.result = "false";
return responseData;
}
}
///
/// 上传文件
///
public async Task UploadFile(RequestData req)
{
ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
try
{
List devices = _deviceService.GetDeviceAllList();
Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)
&& x.ProtocolType.Equals(ProtocalTypeEnum.FTP.ToString())).FirstOrDefault();
if (device == null)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "设备已离线===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
return responseData;
}
/*CcsAction actionQuery = new CcsAction();
actionQuery.OperateType = ActionTypeEnum.UploadFile.ToString();
actionQuery.Ip = req.url;
List actions = _ccsActionService.GetList(actionQuery);
CcsAction actionInfo = actions[0]; */
new DeviceFtp().GetFile(req.data.fileName, LocalPath);
/* DeviceWinSCP winScp = new DeviceWinSCP(device.UserName, device.Password, device.Ip);
winScp.PutFile(req.data.fileName, LocalPath, req.data.remotePath);*/
DeviceSFTP sftp = new DeviceSFTP(device.UserName,device.Port, device.Password, device.Ip);
if (sftp.Connect())
{
sftp.Put(LocalPath + req.data.fileName, req.data.remotePath);
sftp.Disconnect();
}
else
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常,scp连接失败," + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
return responseData;
}
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.UploadFile.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile), req.taskId, req.taskNodeId, null, null);
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传成功===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
return responseData;
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
return responseData;
}
}
///
/// 启动机床程序
///
public async Task StartNCProgram(RequestData req)
{
ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
try
{
List devices = _deviceService.GetDeviceList();
Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
if (device == null)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "设备已离线===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
return responseData;
}
CcsAction actionQuery = new CcsAction();
actionQuery.OperateType = ActionTypeEnum.StartNCProgram.ToString();
actionQuery.Ip = req.url;
List actions = _ccsActionService.GetList(actionQuery);
CcsAction actionInfo = actions[0];
DeviceOPCUat opcUa = new DeviceOPCUat(device.ServerUrl, device.UserName, device.Password);
if (opcUa.IsConnection)
{
bool isSuccess = opcUa.OpcUa_Select(req.data.remotePath);
Thread.Sleep(500);
if (isSuccess)
{
opcUa.OpcUa_Write(actionInfo.Address, "True");
opcUa.disConnect();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.StartNCProgram.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram), req.taskId, req.taskNodeId, actionInfo.CallbackAddress, null);
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
return responseData;
}
else
{
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
return responseData;
}
}
else
{
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
return responseData;
}
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "程序异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
return responseData;
}
}
///
/// 粗偏写入
///
public async Task SendLinShift(RequestData req)
{
ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
try
{
List devices = _deviceService.GetDeviceList();
Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
if (device == null)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.SendLinShift + "设备已离线===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendLinShift));
responseData.result = "false";
return responseData;
}
CcsAction actionQuery = new CcsAction();
actionQuery.OperateType = ActionTypeEnum.SendLinShift.ToString();
actionQuery.Ip = req.url;
List actions = _ccsActionService.GetList(actionQuery);
CcsAction actionInfo = actions[0];
DeviceOPCUat opcUa = new DeviceOPCUat(device.ServerUrl, device.UserName, device.Password);
Thread.Sleep(500);
if (opcUa.IsConnection)
{
List Tags = new List();
string TagName = actionInfo.Address;
string OpcTagNameX = TagName + "01]";
Tags.Add(OpcTagNameX);
string OpcTagNameY = TagName + "02]";
Tags.Add(OpcTagNameY);
string OpcTagNameZ = TagName + "03]";
Tags.Add(OpcTagNameZ);
string OpcTagNameA = TagName + "04]";
Tags.Add(OpcTagNameA);
string OpcTagNameB = TagName + "05]";
Tags.Add(OpcTagNameB);
List values = new List();
values.Add(req.data.X);
values.Add(req.data.Y);
values.Add(req.data.Z);
values.Add(req.data.A);
values.Add(req.data.B);
opcUa.OpcUa_WriteValue(values, Tags);
opcUa.disConnect();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.SendLinShift.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.SendLinShift), req.taskId, req.taskNodeId, actionInfo.Address2, actionInfo.CallbackValue2);
Log.Instance.WriteLogAdd(ActionTypeEnum.SendLinShift + "粗偏写入成功===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendLinShift));
return responseData;
}
else
{
Log.Instance.WriteLogAdd(ActionTypeEnum.SendLinShift + "粗偏写入异常===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendLinShift));
responseData.result = "false";
return responseData;
}
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.SendLinShift + "粗偏写入异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendLinShift));
responseData.result = "false";
return responseData;
}
}
///
/// 精偏写入
///
public async Task SendLinShiftFine(RequestData req)
{
ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
try
{
List devices = _deviceService.GetDeviceList();
Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
if (device == null)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.SendLinShiftFine + "设备已离线===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendLinShiftFine));
responseData.result = "false";
return responseData;
}
CcsAction actionQuery = new CcsAction();
actionQuery.OperateType = ActionTypeEnum.SendLinShiftFine.ToString();
actionQuery.Ip = req.url;
List actions = _ccsActionService.GetList(actionQuery);
CcsAction actionInfo = actions[0];
DeviceOPCUat opcUa = new DeviceOPCUat(device.ServerUrl, device.UserName, device.Password);
Thread.Sleep(500);
if (opcUa.IsConnection)
{
List Tags = new List();
string TagName = actionInfo.Address;
string OpcTagNameX = TagName + "06]";
Tags.Add(OpcTagNameX);
string OpcTagNameY = TagName + "07]";
Tags.Add(OpcTagNameY);
string OpcTagNameZ = TagName + "08]";
Tags.Add(OpcTagNameZ);
string OpcTagNameA = TagName + "09]";
Tags.Add(OpcTagNameA);
string OpcTagNameB = TagName + "10]";
Tags.Add(OpcTagNameB);
Tags.Add(OpcTagNameB);
List values = new List();
values.Add(req.data.X);
values.Add(req.data.Y);
values.Add(req.data.Z);
values.Add(req.data.A);
values.Add(req.data.B);
opcUa.OpcUa_WriteValue(values, Tags);
opcUa.disConnect();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.SendLinShift.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.SendLinShiftFine), req.taskId, req.taskNodeId, actionInfo.Address2, actionInfo.CallbackValue2);
Log.Instance.WriteLogAdd(ActionTypeEnum.SendLinShiftFine + "精偏写入成功===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendLinShiftFine));
return responseData;
}
else
{
Log.Instance.WriteLogAdd(ActionTypeEnum.SendLinShiftFine + "精偏写入异常===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendLinShiftFine));
responseData.result = "false";
return responseData;
}
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.SendLinShiftFine + "精偏写入异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendLinShiftFine));
responseData.result = "false";
return responseData;
}
}
///
/// 启动清洗机
///
public async Task StartCleanMachine(RequestData