|
@@ -20,6 +20,10 @@ using System.Net.NetworkInformation;
|
|
|
using IMCS_CCS.Model;
|
|
|
using MySqlX.XDevAPI.Common;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
+using AutoMapper.Execution;
|
|
|
+using Org.BouncyCastle.Asn1.Ocsp;
|
|
|
+using System.Reflection;
|
|
|
+using Org.BouncyCastle.Ocsp;
|
|
|
|
|
|
namespace IMCS.CCS.Service.Impl
|
|
|
{
|
|
@@ -72,9 +76,15 @@ namespace IMCS.CCS.Service.Impl
|
|
|
|
|
|
private string LOG_TITLE_DEVICE = "设备监控";
|
|
|
|
|
|
+ private string LOG_HEART_PLC = "PLC心跳";
|
|
|
+
|
|
|
private string PLC_ALARM_INFO = "PLC有异常";
|
|
|
|
|
|
- private string imcs_redis_key = "IMCS_CCS:";
|
|
|
+ private string imcs_redis_key = "IMCS_CCS:";
|
|
|
+
|
|
|
+ private string LOG_RESOURCE_STATE = "设备状态";
|
|
|
+
|
|
|
+ private Boolean repeatFlag = false;
|
|
|
|
|
|
public IConfiguration Configuration { get; }
|
|
|
|
|
@@ -121,7 +131,6 @@ namespace IMCS.CCS.Service.Impl
|
|
|
/// <returns></returns>
|
|
|
public async Task<string> DataCollectS7Job()
|
|
|
{
|
|
|
-
|
|
|
try
|
|
|
{
|
|
|
List<Device> deviceList = await getDeviceList();
|
|
@@ -220,12 +229,10 @@ namespace IMCS.CCS.Service.Impl
|
|
|
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
return "S7采集成功";
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- Console.WriteLine("S7采集异常===>>" + ex.Message);
|
|
|
Log.Instance.WriteLogAdd("S7采集异常===>>" + ex.Message, LOG_TITLE_S7);
|
|
|
return "S7采集失败";
|
|
|
}
|
|
@@ -319,12 +326,10 @@ namespace IMCS.CCS.Service.Impl
|
|
|
}
|
|
|
|
|
|
}
|
|
|
-
|
|
|
return string.IsNullOrEmpty(message) ? "无回调任务" : message;
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- Console.WriteLine("上传程序回调任务异常===>>" + ex.Message);
|
|
|
Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
|
|
|
return "回调异常" + ex.Message;
|
|
|
}
|
|
@@ -338,55 +343,504 @@ namespace IMCS.CCS.Service.Impl
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
+
|
|
|
List<TaskCallback> taskList = new List<TaskCallback>();
|
|
|
- var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
|
|
|
- if (taskCallbackListData.IsNullOrEmpty)
|
|
|
- {
|
|
|
- taskList = await _taskCallbackService.GetAllList();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
|
|
|
- }
|
|
|
- //在线设备
|
|
|
- List<Device> deviceList = await getDeviceList();
|
|
|
+ var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
|
|
|
+ if (taskCallbackListData.IsNullOrEmpty)
|
|
|
+ {
|
|
|
+ taskList = await _taskCallbackService.GetAllList();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
|
|
|
+ }
|
|
|
+ //在线设备
|
|
|
+ List<Device> deviceList = await getDeviceList();
|
|
|
|
|
|
- taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.RobotAction.ToString())).ToList();
|
|
|
- taskList = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).ToList();
|
|
|
- //TaskCallback task = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).FirstOrDefault() ;
|
|
|
- if (taskList == null || taskList.Count == 0)
|
|
|
- {
|
|
|
- return "无回调任务" ;
|
|
|
- }
|
|
|
- string message = "";
|
|
|
+ taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.RobotAction.ToString())).ToList();
|
|
|
+ taskList = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).ToList();
|
|
|
+ //TaskCallback task = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).FirstOrDefault() ;
|
|
|
+ if (taskList == null || taskList.Count == 0)
|
|
|
+ {
|
|
|
+ return "无回调任务" ;
|
|
|
+ }
|
|
|
+ string message = "";
|
|
|
|
|
|
foreach(TaskCallback task in taskList)
|
|
|
- {
|
|
|
+ {
|
|
|
+
|
|
|
CcsTagValue tagValueQuery = new CcsTagValue();
|
|
|
tagValueQuery.Ip = task.IP;
|
|
|
//tagValueQuery.Address = task.Address;
|
|
|
List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery).ToList();
|
|
|
- CcsTagValue callBacktagValue = tagValues.Where(o => o.Address == task.Address).FirstOrDefault();
|
|
|
|
|
|
- if ((callBacktagValue != null && callBacktagValue.TagValue == task.CallbackValue) )
|
|
|
+ //系统操作模式
|
|
|
+ CcsTagValue tagValueMode = tagValues.Where(o => o.Address == "DB1.2").FirstOrDefault();
|
|
|
+ if (tagValueMode.TagValue != "257")
|
|
|
{
|
|
|
- //执行位清零
|
|
|
- SiemensS7Net s7 = DevicePlcS7.SiemensS7(task.IP);
|
|
|
- HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
|
|
|
- if (ConnectionResult.IsSuccess)
|
|
|
+ return "当前操作模式非自动并运行";
|
|
|
+ }
|
|
|
+
|
|
|
+ //执行位清零
|
|
|
+ SiemensS7Net s7 = DevicePlcS7.SiemensS7(task.IP);
|
|
|
+ HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
|
|
|
+ if (!ConnectionResult.IsSuccess)
|
|
|
+ {
|
|
|
+ Log.Instance.WriteLogAdd("回调异常,PLC连接不上==>", LOG_TITLE_CALLBACK);
|
|
|
+ return "回调异常,PLC连接不上==>";
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断RFID是否读完成
|
|
|
+ string rfidResult = s7.ReadInt16("DB1.18").Content.ToString();
|
|
|
+ RFIData rFIData = new RFIData();
|
|
|
+ if (rfidResult == "3" && !repeatFlag)
|
|
|
+ {
|
|
|
+ repeatFlag = true;
|
|
|
+ //读完成,读RFID
|
|
|
+ if (task.CallbackValue == "5")
|
|
|
{
|
|
|
- Log.Instance.WriteLogAdd("任务【"+task.TaskNodeId+"】回调清零,plc点位:"+task.Address + "值:"+ callBacktagValue.TagValue, LOG_TITLE_CALLBACK);
|
|
|
- s7.Write("DB2.2", Convert.ToInt16("0"));
|
|
|
- s7.Write("DB2.4", Convert.ToInt16("0"));
|
|
|
- s7.Write("DB2.6", Convert.ToInt16("0"));
|
|
|
- s7.Write("DB2.8", Convert.ToInt16("0"));
|
|
|
- s7.Write("DB2.10", Convert.ToInt16("0"));
|
|
|
+ //托盘动作回调,读取RFID
|
|
|
+ CcsActionAddress actionAddressQuery = new CcsActionAddress();
|
|
|
+ actionAddressQuery.ActionId = 26;
|
|
|
+ List<CcsActionAddress> CcsActionAddressRead = _ccsActionAddressService.GetList(actionAddressQuery);
|
|
|
+ foreach (CcsActionAddress actionAddress in CcsActionAddressRead)
|
|
|
+ {
|
|
|
+ string value = "";
|
|
|
+ if (actionAddress.dataType == "bytes")
|
|
|
+ {
|
|
|
+ byte[] bytes = s7.Read(actionAddress.Address, 40).Content;
|
|
|
+ value = ToolUtils.ReturnStringByBytes(bytes);
|
|
|
+ value = value.Trim();
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "int")
|
|
|
+ {
|
|
|
+ value = s7.ReadInt16(actionAddress.Address).Content.ToString();
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "float")
|
|
|
+ {
|
|
|
+ value = s7.ReadFloat(actionAddress.Address).Content.ToString();
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "byte")
|
|
|
+ {
|
|
|
+ value = s7.ReadByte(actionAddress.Address).Content.ToString();
|
|
|
+ }
|
|
|
+ SetProperty(rFIData, actionAddress.Description, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (string.IsNullOrEmpty(rFIData.trayNo))
|
|
|
+ {
|
|
|
+ s7.ConnectClose();
|
|
|
+ repeatFlag = false;
|
|
|
+ Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,读取redis托盘RFID信息为空====>" + JsonConvert.SerializeObject(rFIData), LOG_TITLE_CALLBACK);
|
|
|
+ return "任务【" + task.TaskNodeId + "】回调,读取redis托盘RFID信息为空";
|
|
|
+ }
|
|
|
+ string rfidDataObj = JsonConvert.SerializeObject(rFIData);
|
|
|
+ await _redisService.Database.StringSetAsync("CCS_TRAY_RFID_" + task.TaskNodeId, JsonConvert.SerializeObject(rfidDataObj));
|
|
|
+
|
|
|
+ Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,读取托盘RFID信息:" + JsonConvert.SerializeObject(rFIData), LOG_TITLE_CALLBACK);
|
|
|
+
|
|
|
+ //判断当前托盘是否和缓存托盘RFID一致
|
|
|
+ string callback_redis_key = "TRAY_RFID_";
|
|
|
+ var trayRfid = await _redisService.Database.StringGetAsync(callback_redis_key + task.TaskNodeId);
|
|
|
+
|
|
|
+ RFIData rfidWrite = new RFIData();
|
|
|
+ if (!trayRfid.IsNullOrEmpty)
|
|
|
+ {
|
|
|
+ string bb = JsonConvert.DeserializeObject<string>(trayRfid);
|
|
|
+ RFIData trayRdisRfid = JsonConvert.DeserializeObject<RFIData>(bb);
|
|
|
+ //比较是否为同一托盘
|
|
|
+ if (rFIData.trayNo != trayRdisRfid.trayNo)
|
|
|
+ {
|
|
|
+ s7.ConnectClose();
|
|
|
+ repeatFlag = false;
|
|
|
+ Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,缓存托盘【" + trayRdisRfid.trayNo + "】 和从RFID读出托盘【" + rFIData.trayNo + "】不一致", LOG_TITLE_CALLBACK);
|
|
|
+ return "任务【" + task.TaskNodeId + "】回调,缓存托盘【" + trayRdisRfid.trayNo + "】 和从RFID读出托盘【" + rFIData.trayNo + "】不一致";
|
|
|
+ }
|
|
|
+ rfidWrite = trayRdisRfid;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ rfidWrite = rFIData;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //写刀具信息
|
|
|
+ CcsActionAddress actionAddressQueryWrite = new CcsActionAddress();
|
|
|
+ actionAddressQueryWrite.ActionId = 27;
|
|
|
+ List<CcsActionAddress> CcsActionAddressWrites = _ccsActionAddressService.GetList(actionAddressQueryWrite);
|
|
|
+ foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
|
|
|
+ {
|
|
|
+ if (!string.IsNullOrEmpty(actionAddress.Address))
|
|
|
+ {
|
|
|
+ if (string.IsNullOrEmpty(actionAddress.Value))
|
|
|
+ {
|
|
|
+ //取参数传参值
|
|
|
+ string dataValue = getProperties(rfidWrite, actionAddress.Description);
|
|
|
+ if (!string.IsNullOrEmpty(dataValue))
|
|
|
+ {
|
|
|
+ if (actionAddress.dataType == "bytes")
|
|
|
+ {
|
|
|
+ s7.Write(actionAddress.Address, ToolUtils.ReturnBtyesWtitString(dataValue, dataValue.Length));
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "int")
|
|
|
+ {
|
|
|
+ s7.Write(actionAddress.Address, Convert.ToInt16(dataValue));
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "float")
|
|
|
+ {
|
|
|
+ s7.Write(actionAddress.Address, float.Parse(dataValue));
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "byte")
|
|
|
+ {
|
|
|
+ s7.Write(actionAddress.Address, Convert.ToByte(dataValue));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //写入启动
|
|
|
+ s7.Write("DB2.12", Convert.ToInt16("2"));
|
|
|
+
|
|
|
+ Boolean nextFlag = true;
|
|
|
+ //进入循环等待写入完成
|
|
|
+ int count = 0;
|
|
|
+ string writeResult = "";
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ Thread.Sleep(2000);
|
|
|
+ writeResult = s7.ReadInt16("DB1.18").Content.ToString();
|
|
|
+ if (writeResult == "5")
|
|
|
+ {
|
|
|
+ //写完成,跳出循环
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*if (count == 10)
|
|
|
+ {
|
|
|
+ //超时,跳出循环
|
|
|
+ nextFlag = false;
|
|
|
+ break;
|
|
|
+ }*/
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!nextFlag)
|
|
|
+ {
|
|
|
+ s7.ConnectClose();
|
|
|
+ repeatFlag = false;
|
|
|
+ Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,写入RFID超时,当前DB1.18值【" + writeResult + "】", LOG_TITLE_CALLBACK);
|
|
|
+ return "任务【" + task.TaskNodeId + "】回调,写入RFID超时,当前DB1.18值【" + writeResult + "】";
|
|
|
+ }
|
|
|
+
|
|
|
+ //校验是否已写入RFID---读一下
|
|
|
+ s7.Write("DB2.12", Convert.ToInt16("1"));
|
|
|
+
|
|
|
+ //进入循环等待读完成
|
|
|
+ count = 0;
|
|
|
+ writeResult = "";
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ Thread.Sleep(2000);
|
|
|
+ writeResult = s7.ReadInt16("DB1.18").Content.ToString();
|
|
|
+ if (writeResult == "3")
|
|
|
+ {
|
|
|
+ //写完成,跳出循环
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*if (count == 10)
|
|
|
+ {
|
|
|
+ //超时,跳出循环
|
|
|
+ nextFlag = false;
|
|
|
+ break;
|
|
|
+ }*/
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!nextFlag)
|
|
|
+ {
|
|
|
+ s7.ConnectClose();
|
|
|
+ repeatFlag = false;
|
|
|
+ Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,读取RFID超时,当前DB1.18值【" + writeResult + "】", LOG_TITLE_CALLBACK);
|
|
|
+ return "任务【" + task.TaskNodeId + "】回调,读取RFID超时,当前DB1.18值【" + writeResult + "】";
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach (CcsActionAddress actionAddress in CcsActionAddressRead)
|
|
|
+ {
|
|
|
+ if (!string.IsNullOrEmpty(actionAddress.Address))
|
|
|
+ {
|
|
|
+ //取参数传参值
|
|
|
+ string dataValue = getProperties(rfidWrite, actionAddress.Description);
|
|
|
+ //读取写入结果
|
|
|
+ string value = "";
|
|
|
+ if (actionAddress.dataType == "bytes")
|
|
|
+ {
|
|
|
+ byte[] bytes = s7.Read(actionAddress.Address, 40).Content;
|
|
|
+ value = ToolUtils.ReturnStringByBytes(bytes);
|
|
|
+ value = value.Trim();
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "int")
|
|
|
+ {
|
|
|
+ value = s7.ReadInt16(actionAddress.Address).Content.ToString();
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "float")
|
|
|
+ {
|
|
|
+ value = s7.ReadFloat(actionAddress.Address).Content.ToString();
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "byte")
|
|
|
+ {
|
|
|
+ value = s7.ReadByte(actionAddress.Address).Content.ToString();
|
|
|
+ }
|
|
|
+ if (value != dataValue)
|
|
|
+ {
|
|
|
+ s7.ConnectClose();
|
|
|
+ repeatFlag = false;
|
|
|
+ Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,RFID中【" + actionAddress.Description + "】,地址【" + actionAddress.Address + "】重新写入值【" + dataValue + "】 和从RFID读出值【" + value + "】不一致", LOG_TITLE_CALLBACK);
|
|
|
+ return "任务【" + task.TaskNodeId + "】回调,RFID中【" + actionAddress.Description + "】,地址【" + actionAddress.Address + "】重新写入值【" + dataValue + "】 和从RFID读出值【" + value + "】不一致";
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //点位清零
|
|
|
+ s7.Write("DB2.12", Convert.ToInt16("0"));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- Log.Instance.WriteLogAdd("回调异常,PLC连接不上==>" , LOG_TITLE_CALLBACK);
|
|
|
- return "回调异常,PLC连接不上==>";
|
|
|
+ //刀具动作回调,读取RFID
|
|
|
+ CcsActionAddress actionAddressQuery = new CcsActionAddress();
|
|
|
+ actionAddressQuery.ActionId = 15;
|
|
|
+ List<CcsActionAddress> CcsActionAddressRead = _ccsActionAddressService.GetList(actionAddressQuery);
|
|
|
+ foreach (CcsActionAddress actionAddress in CcsActionAddressRead)
|
|
|
+ {
|
|
|
+ string value = "";
|
|
|
+ if (actionAddress.dataType == "bytes")
|
|
|
+ {
|
|
|
+ byte[] bytes = s7.Read(actionAddress.Address, 19).Content;
|
|
|
+ value = ToolUtils.ReturnStringByBytes(bytes);
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "int")
|
|
|
+ {
|
|
|
+ value = s7.ReadInt16(actionAddress.Address).Content.ToString();
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "float")
|
|
|
+ {
|
|
|
+ value = s7.ReadFloat(actionAddress.Address).Content.ToString();
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "byte")
|
|
|
+ {
|
|
|
+ value = s7.ReadByte(actionAddress.Address).Content.ToString();
|
|
|
+ }
|
|
|
+ SetProperty(rFIData, actionAddress.Description, value);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(string.IsNullOrEmpty(rFIData.toolId) || rFIData.toolId == "0")
|
|
|
+ {
|
|
|
+ s7.ConnectClose();
|
|
|
+ repeatFlag = false;
|
|
|
+ Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,读取redis刀具RFID信息为空====>"+ JsonConvert.SerializeObject(rFIData), LOG_TITLE_CALLBACK);
|
|
|
+ return "任务【" + task.TaskNodeId + "】回调,读取redis刀具RFID信息为空";
|
|
|
+ }
|
|
|
+ string rfidDataObj = JsonConvert.SerializeObject(rFIData);
|
|
|
+ await _redisService.Database.StringSetAsync("CCS_TOOL_RFID_" + task.TaskNodeId, JsonConvert.SerializeObject(rfidDataObj));
|
|
|
+
|
|
|
+ Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,读取刀具RFID信息:" + JsonConvert.SerializeObject(rFIData), LOG_TITLE_CALLBACK);
|
|
|
+
|
|
|
+ //判断当前刀具是否和缓存刀具RFID一致
|
|
|
+ string callback_redis_key = "CUTTING_TOOL_RFID_";
|
|
|
+ var cuttingToolRfid = await _redisService.Database.StringGetAsync(callback_redis_key + task.TaskNodeId);
|
|
|
+
|
|
|
+ RFIData rfidWrite = new RFIData();
|
|
|
+ if (!cuttingToolRfid.IsNullOrEmpty)
|
|
|
+ {
|
|
|
+ string bb = JsonConvert.DeserializeObject<string>(cuttingToolRfid);
|
|
|
+ RFIData toolRdisRfid = JsonConvert.DeserializeObject<RFIData>(bb);
|
|
|
+ //比较是否为同一把刀
|
|
|
+ if (rFIData.toolId != toolRdisRfid.toolId)
|
|
|
+ {
|
|
|
+ s7.ConnectClose();
|
|
|
+ repeatFlag = false;
|
|
|
+ Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,缓存刀具【" + toolRdisRfid.toolId + "】 和从RFID读出刀具【" + rFIData.toolId + "】不一致", LOG_TITLE_CALLBACK);
|
|
|
+ return "任务【" + task.TaskNodeId + "】回调,缓存刀具【" + toolRdisRfid.toolId + "】 和从RFID读出刀具【" + rFIData.toolId + "】不一致";
|
|
|
+ }
|
|
|
+ rfidWrite = toolRdisRfid;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ rfidWrite = rFIData;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //写刀具信息
|
|
|
+ CcsActionAddress actionAddressQueryWrite = new CcsActionAddress();
|
|
|
+ actionAddressQueryWrite.ActionId = 16;
|
|
|
+ List<CcsActionAddress> CcsActionAddressWrites = _ccsActionAddressService.GetList(actionAddressQueryWrite);
|
|
|
+ foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
|
|
|
+ {
|
|
|
+ if (!string.IsNullOrEmpty(actionAddress.Address))
|
|
|
+ {
|
|
|
+ if (string.IsNullOrEmpty(actionAddress.Value))
|
|
|
+ {
|
|
|
+ //取参数传参值
|
|
|
+ string dataValue = getProperties(rfidWrite, actionAddress.Description);
|
|
|
+ if (!string.IsNullOrEmpty(dataValue))
|
|
|
+ {
|
|
|
+ if (actionAddress.dataType == "bytes")
|
|
|
+ {
|
|
|
+ s7.Write(actionAddress.Address, ToolUtils.ReturnBtyesWtitString(dataValue, 19));
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "int")
|
|
|
+ {
|
|
|
+ s7.Write(actionAddress.Address, Convert.ToInt16(dataValue));
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "float")
|
|
|
+ {
|
|
|
+ s7.Write(actionAddress.Address, float.Parse(dataValue));
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "byte")
|
|
|
+ {
|
|
|
+ s7.Write(actionAddress.Address, Convert.ToByte(dataValue));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //写入启动
|
|
|
+ s7.Write("DB2.12", Convert.ToInt16("2"));
|
|
|
+
|
|
|
+ Boolean nextFlag = true;
|
|
|
+ //进入循环等待写入完成
|
|
|
+ int count = 0;
|
|
|
+ string writeResult = "";
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ Thread.Sleep(2000);
|
|
|
+ writeResult = s7.ReadInt16("DB1.18").Content.ToString();
|
|
|
+ if(writeResult == "5")
|
|
|
+ {
|
|
|
+ //写完成,跳出循环
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(count == 10)
|
|
|
+ {
|
|
|
+ //超时,跳出循环
|
|
|
+ nextFlag = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!nextFlag)
|
|
|
+ {
|
|
|
+ s7.ConnectClose();
|
|
|
+ repeatFlag = false;
|
|
|
+ Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,写入RFID超时,当前DB1.18值【"+writeResult+"】", LOG_TITLE_CALLBACK);
|
|
|
+ return "任务【" + task.TaskNodeId + "】回调,写入RFID超时,当前DB1.18值【" + writeResult + "】";
|
|
|
+ }
|
|
|
+
|
|
|
+ //校验是否已写入RFID---读一下
|
|
|
+ s7.Write("DB2.12", Convert.ToInt16("1"));
|
|
|
+
|
|
|
+ //进入循环等待读完成
|
|
|
+ count = 0;
|
|
|
+ writeResult = "";
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ Thread.Sleep(2000);
|
|
|
+ writeResult = s7.ReadInt16("DB1.18").Content.ToString();
|
|
|
+ if (writeResult == "3")
|
|
|
+ {
|
|
|
+ //写完成,跳出循环
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (count == 10)
|
|
|
+ {
|
|
|
+ //超时,跳出循环
|
|
|
+ nextFlag = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!nextFlag)
|
|
|
+ {
|
|
|
+ s7.ConnectClose();
|
|
|
+ repeatFlag = false;
|
|
|
+ Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,读取RFID超时,当前DB1.18值【" + writeResult + "】", LOG_TITLE_CALLBACK);
|
|
|
+ return "任务【" + task.TaskNodeId + "】回调,读取RFID超时,当前DB1.18值【" + writeResult + "】";
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach (CcsActionAddress actionAddress in CcsActionAddressRead)
|
|
|
+ {
|
|
|
+ if (!string.IsNullOrEmpty(actionAddress.Address))
|
|
|
+ {
|
|
|
+ //取参数传参值
|
|
|
+ string dataValue = getProperties(rfidWrite, actionAddress.Description);
|
|
|
+ //读取写入结果
|
|
|
+ string value = "";
|
|
|
+ if (actionAddress.dataType == "bytes")
|
|
|
+ {
|
|
|
+ byte[] bytes = s7.Read(actionAddress.Address, 19).Content;
|
|
|
+ value = ToolUtils.ReturnStringByBytes(bytes);
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "int")
|
|
|
+ {
|
|
|
+ value = s7.ReadInt16(actionAddress.Address).Content.ToString();
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "float")
|
|
|
+ {
|
|
|
+ value = s7.ReadFloat(actionAddress.Address).Content.ToString();
|
|
|
+ }
|
|
|
+ else if (actionAddress.dataType == "byte")
|
|
|
+ {
|
|
|
+ value = s7.ReadByte(actionAddress.Address).Content.ToString();
|
|
|
+ }
|
|
|
+ if (value != dataValue)
|
|
|
+ {
|
|
|
+ s7.ConnectClose();
|
|
|
+ repeatFlag = false;
|
|
|
+ Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,RFID中【"+ actionAddress .Description+ "】,地址【"+actionAddress.Address+"】重新写入值【" + dataValue + "】 和从RFID读出值【" + value + "】不一致", LOG_TITLE_CALLBACK);
|
|
|
+ return "任务【" + task.TaskNodeId + "】回调,RFID中【" + actionAddress.Description + "】,地址【" + actionAddress.Address + "】重新写入值【" + dataValue + "】 和从RFID读出值【" + value + "】不一致";
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //点位清零
|
|
|
+ s7.Write("DB2.12", Convert.ToInt16("0"));
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
+ repeatFlag = false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ CcsTagValue callBacktagValue = tagValues.Where(o => o.Address == task.Address).FirstOrDefault();
|
|
|
+
|
|
|
+ if ((callBacktagValue != null && callBacktagValue.TagValue == task.CallbackValue) )
|
|
|
+ {
|
|
|
+
|
|
|
+ Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调清零,plc点位:" + task.Address + "值:" + callBacktagValue.TagValue, LOG_TITLE_CALLBACK);
|
|
|
+ s7.Write("DB2.2", Convert.ToInt16("0"));
|
|
|
+ s7.Write("DB2.4", Convert.ToInt16("0"));
|
|
|
+ s7.Write("DB2.6", Convert.ToInt16("0"));
|
|
|
+ s7.Write("DB2.8", Convert.ToInt16("0"));
|
|
|
+ s7.Write("DB2.10", Convert.ToInt16("0"));
|
|
|
+ s7.Write("DB2.12", Convert.ToInt16("0"));
|
|
|
s7.ConnectClose();
|
|
|
|
|
|
task.State = false;
|
|
@@ -396,7 +850,7 @@ namespace IMCS.CCS.Service.Impl
|
|
|
CallBackRequestData requestData = new CallBackRequestData();
|
|
|
requestData.taskId = long.Parse(task.TaskId);
|
|
|
requestData.taskNodeId = long.Parse(task.TaskNodeId);
|
|
|
-
|
|
|
+ requestData.content = JsonConvert.SerializeObject(rFIData);
|
|
|
var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
|
|
|
ResponseECSCallbackData responseECSCallback = JsonConvert.DeserializeObject<ResponseECSCallbackData>(result.Message);
|
|
|
if (result.IsSuccess && responseECSCallback.code == 0)
|
|
@@ -429,6 +883,10 @@ namespace IMCS.CCS.Service.Impl
|
|
|
}
|
|
|
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ s7.ConnectClose();
|
|
|
+ }
|
|
|
//回调检测到失败,回调通知ecs
|
|
|
if (!string.IsNullOrEmpty(task.FailAddress) || !string.IsNullOrEmpty(task.FailAddress2) || !string.IsNullOrEmpty(task.FailAddress3))
|
|
|
{
|
|
@@ -489,12 +947,54 @@ namespace IMCS.CCS.Service.Impl
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- Console.WriteLine("取和放回调任务异常===>>" + ex.Message);
|
|
|
+ repeatFlag = false;
|
|
|
Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
|
|
|
return "回调异常" + ex.Message;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public string getProperties<T>(T t, string propertyName)
|
|
|
+ {
|
|
|
+ string tStr = string.Empty;
|
|
|
+ if (t == null)
|
|
|
+ {
|
|
|
+ return tStr;
|
|
|
+ }
|
|
|
+ System.Reflection.PropertyInfo[] properties = t.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
|
|
|
+
|
|
|
+ if (properties.Length <= 0)
|
|
|
+ {
|
|
|
+ return tStr;
|
|
|
+ }
|
|
|
+ foreach (System.Reflection.PropertyInfo item in properties)
|
|
|
+ {
|
|
|
+ string name = item.Name;
|
|
|
+ object value = item.GetValue(t, null);
|
|
|
+ if ((item.PropertyType.IsValueType || item.PropertyType.Name.StartsWith("String")) && name == propertyName)
|
|
|
+ {
|
|
|
+ tStr = value.ToString();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return tStr;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void SetProperty<T>(T t, string propertyName, object value)
|
|
|
+ {
|
|
|
+ // 获取对象的类型
|
|
|
+ Type type = t.GetType();
|
|
|
+
|
|
|
+ // 获取指定名称的属性
|
|
|
+ PropertyInfo propertyInfo = type.GetProperty(propertyName);
|
|
|
+
|
|
|
+ if (propertyInfo != null && propertyInfo.CanWrite)
|
|
|
+ {
|
|
|
+ // 设置属性值
|
|
|
+ propertyInfo.SetValue(t, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 读写回调任务
|
|
|
/// </summary>
|
|
@@ -503,70 +1003,71 @@ namespace IMCS.CCS.Service.Impl
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
+
|
|
|
List<TaskCallback> taskList = new List<TaskCallback>();
|
|
|
- var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
|
|
|
- if (taskCallbackListData.IsNullOrEmpty)
|
|
|
- {
|
|
|
- taskList = await _taskCallbackService.GetAllList();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
|
|
|
- }
|
|
|
+ var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
|
|
|
+ if (taskCallbackListData.IsNullOrEmpty)
|
|
|
+ {
|
|
|
+ taskList = await _taskCallbackService.GetAllList();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
|
|
|
+ }
|
|
|
|
|
|
- List<Device> deviceList = await getDeviceList();
|
|
|
- //在线设备
|
|
|
- taskList = taskList.Where(x => (x.OperateType.Equals(ActionTypeEnum.ReadRFID.ToString())
|
|
|
- || x.OperateType.Equals(ActionTypeEnum.WriteRFID.ToString())) && x.State).ToList();
|
|
|
- TaskCallback task = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).FirstOrDefault();
|
|
|
- if (task == null)
|
|
|
- {
|
|
|
- return "无回调任务";
|
|
|
- }
|
|
|
- string message = "";
|
|
|
+ List<Device> deviceList = await getDeviceList();
|
|
|
+ //在线设备
|
|
|
+ taskList = taskList.Where(x => (x.OperateType.Equals(ActionTypeEnum.ReadRFID.ToString())
|
|
|
+ || x.OperateType.Equals(ActionTypeEnum.WriteRFID.ToString())) && x.State).ToList();
|
|
|
+ TaskCallback task = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).FirstOrDefault();
|
|
|
+ if (task == null)
|
|
|
+ {
|
|
|
+ return "无回调任务";
|
|
|
+ }
|
|
|
+ string message = "";
|
|
|
|
|
|
- DateTime currentTime = DateTime.Now;
|
|
|
- CcsTagValue tagValueQuery = new CcsTagValue();
|
|
|
- tagValueQuery.Ip = task.IP;
|
|
|
- List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery).ToList();
|
|
|
- CcsTagValue callBacktagValue = tagValues.Where(o => o.Address == task.Address).FirstOrDefault();
|
|
|
+ DateTime currentTime = DateTime.Now;
|
|
|
+ CcsTagValue tagValueQuery = new CcsTagValue();
|
|
|
+ tagValueQuery.Ip = task.IP;
|
|
|
+ List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery).ToList();
|
|
|
+ CcsTagValue callBacktagValue = tagValues.Where(o => o.Address == task.Address).FirstOrDefault();
|
|
|
|
|
|
- if (callBacktagValue != null && callBacktagValue.TagValue == task.CallbackValue )
|
|
|
- {
|
|
|
- CcsTagValue callBacktagValue2 = null;
|
|
|
- if (task.OperateType.Equals(ActionTypeEnum.ReadRFID.ToString())){
|
|
|
- callBacktagValue2 = tagValues.Where(o => o.Address == task.Address2).FirstOrDefault();
|
|
|
+ if (callBacktagValue != null && callBacktagValue.TagValue == task.CallbackValue )
|
|
|
+ {
|
|
|
+ CcsTagValue callBacktagValue2 = null;
|
|
|
+ if (task.OperateType.Equals(ActionTypeEnum.ReadRFID.ToString())){
|
|
|
+ callBacktagValue2 = tagValues.Where(o => o.Address == task.Address2).FirstOrDefault();
|
|
|
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- CallBackRequestData requestData = new CallBackRequestData();
|
|
|
- requestData.taskId = long.Parse(task.TaskId);
|
|
|
- requestData.taskNodeId = long.Parse(task.TaskNodeId);
|
|
|
- //读RFID的值返回ecs
|
|
|
- if (callBacktagValue2 != null)
|
|
|
- {
|
|
|
- requestData.content = callBacktagValue2.TagValue;
|
|
|
- }
|
|
|
- var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
|
|
|
- ResponseECSCallbackData responseECSCallback = JsonConvert.DeserializeObject<ResponseECSCallbackData>(result.Message);
|
|
|
- if (result.IsSuccess && responseECSCallback.code == 0)
|
|
|
- {
|
|
|
- task.State = false;
|
|
|
- task.UpdateTime = DateTime.Now;
|
|
|
- await _taskCallbackService.CreateOrUpdateAndCache(task);
|
|
|
- message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + ",请求结果:" + result.Message + ";";
|
|
|
- Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
|
|
|
- Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
|
|
|
- }
|
|
|
-
|
|
|
+ CallBackRequestData requestData = new CallBackRequestData();
|
|
|
+ requestData.taskId = long.Parse(task.TaskId);
|
|
|
+ requestData.taskNodeId = long.Parse(task.TaskNodeId);
|
|
|
+ //读RFID的值返回ecs
|
|
|
+ if (callBacktagValue2 != null)
|
|
|
+ {
|
|
|
+ requestData.content = callBacktagValue2.TagValue;
|
|
|
+ }
|
|
|
+ var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
|
|
|
+ ResponseECSCallbackData responseECSCallback = JsonConvert.DeserializeObject<ResponseECSCallbackData>(result.Message);
|
|
|
+ if (result.IsSuccess && responseECSCallback.code == 0)
|
|
|
+ {
|
|
|
+ task.State = false;
|
|
|
+ task.UpdateTime = DateTime.Now;
|
|
|
+ await _taskCallbackService.CreateOrUpdateAndCache(task);
|
|
|
+ message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + ",请求结果:" + result.Message + ";";
|
|
|
+ Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
|
|
|
+ Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
|
|
|
}
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
//回调检测到失败,回调通知ecs
|
|
|
- if (!string.IsNullOrEmpty(task.FailAddress) || !string.IsNullOrEmpty(task.FailAddress2) || !string.IsNullOrEmpty(task.FailAddress3))
|
|
|
+ if (!string.IsNullOrEmpty(task.FailAddress) || !string.IsNullOrEmpty(task.FailAddress2) || !string.IsNullOrEmpty(task.FailAddress3))
|
|
|
{
|
|
|
bool failFalg = false;
|
|
|
if (!string.IsNullOrEmpty(task.FailAddress))
|
|
@@ -620,12 +1121,10 @@ namespace IMCS.CCS.Service.Impl
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
return string.IsNullOrEmpty(message) ? "无回调任务" : message;
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- Console.WriteLine("读写任务异常===>>" + ex.Message);
|
|
|
Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
|
|
|
return "回调异常" + ex.Message;
|
|
|
}
|
|
@@ -639,34 +1138,45 @@ namespace IMCS.CCS.Service.Impl
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
+
|
|
|
+
|
|
|
List<TaskCallback> taskList = new List<TaskCallback>();
|
|
|
- var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
|
|
|
- if (taskCallbackListData.IsNullOrEmpty)
|
|
|
- {
|
|
|
- taskList = await _taskCallbackService.GetAllList();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
|
|
|
- }
|
|
|
- List<Device> deviceList = await getDeviceList();
|
|
|
- //在线设备
|
|
|
- taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.StartNCProgram.ToString()) && x.State && deviceList.Any(device => device.Ip == x.IP)).ToList();
|
|
|
- if (taskList == null || taskList.Count == 0)
|
|
|
- {
|
|
|
- return "无回调任务";
|
|
|
- }
|
|
|
- string message = "";
|
|
|
+ var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
|
|
|
+ if (taskCallbackListData.IsNullOrEmpty)
|
|
|
+ {
|
|
|
+ taskList = await _taskCallbackService.GetAllList();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
|
|
|
+ }
|
|
|
+ List<Device> deviceList = await getDeviceList();
|
|
|
+ //在线设备
|
|
|
+ taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.StartNCProgram.ToString()) && x.State && deviceList.Any(device => device.Ip == x.IP)).ToList();
|
|
|
+ if (taskList == null || taskList.Count == 0)
|
|
|
+ {
|
|
|
+ return "无回调任务";
|
|
|
+ }
|
|
|
+ string message = "";
|
|
|
|
|
|
- DateTime currentTime = DateTime.Now;
|
|
|
- foreach (TaskCallback task in taskList)
|
|
|
+ DateTime currentTime = DateTime.Now;
|
|
|
+ foreach (TaskCallback task in taskList)
|
|
|
{
|
|
|
CcsTagValue tagValueQuery = new CcsTagValue();
|
|
|
- tagValueQuery.Ip = task.IP;
|
|
|
+ //tagValueQuery.Ip = task.IP;
|
|
|
//tagValueQuery.Address = task.Address;
|
|
|
+
|
|
|
List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery);
|
|
|
+
|
|
|
+ //系统操作模式
|
|
|
+ CcsTagValue tagValueMode = tagValues.Where(o => o.Address == "DB1.2").FirstOrDefault();
|
|
|
+ if(tagValueMode.TagValue != "257")
|
|
|
+ {
|
|
|
+ return "当前操作模式非自动并运行";
|
|
|
+ }
|
|
|
+
|
|
|
CcsTagValue tagValue = tagValues.Where(o => o.Address == task.Address.Trim()).FirstOrDefault();
|
|
|
-
|
|
|
+
|
|
|
if (tagValue != null && tagValue.TagValue == task.CallbackValue )
|
|
|
{
|
|
|
CallBackRequestData requestData = new CallBackRequestData();
|
|
@@ -751,7 +1261,6 @@ namespace IMCS.CCS.Service.Impl
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- Console.WriteLine("启动机床程序回调异常===>>" + ex.Message);
|
|
|
Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
|
|
|
return "回调异常" + ex.Message;
|
|
|
}
|
|
@@ -764,29 +1273,26 @@ namespace IMCS.CCS.Service.Impl
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- Console.WriteLine("进入启动清洗机回调任务");
|
|
|
- List<TaskCallback> taskList = new List<TaskCallback>();
|
|
|
- var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
|
|
|
- if (taskCallbackListData.IsNullOrEmpty)
|
|
|
- {
|
|
|
- taskList = await _taskCallbackService.GetAllList();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
|
|
|
- }
|
|
|
- List<Device> deviceList = await getDeviceList();
|
|
|
- //在线设备
|
|
|
- taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.StartCleanMachine.ToString()) && x.State && deviceList.Any(device => device.Ip == x.IP)).ToList();
|
|
|
- // TaskCallback task = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).FirstOrDefault();
|
|
|
- if (taskList == null || taskList.Count == 0)
|
|
|
- {
|
|
|
- Console.WriteLine("启动清洗机回调任务=>>无回调任务");
|
|
|
- return "无回调任务";
|
|
|
- }
|
|
|
- string message = "";
|
|
|
- Console.WriteLine("启动清洗机回调任务=>>继续执行");
|
|
|
-
|
|
|
+ List<TaskCallback> taskList = new List<TaskCallback>();
|
|
|
+ var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
|
|
|
+ if (taskCallbackListData.IsNullOrEmpty)
|
|
|
+ {
|
|
|
+ taskList = await _taskCallbackService.GetAllList();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
|
|
|
+ }
|
|
|
+ List<Device> deviceList = await getDeviceList();
|
|
|
+ //在线设备
|
|
|
+ taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.StartCleanMachine.ToString()) && x.State && deviceList.Any(device => device.Ip == x.IP)).ToList();
|
|
|
+ // TaskCallback task = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).FirstOrDefault();
|
|
|
+ if (taskList == null || taskList.Count == 0)
|
|
|
+ {
|
|
|
+ return "无回调任务";
|
|
|
+ }
|
|
|
+ string message = "";
|
|
|
+
|
|
|
DateTime currentTime = DateTime.Now;
|
|
|
foreach (TaskCallback task in taskList)
|
|
|
{
|
|
@@ -875,12 +1381,11 @@ namespace IMCS.CCS.Service.Impl
|
|
|
}
|
|
|
}
|
|
|
Thread.Sleep(1000);
|
|
|
- }
|
|
|
+ }
|
|
|
return string.IsNullOrEmpty(message) ? "无回调任务" : message;
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- Console.WriteLine("启动清洗机回调任务=>>回调异常 ===>> " + ex.Message, LOG_TITLE_CALLBACK);
|
|
|
Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
|
|
|
return "回调异常" + ex.Message;
|
|
|
}
|
|
@@ -1257,7 +1762,6 @@ namespace IMCS.CCS.Service.Impl
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
-
|
|
|
string message = "";
|
|
|
string all_use_device_redis_key = imcs_redis_key + RedisKeyEnum.ALLUseDeviceList ;
|
|
|
List<Device> devices = new List<Device>();
|
|
@@ -1313,14 +1817,11 @@ namespace IMCS.CCS.Service.Impl
|
|
|
//Thread.Sleep(50);
|
|
|
|
|
|
}
|
|
|
-
|
|
|
return message;
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- Console.WriteLine("进入设备监控循设备连接异常,或以离线");
|
|
|
Log.Instance.WriteLogAdd("设备连接异常,或以离线" + ex.Message, LOG_TITLE_DEVICE);
|
|
|
-
|
|
|
return "设备连接异常,或以离线" + ex.Message;
|
|
|
}
|
|
|
}
|
|
@@ -1411,14 +1912,13 @@ namespace IMCS.CCS.Service.Impl
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
-
|
|
|
SiemensS7Net s7 = DevicePlcS7.SiemensS7("192.168.1.1");
|
|
|
OperateResult ConnectionResult = s7.ConnectServer();
|
|
|
if (!ConnectionResult.IsSuccess)
|
|
|
{
|
|
|
|
|
|
s7.ConnectClose();
|
|
|
- Log.Instance.WriteLogAdd("S7心跳写入异常,plc连不上==>" + "192.168.1.1", LOG_TITLE_S7);
|
|
|
+ Log.Instance.WriteLogAdd("S7心跳写入异常,plc连不上==>" + "192.168.1.1", LOG_HEART_PLC);
|
|
|
return "心跳写入失败,plc连不上";
|
|
|
}
|
|
|
else
|
|
@@ -1438,12 +1938,414 @@ namespace IMCS.CCS.Service.Impl
|
|
|
s7.ConnectClose();
|
|
|
}catch (Exception ex)
|
|
|
{
|
|
|
- Console.WriteLine("心跳写入异常");
|
|
|
- Log.Instance.WriteLogAdd("心跳写入异常" + ex.Message, LOG_TITLE_S7);
|
|
|
-
|
|
|
+ Log.Instance.WriteLogAdd("心跳写入异常" + ex.Message, LOG_HEART_PLC);
|
|
|
return "心跳写入异常" + ex.Message;
|
|
|
}
|
|
|
return "心跳写入成功";
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 监控设备状态
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<string> MonitorEquipmentStatusJob2()
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ SiemensS7Net s7 = DevicePlcS7.SiemensS7("192.168.1.1");
|
|
|
+ OperateResult ConnectionResult = s7.ConnectServer();
|
|
|
+ if (!ConnectionResult.IsSuccess)
|
|
|
+ {
|
|
|
+
|
|
|
+ s7.ConnectClose();
|
|
|
+ Log.Instance.WriteLogAdd("监控设备状态写入异常,plc连不上==>" + "192.168.1.1", LOG_RESOURCE_STATE);
|
|
|
+ return "监控设备状态写入异常,plc连不上";
|
|
|
+ }
|
|
|
+
|
|
|
+ List<EquipmentMonitor> equipmentMonitors = new List<EquipmentMonitor>();
|
|
|
+ string equipment_monitors_redis_key = imcs_redis_key + RedisKeyEnum.MonitorEquipmentStatusJob;
|
|
|
+ var data = await _redisService.Database.StringGetAsync(equipment_monitors_redis_key);
|
|
|
+ if (data.IsNullOrEmpty)
|
|
|
+ {
|
|
|
+ equipmentMonitors = await _equipmentMonitorService.GetList();
|
|
|
+ //首次设置redis
|
|
|
+ if (equipmentMonitors != null && equipmentMonitors.Count > 0)
|
|
|
+ {
|
|
|
+ await _redisService.Database.StringSetAsync(equipment_monitors_redis_key, JsonConvert.SerializeObject(equipmentMonitors));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ equipmentMonitors = JsonConvert.DeserializeObject<List<EquipmentMonitor>>(data);
|
|
|
+ }
|
|
|
+ //变化的设备
|
|
|
+ List<EquipmentMonitor> changeEquipmentMonitors = new List<EquipmentMonitor>();
|
|
|
+ foreach (EquipmentMonitor equipment in equipmentMonitors)
|
|
|
+ {
|
|
|
+ string operateResult = s7.ReadInt16(equipment.Address).Content.ToString();
|
|
|
+
|
|
|
+ string state = operateResult == "0" ? "离线" : operateResult == "1" ? "生产中" : "空闲";
|
|
|
+
|
|
|
+ if(equipment.Status == null || equipment.Status != state)
|
|
|
+ {
|
|
|
+ equipment.Status = state;
|
|
|
+ changeEquipmentMonitors.Add(equipment);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //初始化推送列表
|
|
|
+ List<ProductionStatus> productionStatusList = new List<ProductionStatus>();
|
|
|
+
|
|
|
+ //变化的修改 并且更新缓存
|
|
|
+ if (changeEquipmentMonitors.Count > 0)
|
|
|
+ {
|
|
|
+ foreach (EquipmentMonitor changeEquipment in changeEquipmentMonitors)
|
|
|
+ {
|
|
|
+ ProductionStatus productionStatus = new ProductionStatus();
|
|
|
+ productionStatus.id = changeEquipment.Id.ToString();
|
|
|
+ productionStatus.onlineStatus = syncStatusMap[changeEquipment.Status].ToString();
|
|
|
+ if (changeEquipment.Description != null)
|
|
|
+ {
|
|
|
+ productionStatus.ip = changeEquipment.IP;
|
|
|
+ }
|
|
|
+ productionStatusList.Add(productionStatus);
|
|
|
+
|
|
|
+ }
|
|
|
+ //修改并重置缓存
|
|
|
+ await _equipmentMonitorService.UpdateAndCache(equipmentMonitors);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //推送
|
|
|
+ if (productionStatusList != null && productionStatusList.Count > 0)
|
|
|
+ {
|
|
|
+ //主动推送同步状态数据接口
|
|
|
+ RequestSynStatusData requestData = new RequestSynStatusData();
|
|
|
+ requestData.productionStatus = JsonConvert.SerializeObject(productionStatusList);
|
|
|
+ String synStatusUrl = ecsRootUrlContext + "/api/authority/synStatus/synDeviceStatus";
|
|
|
+ var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, synStatusUrl, requestData, null);
|
|
|
+ //解析回调数据结果
|
|
|
+ ResponseECSCallbackData responseECSCallback = JsonConvert.DeserializeObject<ResponseECSCallbackData>(result.Message);
|
|
|
+ if (responseECSCallback != null && responseECSCallback.code == 0)
|
|
|
+ {
|
|
|
+ Log.Instance.WriteLogAdd("同步设备状态成功==>" + JsonConvert.SerializeObject(productionStatusList), LOG_RESOURCE_STATE);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Log.Instance.WriteLogAdd("同步设备状态操作失败==>:" + JsonConvert.SerializeObject(productionStatusList) + responseECSCallback.msg, LOG_RESOURCE_STATE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return "监控设备状态成功";
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Log.Instance.WriteLogAdd("MonitorEquipmentStatusJob:" + ex.Message, LOG_RESOURCE_STATE);
|
|
|
+
|
|
|
+ return "MonitorEquipmentStatusJob : " + ex.Message;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 拍照回调任务
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<string> CallTakePhoto()
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ List<TaskCallback> taskList = new List<TaskCallback>();
|
|
|
+ var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
|
|
|
+ if (taskCallbackListData.IsNullOrEmpty)
|
|
|
+ {
|
|
|
+ taskList = await _taskCallbackService.GetAllList();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ taskList = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
|
|
|
+ }
|
|
|
+ //在线设备
|
|
|
+ List<Device> deviceList = await getDeviceList();
|
|
|
+
|
|
|
+ taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.TakePhoto.ToString())).ToList();
|
|
|
+ taskList = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).ToList();
|
|
|
+ //TaskCallback task = taskList.Where(key => deviceList.Any(device => device.Ip == key.IP)).FirstOrDefault() ;
|
|
|
+ if (taskList == null || taskList.Count == 0)
|
|
|
+ {
|
|
|
+ return "无回调任务";
|
|
|
+ }
|
|
|
+ string message = "";
|
|
|
+
|
|
|
+ foreach (TaskCallback task in taskList)
|
|
|
+ {
|
|
|
+ CcsTagValue tagValueQuery = new CcsTagValue();
|
|
|
+ tagValueQuery.Ip = task.IP;
|
|
|
+ //tagValueQuery.Address = task.Address;
|
|
|
+ List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery).ToList();
|
|
|
+
|
|
|
+ //系统操作模式
|
|
|
+ CcsTagValue tagValueMode = tagValues.Where(o => o.Address == "DB1.2").FirstOrDefault();
|
|
|
+ if (tagValueMode.TagValue != "257")
|
|
|
+ {
|
|
|
+ return "当前操作模式非自动并运行";
|
|
|
+ }
|
|
|
+
|
|
|
+ CcsTagValue callBacktagValue = tagValues.Where(o => o.Address == task.Address).FirstOrDefault();
|
|
|
+
|
|
|
+ if ((callBacktagValue != null && callBacktagValue.TagValue == task.CallbackValue))
|
|
|
+ {
|
|
|
+ //执行位清零
|
|
|
+ SiemensS7Net s7 = DevicePlcS7.SiemensS7(task.IP);
|
|
|
+ HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
|
|
|
+ if (!ConnectionResult.IsSuccess)
|
|
|
+ {
|
|
|
+ Log.Instance.WriteLogAdd("回调异常,PLC连接不上==>", LOG_TITLE_CALLBACK);
|
|
|
+ return "回调异常,PLC连接不上==>";
|
|
|
+ }
|
|
|
+
|
|
|
+ Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调清零,plc点位:" + task.Address + "值:" + callBacktagValue.TagValue, LOG_TITLE_CALLBACK);
|
|
|
+ s7.Write("DB2.2", Convert.ToInt16("0"));
|
|
|
+ s7.Write("DB2.4", Convert.ToInt16("0"));
|
|
|
+ s7.Write("DB2.6", Convert.ToInt16("0"));
|
|
|
+ s7.Write("DB2.8", Convert.ToInt16("0"));
|
|
|
+ s7.Write("DB2.10", Convert.ToInt16("0"));
|
|
|
+
|
|
|
+
|
|
|
+ short resultContent = s7.ReadInt16("DB1.2090").Content;
|
|
|
+ Log.Instance.WriteLogAdd("任务【" + task.TaskNodeId + "】回调,拍照结果:" + resultContent, LOG_TITLE_CALLBACK);
|
|
|
+
|
|
|
+ s7.ConnectClose();
|
|
|
+
|
|
|
+ task.State = false;
|
|
|
+ task.UpdateTime = DateTime.Now;
|
|
|
+ await _taskCallbackService.CreateOrUpdateAndCache(task);
|
|
|
+
|
|
|
+ CallBackRequestData requestData = new CallBackRequestData();
|
|
|
+ requestData.taskId = long.Parse(task.TaskId);
|
|
|
+ requestData.taskNodeId = long.Parse(task.TaskNodeId);
|
|
|
+ requestData.content = Convert.ToString(resultContent, 2); //拍照结果
|
|
|
+ var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
|
|
|
+ ResponseECSCallbackData responseECSCallback = JsonConvert.DeserializeObject<ResponseECSCallbackData>(result.Message);
|
|
|
+ if (result.IsSuccess && responseECSCallback.code == 0)
|
|
|
+ {
|
|
|
+ task.State = false;
|
|
|
+ task.UpdateTime = DateTime.Now;
|
|
|
+ await _taskCallbackService.CreateOrUpdateAndCache(task);
|
|
|
+ message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + ",请求结果:" + result.Message + ";";
|
|
|
+ Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //ecs返回-5 任务作废
|
|
|
+ if (result.IsSuccess && responseECSCallback.code == -5)
|
|
|
+ {
|
|
|
+ task.State = false;
|
|
|
+ task.UpdateTime = DateTime.Now;
|
|
|
+ task.Description = "ecs返回-5,回调任务作废";
|
|
|
+ await _taskCallbackService.CreateOrUpdateAndCache(task);
|
|
|
+ message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
|
|
|
+ Log.Instance.WriteLogAdd("回调异常,请求接口失败,ecs通知任务作废==>" + JsonConvert.SerializeObject(result), LOG_TITLE_CALLBACK);
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
|
|
|
+ Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(result), LOG_TITLE_CALLBACK);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ //回调检测到失败,回调通知ecs
|
|
|
+ if (!string.IsNullOrEmpty(task.FailAddress) || !string.IsNullOrEmpty(task.FailAddress2) || !string.IsNullOrEmpty(task.FailAddress3))
|
|
|
+ {
|
|
|
+ bool failFalg = false;
|
|
|
+ if (!string.IsNullOrEmpty(task.FailAddress))
|
|
|
+ {
|
|
|
+ List<CcsTagValue> FailCallbackTagValues = tagValues.Where(o => o.Address == task.FailAddress && o.TagValue == task.CallbackFailValue).ToList();
|
|
|
+
|
|
|
+ if (FailCallbackTagValues != null && FailCallbackTagValues.Count > 0)
|
|
|
+ {
|
|
|
+ failFalg = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!string.IsNullOrEmpty(task.FailAddress2))
|
|
|
+ {
|
|
|
+ List<CcsTagValue> FailCallbackTagValues = tagValues.Where(o => o.Address == task.FailAddress2 && o.TagValue == task.CallbackFailValue2).ToList();
|
|
|
+
|
|
|
+ if (FailCallbackTagValues != null && FailCallbackTagValues.Count > 0)
|
|
|
+ {
|
|
|
+ failFalg = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!string.IsNullOrEmpty(task.FailAddress3))
|
|
|
+ {
|
|
|
+ List<CcsTagValue> FailCallbackTagValues = tagValues.Where(o => o.Address == task.FailAddress3 && o.TagValue == task.CallbackFailValue3).ToList();
|
|
|
+
|
|
|
+ if (FailCallbackTagValues != null && FailCallbackTagValues.Count > 0)
|
|
|
+ {
|
|
|
+ failFalg = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (failFalg)
|
|
|
+ {
|
|
|
+ CallBackRequestData requestData = new CallBackRequestData();
|
|
|
+ requestData.taskId = long.Parse(task.TaskId);
|
|
|
+ requestData.taskNodeId = long.Parse(task.TaskNodeId);
|
|
|
+ requestData.code = "0";
|
|
|
+ requestData.msg = "操作失败";
|
|
|
+ var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
|
|
|
+ if (result.IsSuccess)
|
|
|
+ {
|
|
|
+ task.State = false;
|
|
|
+ task.UpdateTime = DateTime.Now;
|
|
|
+ await _taskCallbackService.CreateOrUpdateAndCache(task);
|
|
|
+ message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + message + ",请求结果:" + result.Message + ";";
|
|
|
+ Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
|
|
|
+ Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Thread.Sleep(1000);
|
|
|
+ }
|
|
|
+ return string.IsNullOrEmpty(message) ? "无回调任务" : message;
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
|
|
|
+ return "回调异常" + ex.Message;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// PLC报警信息
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<string> PlcAlarm()
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ SiemensS7Net s7 = DevicePlcS7.SiemensS7("192.168.1.1");
|
|
|
+ OperateResult ConnectionResult = s7.ConnectServer();
|
|
|
+ if (!ConnectionResult.IsSuccess)
|
|
|
+ {
|
|
|
+
|
|
|
+ s7.ConnectClose();
|
|
|
+ return "PLC报警信息采集失败,plc连不上";
|
|
|
+ }
|
|
|
+
|
|
|
+ CcsActionAddress actionAddressQueryRead = new CcsActionAddress();
|
|
|
+ actionAddressQueryRead.ActionId = 17;
|
|
|
+ List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQueryRead);
|
|
|
+ string errorInfo = "@";
|
|
|
+ foreach (CcsActionAddress actionAddress in CcsActionAddresses)
|
|
|
+ {
|
|
|
+ if (!string.IsNullOrEmpty(actionAddress.Address))
|
|
|
+ {
|
|
|
+ bool result = s7.ReadBool(actionAddress.Address).Content;
|
|
|
+ if (result)
|
|
|
+ {
|
|
|
+ errorInfo += actionAddress.Description + "@";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ string plc_alarm_redis_key = imcs_redis_key + RedisKeyEnum.PlcAlarm;
|
|
|
+ var data = await _redisService.Database.StringGetAsync(plc_alarm_redis_key);
|
|
|
+
|
|
|
+ if (data.IsNullOrEmpty)
|
|
|
+ {
|
|
|
+ data = "@";
|
|
|
+ await _redisService.Database.StringSetAsync(plc_alarm_redis_key, data);
|
|
|
+ }
|
|
|
+ string hisErrorInfo = data.ToString();
|
|
|
+
|
|
|
+ if (hisErrorInfo != errorInfo)
|
|
|
+ {
|
|
|
+ //两次报警信息不一致
|
|
|
+ //主动推送同步状态数据接口
|
|
|
+ RequestSynStatusData requestData = new RequestSynStatusData();
|
|
|
+ requestData.productionStatus = errorInfo;
|
|
|
+ String synStatusUrl = ecsRootUrlContext + "/api/authority/synStatus/synPlcInfo";
|
|
|
+ var returnResult = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, synStatusUrl, requestData, null);
|
|
|
+ //解析回调数据结果
|
|
|
+ ResponseECSCallbackData responseECSCallback = JsonConvert.DeserializeObject<ResponseECSCallbackData>(returnResult.Message);
|
|
|
+ if (responseECSCallback != null && responseECSCallback.code == 0)
|
|
|
+ {
|
|
|
+ Log.Instance.WriteLogAdd("同步PLC状态成功==>" + JsonConvert.SerializeObject(errorInfo), LOG_RESOURCE_STATE);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Log.Instance.WriteLogAdd("同步PLC状状态操作失败==>:" + JsonConvert.SerializeObject(errorInfo) + responseECSCallback.msg, LOG_RESOURCE_STATE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Log.Instance.WriteLogAdd("同步PLC状态:" + ex.Message, LOG_RESOURCE_STATE);
|
|
|
+
|
|
|
+ return "同步PLC状态 : " + ex.Message;
|
|
|
+ }
|
|
|
+ return "PLC报警信息采集成功";
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 更新机床刀库回调
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<string> CallUpdateMachineTool()
|
|
|
+ {
|
|
|
+ List<TaskCallback> list = new List<TaskCallback>();
|
|
|
+ var taskCallbackListData = await _redisService.Database.StringGetAsync(imcs_redis_key + RedisKeyEnum.CallbackTaskList);
|
|
|
+ if (taskCallbackListData.IsNullOrEmpty)
|
|
|
+ {
|
|
|
+ list = await _taskCallbackService.GetAllList();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ list = JsonConvert.DeserializeObject<List<TaskCallback>>(taskCallbackListData);
|
|
|
+ }
|
|
|
+
|
|
|
+ TaskCallback task = list.Where(x => x.OperateType.Equals(ActionTypeEnum.UpdateMachineTool.ToString())).FirstOrDefault();
|
|
|
+ if (task == null)
|
|
|
+ {
|
|
|
+ return "无回调任务";
|
|
|
+ }
|
|
|
+ string message = "";
|
|
|
+ try
|
|
|
+ {
|
|
|
+
|
|
|
+ DateTime currentTime = DateTime.Now;
|
|
|
+ if (currentTime.Subtract(task.CreateTime).TotalSeconds > 5)
|
|
|
+ {
|
|
|
+ CallBackRequestData requestData = new CallBackRequestData();
|
|
|
+ requestData.taskId = long.Parse(task.TaskId);
|
|
|
+ requestData.taskNodeId = long.Parse(task.TaskNodeId);
|
|
|
+ var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
|
|
|
+ ResponseECSCallbackData responseECSCallback = JsonConvert.DeserializeObject<ResponseECSCallbackData>(result.Message);
|
|
|
+ if (result.IsSuccess && responseECSCallback.code == 0)
|
|
|
+ {
|
|
|
+ task.State = false;
|
|
|
+ task.UpdateTime = DateTime.Now;
|
|
|
+ await _taskCallbackService.CreateOrUpdateAndCache(task);
|
|
|
+ message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + ",请求结果:" + result.Message + ";";
|
|
|
+ Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
|
|
|
+ Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(result), LOG_TITLE_CALLBACK);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return string.IsNullOrEmpty(message) ? "无回调任务" : message;
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
|
|
|
+ return "回调异常" + ex.Message;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|