Compare commits

...

4 Commits

Author SHA1 Message Date
SoulStar fd4096985c feat - 现场联调 1 month ago
SoulStar bea11740f2 refactor - 调试前设置 1 month ago
SoulStar 00c14d0353 feat - 软件更改完成 1 month ago
SoulStar 42718c29f1 feat - 基本框架删减重构 1 month ago

@ -15,22 +15,18 @@ namespace Sln.Iot.Business
private RFID01Business _rfid01;
private RFID02Business _rfid02;
private RFID03Business _rfid03;
private RFID04Business _rfid04;
private RFID05Business _rfid05;
private RFID06Business _rfid06;
private ErrorAnalyseBusiness _errorAnalyse;
private RecipeBusiness _recipeBusiness;
private TCPRFIDBinding _tcpRfidBinding;
private MesReportBusiness _mesReportBusiness;
public BusinessStart()
{
_rfid01 = new RFID01Business();
_rfid02 = new RFID02Business();
_rfid03 = new RFID03Business();
_rfid04 = new RFID04Business();
_rfid05 = new RFID05Business();
_rfid06 = new RFID06Business();
_errorAnalyse = new ErrorAnalyseBusiness();
_recipeBusiness = new RecipeBusiness();
_tcpRfidBinding = TCPRFIDBinding.Instance;
_mesReportBusiness = new MesReportBusiness();
}
}

@ -0,0 +1,28 @@
using System.Text.Json.Serialization;
namespace Sln.Iot.Business.Entity
{
public class TCPRFIDBindingEntity
{
[JsonPropertyName("rfid")]
public string? Rfid { get; set; }
[JsonPropertyName("sn1")]
public string? Sn1 { get; set; }
[JsonPropertyName("sn2")]
public string? Sn2 { get; set; }
[JsonPropertyName("sn3")]
public string? Sn3 { get; set; }
[JsonPropertyName("sn4")]
public string? Sn4 { get; set; }
[JsonPropertyName("sn5")]
public string? Sn5 { get; set; }
[JsonPropertyName("sn6")]
public string? Sn6 { get; set; }
}
}

