feat - 报警上报完善,配方更变上报逻辑添加

master
SoulStar 20 hours ago
parent 40d952657f
commit 8925201faf

@ -18,6 +18,7 @@ namespace Sln.Iot.Business
private RFID05Business _rfid05;
private RFID06Business _rfid06;
private ErrorAnalyseBusiness _errorAnalyse;
private RecipeBusiness _recipeBusiness;
public BusinessStart()
{
_rfid01 = new RFID01Business();
@ -27,6 +28,7 @@ namespace Sln.Iot.Business
_rfid05 = new RFID05Business();
_rfid06 = new RFID06Business();
_errorAnalyse = new ErrorAnalyseBusiness();
_recipeBusiness = new RecipeBusiness();
}
}
}

@ -15,6 +15,7 @@ using Sln.Iot.CFX.Event;
using CFX;
using CFX.Structures;
using Sln.Iot.Serilog;
using Amqp;
namespace Sln.Iot.Business
{
@ -109,7 +110,7 @@ namespace Sln.Iot.Business
{
Guid transID = Guid.Parse(trayBindingService.TidGet());
Guid logGuid = Guid.NewGuid();
errorService.InsertVacuum1Error(logGuid.ToString(), errorMessage.ENAlarmMessage);
errorService.InsertVacuum1Error(logGuid.ToString(), errorMessage.ENAlarmMessage, errorMessage.CNAlarmMessage, errorMessage.ErrorCode);
connect1.PublishEvent(new CFXEnvelope(faultOccurredEvent.Handle(errorMessage.ErrorCode, LevelTrans(errorMessage.AlarmDegarde), logGuid, errorMessage.ENAlarmMessage + "-Vacuum1", transID)));
_log.Info($"报警发生 内容:{errorMessage.CNAlarmMessage}");
}
@ -146,7 +147,7 @@ namespace Sln.Iot.Business
{
Guid transID = Guid.Parse(trayBindingService.TidGet());
Guid logGuid = Guid.NewGuid();
errorService.InsertVacuum2Error(logGuid.ToString(), errorMessage.ENAlarmMessage);
errorService.InsertVacuum2Error(logGuid.ToString(), errorMessage.ENAlarmMessage, errorMessage.CNAlarmMessage, errorMessage.ErrorCode);
connect1.PublishEvent(new CFXEnvelope(faultOccurredEvent.Handle(errorMessage.ErrorCode, LevelTrans(errorMessage.AlarmDegarde), logGuid, errorMessage.ENAlarmMessage + "-Vacuum2", transID)));
_log.Info($"报警发生 内容:{errorMessage.CNAlarmMessage}");
}
@ -183,7 +184,7 @@ namespace Sln.Iot.Business
{
Guid transID = Guid.Parse(trayBindingService.TidGet());
Guid logGuid = Guid.NewGuid();
errorService.InsertLiftError(logGuid.ToString(), errorMessage.ENAlarmMessage);
errorService.InsertLiftError(logGuid.ToString(), errorMessage.ENAlarmMessage, errorMessage.CNAlarmMessage, errorMessage.ErrorCode);
connect2.PublishEvent(new CFXEnvelope(faultOccurredEvent.Handle(errorMessage.ErrorCode, LevelTrans(errorMessage.AlarmDegarde), logGuid, errorMessage.ENAlarmMessage, transID)));
_log.Info($"报警发生 内容:{errorMessage.CNAlarmMessage}");
}
@ -220,7 +221,7 @@ namespace Sln.Iot.Business
{
Guid transID = Guid.Parse(trayBindingService.TidGet());
Guid logGuid = Guid.NewGuid();
errorService.InsertOvenError(logGuid.ToString(), errorMessage.ENAlarmMessage);
errorService.InsertOvenError(logGuid.ToString(), errorMessage.ENAlarmMessage, errorMessage.CNAlarmMessage, errorMessage.ErrorCode);
connect3.PublishEvent(new CFXEnvelope(faultOccurredEvent.Handle(errorMessage.ErrorCode, LevelTrans(errorMessage.AlarmDegarde), logGuid, errorMessage.ENAlarmMessage, transID)));
_log.Info($"报警发生 内容:{errorMessage.CNAlarmMessage}");
}

@ -0,0 +1,102 @@
using CFX;
using CFX.Structures.UVCuring;
using Sln.Iot.CFX.CFXConnect;
using Sln.Iot.CFX.Event;
using Sln.Iot.PLC;
using Sln.Iot.Serilog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sln.Iot.Business
{
/// <summary>
/// 配方支持类
/// </summary>
public class RecipeBusiness
{
private Timer _timer;
private readonly PLCConnect _plc = PLCConnect.Instance;
private readonly SerilogHelper _log = SerilogHelper.Instance;
private readonly RecipeActivatedEvent recipeActivatedEvent = new RecipeActivatedEvent();
private readonly RecipeModifiedEvent recipeModifiedEvent = new RecipeModifiedEvent();
private readonly CFXConnect1 connect1 = CFXConnect1.Instance;
public RecipeBusiness()
{
_timer = new Timer(TimerCallback, null, 0, 1500);
}
/// <summary>
/// 检测配方变化
/// </summary>
/// <param name="state"></param>
public void TimerCallback(object? state)
{
string recipeName = "recipeName";
var changeResult1 = _plc.ReadBool(_plc.DeltaInstance1, "M281");
var changeResult2 = _plc.ReadBool(_plc.DeltaInstance2, "M281");
var activeResult1 = _plc.ReadBool(_plc.DeltaInstance1, "M280");
var activeResult2 = _plc.ReadBool(_plc.DeltaInstance2, "M280");
if(changeResult1.Content || changeResult2.Content || activeResult1.Content || activeResult2.Content)
{
//获取现在激活的配方
var res = _plc.ReadBytes(_plc.DeltaInstance1, "D600", 10);
if (res.IsSuccess)
{
recipeName = Encoding.ASCII.GetString(res.Content);
}
}
if (changeResult1.IsSuccess)
{
if (changeResult1.Content)
{
//发布消息
connect1.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle(recipeName)));
_log.Info($"真空箱1配方修改{recipeName}");
}
}
if (changeResult2.IsSuccess)
{
if (changeResult2.Content)
{
//发布消息
connect1.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle(recipeName)));
_log.Info($"真空箱2配方修改{recipeName}");
}
}
if (activeResult1.IsSuccess)
{
if (activeResult1.Content)
{
//发布消息
connect1.PublishEvent(new CFXEnvelope(recipeActivatedEvent.Handle(recipeName, "VacuumInjection1", 1)));
_log.Info($"真空箱1配方激活{recipeName}");
}
}
if (activeResult2.IsSuccess)
{
if (activeResult2.Content)
{
//发布消息
connect1.PublishEvent(new CFXEnvelope(recipeActivatedEvent.Handle(recipeName, "VacuumInjection2", 2)));
_log.Info($"真空箱2配方激活{recipeName}");
}
}
}
}
}

