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 WinSCP;
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 ecsRootUrlContext;
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");
ecsRootUrlContext = Configuration.GetConnectionString("ecsRootUrlContext");
}
///
/// 获取状态当前值
///
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 RobotAction(RequestData req)
{
Console.WriteLine("获取imcs数据:" + JsonConvert.SerializeObject(req));
ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
try
{
List devices = _deviceService.GetDeviceList();
Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
if (device == null)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "设备已离线===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
responseData.result = "false";
responseData.msg = ActionTypeEnum.RobotAction + "设备已离线===>>" + JsonConvert.SerializeObject(req);
return responseData;
}
CcsAction actionQuery = new CcsAction();
actionQuery.OperateType = ActionTypeEnum.RobotAction.ToString();
actionQuery.Ip = req.url;
CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
OperateResult ConnectionResult = s7.ConnectServer();
if (!ConnectionResult.IsSuccess)
{
s7.ConnectClose();
Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
responseData.result = "false";
responseData.msg = ActionTypeEnum.RobotAction + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
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 operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
{
s7.ConnectClose();
Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
responseData.msg = ActionTypeEnum.RobotAction + "异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req);
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 operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
if (actionAddress.Sort == 1)
{
s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
//同步更新数据库状态
CcsTagValue tagValueQuery = new CcsTagValue();
tagValueQuery.Ip = req.url;
tagValueQuery.Address = actionAddress.Address;
CcsTagValue tagValue = _ccsTagValueService.GetList(tagValueQuery).ToList().FirstOrDefault();
if(tagValue != null)
{
tagValue.TagValue = actionAddress.Value;
await _ccsTagValueService.Update(tagValue);
}
}
else if (actionAddress.Sort == 2)
{
s7.Write(actionAddress.Address, Convert.ToInt16(req.data.Location));
}
else if (actionAddress.Sort == 3)
{
s7.Write(actionAddress.Address, Convert.ToInt16(req.data.DestLocation));
}
Thread.Sleep(SLEEP_TIME);
}
}
//CcsActionAddress checkAddressSucess = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK_SUCESS.ToString()).FirstOrDefault();
//if (checkAddressSucess != null)
//{
// string operateResult = s7.ReadBool(checkAddressSucess.Address).Content.ToString();
// if(operateResult != checkAddressSucess.Value)
// {
// s7.ConnectClose();
// Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "操作不成功,请重试" + JsonConvert.SerializeObject(req),
// EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
// responseData.result = "false";
// return responseData;
// }
//}
s7.ConnectClose();
//插入回调
TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.RobotAction.ToString(),
EnumHelper.GetDescription(ActionTypeEnum.RobotAction), req.taskId, req.taskNodeId);
taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData);
await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.RobotAction) + "取成功===>>" + JsonConvert.SerializeObject(req)
, EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
responseData.msg = EnumHelper.GetDescription(ActionTypeEnum.RobotAction) + "取成功===>>" + JsonConvert.SerializeObject(req);
return responseData;
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "取异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
responseData.result = "false";
responseData.msg = ActionTypeEnum.RobotAction + "取异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
return responseData;
}
}
// 预上传文件,下发请求上料nc指令
public async Task PredictUploadFile(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 deviceHeidenhain = devices.Where(x => x.Ip.Equals(req.url)
&& x.ProtocolType.Equals(ProtocalTypeEnum.HEIDEHAIN.ToString())).FirstOrDefault();
// 判断机床是否在线
if (deviceOpcUa == null && deviceHeidenhain == null)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "设备已离线===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
responseData.msg = "查询设备表,需要设备为离线状态";
return responseData;
}
//海德汉系统需要进行预上传,发送上料请求
/* 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();
//远程机床相对路径
hdhReq.Address = req.data.remotePath;
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "预上传传参,发送请求上料申请===>>" + JsonConvert.SerializeObject(hdhReq),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
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";
responseData.msg = ActionTypeEnum.UploadFile + "预上传异常,发送请求上料申请===>>" + JsonConvert.SerializeObject(req);
return responseData;
}
}
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "预上传成功,发送请求上料申请===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));*/
// 启动程序,使机床变为可上料状态
RequestHeidhData hdhReq2 = new RequestHeidhData();
hdhReq2.ServerUrl = deviceHeidenhain.ServerUrl;
hdhReq2.MachineName = deviceHeidenhain.UserName;
hdhReq2.Path = Path.GetFileName(req.data.fileName);
hdhReq2.Type = HeidnActionTypeEnum.ApplyFeeding.ToString();
hdhReq2.Address = req.data.remotePath;
var ResultStatus = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq2, null);
ResponseHeidhData responseHeidhData2 = JsonConvert.DeserializeObject(ResultStatus.Message);
if (!ResultStatus.IsSuccess || !responseHeidhData2.result)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(hdhReq2),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
responseData.msg = ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(hdhReq2);
return responseData;
}
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "预上传异常,发送请求上料申请===>>" + ex.Message + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.msg = ActionTypeEnum.UploadFile + "预上传异常,发送请求上料申请===>>" + ex.Message + JsonConvert.SerializeObject(req);
responseData.result = "false";
}
return responseData;
}
private string GenPath(string part1, string part2)
{
string sFullPath = part1;
switch (part2)
{
case ".":
break;
case "..":
if (part1.EndsWith(@"\") && part1.Length > 5)
part1 = part1.Substring(0, part1.Length - 3);
int iLastFolderPos = part1.LastIndexOf(@"\");
if (iLastFolderPos >= 0)
sFullPath = part1.Substring(0, iLastFolderPos + 1);
break;
default:
if (part1.EndsWith(@"\"))
sFullPath = part1 + part2;
else
sFullPath = part1 + @"\" + part2;
break;
}
return sFullPath;
}
///
/// 上传文件
///
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 deviceHeidenhain = devices.Where(x => x.Ip.Equals(req.url)
&& x.ProtocolType.Equals(ProtocalTypeEnum.HEIDEHAIN.ToString())).FirstOrDefault();
if (deviceOpcUa == null && deviceHeidenhain == null)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "设备已离线===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
responseData.msg = ActionTypeEnum.UploadFile + "设备已离线===>>" + JsonConvert.SerializeObject(req);
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";
responseData.msg = ActionTypeEnum.UploadFile + "上传异常===>>" + JsonConvert.SerializeObject(req);
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();
//远程机床相对路径
hdhReq.Address = req.data.remotePath;
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传传参===>>" + JsonConvert.SerializeObject(hdhReq),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
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";
responseData.msg = ActionTypeEnum.UploadFile + "上传异常===>>" + JsonConvert.SerializeObject(req);
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));
responseData.msg = ActionTypeEnum.UploadFile + "上传成功===>>" + JsonConvert.SerializeObject(req);
return responseData;
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
responseData.result = "false";
responseData.msg = ActionTypeEnum.UploadFile + "上传异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
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";
responseData.msg = "检测到设备已离线";
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.GetRobotActionList(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));
responseData.msg = ActionTypeEnum.StartNCProgram + "失败,上一放动作 没有工位信息===>>" + JsonConvert.SerializeObject(req);
return responseData;
}
await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.msg = ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req);
return responseData;
} else if (actionInfo.ProtocolType == ProtocalTypeEnum.HEIDEHAIN.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 operateResult = s7.ReadBool(actionAddress.Address).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;
// }
// }
//}
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";
responseData.msg = ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req);
return responseData;
}
//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));
responseData.msg = ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req);
return responseData;
}
else
{
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
responseData.msg = ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req);
return responseData;
}
}
catch (Exception ex)
{
Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "程序异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
responseData.result = "false";
responseData.msg = ActionTypeEnum.StartNCProgram + "程序异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
return responseData;
}
}
///
/// 启动清洗机
///
public async Task StartCleanMachine(RequestData