@ -35,9 +35,8 @@ namespace Sln.Iot.Business
private FaultOccurredEvent faultOccurredEvent = new FaultOccurredEvent();
private FaultClearedEvent faultClearedEvent = new FaultClearedEvent();
private CFXConnect1 connect1 = CFXConnect1.Instance;
private CFXConnect2 connect2 = CFXConnect2.Instance;
private CFXConnect3 connect3 = CFXConnect3.Instance;
private CFXConnectOven CFXOven = CFXConnectOven.Instance;
private CFXConnectVacuum CFXVacuum = CFXConnectVacuum.Instance;
public ErrorAnalyseBusiness()
{
@ -52,16 +51,10 @@ namespace Sln.Iot.Business
{
try
{
byte[] errorBytes1 = new byte[1];
//隧道烤箱报警
var result20 = _plc.ReadBytes(_plc.DeltaInstance0, "D100", 1);
//真空箱1报警
var result21 = _plc.ReadBytes(_plc.DeltaInstance1, "D80", 11);
//真空箱2报警
var result22 = _plc.ReadBytes(_plc.DeltaInstance2, "D80", 11);
//提升机报警
var result23 = _plc.ReadBytes(_plc.DeltaInstance3, "D100", 1);
// 烤箱报警 D1001个字— PLC20192.168.1.20
var result20 = _plc.ReadBytes(_plc.PLC20, "D100", 1);
// 真空灌胶机报警 D100-D1056个字— PLC21192.168.1.21
var result21 = _plc.ReadBytes(_plc.PLC21, "D100", 6);
if (result20.IsSuccess && result20.Content != null)
{
@ -76,23 +69,7 @@ namespace Sln.Iot.Business
BitArray bits21 = new BitArray(ToolBusiness.SwapAdjacentBytes(result21.Content));
bool[] bools21 = new bool[bits21.Count];
bits21.CopyTo(bools21, 0);
VacuumAlarm1Analyse(bools21);
}
if (result22.IsSuccess && result22.Content != null)
{
BitArray bits22 = new BitArray(ToolBusiness.SwapAdjacentBytes(result22.Content));
bool[] bools22 = new bool[bits22.Count];
bits22.CopyTo(bools22, 0);
VacuumAlarm2Analyse(bools22);
}
if (result23.IsSuccess && result23.Content != null)
{
BitArray bits23 = new BitArray(ToolBusiness.SwapAdjacentBytes(result23.Content));
bool[] bools23 = new bool[bits23.Count];
bits23.CopyTo(bools23, 0);
LiftAlarmAnalyse(bools23);
VacuumAlarmAnalyse(bools21);
}
}
catch (Exception ex)
@ -101,126 +78,47 @@ namespace Sln.Iot.Business
}
}
/// <summary>
/// 真空箱1报警分析
/// 真空灌胶机报警分析
/// </summary>
/// <param name="bools"></param>
public void VacuumAlarm1Analyse(bool[] bools)
public void VacuumAlarmAnalyse(bool[] bools)
{
//现存的错误数据
List<Vacuum1Error>? errorList = errorService.GetV1List();
foreach (var errorMessage in VacuumAlarms)
{
if (bools[errorMessage.ErrorIndex])
if (errorMessage.ErrorIndex < bools.Length && bools[errorMessage.ErrorIndex])
{
//如果原来没有 现在有 添加错误
if (errorList.Where(x => x.ErrorName == errorMessage.ENAlarmMessage).Count() == 0)
if (errorList.Count(x => x.ErrorName == errorMessage.ENAlarmMessage) == 0)
{
Guid.TryParse(trayBindingService.TidGet(), out Guid transID);
Guid logGuid = Guid.NewGuid();
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)));
CFXVacuum.PublishEvent(new CFXEnvelope(faultOccurredEvent.Handle(errorMessage.ErrorCode, LevelTrans(errorMessage.AlarmDegarde), logGuid, errorMessage.ENAlarmMessage, transID)));
if (_appConfig.IsAlarmLog)
_log.Info($"真空箱1报警发生 内容:{errorMessage.CNAlarmMessage} 级别:{errorMessage.AlarmDegarde.GetDescription()}");
_log.Info($"真空灌胶机报警发生 内容:{errorMessage.CNAlarmMessage} 级别:{errorMessage.AlarmDegarde.GetDescription()}");
}
}
else
{
//如果原来有 现在没有 则删除
if (errorList.Where(x => x.ErrorName == errorMessage.ENAlarmMessage).Count() != 0)
if (errorList.Count(x => x.ErrorName == errorMessage.ENAlarmMessage) != 0)
{
//删除错误
string delGuid = errorService.DeleteVacuum1Error(errorMessage.ENAlarmMessage);
Guid.TryParse(delGuid, out Guid guidRes);
connect1.PublishEvent(new CFXEnvelope(faultClearedEvent.Handle(guidRes)));
CFXVacuum.PublishEvent(new CFXEnvelope(faultClearedEvent.Handle(guidRes)));
if (_appConfig.IsAlarmLog)
_log.Info($"真空箱1报警消除 内容:{errorMessage.CNAlarmMessage} 级别:{errorMessage.AlarmDegarde.GetDescription()}");
_log.Info($"真空灌胶机报警消除 内容:{errorMessage.CNAlarmMessage} 级别:{errorMessage.AlarmDegarde.GetDescription()}");
}
}
}
}
/// <summary>
/// 真空箱2报警分析
/// </summary>
/// <param name="bools"></param>
public void VacuumAlarm2Analyse(bool[] bools)
{
//现存的错误数据
List<Vacuum2Error>? errorList = errorService.GetV2List();
foreach (var errorMessage in VacuumAlarms)
{
if (bools[errorMessage.ErrorIndex])
{
//如果原来没有 现在有 添加错误
if (errorList.Where(x => x.ErrorName == errorMessage.ENAlarmMessage).Count() == 0)
{
Guid.TryParse(trayBindingService.TidGet(), out Guid transID);
Guid logGuid = Guid.NewGuid();
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)));
if (_appConfig.IsAlarmLog)
_log.Info($"真空箱2报警发生 内容:{errorMessage.CNAlarmMessage} 级别:{errorMessage.AlarmDegarde.GetDescription()}");
}
}
else
{
//如果原来有 现在没有 则删除
if (errorList.Where(x => x.ErrorName == errorMessage.ENAlarmMessage).Count() != 0)
{
//删除错误
string delGuid = errorService.DeleteVacuum2Error(errorMessage.ENAlarmMessage);
Guid.TryParse(delGuid, out Guid guidRes);
connect1.PublishEvent(new CFXEnvelope(faultClearedEvent.Handle(guidRes)));
if (_appConfig.IsAlarmLog)
_log.Info($"真空箱2报警消除 内容:{errorMessage.CNAlarmMessage} 级别:{errorMessage.AlarmDegarde.GetDescription()}");
}
}
}
}
/// <summary>
/// 提升机报警分析
/// </summary>
/// <param name="bools"></param>
public void LiftAlarmAnalyse(bool[] bools)
{
//现存的错误数据
List<LiftError>? errorList = errorService.GetLiftList();
foreach (var errorMessage in LiftAlarms)
{
if (bools[errorMessage.ErrorIndex])
{
//如果原来没有 现在有 添加错误
if (errorList.Where(x => x.ErrorName == errorMessage.ENAlarmMessage).Count() == 0)
{
Guid.TryParse(trayBindingService.TidGet(), out Guid transID);
Guid logGuid = Guid.NewGuid();
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)));
if (_appConfig.IsAlarmLog)
_log.Info($"提升机报警发生 内容:{errorMessage.CNAlarmMessage} 级别:{errorMessage.AlarmDegarde.GetDescription()}");
}
}
else
{
//如果原来有 现在没有 则删除
if (errorList.Where(x => x.ErrorName == errorMessage.ENAlarmMessage).Count() != 0)
{
//删除错误
string delGuid = errorService.DeleteliftError(errorMessage.ENAlarmMessage);
Guid.TryParse(delGuid, out Guid guidRes);
connect2.PublishEvent(new CFXEnvelope(faultClearedEvent.Handle(guidRes)));
if (_appConfig.IsAlarmLog)
_log.Info($"提升机报警消除 内容:{errorMessage.CNAlarmMessage} 级别:{errorMessage.AlarmDegarde.GetDescription()}");
}
}
}
}
/// <summary>
/// 烤箱报警分析
@ -236,12 +134,12 @@ namespace Sln.Iot.Business
if (bools[errorMessage.ErrorIndex])
{
//如果原来没有 现在有 添加错误
if (errorList.Where(x => x.ErrorName == errorMessage.ENAlarmMessage).Count() == 0)
if (errorList.Count(x => x.ErrorName == errorMessage.ENAlarmMessage) == 0)
{
Guid.TryParse(trayBindingService.TidGet(), out Guid transID);
Guid logGuid = Guid.NewGuid();
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)));
CFXOven.PublishEvent(new CFXEnvelope(faultOccurredEvent.Handle(errorMessage.ErrorCode, LevelTrans(errorMessage.AlarmDegarde), logGuid, errorMessage.ENAlarmMessage, transID)));
if (_appConfig.IsAlarmLog)
_log.Info($"烤箱报警发生 内容:{errorMessage.CNAlarmMessage} 级别:{errorMessage.AlarmDegarde.GetDescription()}");
}
@ -249,12 +147,12 @@ namespace Sln.Iot.Business
else
{
//如果原来有 现在没有 则删除
if (errorList.Where(x => x.ErrorName == errorMessage.ENAlarmMessage).Count() != 0)
if (errorList.Count(x => x.ErrorName == errorMessage.ENAlarmMessage) != 0)
{
//删除错误
string delGuid = errorService.DeleteOvenError(errorMessage.ENAlarmMessage);
Guid.TryParse(delGuid, out Guid guidRes);
connect3.PublishEvent(new CFXEnvelope(faultClearedEvent.Handle(guidRes)));
CFXOven.PublishEvent(new CFXEnvelope(faultClearedEvent.Handle(guidRes)));
if (_appConfig.IsAlarmLog)
_log.Info($"烤箱报警消除 内容:{errorMessage.CNAlarmMessage} 级别:{errorMessage.AlarmDegarde.GetDescription()}");
}
@ -285,98 +183,154 @@ namespace Sln.Iot.Business
/// <summary>
/// 真空箱报警定义
/// 真空灌胶机报警定义PLC21 D100-D1056字=96位
/// </summary>
public static readonly List<AlarmMessageEntity> VacuumAlarms = new()
{
// ===== D80 =====
new() { ErrorIndex = 16 * 0 + 0, ENAlarmMessage = "1# Pump A Backward Limit Reached!", CNAlarmMessage = "泵A负限超程", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 0 + 1, ENAlarmMessage = "1# Pump A Forward Limit Reached!", CNAlarmMessage = "泵A正限超程", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 0 + 2, ENAlarmMessage = "1# Pump B Backward Limit Reached!", CNAlarmMessage = "泵B负限超程", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 0 + 3, ENAlarmMessage = "1# Pump B Forward Limit Reached!", CNAlarmMessage = "泵B正限超程", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 0 + 4, ENAlarmMessage = "1# Servo A Error!", CNAlarmMessage = "泵A伺服报警", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 0 + 5, ENAlarmMessage = "1# Servo B Error!", CNAlarmMessage = "泵B伺服报警", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 0 + 6, ENAlarmMessage = "Mixed Servo Error!", CNAlarmMessage = "混合伺服报警!", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 0 + 7, ENAlarmMessage = "Mixed Motor Rotating Error!", CNAlarmMessage = "混合电机旋转异常!", AlarmDegarde = AlarmDegardeEnum.Fault },
// ===== D100位偏移 0-15=====
new() { ErrorIndex = 0, ENAlarmMessage = "AntiCuring time up!", CNAlarmMessage = "防固时间到!", AlarmDegarde = AlarmDegardeEnum.Warning, ErrorCode = "100" },
new() { ErrorIndex = 1, ENAlarmMessage = "Tank A Upper limit!", CNAlarmMessage = "A桶上限报警", AlarmDegarde = AlarmDegardeEnum.Warning, ErrorCode = "101" },
new() { ErrorIndex = 2, ENAlarmMessage = "Tank A Lower limit!", CNAlarmMessage = "A桶下限报警", AlarmDegarde = AlarmDegardeEnum.Warning, ErrorCode = "102" },
new() { ErrorIndex = 3, ENAlarmMessage = "Tank B Upper limit!", CNAlarmMessage = "B桶上限报警", AlarmDegarde = AlarmDegardeEnum.Warning, ErrorCode = "103" },
new() { ErrorIndex = 4, ENAlarmMessage = "Tank B Lower limit!", CNAlarmMessage = "B桶下限报警", AlarmDegarde = AlarmDegardeEnum.Warning, ErrorCode = "104" },
new() { ErrorIndex = 16 * 0 + 12, ENAlarmMessage = "A1 Heating Error", CNAlarmMessage = "A1加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 0 + 13, ENAlarmMessage = "B1 Heating Error", CNAlarmMessage = "B1加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 0 + 14, ENAlarmMessage = "A2 Heating Error", CNAlarmMessage = "A2加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 0 + 15, ENAlarmMessage = "B2 Heating Error", CNAlarmMessage = "B2加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
// ===== D102位偏移 32-47=====
new() { ErrorIndex = 32 + 0, ENAlarmMessage = "Glue tank Vacuum Motor Error!", CNAlarmMessage = "料桶真空泵报警!", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "105" },
new() { ErrorIndex = 32 + 1, ENAlarmMessage = "Pump A Backward Limit Reached!", CNAlarmMessage = "泵A负限位报警", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "106" },
new() { ErrorIndex = 32 + 2, ENAlarmMessage = "Pump A Forward Limit Reached!", CNAlarmMessage = "泵A正限位报警", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "107" },
new() { ErrorIndex = 32 + 3, ENAlarmMessage = "Pump B Backward Limit Reached!", CNAlarmMessage = "泵B负限报警", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "108" },
new() { ErrorIndex = 32 + 4, ENAlarmMessage = "Pump B Forward Limit Reached!", CNAlarmMessage = "泵B正限禁止", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "109" },
new() { ErrorIndex = 32 + 5, ENAlarmMessage = "Servo A Error!", CNAlarmMessage = "泵A伺服报警", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "110" },
new() { ErrorIndex = 32 + 6, ENAlarmMessage = "Servo B Error!", CNAlarmMessage = "泵B伺服报警", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "111" },
// ===== D81 =====
new() { ErrorIndex = 16 * 1 + 0, ENAlarmMessage = "A Potting Valve Open Error", CNAlarmMessage = "A吐出阀打开异常", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 1 + 1, ENAlarmMessage = "B Potting Valve Open Error", CNAlarmMessage = "B吐出阀打开异常", AlarmDegarde = AlarmDegardeEnum.Fault },
// ===== D104位偏移 64-79=====
new() { ErrorIndex = 64 + 0, ENAlarmMessage = "Mixing Valve Open Error!", CNAlarmMessage = "混合阀打开异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "200" },
new() { ErrorIndex = 64 + 1, ENAlarmMessage = "Inlet Valve of Pump A Close Error!", CNAlarmMessage = "A泵进胶阀关异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "201" },
new() { ErrorIndex = 64 + 2, ENAlarmMessage = "Outlet Valve of Pump A Close Error!", CNAlarmMessage = "A泵出胶阀关异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "202" },
new() { ErrorIndex = 64 + 3, ENAlarmMessage = "Inlet Valve of Pump A Open Error!", CNAlarmMessage = "A泵进胶阀打开异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "203" },
new() { ErrorIndex = 64 + 4, ENAlarmMessage = "Outlet Valve of Pump A Open Error!", CNAlarmMessage = "A泵出胶阀打开异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "204" },
new() { ErrorIndex = 64 + 5, ENAlarmMessage = "Inlet Valve of Pump B Close Error!", CNAlarmMessage = "B泵进胶阀关异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "205" },
new() { ErrorIndex = 64 + 6, ENAlarmMessage = "Outlet Valve of Pump B Close Error!", CNAlarmMessage = "B泵出胶阀关异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "206" },
new() { ErrorIndex = 64 + 7, ENAlarmMessage = "Inlet Valve of Pump B Open Error!", CNAlarmMessage = "B进胶阀打开异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "207" },
new() { ErrorIndex = 64 + 8, ENAlarmMessage = "Outlet Valve of Pump B Open Error!", CNAlarmMessage = "B出胶阀打开异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "208" },
new() { ErrorIndex = 64 + 9, ENAlarmMessage = "Globe Valve of Tank A Open Error!", CNAlarmMessage = "A桶球阀打开异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "209" },
new() { ErrorIndex = 64 + 10, ENAlarmMessage = "Globe Valve of Tank B Open Error!", CNAlarmMessage = "B桶球阀打开异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "210" },
new() { ErrorIndex = 64 + 11, ENAlarmMessage = "Pump A Pressure Over UpperLimit", CNAlarmMessage = "A泵压力上限报警", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "211" },
new() { ErrorIndex = 64 + 12, ENAlarmMessage = "Pump B Pressure Over UpperLimit", CNAlarmMessage = "B泵压力上限报警", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "212" },
new() { ErrorIndex = 64 + 13, ENAlarmMessage = "Air Pressure Alarm", CNAlarmMessage = "系统气压报警", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "213" },
// ===== D82 =====
new() { ErrorIndex = 16 * 2 + 0, ENAlarmMessage = "1# Tank A Globe Valve Error!", CNAlarmMessage = "A1桶球阀打开异常", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 2 + 1, ENAlarmMessage = "1# Tank B Globe Valve Error!", CNAlarmMessage = "B1桶球阀打开异常", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 2 + 2, ENAlarmMessage = "Vacuum Chamber Inlet Door Open Error", CNAlarmMessage = "真空箱入口门打开异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 2 + 3, ENAlarmMessage = "Vacuum Chamber Inlet Door Close Error", CNAlarmMessage = "真空箱入口门关闭异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 2 + 4, ENAlarmMessage = "Vacuum Chamber Outlet Door Open Error", CNAlarmMessage = "真空箱出口门打开异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 2 + 5, ENAlarmMessage = "Vacuum Chamber Outlet Door Close Error", CNAlarmMessage = "真空箱出口门关闭异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 2 + 8, ENAlarmMessage = "Axis X Servo Error", CNAlarmMessage = "X轴伺服报警", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 2 + 9, ENAlarmMessage = "Axis Y Servo Error", CNAlarmMessage = "Y轴伺服报警", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 2 + 10, ENAlarmMessage = "Axis Z Servo Error", CNAlarmMessage = "Z轴伺服报警", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 2 + 11, ENAlarmMessage = "Vacuum Tank Vacuum Pump Error", CNAlarmMessage = "真空箱真空泵异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 2 + 12, ENAlarmMessage = "Vacuum Chamber Lifter Error", CNAlarmMessage = "灌胶定位缸异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 2 + 13, ENAlarmMessage = "Vacuum Chamber Vacuum Valve Error", CNAlarmMessage = "真空阀打开异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 2 + 14, ENAlarmMessage = "Vacuum Vent Valve Close Error", CNAlarmMessage = "放气阀关闭异常", AlarmDegarde = AlarmDegardeEnum.Error },
// ===== D83 =====
new() { ErrorIndex = 16 * 3 + 0, ENAlarmMessage = "Air Pressure Alarm", CNAlarmMessage = "系统气压报警", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 3 + 2, ENAlarmMessage = "Glue Tank Vacuum Pump Error!", CNAlarmMessage = "料桶真空泵报警!", AlarmDegarde = AlarmDegardeEnum.Error },
// ===== D84 =====
new() { ErrorIndex = 16 * 4 + 0, ENAlarmMessage = "Pump A Pressure Over Upper Limit", CNAlarmMessage = "A泵压力上限报警", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 4 + 1, ENAlarmMessage = "Pump A Pressure Below Lower Limit", CNAlarmMessage = "A泵压力下限报警", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 4 + 2, ENAlarmMessage = "Pump B Pressure Over Upper Limit", CNAlarmMessage = "B泵压力上限报警", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 4 + 3, ENAlarmMessage = "Pump B Pressure Below Lower Limit", CNAlarmMessage = "B泵压力下限报警", AlarmDegarde = AlarmDegardeEnum.Fault },
// ===== D90 =====
new() { ErrorIndex = 16 * 10 + 0, ENAlarmMessage = "1# Tank A Upper Limit!", CNAlarmMessage = "A1桶上限报警", AlarmDegarde = AlarmDegardeEnum.Warning },
new() { ErrorIndex = 16 * 10 + 1, ENAlarmMessage = "1# Tank A Lower Limit!", CNAlarmMessage = "A1桶下限报警", AlarmDegarde = AlarmDegardeEnum.Warning },
new() { ErrorIndex = 16 * 10 + 2, ENAlarmMessage = "1# Tank B Upper Limit!", CNAlarmMessage = "B1桶上限报警", AlarmDegarde = AlarmDegardeEnum.Warning },
new() { ErrorIndex = 16 * 10 + 3, ENAlarmMessage = "1# Tank B Lower Limit!", CNAlarmMessage = "B1桶下限报警", AlarmDegarde = AlarmDegardeEnum.Warning },
new() { ErrorIndex = 16 * 10 + 4, ENAlarmMessage = "2# Tank A Upper Limit!", CNAlarmMessage = "A2桶上限报警", AlarmDegarde = AlarmDegardeEnum.Warning },
new() { ErrorIndex = 16 * 10 + 5, ENAlarmMessage = "2# Tank A Lower Limit!", CNAlarmMessage = "A2桶下限报警", AlarmDegarde = AlarmDegardeEnum.Warning },
new() { ErrorIndex = 16 * 10 + 6, ENAlarmMessage = "2# Tank B Upper Limit!", CNAlarmMessage = "B2桶上限报警", AlarmDegarde = AlarmDegardeEnum.Warning },
new() { ErrorIndex = 16 * 10 + 7, ENAlarmMessage = "2# Tank B Lower Limit!", CNAlarmMessage = "B2桶下限报警", AlarmDegarde = AlarmDegardeEnum.Warning },
new() { ErrorIndex = 16 * 10 + 8, ENAlarmMessage = "1# Antisolid Time Up!", CNAlarmMessage = "防固时间到!", AlarmDegarde = AlarmDegardeEnum.Warning },
new() { ErrorIndex = 16 * 10 + 9, ENAlarmMessage = "Globe Valve Not Opened!", CNAlarmMessage = "球阀未打开!", AlarmDegarde = AlarmDegardeEnum.Error },
// ===== D105位偏移 80-95=====
new() { ErrorIndex = 80 + 0, ENAlarmMessage = "Axis X Servo error", CNAlarmMessage = "X轴伺服报警", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "112" },
new() { ErrorIndex = 80 + 1, ENAlarmMessage = "Axis Y Servo error", CNAlarmMessage = "Y轴伺服报警", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "113" },
new() { ErrorIndex = 80 + 2, ENAlarmMessage = "Axis Z Servo error", CNAlarmMessage = "Z轴伺服报警", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "114" },
new() { ErrorIndex = 80 + 3, ENAlarmMessage = "Vacuum Tank Vacuum Pump Error", CNAlarmMessage = "真空箱真空泵异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "115" },
new() { ErrorIndex = 80 + 4, ENAlarmMessage = "VacuumChamber Vacuum Valve Error", CNAlarmMessage = "真空箱真空阀打开异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "214" },
new() { ErrorIndex = 80 + 5, ENAlarmMessage = "Vacuum Vent Valve Close Error", CNAlarmMessage = "真空箱放气阀关闭异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "215" },
new() { ErrorIndex = 80 + 6, ENAlarmMessage = "Vacuum Chamber Lifter error", CNAlarmMessage = "灌胶定位缸异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "216" },
new() { ErrorIndex = 80 + 7, ENAlarmMessage = "Vacuum Chamber Inlet Door Open error", CNAlarmMessage = "1号真空箱入口门打开异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "216" },
new() { ErrorIndex = 80 + 8, ENAlarmMessage = "Vacuum Chamber Inlet Door Close error", CNAlarmMessage = "1号真空箱入口门关闭异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "216" },
new() { ErrorIndex = 80 + 9, ENAlarmMessage = "Vacuum Chamber Outlet Door Open error", CNAlarmMessage = "1号真空箱出口门打开异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "216" },
new() { ErrorIndex = 80 + 10, ENAlarmMessage = "Vacuum Chamber Outlet Door Close error", CNAlarmMessage = "1号真空箱出口门关闭异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "216" },
new() { ErrorIndex = 80 + 11, ENAlarmMessage = "RFID1 Read Error", CNAlarmMessage = "RFID1读失败", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "116" },
new() { ErrorIndex = 80 + 13, ENAlarmMessage = "Front Door Not closed.", CNAlarmMessage = "箱前门没有关闭。", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "117" },
new() { ErrorIndex = 80 + 14, ENAlarmMessage = "Inlet Door LightCurtain Warning", CNAlarmMessage = "入口光栅触发", AlarmDegarde = AlarmDegardeEnum.Warning, ErrorCode = "118" },
new() { ErrorIndex = 80 + 15, ENAlarmMessage = "Outlet Door LightCurtain Warning", CNAlarmMessage = "出口光栅触发", AlarmDegarde = AlarmDegardeEnum.Warning, ErrorCode = "119" },
};
/// <summary>
/// 加热线报警定义
/// 烤箱报警定义PLC20 D1001字=16位
/// </summary>
public static readonly List<AlarmMessageEntity> OvenAlarms = new()
{
new() { ErrorIndex = 16 * 0 + 0, ENAlarmMessage = "Line E.Stop ON!", CNAlarmMessage = "线急停按下", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 0 + 1, ENAlarmMessage = "Preheating Zone Heating Error!", CNAlarmMessage = "预热区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 0 + 2, ENAlarmMessage = "Precuring Zone I Heating Error!", CNAlarmMessage = "预固1区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 0 + 3, ENAlarmMessage = "Precuring Zone II Heating Error!", CNAlarmMessage = "预固2区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 0 + 4, ENAlarmMessage = "Precuring Zone III Heating Error!", CNAlarmMessage = "预固3区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 0 + 5, ENAlarmMessage = "Precuring Zone IV Heating Error!", CNAlarmMessage = "预固4区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 0 + 6, ENAlarmMessage = "Curing Zone I Heating Error!", CNAlarmMessage = "固化1区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 0 + 7, ENAlarmMessage = "Curing Zone II Heating Error!", CNAlarmMessage = "固化2区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 0 + 8, ENAlarmMessage = "Curing Zone III Heating Error!", CNAlarmMessage = "固化3区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 16 * 0 + 9, ENAlarmMessage = "Curing Zone IV Heating Error!", CNAlarmMessage = "固化4区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
new() { ErrorIndex = 0, ENAlarmMessage = "Line E.Stop ON!", CNAlarmMessage = "线急停按下!", AlarmDegarde = AlarmDegardeEnum.Warning, ErrorCode = "11" },
new() { ErrorIndex = 1, ENAlarmMessage = "Curing Zone I heating error!", CNAlarmMessage = "固化1区加热异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "12" },
new() { ErrorIndex = 2, ENAlarmMessage = "Curing Zone II heating error!", CNAlarmMessage = "固化2区加热异常", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "18" },
new() { ErrorIndex = 3, ENAlarmMessage = "RFID2 Read Error", CNAlarmMessage = "RFID2读码错误", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "20" },
new() { ErrorIndex = 4, ENAlarmMessage = "RFID3 Read Error", CNAlarmMessage = "RFID3读码错误", AlarmDegarde = AlarmDegardeEnum.Error, ErrorCode = "22" },
};
/// <summary>
/// 提升机报警定义
/// </summary>
public static readonly List<AlarmMessageEntity> LiftAlarms = new()
{
new() { ErrorIndex = 16 * 0 + 0, ENAlarmMessage = "Loading Lifter Down Error", CNAlarmMessage = "上料提升机下降异常", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 0 + 1, ENAlarmMessage = "Loading Lifter Up Error", CNAlarmMessage = "上料提升机上升异常", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 0 + 2, ENAlarmMessage = "Loading Lifter E.Stop Pressed", CNAlarmMessage = "上料提升机急停按下", AlarmDegarde = AlarmDegardeEnum.Fault },
///// <summary>
///// 真空箱报警定义(旧)
///// </summary>
//public static readonly List<AlarmMessageEntity> VacuumAlarms_Old = new()
//{
// new() { ErrorIndex = 16 * 0 + 0, ENAlarmMessage = "1# Pump A Backward Limit Reached!", CNAlarmMessage = "泵A负限超程", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 0 + 1, ENAlarmMessage = "1# Pump A Forward Limit Reached!", CNAlarmMessage = "泵A正限超程", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 0 + 2, ENAlarmMessage = "1# Pump B Backward Limit Reached!", CNAlarmMessage = "泵B负限超程", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 0 + 3, ENAlarmMessage = "1# Pump B Forward Limit Reached!", CNAlarmMessage = "泵B正限超程", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 0 + 4, ENAlarmMessage = "1# Servo A Error!", CNAlarmMessage = "泵A伺服报警", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 0 + 5, ENAlarmMessage = "1# Servo B Error!", CNAlarmMessage = "泵B伺服报警", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 0 + 6, ENAlarmMessage = "Mixed Servo Error!", CNAlarmMessage = "混合伺服报警!", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 0 + 7, ENAlarmMessage = "Mixed Motor Rotating Error!", CNAlarmMessage = "混合电机旋转异常!", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 0 + 12, ENAlarmMessage = "A1 Heating Error", CNAlarmMessage = "A1加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 0 + 13, ENAlarmMessage = "B1 Heating Error", CNAlarmMessage = "B1加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 0 + 14, ENAlarmMessage = "A2 Heating Error", CNAlarmMessage = "A2加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 0 + 15, ENAlarmMessage = "B2 Heating Error", CNAlarmMessage = "B2加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 1 + 0, ENAlarmMessage = "A Potting Valve Open Error", CNAlarmMessage = "A吐出阀打开异常", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 1 + 1, ENAlarmMessage = "B Potting Valve Open Error", CNAlarmMessage = "B吐出阀打开异常", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 2 + 0, ENAlarmMessage = "1# Tank A Globe Valve Error!", CNAlarmMessage = "A1桶球阀打开异常", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 2 + 1, ENAlarmMessage = "1# Tank B Globe Valve Error!", CNAlarmMessage = "B1桶球阀打开异常", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 2 + 2, ENAlarmMessage = "Vacuum Chamber Inlet Door Open Error", CNAlarmMessage = "真空箱入口门打开异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 2 + 3, ENAlarmMessage = "Vacuum Chamber Inlet Door Close Error", CNAlarmMessage = "真空箱入口门关闭异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 2 + 4, ENAlarmMessage = "Vacuum Chamber Outlet Door Open Error", CNAlarmMessage = "真空箱出口门打开异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 2 + 5, ENAlarmMessage = "Vacuum Chamber Outlet Door Close Error", CNAlarmMessage = "真空箱出口门关闭异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 2 + 8, ENAlarmMessage = "Axis X Servo Error", CNAlarmMessage = "X轴伺服报警", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 2 + 9, ENAlarmMessage = "Axis Y Servo Error", CNAlarmMessage = "Y轴伺服报警", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 2 + 10, ENAlarmMessage = "Axis Z Servo Error", CNAlarmMessage = "Z轴伺服报警", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 2 + 11, ENAlarmMessage = "Vacuum Tank Vacuum Pump Error", CNAlarmMessage = "真空箱真空泵异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 2 + 12, ENAlarmMessage = "Vacuum Chamber Lifter Error", CNAlarmMessage = "灌胶定位缸异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 2 + 13, ENAlarmMessage = "Vacuum Chamber Vacuum Valve Error", CNAlarmMessage = "真空阀打开异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 2 + 14, ENAlarmMessage = "Vacuum Vent Valve Close Error", CNAlarmMessage = "放气阀关闭异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 3 + 0, ENAlarmMessage = "Air Pressure Alarm", CNAlarmMessage = "系统气压报警", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 3 + 2, ENAlarmMessage = "Glue Tank Vacuum Pump Error!", CNAlarmMessage = "料桶真空泵报警!", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 4 + 0, ENAlarmMessage = "Pump A Pressure Over Upper Limit", CNAlarmMessage = "A泵压力上限报警", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 4 + 1, ENAlarmMessage = "Pump A Pressure Below Lower Limit", CNAlarmMessage = "A泵压力下限报警", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 4 + 2, ENAlarmMessage = "Pump B Pressure Over Upper Limit", CNAlarmMessage = "B泵压力上限报警", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 4 + 3, ENAlarmMessage = "Pump B Pressure Below Lower Limit", CNAlarmMessage = "B泵压力下限报警", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 10 + 0, ENAlarmMessage = "1# Tank A Upper Limit!", CNAlarmMessage = "A1桶上限报警", AlarmDegarde = AlarmDegardeEnum.Warning },
// new() { ErrorIndex = 16 * 10 + 1, ENAlarmMessage = "1# Tank A Lower Limit!", CNAlarmMessage = "A1桶下限报警", AlarmDegarde = AlarmDegardeEnum.Warning },
// new() { ErrorIndex = 16 * 10 + 2, ENAlarmMessage = "1# Tank B Upper Limit!", CNAlarmMessage = "B1桶上限报警", AlarmDegarde = AlarmDegardeEnum.Warning },
// new() { ErrorIndex = 16 * 10 + 3, ENAlarmMessage = "1# Tank B Lower Limit!", CNAlarmMessage = "B1桶下限报警", AlarmDegarde = AlarmDegardeEnum.Warning },
// new() { ErrorIndex = 16 * 10 + 4, ENAlarmMessage = "2# Tank A Upper Limit!", CNAlarmMessage = "A2桶上限报警", AlarmDegarde = AlarmDegardeEnum.Warning },
// new() { ErrorIndex = 16 * 10 + 5, ENAlarmMessage = "2# Tank A Lower Limit!", CNAlarmMessage = "A2桶下限报警", AlarmDegarde = AlarmDegardeEnum.Warning },
// new() { ErrorIndex = 16 * 10 + 6, ENAlarmMessage = "2# Tank B Upper Limit!", CNAlarmMessage = "B2桶上限报警", AlarmDegarde = AlarmDegardeEnum.Warning },
// new() { ErrorIndex = 16 * 10 + 7, ENAlarmMessage = "2# Tank B Lower Limit!", CNAlarmMessage = "B2桶下限报警", AlarmDegarde = AlarmDegardeEnum.Warning },
// new() { ErrorIndex = 16 * 10 + 8, ENAlarmMessage = "1# Antisolid Time Up!", CNAlarmMessage = "防固时间到!", AlarmDegarde = AlarmDegardeEnum.Warning },
// new() { ErrorIndex = 16 * 10 + 9, ENAlarmMessage = "Globe Valve Not Opened!", CNAlarmMessage = "球阀未打开!", AlarmDegarde = AlarmDegardeEnum.Error },
//};
new() { ErrorIndex = 16 * 0 + 3, ENAlarmMessage = "Unloading Lifter Down Error", CNAlarmMessage = "下料提升机下降异常", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 0 + 4, ENAlarmMessage = "Unloading Lifter Up Error", CNAlarmMessage = "下料提升机上升异常", AlarmDegarde = AlarmDegardeEnum.Fault },
new() { ErrorIndex = 16 * 0 + 5, ENAlarmMessage = "Unloading Lifter E.Stop Pressed", CNAlarmMessage = "下料提升机急停按下", AlarmDegarde = AlarmDegardeEnum.Fault },
};
///// <summary>
///// 加热线报警定义(旧)
///// </summary>
//public static readonly List<AlarmMessageEntity> OvenAlarms_Old = new()
//{
// new() { ErrorIndex = 16 * 0 + 0, ENAlarmMessage = "Line E.Stop ON!", CNAlarmMessage = "线急停按下", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 0 + 1, ENAlarmMessage = "Preheating Zone Heating Error!", CNAlarmMessage = "预热区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 0 + 2, ENAlarmMessage = "Precuring Zone I Heating Error!", CNAlarmMessage = "预固1区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 0 + 3, ENAlarmMessage = "Precuring Zone II Heating Error!", CNAlarmMessage = "预固2区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 0 + 4, ENAlarmMessage = "Precuring Zone III Heating Error!", CNAlarmMessage = "预固3区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 0 + 5, ENAlarmMessage = "Precuring Zone IV Heating Error!", CNAlarmMessage = "预固4区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 0 + 6, ENAlarmMessage = "Curing Zone I Heating Error!", CNAlarmMessage = "固化1区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 0 + 7, ENAlarmMessage = "Curing Zone II Heating Error!", CNAlarmMessage = "固化2区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 0 + 8, ENAlarmMessage = "Curing Zone III Heating Error!", CNAlarmMessage = "固化3区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
// new() { ErrorIndex = 16 * 0 + 9, ENAlarmMessage = "Curing Zone IV Heating Error!", CNAlarmMessage = "固化4区加热异常", AlarmDegarde = AlarmDegardeEnum.Error },
//};
///// <summary>
///// 提升机报警定义
///// </summary>
//public static readonly List<AlarmMessageEntity> LiftAlarms = new()
//{
// new() { ErrorIndex = 16 * 0 + 0, ENAlarmMessage = "Loading Lifter Down Error", CNAlarmMessage = "上料提升机下降异常", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 0 + 1, ENAlarmMessage = "Loading Lifter Up Error", CNAlarmMessage = "上料提升机上升异常", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 0 + 2, ENAlarmMessage = "Loading Lifter E.Stop Pressed", CNAlarmMessage = "上料提升机急停按下", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 0 + 3, ENAlarmMessage = "Unloading Lifter Down Error", CNAlarmMessage = "下料提升机下降异常", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 0 + 4, ENAlarmMessage = "Unloading Lifter Up Error", CNAlarmMessage = "下料提升机上升异常", AlarmDegarde = AlarmDegardeEnum.Fault },
// new() { ErrorIndex = 16 * 0 + 5, ENAlarmMessage = "Unloading Lifter E.Stop Pressed", CNAlarmMessage = "下料提升机急停按下", AlarmDegarde = AlarmDegardeEnum.Fault },
//};
@ -499,6 +453,164 @@ namespace Sln.Iot.Business
// }
//}
///// <summary>
///// 真空箱1报警分析
///// </summary>
//public void VacuumAlarm1Analyse(bool[] bools)
//{
// List<Vacuum1Error>? errorList = errorService.GetV1List();
// foreach (var errorMessage in VacuumAlarms_Old)
// {
// if (bools[errorMessage.ErrorIndex])
// {
// if (errorList.Where(x => x.ErrorName == errorMessage.ENAlarmMessage).Count() == 0)
// {
// Guid.TryParse(trayBindingService.TidGet(), out Guid transID);
// Guid logGuid = Guid.NewGuid();
// 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)));
// if (_appConfig.IsAlarmLog)
// _log.Info($"真空箱1报警发生 内容:{errorMessage.CNAlarmMessage} 级别:{errorMessage.AlarmDegarde.GetDescription()}");
// }
// }
// else
// {
// if (errorList.Where(x => x.ErrorName == errorMessage.ENAlarmMessage).Count() != 0)
// {
// string delGuid = errorService.DeleteVacuum1Error(errorMessage.ENAlarmMessage);
// Guid.TryParse(delGuid, out Guid guidRes);
// connect1.PublishEvent(new CFXEnvelope(faultClearedEvent.Handle(guidRes)));
// if (_appConfig.IsAlarmLog)
// _log.Info($"真空箱1报警消除 内容:{errorMessage.CNAlarmMessage} 级别:{errorMessage.AlarmDegarde.GetDescription()}");
// }
// }
// }
//}
///// <summary>
///// 真空箱2报警分析
///// </summary>
//public void VacuumAlarm2Analyse(bool[] bools)
//{
// List<Vacuum2Error>? errorList = errorService.GetV2List();
// foreach (var errorMessage in VacuumAlarms_Old)
// {
// if (bools[errorMessage.ErrorIndex])
// {
// if (errorList.Where(x => x.ErrorName == errorMessage.ENAlarmMessage).Count() == 0)
// {
// Guid.TryParse(trayBindingService.TidGet(), out Guid transID);
// Guid logGuid = Guid.NewGuid();
// 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)));
// if (_appConfig.IsAlarmLog)
// _log.Info($"真空箱2报警发生 内容:{errorMessage.CNAlarmMessage} 级别:{errorMessage.AlarmDegarde.GetDescription()}");
// }
// }
// else
// {
// if (errorList.Where(x => x.ErrorName == errorMessage.ENAlarmMessage).Count() != 0)
// {
// string delGuid = errorService.DeleteVacuum2Error(errorMessage.ENAlarmMessage);
// Guid.TryParse(delGuid, out Guid guidRes);
// connect1.PublishEvent(new CFXEnvelope(faultClearedEvent.Handle(guidRes)));
// if (_appConfig.IsAlarmLog)
// _log.Info($"真空箱2报警消除 内容:{errorMessage.CNAlarmMessage} 级别:{errorMessage.AlarmDegarde.GetDescription()}");
// }
// }
// }
//}
///// <summary>
///// 提升机报警分析
///// </summary>
///// <param name="bools"></param>
//public void LiftAlarmAnalyse(bool[] bools)
//{
// //现存的错误数据
// List<LiftError>? errorList = errorService.GetLiftList();
// foreach (var errorMessage in LiftAlarms)
// {
// if (bools[errorMessage.ErrorIndex])
// {
// //如果原来没有 现在有 添加错误
// if (errorList.Where(x => x.ErrorName == errorMessage.ENAlarmMessage).Count() == 0)
// {
// Guid.TryParse(trayBindingService.TidGet(), out Guid transID);
// Guid logGuid = Guid.NewGuid();
// errorService.InsertLiftError(logGuid.ToString(), errorMessage.ENAlarmMessage, errorMessage.CNAlarmMessage, errorMessage.ErrorCode);
// CFXOven.PublishEvent(new CFXEnvelope(faultOccurredEvent.Handle(errorMessage.ErrorCode, LevelTrans(errorMessage.AlarmDegarde), logGuid, errorMessage.ENAlarmMessage, transID)));
// if (_appConfig.IsAlarmLog)
// _log.Info($"提升机报警发生 内容:{errorMessage.CNAlarmMessage} 级别:{errorMessage.AlarmDegarde.GetDescription()}");
// }
// }
// else
// {
// //如果原来有 现在没有 则删除
// if (errorList.Where(x => x.ErrorName == errorMessage.ENAlarmMessage).Count() != 0)
// {
// //删除错误
// string delGuid = errorService.DeleteliftError(errorMessage.ENAlarmMessage);
// Guid.TryParse(delGuid, out Guid guidRes);
// CFXOven.PublishEvent(new CFXEnvelope(faultClearedEvent.Handle(guidRes)));
// if (_appConfig.IsAlarmLog)
// _log.Info($"提升机报警消除 内容:{errorMessage.CNAlarmMessage} 级别:{errorMessage.AlarmDegarde.GetDescription()}");
// }
// }
// }
//}
///// <summary>
///// 报警点位刷新(旧)
///// </summary>
//public void TimerCallback_Old(object? state)
//{
// try
// {
// byte[] errorBytes1 = new byte[1];
// //隧道烤箱报警
// var result20 = _plc.ReadBytes(_plc.DeltaInstance0, "D100", 1);
// //真空箱1报警
// var result21 = _plc.ReadBytes(_plc.DeltaInstance1, "D80", 11);
// //真空箱2报警
// var result22 = _plc.ReadBytes(_plc.DeltaInstance2, "D80", 11);
// //提升机报警
// var result23 = _plc.ReadBytes(_plc.DeltaInstance3, "D100", 1);
// if (result20.IsSuccess && result20.Content != null)
// {
// BitArray bits20 = new BitArray(ToolBusiness.SwapAdjacentBytes(result20.Content));
// bool[] bools20 = new bool[bits20.Count];
// bits20.CopyTo(bools20, 0);
// OvenAlarmAnalyse(bools20);
// }
// if (result21.IsSuccess && result21.Content != null)
// {
// BitArray bits21 = new BitArray(ToolBusiness.SwapAdjacentBytes(result21.Content));
// bool[] bools21 = new bool[bits21.Count];
// bits21.CopyTo(bools21, 0);
// VacuumAlarm1Analyse(bools21);
// }
// if (result22.IsSuccess && result22.Content != null)
// {
// BitArray bits22 = new BitArray(ToolBusiness.SwapAdjacentBytes(result22.Content));
// bool[] bools22 = new bool[bits22.Count];
// bits22.CopyTo(bools22, 0);
// VacuumAlarm2Analyse(bools22);
// }
// if (result23.IsSuccess && result23.Content != null)
// {
// BitArray bits23 = new BitArray(ToolBusiness.SwapAdjacentBytes(result23.Content));
// bool[] bools23 = new bool[bits23.Count];
// bits23.CopyTo(bools23, 0);
// LiftAlarmAnalyse(bools23);
// }
// }
// catch (Exception ex)
// {
// _log.Error("报警信息处理发生错误", ex);
// }
//}
}
}

@ -27,30 +27,26 @@ namespace Sln.Iot.Business
private readonly AppConfig _appConfig = AppConfigSetting.Load();
private readonly PLCConnect _plc = PLCConnect.Instance;
CFXConnect1 _cfxHelper = CFXConnect1.Instance;
CFXConnect2 _cfxHelper2 = CFXConnect2.Instance;
CFXConnect3 _cfxHelper3 = CFXConnect3.Instance;
CFXConnect4 _cfxHelper4 = CFXConnect4.Instance;
CFXConnectVacuum _cfxVacuum = CFXConnectVacuum.Instance;
CFXConnectOven _cfxOven = CFXConnectOven.Instance;
StationParametersModifiedEvent stationParametersModifiedEvent = new StationParametersModifiedEvent();
public MesReportBusiness()
{
_deltaHttpClient.Init();
_timer = new Timer(TimerCallback, null, 0, 1000 * 15);
//_deltaHttpClient.Init();
_timer = new Timer(TimerCallback, null, 0, 1000 * _appConfig.MesSendDelay);
}
public void TimerCallback(object? state)
{
//MES上报
ErrorGet(1);
_deltaHttpClient.PostRequestSend(tranter(GlobalVar.Connect1Entity));
//_deltaHttpClient.PostRequestSend(tranter(GlobalVar.Connect1Entity));
ErrorGet(2);
_deltaHttpClient.PostRequestSend(tranter(GlobalVar.Connect2Entity));
ErrorGet(3);
_deltaHttpClient.PostRequestSend(tranter(GlobalVar.Connect3Entity));
ErrorGet(4);
_deltaHttpClient.PostRequestSend(tranter(GlobalVar.Connect4Entity));
//_deltaHttpClient.PostRequestSend(tranter(GlobalVar.Connect2Entity));
_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet(GlobalVar.Connect1Entity.InterfaceID,
//CFX上传
_cfxVacuum.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet(GlobalVar.Connect1Entity.InterfaceID,
"制程设备",
GlobalVar.Connect1Entity.Status,
GlobalVar.Connect1Entity.Status,
@ -66,7 +62,7 @@ namespace Sln.Iot.Business
GlobalVar.Connect1Entity.ErrorTime.ToString()
))));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet(GlobalVar.Connect2Entity.InterfaceID,
_cfxOven.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet(GlobalVar.Connect2Entity.InterfaceID,
"制程设备",
GlobalVar.Connect2Entity.Status,
GlobalVar.Connect2Entity.Status,
@ -82,43 +78,17 @@ namespace Sln.Iot.Business
GlobalVar.Connect2Entity.ErrorTime.ToString()
))));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet(GlobalVar.Connect3Entity.InterfaceID,
"制程设备",
GlobalVar.Connect3Entity.Status,
GlobalVar.Connect3Entity.Status,
GlobalVar.Connect3Entity.StatusCode,
GlobalVar.Connect3Entity.PassQuantity.ToString(),
GlobalVar.Connect3Entity.FailQuantity.ToString(),
GlobalVar.Connect3Entity.CycleTime.ToString(),
GlobalVar.Connect3Entity.RunningTime.ToString(),
GlobalVar.Connect3Entity.WaitingTime.ToString(),
"1",
GlobalVar.Connect3Entity.InputQuantity.ToString(),
GlobalVar.Connect3Entity.ErrorCount.ToString(),
GlobalVar.Connect3Entity.ErrorTime.ToString()
))));
if (_appConfig.IsMESLog)
{
_log.Info($"CFX真空箱上报 - InterfaceID:{GlobalVar.Connect1Entity.InterfaceID}, D262 状态码 Status:{GlobalVar.Connect1Entity.Status}, D108 灯号 StatusCode:{GlobalVar.Connect1Entity.StatusCode}, PassQty:{GlobalVar.Connect1Entity.PassQuantity}, FailQty:{GlobalVar.Connect1Entity.FailQuantity}, CycleTime:{GlobalVar.Connect1Entity.CycleTime}, RunningTime:{GlobalVar.Connect1Entity.RunningTime}, WaitingTime:{GlobalVar.Connect1Entity.WaitingTime}, InputQty:{GlobalVar.Connect1Entity.InputQuantity}, ErrorCnt:{GlobalVar.Connect1Entity.ErrorCount}, ErrorTimes:{GlobalVar.Connect1Entity.ErrorTime}");
_log.Info($"CFX烤箱上报 - InterfaceID:{GlobalVar.Connect2Entity.InterfaceID}, D262 状态码 Status:{GlobalVar.Connect2Entity.Status}, D15176 灯号 StatusCode:{GlobalVar.Connect2Entity.StatusCode}, PassQty:{GlobalVar.Connect2Entity.PassQuantity}, FailQty:{GlobalVar.Connect2Entity.FailQuantity}, CycleTime:{GlobalVar.Connect2Entity.CycleTime}, RunningTime:{GlobalVar.Connect2Entity.RunningTime}, WaitingTime:{GlobalVar.Connect2Entity.WaitingTime}, InputQty:{GlobalVar.Connect2Entity.InputQuantity}, ErrorCnt:{GlobalVar.Connect2Entity.ErrorCount}, ErrorTimes:{GlobalVar.Connect2Entity.ErrorTime}");
}
_cfxHelper4.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet(GlobalVar.Connect4Entity.InterfaceID,
"制程设备",
GlobalVar.Connect4Entity.Status,
GlobalVar.Connect4Entity.Status,
GlobalVar.Connect4Entity.StatusCode,
GlobalVar.Connect4Entity.PassQuantity.ToString(),
GlobalVar.Connect4Entity.FailQuantity.ToString(),
GlobalVar.Connect4Entity.CycleTime.ToString(),
GlobalVar.Connect4Entity.RunningTime.ToString(),
GlobalVar.Connect4Entity.WaitingTime.ToString(),
"1",
GlobalVar.Connect4Entity.InputQuantity.ToString(),
GlobalVar.Connect4Entity.ErrorCount.ToString(),
GlobalVar.Connect4Entity.ErrorTime.ToString()
))));
}
private string tranter(MesReportEntity entity)
{
//entity.CycleTime = _appConfig.CycleTime;
entity.RunningTime = (int)(DateTime.Now - GlobalVar.OpenTime).TotalSeconds;
#region 傳送字的資料
string strSendData;
@ -153,21 +123,21 @@ namespace Sln.Iot.Business
strSendData += "]";
strSendData += "}]";
_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet(entity.InterfaceID,
"制程设备",
entity.Status,
entity.Status,
entity.StatusCode,
entity.PassQuantity.ToString(),
entity.FailQuantity.ToString(),
entity.CycleTime.ToString(),
entity.RunningTime.ToString(),
entity.WaitingTime.ToString(),
"1",
entity.InputQuantity.ToString(),
entity.ErrorCount.ToString(),
entity.ErrorTime.ToString()
))));
//_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet(entity.InterfaceID,
// "制程设备",
// entity.Status,
// entity.Status,
// entity.StatusCode,
// entity.PassQuantity.ToString(),
// entity.FailQuantity.ToString(),
// entity.CycleTime.ToString(),
// entity.RunningTime.ToString(),
// entity.WaitingTime.ToString(),
// "1",
// entity.InputQuantity.ToString(),
// entity.ErrorCount.ToString(),
// entity.ErrorTime.ToString()
// ))));
#endregion
return strSendData;
@ -182,28 +152,13 @@ namespace Sln.Iot.Business
string status = "0";
string statusCode = "0";
if (deviceNo == 1) //真空箱
{
var r1 = _plc.ReadInt16(_plc.DeltaInstance1, "D15176");
var r2 = _plc.ReadInt16(_plc.DeltaInstance2, "D15176");
if (r1.IsSuccess && r2.IsSuccess)
{ //灯号
GlobalVar.Connect1Entity.RunningTime = (int)(DateTime.Now - GlobalVar.OpenTime).TotalSeconds;
var r1 = _plc.ReadInt16(_plc.PLC21, "D108");
if (r1.IsSuccess)
{
if (r1.Content == 1)
{
GlobalVar.Connect1Entity.StatusCode = r1.Content.ToString();
GlobalVar.Connect1Entity.Status = StatusJudge(r1.Content, 2).ToString();
}
else if (r2.Content == 1)
{
GlobalVar.Connect1Entity.StatusCode = r2.Content.ToString();
GlobalVar.Connect1Entity.Status = StatusJudge(r2.Content, 3).ToString();
}
else
{
GlobalVar.Connect1Entity.StatusCode = "0";
GlobalVar.Connect1Entity.Status = StatusJudge(0, 1).ToString();
}
GlobalVar.Connect1Entity.StatusCode = r1.Content.ToString();
GlobalVar.Connect1Entity.Status = StatusJudge(r1.Content, 1).ToString();
if (GlobalVar.Connect1Entity.Status == "1")
{
@ -228,16 +183,17 @@ namespace Sln.Iot.Business
}
else
{
_log.Error($"读取PLC状态失败: 真空箱1{r1.IsSuccess} - {r1.Message}; 真空箱2{r2.IsSuccess} - {r2.Message}");
_log.Error($"读取PLC状态失败: 真空箱1{r1.IsSuccess} - {r1.Message}");
}
}
else if (deviceNo == 2) //上料提升机
{
var r1 = _plc.ReadInt16(_plc.DeltaInstance3, "D15176");
else if (deviceNo == 2) //烤箱
{ //灯号
GlobalVar.Connect2Entity.RunningTime = (int)(DateTime.Now - GlobalVar.OpenTime).TotalSeconds;
var r1 = _plc.ReadInt16(_plc.PLC20, "D15176");
if (r1.IsSuccess)
{
GlobalVar.Connect2Entity.StatusCode = r1.Content.ToString();
GlobalVar.Connect2Entity.Status = StatusJudge(r1.Content, 4).ToString();
GlobalVar.Connect2Entity.Status = StatusJudge(r1.Content, 2).ToString();
if (GlobalVar.Connect2Entity.Status == "1")
{
@ -261,78 +217,11 @@ namespace Sln.Iot.Business
}
}
else
{
_log.Error($"读取PLC状态失败: 上料提升机{r1.IsSuccess} - {r1.Message}");
}
}
else if (deviceNo == 3) //烤箱
{
var r1 = _plc.ReadInt16(_plc.DeltaInstance0, "D15176");
if (r1.IsSuccess)
{
GlobalVar.Connect3Entity.StatusCode = r1.Content.ToString();
GlobalVar.Connect3Entity.Status = StatusJudge(r1.Content, 1).ToString();
if (GlobalVar.Connect3Entity.Status == "1")
{
if (GlobalVar.Connect3Entity.IsError == false)
{
GlobalVar.Connect3Entity.ErrorCount++;
GlobalVar.Connect3Entity.LastErrorTime = DateTime.Now;
GlobalVar.Connect3Entity.IsError = true;
}
else
{
GlobalVar.Connect3Entity.ErrorTime = (int)(DateTime.Now - GlobalVar.Connect3Entity.LastErrorTime).TotalSeconds;
}
}
else
{
if (GlobalVar.Connect3Entity.IsError == true)
{
GlobalVar.Connect3Entity.IsError = false;
}
}
}
else
{
_log.Error($"读取PLC状态失败: 烤箱{r1.IsSuccess} - {r1.Message}");
}
}
else if (deviceNo == 4) //下料提升机
{
var r1 = _plc.ReadInt16(_plc.DeltaInstance4, "D15176");
if (r1.IsSuccess)
{
GlobalVar.Connect4Entity.StatusCode = r1.Content.ToString();
GlobalVar.Connect4Entity.Status = StatusJudge(r1.Content, 4).ToString();
if (GlobalVar.Connect4Entity.Status == "1")
{
if (GlobalVar.Connect4Entity.IsError == false)
{
GlobalVar.Connect4Entity.ErrorCount++;
GlobalVar.Connect4Entity.LastErrorTime = DateTime.Now;
GlobalVar.Connect4Entity.IsError = true;
}
else
{
GlobalVar.Connect4Entity.ErrorTime = (int)(DateTime.Now - GlobalVar.Connect4Entity.LastErrorTime).TotalSeconds;
}
}
else
{
if (GlobalVar.Connect4Entity.IsError == true)
{
GlobalVar.Connect4Entity.IsError = false;
}
}
}
else
{
_log.Error($"读取PLC状态失败: 下料提升机{r1.IsSuccess} - {r1.Message}");
}
}
//return (status, statusCode);
}
@ -343,7 +232,7 @@ namespace Sln.Iot.Business
}
/// <summary>
/// 根据StatusCode判断Status
/// 根据StatusCode判断Status
/// </summary>
/// <param name="sc"></param>
/// <returns></returns>
@ -356,18 +245,13 @@ namespace Sln.Iot.Business
{
switch (num)
{
case 1: //烤箱
//故障码
case 1: //真空箱
//return 1;
return _plc.ReadInt16(_plc.DeltaInstance0, "D262").Content;
case 2: //真空箱1
return _plc.ReadInt16(_plc.PLC21, "D262").Content;
case 2: //烤箱
//return 1;
return _plc.ReadInt16(_plc.DeltaInstance1, "D262").Content;
case 3: //真空箱2
//return 1;
return _plc.ReadInt16(_plc.DeltaInstance2, "D262").Content;
case 4: //上聊提升机
//return 1;
return _plc.ReadInt16(_plc.DeltaInstance3, "D262").Content;
return _plc.ReadInt16(_plc.PLC20, "D262").Content;
default:
return 1;
}
@ -384,7 +268,7 @@ namespace Sln.Iot.Business
}
}
/// <summary>
/// stationParameters参数设置
/// </summary>

@ -2,6 +2,7 @@
using CFX;
using CFX.Structures.PressInsertion;
using HslCommunication;
using Sln.Iot.CFX.CFXBusiness;
using Sln.Iot.CFX.CFXConnect;
using Sln.Iot.CFX.Event;
using Sln.Iot.Common;
@ -15,6 +16,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using TouchSocket.Core;
@ -22,6 +24,9 @@ using static System.Runtime.CompilerServices.RuntimeHelpers;
namespace Sln.Iot.Business
{
/// <summary>
/// RFID01真空箱内
/// </summary>
public class RFID01Business
{
private Timer _timer;
@ -30,16 +35,18 @@ namespace Sln.Iot.Business
private readonly SerilogHelper _log = SerilogHelper.Instance;
private UnitsProcessPLCDataGetBusiness unitsProcessPLCDataGetBusiness = UnitsProcessPLCDataGetBusiness.Instance;
private CFXUnitProcessedDataGet cfxUnitProcessedDataGet = CFXUnitProcessedDataGet.Instance;
private UnitsArrivedEvent unitsArrivedEvent = new UnitsArrivedEvent();
private WorkStartedEvent workStartedEvent = new WorkStartedEvent();
private WorkStageStartedEvent workStageStartedEvent = new WorkStageStartedEvent();
private WorkCompletedEvent workCompletedEvent = new WorkCompletedEvent();
private UnitsDepartedEvent unitsDepartedEvent = new UnitsDepartedEvent();
private UnitsProcessedEvent unitsProcessedEvent = new UnitsProcessedEvent();
private TrayBindingService trayBindingService = TrayBindingService.Instance;
private CFXConnect1 connect1 = CFXConnect1.Instance;
private CFXConnect2 connect2 = CFXConnect2.Instance;
private CFXConnect3 connect3 = CFXConnect3.Instance;
private CFXConnectVacuum connectVacuum = CFXConnectVacuum.Instance;
public RFID01Business()
{
@ -47,7 +54,7 @@ namespace Sln.Iot.Business
}
/// <summary>
/// RFID01上料提升机数据处理流程业务刷新
/// RFID01真空箱内
/// </summary>
/// <param name="state"></param>
public void TimerCallback(object? state)
@ -56,20 +63,20 @@ namespace Sln.Iot.Business
{
// 定时任务逻辑
//读取信号
OperateResult<short> signalRes = _plc.ReadInt16(_plc.DeltaInstance3, "D500");
OperateResult<short> signalRes = _plc.ReadInt16(_plc.PLC22, "D800");
//成功验证
if (signalRes.IsSuccess)
{
short signalValue = signalRes.Content;
//_log.Info($"______________________________________________");
//_log.Info($"RFID01:{signalValue}");
//如果有读取信号
if (signalValue == 1001)
{
//读取托盘码和产品码
OperateResult<byte[]> trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance3, "D5000", 10);
OperateResult<byte[]> pordBytesResult1 = _plc.ReadBytes(_plc.DeltaInstance3, "D8000", 90);
OperateResult<byte[]> pordBytesResult2 = _plc.ReadBytes(_plc.DeltaInstance3, "D8090", 90);
OperateResult<byte[]> trayBytesResult = _plc.ReadBytes(_plc.PLC22, "D5000", 10);
//成功验证
if (trayBytesResult.IsSuccess && pordBytesResult1.IsSuccess && pordBytesResult2.IsSuccess)
if (trayBytesResult.IsSuccess)
{
//转换托盘码
@ -77,90 +84,96 @@ namespace Sln.Iot.Business
traycode = traycode.Replace("?", "");
traycode = traycode.Replace("\0", "");
_log.Info($"托盘到达-RFID01-托盘号-[{traycode}]");
byte[] prodBytes = pordBytesResult1.Content.Concat(pordBytesResult2.Content).ToArray();
string[] prodcode = new string[6];
//分割转换产品码
for (int i = 0; i < 6; i++)
{
prodcode[i] = Encoding.ASCII.GetString(prodBytes[(i * 60)..(i * 60 + 60)]);
prodcode[i] = prodcode[i].Replace("\0", "");
if (!string.IsNullOrEmpty(prodcode[i]))
{
// 将相邻偶数位和奇数位字符对调
char[] chars = prodcode[i].ToCharArray();
for (int j = 0; j < chars.Length - 1; j += 2)
{
// 交换相邻的两个字符
char temp = chars[j];
chars[j] = chars[j + 1];
chars[j + 1] = temp;
}
prodcode[i] = new string(chars);
GlobalVar.Connect2Entity.InputQuantity++;
GlobalVar.Connect2Entity.PassQuantity++;
GlobalVar.Connect3Entity.InputQuantity++;
GlobalVar.Connect1Entity.InputQuantity++;
GlobalVar.Connect1Entity.PassQuantity++;
GlobalVar.Connect3Entity.PassQuantity++;
GlobalVar.Connect4Entity.InputQuantity++;
GlobalVar.Connect4Entity.PassQuantity++;
_log.Info($"{prodcode[i]}进入产线");
}
}
//connect1.SendValidateUnitsRequest("", traycode, prodcode);
//生成work唯一guid(tid)
Guid tid = Guid.NewGuid();
//sql更新
bool res = trayBindingService.TrayBindingRefresh(tid, traycode, prodcode);
if (!res)
{
_log.Error("上料提升机数据库写入异常");
}
//记录预热炉到达时间
trayBindingService.UpDateTime(DateTime.Now.ToString(), traycode, "1");
//写入完成信号
res = _plc.PlcWrite(_plc.DeltaInstance3, "D500", 1002, DataTypeEnum.UInt16).IsSuccess;
bool res = _plc.PlcWrite(_plc.PLC22, "D800", 1002, DataTypeEnum.UInt16).IsSuccess;
if (!res)
{
_log.Error("上料提升机PLC写入完成信号异常");
_log.Error("RFID01 读电子标签 PLC写入完成信号异常");
}
GlobalVar.Connect2Entity.CycleTime = CommonUtil.AddRandom(AppConfigSetting._config.CycleTime2, 5);
//取出work唯一guid(tid)
string stid = trayBindingService.TidGet(traycode);
if (!Guid.TryParse(stid, out Guid tid))
{
tid = Guid.Parse("11111111-1111-4111-9111-111111111111");
_log.Error("找不到对应的托盘信息赋值默认GUID");
}
//读取托盘对应的产品码
string[] prodcode = trayBindingService.ProdCodeGet(traycode);
//CFX
Task.Run(() =>
{
//单元抵达事件
connect1.PublishEvent(new CFXEnvelope(unitsArrivedEvent.Handle(traycode, prodcode)));
connect2.PublishEvent(new CFXEnvelope(unitsArrivedEvent.Handle(traycode, prodcode)));
connect3.PublishEvent(new CFXEnvelope(unitsArrivedEvent.Handle(traycode, prodcode)));
_log.Info($"{traycode} 抵达设备");
connectVacuum.PublishEvent(new CFXEnvelope(unitsArrivedEvent.Handle(traycode, prodcode)));
//工作开始事件
connect1.PublishEvent(new CFXEnvelope(workStartedEvent.Handle(tid, traycode, prodcode)));
connect2.PublishEvent(new CFXEnvelope(workStartedEvent.Handle(tid, traycode, prodcode)));
connect3.PublishEvent(new CFXEnvelope(workStartedEvent.Handle(tid, traycode, prodcode)));
connectVacuum.PublishEvent(new CFXEnvelope(workStartedEvent.Handle(tid, traycode, prodcode)));
_log.Info($"工作开始ID:{tid}");
connect2.PublishEvent(new CFXEnvelope(workCompletedEvent.Handle(tid, traycode, prodcode)));
connect2.PublishEvent(new CFXEnvelope(unitsDepartedEvent.Handle(traycode, prodcode)));
//预热炉工段开启
connect3.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(tid, "PreHeatOven", 1)));
_log.Info($"预热炉工段开始 ID:{tid}");
//真空箱工段开启
connectVacuum.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(tid, "vacuum", 1)));
_log.Info($"真空箱工段开始 ID:{tid}");
_log.Info("===================================================================================");
});
}
else
{
_log.Error($"PLC读取失败原因1{trayBytesResult.Message} 2{pordBytesResult1.Message} 3{pordBytesResult2.Message}");
_log.Error($"PLC读取失败原因1{trayBytesResult.Message} ");
}
//流程完成
}
else if (signalValue == 1003)
{
//读取托盘码
OperateResult<byte[]> trayBytesResult = _plc.ReadBytes(_plc.PLC23, "D5000", 10);
if (trayBytesResult.IsSuccess)
{
string traycode = Encoding.ASCII.GetString(trayBytesResult.Content);
traycode = traycode.Replace("?", "");
traycode = traycode.Replace("\0", "");
_log.Info($"托盘离开-RFID01-托盘号-[{traycode}]");
GlobalVar.Connect1Entity.InputQuantity++;
Task.Run(() =>
{
//取出work唯一guid(tid)
string stid = trayBindingService.TidGet(traycode);
if (!Guid.TryParse(stid, out Guid tid))
{
tid = Guid.Parse("11111111-1111-4111-9111-111111111111");
_log.Error("找不到对应的托盘信息赋值默认GUID");
}
var data = unitsProcessPLCDataGetBusiness.VacuumPlcDataGet();
_log.Info($"真空灌胶机数据 — " +
$"推胶速度设定值:{data.GluePushSpeedSetValue} " +
$"胶量设定值:[{data.GlueAmountSetValue1},{data.GlueAmountSetValue2},{data.GlueAmountSetValue3},{data.GlueAmountSetValue4},{data.GlueAmountSetValue5},{data.GlueAmountSetValue6},{data.GlueAmountSetValue7},{data.GlueAmountSetValue8},{data.GlueAmountSetValue9},{data.GlueAmountSetValue10}] " +
$"真空度设定值:{data.VacuumDegreeSetValue} 保压时长设定值:{data.PressureHoldTimeSetValue} " +
$"真空箱启用设定值:{data.VacuumIsUseSetValue} 总胶量设定值:{data.TotalGlueAmountSetValue} " +
$"A泵压力实际值:{data.PumpAPressureActValue} B泵压力实际值:{data.PumpBPressureActValue} " +
$"灌胶真空度实际值:{data.VacuumDegreeActValue} 配方数据:{data.FormulaData}");
connectVacuum.PublishEvent(new CFXEnvelope(unitsProcessedEvent.Handle(tid, cfxUnitProcessedDataGet.ProcessDataGetVacuum(data))));
_log.Info("===================================================================================");
});
//写入完成信号
bool res = _plc.PlcWrite(_plc.PLC22, "D800", 1004, DataTypeEnum.UInt16).IsSuccess;
if (!res)
{
_log.Error("RFID01 读胶机参数 PLC写入完成信号异常");
}
}
}
}
else
{
_log.Error($"上料提升机PLC读取信号异常,原因:{signalRes.Message}");
_log.Error($"隧道炉PLC读取信号异常,原因:{signalRes.Message}");
}
}
catch (Exception ex)

@ -1,7 +1,9 @@
using CFX;
using HslCommunication;
using Sln.Iot.CFX.CFXBusiness;
using Sln.Iot.CFX.CFXConnect;
using Sln.Iot.CFX.Event;
using Sln.Iot.Common;
using Sln.Iot.PLC;
using Sln.Iot.Repository.service;
using Sln.Iot.Serilog;
@ -11,6 +13,7 @@ using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using static System.Runtime.CompilerServices.RuntimeHelpers;
namespace Sln.Iot.Business
{
@ -24,15 +27,19 @@ namespace Sln.Iot.Business
private TrayBindingService trayBindingService = TrayBindingService.Instance;
private OvenPlcDataService ovenPlcDataService = OvenPlcDataService.Instance;
private VacuumInjectionPlcDataService vacuumInjectionPlcDataService = VacuumInjectionPlcDataService.Instance;
private UnitsProcessPLCDataGetBusiness unitsProcessPLCDataGetBusiness = UnitsProcessPLCDataGetBusiness.Instance;
private CFXUnitProcessedDataGet cfxUnitProcessedDataGet = CFXUnitProcessedDataGet.Instance;
private WorkStageStartedEvent workStageStartedEvent = new WorkStageStartedEvent();
private WorkStageCompletedEvent workStageCompletedEvent = new WorkStageCompletedEvent();
private CFXConnect1 connect1 = CFXConnect1.Instance;
private CFXConnect2 connect2 = CFXConnect2.Instance;
private CFXConnect3 connect3 = CFXConnect3.Instance;
private WorkCompletedEvent workCompletedEvent = new WorkCompletedEvent();
private UnitsDepartedEvent unitsDepartedEvent = new UnitsDepartedEvent();
private UnitsArrivedEvent unitsArrivedEvent = new UnitsArrivedEvent();
private WorkStartedEvent workStartedEvent = new WorkStartedEvent();
private CFXConnectOven ConnectOven = CFXConnectOven.Instance;
private CFXConnectVacuum ConnectVacuum = CFXConnectVacuum.Instance;
public RFID02Business()
@ -50,16 +57,17 @@ namespace Sln.Iot.Business
{
// 定时任务逻辑
//读取信号
OperateResult<short> signalRes = _plc.ReadInt16(_plc.DeltaInstance1, "D800");
OperateResult<short> signalRes = _plc.ReadInt16(_plc.PLC23, "D900");
//成功验证
if (signalRes.IsSuccess)
{
short signalValue = signalRes.Content;
//_log.Info($"RFID02:{signalValue}");
//如果有读取信号
if (signalValue == 2001)
{
//读取托盘码
OperateResult<byte[]> trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance1, "D5000", 10);
OperateResult<byte[]> trayBytesResult = _plc.ReadBytes(_plc.PLC23, "D5000", 10);
//成功验证
if (trayBytesResult.IsSuccess)
{
@ -69,55 +77,47 @@ namespace Sln.Iot.Business
traycode = traycode.Replace("\0", "");
_log.Info($"托盘到达-RFID02-托盘号-[{traycode}]");
//sql更新
//记录胶机1真空箱内到达时间
trayBindingService.UpDateTime(DateTime.Now.ToString(), traycode, "2");
bool res = false;
//写入完成信号
res = _plc.PlcWrite(_plc.PLC23, "D900", 2002, DataTypeEnum.UInt16).IsSuccess;
if (!res)
{
_log.Error("真空箱内写入完成信号异常");
}
//取出work唯一guid(tid)
string stid = trayBindingService.TidGet(traycode);
if(!Guid.TryParse(stid, out Guid tid))
if (!Guid.TryParse(stid, out Guid tid))
{
tid = Guid.Parse("11111111-1111-4111-9111-111111111111");
_log.Error("找不到对应的托盘信息赋值默认GUID");
}
bool res = false;
//写入完成信号
res = _plc.PlcWrite(_plc.DeltaInstance1, "D800", 2002, DataTypeEnum.UInt16).IsSuccess;
if (!res)
{
_log.Error("胶机1真空箱内写入完成信号异常");
}
string[] prodcode = trayBindingService.ProdCodeGet(traycode);
//CFX
Task.Run(() =>
{
//预热炉工段完成事件
connect3.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(tid, "PreHeatOven", 1)));
_log.Info($"预热炉工段完成 ID:{tid}");
//真空箱1工段开启
connect1.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(tid, "VacuumInjection1", 1)));
_log.Info($"真空箱1工段开始 ID:{tid}");
//真空箱工段完成事件
ConnectVacuum.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(tid, "vacuum", 1)));
_log.Info($"真空箱工段完成 ID:{tid}");
ConnectVacuum.PublishEvent(new CFXEnvelope(workCompletedEvent.Handle(tid, traycode, prodcode)));
_log.Info($"工作完成事件发布 ID:{tid}");
ConnectVacuum.PublishEvent(new CFXEnvelope(unitsDepartedEvent.Handle(traycode, prodcode)));
_log.Info($"单元离站 ID:{tid}");
//预热炉数据采集
var data = unitsProcessPLCDataGetBusiness.PreHeatOvenPlcDataGet();
ovenPlcDataService.InsertData(stid, data);
_log.Info($"预热炉数据采集, 预热炉温度:{data}");
//真空箱1数据采集
var data2 = unitsProcessPLCDataGetBusiness.Vacuum1PlcDataGet();
vacuumInjectionPlcDataService.InsertData(stid, data2);
_log.Info($"真空箱1温度数据采集\n" +
$"胶量1:{data2.GlueAmountSetValue1}\t" +
$"推胶速度1:{data2.GluePushSpeedSetValue1}\n" +
$"A1温度1:{data2.BarrelA1TempActValue1}\t" +
$"A2温度1:{data2.BarrelA2TempActValue1}\t" +
$"B1温度1:{data2.BarrelB1TempActValue1}\t" +
$"B2温度1:{data2.BarrelB2TempActValue1}\n" +
$"A泵压力1:{data2.PumpAPressureActValue1}\t" +
$"B泵压力1:{data2.PumpBPressureActValue1}\t" +
$"真空度1:{data2.VacuumDegreeActValue1}\t" +
$"保压时间1:{data2.PressureHoldTimeSetValue1}");
//单元抵达事件
ConnectOven.PublishEvent(new CFXEnvelope(unitsArrivedEvent.Handle(traycode, prodcode)));
//工作开始事件
ConnectOven.PublishEvent(new CFXEnvelope(workStartedEvent.Handle(tid, traycode, prodcode)));
_log.Info($"隧道炉工作开始ID:{tid}");
//隧道炉工段开启
ConnectOven.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(tid, "oven", 1)));
_log.Info($"隧道炉工段开始 ID:{tid}");
_log.Info("===================================================================================");
});
//CFX
@ -128,17 +128,64 @@ namespace Sln.Iot.Business
}
//流程完成
}
else if (signalValue == 2003)
{
//读取托盘码
OperateResult<byte[]> trayBytesResult = _plc.ReadBytes(_plc.PLC23, "D5000", 10);
if (trayBytesResult.IsSuccess)
{
string traycode = Encoding.ASCII.GetString(trayBytesResult.Content);
traycode = traycode.Replace("?", "");
traycode = traycode.Replace("\0", "");
_log.Info($"托盘离开-RFID02-托盘号-[{traycode}]");
GlobalVar.Connect1Entity.PassQuantity++;
GlobalVar.Connect2Entity.InputQuantity++;
//计算预热炉停留时长: time2 - time1
string time2 = trayBindingService.GetTimeByTrayCode(traycode, "2");
string time1 = trayBindingService.GetTimeByTrayCode(traycode, "1");
ushort spanSecond = 0;
if (!string.IsNullOrEmpty(time2) && !string.IsNullOrEmpty(time1))
{
TimeSpan span = Convert.ToDateTime(time2) - Convert.ToDateTime(time1);
spanSecond = (ushort)span.TotalSeconds;
GlobalVar.Connect1Entity.CycleTime = spanSecond;
_log.Info($"真空箱停留时长: [{spanSecond}]秒");
}
bool res = _plc.PlcWrite(_plc.PLC23, "D910", spanSecond, DataTypeEnum.UInt16).IsSuccess;
if (!res)
{
_log.Error("RFID02 发送真空箱停留时长 PLC写入异常");
}
res = false;
//写入完成信号
res = _plc.PlcWrite(_plc.PLC23, "D900", 2004, DataTypeEnum.UInt16).IsSuccess;
if (!res)
{
_log.Error("RFID02 发送真空箱停留时长 PLC写入完成信号异常");
}
_log.Info("===================================================================================");
}
else
{
_log.Error($"PLC读取失败原因{trayBytesResult.Message}");
}
}
}
else
{
_log.Error($"胶机1真空箱内PLC读取信号异常,原因:{signalRes.Message}");
_log.Error($"真空箱内PLC读取信号异常,原因:{signalRes.Message}");
}
}
catch (Exception ex)
{
_log.Error("RFID02业务出现异常", ex);
}
}
}
}

