diff --git a/Sln.Iot.Business/RFID01Business.cs b/Sln.Iot.Business/RFID01Business.cs index fcded18..bbb7b6b 100644 --- a/Sln.Iot.Business/RFID01Business.cs +++ b/Sln.Iot.Business/RFID01Business.cs @@ -42,14 +42,14 @@ namespace Sln.Iot.Business if (signalValue == 1001) { //读取托盘码和产品码 - OperateResult trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance3, "D5000", 20); - OperateResult pordBytesResult = _plc.ReadBytes(_plc.DeltaInstance3, "D8000", 120); + OperateResult trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance3, "D5000", 10); + OperateResult pordBytesResult = _plc.ReadBytes(_plc.DeltaInstance3, "D8000", 60); //成功验证 if (trayBytesResult.IsSuccess && pordBytesResult.IsSuccess) { //转换托盘码 string traycode = Encoding.ASCII.GetString(trayBytesResult.Content); - + _log.Info(traycode); byte[] prodBytes = trayBytesResult.Content; string[] prodcode = new string[6]; //分割转换产品码 @@ -57,6 +57,7 @@ namespace Sln.Iot.Business { prodcode[i] = Encoding.ASCII.GetString(prodBytes[(i * 20)..(i * 20 + 20)]); } + //sql更新 bool res = TrayBindingService.Instance.TrayBindingRefresh(traycode, prodcode); if (!res) diff --git a/Sln.Iot.Business/RFID02Business.cs b/Sln.Iot.Business/RFID02Business.cs index 302c00f..2cba0e0 100644 --- a/Sln.Iot.Business/RFID02Business.cs +++ b/Sln.Iot.Business/RFID02Business.cs @@ -40,7 +40,7 @@ namespace Sln.Iot.Business if (signalValue == 2001) { //读取托盘码 - OperateResult trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance1, "D5000", 20); + OperateResult trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance1, "D5000", 10); //成功验证 if (trayBytesResult.IsSuccess) { diff --git a/Sln.Iot.Business/RFID03Business.cs b/Sln.Iot.Business/RFID03Business.cs index 65d6042..72a1ecc 100644 --- a/Sln.Iot.Business/RFID03Business.cs +++ b/Sln.Iot.Business/RFID03Business.cs @@ -40,7 +40,7 @@ namespace Sln.Iot.Business if (signalValue == 3001) { //读取托盘码 - OperateResult trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance1, "D5020", 20); + OperateResult trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance1, "D5020", 10); //成功验证 if (trayBytesResult.IsSuccess) { diff --git a/Sln.Iot.Business/RFID04Business.cs b/Sln.Iot.Business/RFID04Business.cs index e3bb9ab..bd485ad 100644 --- a/Sln.Iot.Business/RFID04Business.cs +++ b/Sln.Iot.Business/RFID04Business.cs @@ -68,7 +68,7 @@ namespace Sln.Iot.Business if(signalValue == 4003) { //读取托盘码 - OperateResult trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance2, "D5000", 20); + OperateResult trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance2, "D5000", 10); //成功验证 if (trayBytesResult.IsSuccess) { diff --git a/Sln.Iot.Business/RFID05Business.cs b/Sln.Iot.Business/RFID05Business.cs index d5e92d6..f276bde 100644 --- a/Sln.Iot.Business/RFID05Business.cs +++ b/Sln.Iot.Business/RFID05Business.cs @@ -40,7 +40,7 @@ namespace Sln.Iot.Business if (signalValue == 5001) { //读取托盘码 - OperateResult trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance2, "D5020", 20); + OperateResult trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance2, "D5020", 10); //成功验证 if (trayBytesResult.IsSuccess) { diff --git a/Sln.Iot.Business/RFID06Business.cs b/Sln.Iot.Business/RFID06Business.cs index 1013edf..0b792fd 100644 --- a/Sln.Iot.Business/RFID06Business.cs +++ b/Sln.Iot.Business/RFID06Business.cs @@ -31,7 +31,7 @@ namespace Sln.Iot.Business { // 定时任务逻辑 //读取信号 - OperateResult signalRes = _plc.ReadInt16(_plc.DeltaInstance3, "D500"); + OperateResult signalRes = _plc.ReadInt16(_plc.DeltaInstance4, "D500"); //成功验证 if (signalRes.IsSuccess) { @@ -40,7 +40,7 @@ namespace Sln.Iot.Business if (signalValue == 6001) { //读取托盘码和产品码 - OperateResult trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance3, "D5000", 20); + OperateResult trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance4, "D5000", 10); //成功验证 if (trayBytesResult.IsSuccess) { @@ -59,7 +59,7 @@ namespace Sln.Iot.Business } //写入完成信号 - res = _plc.PlcWrite(_plc.DeltaInstance3, "D500", 6002, DataTypeEnum.UInt16).IsSuccess; + res = _plc.PlcWrite(_plc.DeltaInstance4, "D500", 6002, DataTypeEnum.UInt16).IsSuccess; if (!res) { _log.Error("下料提升机PLC写入完成信号异常"); diff --git a/Sln.Iot.Business/TestBusiness.cs b/Sln.Iot.Business/TestBusiness.cs new file mode 100644 index 0000000..91fed20 --- /dev/null +++ b/Sln.Iot.Business/TestBusiness.cs @@ -0,0 +1,99 @@ +using HslCommunication; +using HslCommunication.Core; +using Serilog; +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 TestBusiness + { + private Timer _timer; + + private readonly PLCConnect _plc = PLCConnect.Instance; + + private readonly SerilogHelper _log = SerilogHelper.Instance; + + public TestBusiness() + { + _timer = new Timer(TimerCallback, null, 0, 1000); + } + + /// + /// RFID01上料提升机数据处理流程业务刷新 + /// + /// + public void TimerCallback(object? state) + { + try + { + //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 trayBytesResult = _plc.ReadBytes(_plc.DeltaInstance3, "D5000", 10); + OperateResult 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]}"); + } + } + catch (Exception ex) + { + _log.Error("隧道炉温度读取失败", ex); + } + + + + } + + public byte[] AscIIReverseTostring(byte[] bytes) + { + if (bytes.Length % 2 != 0) + { + return new byte[0]; + } + + for (int i = 0; i < bytes.Length / 2; i++) + { + byte temp = bytes[i * 2]; + bytes[i * 2] = bytes[i * 2 + 1]; + bytes[i * 2 + 1] = temp; + } + + return bytes; + } + } +} diff --git a/Sln.Iot.CFX/CFXHelper.cs b/Sln.Iot.CFX/CFXHelper.cs index 62570f5..ebdb060 100644 --- a/Sln.Iot.CFX/CFXHelper.cs +++ b/Sln.Iot.CFX/CFXHelper.cs @@ -50,30 +50,38 @@ public class CFXHelper } /// - /// CFX通讯端点 + /// CFX通讯端点(真空注胶机)SDSH000001 /// - private readonly AmqpCFXEndpoint? _endpoint = new AmqpCFXEndpoint(); + public AmqpCFXEndpoint? Endpoint1 = new AmqpCFXEndpoint(); - public void Init(string cfxHandle, Uri uri, string address) + /// + /// CFX通讯端点2(上料提升机)SDSH000002 + /// + public AmqpCFXEndpoint? Endpoint2 = new AmqpCFXEndpoint(); + + /// + /// CFX通讯端点3(隧道烤箱)SDSH000003 + /// + public AmqpCFXEndpoint? Endpoint3 = new AmqpCFXEndpoint(); + + public AmqpCFXEndpoint Init(string cfxHandle, Uri selfURI, Uri upperURI, string address) { + AmqpCFXEndpoint endpoint = new AmqpCFXEndpoint(); try { - if (_endpoint == null) - { - throw new ArgumentNullException($"AmqpCFXEndpoint is null"); - } + endpoint.Open(cfxHandle, selfURI); - _endpoint.Open(cfxHandle, uri); + endpoint.AddPublishChannel(upperURI, address); - _endpoint.AddPublishChannel(uri, address); + endpoint.OnRequestReceived -= Endpoint_OnRequestReceived; + endpoint.OnRequestReceived += Endpoint_OnRequestReceived; - _endpoint.OnRequestReceived -= Endpoint_OnRequestReceived; - _endpoint.OnRequestReceived += Endpoint_OnRequestReceived; } catch (Exception e) { throw new InvalidOperationException($"CFX 接口初始化异常:{e.Message}"); } + return endpoint; } /// @@ -113,10 +121,6 @@ public class CFXHelper { ModifyStationParametersRequestReceived.Handle(request.MessageBody as ModifyStationParametersRequest, out response); } - else if (request.MessageBody is ValidateUnitsRequest) //生产单元验证请求 - { - ValidateUnitsRequestReceived.Handle(request.MessageBody as ValidateUnitsRequest, out response); - } else //不支持的请求类型 { response = new NotSupportedResponse() @@ -142,16 +146,59 @@ public class CFXHelper { try { - if (_endpoint == null) + if (Endpoint1 == null) { throw new ArgumentNullException($"AmqpCFXEndpoint is null"); } - _endpoint.Publish(env); + Endpoint1.Publish(env); } catch (Exception e) { throw new InvalidOperationException($"推送事件异常:{e.Message}"); } } + + /// + /// 发送生产单元验证请求接收通知 + /// + public void SendValidateUnitsRequest(string uri, string targetDevice) + { + ValidateUnitsRequest msg = new ValidateUnitsRequest() + { + Validations = new List() + { + ValidationType.UnitRouteValidation, + ValidationType.UnitStatusValidation + }, + PrimaryIdentifier = "Code", + Units = new List() + { + new UnitPosition() + { + UnitIdentifier = "ConveyorIn", + PositionNumber = 1, + }, + new UnitPosition() + { + UnitIdentifier = "ConveyorOut", + PositionNumber = 2, + }, + }, + }; + + var validateresult = Endpoint1.ExecuteRequest(uri, new CFXEnvelope(msg) + { + Source = Endpoint1.CFXHandle, + Target = targetDevice + }); + + if (validateresult == null) + { + return; + } + + var response = validateresult.MessageBody as ValidateUnitsResponse; + //响应逻辑 + } } \ No newline at end of file diff --git a/Sln.Iot.CFX/CFXTest.cs b/Sln.Iot.CFX/CFXTest.cs new file mode 100644 index 0000000..f2e7c21 --- /dev/null +++ b/Sln.Iot.CFX/CFXTest.cs @@ -0,0 +1,213 @@ +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.Event; + +namespace Sln.Iot.CFX +{ + /// + /// 入场前CFX测试 + /// + public class CFXTest + { + CFXHelper _cfxHelper = CFXHelper.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(); + + public void Test1() + { + // 实例化所有事件对象 + + + // 发布所有事件 + //_cfxHelper.PublishEvent(new CFXEnvelope(heartbeatEvent.Handle("CFX.A00.SDSH000003"))); + + _cfxHelper.PublishEvent(new CFXEnvelope(endpointConnectedEvent.Handle("CFX.A00.SDSH000003"))); + _cfxHelper.PublishEvent(new CFXEnvelope(faultOccurredEvent.Handle())); + _cfxHelper.PublishEvent(new CFXEnvelope(faultAcknowledgedEvent.Handle())); + _cfxHelper.PublishEvent(new CFXEnvelope(stationStateChangedEvent.Handle(ResourceState.USD_Repair))); + _cfxHelper.PublishEvent(new CFXEnvelope(faultClearedEvent.Handle())); + _cfxHelper.PublishEvent(new CFXEnvelope(stationStateChangedEvent.Handle(ResourceState.PRD))); + _cfxHelper.PublishEvent(new CFXEnvelope(logEntryRecordedEvent.Handle())); + _cfxHelper.PublishEvent(new CFXEnvelope(recipeActivatedEvent.Handle())); + _cfxHelper.PublishEvent(new CFXEnvelope(recipeModifiedEvent.Handle())); + _cfxHelper.PublishEvent(new CFXEnvelope(stationOfflineEvent.Handle())); + _cfxHelper.PublishEvent(new CFXEnvelope(stationOnlineEvent.Handle())); + + _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "-1", "0", "-1", "1000", "0", "60", "3600", "4", "1", "5", "0", "0")))); + _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "0", "1", "0", "1000", "0", "60", "3600", "4", "1", "5", "0", "0")))); + _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "1", "4", "1", "1000", "0", "60", "3600", "4", "1", "5", "0", "0")))); + _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "2", "2", "2", "1000", "0", "60", "3600", "4", "1", "5", "0", "0")))); + _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "3", "2", "3", "1000", "0", "60", "3600", "4", "1", "5", "0", "0")))); + _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "4", "2", "4", "1000", "0", "60", "3600", "4", "1", "5", "0", "0")))); + _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "5", "2", "5", "1000", "0", "60", "3600", "4", "1", "5", "0", "0")))); + _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "6", "1", "6", "1000", "0", "60", "3600", "4", "1", "5", "0", "0")))); + _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "7", "2", "7", "1000", "0", "60", "3600", "4", "1", "5", "0", "0")))); + _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "8", "2", "8", "1000", "0", "60", "3600", "4", "1", "5", "0", "0")))); + _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "9", "2", "9", "1000", "0", "60", "3600", "4", "1", "5", "0", "0")))); + _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "10", "3", "10", "1000", "0", "60", "3600", "4", "1", "5", "0", "0")))); + _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "11", "3", "11", "1000", "0", "60", "3600", "4", "1", "5", "0", "0")))); + _cfxHelper.PublishEvent(new CFXEnvelope(stationParametersModifiedEvent.Handle(ParameterSet("SDSH000003", "制程设备", "12", "2", "12", "1000", "0", "60", "3600", "4", "1", "5", "0", "0")))); + + _cfxHelper.PublishEvent(new CFXEnvelope(unitsArrivedEvent.Handle())); + _cfxHelper.PublishEvent(new CFXEnvelope(workStartedEvent.Handle())); + + _cfxHelper.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle("PreHeatOven", 1))); + _cfxHelper.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle("PreHeatOven", 1))); + _cfxHelper.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle("PreHeatOven", 1))); + _cfxHelper.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle("PreHeatOven", 1))); + _cfxHelper.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle("PreCureOven", 2))); + _cfxHelper.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle("PreCureOven", 2))); + _cfxHelper.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle("PreCureOven", 2))); + _cfxHelper.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle("PreCureOven", 2))); + _cfxHelper.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle("CureOven", 3))); + _cfxHelper.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle("CureOven", 3))); + _cfxHelper.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle("CureOven", 3))); + _cfxHelper.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle("CureOven", 3))); + + //_cfxHelper.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle("PreHeatOven", 1))); + //_cfxHelper.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle("PreHeatOven", 1))); + //_cfxHelper.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle("PreHeatOven", 1))); + //_cfxHelper.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle("PreHeatOven", 1))); + //_cfxHelper.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle("PreCureOven", 2))); + //_cfxHelper.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle("PreCureOven", 2))); + //_cfxHelper.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle("PreCureOven", 2))); + //_cfxHelper.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle("PreCureOven", 2))); + + //_cfxHelper.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle("PreHeatOven", 1))); + //_cfxHelper.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle("PreHeatOven", 1))); + //_cfxHelper.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle("PreHeatOven", 1))); + //_cfxHelper.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle("PreHeatOven", 1))); + //_cfxHelper.PublishEvent(new CFXEnvelope(workStageStartedEvent.Handle("PreCureOven", 2))); + //_cfxHelper.PublishEvent(new CFXEnvelope(workStagePausedEvent.Handle("PreCureOven", 2))); + //_cfxHelper.PublishEvent(new CFXEnvelope(workStageResumedEvent.Handle("PreCureOven", 2))); + //_cfxHelper.PublishEvent(new CFXEnvelope(workStageCompletedEvent.Handle("PreCureOven", 2))); + + _cfxHelper.PublishEvent(new CFXEnvelope(workCompletedEvent.Handle())); + _cfxHelper.PublishEvent(new CFXEnvelope(unitsDepartedEvent.Handle())); + _cfxHelper.PublishEvent(new CFXEnvelope(unitsProcessedEvent.Handle())); + _cfxHelper.PublishEvent(new CFXEnvelope(endpointShuttingDownEvent.Handle("CFX.A00.SDSH000003"))); + + _cfxHelper.SendValidateUnitsRequest("amqp://127.0.0.1:8888", "inline-control"); + } + + /// + /// stationParameters参数设置 + /// + public List 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() + { + 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 + }, + }; + } + } +} diff --git a/Sln.Iot.CFX/Event/EndpointConnectedEvent.cs b/Sln.Iot.CFX/Event/EndpointConnectedEvent.cs index 16d2b89..8b76361 100644 --- a/Sln.Iot.CFX/Event/EndpointConnectedEvent.cs +++ b/Sln.Iot.CFX/Event/EndpointConnectedEvent.cs @@ -12,16 +12,16 @@ namespace Sln.Iot.CFX.Event /// 数据封装处理 /// /// - public CFXMessage Handle() + public CFXMessage Handle(string cfxHandle) { CFXMessage eve = null; try { eve = new EndpointConnected() { - CFXHandle = "CFX.S07.E022012702", - RequestNetworkUri = "amqp://host33/", - RequestTargetAddress = "/queue/SN23123" + CFXHandle = cfxHandle, + RequestNetworkUri = "amqp://127.0.0.1:1235", + RequestTargetAddress = "amqp://127.0.0.1:8888" }; } catch (Exception e) diff --git a/Sln.Iot.CFX/Event/EndpointShuttingDownEvent.cs b/Sln.Iot.CFX/Event/EndpointShuttingDownEvent.cs index f8f7718..81964f0 100644 --- a/Sln.Iot.CFX/Event/EndpointShuttingDownEvent.cs +++ b/Sln.Iot.CFX/Event/EndpointShuttingDownEvent.cs @@ -12,14 +12,14 @@ namespace Sln.Iot.CFX.Event /// 数据封装处理 /// /// - public CFXMessage Handle() + public CFXMessage Handle(string cfxHandle) { CFXMessage eve = null; try { eve = new EndpointShuttingDown() { - CFXHandle = "CFX.S07.E022012702", + CFXHandle = cfxHandle, }; } catch (Exception e) diff --git a/Sln.Iot.CFX/Event/FaultAcknowledgedEvent.cs b/Sln.Iot.CFX/Event/FaultAcknowledgedEvent.cs index 8d6e4ab..74ee70c 100644 --- a/Sln.Iot.CFX/Event/FaultAcknowledgedEvent.cs +++ b/Sln.Iot.CFX/Event/FaultAcknowledgedEvent.cs @@ -29,7 +29,7 @@ namespace Sln.Iot.CFX.Event LoginName = "admin", OperatorIdentifier = "OP-1000" }, - FaultOccurrenceId = Guid.NewGuid() + FaultOccurrenceId = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399") }; } catch (Exception e) diff --git a/Sln.Iot.CFX/Event/FaultClearedEvent.cs b/Sln.Iot.CFX/Event/FaultClearedEvent.cs index 822f821..0952c07 100644 --- a/Sln.Iot.CFX/Event/FaultClearedEvent.cs +++ b/Sln.Iot.CFX/Event/FaultClearedEvent.cs @@ -29,7 +29,7 @@ namespace Sln.Iot.CFX.Event LoginName = "admin", OperatorIdentifier = "OP-1000" }, - FaultOccurrenceId = Guid.NewGuid() + FaultOccurrenceId = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399") }; } catch (Exception e) diff --git a/Sln.Iot.CFX/Event/FaultOccurredEvent.cs b/Sln.Iot.CFX/Event/FaultOccurredEvent.cs index 4c1ae14..607a237 100644 --- a/Sln.Iot.CFX/Event/FaultOccurredEvent.cs +++ b/Sln.Iot.CFX/Event/FaultOccurredEvent.cs @@ -26,12 +26,12 @@ namespace Sln.Iot.CFX.Event Cause = FaultCause.MechanicalFailure, Severity = FaultSeverity.Error, FaultCode = "ERROR 3943480", - FaultOccurrenceId = Guid.NewGuid(), + FaultOccurrenceId = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399"), Lane = 1, AccessType = AccessType.Local, Description = "Error", OccurredAt = DateTime.Now, - TransactionID = Guid.NewGuid(), + TransactionID = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399"), } }; } diff --git a/Sln.Iot.CFX/Event/HeartbeatEvent.cs b/Sln.Iot.CFX/Event/HeartbeatEvent.cs index 5159360..d302fbd 100644 --- a/Sln.Iot.CFX/Event/HeartbeatEvent.cs +++ b/Sln.Iot.CFX/Event/HeartbeatEvent.cs @@ -12,15 +12,15 @@ namespace Sln.Iot.CFX.Event /// 数据封装处理 /// /// - public CFXMessage Handle() + public CFXMessage Handle(string cfxHandle) { CFXMessage eve = null; try { eve = new Heartbeat() { - CFXHandle = "CFX.S07.E012012701", - HeartbeatFrequency = TimeSpan.FromSeconds(60) + CFXHandle = cfxHandle, + HeartbeatFrequency = TimeSpan.FromSeconds(10) }; } catch (Exception e) diff --git a/Sln.Iot.CFX/Event/StationParametersModifiedEvent.cs b/Sln.Iot.CFX/Event/StationParametersModifiedEvent.cs index 806373c..a8a65e4 100644 --- a/Sln.Iot.CFX/Event/StationParametersModifiedEvent.cs +++ b/Sln.Iot.CFX/Event/StationParametersModifiedEvent.cs @@ -1,7 +1,6 @@ using CFX; using CFX.ResourcePerformance; using CFX.Structures; -using Sln.Iot.CFX.Parameters; using Sln.Iot.Serilog; namespace Sln.Iot.CFX.Event @@ -15,21 +14,14 @@ namespace Sln.Iot.CFX.Event /// 数据封装处理 /// /// - public CFXMessage Handle() + public CFXMessage Handle(List parameters) { CFXMessage eve = null; try { eve = new StationParametersModified() { - ModifiedParameters = new List() - { - new TestParameter() - { - Test1 = "1", - Test2 = "2" - } - } + ModifiedParameters = parameters }; } catch (Exception e) diff --git a/Sln.Iot.CFX/Event/StationStateChangedEvent.cs b/Sln.Iot.CFX/Event/StationStateChangedEvent.cs index 691d174..8f68900 100644 --- a/Sln.Iot.CFX/Event/StationStateChangedEvent.cs +++ b/Sln.Iot.CFX/Event/StationStateChangedEvent.cs @@ -14,14 +14,26 @@ namespace Sln.Iot.CFX.Event /// 数据封装处理 /// /// - public CFXMessage Handle() + public CFXMessage Handle(ResourceState resourceState) { CFXMessage eve = null; try { eve = new StationStateChanged() { - NewState = ResourceState.PRD, + NewState = resourceState, + RelatedFault = new Fault() + { + Cause = FaultCause.MechanicalFailure, + Severity = FaultSeverity.Error, + FaultCode = "ERROR 3943480", + FaultOccurrenceId = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399"), + Lane = 1, + AccessType = AccessType.Local, + Description = "Error", + OccurredAt = DateTime.Now, + TransactionID = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399"), + } }; } catch (Exception e) diff --git a/Sln.Iot.CFX/Event/UnitsArrivedEvent.cs b/Sln.Iot.CFX/Event/UnitsArrivedEvent.cs index 3f17f68..0c534ab 100644 --- a/Sln.Iot.CFX/Event/UnitsArrivedEvent.cs +++ b/Sln.Iot.CFX/Event/UnitsArrivedEvent.cs @@ -25,7 +25,7 @@ namespace Sln.Iot.CFX.Event { new UnitPosition() { - UnitIdentifier = "UNIT123456789", + UnitIdentifier = "VacuumInjection1", PositionNumber = 1, PositionName = "位置1", X = 50.0, diff --git a/Sln.Iot.CFX/Event/UnitsDepartedEvent.cs b/Sln.Iot.CFX/Event/UnitsDepartedEvent.cs index 3ca9b0a..98fe653 100644 --- a/Sln.Iot.CFX/Event/UnitsDepartedEvent.cs +++ b/Sln.Iot.CFX/Event/UnitsDepartedEvent.cs @@ -25,7 +25,7 @@ namespace Sln.Iot.CFX.Event { new UnitPosition() { - UnitIdentifier = "UNIT123456789", + UnitIdentifier = "VacuumInjection1", PositionNumber = 1, PositionName = "位置1", X = 50.0, diff --git a/Sln.Iot.CFX/Event/UnitsProcessedEvent.cs b/Sln.Iot.CFX/Event/UnitsProcessedEvent.cs index f8fc6fc..a4c15ba 100644 --- a/Sln.Iot.CFX/Event/UnitsProcessedEvent.cs +++ b/Sln.Iot.CFX/Event/UnitsProcessedEvent.cs @@ -23,18 +23,8 @@ namespace Sln.Iot.CFX.Event { TransactionId = Guid.NewGuid(), OverallResult = ProcessingResult.Succeeded, - CommonProcessData = new ProcessData() - { - - }, - UnitProcessData = new List() - { - new ProcessedUnit() - { - UnitIdentifier = "ID12345", - - } - } + CommonProcessData = null, + UnitProcessData = null }; } catch (Exception e) diff --git a/Sln.Iot.CFX/Event/WorkCompletedEvent.cs b/Sln.Iot.CFX/Event/WorkCompletedEvent.cs index 9fd6b24..a6fb400 100644 --- a/Sln.Iot.CFX/Event/WorkCompletedEvent.cs +++ b/Sln.Iot.CFX/Event/WorkCompletedEvent.cs @@ -22,13 +22,14 @@ namespace Sln.Iot.CFX.Event { eve = new WorkCompleted() { - TransactionID = Guid.NewGuid(), + TransactionID = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399"), + PrimaryIdentifier = "WORKORDER-0001", Result = WorkResult.Completed, Units = new List() { new UnitPosition() { - UnitIdentifier = "UNIT123456789", + UnitIdentifier = "PreHeatOven", PositionNumber = 1, PositionName = "位置1", X = 50.0, @@ -37,6 +38,29 @@ namespace Sln.Iot.CFX.Event FlipX = false, FlipY = false }, + new UnitPosition() + { + UnitIdentifier = "PreCureOven", + PositionNumber = 2, + PositionName = "位置2", + X = 50.0, + Y = 80.0, + Rotation = 0.0, + FlipX = false, + FlipY = false + }, + new UnitPosition() + { + UnitIdentifier = "CureOven", + PositionNumber = 3, + PositionName = "位置3", + X = 50.0, + Y = 80.0, + Rotation = 0.0, + FlipX = false, + FlipY = false + }, + } }; } diff --git a/Sln.Iot.CFX/Event/WorkStageCompletedEvent.cs b/Sln.Iot.CFX/Event/WorkStageCompletedEvent.cs index 63a6b53..e19e9d0 100644 --- a/Sln.Iot.CFX/Event/WorkStageCompletedEvent.cs +++ b/Sln.Iot.CFX/Event/WorkStageCompletedEvent.cs @@ -14,18 +14,18 @@ namespace Sln.Iot.CFX.Event /// 数据封装处理 /// /// - public CFXMessage Handle() + public CFXMessage Handle(string stageName, int stageSequence) { CFXMessage eve = null; try { eve = new WorkStageCompleted() { - TransactionID = Guid.NewGuid(), + TransactionID = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399"), Stage = new Stage() { - StageSequence = 1, - StageName = "工段1", + StageSequence = stageSequence, + StageName = stageName, StageType = StageType.Work }, Result = WorkResult.Completed, diff --git a/Sln.Iot.CFX/Event/WorkStagePausedEvent.cs b/Sln.Iot.CFX/Event/WorkStagePausedEvent.cs index 46aa64f..0414481 100644 --- a/Sln.Iot.CFX/Event/WorkStagePausedEvent.cs +++ b/Sln.Iot.CFX/Event/WorkStagePausedEvent.cs @@ -14,18 +14,18 @@ namespace Sln.Iot.CFX.Event /// 数据封装处理 /// /// - public CFXMessage Handle() + public CFXMessage Handle(string stageName, int stageSequence) { CFXMessage eve = null; try { eve = new WorkStagePaused() { - TransactionID = Guid.NewGuid(), + TransactionID = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399"), Stage = new Stage() { - StageSequence = 1, - StageName = "工段1", + StageSequence = stageSequence, + StageName = stageName, StageType = StageType.Work } }; diff --git a/Sln.Iot.CFX/Event/WorkStageResumedEvent.cs b/Sln.Iot.CFX/Event/WorkStageResumedEvent.cs index 23b48fc..2f4aa67 100644 --- a/Sln.Iot.CFX/Event/WorkStageResumedEvent.cs +++ b/Sln.Iot.CFX/Event/WorkStageResumedEvent.cs @@ -14,18 +14,18 @@ namespace Sln.Iot.CFX.Event /// 数据封装处理 /// /// - public CFXMessage Handle() + public CFXMessage Handle(string stageName, int stageSequence) { CFXMessage eve = null; try { eve = new WorkStageResumed() { - TransactionID = Guid.NewGuid(), + TransactionID = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399"), Stage = new Stage() { - StageSequence = 1, - StageName = "工段1", + StageSequence = stageSequence, + StageName = stageName, StageType = StageType.Work } }; diff --git a/Sln.Iot.CFX/Event/WorkStageStartedEvent.cs b/Sln.Iot.CFX/Event/WorkStageStartedEvent.cs index f9888f0..f73f8e0 100644 --- a/Sln.Iot.CFX/Event/WorkStageStartedEvent.cs +++ b/Sln.Iot.CFX/Event/WorkStageStartedEvent.cs @@ -14,18 +14,18 @@ namespace Sln.Iot.CFX.Event /// 数据封装处理 /// /// - public CFXMessage Handle() + public CFXMessage Handle(string stageName, int stageSequence) { CFXMessage eve = null; try { eve = new WorkStageStarted() { - TransactionID = Guid.NewGuid(), + TransactionID = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399"), Stage = new Stage() { - StageSequence = 1, - StageName = "工段1", + StageSequence = stageSequence, + StageName = stageName, StageType = StageType.Work } }; diff --git a/Sln.Iot.CFX/Event/WorkStartedEvent.cs b/Sln.Iot.CFX/Event/WorkStartedEvent.cs index e83a1d5..4a9ec8f 100644 --- a/Sln.Iot.CFX/Event/WorkStartedEvent.cs +++ b/Sln.Iot.CFX/Event/WorkStartedEvent.cs @@ -22,13 +22,14 @@ namespace Sln.Iot.CFX.Event { eve = new WorkStarted() { - TransactionID = Guid.NewGuid(), + TransactionID = Guid.Parse("281fa09f-cbf6-498d-9f27-7ca77cb60399"), + PrimaryIdentifier = "WORKORDER-0001", Lane = 1, Units = new List() { new UnitPosition() { - UnitIdentifier = "UNIT123456789", + UnitIdentifier = "PreHeatOven", PositionNumber = 1, PositionName = "位置1", X = 50.0, @@ -37,6 +38,28 @@ namespace Sln.Iot.CFX.Event FlipX = false, FlipY = false }, + new UnitPosition() + { + UnitIdentifier = "PreCureOven", + PositionNumber = 2, + PositionName = "位置2", + X = 50.0, + Y = 80.0, + Rotation = 0.0, + FlipX = false, + FlipY = false + }, + new UnitPosition() + { + UnitIdentifier = "CureOven", + PositionNumber = 3, + PositionName = "位置3", + X = 50.0, + Y = 80.0, + Rotation = 0.0, + FlipX = false, + FlipY = false + }, } }; } diff --git a/Sln.Iot.CFX/Parameters/TestParameter.cs b/Sln.Iot.CFX/Parameters/TestParameter.cs deleted file mode 100644 index 19eed14..0000000 --- a/Sln.Iot.CFX/Parameters/TestParameter.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using CFX.Structures; -using CFX; - -namespace Sln.Iot.CFX.Parameters -{ - public class TestParameter : Parameter - { - public string Test1 { get; set; } = string.Empty; - - public string Test2 { get; set; } = string.Empty; - } -} diff --git a/Sln.Iot.CFX/RequestReceived/AreYouThereRequestReceived.cs b/Sln.Iot.CFX/RequestReceived/AreYouThereRequestReceived.cs index 8d12086..7f72af8 100644 --- a/Sln.Iot.CFX/RequestReceived/AreYouThereRequestReceived.cs +++ b/Sln.Iot.CFX/RequestReceived/AreYouThereRequestReceived.cs @@ -36,13 +36,13 @@ namespace Sln.Iot.CFX.RequestReceived; public class AreYouThereRequestReceived { /// - /// + /// 数据处理 /// /// /// public static void Handle(AreYouThereRequest request, out CFXMessage response) { - // + //业务逻辑 try { response = new AreYouThereResponse() @@ -54,9 +54,9 @@ public class AreYouThereRequestReceived Message = "", }, - CFXHandle = "CFX.S07.E022012702", - RequestNetworkUri = "amqp://host33/", - RequestTargetAddress = "/queue/SN23123", + CFXHandle = "CFX.A00.SDSH000003", + RequestNetworkUri = "amqp://127.0.0.1:1235", + RequestTargetAddress = "amqp://127.0.0.1:8888" }; } catch (Exception e) diff --git a/Sln.Iot.CFX/RequestReceived/GetActiveFaultsRequestReceived.cs b/Sln.Iot.CFX/RequestReceived/GetActiveFaultsRequestReceived.cs index 4b3357e..6900651 100644 --- a/Sln.Iot.CFX/RequestReceived/GetActiveFaultsRequestReceived.cs +++ b/Sln.Iot.CFX/RequestReceived/GetActiveFaultsRequestReceived.cs @@ -47,7 +47,20 @@ public class GetActiveFaultsRequestReceived { response = new GetActiveFaultsResponse() { - + Result = new RequestResult() + { + Result = StatusResult.Success, + ResultCode = 0, + Message = "", + }, + ActiveFaults = new List() + { + new Fault() + { + Description = "测试错误1", + FaultCode = "5003", + } + } }; } catch (Exception e) diff --git a/Sln.Iot.CFX/RequestReceived/GetActiveRecipeRequestReceived.cs b/Sln.Iot.CFX/RequestReceived/GetActiveRecipeRequestReceived.cs index b4b4c6a..2e4fb0d 100644 --- a/Sln.Iot.CFX/RequestReceived/GetActiveRecipeRequestReceived.cs +++ b/Sln.Iot.CFX/RequestReceived/GetActiveRecipeRequestReceived.cs @@ -45,9 +45,18 @@ public class GetActiveRecipeRequestReceived { try { + //解析是哪个工位 response = new GetActiveRecipeResponse() { - + ActiveRecipeName = "配方A", + ActiveRecipeRevision = "1.0", + Result = new RequestResult() + { + Result = StatusResult.Success, + ResultCode = 0, + Message = "" + } + //配方数据 }; } catch (Exception e) diff --git a/Sln.Iot.CFX/RequestReceived/GetEndpointInformationRequestReceived.cs b/Sln.Iot.CFX/RequestReceived/GetEndpointInformationRequestReceived.cs index d6d629b..f8d0680 100644 --- a/Sln.Iot.CFX/RequestReceived/GetEndpointInformationRequestReceived.cs +++ b/Sln.Iot.CFX/RequestReceived/GetEndpointInformationRequestReceived.cs @@ -46,7 +46,109 @@ public class GetEndpointInformationRequestReceived { response = new GetEndpointInformationResponse() { - + Result = new RequestResult() + { + Result = StatusResult.Success, + ResultCode = 0, + Message = "", + }, + EndpointInformation = new Endpoint() + { + CFXHandle = "CFX.A00.SDSH000003", + CFXVersion = "1.0", + RequestNetworkUri = "amqp://127.0.0.1:1235", + RequestTargetAddress = "amqp://127.0.0.1:8888", + ModelNumber = "设备型号", + NumberOfLanes = 1, + Vendor = "木子贸易", + SerialNumber = "设备序列号", + Stages = new List + { + new StageInformation() + { + Stage = new Stage() + { + StageName = "工位名称", + StageType = StageType.Work, + StageSequence = 1, + } + } + }, + SupportedTopics = new List() + { + new SupportedTopic() + { + TopicName = "CFX", + TopicSupportType = TopicSupportType.Publisher, + SupportedMessages = new List + { + "EndpointConnected", + "EndpointShuttingDown", + "GetEndpointInformationRequest/Response", + "AreYouThereRequest/Response", + "WhoIsThereRequest/Response", + "NotSupportedResponse", + "Heartbeat" + } + }, + new SupportedTopic() + { + TopicName = "CFX.Production", + TopicSupportType = TopicSupportType.Publisher, + SupportedMessages = new List + { + "UnitsArrived", + "WorkStarted", + "WorkStageStarted", + "WorkStageCompleted", + "WorkStagePaused", + "WorkStageResumed", + "WorkCompleted", + "UnitsDeparted", + "RecipeActivated", + "RecipeModified", + "GetActiveRecipeRequest/Response", + } + }, + new SupportedTopic() + { + TopicName = "CFX.Production.Processing", + TopicSupportType = TopicSupportType.Publisher, + SupportedMessages = new List + { + "UnitsProcessed", + } + }, + new SupportedTopic() + { + TopicName = "CFX.InformationSystem.UnitValidation", + TopicSupportType = TopicSupportType.Publisher, + SupportedMessages = new List + { + "ValidateUnitsRequest/Response", + } + }, + new SupportedTopic() + { + TopicName = "CFX.ResourcePerformance", + TopicSupportType = TopicSupportType.Publisher, + SupportedMessages = new List + { + "FaultOccurred", + "FaultAcknowledged", + "FaultCleared", + "HandleFaultRequest/Response", + "GetActiveFaultRequest/Response", + "LogEntryRecorded", + "StationOffline", + "StationOnline", + "StationStateChanged", + "StationParametersModified", + "ModifyStationParametersRequest/Response", + } + }, + } + } }; } catch (Exception e) diff --git a/Sln.Iot.CFX/RequestReceived/HandleFaultRequestReceived.cs b/Sln.Iot.CFX/RequestReceived/HandleFaultRequestReceived.cs index 399ce97..81282ce 100644 --- a/Sln.Iot.CFX/RequestReceived/HandleFaultRequestReceived.cs +++ b/Sln.Iot.CFX/RequestReceived/HandleFaultRequestReceived.cs @@ -45,9 +45,18 @@ public class HandleFaultRequestReceived { try { + if(request.HandleRemote == true) + { + //熄灭报警灯 + } response = new HandleFaultResponse() { - + Result = new RequestResult() + { + Result = StatusResult.Success, + ResultCode = 0, + Message = "", + }, }; } catch (Exception e) diff --git a/Sln.Iot.CFX/RequestReceived/ModifyStationParametersRequestReceived.cs b/Sln.Iot.CFX/RequestReceived/ModifyStationParametersRequestReceived.cs index c18b90a..31268f8 100644 --- a/Sln.Iot.CFX/RequestReceived/ModifyStationParametersRequestReceived.cs +++ b/Sln.Iot.CFX/RequestReceived/ModifyStationParametersRequestReceived.cs @@ -45,9 +45,18 @@ public class ModifyStationParametersRequestReceived { try { + //修改参数 + response = new ModifyStationParametersResponse() { + Result = new RequestResult() + { + Result = StatusResult.Success, + ResultCode = 0, + Message = "", + }, + }; } catch (Exception e) diff --git a/Sln.Iot.CFX/RequestReceived/ValidateUnitsRequestReceived.cs b/Sln.Iot.CFX/RequestReceived/ValidateUnitsRequestReceived.cs deleted file mode 100644 index 2a9970c..0000000 --- a/Sln.Iot.CFX/RequestReceived/ValidateUnitsRequestReceived.cs +++ /dev/null @@ -1,68 +0,0 @@ -#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.InformationSystem.UnitValidation; -using CFX.Structures; -using Sln.Iot.Serilog; - -namespace Sln.Iot.CFX.RequestReceived; - -/// -/// 5.4.1.5 - 广播查询请求 -/// WhoIsThereRequest/Response -/// -public class ValidateUnitsRequestReceived -{ - /// - /// - /// - /// - /// - public static void Handle(ValidateUnitsRequest request, out CFXMessage response) - { - try - { - response = new ValidateUnitsResponse() - { - - }; - } - catch (Exception e) - { - //无法响应时上传NotSupportedResponse - response = new NotSupportedResponse() - { - RequestResult = new RequestResult() - { - Result = StatusResult.Failed, - ResultCode = 0, - Message = e.Message - } - }; - SerilogHelper.Instance.Error("请求数据解析异常", e); - } - } -} \ No newline at end of file diff --git a/Sln.Iot.CFX/RequestReceived/WhoIsThereRequestReceived.cs b/Sln.Iot.CFX/RequestReceived/WhoIsThereRequestReceived.cs index 5f35728..991f2c1 100644 --- a/Sln.Iot.CFX/RequestReceived/WhoIsThereRequestReceived.cs +++ b/Sln.Iot.CFX/RequestReceived/WhoIsThereRequestReceived.cs @@ -44,9 +44,24 @@ public class WhoIsThereRequestReceived { try { + //筛选支持的需求 + + + + + response = new WhoIsThereResponse() { + Result = new RequestResult() + { + Result = StatusResult.Success, + ResultCode = 0, + Message = "", + }, + CFXHandle = "CFX.A00.SDSH000003", + RequestNetworkUri = "amqp://127.0.0.1:1235", + RequestTargetAddress = "amqp://127.0.0.1:8888" }; } catch (Exception e) diff --git a/Sln.Iot.PLC/PLCConnect.cs b/Sln.Iot.PLC/PLCConnect.cs index bffbaa9..2d7e46f 100644 --- a/Sln.Iot.PLC/PLCConnect.cs +++ b/Sln.Iot.PLC/PLCConnect.cs @@ -23,27 +23,27 @@ namespace Sln.Iot.PLC /// /// PLC1 192.168.1.20 /// - public DeltaSerialOverTcp DeltaInstance0; + public DeltaTcpNet DeltaInstance0; /// /// PLC1 192.168.1.21 /// - public DeltaSerialOverTcp DeltaInstance1; + public DeltaTcpNet DeltaInstance1; /// /// PLC2 192.168.1.22 /// - public DeltaSerialOverTcp DeltaInstance2; + public DeltaTcpNet DeltaInstance2; /// /// PLC3 192.168.1.23 /// - public DeltaSerialOverTcp DeltaInstance3; + public DeltaTcpNet DeltaInstance3; /// /// PLC4 192.168.1.24 /// - public DeltaSerialOverTcp DeltaInstance4; + public DeltaTcpNet DeltaInstance4; /// /// 锁对象1 @@ -52,7 +52,7 @@ namespace Sln.Iot.PLC public async void InitConnect() { - List> tasks = new List> + List> tasks = new List> { CreateDeltaConnect("192.168.1.20", 502, 1), CreateDeltaConnect("192.168.1.21", 502, 1), @@ -68,6 +68,8 @@ namespace Sln.Iot.PLC DeltaInstance2 = tasks[2].GetAwaiter().GetResult(); DeltaInstance3 = tasks[3].GetAwaiter().GetResult(); DeltaInstance4 = tasks[4].GetAwaiter().GetResult(); + + _log.Info("PLC连接全部成功"); } /// @@ -77,11 +79,12 @@ namespace Sln.Iot.PLC /// /// /// - public async Task CreateDeltaConnect(string ip, int port, byte stationNo) + public async Task CreateDeltaConnect(string ip, int port, byte stationNo) { - DeltaSerialOverTcp plc = new DeltaSerialOverTcp(ip, port, stationNo); + DeltaTcpNet plc = new DeltaTcpNet(ip, port, stationNo); try { + plc.Series = DeltaSeries.AS; OperateResult res = new OperateResult(); res.IsSuccess = true; int count = 0; @@ -112,7 +115,7 @@ namespace Sln.Iot.PLC /// 值 /// 数据类型 /// - public OperateResult PlcWrite(DeltaSerialOverTcp connect, string address, object value, DataTypeEnum type) + public OperateResult PlcWrite(DeltaTcpNet connect, string address, object value, DataTypeEnum type) { if (connect == null) return new OperateResult() { IsSuccess = false }; var result = new OperateResult() { IsSuccess = false }; @@ -167,7 +170,7 @@ namespace Sln.Iot.PLC /// /// /// - public OperateResult PlcWriteBytes(DeltaSerialOverTcp connect, string address, byte[] data) + public OperateResult PlcWriteBytes(DeltaTcpNet connect, string address, byte[] data) { if (connect == null) return new OperateResult() { IsSuccess = false }; lock (locker1) @@ -181,7 +184,7 @@ namespace Sln.Iot.PLC /// 读取int32 /// /// - public OperateResult ReadInt32(DeltaSerialOverTcp connect, string address) + public OperateResult ReadInt32(DeltaTcpNet connect, string address) { if (connect == null) return new OperateResult() { IsSuccess = false }; lock (locker1) @@ -195,7 +198,7 @@ namespace Sln.Iot.PLC /// 读取int16 /// /// - public OperateResult ReadInt16(DeltaSerialOverTcp connect, string address) + public OperateResult ReadInt16(DeltaTcpNet connect, string address) { if (connect == null) return new OperateResult() { IsSuccess = false }; lock (locker1) @@ -210,7 +213,7 @@ namespace Sln.Iot.PLC /// /// /// - public OperateResult ReadFloat(DeltaSerialOverTcp connect, string address) + public OperateResult ReadFloat(DeltaTcpNet connect, string address) { if (connect == null) return new OperateResult() { IsSuccess = false }; lock (locker1) @@ -225,7 +228,7 @@ namespace Sln.Iot.PLC /// /// /// - public OperateResult ReadBool(DeltaSerialOverTcp connect, string address) + public OperateResult ReadBool(DeltaTcpNet connect, string address) { if (connect == null) return new OperateResult() { IsSuccess = false }; lock (locker1) @@ -241,7 +244,7 @@ namespace Sln.Iot.PLC /// /// /// - public OperateResult ReadBytes(DeltaSerialOverTcp connect, string address, ushort length) + public OperateResult ReadBytes(DeltaTcpNet connect, string address, ushort length) { if (connect == null) return new OperateResult() { IsSuccess = false }; lock (locker1) diff --git a/Sln.Iot/Program.cs b/Sln.Iot/Program.cs index 9f95a9e..abf41d7 100644 --- a/Sln.Iot/Program.cs +++ b/Sln.Iot/Program.cs @@ -25,14 +25,36 @@ namespace Sln.Iot //配置文件加载 var appConfig = AppConfigSetting.Load(); //PLC连接初始化 - PLCConnect.Instance.InitConnect(); + //PLCConnect.Instance.InitConnect(); //业务类启动 - BusinessStart business = new BusinessStart(); + //BusinessStart business = new BusinessStart(); //CFX接口启动 - //CFXHelper.Instance.Init(); + CFXHelper.Instance.Endpoint1 = CFXHelper.Instance.Init("CFX.A00.SDSH000001", + new Uri("amqp://127.0.0.1:1235"), + new Uri("amqp://127.0.0.1:8888"), + "event"); + CFXHelper.Instance.Endpoint1 = CFXHelper.Instance.Init("CFX.A00.SDSH000002", + new Uri("amqp://127.0.0.1:1235"), + new Uri("amqp://127.0.0.1:8888"), + "event"); + CFXHelper.Instance.Endpoint1 = CFXHelper.Instance.Init("CFX.A00.SDSH000003", + new Uri("amqp://127.0.0.1:1235"), + new Uri("amqp://127.0.0.1:8888"), + "event"); log.Info($"系统启动成功,日志存放位置:{appConfig.logPath}"); + CFXTest cFXTest = new CFXTest(); + cFXTest.Test1(); + + //test(); + await Task.Delay(-1); } + + private static void test() + { + TestBusiness test = new TestBusiness(); + + } } } \ No newline at end of file