@ -37,5 +37,10 @@ namespace Sln.Iot.CFX.CFXBusiness
}
return units;
}
public List<Fault> FaultsTrans()
{
}
}
}

@ -27,6 +27,7 @@ using CFX;
using CFX.ResourcePerformance;
using CFX.Structures;
using Sln.Iot.CFX.RequestReceived;
using Sln.Iot.Repository.service;
using Sln.Iot.Serilog;
namespace Sln.Iot.CFX.CFXRequestes;
@ -37,6 +38,7 @@ namespace Sln.Iot.CFX.CFXRequestes;
/// </summary>
public class GetActiveFaultsRequestReceived1 : BaseGetActiveFaultsRequestReceived
{
private readonly ErrorService errorService = ErrorService.Instance;
/// <summary>
/// 子类重写处理
@ -46,6 +48,27 @@ public class GetActiveFaultsRequestReceived1 : BaseGetActiveFaultsRequestReceive
public override CFXMessage SubHandle(GetActiveFaultsRequest request)
{
// 获取现在所有的错误
var errorList1 = errorService.GetV1List().ToList();
var errorList2 = errorService.GetV2List().ToList();
List<Fault> faults = new List<Fault>();
foreach (var fault in errorList1)
{
faults.Add(new Fault()
{
Description = fault.ErrorName,
FaultCode = fault.ErrorCode,
});
}
foreach (var fault in errorList2)
{
faults.Add(new Fault()
{
Description = fault.ErrorName,
FaultCode = fault.ErrorCode,
});
}
CFXMessage response = new GetActiveFaultsResponse()
{
@ -55,14 +78,15 @@ public class GetActiveFaultsRequestReceived1 : BaseGetActiveFaultsRequestReceive
ResultCode = 0,
Message = "",
},
//ActiveFaults = faults
ActiveFaults = new List<Fault>()
{
new Fault()
{
new Fault()
{
Description = "测试错误1",
FaultCode = "5003",
}
Description = "测试错误1",
FaultCode = "5003",
}
}
};
return response;

@ -27,6 +27,7 @@ using CFX;
using CFX.ResourcePerformance;
using CFX.Structures;
using Sln.Iot.CFX.RequestReceived;
using Sln.Iot.Repository.service;
using Sln.Iot.Serilog;
namespace Sln.Iot.CFX.CFXRequestes;
@ -37,6 +38,7 @@ namespace Sln.Iot.CFX.CFXRequestes;
/// </summary>
public class GetActiveFaultsRequestReceived2 : BaseGetActiveFaultsRequestReceived
{
private readonly ErrorService errorService = ErrorService.Instance;
/// <summary>
/// 子类重写处理
@ -46,6 +48,18 @@ public class GetActiveFaultsRequestReceived2 : BaseGetActiveFaultsRequestReceive
public override CFXMessage SubHandle(GetActiveFaultsRequest request)
{
// 获取现在所有的错误
var errorList = errorService.GetLiftList().ToList();
List<Fault> faults = new List<Fault>();
foreach (var fault in errorList)
{
faults.Add(new Fault()
{
Description = fault.ErrorName,
FaultCode = fault.ErrorCode,
});
}
CFXMessage response = new GetActiveFaultsResponse()
{

@ -27,6 +27,7 @@ using CFX;
using CFX.ResourcePerformance;
using CFX.Structures;
using Sln.Iot.CFX.RequestReceived;
using Sln.Iot.Repository.service;
using Sln.Iot.Serilog;
namespace Sln.Iot.CFX.CFXRequestes;
@ -37,7 +38,7 @@ namespace Sln.Iot.CFX.CFXRequestes;
/// </summary>
public class GetActiveFaultsRequestReceived3 : BaseGetActiveFaultsRequestReceived
{
private readonly ErrorService errorService = ErrorService.Instance;
/// <summary>
/// 子类重写处理
@ -47,6 +48,18 @@ public class GetActiveFaultsRequestReceived3 : BaseGetActiveFaultsRequestReceive
public override CFXMessage SubHandle(GetActiveFaultsRequest request)
{
// 获取现在所有的错误
var errorList = errorService.GetOvenList().ToList();
List<Fault> faults = new List<Fault>();
foreach (var fault in errorList)
{
faults.Add(new Fault()
{
Description = fault.ErrorName,
FaultCode = fault.ErrorCode,
});
}
CFXMessage response = new GetActiveFaultsResponse()
{

@ -29,6 +29,8 @@ using CFX.Structures;
using Sln.Iot.CFX.RequestReceived;
using Sln.Iot.PLC;
using Sln.Iot.Serilog;
using static System.Runtime.CompilerServices.RuntimeHelpers;
using System.Text;
namespace Sln.Iot.CFX.CFXRequestes;
@ -48,12 +50,26 @@ public class GetActiveRecipeRequestReceived1 : BaseGetActiveRecipeRequestReceive
/// <returns></returns>
public override CFXMessage SubHandle(GetActiveRecipeRequest request)
{
//获取现在激活的配方
//_plc.
string restr1 = string.Empty;
string restr2 = string.Empty;
////获取现在激活的配方
//var res1 = _plc.ReadBytes(_plc.DeltaInstance1, "D600", 10);
//var res2 = _plc.ReadBytes(_plc.DeltaInstance2, "D600", 10);
//if (res1.IsSuccess)
//{
// restr1 = Encoding.ASCII.GetString(res1.Content);
//}
//if (res2.IsSuccess)
//{
// restr2 = Encoding.ASCII.GetString(res2.Content);
//}
CFXMessage response = new GetActiveRecipeResponse()
{
ActiveRecipeName = "配方A",
ActiveRecipeName = $"Recipe1:[{restr1}];Recipe2:[{restr2}]",
ActiveRecipeRevision = "1.0",
Result = new RequestResult()
{

@ -46,7 +46,7 @@ public class GetActiveRecipeRequestReceived2 : BaseGetActiveRecipeRequestReceive
{
CFXMessage response = new GetActiveRecipeResponse()
{
ActiveRecipeName = "配方A",
ActiveRecipeName = "No Recipe Device",
ActiveRecipeRevision = "1.0",
Result = new RequestResult()
{

@ -46,7 +46,7 @@ public class GetActiveRecipeRequestReceived3 : BaseGetActiveRecipeRequestReceive
{
CFXMessage response = new GetActiveRecipeResponse()
{
ActiveRecipeName = "配方A",
ActiveRecipeName = "No Recipe Device",
ActiveRecipeRevision = "1.0",
Result = new RequestResult()
{

@ -44,7 +44,7 @@ public class ModifyStationParametersRequestReceived2 : BaseModifyStationParamete
/// <returns></returns>
public override CFXMessage SubHandle(ModifyStationParametersRequest request)
{
//配方修改
//参数修改
//同时主动上报StationParameterModified

@ -59,8 +59,8 @@ namespace Sln.Iot.CFX
_cfxHelper.PublishEvent(new CFXEnvelope(faultClearedEvent.Handle(testGuid)));
_cfxHelper.PublishEvent(new CFXEnvelope(stationStateChangedEvent.Handle(ResourceState.PRD)));
_cfxHelper.PublishEvent(new CFXEnvelope(logEntryRecordedEvent.Handle()));
_cfxHelper.PublishEvent(new CFXEnvelope(recipeActivatedEvent.Handle()));
_cfxHelper.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle()));
_cfxHelper.PublishEvent(new CFXEnvelope(recipeActivatedEvent.Handle("RecipeA", "VacuumInjection1", 1)));
_cfxHelper.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle("RecipeA")));
_cfxHelper.PublishEvent(new CFXEnvelope(stationOfflineEvent.Handle()));
_cfxHelper.PublishEvent(new CFXEnvelope(stationOnlineEvent.Handle()));
@ -114,8 +114,8 @@ namespace Sln.Iot.CFX
_cfxHelper2.PublishEvent(new CFXEnvelope(faultClearedEvent.Handle(testGuid)));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationStateChangedEvent.Handle(ResourceState.PRD)));
_cfxHelper2.PublishEvent(new CFXEnvelope(logEntryRecordedEvent.Handle()));
_cfxHelper2.PublishEvent(new CFXEnvelope(recipeActivatedEvent.Handle()));
_cfxHelper2.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle()));
_cfxHelper2.PublishEvent(new CFXEnvelope(recipeActivatedEvent.Handle("RecipeA", "ConveyorIn", 1)));
_cfxHelper2.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle("RecipeA")));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationOfflineEvent.Handle()));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationOnlineEvent.Handle()));
@ -169,8 +169,8 @@ namespace Sln.Iot.CFX
_cfxHelper3.PublishEvent(new CFXEnvelope(faultClearedEvent.Handle(testGuid)));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationStateChangedEvent.Handle(ResourceState.PRD)));
_cfxHelper3.PublishEvent(new CFXEnvelope(logEntryRecordedEvent.Handle()));
_cfxHelper3.PublishEvent(new CFXEnvelope(recipeActivatedEvent.Handle()));
_cfxHelper3.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle()));
_cfxHelper3.PublishEvent(new CFXEnvelope(recipeActivatedEvent.Handle("RecipeA", "Oven", 1)));
_cfxHelper3.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle("RecipeA")));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationOfflineEvent.Handle()));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationOnlineEvent.Handle()));

