diff --git a/Sln.Iot.Business/RFID01Business.cs b/Sln.Iot.Business/RFID01Business.cs
index 5c7d797..8292695 100644
--- a/Sln.Iot.Business/RFID01Business.cs
+++ b/Sln.Iot.Business/RFID01Business.cs
@@ -30,6 +30,8 @@ namespace Sln.Iot.Business
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 TrayBindingService trayBindingService = TrayBindingService.Instance;
private CFXConnect1 connect1 = CFXConnect1.Instance;
@@ -99,6 +101,7 @@ namespace Sln.Iot.Business
//CFX
Task.Run(() =>
{
+
//单元抵达事件
connect1.PublishEvent(new CFXEnvelope(unitsArrivedEvent.Handle(traycode, prodcode)));
connect2.PublishEvent(new CFXEnvelope(unitsArrivedEvent.Handle(traycode, prodcode)));
@@ -109,6 +112,9 @@ namespace Sln.Iot.Business
connect2.PublishEvent(new CFXEnvelope(workStartedEvent.Handle(tid, traycode, prodcode)));
connect3.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}");
diff --git a/Sln.Iot.Business/RFID06Business.cs b/Sln.Iot.Business/RFID06Business.cs
index 5d89cbd..bf53a1c 100644
--- a/Sln.Iot.Business/RFID06Business.cs
+++ b/Sln.Iot.Business/RFID06Business.cs
@@ -1,5 +1,6 @@
using CFX;
using CFX.Structures;
+using CFX.Structures.PressInsertion;
using HslCommunication;
using Sln.Iot.CFX.CFXBusiness;
using Sln.Iot.CFX.CFXConnect;
@@ -38,11 +39,13 @@ namespace Sln.Iot.Business
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 CFXConnect2 connect2 = CFXConnect2.Instance;
private CFXConnect3 connect3 = CFXConnect3.Instance;
+ private CFXConnect4 connect4 = CFXConnect4.Instance;
public RFID06Business()
{
@@ -109,14 +112,18 @@ namespace Sln.Iot.Business
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)));
- connect2.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)));
- connect2.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} 单元离站 ");
diff --git a/Sln.Iot.CFX/CFXConnect/CFXConnect1.cs b/Sln.Iot.CFX/CFXConnect/CFXConnect1.cs
index 34e4230..6f3bbb5 100644
--- a/Sln.Iot.CFX/CFXConnect/CFXConnect1.cs
+++ b/Sln.Iot.CFX/CFXConnect/CFXConnect1.cs
@@ -40,7 +40,7 @@ namespace Sln.Iot.CFX.CFXConnect
CFXEventTools cFXEventTools = CFXEventTools.Instance;
- public string CFXHandle { get; set; } = "CFX.A00.SDSH000001";
+ public string CFXHandle { get; set; } = "CFX.A00.OT00470018";
protected override CFXMessage HandleRequest(CFXEnvelope request)
{
diff --git a/Sln.Iot.CFX/CFXConnect/CFXConnect2.cs b/Sln.Iot.CFX/CFXConnect/CFXConnect2.cs
index a82e9d9..a507928 100644
--- a/Sln.Iot.CFX/CFXConnect/CFXConnect2.cs
+++ b/Sln.Iot.CFX/CFXConnect/CFXConnect2.cs
@@ -16,7 +16,7 @@ using Sln.Iot.CFX.Event;
namespace Sln.Iot.CFX.CFXConnect
{
///
- /// 提升机连接
+ /// 提升机1连接
///
public class CFXConnect2 : CFXHelper
{
@@ -42,7 +42,7 @@ namespace Sln.Iot.CFX.CFXConnect
CFXEventTools cFXEventTools = CFXEventTools.Instance;
- public string CFXHandle { get; set; } = "SDSH000002";
+ public string CFXHandle { get; set; } = "CFX.A00.OT00470019";
protected override CFXMessage HandleRequest(CFXEnvelope request)
{
@@ -112,7 +112,7 @@ namespace Sln.Iot.CFX.CFXConnect
var validateresult = Endpoint.ExecuteRequest(uri, new CFXEnvelope(msg)
{
Source = Endpoint.CFXHandle,
- Target = "CFX.A00.SDSH000002"
+ Target = "inline-control"
});
if (validateresult == null)
diff --git a/Sln.Iot.CFX/CFXConnect/CFXConnect3.cs b/Sln.Iot.CFX/CFXConnect/CFXConnect3.cs
index 8f3beca..1f45799 100644
--- a/Sln.Iot.CFX/CFXConnect/CFXConnect3.cs
+++ b/Sln.Iot.CFX/CFXConnect/CFXConnect3.cs
@@ -42,7 +42,7 @@ namespace Sln.Iot.CFX.CFXConnect
CFXEventTools cFXEventTools = CFXEventTools.Instance;
- public string CFXHandle { get; set; } = "SDSH000003";
+ public string CFXHandle { get; set; } = "CFX.A00.OT00470017";
protected override CFXMessage HandleRequest(CFXEnvelope request)
{
@@ -112,7 +112,7 @@ namespace Sln.Iot.CFX.CFXConnect
var validateresult = Endpoint.ExecuteRequest(uri, new CFXEnvelope(msg)
{
Source = Endpoint.CFXHandle,
- Target = "CFX.A00.SDSH000003"
+ Target = "inline-control"
});
if (validateresult == null)
diff --git a/Sln.Iot.CFX/CFXConnect/CFXConnect4.cs b/Sln.Iot.CFX/CFXConnect/CFXConnect4.cs
new file mode 100644
index 0000000..eac3d15
--- /dev/null
+++ b/Sln.Iot.CFX/CFXConnect/CFXConnect4.cs
@@ -0,0 +1,132 @@
+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
+{
+ ///
+ /// 提升机2连接
+ ///
+ public class CFXConnect4 : CFXHelper
+ {
+ private static readonly Lazy lazy = new Lazy(() => 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;
+ }
+
+ ///
+ /// 发送生产单元验证请求接收通知
+ ///
+ public void SendValidateUnitsRequest(string uri, string primaryIdentifier, string[] unitsIdentifier)
+ {
+ try
+ {
+ ValidateUnitsRequest msg = new ValidateUnitsRequest()
+ {
+ Validations = new List()
+ {
+ 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)
+ {
+
+ }
+ }
+ }
+}
diff --git a/Sln.Iot.CFX/CFXRequestes/AreYouThereRequestReceived1.cs b/Sln.Iot.CFX/CFXRequestes/AreYouThereRequestReceived1.cs
index 1877e0d..fb9b775 100644
--- a/Sln.Iot.CFX/CFXRequestes/AreYouThereRequestReceived1.cs
+++ b/Sln.Iot.CFX/CFXRequestes/AreYouThereRequestReceived1.cs
@@ -52,7 +52,7 @@ public class AreYouThereRequestReceived1 : BaseAreYouThereRequestReceived
Message = "",
},
- CFXHandle = "CFX.A00.SDSH000001",
+ CFXHandle = "CFX.A00.OT00470018",
RequestNetworkUri = "amqp://127.0.0.1:1235/",
RequestTargetAddress = "amqp://127.0.0.1:8888/"
};
diff --git a/Sln.Iot.CFX/CFXRequestes/AreYouThereRequestReceived2.cs b/Sln.Iot.CFX/CFXRequestes/AreYouThereRequestReceived2.cs
index bddc5d6..6a90ace 100644
--- a/Sln.Iot.CFX/CFXRequestes/AreYouThereRequestReceived2.cs
+++ b/Sln.Iot.CFX/CFXRequestes/AreYouThereRequestReceived2.cs
@@ -52,7 +52,7 @@ public class AreYouThereRequestReceived2 : BaseAreYouThereRequestReceived
Message = "",
},
- CFXHandle = "CFX.A00.SDSH000002",
+ CFXHandle = "CFX.A00.OT00470019",
RequestNetworkUri = "amqp://127.0.0.1:1235/",
RequestTargetAddress = "amqp://127.0.0.1:8888/"
};
diff --git a/Sln.Iot.CFX/CFXRequestes/AreYouThereRequestReceived3.cs b/Sln.Iot.CFX/CFXRequestes/AreYouThereRequestReceived3.cs
index cd4760a..b75c2ef 100644
--- a/Sln.Iot.CFX/CFXRequestes/AreYouThereRequestReceived3.cs
+++ b/Sln.Iot.CFX/CFXRequestes/AreYouThereRequestReceived3.cs
@@ -52,7 +52,7 @@ public class AreYouThereRequestReceived3 : BaseAreYouThereRequestReceived
Message = "",
},
- CFXHandle = "CFX.A00.SDSH000003",
+ CFXHandle = "CFX.A00.OT00470017",
RequestNetworkUri = "amqp://127.0.0.1:1235/",
RequestTargetAddress = "amqp://127.0.0.1:8888/"
};
diff --git a/Sln.Iot.CFX/CFXRequestes/AreYouThereRequestReceived4.cs b/Sln.Iot.CFX/CFXRequestes/AreYouThereRequestReceived4.cs
new file mode 100644
index 0000000..8ea5c98
--- /dev/null
+++ b/Sln.Iot.CFX/CFXRequestes/AreYouThereRequestReceived4.cs
@@ -0,0 +1,63 @@
+#region << 版 本 注 释 >>
+
+/*--------------------------------------------------------------------
+* 版权所有 (c) 2025 WenJY 保留所有权利。
+* CLR版本:4.0.30319.42000
+* 机器名称:Mr.Wen's MacBook Pro
+* 命名空间:Sln.Iot.CFX.CoreCommunications
+* 唯一标识:8D142D51-E08D-42FC-8C59-4551A1B36306
+*
+* 创建者:WenJY
+* 电子邮箱:
+* 创建时间:2025-10-24 14:58:25
+* 版本:V1.0.0
+* 描述:
+*
+*--------------------------------------------------------------------
+* 修改人:
+* 时间:
+* 修改说明:
+*
+* 版本:V1.0.0
+*--------------------------------------------------------------------*/
+
+#endregion << 版 本 注 释 >>
+
+using CFX;
+using CFX.Structures;
+using Sln.Iot.CFX.RequestReceived;
+using Sln.Iot.Serilog;
+
+namespace Sln.Iot.CFX.CFXRequestes;
+
+///
+/// 5.4.1.1-端点在位查询请求
+/// AreYouThereRequest/Response
+///
+public class AreYouThereRequestReceived4 : BaseAreYouThereRequestReceived
+{
+ ///
+ /// 子类重写处理
+ ///
+ ///
+ ///
+ public override CFXMessage SubHandle(AreYouThereRequest request)
+ {
+ CFXMessage response = new AreYouThereResponse()
+ {
+ Result = new RequestResult()
+ {
+ Result = StatusResult.Success,
+ ResultCode = 0,
+ Message = "",
+ },
+
+ CFXHandle = "CFX.A00.OT00470020",
+ RequestNetworkUri = "amqp://127.0.0.1:1235/",
+ RequestTargetAddress = "amqp://127.0.0.1:8888/"
+ };
+
+ return response;
+ }
+
+}
\ No newline at end of file
diff --git a/Sln.Iot.CFX/CFXRequestes/GetActiveFaultsRequestReceived1.cs b/Sln.Iot.CFX/CFXRequestes/GetActiveFaultsRequestReceived1.cs
index 9474e2b..140021b 100644
--- a/Sln.Iot.CFX/CFXRequestes/GetActiveFaultsRequestReceived1.cs
+++ b/Sln.Iot.CFX/CFXRequestes/GetActiveFaultsRequestReceived1.cs
@@ -78,15 +78,15 @@ public class GetActiveFaultsRequestReceived1 : BaseGetActiveFaultsRequestReceive
ResultCode = 0,
Message = "",
},
- //ActiveFaults = faults
- ActiveFaults = new List()
- {
- new Fault()
- {
- Description = "测试错误1",
- FaultCode = "5003",
- }
- }
+ ActiveFaults = faults
+ //ActiveFaults = new List()
+ //{
+ // new Fault()
+ // {
+ // Description = "测试错误1",
+ // FaultCode = "5003",
+ // }
+ //}
};
return response;
diff --git a/Sln.Iot.CFX/CFXRequestes/GetActiveFaultsRequestReceived2.cs b/Sln.Iot.CFX/CFXRequestes/GetActiveFaultsRequestReceived2.cs
index 9d5f9eb..0b29d79 100644
--- a/Sln.Iot.CFX/CFXRequestes/GetActiveFaultsRequestReceived2.cs
+++ b/Sln.Iot.CFX/CFXRequestes/GetActiveFaultsRequestReceived2.cs
@@ -69,14 +69,15 @@ public class GetActiveFaultsRequestReceived2 : BaseGetActiveFaultsRequestReceive
ResultCode = 0,
Message = "",
},
- ActiveFaults = new List()
- {
- new Fault()
- {
- Description = "测试错误1",
- FaultCode = "5003",
- }
- }
+ ActiveFaults = faults
+ //ActiveFaults = new List()
+ //{
+ // new Fault()
+ // {
+ // Description = "测试错误1",
+ // FaultCode = "5003",
+ // }
+ //}
};
return response;
diff --git a/Sln.Iot.CFX/CFXRequestes/GetActiveFaultsRequestReceived3.cs b/Sln.Iot.CFX/CFXRequestes/GetActiveFaultsRequestReceived3.cs
index 410c2d7..be67b72 100644
--- a/Sln.Iot.CFX/CFXRequestes/GetActiveFaultsRequestReceived3.cs
+++ b/Sln.Iot.CFX/CFXRequestes/GetActiveFaultsRequestReceived3.cs
@@ -69,14 +69,15 @@ public class GetActiveFaultsRequestReceived3 : BaseGetActiveFaultsRequestReceive
ResultCode = 0,
Message = "",
},
- ActiveFaults = new List()
- {
- new Fault()
- {
- Description = "测试错误1",
- FaultCode = "5003",
- }
- }
+ ActiveFaults = faults
+ //ActiveFaults = new List()
+ //{
+ // new Fault()
+ // {
+ // Description = "测试错误1",
+ // FaultCode = "5003",
+ // }
+ //}
};
return response;
diff --git a/Sln.Iot.CFX/CFXRequestes/GetActiveFaultsRequestReceived4.cs b/Sln.Iot.CFX/CFXRequestes/GetActiveFaultsRequestReceived4.cs
new file mode 100644
index 0000000..07ce319
--- /dev/null
+++ b/Sln.Iot.CFX/CFXRequestes/GetActiveFaultsRequestReceived4.cs
@@ -0,0 +1,85 @@
+#region << 版 本 注 释 >>
+
+/*--------------------------------------------------------------------
+* 版权所有 (c) 2025 WenJY 保留所有权利。
+* CLR版本:4.0.30319.42000
+* 机器名称:Mr.Wen's MacBook Pro
+* 命名空间:Sln.Iot.CFX
+* 唯一标识:CB14024A-08C4-4FF4-BD6C-8E8667D00263
+*
+* 创建者:WenJY
+* 电子邮箱:
+* 创建时间:2025-10-24 15:23:00
+* 版本:V1.0.0
+* 描述:
+*
+*--------------------------------------------------------------------
+* 修改人:
+* 时间:
+* 修改说明:
+*
+* 版本:V1.0.0
+*--------------------------------------------------------------------*/
+
+#endregion << 版 本 注 释 >>
+
+using CFX;
+using CFX.ResourcePerformance;
+using CFX.Structures;
+using Sln.Iot.CFX.RequestReceived;
+using Sln.Iot.Repository.service;
+using Sln.Iot.Serilog;
+
+namespace Sln.Iot.CFX.CFXRequestes;
+
+///
+/// 5.4.4.1.5 - 查询当前有无错误
+/// GetActiveFaultsRequest/Response
+///
+public class GetActiveFaultsRequestReceived4 : BaseGetActiveFaultsRequestReceived
+{
+ private readonly ErrorService errorService = ErrorService.Instance;
+
+ ///
+ /// 子类重写处理
+ ///
+ ///
+ ///
+ public override CFXMessage SubHandle(GetActiveFaultsRequest request)
+ {
+ // 获取现在所有的错误
+ var errorList = errorService.GetOvenList().ToList();
+
+ List faults = new List();
+
+ foreach (var fault in errorList)
+ {
+ faults.Add(new Fault()
+ {
+ Description = fault.ErrorName,
+ FaultCode = fault.ErrorCode,
+ });
+ }
+
+ CFXMessage response = new GetActiveFaultsResponse()
+ {
+ Result = new RequestResult()
+ {
+ Result = StatusResult.Success,
+ ResultCode = 0,
+ Message = "",
+ },
+ ActiveFaults = faults
+ //ActiveFaults = new List()
+ //{
+ // new Fault()
+ // {
+ // Description = "测试错误1",
+ // FaultCode = "5003",
+ // }
+ //}
+ };
+
+ return response;
+ }
+}
\ No newline at end of file
diff --git a/Sln.Iot.CFX/CFXRequestes/GetActiveRecipeRequestReceived4.cs b/Sln.Iot.CFX/CFXRequestes/GetActiveRecipeRequestReceived4.cs
new file mode 100644
index 0000000..ea5191c
--- /dev/null
+++ b/Sln.Iot.CFX/CFXRequestes/GetActiveRecipeRequestReceived4.cs
@@ -0,0 +1,62 @@
+#region << 版 本 注 释 >>
+
+/*--------------------------------------------------------------------
+* 版权所有 (c) 2025 WenJY 保留所有权利。
+* CLR版本:4.0.30319.42000
+* 机器名称:Mr.Wen's MacBook Pro
+* 命名空间:Sln.Iot.CFX
+* 唯一标识:686D7EAB-9E42-43B2-B990-AF162E76F781
+*
+* 创建者:WenJY
+* 电子邮箱:
+* 创建时间:2025-10-24 15:18:38
+* 版本:V1.0.0
+* 描述:
+*
+*--------------------------------------------------------------------
+* 修改人:
+* 时间:
+* 修改说明:
+*
+* 版本:V1.0.0
+*--------------------------------------------------------------------*/
+
+#endregion << 版 本 注 释 >>
+
+using CFX;
+using CFX.Production;
+using CFX.Structures;
+using Sln.Iot.CFX.RequestReceived;
+using Sln.Iot.Serilog;
+
+namespace Sln.Iot.CFX.CFXRequestes;
+
+///
+/// 5.4.3.1.3 - 获取激活配方请求
+/// GetActiveRecipeRequest/Response
+///
+public class GetActiveRecipeRequestReceived4 : BaseGetActiveRecipeRequestReceived
+{
+ ///
+ /// 子类重写处理
+ ///
+ ///
+ ///
+ public override CFXMessage SubHandle(GetActiveRecipeRequest request)
+ {
+ CFXMessage response = new GetActiveRecipeResponse()
+ {
+ ActiveRecipeName = "No Recipe Device",
+ ActiveRecipeRevision = "1.0",
+ Result = new RequestResult()
+ {
+ Result = StatusResult.Success,
+ ResultCode = 0,
+ Message = ""
+ }
+ //配方数据
+ };
+
+ return response;
+ }
+}
\ No newline at end of file
diff --git a/Sln.Iot.CFX/CFXRequestes/GetEndpointInformationRequestReceived1.cs b/Sln.Iot.CFX/CFXRequestes/GetEndpointInformationRequestReceived1.cs
index b9fe7d1..60119e3 100644
--- a/Sln.Iot.CFX/CFXRequestes/GetEndpointInformationRequestReceived1.cs
+++ b/Sln.Iot.CFX/CFXRequestes/GetEndpointInformationRequestReceived1.cs
@@ -55,14 +55,14 @@ public class GetEndpointInformationRequestReceived1 : BaseGetEndpointInformation
},
EndpointInformation = new Endpoint()
{
- CFXHandle = "CFX.A00.SDSH000001",
+ CFXHandle = "CFX.A00.OT00470018",
CFXVersion = "2.0",
RequestNetworkUri = "amqp://127.0.0.1:1235/",
RequestTargetAddress = "amqp://127.0.0.1:8888/",
- ModelNumber = "XYZ真空注胶机",
+ ModelNumber = "真空注胶机",
NumberOfLanes = 1,
Vendor = "木子贸易中山有限公司",
- SerialNumber = "SDSH000001",
+ SerialNumber = "OT00470018",
Stages = new List
{
new StageInformation()
diff --git a/Sln.Iot.CFX/CFXRequestes/GetEndpointInformationRequestReceived2.cs b/Sln.Iot.CFX/CFXRequestes/GetEndpointInformationRequestReceived2.cs
index 06c3d5b..e8a2ef2 100644
--- a/Sln.Iot.CFX/CFXRequestes/GetEndpointInformationRequestReceived2.cs
+++ b/Sln.Iot.CFX/CFXRequestes/GetEndpointInformationRequestReceived2.cs
@@ -55,14 +55,14 @@ public class GetEndpointInformationRequestReceived2 : BaseGetEndpointInformation
},
EndpointInformation = new Endpoint()
{
- CFXHandle = "CFX.A00.SDSH000002",
+ CFXHandle = "CFX.A00.OT00470019",
CFXVersion = "2.0",
RequestNetworkUri = "amqp://127.0.0.1:1235/",
RequestTargetAddress = "amqp://127.0.0.1:8888/",
- ModelNumber = "升降回流",
+ ModelNumber = "升降回流机-1",
NumberOfLanes = 1,
Vendor = "木子贸易中山有限公司",
- SerialNumber = "SDSH000002",
+ SerialNumber = "OT00470019",
Stages = new List
{
new StageInformation()
@@ -74,15 +74,15 @@ public class GetEndpointInformationRequestReceived2 : BaseGetEndpointInformation
StageSequence = 1,
}
},
- new StageInformation()
- {
- Stage = new Stage()
- {
- StageName = "ConveyorOut",
- StageType = StageType.Work,
- StageSequence = 2,
- }
- }
+ //new StageInformation()
+ //{
+ // Stage = new Stage()
+ // {
+ // StageName = "ConveyorOut",
+ // StageType = StageType.Work,
+ // StageSequence = 2,
+ // }
+ //}
},
SupportedTopics = CFXSupportedTopicList.SupportedTopics
}
diff --git a/Sln.Iot.CFX/CFXRequestes/GetEndpointInformationRequestReceived3.cs b/Sln.Iot.CFX/CFXRequestes/GetEndpointInformationRequestReceived3.cs
index f1a700e..c88d8c8 100644
--- a/Sln.Iot.CFX/CFXRequestes/GetEndpointInformationRequestReceived3.cs
+++ b/Sln.Iot.CFX/CFXRequestes/GetEndpointInformationRequestReceived3.cs
@@ -55,14 +55,14 @@ public class GetEndpointInformationRequestReceived3 : BaseGetEndpointInformation
},
EndpointInformation = new Endpoint()
{
- CFXHandle = "CFX.A00.SDSH000003",
+ CFXHandle = "CFX.A00.OT00470017",
CFXVersion = "2.0",
RequestNetworkUri = "amqp://127.0.0.1:1235/",
RequestTargetAddress = "amqp://127.0.0.1:8888/",
ModelNumber = "隧道烤箱",
NumberOfLanes = 1,
Vendor = "木子贸易中山有限公司",
- SerialNumber = "SDSH000003",
+ SerialNumber = "OT00470017",
Stages = new List
{
new StageInformation()
diff --git a/Sln.Iot.CFX/CFXRequestes/GetEndpointInformationRequestReceived4.cs b/Sln.Iot.CFX/CFXRequestes/GetEndpointInformationRequestReceived4.cs
new file mode 100644
index 0000000..5172111
--- /dev/null
+++ b/Sln.Iot.CFX/CFXRequestes/GetEndpointInformationRequestReceived4.cs
@@ -0,0 +1,93 @@
+#region << 版 本 注 释 >>
+
+/*--------------------------------------------------------------------
+* 版权所有 (c) 2025 WenJY 保留所有权利。
+* CLR版本:4.0.30319.42000
+* 机器名称:Mr.Wen's MacBook Pro
+* 命名空间:Sln.Iot.CFX.CoreCommunications
+* 唯一标识:4063233D-BE40-415F-B28C-EBA14C47EA52
+*
+* 创建者:WenJY
+* 电子邮箱:
+* 创建时间:2025-10-24 15:00:21
+* 版本:V1.0.0
+* 描述:
+*
+*--------------------------------------------------------------------
+* 修改人:
+* 时间:
+* 修改说明:
+*
+* 版本:V1.0.0
+*--------------------------------------------------------------------*/
+
+#endregion << 版 本 注 释 >>
+
+using CFX;
+using CFX.Structures;
+using Sln.Iot.CFX.CFXBusiness;
+using Sln.Iot.CFX.RequestReceived;
+using Sln.Iot.Serilog;
+
+namespace Sln.Iot.CFX.CFXRequestes;
+
+///
+/// 5.4.1.4 - 获取端点信息请求
+/// GetEndpointInformationRequest/Response
+///
+public class GetEndpointInformationRequestReceived4 : BaseGetEndpointInformationRequestReceived
+{
+
+ ///
+ /// 子类重写处理
+ ///
+ ///
+ ///
+ public override CFXMessage SubHandle(GetEndpointInformationRequest request)
+ {
+ CFXMessage response = new GetEndpointInformationResponse()
+ {
+ Result = new RequestResult()
+ {
+ Result = StatusResult.Success,
+ ResultCode = 0,
+ Message = "",
+ },
+ EndpointInformation = new Endpoint()
+ {
+ CFXHandle = "CFX.A00.OT00470020",
+ CFXVersion = "2.0",
+ RequestNetworkUri = "amqp://127.0.0.1:1235/",
+ RequestTargetAddress = "amqp://127.0.0.1:8888/",
+ ModelNumber = "升降回流机-2",
+ NumberOfLanes = 1,
+ Vendor = "木子贸易中山有限公司",
+ SerialNumber = "OT00470020",
+ Stages = new List
+ {
+ //new StageInformation()
+ //{
+ // Stage = new Stage()
+ // {
+ // StageName = "ConveyorIn",
+ // StageType = StageType.Work,
+ // StageSequence = 1,
+ // }
+ //},
+ new StageInformation()
+ {
+ Stage = new Stage()
+ {
+ StageName = "ConveyorOut",
+ StageType = StageType.Work,
+ StageSequence = 1,
+ }
+ }
+ },
+ SupportedTopics = CFXSupportedTopicList.SupportedTopics
+ }
+ };
+
+ return response;
+ }
+}
\ No newline at end of file
diff --git a/Sln.Iot.CFX/CFXRequestes/HandleFaultRequestReceived4.cs b/Sln.Iot.CFX/CFXRequestes/HandleFaultRequestReceived4.cs
new file mode 100644
index 0000000..0fa225c
--- /dev/null
+++ b/Sln.Iot.CFX/CFXRequestes/HandleFaultRequestReceived4.cs
@@ -0,0 +1,65 @@
+#region << 版 本 注 释 >>
+
+/*--------------------------------------------------------------------
+* 版权所有 (c) 2025 WenJY 保留所有权利。
+* CLR版本:4.0.30319.42000
+* 机器名称:Mr.Wen's MacBook Pro
+* 命名空间:Sln.Iot.CFX
+* 唯一标识:F3C2C0B6-F8E7-4869-B396-291233785B23
+*
+* 创建者:WenJY
+* 电子邮箱:
+* 创建时间:2025-10-24 15:20:11
+* 版本:V1.0.0
+* 描述:
+*
+*--------------------------------------------------------------------
+* 修改人:
+* 时间:
+* 修改说明:
+*
+* 版本:V1.0.0
+*--------------------------------------------------------------------*/
+
+#endregion << 版 本 注 释 >>
+
+using CFX;
+using CFX.ResourcePerformance;
+using CFX.Structures;
+using Sln.Iot.CFX.RequestReceived;
+using Sln.Iot.Serilog;
+
+namespace Sln.Iot.CFX.CFXRequestes;
+
+///
+/// 5.4.4.1.4 - 处理故障请求
+/// HandleFaultRequest/Response
+///
+public class HandleFaultRequestReceived4 : BaseHandleFaultRequestReceived
+{
+
+ ///
+ /// 子类重写处理
+ ///
+ ///
+ ///
+ public override CFXMessage SubHandle(HandleFaultRequest request)
+ {
+ if (request.HandleRemote == true)
+ {
+ //熄灭报警灯
+ }
+
+ CFXMessage response = new HandleFaultResponse()
+ {
+ Result = new RequestResult()
+ {
+ Result = StatusResult.Success,
+ ResultCode = 0,
+ Message = "",
+ },
+ };
+
+ return response;
+ }
+}
\ No newline at end of file
diff --git a/Sln.Iot.CFX/CFXRequestes/ModifyStationParametersRequestReceived4.cs b/Sln.Iot.CFX/CFXRequestes/ModifyStationParametersRequestReceived4.cs
new file mode 100644
index 0000000..fb1bf6a
--- /dev/null
+++ b/Sln.Iot.CFX/CFXRequestes/ModifyStationParametersRequestReceived4.cs
@@ -0,0 +1,63 @@
+#region << 版 本 注 释 >>
+
+/*--------------------------------------------------------------------
+* 版权所有 (c) 2025 WenJY 保留所有权利。
+* CLR版本:4.0.30319.42000
+* 机器名称:Mr.Wen's MacBook Pro
+* 命名空间:Sln.Iot.CFX.CoreCommunications
+* 唯一标识:8E7C0E19-8462-42CA-AC22-F89BF2927C6A
+*
+* 创建者:WenJY
+* 电子邮箱:
+* 创建时间:2025-10-24 15:00:54
+* 版本:V1.0.0
+* 描述:
+*
+*--------------------------------------------------------------------
+* 修改人:
+* 时间:
+* 修改说明:
+*
+* 版本:V1.0.0
+*--------------------------------------------------------------------*/
+
+#endregion << 版 本 注 释 >>
+
+using CFX;
+using CFX.ResourcePerformance;
+using CFX.Structures;
+using Sln.Iot.CFX.RequestReceived;
+using Sln.Iot.Serilog;
+
+namespace Sln.Iot.CFX.CFXRequestes;
+
+///
+/// 5.4.1.5 - 广播查询请求
+/// WhoIsThereRequest/Response
+///
+public class ModifyStationParametersRequestReceived4 : BaseModifyStationParametersRequestReceived
+{
+ ///
+ /// 子类重写处理
+ ///
+ ///
+ ///
+ public override CFXMessage SubHandle(ModifyStationParametersRequest request)
+ {
+ //配方修改
+
+ //同时主动上报StationParameterModified
+
+ CFXMessage response = new ModifyStationParametersResponse()
+ {
+ Result = new RequestResult()
+ {
+ Result = StatusResult.Success,
+ ResultCode = 0,
+ Message = "",
+ },
+ };
+
+ return response;
+ }
+}
\ No newline at end of file
diff --git a/Sln.Iot.CFX/CFXRequestes/WhoIsThereRequestReceived1.cs b/Sln.Iot.CFX/CFXRequestes/WhoIsThereRequestReceived1.cs
index f80e9c6..6d67723 100644
--- a/Sln.Iot.CFX/CFXRequestes/WhoIsThereRequestReceived1.cs
+++ b/Sln.Iot.CFX/CFXRequestes/WhoIsThereRequestReceived1.cs
@@ -55,7 +55,7 @@ public class WhoIsThereRequestReceived1 : BaseWhoIsThereRequestReceived
Message = "",
},
- CFXHandle = "CFX.A00.SDSH000001",
+ CFXHandle = "CFX.A00.OT00470018",
RequestNetworkUri = "amqp://127.0.0.1:1235/",
RequestTargetAddress = "amqp://127.0.0.1:8888/"
};
diff --git a/Sln.Iot.CFX/CFXRequestes/WhoIsThereRequestReceived2.cs b/Sln.Iot.CFX/CFXRequestes/WhoIsThereRequestReceived2.cs
index fac725b..3fd5475 100644
--- a/Sln.Iot.CFX/CFXRequestes/WhoIsThereRequestReceived2.cs
+++ b/Sln.Iot.CFX/CFXRequestes/WhoIsThereRequestReceived2.cs
@@ -55,7 +55,7 @@ public class WhoIsThereRequestReceived2 : BaseWhoIsThereRequestReceived
Message = "",
},
- CFXHandle = "CFX.A00.SDSH000002",
+ CFXHandle = "CFX.A00.OT00470019",
RequestNetworkUri = "amqp://127.0.0.1:1235/",
RequestTargetAddress = "amqp://127.0.0.1:8888/"
};
diff --git a/Sln.Iot.CFX/CFXRequestes/WhoIsThereRequestReceived3.cs b/Sln.Iot.CFX/CFXRequestes/WhoIsThereRequestReceived3.cs
index a370a6c..f71363b 100644
--- a/Sln.Iot.CFX/CFXRequestes/WhoIsThereRequestReceived3.cs
+++ b/Sln.Iot.CFX/CFXRequestes/WhoIsThereRequestReceived3.cs
@@ -55,7 +55,7 @@ public class WhoIsThereRequestReceived3 : BaseWhoIsThereRequestReceived
Message = "",
},
- CFXHandle = "CFX.A00.SDSH000003",
+ CFXHandle = "CFX.A00.OT00470017",
RequestNetworkUri = "amqp://127.0.0.1:1235/",
RequestTargetAddress = "amqp://127.0.0.1:8888/"
};
diff --git a/Sln.Iot.CFX/CFXRequestes/WhoIsThereRequestReceived4.cs b/Sln.Iot.CFX/CFXRequestes/WhoIsThereRequestReceived4.cs
new file mode 100644
index 0000000..245ee3e
--- /dev/null
+++ b/Sln.Iot.CFX/CFXRequestes/WhoIsThereRequestReceived4.cs
@@ -0,0 +1,70 @@
+#region << 版 本 注 释 >>
+
+/*--------------------------------------------------------------------
+* 版权所有 (c) 2025 WenJY 保留所有权利。
+* CLR版本:4.0.30319.42000
+* 机器名称:Mr.Wen's MacBook Pro
+* 命名空间:Sln.Iot.CFX.CoreCommunications
+* 唯一标识:8E7C0E19-8462-42CA-AC22-F89BF2927C6A
+*
+* 创建者:WenJY
+* 电子邮箱:
+* 创建时间:2025-10-24 15:00:54
+* 版本:V1.0.0
+* 描述:
+*
+*--------------------------------------------------------------------
+* 修改人:
+* 时间:
+* 修改说明:
+*
+* 版本:V1.0.0
+*--------------------------------------------------------------------*/
+
+#endregion << 版 本 注 释 >>
+
+using CFX;
+using CFX.Structures;
+using Sln.Iot.CFX.CFXBusiness;
+using Sln.Iot.CFX.RequestReceived;
+using Sln.Iot.Serilog;
+
+namespace Sln.Iot.CFX.CFXRequestes;
+
+///
+/// 5.4.1.5 - 广播查询请求
+/// WhoIsThereRequest/Response
+///
+public class WhoIsThereRequestReceived4 : BaseWhoIsThereRequestReceived
+{
+ ///
+ /// 子类重写处理
+ ///
+ ///
+ ///
+ public override CFXMessage SubHandle(WhoIsThereRequest request)
+ {
+ if (CFXSupportedTopicList.IsSupportJudge(request.SupportedTopics))
+ {
+ CFXMessage response = new WhoIsThereResponse()
+ {
+ Result = new RequestResult()
+ {
+ Result = StatusResult.Success,
+ ResultCode = 0,
+ Message = "",
+ },
+
+ CFXHandle = "CFX.A00.OT00470020",
+ RequestNetworkUri = "amqp://127.0.0.1:1235/",
+ RequestTargetAddress = "amqp://127.0.0.1:8888/"
+ };
+
+ return response;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Sln.Iot.Config/AppConfig.cs b/Sln.Iot.Config/AppConfig.cs
index 5f866c3..1ed77d3 100644
--- a/Sln.Iot.Config/AppConfig.cs
+++ b/Sln.Iot.Config/AppConfig.cs
@@ -40,10 +40,28 @@ namespace Sln.Iot.Config
public List PLCConfig { get; set; }
///
- /// CFX配置
+ /// CFX配置-真空箱
///
- public List CFXConfig { get; set; }
+ public CFXConfig VacuumConfig { get; set; }
+ ///
+ /// CFX配置-提升机1
+ ///
+ public CFXConfig Lift1Config { get; set; }
+
+ ///
+ /// CFX配置-烤炉
+ ///
+ public CFXConfig OvenConfig { get; set; }
+
+ ///
+ /// CFX配置-提升机2
+ ///
+ public CFXConfig Lift2Config { get; set; }
+
+ ///
+ /// Gets the current application configuration instance.
+ ///
public AppConfig Value => this;
}
}
\ No newline at end of file
diff --git a/Sln.Iot.Config/CFXConfig.cs b/Sln.Iot.Config/CFXConfig.cs
index daadf98..9d8229f 100644
--- a/Sln.Iot.Config/CFXConfig.cs
+++ b/Sln.Iot.Config/CFXConfig.cs
@@ -11,6 +11,11 @@ namespace Sln.Iot.Config
///
public class CFXConfig
{
+ ///
+ /// 设备名称
+ ///
+ public string DeviceName { get; set; }
+
///
/// CFXHandle
///
@@ -24,6 +29,6 @@ namespace Sln.Iot.Config
///
/// 上位系统URI
///
- public int UpperURI { get; set; }
+ public string UpperURI { get; set; }
}
}
diff --git a/Sln.Iot/Program.cs b/Sln.Iot/Program.cs
index 6d5ed69..f024ed9 100644
--- a/Sln.Iot/Program.cs
+++ b/Sln.Iot/Program.cs
@@ -65,18 +65,21 @@ namespace Sln.Iot
//CFX接口启动
//真空注胶机
- CFXConnect1.Instance.Init("CFX.A00.SDSH000001",
- new Uri("amqp://127.0.0.1:1235"),
- new Uri("amqp://127.0.0.1:30031"));
- //升降回流
- CFXConnect2.Instance.Init("CFX.A00.SDSH000002",
- new Uri("amqp://127.0.0.1:1236"),
- new Uri("amqp://127.0.0.1:30031"));
+ CFXConnect1.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("CFX.A00.SDSH000003",
- new Uri("amqp://127.0.0.1:1237"),
- new Uri("amqp://127.0.0.1:30031"));
-
+ CFXConnect3.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接口启动
////真空注胶机
@@ -114,6 +117,7 @@ namespace Sln.Iot
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)));
}
}
}
\ No newline at end of file
diff --git a/Sln.Iot/appsettings.json b/Sln.Iot/appsettings.json
index ccf8f57..ec7f85d 100644
--- a/Sln.Iot/appsettings.json
+++ b/Sln.Iot/appsettings.json
@@ -1,6 +1,29 @@
{
"AppConfig": {
"logPath": "D:\\log",
-
+ "VacuumConfig": {
+ "DeviceName": "Vacuum",
+ "CFXHandle": "CFX.A00.OT00470018",
+ "LocalURI": "amqp://127.0.0.1:1235",
+ "UpperURI": "amqp://127.0.0.1:30031"
+ },
+ "Lift1Config": {
+ "DeviceName": "Lift1",
+ "CFXHandle": "CFX.A00.OT00470019",
+ "LocalURI": "amqp://127.0.0.1:1236",
+ "UpperURI": "amqp://127.0.0.1:30031"
+ },
+ "OvenConfig": {
+ "DeviceName": "Oven",
+ "CFXHandle": "CFX.A00.OT00470017",
+ "LocalURI": "amqp://127.0.0.1:1237",
+ "UpperURI": "amqp://127.0.0.1:30031"
+ },
+ "Lift2Config": {
+ "DeviceName": "Lift2",
+ "CFXHandle": "CFX.A00.OT00470020",
+ "LocalURI": "amqp://127.0.0.1:1238",
+ "UpperURI": "amqp://127.0.0.1:30031"
+ }
}
}