@ -1,5 +1,6 @@
using CFX;
using HslCommunication;
using Sln.Iot.CFX.CFXBusiness;
using Sln.Iot.CFX.CFXConnect;
using Sln.Iot.CFX.Event;
using Sln.Iot.Common;
@ -24,12 +25,18 @@ namespace Sln.Iot.Business
private readonly SerilogHelper _log = SerilogHelper.Instance;
private UnitsProcessPLCDataGetBusiness unitsProcessPLCDataGetBusiness = UnitsProcessPLCDataGetBusiness.Instance;
private CFXUnitProcessedDataGet cfxUnitProcessedDataGet = CFXUnitProcessedDataGet.Instance;
private TrayBindingService trayBindingService = TrayBindingService.Instance;
private WorkStageStartedEvent workStageStartedEvent = new WorkStageStartedEvent();
private WorkStageCompletedEvent workStageCompletedEvent = new WorkStageCompletedEvent();
private CFXConnect1 connect1 = CFXConnect1.Instance;
private CFXConnect2 connect2 = CFXConnect2.Instance;
private CFXConnect3 connect3 = CFXConnect3.Instance;
private WorkCompletedEvent workCompletedEvent = new WorkCompletedEvent();
private UnitsDepartedEvent unitsDepartedEvent = new UnitsDepartedEvent();
private UnitsProcessedEvent unitsProcessedEvent = new UnitsProcessedEvent();
private CFXConnectOven ConnectOven = CFXConnectOven.Instance;
public RFID03Business()
{
@ -46,16 +53,17 @@ namespace Sln.Iot.Business
{
// 定时任务逻辑
//读取信号
OperateResult<short> signalRes = _plc.ReadInt16(_plc.DeltaInstance1, "D802");
OperateResult<short> signalRes = _plc.ReadInt16(_plc.PLC24, "D800");
//成功验证
if (signalRes.IsSuccess)
{
short signalValue = signalRes.Content;
//_log.Info($"RFID03:{signalValue}");
//如果有读取信号
if (signalValue == 3001)
{
//读取托盘码
OperateResult<byte[]> trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance1, "D5020", 10);
OperateResult<byte[]> trayBytesResult = _plc.ReadBytes(_plc.PLC24, "D5000", 10);
//成功验证
if (trayBytesResult.IsSuccess)
{
@ -65,6 +73,19 @@ namespace Sln.Iot.Business
traycode = traycode.Replace("\0", "");
_log.Info($"托盘到达-RFID03-托盘号-[{traycode}]");
bool res = trayBindingService.UpDateTime(DateTime.Now.ToString(), traycode, "3");
if (!res)
{
_log.Error("隧道炉外时间更新失败(未扫托盘号)");
}
//写入完成信号
res = _plc.PlcWrite(_plc.PLC24, "D800", 3002, DataTypeEnum.UInt16).IsSuccess;
if (!res)
{
_log.Error("隧道炉外写入完成信号异常");
}
//sql更新
//取出work唯一guid(tid)
string stid = trayBindingService.TidGet(traycode);
@ -73,30 +94,20 @@ namespace Sln.Iot.Business
tid = Guid.Parse("11111111-1111-4111-9111-111111111111");
_log.Error("找不到对应的托盘信息赋值默认GUID");
}
bool res = trayBindingService.UpDateTime(DateTime.Now.ToString(), traycode, "1");
if (!res)
{
_log.Error("胶机1真空箱外时间更新失败未扫托盘号");
}
//写入完成信号
res = _plc.PlcWrite(_plc.DeltaInstance1, "D802", 3002, DataTypeEnum.UInt16).IsSuccess;
if (!res)
{
_log.Error("胶机1真空箱外写入完成信号异常");
}
GlobalVar.Connect1Entity.CycleTime = CommonUtil.AddRandom(AppConfigSetting._config.CycleTime1, 300);
string[] prodcode = trayBindingService.ProdCodeGet(traycode);
//CFX
Task.Run(() =>
{
//真空箱1工段完成事件
connect1.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(tid, "VacuumInjection1", 1)));
_log.Info($"真空箱1工段完成, {tid}");
//预固炉工段开启
connect3.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(tid, "PreCureOven", 2)));
_log.Info($"预固炉工段开启, {tid}");
//烤炉工段完成事件
ConnectOven.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(tid, "oven", 1)));
_log.Info($"隧道炉工段完成 ID:{tid}");
ConnectOven.PublishEvent(new CFXEnvelope(workCompletedEvent.Handle(tid, traycode, prodcode)));
_log.Info($"工作完成事件发布 ID:{tid}");
ConnectOven.PublishEvent(new CFXEnvelope(unitsDepartedEvent.Handle(traycode, prodcode)));
_log.Info($"单元离站 ID:{tid}");
_log.Info("===================================================================================");
});
}
else
@ -105,15 +116,77 @@ namespace Sln.Iot.Business
}
//流程完成
}
else if (signalValue == 3003)
{
//读取托盘码
OperateResult<byte[]> trayBytesResult = _plc.ReadBytes(_plc.PLC24, "D5000", 10);
if (trayBytesResult.IsSuccess)
{
string traycode = Encoding.ASCII.GetString(trayBytesResult.Content);
traycode = traycode.Replace("?", "");
traycode = traycode.Replace("\0", "");
_log.Info($"托盘离开-RFID03-托盘号-[{traycode}]");
GlobalVar.Connect2Entity.PassQuantity++;
//计算真空箱1停留时长: time3 - time2
string time3 = trayBindingService.GetTimeByTrayCode(traycode, "3");
string time2 = trayBindingService.GetTimeByTrayCode(traycode, "2");
ushort spanSecond = 0;
if (!string.IsNullOrEmpty(time3) && !string.IsNullOrEmpty(time2))
{
TimeSpan span = Convert.ToDateTime(time3) - Convert.ToDateTime(time2);
spanSecond = (ushort)span.TotalSeconds;
GlobalVar.Connect2Entity.CycleTime = spanSecond;
_log.Info($"烤炉停留时长: [{spanSecond}]秒");
}
bool res = _plc.PlcWrite(_plc.PLC24, "D810", spanSecond, DataTypeEnum.UInt16).IsSuccess;
if (!res)
{
_log.Error("RFID03 发送烤炉停留时长 PLC写入异常");
}
res = false;
//写入完成信号
res = _plc.PlcWrite(_plc.PLC24, "D800", 3004, DataTypeEnum.UInt16).IsSuccess;
if (!res)
{
_log.Error("RFID03 发送烤炉停留时长 PLC写入完成信号异常");
}
Task.Run(() =>
{
//取出work唯一guid(tid)
string stid = trayBindingService.TidGet(traycode);
if (!Guid.TryParse(stid, out Guid tid))
{
tid = Guid.Parse("11111111-1111-4111-9111-111111111111");
_log.Error("找不到对应的托盘信息赋值默认GUID");
}
var data = unitsProcessPLCDataGetBusiness.OvenPlcDataGet();
_log.Info($"隧道炉数据 — " +
$"隧道炉1温度设定值:{data.CureOven1SetValue} 隧道炉2温度设定值:{data.CureOven2SetValue} " +
$"隧道炉1温度实际值:{data.CureOven1ActValue} 隧道炉2温度实际值:{data.CureOven2ActValue}");
ConnectOven.PublishEvent(new CFXEnvelope(unitsProcessedEvent.Handle(tid, cfxUnitProcessedDataGet.ProcessDataGetOven(data))));
_log.Info("===================================================================================");
});
}
else
{
_log.Error($"PLC读取失败原因{trayBytesResult.Message}");
}
}
}
else
{
_log.Error($"胶机1真空箱外PLC读取信号异常,原因:{signalRes.Message}");
_log.Error($"隧道炉外PLC读取信号异常,原因:{signalRes.Message}");
}
}
catch (Exception ex)
{
_log.Error("RFID0业务出现异常", ex);
_log.Error("RFID03业务出现异常", ex);
}
}
}