@ -14,39 +14,25 @@ namespace Sln.Iot.CFX.Event
/// 数据封装处理
/// </summary>
/// <returns></returns>
public CFXMessage Handle()
public CFXMessage Handle(string recipeName, string stageName, int stageSequence)
{
CFXMessage eve = null;
try
{
eve = new RecipeActivated()
{
RecipeName = "配方A",
Revision = "1.0",
RecipeName = recipeName,
Lane = 1,
ExpectedCycleTime = 1200000,
ExpectedUnitsPerWorkTransaction = 6,
ExpectedWorkTime = 1200000,
NumberOfComponentsPerUnit = 6,
WorkOrderIdentifier = new WorkOrderIdentifier()
{
WorkOrderId = "WO-1000-1000",
Batch = "WO-1000-1000-B1",
},
TargetQuantity = 500,
RelevantSurface = Surface.Unspecified,
RecipeStagesInformation = new List<RecipeStageInformation>()
{
new RecipeStageInformation()
{
Stage = new Stage()
{
StageSequence = 1,
StageName = "工段1",
StageSequence = stageSequence,
StageName = stageName,
StageType = StageType.Work
},
ExpectedCycleTime = 5000,
NumberOfComponentsPerUnit = 6,
},
}
};

@ -14,25 +14,20 @@ namespace Sln.Iot.CFX.Event
/// 数据封装处理
/// </summary>
/// <returns></returns>
public CFXMessage Handle()
public CFXMessage Handle(string recipeName)
{
CFXMessage eve = null;
try
{
eve = new RecipeModified()
{
RecipeName = "配方A",
Revision = "1.0",
RecipeName = recipeName,
ModifiedBy = new Operator()
{
ActorType = ActorType.Human,
FirstName = "王",
LastName = "晟睿",
LoginName = "admin",
OperatorIdentifier = "OP-1000"
},
Reason = RecipeModificationReason.UpdatedGeometry,
Notes = "修改了配方的几何信息",
};
}
catch (Exception e)

@ -12,6 +12,7 @@
<ItemGroup>
<ProjectReference Include="..\Sln.Iot.PLC\Sln.Iot.PLC.csproj" />
<ProjectReference Include="..\Sln.Iot.Repository\Sln.Iot.Repository.csproj" />
<ProjectReference Include="..\Sln.Iot.Serilog\Sln.Iot.Serilog.csproj" />
</ItemGroup>
@ -19,6 +20,9 @@
<Reference Include="CFX.Structures.GenericEquipment">
<HintPath>..\DLL\CFX.Structures.GenericEquipment.dll</HintPath>
</Reference>
<Reference Include="HslCommunication">
<HintPath>..\DLL\HslCommunication.dll</HintPath>
</Reference>
</ItemGroup>
</Project>

@ -22,5 +22,15 @@ namespace Sln.Iot.Repository.dao
/// 错误名称
/// </summary>
public string ErrorName { get; set; }
/// <summary>
/// 错误名称(中文)
/// </summary>
public string CNErrorName { get; set; }
/// <summary>
/// 错误代码
/// </summary>
public string ErrorCode { get; set; }
}
}

@ -22,5 +22,15 @@ namespace Sln.Iot.Repository.dao
/// 错误名称
/// </summary>
public string ErrorName { get; set; }
/// <summary>
/// 错误名称(中文)
/// </summary>
public string CNErrorName { get; set; }
/// <summary>
/// 错误代码
/// </summary>
public string ErrorCode { get; set; }
}
}

