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