@ -1,181 +0,0 @@
using CFX;
using HslCommunication;
using Sln.Iot.CFX.CFXConnect;
using Sln.Iot.CFX.Event;
using Sln.Iot.PLC;
using Sln.Iot.Repository.service;
using Sln.Iot.Serilog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TouchSocket.Core;
using static System.Runtime.CompilerServices.RuntimeHelpers;
namespace Sln.Iot.Business
{
public class RFID04Business
{
private Timer _timer;
private readonly PLCConnect _plc = PLCConnect.Instance;
private readonly SerilogHelper _log = SerilogHelper.Instance;
private OvenPlcDataService ovenPlcDataService = OvenPlcDataService.Instance;
private VacuumInjectionPlcDataService vacuumInjectionPlcDataService = VacuumInjectionPlcDataService.Instance;
private UnitsProcessPLCDataGetBusiness unitsProcessPLCDataGetBusiness = UnitsProcessPLCDataGetBusiness.Instance;
private TrayBindingService trayBindingService = TrayBindingService.Instance;
private WorkStageStartedEvent workStageStartedEvent = new WorkStageStartedEvent();
private WorkStageCompletedEvent workStageCompletedEvent = new WorkStageCompletedEvent();
private CFXConnect1 connect1 = CFXConnect1.Instance;
private CFXConnect2 connect2 = CFXConnect2.Instance;
private CFXConnect3 connect3 = CFXConnect3.Instance;
public RFID04Business()
{
_timer = new Timer(TimerCallback, null, 0, 2000);
}
/// <summary>
/// RFID04胶机2真空箱前数据处理流程
/// </summary>
/// <param name="state"></param>
public void TimerCallback(object? state)
{
try
{
// 定时任务逻辑
//读取信号
OperateResult<short> signalRes = _plc.ReadInt16(_plc.DeltaInstance2, "D800");
//成功验证
if (signalRes.IsSuccess)
{
short signalValue = signalRes.Content;
// 如果有读取信号
// 读电子标签
if (signalValue == 4001)
{
//读取托盘码和产品码
OperateResult<byte[]> trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance2, "D5000", 10);
//成功验证
if (trayBytesResult.IsSuccess)
{
//转换托盘吗
string traycode = Encoding.ASCII.GetString(trayBytesResult.Content);
traycode = traycode.Replace("?", "");
traycode = traycode.Replace("\0", "");
_log.Info($"托盘到达-RFID04-托盘号-[{traycode}]");
//sql更新
//取出work唯一guid(tid)
string stid = trayBindingService.TidGet(traycode);
if (!Guid.TryParse(stid, out Guid tid))
{
tid = Guid.Parse("11111111-1111-4111-9111-111111111111");
_log.Error("找不到对应的托盘信息赋值默认GUID");
}
bool res = trayBindingService.UpDateTime(DateTime.Now.ToString(), traycode, "2");
if (!res)
{
_log.Error("胶机2真空箱前时间数据库更新异常");
}
//写入完成信号
res = _plc.PlcWrite(_plc.DeltaInstance2, "D800", 4002, DataTypeEnum.UInt16).IsSuccess;
if (!res)
{
_log.Error("胶机2真空箱前开始时间PLC写入完成信号异常");
}
//CFX
Task.Run(() =>
{
//预固炉工段完成事件
connect3.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(tid, "PreCureOven", 2)));
_log.Info($"预固炉工段完成, {tid}");
//真空箱2工段开启
connect1.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(tid, "VacuumInjection2", 2)));
_log.Info($"真空箱2工段开启, {tid}");
//预固炉数据采集
var data = unitsProcessPLCDataGetBusiness.PreCureOvenPlcDataGet();
ovenPlcDataService.UpdateDataPreCure(stid, data);
_log.Info($"预固炉温度数据采集\n" +
$"预固炉1温度:{data.PreCureOven1TempActValue}\t" +
$"预固炉2温度:{data.PreCureOven2TempActValue}\t" +
$"预固炉3温度:{data.PreCureOven3TempActValue}\t" +
$"预固炉4温度:{data.PreCureOven4TempActValue}\n");
});
}
else
{
_log.Error($"PLC读取失败原因{trayBytesResult.Message}");
}
//流程完成
}
// 计算时间差
if (signalValue == 4003)
{
//读取托盘码
OperateResult<byte[]> trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance2, "D5000", 10);
//成功验证
if (trayBytesResult.IsSuccess)
{
//转换托盘吗
string traycode = Encoding.ASCII.GetString(trayBytesResult.Content);
traycode = traycode.Replace("?", "");
traycode = traycode.Replace("\0", "");
_log.Info($"托盘号-[{traycode}]-开始计算时间");
//sql更新
string nowTime = DateTime.Now.ToString();
bool res = TrayBindingService.Instance.UpDateTime(nowTime, traycode, "3");
if (!res)
{
_log.Error("胶机2真空箱前时间计算数据库更新异常");
}
//取之前存的时间
string time2 = TrayBindingService.Instance.GetTime2ByTrayCode(traycode);
ushort spanSecond = 0;
if (!time2.IsNullOrEmpty())
{
//计算时间差
TimeSpan span = Convert.ToDateTime(time2) - Convert.ToDateTime(nowTime);
spanSecond = (ushort)span.TotalSeconds;
_log.Info($"预固炉时间差: [" + spanSecond + "] 秒");
}
res = _plc.PlcWrite(_plc.DeltaInstance2, "D810", spanSecond, DataTypeEnum.UInt16).IsSuccess;
if (!res)
{
_log.Error("胶机2真空箱前时间计算结果PLC写入异常");
}
//写入完成信号
res = _plc.PlcWrite(_plc.DeltaInstance2, "D800", 4004, DataTypeEnum.UInt16).IsSuccess;
if (!res)
{
_log.Error("胶机2真空箱前时间计算PLC写入完成信号异常");
}
}
else
{
_log.Error($"PLC读取失败原因{trayBytesResult.Message}");
}
//流程完成
}
}
else
{
_log.Error($"胶机2真空箱前开始时间读PLC取信号异常,原因:{signalRes.Message}");
}
}
catch (Exception ex)
{
_log.Error("RFID0业务出现异常", ex);
}
}
}
}

@ -1,161 +0,0 @@
using CFX;
using HslCommunication;
using Sln.Iot.CFX.CFXBusiness;
using Sln.Iot.CFX.CFXConnect;
using Sln.Iot.CFX.Event;
using Sln.Iot.PLC;
using Sln.Iot.Repository.service;
using Sln.Iot.Serilog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sln.Iot.Business
{
public class RFID05Business
{
private Timer _timer;
private readonly PLCConnect _plc = PLCConnect.Instance;
private readonly SerilogHelper _log = SerilogHelper.Instance;
private TrayBindingService trayBindingService = TrayBindingService.Instance;
private OvenPlcDataService ovenPlcDataService = OvenPlcDataService.Instance;
private VacuumInjectionPlcDataService vacuumInjectionPlcDataService = VacuumInjectionPlcDataService.Instance;
private UnitsProcessPLCDataGetBusiness unitsProcessPLCDataGetBusiness = UnitsProcessPLCDataGetBusiness.Instance;
private CFXUnitProcessedDataGet cFXUnitProcessedDataGet = CFXUnitProcessedDataGet.Instance;
private WorkStageStartedEvent workStageStartedEvent = new WorkStageStartedEvent();
private WorkStageCompletedEvent workStageCompletedEvent = new WorkStageCompletedEvent();
private UnitsProcessedEvent unitsProcessedEvent = new UnitsProcessedEvent();
private CFXConnect1 connect1 = CFXConnect1.Instance;
private CFXConnect2 connect2 = CFXConnect2.Instance;
private CFXConnect3 connect3 = CFXConnect3.Instance;
public RFID05Business()
{
_timer = new Timer(TimerCallback, null, 0, 2000);
}
/// <summary>
/// RFID05胶机2真空箱后数据处理流程
/// </summary>
/// <param name="state"></param>
public void TimerCallback(object? state)
{
try
{
// 定时任务逻辑
//读取信号
OperateResult<short> signalRes = _plc.ReadInt16(_plc.DeltaInstance2, "D802");
//成功验证
if (signalRes.IsSuccess)
{
short signalValue = signalRes.Content;
//如果有读取信号
if (signalValue == 5001)
{
//读取托盘码
OperateResult<byte[]> trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance2, "D5020", 10);
//成功验证
if (trayBytesResult.IsSuccess)
{
//转换托盘吗
string traycode = Encoding.ASCII.GetString(trayBytesResult.Content);
traycode = traycode.Replace("?", "");
traycode = traycode.Replace("\0", "");
_log.Info($"托盘到达-RFID05-托盘号-[{traycode}]");
//sql更新
//取出work唯一guid(tid)
string stid = trayBindingService.TidGet(traycode);
if (!Guid.TryParse(stid, out Guid tid))
{
tid = Guid.Parse("11111111-1111-4111-9111-111111111111");
_log.Error("找不到对应的托盘信息赋值默认GUID");
}
bool res = trayBindingService.UpDateTime(DateTime.Now.ToString(), traycode, "4");
if (!res)
{
_log.Error("胶机2真空箱后数据库写入异常");
}
//写入完成信号
res = _plc.PlcWrite(_plc.DeltaInstance2, "D802", 5002, DataTypeEnum.UInt16).IsSuccess;
if (!res)
{
_log.Error("胶机2真空箱后PLC写入完成信号异常");
}
//CFX
Task.Run(() =>
{
//真空箱2工段完成事件
connect1.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(tid, "VacuumInjection2", 2)));
_log.Info($"真空箱2工段完成, {tid}");
//固化炉工段开启
connect3.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(tid, "CureOven", 3)));
_log.Info($"固化炉工段开启, {tid}");
//真空箱获取并上传数据
var unitsData1 = vacuumInjectionPlcDataService.GetData(stid);
var unitsData2 = unitsProcessPLCDataGetBusiness.Vacuum2PlcDataGet();
unitsData1.GlueAmountSetValue2 = unitsData2.GlueAmountSetValue2;
unitsData1.GluePushSpeedSetValue2 = unitsData2.GluePushSpeedSetValue2;
unitsData1.BarrelA1TempActValue2 = unitsData2.BarrelA1TempActValue2;
unitsData1.BarrelA2TempActValue2 = unitsData2.BarrelA2TempActValue2;
unitsData1.BarrelB1TempActValue2 = unitsData2.BarrelB1TempActValue2;
unitsData1.BarrelB2TempActValue2 = unitsData2.BarrelB2TempActValue2;
unitsData1.PumpAPressureActValue2 = unitsData2.PumpAPressureActValue2;
unitsData1.PumpBPressureActValue2 = unitsData2.PumpBPressureActValue2;
unitsData1.VacuumDegreeActValue2 = unitsData2.VacuumDegreeActValue2;
unitsData1.PressureHoldTimeSetValue2 = unitsData2.PressureHoldTimeSetValue2;
connect1.PublishEvent(new CFXEnvelope(unitsProcessedEvent.Handle(tid, cFXUnitProcessedDataGet.ProcessDataGet1(unitsData1))));
_log.Info($"真空箱温度数据上传\n" +
$"胶量1:{unitsData1.GlueAmountSetValue1}\t" +
$"推胶速度1:{unitsData1.GluePushSpeedSetValue1}\n" +
$"A1温度1:{unitsData1.BarrelA1TempActValue1}\t" +
$"A2温度1:{unitsData1.BarrelA2TempActValue1}\t" +
$"B1温度1:{unitsData1.BarrelB1TempActValue1}\t" +
$"B2温度1:{unitsData1.BarrelB2TempActValue1}\n" +
$"A泵压力1:{unitsData1.PumpAPressureActValue1}\t" +
$"B泵压力1:{unitsData1.PumpBPressureActValue1}\t" +
$"真空度1:{unitsData1.VacuumDegreeActValue1}\t" +
$"保压时间1:{unitsData1.PressureHoldTimeSetValue1}\n" +
$"胶量2:{unitsData1.GlueAmountSetValue2}\t" +
$"推胶速度2:{unitsData1.GluePushSpeedSetValue2}\n" +
$"A1温度2:{unitsData1.BarrelA1TempActValue2}\t" +
$"A2温度2:{unitsData1.BarrelA2TempActValue2}\t" +
$"B1温度2:{unitsData1.BarrelB1TempActValue2}\t" +
$"B2温度2:{unitsData1.BarrelB2TempActValue2}\n" +
$"A泵压力2:{unitsData1.PumpAPressureActValue2}\t" +
$"B泵压力2:{unitsData1.PumpBPressureActValue2}\t" +
$"真空度2:{unitsData1.VacuumDegreeActValue2}\t" +
$"保压时间2:{unitsData1.PressureHoldTimeSetValue2}");
});
}
else
{
_log.Error($"PLC读取失败原因{trayBytesResult.Message}");
}
//流程完成
}
}
else
{
_log.Error($"胶机2真空箱后PLC读取信号异常,原因:{signalRes.Message}");
}
}
catch (Exception ex)
{
_log.Error("RFID0业务出现异常", ex);
}
}
}
}