@ -22,5 +22,15 @@ namespace Sln.Iot.Repository.dao
/// 错误名称
/// </summary>
public string ErrorName { get; set; }
/// <summary>
/// 错误名称(中文)
/// </summary>
public string CNErrorName { get; set; }
/// <summary>
/// 错误代码
/// </summary>
public string ErrorCode { get; set; }
}
}

@ -22,5 +22,15 @@ namespace Sln.Iot.Repository.dao
/// 错误名称
/// </summary>
public string ErrorName { get; set; }
/// <summary>
/// 错误名称(中文)
/// </summary>
public string CNErrorName { get; set; }
/// <summary>
/// 错误代码
/// </summary>
public string ErrorCode { get; set; }
}
}

@ -34,7 +34,7 @@ namespace Sln.Iot.Repository.service
/// 插入报错真空1
/// </summary>
/// <returns></returns>
public bool InsertVacuum1Error(string Guid, string Message)
public bool InsertVacuum1Error(string Guid, string Message, string CNMessage, string code)
{
try
{
@ -42,6 +42,8 @@ namespace Sln.Iot.Repository.service
{
ErrorGuid = Guid,
ErrorName = Message,
CNErrorName = CNMessage,
ErrorCode = code
});
return res == 0 ? false : true;
}
@ -101,7 +103,7 @@ namespace Sln.Iot.Repository.service
/// 插入报错真空2
/// </summary>
/// <returns></returns>
public bool InsertVacuum2Error(string Guid, string Message)
public bool InsertVacuum2Error(string Guid, string Message, string CNMessage, string code)
{
try
{
@ -109,6 +111,8 @@ namespace Sln.Iot.Repository.service
{
ErrorGuid = Guid,
ErrorName = Message,
CNErrorName = CNMessage,
ErrorCode = code
});
return res == 0 ? false : true;
}
@ -168,7 +172,7 @@ namespace Sln.Iot.Repository.service
/// 插入报错提升机
/// </summary>
/// <returns></returns>
public bool InsertLiftError(string Guid, string Message)
public bool InsertLiftError(string Guid, string Message, string CNMessage, string code)
{
try
{
@ -176,6 +180,8 @@ namespace Sln.Iot.Repository.service
{
ErrorGuid = Guid,
ErrorName = Message,
CNErrorName = CNMessage,
ErrorCode = code
});
return res == 0 ? false : true;
}
@ -235,7 +241,7 @@ namespace Sln.Iot.Repository.service
/// 插入报错烤箱
/// </summary>
/// <returns></returns>
public bool InsertOvenError(string Guid, string Message)
public bool InsertOvenError(string Guid, string Message, string CNMessage, string code)
{
try
{
@ -243,6 +249,8 @@ namespace Sln.Iot.Repository.service
{
ErrorGuid = Guid,
ErrorName = Message,
CNErrorName = CNMessage,
ErrorCode = code
});
return res == 0 ? false : true;
}

Loading…
Cancel
Save