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;
using HslCommunication.Profinet.Siemens;
using Microsoft.Extensions.Configuration;
using IMCS.CCS.Service;
using IMCS_CCS.Model.vo;
using FTP;
using HslCommunication;
using System.Text.RegularExpressions;
using System.IO;
using System.Text;
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 readonly ICcsActionAddressService _ccsActionAddressService;
private readonly ITaskJobService _taskJobService;
private int SLEEP_TIME = 1000;
string LocalPath = "D:\\PROG";
private string fanucUrlContext;
private string opcuacUrlContext;
private string hdhUrlContext;
private string ftpUrlContext;
private string ftpUserContext;
private string ftpPwdContext;
private string ecsRootUrlContext;
// 科德httpserver接口地址
private string kedeContext;
public IConfiguration Configuration { get; }
private readonly IApiRequestService _apiRequestService;
public HttpRequestService(IDeviceService deviceService, ITaskCallbackService taskCallbackService,
ICcsActionService ccsActionService, ICcsTagValueService ccsTagValueService,
IEquipmentMonitorService equipmentMonitorService, ICcsActionAddressService ccsActionAddressService,
IApiRequestService apiRequestService, ITaskJobService taskJobService,
IConfiguration configuration)
{
_deviceService = deviceService;
_taskCallbackService = taskCallbackService;
_ccsActionService = ccsActionService;
_ccsTagValueService = ccsTagValueService;
_equipmentMonitorService = equipmentMonitorService;
_ccsActionAddressService = ccsActionAddressService;
_apiRequestService = apiRequestService;
_taskJobService = taskJobService;
Configuration = configuration;
fanucUrlContext = Configuration.GetConnectionString("fanucUrlContext");
opcuacUrlContext = Configuration.GetConnectionString("opcuacUrlContext");
hdhUrlContext = Configuration.GetConnectionString("hdhUrlContext");
ftpUrlContext = Configuration.GetConnectionString("FTPServer");
ftpUserContext = Configuration.GetConnectionString("FTPUser");
ftpPwdContext = Configuration.GetConnectionString("FTPPwd");
ecsRootUrlContext = Configuration.GetConnectionString("ecsRootUrlContext");
kedeContext = Configuration.GetConnectionString("kedeContext");
}
///
/// 获取状态当前值
///
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 devices = _deviceService.GetDeviceList();
List list = new List();
String query3dUrl = ecsRootUrlContext + "/api/authority/agv/agvCallbackService/query3dResouceDataInfo";
var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, query3dUrl, new Object(), null);
ResponsePageData responseData = JsonConvert.DeserializeObject>(result.Message);
list = responseData.Data;
foreach(ResponseDigitalTwinsData responseDigitalTwinsData in list)
{
EquipmentMonitor equipmentMonitor = await _equipmentMonitorService.GetById(long.Parse(responseDigitalTwinsData.resourceId));
if (equipmentMonitor==null || equipmentMonitor.IP == null)
{
continue;
}
Device device = devices.Where(x => x.Ip.Equals(equipmentMonitor.IP)).FirstOrDefault();
if (null!=device && equipmentMonitor.Type == "HEIDEHAIN")
{
RequestHeidhData hdhReq = new RequestHeidhData();
hdhReq.ServerUrl = device.ServerUrl;
hdhReq.MachineName = device.UserName;
hdhReq.Type = "Collect";
var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
if (Result.IsSuccess)
{
ResponseHeidhData retData = JsonConvert.DeserializeObject(Result.Message);
if (!string.IsNullOrEmpty(retData.runDatasInfo.Trim()))
{
ResponseDigitalTwinsData twinsData = JsonConvert.DeserializeObject(retData.runDatasInfo);
responseDigitalTwinsData.feedRate = !string.IsNullOrEmpty(twinsData.feedRate)? twinsData.feedRate : "0";
responseDigitalTwinsData.spindleMagnification = !string.IsNullOrEmpty(twinsData.spindleMagnification)? twinsData.spindleMagnification:"0";
responseDigitalTwinsData.spindleSpeed = !string.IsNullOrEmpty(twinsData.spindleSpeed) ? twinsData.spindleSpeed + "00" : "0";
responseDigitalTwinsData.spindleLoad = !string.IsNullOrEmpty(twinsData.spindleLoad) ? twinsData.spindleMagnification : "-";
}
}
}
else if(null != device && equipmentMonitor.Type == "FANUC")
{
string Url = fanucUrlContext + "?ip=" + device.Ip + "&port=" + device.Port;
//调用发那科接口
var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Get, Url + "&fun=All", null, null);
if (Result.IsSuccess)
{
ResponseFanucData responseFanucData = JsonConvert.DeserializeObject(Result.Message);
responseDigitalTwinsData.feedRate = !string.IsNullOrEmpty(responseFanucData.ActFeed)? responseFanucData.ActFeed:"0";
responseDigitalTwinsData.spindleMagnification = !string.IsNullOrEmpty(responseFanucData.SpindleMagnification)? responseFanucData.SpindleMagnification:"0";
responseDigitalTwinsData.spindleSpeed = !string.IsNullOrEmpty(responseFanucData.ActSpindle)? responseFanucData.ActSpindle : "0";
responseDigitalTwinsData.spindleLoad = !string.IsNullOrEmpty(responseFanucData.SpindleLoad)? responseFanucData.SpindleLoad : "-";
}
}
}
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;
CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
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;
}
CcsActionAddress actionAddressQuery = new CcsActionAddress();
actionAddressQuery.ActionId = actionInfo.Id;
List CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
//查询条件
List 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 CheckAddress = ToolUtils.AddressConvertDBW(actionAddress.Address);
var operateResult = ((ushort)s7.Read(CheckAddress)).ConvertToShort();
if (actionAddress.CheckType ? operateResult.ToString().Equals(actionAddress.Value) : operateResult.ToString() != actionAddress.Value)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.GetIntelligenceUnit + "取物品异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetIntelligenceUnit));
responseData.result = "false";
return responseData;
}
}
}
//查询写入地址列表
List CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
{
if (!string.IsNullOrEmpty(actionAddress.Address))
{
string Address = ToolUtils.AddressConvertDBW(actionAddress.Address);
s7.Write(Address, Convert.ToInt16(string.IsNullOrEmpty(actionAddress.Value) ? req.data.Location : actionAddress.Value)); ;
Thread.Sleep(SLEEP_TIME);
}
}
s7.Close();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.GetIntelligenceUnit.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.GetIntelligenceUnit), req.taskId, req.taskNodeId);
await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, 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;
CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
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;
}
CcsActionAddress actionAddressQuery = new CcsActionAddress();
actionAddressQuery.ActionId = actionInfo.Id;
List CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
//查询条件
List 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 CheckAddress = ToolUtils.AddressConvertDBW(actionAddress.Address);
var operateResult = ((ushort)s7.Read(CheckAddress)).ConvertToShort();
if (actionAddress.CheckType ? operateResult.ToString().Equals(actionAddress.Value) : operateResult.ToString() != actionAddress.Value)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.GetFlexibleWire + "取物品异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetFlexibleWire));
responseData.result = "false";
return responseData;
}
}
}
//查询写入地址列表
List CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
{
if (!string.IsNullOrEmpty(actionAddress.Address))
{
string Address = ToolUtils.AddressConvertDBW(actionAddress.Address);
s7.Write(Address, Convert.ToInt16(string.IsNullOrEmpty(actionAddress.Value) ? req.data.Location : actionAddress.Value)); ;
Thread.Sleep(SLEEP_TIME);
}
}
s7.Close();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.GetFlexibleWire.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.GetFlexibleWire), req.taskId, req.taskNodeId);
await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, 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;
}
//移动取放条件
bool IsAllowFlag = await robotActionCondition(req.url, req.data.IsAllowFlag, ActionTypeEnum.GetQualityCenter.ToString());
if (!IsAllowFlag)
{
Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.GetQualityCenter) + "并发动作异常===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetQualityCenter));
responseData.result = "false";
responseData.concurrency = "true";
return responseData;
}
CcsAction actionQuery = new CcsAction();
actionQuery.OperateType = ActionTypeEnum.GetQualityCenter.ToString();
actionQuery.Ip = req.url;
CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
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;
}
CcsActionAddress actionAddressQuery = new CcsActionAddress();
actionAddressQuery.ActionId = actionInfo.Id;
List CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
//查询条件
List 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 CheckAddress = ToolUtils.AddressConvertDBW(actionAddress.Address);
var operateResult = ((ushort)s7.Read(CheckAddress)).ConvertToShort();
if (actionAddress.CheckType ? operateResult.ToString().Equals(actionAddress.Value) : operateResult.ToString() != actionAddress.Value)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.GetQualityCenter + "取物品异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.GetQualityCenter));
responseData.result = "false";
return responseData;
}
}
}
//查询写入地址列表
List CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
{
if (!string.IsNullOrEmpty(actionAddress.Address))
{
string Address = ToolUtils.AddressConvertDBW(actionAddress.Address);
s7.Write(Address, Convert.ToInt16(string.IsNullOrEmpty(actionAddress.Value) ? req.data.Location : actionAddress.Value)); ;
Thread.Sleep(SLEEP_TIME);
}
}
s7.Close();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.GetQualityCenter.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.GetQualityCenter), req.taskId, req.taskNodeId);
taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData);
await _taskCallbackService.CreateOrUpdateAndCache(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;
CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
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;
}
CcsActionAddress actionAddressQuery = new CcsActionAddress();
actionAddressQuery.ActionId = actionInfo.Id;
List CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
//查询条件
List 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 CheckAddress = ToolUtils.AddressConvertDBW(actionAddress.Address);
var operateResult = ((ushort)s7.Read(CheckAddress)).ConvertToShort();
if (actionAddress.CheckType ? operateResult.ToString().Equals(actionAddress.Value) : operateResult.ToString() != actionAddress.Value)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.SendIntelligenceUnit + "取物品异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendIntelligenceUnit));
responseData.result = "false";
return responseData;
}
}
}
//查询写入地址列表
List CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
{
if (!string.IsNullOrEmpty(actionAddress.Address))
{
string Address = ToolUtils.AddressConvertDBW(actionAddress.Address);
s7.Write(Address, Convert.ToInt16(string.IsNullOrEmpty(actionAddress.Value) ? req.data.Location : actionAddress.Value)); ;
Thread.Sleep(SLEEP_TIME);
}
}
s7.Close();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.SendIntelligenceUnit.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.SendIntelligenceUnit), req.taskId, req.taskNodeId);
await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, 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;
CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
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;
}
CcsActionAddress actionAddressQuery = new CcsActionAddress();
actionAddressQuery.ActionId = actionInfo.Id;
List CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
//查询条件
List 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 CheckAddress = ToolUtils.AddressConvertDBW(actionAddress.Address);
var operateResult = ((ushort)s7.Read(CheckAddress)).ConvertToShort();
if (actionAddress.CheckType ? operateResult.ToString().Equals(actionAddress.Value) : operateResult.ToString() != actionAddress.Value)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.SendFlexibleWire + "取物品异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendFlexibleWire));
responseData.result = "false";
return responseData;
}
}
}
//查询写入地址列表
List CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
{
if (!string.IsNullOrEmpty(actionAddress.Address))
{
string Address = ToolUtils.AddressConvertDBW(actionAddress.Address);
s7.Write(Address, Convert.ToInt16(string.IsNullOrEmpty(actionAddress.Value) ? req.data.Location : actionAddress.Value)); ;
Thread.Sleep(SLEEP_TIME);
}
}
s7.Close();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.SendFlexibleWire.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.SendFlexibleWire), req.taskId, req.taskNodeId);
await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, 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;
}
//移动取放条件
bool IsAllowFlag = await robotActionCondition(req.url, req.data.IsAllowFlag, ActionTypeEnum.SendQualityCenter.ToString());
if (!IsAllowFlag)
{
Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.SendQualityCenter) + "并发动作异常===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendQualityCenter));
responseData.result = "false";
responseData.concurrency = "true";
return responseData;
}
CcsAction actionQuery = new CcsAction();
actionQuery.OperateType = ActionTypeEnum.SendQualityCenter.ToString();
actionQuery.Ip = req.url;
CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
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;
}
CcsActionAddress actionAddressQuery = new CcsActionAddress();
actionAddressQuery.ActionId = actionInfo.Id;
List CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
//查询条件
List 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 CheckAddress = ToolUtils.AddressConvertDBW(actionAddress.Address);
var operateResult = ((ushort)s7.Read(CheckAddress)).ConvertToShort();
if (actionAddress.CheckType ? operateResult.ToString().Equals(actionAddress.Value) : operateResult.ToString() != actionAddress.Value)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.SendQualityCenter + "放物品异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendQualityCenter));
responseData.result = "false";
return responseData;
}
}
}
//放入恒轮工位,作为启动
string currentWorkStation = "";
if (req.url == "192.168.11.150" && (req.data.Location == "127" || req.data.Location == "128"))
{
string workStationAddress = ToolUtils.AddressConvertDBW("DB200.332");
currentWorkStation = ((ushort)s7.Read(workStationAddress)).ConvertToShort().ToString();
//string currentWorkStation = s7.ReadInt16("DB200.332").Content.ToString();
//string writeValue = req.data.Location;
//if (currentWorkStation == "1")//工作台1
//{
// writeValue = "128";
//}
//else if (currentWorkStation == "2")//工作台2
//{
// writeValue = "127";
//}
if (string.IsNullOrEmpty(req.data.fileName))
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.SendQualityCenter + "放物品异常===>>" + "恒轮程序名为空" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.SendQualityCenter));
responseData.result = "false";
return responseData;
}
string proNo = Path.GetFileNameWithoutExtension(req.data.fileName);
s7.Write(ToolUtils.AddressConvertDBW("DB200.334"), Convert.ToInt16(proNo));
Thread.Sleep(SLEEP_TIME);
s7.Write(ToolUtils.AddressConvertDBW("DB200.46"), Convert.ToInt16(req.data.Location));
Thread.Sleep(SLEEP_TIME);
s7.Write(ToolUtils.AddressConvertDBW("DB200.50"), Convert.ToInt16("4"));
}
else
{
List CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
{
if (!string.IsNullOrEmpty(actionAddress.Address))
{
string Address = ToolUtils.AddressConvertDBW(actionAddress.Address);
s7.Write(Address, Convert.ToInt16(string.IsNullOrEmpty(actionAddress.Value) ? req.data.Location : actionAddress.Value)); ;
Thread.Sleep(SLEEP_TIME);
}
}
}
s7.Close();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.SendQualityCenter.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.SendQualityCenter), req.taskId, req.taskNodeId);
taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData);
//放入恒轮工位,作为启动 ,传递给后续启动
if (req.url == "192.168.11.150" && (req.data.Location == "127" || req.data.Location == "128"))
{
taskCallbackData.Data = currentWorkStation;
taskCallbackData.Description = ProtocalTypeEnum.OPCUA.ToString();
}
/*//清洗机启动时更新回调值
if(!string.IsNullOrEmpty(req.data.Location) && req.data.Location == "123")
{
taskCallbackData.Address = "DB200.48";
taskCallbackData.CallbackValue = "1";
}*/
await _taskCallbackService.CreateOrUpdateAndCache(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;
}
//移动取放条件
bool IsAllowFlag = await robotActionCondition(req.url, req.data.IsAllowFlag, ActionTypeEnum.MoveRobotPosition.ToString());
if (!IsAllowFlag)
{
Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.MoveRobotPosition) + "并发动作异常===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.MoveRobotPosition));
responseData.result = "false";
responseData.concurrency = "true";
return responseData;
}
CcsAction actionQuery = new CcsAction();
actionQuery.OperateType = ActionTypeEnum.MoveRobotPosition.ToString();
actionQuery.Ip = req.url;
CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
SiemensS7Net s7 = DevicePlcS7.SiemensS7(req.url);
HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
if (!ConnectionResult.IsSuccess)
{
s7.ConnectClose();
Log.Instance.WriteLogAdd(ActionTypeEnum.MoveRobotPosition + "移动物品异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.MoveRobotPosition));
responseData.result = "false";
return responseData;
}
CcsActionAddress actionAddressQuery = new CcsActionAddress();
actionAddressQuery.ActionId = actionInfo.Id;
List CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
//查询条件
List CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
{
if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
{
var operateResult = s7.ReadInt16(actionAddress.Address);
if (actionAddress.CheckType ? operateResult.Content.ToString().Equals(actionAddress.Value) : operateResult.Content.ToString() != actionAddress.Value)
{
s7.ConnectClose();
Log.Instance.WriteLogAdd(ActionTypeEnum.MoveRobotPosition + "取物品异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.MoveRobotPosition));
responseData.result = "false";
return responseData;
}
}
}
//查询写入地址列表
List CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
{
if (!string.IsNullOrEmpty(actionAddress.Address))
{
s7.Write(actionAddress.Address, Convert.ToInt16(string.IsNullOrEmpty(actionAddress.Value) ? req.data.Location : actionAddress.Value)); ;
Thread.Sleep(SLEEP_TIME);
}
}
s7.ConnectClose();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.MoveRobotPosition.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.MoveRobotPosition), req.taskId, req.taskNodeId);
await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, 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.GetDeviceList();
Device deviceFtp = devices.Where(x => x.Ip.Equals(req.url)
&& x.ProtocolType.Equals(ProtocalTypeEnum.FTP.ToString())).FirstOrDefault();
Device deviceOpcUa = devices.Where(x => x.Ip.Equals(req.url)
&& x.ProtocolType.Equals(ProtocalTypeEnum.OPCUA.ToString())).FirstOrDefault();
Device deviceFanuc = devices.Where(x => x.Ip.Equals(req.url)
&& x.ProtocolType.Equals(ProtocalTypeEnum.FANUC.ToString())).FirstOrDefault();
Device deviceHeidenhain = devices.Where(x => x.Ip.Equals(req.url)
&& x.ProtocolType.Equals(ProtocalTypeEnum.HEIDEHAIN.ToString())).FirstOrDefault();
Device deviceKeDe = devices.Where(x => x.Ip.Equals(req.url)
&& x.ProtocolType.Equals(ProtocalTypeEnum.KEDE.ToString())).FirstOrDefault();
if (deviceOpcUa == null && deviceFanuc == null && deviceHeidenhain == null && deviceKeDe == null)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "设备已离线===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
return responseData;
}
//西门子系统上传
if (deviceOpcUa != null)
{
RequestOpcUaData opcUaReq = new RequestOpcUaData();
opcUaReq.ServerUrl = deviceOpcUa.ServerUrl;
opcUaReq.UserName = deviceOpcUa.UserName;
opcUaReq.Password = deviceOpcUa.Password;
opcUaReq.Path = req.data.fileName;
opcUaReq.Type = OpcUaActionTypeEnum.Upload.ToString();
var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, opcuacUrlContext, opcUaReq, null);
ResponseOpcUaData responseOpcUaData = JsonConvert.DeserializeObject(Result.Message);
if (!Result.IsSuccess || !responseOpcUaData.result)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
return responseData;
}
}
else if (deviceFanuc != null)
{
Regex regex = new Regex(@"^(?([a-zA-Z]:\\)([\s\.\-\w]+\\)*)(?[\w]+)(?(\.[\w]+)*)(?\.[\w]+)");
Match result = regex.Match(req.data.fileName);
string strResult = result.Success ? result.Result("${fname}") + result.Result("${suffix}"): req.data.fileName;
string Url = fanucUrlContext + "?ip=" + deviceFanuc.Ip + "&port=" + deviceFanuc.Port + "&prgname=" + strResult;
//调用发那科上传接口
var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Get, Url + "&fun=" + ActionTypeEnum.UploadFile.ToString(), null, null);
if (!Result.IsSuccess)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常,scp连接失败," + Result.Message + "," + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
return responseData;
}
}
else if(deviceHeidenhain != null)
{
//海德汉程序上传后,同时写入编号
if (string.IsNullOrEmpty(req.data.fileName))
{
Log.Instance.WriteLogAdd("ECS编号传空不处理逻辑===>>" + req.data.fileName ,
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
}
else
{
if (deviceHeidenhain.Description.Contains("哈默"))
{
//写入程序编号
CcsAction actionQuery = new CcsAction();
actionQuery.OperateType = ActionTypeEnum.StartNCProgram.ToString();
actionQuery.Ip = req.url;
CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
//查询启动动作地址
CcsActionAddress actionAddressQuery = new CcsActionAddress();
actionAddressQuery.ActionId = actionInfo.Id;
List CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.PlcIp);
OperateResult ConnectionResult = s7.ConnectServer();
if (!ConnectionResult.IsSuccess)
{
s7.ConnectClose();
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "写入编号异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
return responseData;
}
//查询写入地址列表
List CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
if (CcsActionAddressWrites.Count < 2)
{
s7.ConnectClose();
Log.Instance.WriteLogAdd("写入程序编号异常===>>" + "地址错误" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
return responseData;
}
string prgNo = !string.IsNullOrEmpty(req.data.fileName) ? System.IO.Path.GetFileNameWithoutExtension(req.data.fileName) : CcsActionAddressWrites[0].Value;
s7.Write(CcsActionAddressWrites[0].Address, Convert.ToInt16(prgNo));
s7.ConnectClose();
Log.Instance.WriteLogAdd("写入编号成功===>>编号位:" + prgNo + ",写入地址==" + CcsActionAddressWrites[0].Address,
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
}
else if (deviceHeidenhain.Description.Contains("德玛吉"))
{
RequestHeidhData hdhReq = new RequestHeidhData();
hdhReq.ServerUrl = deviceHeidenhain.ServerUrl;
hdhReq.MachineName = deviceHeidenhain.UserName;
hdhReq.Path = req.data.fileName;
hdhReq.Type = OpcUaActionTypeEnum.Upload.ToString();
var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject(Result.Message);
if (!Result.IsSuccess || !responseHeidhData.result)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "预上传异常===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
return responseData;
}
} else if (deviceHeidenhain.Description.Contains("SMC")) {
Console.WriteLine("SMC机床NC上传========");
RequestHeidhData hdhReq = new RequestHeidhData();
hdhReq.ServerUrl = deviceHeidenhain.ServerUrl;
hdhReq.MachineName = deviceHeidenhain.UserName;
hdhReq.Path = req.data.fileName;
hdhReq.Type = OpcUaActionTypeEnum.Upload.ToString();
var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject(Result.Message);
if (!Result.IsSuccess || !responseHeidhData.result)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
return responseData;
}
}
//return responseData;
}
}
else if (deviceKeDe != null)
{
Console.WriteLine("==============科德机床上传程序并设置此程序为主程序=================");
RequestKeDeData kedeReq = new RequestKeDeData();
kedeReq.serverUrl = deviceKeDe.ServerUrl;
kedeReq.type = "2";
kedeReq.userName = deviceKeDe.UserName;
kedeReq.password = deviceKeDe.Password;
kedeReq.port = deviceKeDe.Port;
kedeReq.localFilePath = req.data.fileName;
kedeReq.remoteFilePath = req.data.remotePath;
Console.WriteLine("nc上传请求地址{0},参数{1}", kedeContext, kedeReq);
var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, kedeContext, kedeReq, null);
ResponseOpcUaData responseOpcUaData = JsonConvert.DeserializeObject(Result.Message);
if (!Result.IsSuccess || !responseOpcUaData.result)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常===>>" + 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);
await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
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 PreUploadFile(RequestData req)
{
ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
try
{
List devices = _deviceService.GetDeviceList();
//Device deviceFtp = devices.Where(x => x.Ip.Equals(req.url)
// && x.ProtocolType.Equals(ProtocalTypeEnum.FTP.ToString())).FirstOrDefault();
Device deviceOpcUa = devices.Where(x => x.Ip.Equals(req.url)
&& x.ProtocolType.Equals(ProtocalTypeEnum.OPCUA.ToString())).FirstOrDefault();
Device deviceFanuc = devices.Where(x => x.Ip.Equals(req.url)
&& x.ProtocolType.Equals(ProtocalTypeEnum.FANUC.ToString())).FirstOrDefault();
Device deviceHeidenhain = devices.Where(x => x.Ip.Equals(req.url)
&& x.ProtocolType.Equals(ProtocalTypeEnum.HEIDEHAIN.ToString())).FirstOrDefault();
if (deviceOpcUa == null && deviceFanuc == null && deviceHeidenhain == null)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "设备已离线===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
return responseData;
}
//西门子系统上传
if (deviceOpcUa != null)
{
RequestOpcUaData opcUaReq = new RequestOpcUaData();
opcUaReq.ServerUrl = deviceOpcUa.ServerUrl;
opcUaReq.UserName = deviceOpcUa.UserName;
opcUaReq.Password = deviceOpcUa.Password;
opcUaReq.Path = req.data.fileName;
opcUaReq.Type = OpcUaActionTypeEnum.Upload.ToString();
var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, opcuacUrlContext, opcUaReq, null);
ResponseOpcUaData responseOpcUaData = JsonConvert.DeserializeObject(Result.Message);
if (!Result.IsSuccess || !responseOpcUaData.result)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
return responseData;
}
}
else if (deviceFanuc != null)
{
Regex regex = new Regex(@"^(?([a-zA-Z]:\\)([\s\.\-\w]+\\)*)(?[\w]+)(?(\.[\w]+)*)(?\.[\w]+)");
Match result = regex.Match(req.data.fileName);
string strResult = result.Success ? result.Result("${fname}") + result.Result("${suffix}") : req.data.fileName;
string Url = fanucUrlContext + "?ip=" + deviceFanuc.Ip + "&port=" + deviceFanuc.Port + "&prgname=" + strResult;
//调用发那科上传接口
var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Get, Url + "&fun=" + ActionTypeEnum.UploadFile.ToString(), null, null);
if (!Result.IsSuccess)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常,scp连接失败," + Result.Message + "," + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
return responseData;
}
}
else if (deviceHeidenhain != null)
{
RequestHeidhData hdhReq = new RequestHeidhData();
hdhReq.ServerUrl = deviceHeidenhain.ServerUrl;
hdhReq.MachineName = deviceHeidenhain.UserName;
hdhReq.Path = req.data.fileName;
hdhReq.Type = OpcUaActionTypeEnum.Upload.ToString();
var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject(Result.Message);
if (!Result.IsSuccess || !responseHeidhData.result)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "预上传异常===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
return responseData;
}
}
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;
CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
CcsActionAddress actionAddressQuery = new CcsActionAddress();
actionAddressQuery.ActionId = actionInfo.Id;
List CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
//opcua启动程序
if (actionInfo.ProtocolType == ProtocalTypeEnum.OPCUA.ToString())
{
//插入回调
//获取启动前放的 工位
TaskCallback queryTaskCallBack = new TaskCallback();
queryTaskCallBack.IP = actionInfo.PlcIp;
queryTaskCallBack.Description = ProtocalTypeEnum.OPCUA.ToString();
TaskCallback TaskBean = await _taskCallbackService.GetRobotSendAction(queryTaskCallBack);
TaskCallback taskCallbackData = new TaskCallback(actionInfo.PlcIp, ActionTypeEnum.StartNCProgram.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram), req.taskId, req.taskNodeId);
taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData);
taskCallbackData.Description = ProtocalTypeEnum.OPCUA.ToString();
if(TaskBean != null)
{
taskCallbackData.Data = TaskBean.Data;
}
else
{
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "失败,上一放动作 没有工位信息===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
return responseData;
}
await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
return responseData;
}
else if (actionInfo.ProtocolType == ProtocalTypeEnum.FANUC.ToString())
{
string Url = fanucUrlContext + "?ip=" + device.Ip + "&port=" + device.Port;
//调用发那科是否连接接口
var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Get, Url + "&fun=" + OpcUaActionTypeEnum.SelectNcProgram.ToString()+"&prgname=" + req.data.remotePath, null, null);
if(!Result.IsSuccess || Result.Message != "0")
{
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
return responseData;
}
//Plc s7 = DevicePlcS7.S7(actionInfo.PlcIp, ProtocalTypeEnum.S7_1500.ToString());
SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.PlcIp);
OperateResult ConnectionResult = s7.ConnectServer();
if (!ConnectionResult.IsSuccess)
{
s7.ConnectClose();
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
return responseData;
}
/*
if (s7.IsConnected != true)
{
s7.Close();
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
return responseData;
}*/
//查询条件
List 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 CheckAddress = ToolUtils.AddressConvertDBW(actionAddress.Address);
var operateResult = s7.ReadInt16(CheckAddress).Content.ToString();
if (actionAddress.CheckType ? operateResult.ToString().Equals(actionAddress.Value) : operateResult.ToString() != actionAddress.Value)
{
s7.ConnectClose();
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
return responseData;
}
}
}
//查询写入地址列表
List CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
{
if (!string.IsNullOrEmpty(actionAddress.Address))
{
string Address = ToolUtils.AddressConvertDBW(actionAddress.Address);
s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
Thread.Sleep(SLEEP_TIME);
}
}
s7.ConnectClose();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(actionInfo.PlcIp, ActionTypeEnum.StartNCProgram.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram), req.taskId, req.taskNodeId);
await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, taskCallbackData));
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
return responseData;
}
else if (actionInfo.ProtocolType == ProtocalTypeEnum.HEIDEHAIN.ToString() || actionInfo.ProtocolType == ProtocalTypeEnum.KEDE.ToString())
{
//调用机器人plc启动海德汉程序
SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.PlcIp);
OperateResult ConnectionResult = s7.ConnectServer();
if (!ConnectionResult.IsSuccess)
{
s7.ConnectClose();
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
return responseData;
}
//查询条件
List 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 CheckAddress = ToolUtils.AddressConvertDBW(actionAddress.Address);
string operateResult = s7.ReadInt16(CheckAddress).Content.ToString();
if (actionAddress.CheckType ? operateResult.Equals(actionAddress.Value) : operateResult != actionAddress.Value)
{
s7.ConnectClose();
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
return responseData;
}
}
}
if(device.Description.Contains("哈默"))
{
//查询写入地址列表
List CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
if(CcsActionAddressWrites.Count < 2)
{
s7.ConnectClose();
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "地址错误" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
return responseData;
}
CcsActionAddress CcsActionAddressWriteCheck = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE_CHECK.ToString()).FirstOrDefault();
string writeCheckResult = s7.ReadInt16(CcsActionAddressWriteCheck.Address).Content.ToString();
if(writeCheckResult == "0")
{
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "程序编号没有应用" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
return responseData;
}
//写入海德汉启动信号
s7.Write(CcsActionAddressWrites[1].Address, Convert.ToInt16(CcsActionAddressWrites[1].Value) );
//重置清零
s7.Write(CcsActionAddressWrites[0].Address, Convert.ToInt16("0"));
s7.Write(CcsActionAddressWriteCheck.Address, Convert.ToInt16("0"));
}else if (device.Description.Contains("德玛吉"))
{
RequestHeidhData hdhReq = new RequestHeidhData();
hdhReq.ServerUrl = device.ServerUrl;
hdhReq.MachineName = device.UserName;
hdhReq.Path = req.data.remotePath;
hdhReq.Type = OpcUaActionTypeEnum.StartNcProgram.ToString();
var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject(Result.Message);
if (!Result.IsSuccess || !responseHeidhData.result)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
return responseData;
}
}else if (device.Description.Contains("科德"))
{
CcsActionAddress CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList().FirstOrDefault();
s7.Write(CcsActionAddressWrites.Address, Convert.ToInt16(CcsActionAddressWrites.Value));
}
s7.ConnectClose();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(actionInfo.PlcIp, ActionTypeEnum.StartNCProgram.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram), req.taskId, req.taskNodeId);
await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, taskCallbackData));
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;
}
}
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 hellerFreeStatus(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;
CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
//恒轮设备 对应plc ip
SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.PlcIp);
OperateResult ConnectionResult = s7.ConnectServer();
if (!ConnectionResult.IsSuccess)
{
s7.ConnectClose();
Log.Instance.WriteLogAdd("查询恒轮是否空闲异常===>PLC连接不上" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
return responseData;
}
string status = s7.ReadInt16("DB200.336").Content.ToString(); //是否有料
string currentWorkStation = s7.ReadInt16("DB200.332").Content.ToString();//当前工位
responseData.data = currentWorkStation;
if (status == "1")//状态1 有料
{
Log.Instance.WriteLogAdd("查询恒轮当前外面工作台有料===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
return responseData;
}
else if(status == "2")//状态2 无料
{
Log.Instance.WriteLogAdd("查询恒轮当前外面工作台无料===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "true";
}
s7.ConnectClose();
return responseData;
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd("查询恒轮是否程序异常===>>" + 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;
CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
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);
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;
CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
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);
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