@ -1,177 +0,0 @@
using CFX;
using CFX.Structures;
using CFX.Structures.PressInsertion;
using HslCommunication;
using Sln.Iot.CFX.CFXBusiness;
using Sln.Iot.CFX.CFXConnect;
using Sln.Iot.CFX.Event;
using Sln.Iot.Common;
using Sln.Iot.Config;
using Sln.Iot.PLC;
using Sln.Iot.Repository.service;
using Sln.Iot.Serilog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sln.Iot.Business
{
public class RFID06Business
{
private Timer _timer;
private readonly PLCConnect _plc = PLCConnect.Instance;
private readonly SerilogHelper _log = SerilogHelper.Instance;
//CFX数据采集业务
private UnitsProcessPLCDataGetBusiness unitsProcessPLCDataGetBusiness = UnitsProcessPLCDataGetBusiness.Instance;
private CFXUnitProcessedDataGet cFXUnitProcessedDataGet = CFXUnitProcessedDataGet.Instance;
//SQL服务
private OvenPlcDataService ovenPlcDataService = OvenPlcDataService.Instance;
private VacuumInjectionPlcDataService vacuumInjectionPlcDataService = VacuumInjectionPlcDataService.Instance;
private TrayBindingService trayBindingService = TrayBindingService.Instance;
//CFX事件
private UnitsDepartedEvent unitsDepartedEvent = new UnitsDepartedEvent();
private WorkStageCompletedEvent workStageCompletedEvent = new WorkStageCompletedEvent();
private UnitsProcessedEvent unitsProcessedEvent = new UnitsProcessedEvent();
private WorkCompletedEvent workCompletedEvent = new WorkCompletedEvent();
private UnitsArrivedEvent unitsArrivedEvent = new UnitsArrivedEvent();
private WorkStartedEvent workStartedEvent = new WorkStartedEvent();
// CFX连接
private CFXConnect1 connect1 = CFXConnect1.Instance;
private CFXConnect3 connect3 = CFXConnect3.Instance;
private CFXConnect4 connect4 = CFXConnect4.Instance;
public RFID06Business()
{
_timer = new Timer(TimerCallback, null, 0, 2000);
}
/// <summary>
/// RFID06下料提升机数据处理流程
/// </summary>
/// <param name="state"></param>
public void TimerCallback(object? state)
{
try
{
// 定时任务逻辑
//读取信号
OperateResult<short> signalRes = _plc.ReadInt16(_plc.DeltaInstance4, "D500");
//成功验证
if (signalRes.IsSuccess)
{
short signalValue = signalRes.Content;
//如果有读取信号
if (signalValue == 6001)
{
//读取托盘码和产品码
OperateResult<byte[]> trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance4, "D5000", 10);
//成功验证
if (trayBytesResult.IsSuccess)
{
//转换托盘吗
string traycode = Encoding.ASCII.GetString(trayBytesResult.Content);
traycode = traycode.Replace("?", "");
traycode = traycode.Replace("\0", "");
_log.Info($"托盘到达-RFID06-托盘号-[{traycode}]");
//sql更新
//取出work唯一guid(tid)
string stid = trayBindingService.TidGet(traycode);
if (!Guid.TryParse(stid, out Guid tid))
{
tid = Guid.Parse("11111111-1111-4111-9111-111111111111");
_log.Error("找不到对应的托盘信息赋值默认GUID");
}
string[] prodcode = trayBindingService.ProdCodeGet(traycode);
bool res = trayBindingService.TrayCodeDelete(traycode);
if (!res)
{
_log.Error("下料提升机绑定数据删除异常或删除条数为0");
}
//写入完成信号
res = _plc.PlcWrite(_plc.DeltaInstance4, "D500", 6002, DataTypeEnum.UInt16).IsSuccess;
if (!res)
{
_log.Error("下料提升机PLC写入完成信号异常");
}
GlobalVar.Connect3Entity.CycleTime = CommonUtil.AddRandom(AppConfigSetting._config.CycleTime3, 1000);
GlobalVar.Connect4Entity.CycleTime = CommonUtil.AddRandom(AppConfigSetting._config.CycleTime4, 5);
//CFX
Task.Run(() =>
{
//固化炉工段完成事件
connect3.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(tid, "CureOven", 3)));
_log.Info($"固化炉工段完成, {tid}");
connect4.PublishEvent(new CFXEnvelope(unitsArrivedEvent.Handle(traycode, prodcode)));
connect4.PublishEvent(new CFXEnvelope(workStartedEvent.Handle(tid, traycode, prodcode)));
//工单完成事件
connect1.PublishEvent(new CFXEnvelope(workCompletedEvent.Handle(tid, traycode, prodcode)));
connect4.PublishEvent(new CFXEnvelope(workCompletedEvent.Handle(tid, traycode, prodcode)));
connect3.PublishEvent(new CFXEnvelope(workCompletedEvent.Handle(tid, traycode, prodcode)));
_log.Info($"工单完成 ID:{tid}");
//单元离站事件
connect1.PublishEvent(new CFXEnvelope(unitsDepartedEvent.Handle(traycode, prodcode)));
connect4.PublishEvent(new CFXEnvelope(unitsDepartedEvent.Handle(traycode, prodcode)));
connect3.PublishEvent(new CFXEnvelope(unitsDepartedEvent.Handle(traycode, prodcode)));
_log.Info($"{traycode} 单元离站 ");
//固化炉数据采集
var unitsdata = unitsProcessPLCDataGetBusiness.CureOvenPlcDataGet();
//存数据库里整合
ovenPlcDataService.UpdateDataCure(stid, unitsdata);
//取出整合数据
unitsdata = ovenPlcDataService.GetData(stid);
connect3.PublishEvent(new CFXEnvelope(unitsProcessedEvent.Handle(tid, cFXUnitProcessedDataGet.ProcessDataGet3(unitsdata))));
_log.Info($"隧道烤箱温度数据上传\n" +
$"预热炉温度:{unitsdata.PreheatOvenTempActValue}\n" +
$"预固炉1温度:{unitsdata.PreCureOven1TempActValue}\t" +
$"预固炉2温度:{unitsdata.PreCureOven2TempActValue}\t" +
$"预固炉3温度:{unitsdata.PreCureOven3TempActValue}\t" +
$"预固炉4温度:{unitsdata.PreCureOven4TempActValue}\n" +
$"固化炉1温度:{unitsdata.CureOven1TempActValue}\t" +
$"固化炉2温度:{unitsdata.CureOven2TempActValue}\t" +
$"固化炉3温度:{unitsdata.CureOven3TempActValue}\t" +
$"固化炉4温度:{unitsdata.CureOven4TempActValue}");
});
}
else
{
_log.Error($"PLC读取失败原因{trayBytesResult.Message}");
}
//流程完成
}
}
else
{
_log.Error($"下料提升机PLC读取信号异常,原因:{signalRes.Message}");
}
}
catch (Exception ex)
{
_log.Error("RFID0业务出现异常", ex);
}
}
}
}

@ -25,7 +25,7 @@ namespace Sln.Iot.Business
private readonly RecipeActivatedEvent recipeActivatedEvent = new RecipeActivatedEvent();
private readonly RecipeModifiedEvent recipeModifiedEvent = new RecipeModifiedEvent();
private readonly CFXConnect1 connect1 = CFXConnect1.Instance;
private readonly CFXConnectVacuum connect1 = CFXConnectVacuum.Instance;
public RecipeBusiness()
{
@ -39,29 +39,22 @@ namespace Sln.Iot.Business
public void TimerCallback(object? state)
{
string recipeName1 = "recipeName";
string recipeName2 = "recipeName";
try
{
var Result1 = _plc.ReadInt16(_plc.DeltaInstance1, "D6");
var Result2 = _plc.ReadInt16(_plc.DeltaInstance2, "D6");
var Result1 = _plc.ReadInt16(_plc.PLC21, "D8");
//_log.Info($"真空箱1配方标识{Result1.Content}");
//_log.Info($"真空箱2配方标识{Result2.Content}");
//_log.Info($"————————————————————");
if (Result1.Content != 0 || Result2.Content != 0)
if (Result1.Content != 0)
{
//获取现在激活的配方
var res1 = _plc.ReadBytes(_plc.DeltaInstance1, "D600", 10);
var res2 = _plc.ReadBytes(_plc.DeltaInstance2, "D600", 10);
var res1 = _plc.ReadBytes(_plc.PLC21, "D12600", 10);
if (res1.IsSuccess)
{
recipeName1 = Encoding.ASCII.GetString(ToolBusiness.SwapAdjacentBytes(res1.Content));
}
if (res2.IsSuccess)
{
recipeName2 = Encoding.ASCII.GetString(ToolBusiness.SwapAdjacentBytes(res2.Content));
}
}
if (Result1.IsSuccess)
@ -70,42 +63,22 @@ namespace Sln.Iot.Business
{
//发布消息
connect1.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle(recipeName1)));
_plc.PlcWrite(_plc.DeltaInstance1, "D6", 0, DataTypeEnum.Int16);
_plc.PlcWrite(_plc.PLC21, "D8", 0, DataTypeEnum.Int16);
_log.Info($"真空箱1配方修改{recipeName1}");
}
else if (Result1.Content == 4)
{
//发布消息
connect1.PublishEvent(new CFXEnvelope(recipeActivatedEvent.Handle(recipeName1, "VacuumInjection1", 1)));
_plc.PlcWrite(_plc.DeltaInstance1, "D6", 0, DataTypeEnum.Int16);
connect1.PublishEvent(new CFXEnvelope(recipeActivatedEvent.Handle(recipeName1, "vacuum", 1)));
_plc.PlcWrite(_plc.PLC21, "D8", 0, DataTypeEnum.Int16);
_log.Info($"真空箱1配方激活{recipeName1}");
}
}
if (Result2.IsSuccess)
{
if (Result2.Content == 2)
{
//发布消息
connect1.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle(recipeName2)));
_plc.PlcWrite(_plc.DeltaInstance2, "D6", 0, DataTypeEnum.Int16);
_log.Info($"真空箱2配方修改{recipeName2}");
}
else if (Result2.Content == 4)
{
//发布消息
connect1.PublishEvent(new CFXEnvelope(recipeActivatedEvent.Handle(recipeName2, "VacuumInjection2", 2)));
_plc.PlcWrite(_plc.DeltaInstance2, "D6", 0, DataTypeEnum.Int16);
_log.Info($"真空箱2配方激活{recipeName2}");
}
}
}
catch (Exception ex)
{
_log.Error($"RecipeBusiness定时任务异常{ex.Message}");
}
}
}
}

@ -0,0 +1,78 @@
using Sln.Iot.Business.Entity;
using Sln.Iot.Repository.service;
using Sln.Iot.Serilog;
using SQLitePCL;
using System.Reflection;
using System.Text.Json;
using static System.Runtime.CompilerServices.RuntimeHelpers;
namespace Sln.Iot.Business
{
/// <summary>
/// TCPRFID信息绑定
/// </summary>
public class TCPRFIDBinding
{
private static readonly Lazy<TCPRFIDBinding> lazy = new Lazy<TCPRFIDBinding>(() => new TCPRFIDBinding());
public static TCPRFIDBinding Instance
{
get
{
return lazy.Value;
}
}
public static Action<string>? GetNewMessage = new Action<string>((message) => { });
private readonly SerilogHelper _log = SerilogHelper.Instance;
private readonly TrayBindingService _trayBinding = TrayBindingService.Instance;
public TCPRFIDBinding()
{
GetNewMessage += StoreBindingMessage;
}
private static readonly PropertyInfo[] _snProperties =
typeof(TCPRFIDBindingEntity).GetProperties()
.Where(p => p.Name.StartsWith("Sn", StringComparison.OrdinalIgnoreCase))
.ToArray();
/// <summary>
/// 数据绑定到数据库
/// </summary>
public void StoreBindingMessage(string message)
{
var entity = ParseMessage(message);
if (entity == null || string.IsNullOrWhiteSpace(entity.Rfid)) return;
var prodCodes = _snProperties
.Select(p => p.GetValue(entity) as string)
.Where(v => !string.IsNullOrWhiteSpace(v))
.ToArray();
if (prodCodes.Length == 0) return;
entity.Rfid = entity.Rfid.Replace("?", "");
entity.Rfid = entity.Rfid.Replace("\0", "");
entity.Rfid.Trim();
var res = _trayBinding.TrayBindingRefresh(Guid.NewGuid(), entity.Rfid, prodCodes!);
if (res)
{
_log.Info($"插入数据库成功{entity.Rfid}");
foreach(string re in prodCodes!)
{
_log.Info($"产品{re}进入");
}
}
}
private static TCPRFIDBindingEntity? ParseMessage(string message)
{
if (string.IsNullOrWhiteSpace(message)) return null;
return JsonSerializer.Deserialize<TCPRFIDBindingEntity>(message);
}
}
}

@ -34,15 +34,14 @@ namespace Sln.Iot.Business
{
//_errorAnalyse = new ErrorAnalyseBusiness();
//_recipeBusiness = new RecipeBusiness();
//_timer = new Timer(TimerCallback, null, 0, 1000);
_timer = new Timer(TimerCallback, null, 0, 1000);
//sql更新
//取出work唯一guid(tid)
var traycode = "M3\0\0\0\0\0\0\0\0\0\0";
traycode = traycode.Replace("\0", "");
//var traycode = "M3\0\0\0\0\0\0\0\0\0\0";
//traycode = traycode.Replace("\0", "");
bool res = trayBindingService.UpDateTime(DateTime.Now.ToString(), traycode, "1");
//bool res = trayBindingService.UpDateTime(DateTime.Now.ToString(), traycode, "1");
}
/// <summary>
@ -55,91 +54,19 @@ namespace Sln.Iot.Business
{
UnitsProcessPLCDataGetBusiness unitsProcessPLCDataGetBusiness = UnitsProcessPLCDataGetBusiness.Instance;
var data1 = unitsProcessPLCDataGetBusiness.Vacuum1PlcDataGet();
var data2 = unitsProcessPLCDataGetBusiness.Vacuum2PlcDataGet();
var data3 = unitsProcessPLCDataGetBusiness.PreHeatOvenPlcDataGet();
var data4 = unitsProcessPLCDataGetBusiness.PreCureOvenPlcDataGet();
var data5 = unitsProcessPLCDataGetBusiness.CureOvenPlcDataGet();
var data = unitsProcessPLCDataGetBusiness.VacuumPlcDataGet();
_log.Info($"真空灌胶机数据 — " +
$"推胶速度设定值:{data.GluePushSpeedSetValue} " +
$"胶量设定值:[{data.GlueAmountSetValue1},{data.GlueAmountSetValue2},{data.GlueAmountSetValue3},{data.GlueAmountSetValue4},{data.GlueAmountSetValue5},{data.GlueAmountSetValue6},{data.GlueAmountSetValue7},{data.GlueAmountSetValue8},{data.GlueAmountSetValue9},{data.GlueAmountSetValue10}] " +
$"真空度设定值:{data.VacuumDegreeSetValue} 保压时长设定值:{data.PressureHoldTimeSetValue} " +
$"真空箱启用设定值:{data.VacuumIsUseSetValue} 总胶量设定值:{data.TotalGlueAmountSetValue} " +
$"A泵压力实际值:{data.PumpAPressureActValue} B泵压力实际值:{data.PumpBPressureActValue} " +
$"灌胶真空度实际值:{data.VacuumDegreeActValue} 配方数据:{data.FormulaData}");
data1.GlueAmountSetValue2 = data2.GlueAmountSetValue2;
data1.GluePushSpeedSetValue2 = data2.GluePushSpeedSetValue2;
data1.BarrelA1TempActValue2 = data2.BarrelA1TempActValue2;
data1.BarrelA2TempActValue2 = data2.BarrelA2TempActValue2;
data1.BarrelB1TempActValue2 = data2.BarrelB1TempActValue2;
data1.BarrelB2TempActValue2 = data2.BarrelB2TempActValue2;
data1.PumpAPressureActValue2 = data2.PumpAPressureActValue2;
data1.PumpBPressureActValue2 = data2.PumpBPressureActValue2;
data1.VacuumDegreeActValue2 = data2.VacuumDegreeActValue2;
data1.PressureHoldTimeSetValue2 = data2.PressureHoldTimeSetValue2;
_log.Info($"真空箱温度数据上传,\n " +
$"GlueAmountSetValue1:{data1.GlueAmountSetValue1}\n " +
$"GluePushSpeedSetValue1:{data1.GluePushSpeedSetValue1}\n " +
$"BarrelA1TempActValue1:{data1.BarrelA1TempActValue1}\n " +
$"BarrelA2TempActValue1:{data1.BarrelA2TempActValue1}\n " +
$"BarrelB1TempActValue1:{data1.BarrelB1TempActValue1}\n " +
$"BarrelB2TempActValue1:{data1.BarrelB2TempActValue1}\n " +
$"PumpAPressureActValue1:{data1.PumpAPressureActValue1}\n " +
$"PumpBPressureActValue1:{data1.PumpBPressureActValue1}\n " +
$"VacuumDegreeActValue1:{data1.VacuumDegreeActValue1}\n " +
$"PressureHoldTimeSetValue1:{data1.PressureHoldTimeSetValue1}\n " +
$"GlueAmountSetValue2:{data1.GlueAmountSetValue2}\n " +
$"GluePushSpeedSetValue2:{data1.GluePushSpeedSetValue2}\n " +
$"BarrelA1TempActValue2:{data1.BarrelA1TempActValue2}\n " +
$"BarrelA2TempActValue2:{data1.BarrelA2TempActValue2}\n " +
$"BarrelB1TempActValue2:{data1.BarrelB1TempActValue2}\n " +
$"BarrelB2TempActValue2:{data1.BarrelB2TempActValue2}\n " +
$"PumpAPressureActValue2:{data1.PumpAPressureActValue2}\n " +
$"PumpBPressureActValue2:{data1.PumpBPressureActValue2}\n " +
$"VacuumDegreeActValue2:{data1.VacuumDegreeActValue2}\n " +
$"PressureHoldTimeSetValue2:{data1.PressureHoldTimeSetValue2}");
_log.Info($"隧道烤箱温度数据上传,\n " +
$"PreheatOvenTempActValue:{data3}\n " +
$"PreCureOven1TempActValue:{data4.PreCureOven1TempActValue}\n " +
$"PreCureOven2TempActValue:{data4.PreCureOven2TempActValue}\n " +
$"PreCureOven3TempActValue:{data4.PreCureOven3TempActValue}\n " +
$"PreCureOven4TempActValue:{data4.PreCureOven4TempActValue}\n " +
$"CureOven1TempActValue:{data5.CureOven1TempActValue}\n " +
$"CureOven2TempActValue:{data5.CureOven2TempActValue}\n " +
$"CureOven3TempActValue:{data5.CureOven3TempActValue}\n " +
$"CureOven4TempActValue:{data5.CureOven4TempActValue} ");
////var res = _plc.ReadBytes(_plc.DeltaInstance0, "D200", 9);
////var bytes = res.Content.Reverse().ToArray();
////ushort[] shorts = new ushort[9];
////if (bytes != null && bytes.Length != 0)
////{
//// shorts[0] = BitConverter.ToUInt16(bytes, 0);
//// shorts[1] = BitConverter.ToUInt16(bytes, 2);
//// shorts[2] = BitConverter.ToUInt16(bytes, 4);
//// shorts[3] = BitConverter.ToUInt16(bytes, 6);
//// shorts[4] = BitConverter.ToUInt16(bytes, 8);
//// shorts[5] = BitConverter.ToUInt16(bytes, 10);
//// shorts[6] = BitConverter.ToUInt16(bytes, 12);
//// shorts[7] = BitConverter.ToUInt16(bytes, 14);
//// shorts[8] = BitConverter.ToUInt16(bytes, 16);
////}
////for (int i = 0; i < 9; i++)
////{
//// _log.Info($"D20{i * 2}数值[{shorts[i].ToString()}]");
////}
////读取托盘码和产品码
//OperateResult<byte[]> trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance3, "D5000", 10);
//OperateResult<byte[]> pordBytesResult = _plc.ReadBytes(_plc.DeltaInstance3, "D8000", 60);
////转换托盘码
//string traycode = Encoding.ASCII.GetString(trayBytesResult.Content);
//_log.Info("RFID读数" + traycode);
//byte[] prodBytes = pordBytesResult.Content;
//string[] prodcode = new string[6];
////分割转换产品码
//for (int i = 0; i < 6; i++)
//{
// prodcode[i] = Encoding.ASCII.GetString(AscIIReverseTostring(prodBytes[(i * 20)..(i * 20 + 20)]));
// _log.Info($"扫码枪读数{i + 1}是{prodcode[i]}");
//}
//var data1 = unitsProcessPLCDataGetBusiness.OvenPlcDataGet();
//_log.Info($"隧道炉数据 — " +
// $"隧道炉1温度设定值:{data1.CureOven1SetValue} 隧道炉2温度设定值:{data1.CureOven2SetValue} " +
// $"隧道炉1温度实际值:{data1.CureOven1ActValue} 隧道炉2温度实际值:{data1.CureOven2ActValue}");
}
catch (Exception ex)
{

@ -0,0 +1,65 @@
using Sln.Iot.Business;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TouchSocket.Core;
using TouchSocket.Sockets;
namespace Sln.Iot.Business
{
/// <summary>
/// TCP服务端
/// </summary>
public class TouchTcpServer
{
private static readonly Lazy<TouchTcpServer> lazy = new Lazy<TouchTcpServer>(() => new TouchTcpServer());
public static TouchTcpServer Instance
{
get
{
return lazy.Value;
}
}
/// <summary>
/// 服务端启动
/// </summary>
public async void TcpServerStarted(string ipHost)
{
var service = new TcpService();
service.Connecting = (client, e) => { return EasyTask.CompletedTask; };//有客户端正在连接
service.Connected = (client, e) => { return EasyTask.CompletedTask; };//有客户端成功连接
service.Closing = (client, e) => { return EasyTask.CompletedTask; };//有客户端正在断开连接,只有当主动断开时才有效。
service.Closed = (client, e) => { return EasyTask.CompletedTask; };//有客户端断开连接
#region Tcp服务器使用Received异步委托接收数据
service.Received = async (client, e) =>
{
//从客户端收到信息
var mes = e.Memory.Span.ToString(Encoding.UTF8);
client.Logger.Info($"已从{client.Id}接收到信息:{mes}");
TCPRFIDBinding.GetNewMessage?.Invoke(mes);
//简单消除Task当使用插件接收时需要使用 await e.InvokeNext();来继续执行后续插件。
await EasyTask.CompletedTask;
};
#endregion
await service.SetupAsync(new TouchSocketConfig()//载入配置
.SetListenIPHosts($"tcp://{ipHost}")//可以同时监听多个地址
.ConfigureContainer(a =>//容器的配置
{
a.AddConsoleLogger();//添加一个控制台日志注入注意在maui中控制台日志不可用
})
.ConfigurePlugins(a =>
{
//a.Add();//此处可以添加插件
}));
await service.StartAsync();//启动
}
}
}

@ -27,76 +27,93 @@ namespace Sln.Iot.Business
private readonly SerilogHelper _log = SerilogHelper.Instance;
/// <summary>
/// 真空PLC数据获取
/// 真空灌胶机PLC数据获取
/// </summary>
/// <returns></returns>
public UnitsProcess1Entity Vacuum1PlcDataGet()
public UnitsProcessVacuumEntity VacuumPlcDataGet()
{
try
{
// 读取PLC数据
var res = _plc.ReadBytes(_plc.DeltaInstance1, "D188", 21);
var entity = new UnitsProcessVacuumEntity();
UnitsProcess1Entity entity = new UnitsProcess1Entity()
// 一次性读取 D12600-D1263738个字包含配方数据、配方参数、总胶量
var recipeRes = _plc.ReadBytes(_plc.PLC21, "D12600", 38);
if (recipeRes.IsSuccess)
{
// Float单精度浮点数占4字节先截取4字节再反转
PumpAPressureActValue1 = BitConverter.ToSingle(SingleReverseBytesForValue(res.Content, (188 - 188) * 2, 4), 0),
PumpBPressureActValue1 = BitConverter.ToSingle(SingleReverseBytesForValue(res.Content, (190 - 188) * 2, 4), 0),
GluePushSpeedSetValue1 = BitConverter.ToSingle(SingleReverseBytesForValue(res.Content, (192 - 188) * 2, 4), 0),
GlueAmountSetValue1 = BitConverter.ToSingle(SingleReverseBytesForValue(res.Content, (194 - 188) * 2, 4), 0),
VacuumDegreeActValue1 = BitConverter.ToSingle(SingleReverseBytesForValue(res.Content, (196 - 188) * 2, 4), 0),
// 配方数据 D1260010个字字符串
entity.FormulaData = Encoding.ASCII.GetString(recipeRes.Content, 0, 20).TrimEnd('\0');
// Int16短整型占2字节先截取2字节再反转
PressureHoldTimeSetValue1 = BitConverter.ToInt16(Int16ReverseBytesForValue(res.Content, (198 - 188) * 2, 2), 0),
BarrelA1TempActValue1 = BitConverter.ToInt16(Int16ReverseBytesForValue(res.Content, (200 - 188) * 2, 2), 0),
BarrelA2TempActValue1 = BitConverter.ToInt16(Int16ReverseBytesForValue(res.Content, (202 - 188) * 2, 2), 0),
BarrelB1TempActValue1 = BitConverter.ToInt16(Int16ReverseBytesForValue(res.Content, (206 - 188) * 2, 2), 0),
BarrelB2TempActValue1 = BitConverter.ToInt16(Int16ReverseBytesForValue(res.Content, (208 - 188) * 2, 2), 0),
};
// Float单精度浮点数占4字节
entity.GluePushSpeedSetValue = BitConverter.ToSingle(SingleReverseBytesForValue(recipeRes.Content, (12610 - 12600) * 2, 4), 0);
entity.GlueAmountSetValue1 = BitConverter.ToSingle(SingleReverseBytesForValue(recipeRes.Content, (12612 - 12600) * 2, 4), 0);
entity.GlueAmountSetValue2 = BitConverter.ToSingle(SingleReverseBytesForValue(recipeRes.Content, (12614 - 12600) * 2, 4), 0);
entity.GlueAmountSetValue3 = BitConverter.ToSingle(SingleReverseBytesForValue(recipeRes.Content, (12616 - 12600) * 2, 4), 0);
entity.GlueAmountSetValue4 = BitConverter.ToSingle(SingleReverseBytesForValue(recipeRes.Content, (12618 - 12600) * 2, 4), 0);
entity.GlueAmountSetValue5 = BitConverter.ToSingle(SingleReverseBytesForValue(recipeRes.Content, (12620 - 12600) * 2, 4), 0);
entity.GlueAmountSetValue6 = BitConverter.ToSingle(SingleReverseBytesForValue(recipeRes.Content, (12622 - 12600) * 2, 4), 0);
entity.GlueAmountSetValue7 = BitConverter.ToSingle(SingleReverseBytesForValue(recipeRes.Content, (12624 - 12600) * 2, 4), 0);
entity.GlueAmountSetValue8 = BitConverter.ToSingle(SingleReverseBytesForValue(recipeRes.Content, (12626 - 12600) * 2, 4), 0);
entity.GlueAmountSetValue9 = BitConverter.ToSingle(SingleReverseBytesForValue(recipeRes.Content, (12628 - 12600) * 2, 4), 0);
entity.GlueAmountSetValue10 = BitConverter.ToSingle(SingleReverseBytesForValue(recipeRes.Content, (12630 - 12600) * 2, 4), 0);
entity.VacuumDegreeSetValue = BitConverter.ToSingle(SingleReverseBytesForValue(recipeRes.Content, (12632 - 12600) * 2, 4), 0);
entity.TotalGlueAmountSetValue = BitConverter.ToSingle(SingleReverseBytesForValue(recipeRes.Content, (12636 - 12600) * 2, 4), 0);
// Int16短整型占2字节
entity.PressureHoldTimeSetValue = BitConverter.ToInt16(Int16ReverseBytesForValue(recipeRes.Content, (12634 - 12600) * 2, 2), 0);
entity.VacuumIsUseSetValue = BitConverter.ToInt16(Int16ReverseBytesForValue(recipeRes.Content, (12635 - 12600) * 2, 2), 0);
}
// 读取实际值 D850-D8556个字
var actRes = _plc.ReadBytes(_plc.PLC21, "D850", 6);
if (actRes.IsSuccess)
{
entity.PumpAPressureActValue = BitConverter.ToSingle(SingleReverseBytesForValue(actRes.Content, (850 - 850) * 2, 4), 0);
entity.PumpBPressureActValue = BitConverter.ToSingle(SingleReverseBytesForValue(actRes.Content, (852 - 850) * 2, 4), 0);
entity.VacuumDegreeActValue = BitConverter.ToSingle(SingleReverseBytesForValue(actRes.Content, (854 - 850) * 2, 4), 0);
}
return entity;
}
catch (Exception ex)
{
_log.Error("PLC读取真空箱1信息失败");
return new UnitsProcess1Entity();
_log.Error("PLC读取真空灌胶机信息失败");
return new UnitsProcessVacuumEntity();
}
}
/// <summary>
/// 真空箱PLC数据获取
/// 固化炉(隧道炉)PLC数据获取
/// </summary>
/// <returns></returns>
public UnitsProcess1Entity Vacuum2PlcDataGet()
public UnitsProcessOvenEntity OvenPlcDataGet()
{
try
{
var res = _plc.ReadBytes(_plc.DeltaInstance2, "D188", 21);
var result = res.Content.Reverse().ToArray();
UnitsProcess1Entity entity = new UnitsProcess1Entity()
{
// Float单精度浮点数占4字节先截取4字节再反转
PumpAPressureActValue2 = BitConverter.ToSingle(SingleReverseBytesForValue(res.Content, (188 - 188) * 2, 4), 0),
PumpBPressureActValue2 = BitConverter.ToSingle(SingleReverseBytesForValue(res.Content, (190 - 188) * 2, 4), 0),
GluePushSpeedSetValue2 = BitConverter.ToSingle(SingleReverseBytesForValue(res.Content, (192 - 188) * 2, 4), 0),
GlueAmountSetValue2 = BitConverter.ToSingle(SingleReverseBytesForValue(res.Content, (194 - 188) * 2, 4), 0),
VacuumDegreeActValue2 = BitConverter.ToSingle(SingleReverseBytesForValue(res.Content, (196 - 188) * 2, 4), 0),
var entity = new UnitsProcessOvenEntity();
// Int16短整型占2字节先截取2字节再反转
PressureHoldTimeSetValue2 = BitConverter.ToInt16(Int16ReverseBytesForValue(res.Content, (198 - 188) * 2, 2), 0),
BarrelA1TempActValue2 = BitConverter.ToInt16(Int16ReverseBytesForValue(res.Content, (200 - 188) * 2, 2), 0),
BarrelA2TempActValue2 = BitConverter.ToInt16(Int16ReverseBytesForValue(res.Content, (202 - 188) * 2, 2), 0),
BarrelB1TempActValue2 = BitConverter.ToInt16(Int16ReverseBytesForValue(res.Content, (206 - 188) * 2, 2), 0),
BarrelB2TempActValue2 = BitConverter.ToInt16(Int16ReverseBytesForValue(res.Content, (208 - 188) * 2, 2), 0),
};
// 读取固化温度实际值 D200-D2012个字
var actRes = _plc.ReadBytes(_plc.PLC20, "D200", 2);
if (actRes.IsSuccess)
{
entity.CureOven1ActValue = BitConverter.ToInt16(Int16ReverseBytesForValue(actRes.Content, (200 - 200) * 2, 2), 0);
entity.CureOven2ActValue = BitConverter.ToInt16(Int16ReverseBytesForValue(actRes.Content, (201 - 200) * 2, 2), 0);
}
// 读取固化温度设定值 D20000-D200012个字
var setRes = _plc.ReadBytes(_plc.PLC20, "D20010", 2);
if (setRes.IsSuccess)
{
entity.CureOven1SetValue = BitConverter.ToInt16(Int16ReverseBytesForValue(setRes.Content, (20010 - 20010) * 2, 2), 0);
entity.CureOven2SetValue = BitConverter.ToInt16(Int16ReverseBytesForValue(setRes.Content, (20011 - 20010) * 2, 2), 0);
}
return entity;
}
catch (Exception ex)
{
_log.Error("PLC读取真空箱2信息失败");
return new UnitsProcess1Entity();
_log.Error("PLC读取固化炉(隧道炉)信息失败");
return new UnitsProcessOvenEntity();
}
}
@ -136,81 +153,5 @@ namespace Sln.Iot.Business
return temp;
}
/// <summary>
/// 预热炉数据获取
/// </summary>
/// <returns></returns>
public int PreHeatOvenPlcDataGet()
{
try
{
var res = _plc.ReadInt16(_plc.DeltaInstance0, "D200");
if (res.IsSuccess)
{
return res.Content;
}
return 0;
}
catch (Exception ex)
{
_log.Error("PLC读取预热炉信息失败");
return 0;
}
}
/// <summary>
/// 预固炉数据获取
/// </summary>
/// <returns></returns>
public UnitsProcess3Entity PreCureOvenPlcDataGet()
{
try
{
var res = _plc.ReadBytes(_plc.DeltaInstance0, "D201", 4);
var result = res.Content.Reverse().ToArray();
UnitsProcess3Entity unitsProcess3Entity = new UnitsProcess3Entity()
{
PreCureOven4TempActValue = BitConverter.ToInt16(result, 0),
PreCureOven3TempActValue = BitConverter.ToInt16(result, 2),
PreCureOven2TempActValue = BitConverter.ToInt16(result, 4),
PreCureOven1TempActValue = BitConverter.ToInt16(result, 6),
};
return unitsProcess3Entity;
}
catch (Exception ex)
{
_log.Error("PLC读取预固炉信息失败");
return new UnitsProcess3Entity();
}
}
/// <summary>
/// 固化炉数据获取
/// </summary>
/// <returns></returns>
public UnitsProcess3Entity CureOvenPlcDataGet()
{
try
{
var res = _plc.ReadBytes(_plc.DeltaInstance0, "D205", 4);
var result = res.Content.Reverse().ToArray();
UnitsProcess3Entity unitsProcess3Entity = new UnitsProcess3Entity()
{
CureOven4TempActValue = BitConverter.ToInt16(result, 0),
CureOven3TempActValue = BitConverter.ToInt16(result, 2),
CureOven2TempActValue = BitConverter.ToInt16(result, 4),
CureOven1TempActValue = BitConverter.ToInt16(result, 6),
};
return unitsProcess3Entity;
}
catch (Exception ex)
{
_log.Error("PLC读取固化炉信息失败");
return new UnitsProcess3Entity();
}
}
}
}

@ -21,9 +21,9 @@ namespace Sln.Iot.CFX.CFXBusiness
/// 真空点胶数据
/// </summary>
/// <returns></returns>
public CommonProcessData ProcessDataGet1(UnitsProcess1Entity entity)
public CommonProcessData ProcessDataGetVacuum(UnitsProcessVacuumEntity entity)
{
//entity = new UnitsProcess1Entity()
//entity = new UnitsProcessVacuumEntity()
//{
// GlueAmountSetValue1 = 123.4f,
// GluePushSpeedSetValue1 = 10.1f,
@ -46,7 +46,7 @@ namespace Sln.Iot.CFX.CFXBusiness
// VacuumDegreeActValue2 = 3000.4f,
// PressureHoldTimeSetValue2 = 100,
//};
CommonProcessData processData = new CommonProcessData()
{
ZoneData = new List<CommonUseZoneData>
@ -55,73 +55,16 @@ namespace Sln.Iot.CFX.CFXBusiness
{
Setpoints = new List<CommonUseSetpoint>()
{
new CommonUseSetpoint()
{
Setpoint = entity.GluePushSpeedSetValue,
SetpointName = "GluePushSpeedSetValue"
},
new CommonUseSetpoint()
{
Setpoint = entity.GlueAmountSetValue1,
SetpointName = "GlueAmountSetValue1"
},
new CommonUseSetpoint()
{
Setpoint = entity.GluePushSpeedSetValue1,
SetpointName = "GluePushSpeedSetValue1"
},
new CommonUseSetpoint()
{
Setpoint = entity.PressureHoldTimeSetValue1,
SetpointName = "PressureHoldTimeSetValue1"
},
},
Readings = new List<CommonUseReading>()
{
new CommonUseReading()
{
ReadingValue = entity.BarrelA1TempActValue1,
ReadingName = "BarrelA1TempActValue1",
},
new CommonUseReading()
{
ReadingValue = entity.BarrelA2TempActValue1,
ReadingName = "BarrelA2TempActValue1",
},
new CommonUseReading()
{
ReadingValue = entity.BarrelB1TempActValue1,
ReadingName = "BarrelB1TempActValue1",
},
new CommonUseReading()
{
ReadingValue = entity.BarrelB2TempActValue1,
ReadingName = "BarrelB2TempActValue1",
},
new CommonUseReading()
{
ReadingValue = entity.PumpAPressureActValue1,
ReadingName = "PumpAPressureActValue1",
},
new CommonUseReading()
{
ReadingValue = entity.PumpBPressureActValue1,
ReadingName = "PumpBPressureActValue1",
},
new CommonUseReading()
{
ReadingValue = entity.VacuumDegreeActValue1,
ReadingName = "VacuumDegreeActValue1",
},
},
Zone = new CommonUseZone()
{
ZoneName = "Zone1",
StageSequence = 1,
StageName = "VacuumInjection1"
},
},
new CommonUseZoneData()
{
Setpoints = new List<CommonUseSetpoint>()
{
new CommonUseSetpoint()
{
Setpoint = entity.GlueAmountSetValue2,
@ -129,93 +72,88 @@ namespace Sln.Iot.CFX.CFXBusiness
},
new CommonUseSetpoint()
{
Setpoint = entity.GluePushSpeedSetValue2,
SetpointName = "GluePushSpeedSetValue2"
Setpoint = entity.GlueAmountSetValue3,
SetpointName = "GlueAmountSetValue3"
},
new CommonUseSetpoint()
{
Setpoint = entity.PressureHoldTimeSetValue2,
SetpointName = "PressureHoldTimeSetValue2"
Setpoint = entity.GlueAmountSetValue4,
SetpointName = "GlueAmountSetValue4"
},
new CommonUseSetpoint()
{
Setpoint = entity.GlueAmountSetValue5,
SetpointName = "GlueAmountSetValue5"
},
new CommonUseSetpoint()
{
Setpoint = entity.GlueAmountSetValue6,
SetpointName = "GlueAmountSetValue6"
},
new CommonUseSetpoint()
{
Setpoint = entity.GlueAmountSetValue7,
SetpointName = "GlueAmountSetValue7"
},
new CommonUseSetpoint()
{
Setpoint = entity.GlueAmountSetValue8,
SetpointName = "GlueAmountSetValue8"
},
new CommonUseSetpoint()
{
Setpoint = entity.GlueAmountSetValue9,
SetpointName = "GlueAmountSetValue9"
},
new CommonUseSetpoint()
{
Setpoint = entity.GlueAmountSetValue10,
SetpointName = "GlueAmountSetValue10"
},
new CommonUseSetpoint()
{
Setpoint = entity.VacuumDegreeSetValue,
SetpointName = "VacuumDegreeSetValue"
},
new CommonUseSetpoint()
{
Setpoint = entity.PressureHoldTimeSetValue,
SetpointName = "PressureHoldTimeSetValue"
},
new CommonUseSetpoint()
{
Setpoint = entity.VacuumIsUseSetValue,
SetpointName = "VacuumIsUseSetValue"
},
new CommonUseSetpoint()
{
Setpoint = entity.TotalGlueAmountSetValue,
SetpointName = "TotalGlueAmountSetValue"
},
},
Readings = new List<CommonUseReading>()
{
new CommonUseReading()
{
ReadingValue = entity.BarrelA1TempActValue2,
ReadingName = "BarrelA1TempActValue2",
ReadingValue = entity.PumpAPressureActValue,
ReadingName = "PumpAPressureActValue",
},
new CommonUseReading()
{
ReadingValue = entity.BarrelA2TempActValue2,
ReadingName = "BarrelA2TempActValue2",
ReadingValue = entity.PumpBPressureActValue,
ReadingName = "PumpBPressureActValue",
},
new CommonUseReading()
{
ReadingValue = entity.BarrelB1TempActValue2,
ReadingName = "BarrelB1TempActValue2",
},
new CommonUseReading()
{
ReadingValue = entity.BarrelB2TempActValue2,
ReadingName = "BarrelB2TempActValue2",
},
new CommonUseReading()
{
ReadingValue = entity.PumpAPressureActValue2,
ReadingName = "PumpAPressureActValue2",
},
new CommonUseReading()
{
ReadingValue = entity.PumpBPressureActValue2,
ReadingName = "PumpBPressureActValue2",
},
new CommonUseReading()
{
ReadingValue = entity.VacuumDegreeActValue2,
ReadingName = "VacuumDegreeActValue2",
},
ReadingValue = entity.VacuumDegreeActValue,
ReadingName = "VacuumDegreeActValue",
}
},
Zone = new CommonUseZone()
{
ZoneName = "Zone2",
StageSequence = 2,
StageName = "VacuumInjection2"
},
}
}
};
return processData;
}
/// <summary>
/// 升降回流数据
/// </summary>
/// <returns></returns>
public CommonProcessData ProcessDataGet2()
{
CommonProcessData processData = new CommonProcessData()
{
ZoneData = new List<CommonUseZoneData>
{
new CommonUseZoneData()
{
Zone = new CommonUseZone()
{
ZoneName = "Zone1",
StageSequence = 1,
StageName = "Conveyor1"
},
},
new CommonUseZoneData()
{
Zone = new CommonUseZone()
{
ZoneName = "Zone2",
StageSequence = 2,
StageName = "Conveyor2"
StageName = "Vacuum"
},
}
}
@ -228,9 +166,9 @@ namespace Sln.Iot.CFX.CFXBusiness
/// 隧道烤箱数据
/// </summary>
/// <returns></returns>
public CommonProcessData ProcessDataGet3(UnitsProcess3Entity entity)
public CommonProcessData ProcessDataGetOven(UnitsProcessOvenEntity entity)
{
//entity = new UnitsProcess3Entity()
//entity = new UnitsProcessOvenEntity()
//{
// PreheatOvenTempActValue = 800,
// PreCureOven1TempActValue = 800,
@ -249,86 +187,41 @@ namespace Sln.Iot.CFX.CFXBusiness
{
new CommonUseZoneData()
{
Setpoints = new List<CommonUseSetpoint>()
{
new CommonUseSetpoint()
{
Setpoint = entity.CureOven1SetValue,
SetpointName = "CureOven1SetValue"
},
new CommonUseSetpoint()
{
Setpoint = entity.CureOven2SetValue,
SetpointName = "CureOven2SetValue"
},
},
Readings = new List<CommonUseReading>()
{
new CommonUseReading()
{
ReadingValue = entity.PreheatOvenTempActValue,
ReadingName = "PreheatOvenTempActValue",
ReadingValue = entity.CureOven1ActValue,
ReadingName = "CureOven1ActValue",
},
new CommonUseReading()
{
ReadingValue = entity.CureOven2ActValue,
ReadingName = "CureOven2ActValue",
}
},
Zone = new CommonUseZone()
{
ZoneName = "Zone1",
StageSequence = 1,
StageName = "PreHeatOvem"
StageName = "Oven"
},
},
new CommonUseZoneData()
{
Readings = new List<CommonUseReading>()
{
new CommonUseReading()
{
ReadingValue = entity.PreCureOven1TempActValue,
ReadingName = "PreCureOven1TempActValue",
},
new CommonUseReading()
{
ReadingValue = entity.PreCureOven2TempActValue,
ReadingName = "PreCureOven2TempActValue",
},
new CommonUseReading()
{
ReadingValue = entity.PreCureOven3TempActValue,
ReadingName = "PreCureOven3TempActValue",
},
new CommonUseReading()
{
ReadingValue = entity.PreCureOven4TempActValue,
ReadingName = "PreCureOven4TempActValue",
}
},
Zone = new CommonUseZone()
{
ZoneName = "Zone2",
StageSequence = 2,
StageName = "PreCureOven"
},
},
new CommonUseZoneData()
{
Readings = new List<CommonUseReading>()
{
new CommonUseReading()
{
ReadingValue = entity.CureOven1TempActValue,
ReadingName = "CureOven1ActValue",
},
new CommonUseReading()
{
ReadingValue = entity.CureOven2TempActValue,
ReadingName = "CureOven2ActValue",
},
new CommonUseReading()
{
ReadingValue = entity.CureOven3TempActValue,
ReadingName = "CureOven3ActValue",
},
new CommonUseReading()
{
ReadingValue = entity.CureOven4TempActValue,
ReadingName = "CureOven4ActValue",
}
},
Zone = new CommonUseZone()
{
ZoneName = "Zone3",
StageSequence = 3,
StageName = "CureOven"
},
}
}
};

@ -1,132 +0,0 @@
using CFX.InformationSystem.UnitValidation;
using CFX.ResourcePerformance;
using CFX.Structures;
using CFX;
using Sln.Iot.CFX.RequestReceived;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CFX.Production;
using Sln.Iot.CFX.CFXRequestes;
using Sln.Iot.CFX.CFXBusiness;
using Sln.Iot.CFX.Event;
namespace Sln.Iot.CFX.CFXConnect
{
/// <summary>
/// 烤箱连接
/// </summary>
public class CFXConnect3 : CFXHelper
{
private static readonly Lazy<CFXConnect3> lazy = new Lazy<CFXConnect3>(() => new CFXConnect3());
public static CFXConnect3 Instance
{
get
{
return lazy.Value;
}
}
AreYouThereRequestReceived3 areYouThereRequestReceived3 = new AreYouThereRequestReceived3();
GetEndpointInformationRequestReceived3 getEndpointInformationRequestReceived3 = new GetEndpointInformationRequestReceived3();
WhoIsThereRequestReceived3 whoIsThereRequestReceived3 = new WhoIsThereRequestReceived3();
GetActiveRecipeRequestReceived3 getActiveRecipeRequestReceived3 = new GetActiveRecipeRequestReceived3();
GetActiveFaultsRequestReceived3 getActiveFaultsRequestReceived3 = new GetActiveFaultsRequestReceived3();
HandleFaultRequestReceived3 handleFaultRequestReceived3 = new HandleFaultRequestReceived3();
ModifyStationParametersRequestReceived3 modifyStationParametersRequestReceived3 = new ModifyStationParametersRequestReceived3();
//HeartbeatEvent heartbeatEvent = new HeartbeatEvent();
CFXEventTools cFXEventTools = CFXEventTools.Instance;
public string CFXHandle { get; set; } = "CFX.A00.OT00470017";
protected override CFXMessage HandleRequest(CFXEnvelope request)
{
CFXMessage response = null;
if (request.MessageBody is AreYouThereRequest) //存在性检测请求
{
areYouThereRequestReceived3.Handle(request.MessageBody as AreYouThereRequest, out response);
}
else if (request.MessageBody is GetEndpointInformationRequest) //获取终端节点信息请求
{
getEndpointInformationRequestReceived3.Handle(request.MessageBody as GetEndpointInformationRequest, out response);
}
else if (request.MessageBody is WhoIsThereRequest) //设备存在性查询请求
{
whoIsThereRequestReceived3.Handle(request.MessageBody as WhoIsThereRequest, out response);
}
else if (request.MessageBody is GetActiveRecipeRequest) //获取当前激活配方请求
{
getActiveRecipeRequestReceived3.Handle(request.MessageBody as GetActiveRecipeRequest, out response);
}
else if (request.MessageBody is GetActiveFaultsRequest) //获取当前错误状态请求
{
getActiveFaultsRequestReceived3.Handle(request.MessageBody as GetActiveFaultsRequest, out response);
}
else if (request.MessageBody is HandleFaultRequest) //处理错误请求
{
handleFaultRequestReceived3.Handle(request.MessageBody as HandleFaultRequest, out response);
}
else if (request.MessageBody is ModifyStationParametersRequest) //设备修改参数请求
{
modifyStationParametersRequestReceived3.Handle(request.MessageBody as ModifyStationParametersRequest, out response);
}
else //不支持的请求类型
{
response = new NotSupportedResponse()
{
RequestResult = new RequestResult()
{
Result = StatusResult.Failed,
ResultCode = 0,
Message = $"不支持的请求类型:{request.MessageBody.GetType().Name}"
}
};
}
return response;
}
/// <summary>
/// 发送生产单元验证请求接收通知
/// </summary>
public void SendValidateUnitsRequest(string uri, string primaryIdentifier, string[] unitsIdentifier)
{
try
{
ValidateUnitsRequest msg = new ValidateUnitsRequest()
{
Validations = new List<ValidationType>()
{
ValidationType.UnitTraceValidation,
},
PrimaryIdentifier = primaryIdentifier,
Units = cFXEventTools.UnitPositionTrans(unitsIdentifier)
};
var validateresult = Endpoint.ExecuteRequest(uri, new CFXEnvelope(msg)
{
Source = Endpoint.CFXHandle,
Target = "inline-control"
});
if (validateresult == null)
{
return;
}
var response = validateresult.MessageBody as ValidateUnitsResponse;
//响应逻辑
}
catch (Exception ex)
{
}
}
}
}

@ -1,132 +0,0 @@
using CFX.InformationSystem.UnitValidation;
using CFX.ResourcePerformance;
using CFX.Structures;
using CFX;
using Sln.Iot.CFX.RequestReceived;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CFX.Production;
using Sln.Iot.CFX.CFXRequestes;
using Sln.Iot.CFX.CFXBusiness;
using Sln.Iot.CFX.Event;
namespace Sln.Iot.CFX.CFXConnect
{
/// <summary>
/// 提升机2连接
/// </summary>
public class CFXConnect4 : CFXHelper
{
private static readonly Lazy<CFXConnect4> lazy = new Lazy<CFXConnect4>(() => new CFXConnect4());
public static CFXConnect4 Instance
{
get
{
return lazy.Value;
}
}
AreYouThereRequestReceived4 areYouThereRequestReceived4 = new AreYouThereRequestReceived4();
GetEndpointInformationRequestReceived4 getEndpointInformationRequestReceived4 = new GetEndpointInformationRequestReceived4();
WhoIsThereRequestReceived4 whoIsThereRequestReceived4 = new WhoIsThereRequestReceived4();
GetActiveRecipeRequestReceived4 getActiveRecipeRequestReceived4 = new GetActiveRecipeRequestReceived4();
GetActiveFaultsRequestReceived4 getActiveFaultsRequestReceived4 = new GetActiveFaultsRequestReceived4();
HandleFaultRequestReceived4 handleFaultRequestReceived4 = new HandleFaultRequestReceived4();
ModifyStationParametersRequestReceived4 modifyStationParametersRequestReceived4 = new ModifyStationParametersRequestReceived4();
//HeartbeatEvent heartbeatEvent = new HeartbeatEvent();
CFXEventTools cFXEventTools = CFXEventTools.Instance;
public string CFXHandle { get; set; } = "CFX.A00.OT00470020";
protected override CFXMessage HandleRequest(CFXEnvelope request)
{
CFXMessage response = null;
if (request.MessageBody is AreYouThereRequest) //存在性检测请求
{
areYouThereRequestReceived4.Handle(request.MessageBody as AreYouThereRequest, out response);
}
else if (request.MessageBody is GetEndpointInformationRequest) //获取终端节点信息请求
{
getEndpointInformationRequestReceived4.Handle(request.MessageBody as GetEndpointInformationRequest, out response);
}
else if (request.MessageBody is WhoIsThereRequest) //设备存在性查询请求
{
whoIsThereRequestReceived4.Handle(request.MessageBody as WhoIsThereRequest, out response);
}
else if (request.MessageBody is GetActiveRecipeRequest) //获取当前激活配方请求
{
getActiveRecipeRequestReceived4.Handle(request.MessageBody as GetActiveRecipeRequest, out response);
}
else if (request.MessageBody is GetActiveFaultsRequest) //获取当前错误状态请求
{
getActiveFaultsRequestReceived4.Handle(request.MessageBody as GetActiveFaultsRequest, out response);
}
else if (request.MessageBody is HandleFaultRequest) //处理错误请求
{
handleFaultRequestReceived4.Handle(request.MessageBody as HandleFaultRequest, out response);
}
else if (request.MessageBody is ModifyStationParametersRequest) //设备修改参数请求
{
modifyStationParametersRequestReceived4.Handle(request.MessageBody as ModifyStationParametersRequest, out response);
}
else //不支持的请求类型
{
response = new NotSupportedResponse()
{
RequestResult = new RequestResult()
{
Result = StatusResult.Failed,
ResultCode = 0,
Message = $"不支持的请求类型:{request.MessageBody.GetType().Name}"
}
};
}
return response;
}
/// <summary>
/// 发送生产单元验证请求接收通知
/// </summary>
public void SendValidateUnitsRequest(string uri, string primaryIdentifier, string[] unitsIdentifier)
{
try
{
ValidateUnitsRequest msg = new ValidateUnitsRequest()
{
Validations = new List<ValidationType>()
{
ValidationType.UnitTraceValidation,
},
PrimaryIdentifier = primaryIdentifier,
Units = cFXEventTools.UnitPositionTrans(unitsIdentifier)
};
var validateresult = Endpoint.ExecuteRequest(uri, new CFXEnvelope(msg)
{
Source = Endpoint.CFXHandle,
Target = "inline-control"
});
if (validateresult == null)
{
return;
}
var response = validateresult.MessageBody as ValidateUnitsResponse;
//响应逻辑
}
catch (Exception ex)
{
}
}
}
}

@ -18,11 +18,11 @@ namespace Sln.Iot.CFX.CFXConnect
/// <summary>
/// 提升机1连接
/// </summary>
public class CFXConnect2 : CFXHelper
public class CFXConnectOven : CFXHelper
{
private static readonly Lazy<CFXConnect2> lazy = new Lazy<CFXConnect2>(() => new CFXConnect2());
private static readonly Lazy<CFXConnectOven> lazy = new Lazy<CFXConnectOven>(() => new CFXConnectOven());
public static CFXConnect2 Instance
public static CFXConnectOven Instance
{
get
{

@ -18,11 +18,11 @@ namespace Sln.Iot.CFX.CFXConnect
/// <summary>
/// 真空箱连接
/// </summary>
public class CFXConnect1 : CFXHelper
public class CFXConnectVacuum : CFXHelper
{
private static readonly Lazy<CFXConnect1> lazy = new Lazy<CFXConnect1>(() => new CFXConnect1());
private static readonly Lazy<CFXConnectVacuum> lazy = new Lazy<CFXConnectVacuum>(() => new CFXConnectVacuum());
public static CFXConnect1 Instance
public static CFXConnectVacuum Instance
{
get
{

@ -55,8 +55,8 @@ public class GetActiveRecipeRequestReceived1 : BaseGetActiveRecipeRequestReceive
string restr2 = string.Empty;
//获取现在激活的配方
var res1 = _plc.ReadBytes(_plc.DeltaInstance1, "D600", 10);
var res2 = _plc.ReadBytes(_plc.DeltaInstance2, "D600", 10);
var res1 = _plc.ReadBytes(_plc.PLC21, "D12600", 10);
var res2 = _plc.ReadBytes(_plc.PLC21, "D12600", 10);
if (res1.IsSuccess)
{

@ -1,312 +1,310 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CFX;
using CFX.Structures;
using Sln.Iot.CFX.CFXBusiness;
using Sln.Iot.CFX.CFXConnect;
using Sln.Iot.CFX.Event;
using Sln.Iot.Model.Entity;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
//using CFX;
//using CFX.Structures;
//using Sln.Iot.CFX.CFXBusiness;
//using Sln.Iot.CFX.CFXConnect;
//using Sln.Iot.CFX.Event;
//using Sln.Iot.Model.Entity;
namespace Sln.Iot.CFX
{
/// <summary>
/// 入场前CFX测试
/// </summary>
public class CFXTest
{
CFXConnect1 _cfxHelper = CFXConnect1.Instance;
CFXConnect2 _cfxHelper2 = CFXConnect2.Instance;
CFXConnect3 _cfxHelper3 = CFXConnect3.Instance;
CFXUnitProcessedDataGet cFXUnitProcessedDataGet = CFXUnitProcessedDataGet.Instance;
//namespace Sln.Iot.CFX
//{
// /// <summary>
// /// 入场前CFX测试
// /// </summary>
// public class CFXTest
// {
// CFXConnectOven _cfxHelper2 = CFXConnectOven.Instance;
// CFXUnitProcessedDataGet cFXUnitProcessedDataGet = CFXUnitProcessedDataGet.Instance;
//HeartbeatEvent heartbeatEvent = new HeartbeatEvent();
EndpointConnectedEvent endpointConnectedEvent = new EndpointConnectedEvent();
EndpointShuttingDownEvent endpointShuttingDownEvent = new EndpointShuttingDownEvent();
FaultAcknowledgedEvent faultAcknowledgedEvent = new FaultAcknowledgedEvent();
FaultClearedEvent faultClearedEvent = new FaultClearedEvent();
FaultOccurredEvent faultOccurredEvent = new FaultOccurredEvent();
LogEntryRecordedEvent logEntryRecordedEvent = new LogEntryRecordedEvent();
RecipeActivatedEvent recipeActivatedEvent = new RecipeActivatedEvent();
RecipeModifiedEvent recipeModifiedEvent = new RecipeModifiedEvent();
StationOfflineEvent stationOfflineEvent = new StationOfflineEvent();
StationOnlineEvent stationOnlineEvent = new StationOnlineEvent();
StationParametersModifiedEvent stationParametersModifiedEvent = new StationParametersModifiedEvent();
StationStateChangedEvent stationStateChangedEvent = new StationStateChangedEvent();
UnitsArrivedEvent unitsArrivedEvent = new UnitsArrivedEvent();
UnitsDepartedEvent unitsDepartedEvent = new UnitsDepartedEvent();
UnitsProcessedEvent unitsProcessedEvent = new UnitsProcessedEvent();
WorkCompletedEvent workCompletedEvent = new WorkCompletedEvent();
WorkStageCompletedEvent workStageCompletedEvent = new WorkStageCompletedEvent();
WorkStagePausedEvent workStagePausedEvent = new WorkStagePausedEvent();
WorkStageResumedEvent workStageResumedEvent = new WorkStageResumedEvent();
WorkStageStartedEvent workStageStartedEvent = new WorkStageStartedEvent();
WorkStartedEvent workStartedEvent = new WorkStartedEvent();
// //HeartbeatEvent heartbeatEvent = new HeartbeatEvent();
// EndpointConnectedEvent endpointConnectedEvent = new EndpointConnectedEvent();
// EndpointShuttingDownEvent endpointShuttingDownEvent = new EndpointShuttingDownEvent();
// FaultAcknowledgedEvent faultAcknowledgedEvent = new FaultAcknowledgedEvent();
// FaultClearedEvent faultClearedEvent = new FaultClearedEvent();
// FaultOccurredEvent faultOccurredEvent = new FaultOccurredEvent();
// LogEntryRecordedEvent logEntryRecordedEvent = new LogEntryRecordedEvent();
// RecipeActivatedEvent recipeActivatedEvent = new RecipeActivatedEvent();
// RecipeModifiedEvent recipeModifiedEvent = new RecipeModifiedEvent();
// StationOfflineEvent stationOfflineEvent = new StationOfflineEvent();
// StationOnlineEvent stationOnlineEvent = new StationOnlineEvent();
// StationParametersModifiedEvent stationParametersModifiedEvent = new StationParametersModifiedEvent();
// StationStateChangedEvent stationStateChangedEvent = new StationStateChangedEvent();
// UnitsArrivedEvent unitsArrivedEvent = new UnitsArrivedEvent();
// UnitsDepartedEvent unitsDepartedEvent = new UnitsDepartedEvent();
// UnitsProcessedEvent unitsProcessedEvent = new UnitsProcessedEvent();
// WorkCompletedEvent workCompletedEvent = new WorkCompletedEvent();
// WorkStageCompletedEvent workStageCompletedEvent = new WorkStageCompletedEvent();
// WorkStagePausedEvent workStagePausedEvent = new WorkStagePausedEvent();
// WorkStageResumedEvent workStageResumedEvent = new WorkStageResumedEvent();
// WorkStageStartedEvent workStageStartedEvent = new WorkStageStartedEvent();
// WorkStartedEvent workStartedEvent = new WorkStartedEvent();
public void Test1()
{
//// 实例化所有事件对象
Guid testGuid = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399");
// public void Test1()
// {
// //// 实例化所有事件对象
// Guid testGuid = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399");
//// 发布所有事件
////_cfxHelper.PublishEvent(new CFXEnvelope(heartbeatEvent.Handle("CFX.A00.SDSH000001")));
// //// 发布所有事件
// ////_cfxHelper.PublishEvent(new CFXEnvelope(heartbeatEvent.Handle("CFX.A00.SDSH000001")));
_cfxHelper.PublishEvent(new CFXEnvelope(endpointConnectedEvent.Handle("CFX.A00.SDSH000001", "amqp://127.0.0.1:1235", "amqp://127.0.0.1:8888")));
_cfxHelper.PublishEvent(new CFXEnvelope(faultOccurredEvent.Handle("01", FaultSeverity.Warning, testGuid, "Error", testGuid)));
_cfxHelper.PublishEvent(new CFXEnvelope(faultAcknowledgedEvent.Handle()));
_cfxHelper.PublishEvent(new CFXEnvelope(stationStateChangedEvent.Handle(ResourceState.USD_Repair)));
_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("RecipeA", "VacuumInjection1", 1)));
_cfxHelper.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle("RecipeA")));
_cfxHelper.PublishEvent(new CFXEnvelope(stationOfflineEvent.Handle()));
_cfxHelper.PublishEvent(new CFXEnvelope(stationOnlineEvent.Handle()));
// _cfxHelper.PublishEvent(new CFXEnvelope(endpointConnectedEvent.Handle("CFX.A00.SDSH000001", "amqp://127.0.0.1:1235", "amqp://127.0.0.1:8888")));
// _cfxHelper.PublishEvent(new CFXEnvelope(faultOccurredEvent.Handle("01", FaultSeverity.Warning, testGuid, "Error", testGuid)));
// _cfxHelper.PublishEvent(new CFXEnvelope(faultAcknowledgedEvent.Handle()));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationStateChangedEvent.Handle(ResourceState.USD_Repair)));
// _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("RecipeA", "VacuumInjection1", 1)));
// _cfxHelper.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle("RecipeA")));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationOfflineEvent.Handle()));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationOnlineEvent.Handle()));
_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "-1", "0", "-1", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "0", "1", "0", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "1", "4", "1", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "2", "2", "2", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "3", "2", "3", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "4", "2", "4", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "5", "2", "5", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "6", "1", "6", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "7", "2", "7", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "8", "2", "8", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "9", "2", "9", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "10", "3", "10", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "11", "3", "11", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "12", "2", "12", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "-1", "0", "-1", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "0", "1", "0", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "1", "4", "1", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "2", "2", "2", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "3", "2", "3", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "4", "2", "4", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "5", "2", "5", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "6", "1", "6", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "7", "2", "7", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "8", "2", "8", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "9", "2", "9", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "10", "3", "10", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "11", "3", "11", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000001", "制程设备", "12", "2", "12", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper.PublishEvent(new CFXEnvelope(unitsArrivedEvent.Handle("A123456", new string[1] { "A123" })));
_cfxHelper.PublishEvent(new CFXEnvelope(workStartedEvent.Handle(testGuid, "A123456", new string[]{ "A123" })));
// _cfxHelper.PublishEvent(new CFXEnvelope(unitsArrivedEvent.Handle("A123456", new string[1] { "A123" })));
// _cfxHelper.PublishEvent(new CFXEnvelope(workStartedEvent.Handle(testGuid, "A123456", new string[]{ "A123" })));
_cfxHelper.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(testGuid, "VacuumInjection1", 1)));
_cfxHelper.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle(testGuid, "VacuumInjection1", 1)));
_cfxHelper.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle(testGuid, "VacuumInjection1", 1)));
_cfxHelper.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(testGuid, "VacuumInjection1", 1)));
_cfxHelper.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(testGuid, "VacuumInjection2", 2)));
_cfxHelper.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle(testGuid, "VacuumInjection2", 2)));
_cfxHelper.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle(testGuid, "VacuumInjection2", 2)));
_cfxHelper.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(testGuid, "VacuumInjection2", 2)));
// _cfxHelper.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(testGuid, "VacuumInjection1", 1)));
// _cfxHelper.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle(testGuid, "VacuumInjection1", 1)));
// _cfxHelper.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle(testGuid, "VacuumInjection1", 1)));
// _cfxHelper.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(testGuid, "VacuumInjection1", 1)));
// _cfxHelper.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(testGuid, "VacuumInjection2", 2)));
// _cfxHelper.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle(testGuid, "VacuumInjection2", 2)));
// _cfxHelper.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle(testGuid, "VacuumInjection2", 2)));
// _cfxHelper.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(testGuid, "VacuumInjection2", 2)));
_cfxHelper.PublishEvent(new CFXEnvelope(workCompletedEvent.Handle(testGuid, "A123456", new string[] { "A123" })));
_cfxHelper.PublishEvent(new CFXEnvelope(unitsDepartedEvent.Handle(null, new string[1] { "A123" })));
_cfxHelper.PublishEvent(new CFXEnvelope(unitsProcessedEvent.Handle(testGuid, cFXUnitProcessedDataGet.ProcessDataGet1(new UnitsProcess1Entity()))));
_cfxHelper.PublishEvent(new CFXEnvelope(endpointShuttingDownEvent.Handle("CFX.A00.SDSH000001")));
// _cfxHelper.PublishEvent(new CFXEnvelope(workCompletedEvent.Handle(testGuid, "A123456", new string[] { "A123" })));
// _cfxHelper.PublishEvent(new CFXEnvelope(unitsDepartedEvent.Handle(null, new string[1] { "A123" })));
// // _cfxHelper.PublishEvent(new CFXEnvelope(unitsProcessedEvent.Handle(testGuid, cFXUnitProcessedDataGet.ProcessDataGet1(new UnitsProcess1Entity()))));
// _cfxHelper.PublishEvent(new CFXEnvelope(endpointShuttingDownEvent.Handle("CFX.A00.SDSH000001")));
_cfxHelper.SendValidateUnitsRequest("amqp://127.0.0.1:8888", "A123456", new string[1] { "A123" });
}
// _cfxHelper.SendValidateUnitsRequest("amqp://127.0.0.1:8888", "A123456", new string[1] { "A123" });
// }
public void Test2()
{
//// 实例化所有事件对象
Guid testGuid = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399");
// public void Test2()
// {
// //// 实例化所有事件对象
// Guid testGuid = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399");
//// 发布所有事件
////_cfxHelper2.PublishEvent(new CFXEnvelope(heartbeatEvent.Handle("CFX.A00.SDSH000002")));
// //// 发布所有事件
// ////_cfxHelper2.PublishEvent(new CFXEnvelope(heartbeatEvent.Handle("CFX.A00.SDSH000002")));
_cfxHelper2.PublishEvent(new CFXEnvelope(endpointConnectedEvent.Handle("CFX.A00.SDSH000002", "amqp://127.0.0.1:1235", "amqp://127.0.0.1:8888")));
_cfxHelper2.PublishEvent(new CFXEnvelope(faultOccurredEvent.Handle("01", FaultSeverity.Warning, testGuid, "Error", testGuid)));
_cfxHelper2.PublishEvent(new CFXEnvelope(faultAcknowledgedEvent.Handle()));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationStateChangedEvent.Handle(ResourceState.USD_Repair)));
_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("RecipeA", "ConveyorIn", 1)));
_cfxHelper2.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle("RecipeA")));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationOfflineEvent.Handle()));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationOnlineEvent.Handle()));
// _cfxHelper2.PublishEvent(new CFXEnvelope(endpointConnectedEvent.Handle("CFX.A00.SDSH000002", "amqp://127.0.0.1:1235", "amqp://127.0.0.1:8888")));
// _cfxHelper2.PublishEvent(new CFXEnvelope(faultOccurredEvent.Handle("01", FaultSeverity.Warning, testGuid, "Error", testGuid)));
// _cfxHelper2.PublishEvent(new CFXEnvelope(faultAcknowledgedEvent.Handle()));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationStateChangedEvent.Handle(ResourceState.USD_Repair)));
// _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("RecipeA", "ConveyorIn", 1)));
// _cfxHelper2.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle("RecipeA")));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationOfflineEvent.Handle()));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationOnlineEvent.Handle()));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "-1", "0", "-1", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "0", "1", "0", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "1", "4", "1", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "2", "2", "2", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "3", "2", "3", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "4", "2", "4", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "5", "2", "5", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "6", "1", "6", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "7", "2", "7", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "8", "2", "8", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "9", "2", "9", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "10", "3", "10", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "11", "3", "11", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "12", "2", "12", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "-1", "0", "-1", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "0", "1", "0", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "1", "4", "1", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "2", "2", "2", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "3", "2", "3", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "4", "2", "4", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "5", "2", "5", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "6", "1", "6", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "7", "2", "7", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "8", "2", "8", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "9", "2", "9", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "10", "3", "10", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "11", "3", "11", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper2.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000002", "制程设备", "12", "2", "12", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper2.PublishEvent(new CFXEnvelope(unitsArrivedEvent.Handle("A123456", new string[1] { "A123" })));
_cfxHelper2.PublishEvent(new CFXEnvelope(workStartedEvent.Handle(testGuid, "A123456", new string[] { "A123" })));
// _cfxHelper2.PublishEvent(new CFXEnvelope(unitsArrivedEvent.Handle("A123456", new string[1] { "A123" })));
// _cfxHelper2.PublishEvent(new CFXEnvelope(workStartedEvent.Handle(testGuid, "A123456", new string[] { "A123" })));
_cfxHelper2.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(testGuid, "ConveyorIn", 1)));
_cfxHelper2.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle(testGuid, "ConveyorIn", 1)));
_cfxHelper2.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle(testGuid, "ConveyorIn", 1)));
_cfxHelper2.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(testGuid, "ConveyorIn", 1)));
_cfxHelper2.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(testGuid, "ConveyorOut", 2)));
_cfxHelper2.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle(testGuid, "ConveyorOut", 2)));
_cfxHelper2.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle(testGuid, "ConveyorOut", 2)));
_cfxHelper2.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(testGuid, "ConveyorOut", 2)));
// _cfxHelper2.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(testGuid, "ConveyorIn", 1)));
// _cfxHelper2.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle(testGuid, "ConveyorIn", 1)));
// _cfxHelper2.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle(testGuid, "ConveyorIn", 1)));
// _cfxHelper2.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(testGuid, "ConveyorIn", 1)));
// _cfxHelper2.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(testGuid, "ConveyorOut", 2)));
// _cfxHelper2.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle(testGuid, "ConveyorOut", 2)));
// _cfxHelper2.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle(testGuid, "ConveyorOut", 2)));
// _cfxHelper2.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(testGuid, "ConveyorOut", 2)));
_cfxHelper2.PublishEvent(new CFXEnvelope(workCompletedEvent.Handle(testGuid, "A123456", new string[] { "A123" })));
_cfxHelper2.PublishEvent(new CFXEnvelope(unitsDepartedEvent.Handle(null, new string[1] { "A123" })));
_cfxHelper2.PublishEvent(new CFXEnvelope(unitsProcessedEvent.Handle(testGuid, cFXUnitProcessedDataGet.ProcessDataGet2())));
_cfxHelper2.PublishEvent(new CFXEnvelope(endpointShuttingDownEvent.Handle("CFX.A00.SDSH000002")));
// _cfxHelper2.PublishEvent(new CFXEnvelope(workCompletedEvent.Handle(testGuid, "A123456", new string[] { "A123" })));
// _cfxHelper2.PublishEvent(new CFXEnvelope(unitsDepartedEvent.Handle(null, new string[1] { "A123" })));
// _cfxHelper2.PublishEvent(new CFXEnvelope(unitsProcessedEvent.Handle(testGuid, cFXUnitProcessedDataGet.ProcessDataGet2())));
// _cfxHelper2.PublishEvent(new CFXEnvelope(endpointShuttingDownEvent.Handle("CFX.A00.SDSH000002")));
_cfxHelper2.SendValidateUnitsRequest("amqp://127.0.0.1:8888", "A123456", new string[1] { "A123" });
}
// _cfxHelper2.SendValidateUnitsRequest("amqp://127.0.0.1:8888", "A123456", new string[1] { "A123" });
// }
public void Test3()
{
//// 实例化所有事件对象
Guid testGuid = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399");
// public void Test3()
// {
// //// 实例化所有事件对象
// Guid testGuid = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399");
//// 发布所有事件
////_cfxHelper3.PublishEvent(new CFXEnvelope(heartbeatEvent.Handle("CFX.A00.SDSH000003")));
// //// 发布所有事件
// ////_cfxHelper3.PublishEvent(new CFXEnvelope(heartbeatEvent.Handle("CFX.A00.SDSH000003")));
_cfxHelper3.PublishEvent(new CFXEnvelope(endpointConnectedEvent.Handle("CFX.A00.SDSH000003", "amqp://127.0.0.1:1235", "amqp://127.0.0.1:8888")));
_cfxHelper3.PublishEvent(new CFXEnvelope(faultOccurredEvent.Handle("01", FaultSeverity.Warning, testGuid, "Error", testGuid)));
_cfxHelper3.PublishEvent(new CFXEnvelope(faultAcknowledgedEvent.Handle()));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationStateChangedEvent.Handle(ResourceState.USD_Repair)));
_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("RecipeA", "Oven", 1)));
_cfxHelper3.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle("RecipeA")));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationOfflineEvent.Handle()));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationOnlineEvent.Handle()));
// _cfxHelper3.PublishEvent(new CFXEnvelope(endpointConnectedEvent.Handle("CFX.A00.SDSH000003", "amqp://127.0.0.1:1235", "amqp://127.0.0.1:8888")));
// _cfxHelper3.PublishEvent(new CFXEnvelope(faultOccurredEvent.Handle("01", FaultSeverity.Warning, testGuid, "Error", testGuid)));
// _cfxHelper3.PublishEvent(new CFXEnvelope(faultAcknowledgedEvent.Handle()));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationStateChangedEvent.Handle(ResourceState.USD_Repair)));
// _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("RecipeA", "Oven", 1)));
// _cfxHelper3.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle("RecipeA")));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationOfflineEvent.Handle()));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationOnlineEvent.Handle()));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "-1", "0", "-1", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "0", "1", "0", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "1", "4", "1", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "2", "2", "2", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "3", "2", "3", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "4", "2", "4", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "5", "2", "5", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "6", "1", "6", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "7", "2", "7", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "8", "2", "8", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "9", "2", "9", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "10", "3", "10", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "11", "3", "11", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "12", "2", "12", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "-1", "0", "-1", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "0", "1", "0", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "1", "4", "1", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "2", "2", "2", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "3", "2", "3", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "4", "2", "4", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "5", "2", "5", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "6", "1", "6", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "7", "2", "7", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "8", "2", "8", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "9", "2", "9", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "10", "3", "10", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "11", "3", "11", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
// _cfxHelper3.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "12", "2", "12", "1000", "0", "60", "3600", "4", "1", "5", "0", "0"))));
_cfxHelper3.PublishEvent(new CFXEnvelope(unitsArrivedEvent.Handle("A123456", new string[1] { "A123" })));
_cfxHelper3.PublishEvent(new CFXEnvelope(workStartedEvent.Handle(testGuid, "A123456", new string[] { "A123" })));
// _cfxHelper3.PublishEvent(new CFXEnvelope(unitsArrivedEvent.Handle("A123456", new string[1] { "A123" })));
// _cfxHelper3.PublishEvent(new CFXEnvelope(workStartedEvent.Handle(testGuid, "A123456", new string[] { "A123" })));
_cfxHelper3.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(testGuid, "PreHeatOven", 1)));
_cfxHelper3.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle(testGuid, "PreHeatOven", 1)));
_cfxHelper3.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle(testGuid, "PreHeatOven", 1)));
_cfxHelper3.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(testGuid, "PreHeatOven", 1)));
_cfxHelper3.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(testGuid, "PreCureOven", 2)));
_cfxHelper3.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle(testGuid, "PreCureOven", 2)));
_cfxHelper3.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle(testGuid, "PreCureOven", 2)));
_cfxHelper3.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(testGuid, "PreCureOven", 2)));
_cfxHelper3.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(testGuid, "CureOven", 3)));
_cfxHelper3.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle(testGuid, "CureOven", 3)));
_cfxHelper3.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle(testGuid, "CureOven", 3)));
_cfxHelper3.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(testGuid, "CureOven", 3)));
// _cfxHelper3.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(testGuid, "PreHeatOven", 1)));
// _cfxHelper3.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle(testGuid, "PreHeatOven", 1)));
// _cfxHelper3.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle(testGuid, "PreHeatOven", 1)));
// _cfxHelper3.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(testGuid, "PreHeatOven", 1)));
// _cfxHelper3.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(testGuid, "PreCureOven", 2)));
// _cfxHelper3.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle(testGuid, "PreCureOven", 2)));
// _cfxHelper3.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle(testGuid, "PreCureOven", 2)));
// _cfxHelper3.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(testGuid, "PreCureOven", 2)));
// _cfxHelper3.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle(testGuid, "CureOven", 3)));
// _cfxHelper3.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle(testGuid, "CureOven", 3)));
// _cfxHelper3.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle(testGuid, "CureOven", 3)));
// _cfxHelper3.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle(testGuid, "CureOven", 3)));
_cfxHelper3.PublishEvent(new CFXEnvelope(workCompletedEvent.Handle(testGuid, "A123456", new string[] { "A123" })));
_cfxHelper3.PublishEvent(new CFXEnvelope(unitsDepartedEvent.Handle(null, new string[1] { "A123" })));
_cfxHelper3.PublishEvent(new CFXEnvelope(unitsProcessedEvent.Handle(testGuid, cFXUnitProcessedDataGet.ProcessDataGet3(new UnitsProcess3Entity()))));
_cfxHelper3.PublishEvent(new CFXEnvelope(endpointShuttingDownEvent.Handle("CFX.A00.SDSH000003")));
// _cfxHelper3.PublishEvent(new CFXEnvelope(workCompletedEvent.Handle(testGuid, "A123456", new string[] { "A123" })));
// _cfxHelper3.PublishEvent(new CFXEnvelope(unitsDepartedEvent.Handle(null, new string[1] { "A123" })));
// _cfxHelper3.PublishEvent(new CFXEnvelope(unitsProcessedEvent.Handle(testGuid, cFXUnitProcessedDataGet.ProcessDataGet3(new UnitsProcess3Entity()))));
// _cfxHelper3.PublishEvent(new CFXEnvelope(endpointShuttingDownEvent.Handle("CFX.A00.SDSH000003")));
_cfxHelper3.SendValidateUnitsRequest("amqp://127.0.0.1:8888", "A123456", new string[1] { "A123" });
}
// _cfxHelper3.SendValidateUnitsRequest("amqp://127.0.0.1:8888", "A123456", new string[1] { "A123" });
// }
/// <summary>
/// stationParameters参数设置
/// </summary>
public List<Parameter> ParameterSet(
string interfaceID,
string equipType,
string status,
string light,
string statusCode,
string passQty,
string failQty,
string cycleTime,
string runningTime,
string waitingTime,
string selfCheck,
string inputQty,
string errorCnt,
string errorTimes
)
{
return new List<Parameter>()
{
new GenericParameter()
{
Name = "InterfaceID",
Value = interfaceID
},
new GenericParameter()
{
Name = "EquipType",
Value = equipType
},
new GenericParameter()
{
Name = "Status",
Value = status
},
new GenericParameter()
{
Name = "Light",
Value = light
},
new GenericParameter()
{
Name = "StatusCode",
Value = statusCode
},
new GenericParameter()
{
Name = "PassQty",
Value = passQty
},
new GenericParameter()
{
Name = "FailQty",
Value = failQty
},
new GenericParameter()
{
Name = "CycleTime",
Value = cycleTime
},
new GenericParameter()
{
Name = "RunningTime",
Value = runningTime
},
new GenericParameter()
{
Name = "WaitingTime",
Value = waitingTime
},
new GenericParameter()
{
Name = "SelfCheck",
Value = selfCheck
},
new GenericParameter()
{
Name = "InputQty",
Value = inputQty
},
new GenericParameter()
{
Name = "ErrorCnt",
Value = errorCnt
},
new GenericParameter()
{
Name = "ErrorTimes",
Value = errorTimes
},
};
}
}
}
// /// <summary>
// /// stationParameters参数设置
// /// </summary>
// public List<Parameter> ParameterSet(
// string interfaceID,
// string equipType,
// string status,
// string light,
// string statusCode,
// string passQty,
// string failQty,
// string cycleTime,
// string runningTime,
// string waitingTime,
// string selfCheck,
// string inputQty,
// string errorCnt,
// string errorTimes
// )
// {
// return new List<Parameter>()
// {
// new GenericParameter()
// {
// Name = "InterfaceID",
// Value = interfaceID
// },
// new GenericParameter()
// {
// Name = "EquipType",
// Value = equipType
// },
// new GenericParameter()
// {
// Name = "Status",
// Value = status
// },
// new GenericParameter()
// {
// Name = "Light",
// Value = light
// },
// new GenericParameter()
// {
// Name = "StatusCode",
// Value = statusCode
// },
// new GenericParameter()
// {
// Name = "PassQty",
// Value = passQty
// },
// new GenericParameter()
// {
// Name = "FailQty",
// Value = failQty
// },
// new GenericParameter()
// {
// Name = "CycleTime",
// Value = cycleTime
// },
// new GenericParameter()
// {
// Name = "RunningTime",
// Value = runningTime
// },
// new GenericParameter()
// {
// Name = "WaitingTime",
// Value = waitingTime
// },
// new GenericParameter()
// {
// Name = "SelfCheck",
// Value = selfCheck
// },
// new GenericParameter()
// {
// Name = "InputQty",
// Value = inputQty
// },
// new GenericParameter()
// {
// Name = "ErrorCnt",
// Value = errorCnt
// },
// new GenericParameter()
// {
// Name = "ErrorTimes",
// Value = errorTimes
// },
// };
// }
// }
//}

@ -19,18 +19,18 @@ namespace Sln.Iot.Common
public static MesReportEntity Connect1Entity = new MesReportEntity() { InterfaceID = "OT00470018" };
/// <summary>
/// 提升机1数据
/// 烤箱数据
/// </summary>
public static MesReportEntity Connect2Entity = new MesReportEntity() { InterfaceID = "OT00470019" };
/// <summary>
/// 烤箱2数据
/// </summary>
public static MesReportEntity Connect3Entity = new MesReportEntity() { InterfaceID = "OT00470017" };
///// <summary>
///// 烤箱2数据
///// </summary>
//public static MesReportEntity Connect3Entity = new MesReportEntity() { InterfaceID = "OT00470017" };
/// <summary>
/// 提升机2数据
/// </summary>
public static MesReportEntity Connect4Entity = new MesReportEntity() { InterfaceID = "OT00470020" };
///// <summary>
///// 提升机2数据
///// </summary>
//public static MesReportEntity Connect4Entity = new MesReportEntity() { InterfaceID = "OT00470020" };
}
}

@ -64,31 +64,31 @@ namespace Sln.Iot.Config
/// </summary>
public CFXConfig VacuumConfig { get; set; }
/// <summary>
/// CFX配置-提升机1
/// </summary>
public CFXConfig Lift1Config { get; set; }
/// <summary>
/// CFX配置-烤炉
/// </summary>
public CFXConfig OvenConfig { get; set; }
/// <summary>
/// CFX配置-提升机2
/// </summary>
public CFXConfig Lift2Config { get; set; }
/// <summary>
/// MES的URL
/// </summary>
public string MESURL { get; set; }
/// <summary>
/// MES的URL
/// </summary>
public string TcpServerConfig { get; set; }
/// <summary>
/// MES的URN
/// </summary>
public string MESURN { get; set; }
/// <summary>
/// MES发送延时(秒)
/// </summary>
public int MesSendDelay { get; set; }
/// <summary>
/// 是否输出报警日志
/// </summary>

@ -74,7 +74,7 @@ namespace Sln.Iot.Model.Entity
/// <summary>
/// 产品型号
/// </summary>
public string Cya { get; set; } = "灌胶";
public string Cya { get; set; } = "灌胶固化线";
/// <summary>
/// 上次故障时间

@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sln.Iot.Model.Entity
{
/// <summary>
/// 固化炉(隧道炉)数据实体
/// </summary>
public class UnitsProcessOvenEntity
{
/// <summary>
/// 固化1温度设定值
/// </summary>
public int CureOven1SetValue { get; set; }
/// <summary>
/// 固化2温度设定值
/// </summary>
public int CureOven2SetValue { get; set; }
/// <summary>
/// 固化1温度实际值
/// </summary>
public int CureOven1ActValue { get; set; }
/// <summary>
/// 固化2温度实际值
/// </summary>
public int CureOven2ActValue { get; set; }
}
}

@ -0,0 +1,109 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sln.Iot.Model.Entity
{
/// <summary>
/// 真空灌胶机数据实体
/// </summary>
public class UnitsProcessVacuumEntity
{
/// <summary>
/// 配方数据
/// </summary>
public string FormulaData { get; set; }
/// <summary>
/// 推胶速度设定值
/// </summary>
public float GluePushSpeedSetValue { get; set; }
/// <summary>
/// 胶量设定值1
/// </summary>
public float GlueAmountSetValue1 { get; set; }
/// <summary>
/// 胶量设定值2
/// </summary>
public float GlueAmountSetValue2 { get; set; }
/// <summary>
/// 胶量设定值3
/// </summary>
public float GlueAmountSetValue3 { get; set; }
/// <summary>
/// 胶量设定值4
/// </summary>
public float GlueAmountSetValue4 { get; set; }
/// <summary>
/// 胶量设定值5
/// </summary>
public float GlueAmountSetValue5 { get; set; }
/// <summary>
/// 胶量设定值6
/// </summary>
public float GlueAmountSetValue6 { get; set; }
/// <summary>
/// 胶量设定值7
/// </summary>
public float GlueAmountSetValue7 { get; set; }
/// <summary>
/// 胶量设定值8
/// </summary>
public float GlueAmountSetValue8 { get; set; }
/// <summary>
/// 胶量设定值9
/// </summary>
public float GlueAmountSetValue9 { get; set; }
/// <summary>
/// 胶量设定值10
/// </summary>
public float GlueAmountSetValue10 { get; set; }
/// <summary>
/// 真空度设定值
/// </summary>
public float VacuumDegreeSetValue { get; set; }
/// <summary>
/// 保压时长设定值
/// </summary>
public int PressureHoldTimeSetValue { get; set; }
/// <summary>
/// 真空箱是否启用设定值
/// </summary>
public int VacuumIsUseSetValue { get; set; }
/// <summary>
/// 总胶量设定值
/// </summary>
public float TotalGlueAmountSetValue { get; set; }
/// <summary>
/// A泵压力实际值
/// </summary>
public float PumpAPressureActValue { get; set; }
/// <summary>
/// B泵压力实际值
/// </summary>
public float PumpBPressureActValue { get; set; }
/// <summary>
/// 灌胶真空度实际值
/// </summary>
public float VacuumDegreeActValue { get; set; }
}
}

@ -23,27 +23,27 @@ namespace Sln.Iot.PLC
/// <summary>
/// PLC1 192.168.1.20 烤箱
/// </summary>
public DeltaTcpNet DeltaInstance0;
public DeltaTcpNet PLC20;
/// <summary>
/// PLC1 192.168.1.21 真空箱1
/// PLC1 192.168.1.21 胶机
/// </summary>
public DeltaTcpNet DeltaInstance1;
public DeltaTcpNet PLC21;
/// <summary>
/// PLC2 192.168.1.22 真空箱2
/// PLC2 192.168.1.22 真空箱
/// </summary>
public DeltaTcpNet DeltaInstance2;
public DeltaTcpNet PLC22;
/// <summary>
/// PLC3 192.168.1.23 提升机1
/// PLC3 192.168.1.23 接驳台1
/// </summary>
public DeltaTcpNet DeltaInstance3;
public DeltaTcpNet PLC23;
/// <summary>
/// PLC4 192.168.1.24 提升机2
/// PLC4 192.168.1.24 接驳台2
/// </summary>
public DeltaTcpNet DeltaInstance4;
public DeltaTcpNet PLC24;
/// <summary>
/// 锁对象1
@ -62,17 +62,17 @@ namespace Sln.Iot.PLC
};
await Task.WhenAll(tasks);
DeltaInstance0 = tasks[0].GetAwaiter().GetResult();
_log.Info($"PLC连接成功: {DeltaInstance0.IpAddress}");
DeltaInstance1 = tasks[1].GetAwaiter().GetResult();
_log.Info($"PLC连接成功: {DeltaInstance1.IpAddress}");
DeltaInstance2 = tasks[2].GetAwaiter().GetResult();
_log.Info($"PLC连接成功: {DeltaInstance2.IpAddress}");
DeltaInstance3 = tasks[3].GetAwaiter().GetResult();
_log.Info($"PLC连接成功: {DeltaInstance3.IpAddress}");
DeltaInstance4 = tasks[4].GetAwaiter().GetResult();
_log.Info($"PLC连接成功: {DeltaInstance4.IpAddress}");
PLC20 = tasks[0].GetAwaiter().GetResult();
_log.Info($"PLC连接成功: {PLC20.IpAddress}");
PLC21 = tasks[1].GetAwaiter().GetResult();
_log.Info($"PLC连接成功: {PLC21.IpAddress}");
PLC22 = tasks[2].GetAwaiter().GetResult();
_log.Info($"PLC连接成功: {PLC22.IpAddress}");
PLC23 = tasks[3].GetAwaiter().GetResult();
_log.Info($"PLC连接成功: {PLC23.IpAddress}");
PLC24 = tasks[4].GetAwaiter().GetResult();
_log.Info($"PLC连接成功: {PLC24.IpAddress}");
_log.Info("PLC连接全部成功");
}

@ -202,5 +202,31 @@ namespace Sln.Iot.Repository.service
return time2;
}
}
/// <summary>
/// 根据时间字段索引获取时间值
/// </summary>
public string GetTimeByTrayCode(string trayCode, string timeField)
{
try
{
var res = _helper.Query(t => t.TrayCode == trayCode).FirstOrDefault();
if (res == null) return string.Empty;
return timeField switch
{
"1" => res.Time1 ?? string.Empty,
"2" => res.Time2 ?? string.Empty,
"3" => res.Time3 ?? string.Empty,
"4" => res.Time4 ?? string.Empty,
_ => string.Empty
};
}
catch (Exception ex)
{
_log.Error($"根据托盘码获取time{timeField}错误", ex);
return string.Empty;
}
}
}
}

@ -22,11 +22,11 @@ namespace Sln.Iot.Test
PLCConnect.Instance.InitConnect();
UnitsProcessPLCDataGetBusiness unitsProcessPLCDataGetBusiness = UnitsProcessPLCDataGetBusiness.Instance;
var data1 = unitsProcessPLCDataGetBusiness.Vacuum1PlcDataGet();
var data2 = unitsProcessPLCDataGetBusiness.Vacuum2PlcDataGet();
var data3 = unitsProcessPLCDataGetBusiness.PreHeatOvenPlcDataGet();
var data4 = unitsProcessPLCDataGetBusiness.PreCureOvenPlcDataGet();
var data5 = unitsProcessPLCDataGetBusiness.CureOvenPlcDataGet();
//var data1 = unitsProcessPLCDataGetBusiness.Vacuum1PlcDataGet();
//var data2 = unitsProcessPLCDataGetBusiness.Vacuum2PlcDataGet();
//var data3 = unitsProcessPLCDataGetBusiness.PreHeatOvenPlcDataGet();
//var data4 = unitsProcessPLCDataGetBusiness.PreCureOvenPlcDataGet();
//var data5 = unitsProcessPLCDataGetBusiness.CureOvenPlcDataGet();
}

@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

@ -0,0 +1,7 @@
namespace Sln.Iot.Touchsocket
{
public class TouchSocketSetup
{
}
}

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 18
VisualStudioVersion = 18.2.11415.280 d18.0
VisualStudioVersion = 18.2.11415.280
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sln.Iot", "Sln.Iot\Sln.Iot.csproj", "{2140AD68-D4CE-44EC-B9D3-20D18EB59F9D}"
EndProject

@ -74,36 +74,15 @@ namespace Sln.Iot
//CFX接口启动
//真空注胶机
CFXConnect1.Instance.Init(appConfig.VacuumConfig.CFXHandle,
CFXConnectOven.Instance.Init(appConfig.VacuumConfig.CFXHandle,
new Uri(appConfig.VacuumConfig.LocalURI),
new Uri(appConfig.VacuumConfig.UpperURI));
//提升机1
CFXConnect2.Instance.Init(appConfig.Lift1Config.CFXHandle,
new Uri(appConfig.Lift1Config.LocalURI),
new Uri(appConfig.Lift1Config.UpperURI));
//隧道烤箱
CFXConnect3.Instance.Init(appConfig.OvenConfig.CFXHandle,
CFXConnectVacuum.Instance.Init(appConfig.OvenConfig.CFXHandle,
new Uri(appConfig.OvenConfig.LocalURI),
new Uri(appConfig.OvenConfig.UpperURI));
//提升机2
CFXConnect4.Instance.Init(appConfig.Lift2Config.CFXHandle,
new Uri(appConfig.Lift2Config.LocalURI),
new Uri(appConfig.Lift2Config.UpperURI));
////CFX接口启动
////真空注胶机
//CFXConnect1.Instance.Init("CFX.A00.SDSH000001",
// new Uri("amqp://127.0.0.1:1235"),
// new Uri("amqp://127.0.0.1:8888"));
////升降回流
//CFXConnect2.Instance.Init("CFX.A00.SDSH000002",
// new Uri("amqp://127.0.0.1:1235"),
// new Uri("amqp://127.0.0.1:8888"));
////隧道烤箱
//CFXConnect3.Instance.Init("CFX.A00.SDSH000003",
// new Uri("amqp://127.0.0.1:1235"),
// new Uri("amqp://127.0.0.1:8888"));
TouchTcpServer.Instance.TcpServerStarted(appConfig.TcpServerConfig);
//业务类启动
BusinessStart business = new BusinessStart();
@ -123,10 +102,8 @@ namespace Sln.Iot
/// </summary>
public static void ProgramClose()
{
CFXConnect1.Instance.PublishEvent(new CFXEnvelope(new EndpointShuttingDownEvent().Handle(CFXConnect1.Instance.CFXHandle)));
CFXConnect2.Instance.PublishEvent(new CFXEnvelope(new EndpointShuttingDownEvent().Handle(CFXConnect2.Instance.CFXHandle)));
CFXConnect3.Instance.PublishEvent(new CFXEnvelope(new EndpointShuttingDownEvent().Handle(CFXConnect3.Instance.CFXHandle)));
CFXConnect4.Instance.PublishEvent(new CFXEnvelope(new EndpointShuttingDownEvent().Handle(CFXConnect4.Instance.CFXHandle)));
CFXConnectOven.Instance.PublishEvent(new CFXEnvelope(new EndpointShuttingDownEvent().Handle(CFXConnectOven.Instance.CFXHandle)));
CFXConnectVacuum.Instance.PublishEvent(new CFXEnvelope(new EndpointShuttingDownEvent().Handle(CFXConnectVacuum.Instance.CFXHandle)));
}
}
}

@ -16,28 +16,20 @@
//URI
"UpperURI": "http://10.148.192.32:8090/sensordata?sensorId=UploadMachineData"
},
"Lift1Config": {
"DeviceName": "Lift1",
"CFXHandle": "CFX.A00.OT00470019",
"LocalURI": "amqp://127.0.0.1:1236",
"UpperURI": "http://10.148.192.32:8090/sensordata?sensorId=UploadMachineData"
},
"OvenConfig": {
"DeviceName": "Oven",
"CFXHandle": "CFX.A00.OT00470017",
"LocalURI": "amqp://127.0.0.1:1237",
"UpperURI": "http://10.148.192.32:8090/sensordata?sensorId=UploadMachineData"
},
"Lift2Config": {
"DeviceName": "Lift2",
"CFXHandle": "CFX.A00.OT00470020",
"LocalURI": "amqp://127.0.0.1:1238",
"LocalURI": "amqp://127.0.0.1:1236",
"UpperURI": "http://10.148.192.32:8090/sensordata?sensorId=UploadMachineData"
},
//TCP
"TcpServerConfig": "127.0.0.1:1145",
//MES
"MESURL": "http://10.148.192.32:8090",
//MES
"MESURN": "/sensordata?sensorId=UploadMachineData",
//MES()
"MesSendDelay": 15,
//
"IsAlarmLog": true,
//MES

Loading…
Cancel
Save