From 6c7db8cb88e0f0b978894d42843c58abf8429737 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A6=82=E6=84=8F=20=E5=BD=AD?= <2417589739@qq.com> Date: Mon, 30 May 2022 20:34:03 +0800 Subject: [PATCH] =?UTF-8?q?=E7=85=AE=E9=9D=A2=E6=9C=BA=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BPASmartClient.DRCoffee/CoffeeMachine.cs | 119 ++++---- BPASmartClient.Device/BaseDevice.cs | 11 + BPASmartClient.GSIceCream/IceCreamMachine.cs | 144 ++++----- BPASmartClient.KLMCoffee/CoffeeMachine.cs | 212 ++++++------- BPASmartClient.Lebai/LebaiRobot.cs | 14 +- BPASmartClient.MORKSM.BK.PLC/PLCMachine.cs | 8 +- BPASmartClient.MorkS/Control_Morks.cs | 55 +++- BPASmartClient.MorkS/GVL_MORKS.cs | 8 +- BPASmartClient.Peripheral/BasePeripheral.cs | 4 +- BPASmartClient.Peripheral/IPeripheral.cs | 2 + BPASmartClient.SCChip/ICChipMachine.cs | 302 ++++++++++--------- 11 files changed, 474 insertions(+), 405 deletions(-) diff --git a/BPASmartClient.DRCoffee/CoffeeMachine.cs b/BPASmartClient.DRCoffee/CoffeeMachine.cs index e897453f..37b886dc 100644 --- a/BPASmartClient.DRCoffee/CoffeeMachine.cs +++ b/BPASmartClient.DRCoffee/CoffeeMachine.cs @@ -16,7 +16,7 @@ namespace BPASmartClient.DRCoffee /// /// 咖啡机 /// - public class CoffeeMachine :BasePeripheral + public class CoffeeMachine : BasePeripheral { //通讯代理 SerialPortClient commProxy = null; @@ -95,7 +95,7 @@ namespace BPASmartClient.DRCoffee commProxy.SendData(cmdAsk); } Thread.Sleep(200); - }),"咖啡机询问线程"); + }), "咖啡机询问线程"); ThreadManage.GetInstance().StartLong(new Action(() => { @@ -132,7 +132,7 @@ namespace BPASmartClient.DRCoffee } } Thread.Sleep(5); - }),"咖啡机解析线程"); + }), "咖啡机解析线程"); } /// @@ -141,7 +141,7 @@ namespace BPASmartClient.DRCoffee /// public void ProcessPackage(DrCoffeePackage package) { - + if (((DrCoffeeStatus)status["CoffeeStatus"]) == DrCoffeeStatus.Running && package.Status != DrCoffeeStatus.Running) { status["CoffeeStatus"] = package.Status; @@ -154,17 +154,17 @@ namespace BPASmartClient.DRCoffee status["CoffeeAppStatus"] = package.ApplicationStatus; status["CoffeeWarning"] = package.Warning; status["CoffeeFault"] = package.Fault; - + if ((DrCoffeeStatus)status["CoffeeStatus"] == DrCoffeeStatus.Warning || (DrCoffeeStatus)status["CoffeeStatus"] == DrCoffeeStatus.Fault || (DrCoffeeWarning)status["CoffeeWarning"] != DrCoffeeWarning.无警告 || (DrCoffeeFault)status["CoffeeFault"] != DrCoffeeFault.无故障 ) { - IsWork = false; + IsWork = false; } else - IsWork = true; + IsWork = true; } protected override void InitStatus() @@ -177,68 +177,71 @@ namespace BPASmartClient.DRCoffee public override void Init() { - commProxy = new SerialPortClient(communicationPar.SerialPort,(BaudRates)communicationPar.BaudRate); + commProxy = new SerialPortClient(communicationPar.SerialPort, (BaudRates)communicationPar.BaudRate); commProxy.SetDataStorage(dataStorage); //咖博士咖啡机制作 - EventBus.EventBus.GetInstance().Subscribe(DeviceId,delegate (IEvent @event,EventCallBackHandle callBack) - { - try - { - free = true; - Thread.Sleep(200); - drinksOrder.CommCmd = DrCoffeeCommCmd.饮品制作指令; - drinksOrder.DrinksCode = ((DRCoffee_MakeCoffeeEvent)@event).DrinkCode; - commProxy.SendData(DrCoffee.Packe(drinksOrder)); - Thread.Sleep(200); - free = false; - } - catch (Exception ex) - { - MessageLog.GetInstance.ShowEx($"BPASmartClient.DRCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); - } - }); + EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) + { + try + { + free = true; + Thread.Sleep(200); + drinksOrder.CommCmd = DrCoffeeCommCmd.饮品制作指令; + drinksOrder.DrinksCode = ((DRCoffee_MakeCoffeeEvent)@event).DrinkCode; + commProxy.SendData(DrCoffee.Packe(drinksOrder)); + Thread.Sleep(200); + free = false; + } + catch (Exception ex) + { + MessageLog.GetInstance.ShowEx($"BPASmartClient.DRCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); + } + }); //咖博士咖啡机取消制作咖啡 - EventBus.EventBus.GetInstance().Subscribe(DeviceId,delegate (IEvent @event,EventCallBackHandle callBack) - { - try - { - free = true; - Thread.Sleep(200); - drinksOrder.CommCmd = DrCoffeeCommCmd.取消应用指令; - drinksOrder.DrinksCode = 0; - commProxy.SendData(DrCoffee.Packe(drinksOrder)); - Thread.Sleep(200); - free = false; - } - catch (Exception ex) - { - MessageLog.GetInstance.ShowEx($"BPASmartClient.DRCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); - } - }); + EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) + { + try + { + free = true; + Thread.Sleep(200); + drinksOrder.CommCmd = DrCoffeeCommCmd.取消应用指令; + drinksOrder.DrinksCode = 0; + commProxy.SendData(DrCoffee.Packe(drinksOrder)); + Thread.Sleep(200); + free = false; + } + catch (Exception ex) + { + MessageLog.GetInstance.ShowEx($"BPASmartClient.DRCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); + } + }); //咖博士咖啡机模式设置 - EventBus.EventBus.GetInstance().Subscribe(DeviceId,delegate (IEvent @event,EventCallBackHandle callBack) - { - try - { - free = true; - Thread.Sleep(200); - drinksOrder.CommCmd = ((DRCoffee_CoffeeCommCmdEvent)@event).CommCmd; - commProxy.SendData(DrCoffee.Packe(drinksOrder)); - Thread.Sleep(200); - free = false; - } - catch (Exception ex) - { - MessageLog.GetInstance.ShowEx($"BPASmartClient.DRCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); - } - }); + EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) + { + try + { + free = true; + Thread.Sleep(200); + drinksOrder.CommCmd = ((DRCoffee_CoffeeCommCmdEvent)@event).CommCmd; + commProxy.SendData(DrCoffee.Packe(drinksOrder)); + Thread.Sleep(200); + free = false; + } + catch (Exception ex) + { + MessageLog.GetInstance.ShowEx($"BPASmartClient.DRCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); + } + }); InitStatus(); //测试 Start(); } + public override void WriteData(string address, object value) + { + } } } diff --git a/BPASmartClient.Device/BaseDevice.cs b/BPASmartClient.Device/BaseDevice.cs index cb873488..c511c86f 100644 --- a/BPASmartClient.Device/BaseDevice.cs +++ b/BPASmartClient.Device/BaseDevice.cs @@ -110,6 +110,17 @@ namespace BPASmartClient.Device #endregion + public void WriteControl(string address, object value) + { + if (peripherals != null) + { + for (int i = 0; i < peripherals.Count; i++) + { + peripherals.ElementAt(i).WriteData(address, value); + } + } + } + /// /// 设备过程日志显示 /// diff --git a/BPASmartClient.GSIceCream/IceCreamMachine.cs b/BPASmartClient.GSIceCream/IceCreamMachine.cs index 93b661f3..0005faff 100644 --- a/BPASmartClient.GSIceCream/IceCreamMachine.cs +++ b/BPASmartClient.GSIceCream/IceCreamMachine.cs @@ -14,8 +14,8 @@ using static BPASmartClient.GSIceCream.MessageDefine; namespace BPASmartClient.GSIceCream { - public class IceCreamMachine :BasePeripheral - { + public class IceCreamMachine : BasePeripheral + { //通讯代理 SerialPortClient commProxy = null; //是否下发指令,主线程等待 @@ -179,13 +179,13 @@ namespace BPASmartClient.GSIceCream IsConnected = OnLine; status["IceCreamIsConnected"] = OnLine; status["IceCreamCurrentMode"] = heartUpMsg.MS; - status["IceCreamYLWD"] = BitConverter.ToInt16(new byte[] { heartUpMsg.YLWD_L,heartUpMsg.YLWD_H },0); - status["IceCreamHQWD"] = BitConverter.ToInt16(new byte[] { heartUpMsg.HQWD_L,heartUpMsg.HQWD_H },0); - status["IceCreamHJWD"] = BitConverter.ToInt16(new byte[] { heartUpMsg.HJWD_L,heartUpMsg.HJWD_H },0); + status["IceCreamYLWD"] = BitConverter.ToInt16(new byte[] { heartUpMsg.YLWD_L, heartUpMsg.YLWD_H }, 0); + status["IceCreamHQWD"] = BitConverter.ToInt16(new byte[] { heartUpMsg.HQWD_L, heartUpMsg.HQWD_H }, 0); + status["IceCreamHJWD"] = BitConverter.ToInt16(new byte[] { heartUpMsg.HJWD_L, heartUpMsg.HJWD_H }, 0); status["IceCreamDL"] = BitConverter.ToInt16(new byte[] { heartUpMsg.DL_L, heartUpMsg.DL_H }, 0); - status["IceCreamFault"] = (MORKI_FAULT)BitConverter.ToInt16(new byte[] { heartUpMsg.GZ_L,heartUpMsg.GZ_H },0); + status["IceCreamFault"] = (MORKI_FAULT)BitConverter.ToInt16(new byte[] { heartUpMsg.GZ_L, heartUpMsg.GZ_H }, 0); status["IceCreamCXB"] = heartUpMsg.CXB; - status["IceCreamDLCompleted"] = (heartUpMsg.DLTJ >> 4 & 1) == 1; + status["IceCreamDLCompleted"] = (heartUpMsg.DLTJ >> 4 & 1) == 1; if (RTrig.GetInstance("打料完成检测").Start((bool)status["IceCreamDLCompleted"])) { @@ -201,7 +201,7 @@ namespace BPASmartClient.GSIceCream private void ProcessModeUp(ICMSG_MODE_UP modeUpMsg) { - MessageLog.GetInstance.Show(string.Format("模式返回为:{0}",modeUpMsg.Mode)); + MessageLog.GetInstance.Show(string.Format("模式返回为:{0}", modeUpMsg.Mode)); } public void ProcessMsg(byte[] data) @@ -269,79 +269,83 @@ namespace BPASmartClient.GSIceCream }); //广深冰淇淋机打料 - EventBus.EventBus.GetInstance().Subscribe(DeviceId,delegate (IEvent @event,EventCallBackHandle callBack) - { - try - { - if ((MORKI_FAULT)status["IceCreamFault"] != MORKI_FAULT.未发生故障) - { - MessageLog.GetInstance.Show(string.Format("当前存在故障[{0}%],不允许制作",(MORKI_FAULT)status["IceCreamFault"])); - new GSIceCream_EndCookEvent() { DeviceId = DeviceId,Status = false }.Publish(); - callBack?.Invoke(false); - return; - } - if ((byte)status["IceCreamCXB"] <= 86) - { - MessageLog.GetInstance.Show(string.Format("当前成型比[{0}%],低于86%,不允许制作",(byte)status["IceCreamCXB"])); - new GSIceCream_EndCookEvent() { DeviceId = DeviceId,Status = false }.Publish(); - callBack?.Invoke(false ); - return; - } + EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) + { + try + { + if ((MORKI_FAULT)status["IceCreamFault"] != MORKI_FAULT.未发生故障) + { + MessageLog.GetInstance.Show(string.Format("当前存在故障[{0}%],不允许制作", (MORKI_FAULT)status["IceCreamFault"])); + new GSIceCream_EndCookEvent() { DeviceId = DeviceId, Status = false }.Publish(); + callBack?.Invoke(false); + return; + } + if ((byte)status["IceCreamCXB"] <= 86) + { + MessageLog.GetInstance.Show(string.Format("当前成型比[{0}%],低于86%,不允许制作", (byte)status["IceCreamCXB"])); + new GSIceCream_EndCookEvent() { DeviceId = DeviceId, Status = false }.Publish(); + callBack?.Invoke(false); + return; + } - bool modeRight = (MORKI_MODE)status["IceCreamCurrentMode"] == MORKI_MODE.制冷模式; + bool modeRight = (MORKI_MODE)status["IceCreamCurrentMode"] == MORKI_MODE.制冷模式; - if (!modeRight) - { - free = true; - Thread.Sleep(200); + if (!modeRight) + { + free = true; + Thread.Sleep(200); - var temp = IcPack.StructureToByte(ICMSG_MODE_DW.Build(MORKI_MODE.制冷模式)); - commProxy.SendData(temp); + var temp = IcPack.StructureToByte(ICMSG_MODE_DW.Build(MORKI_MODE.制冷模式)); + commProxy.SendData(temp); - Thread.Sleep(200); - free = false; - MessageLog.GetInstance.Show(string.Format("出料操作->设置模式[{0}]",MORKI_MODE.制冷模式)); + Thread.Sleep(200); + free = false; + MessageLog.GetInstance.Show(string.Format("出料操作->设置模式[{0}]", MORKI_MODE.制冷模式)); - DateTime freeTime = DateTime.Now.AddSeconds(5); - while (DateTime.Now < freeTime) - { - Thread.Sleep(10); - modeRight = (MORKI_MODE)status["IceCreamCurrentMode"] == MORKI_MODE.制冷模式; - if (modeRight) - break; - } - } + DateTime freeTime = DateTime.Now.AddSeconds(5); + while (DateTime.Now < freeTime) + { + Thread.Sleep(10); + modeRight = (MORKI_MODE)status["IceCreamCurrentMode"] == MORKI_MODE.制冷模式; + if (modeRight) + break; + } + } - if (modeRight) - { - free = true; - Thread.Sleep(200); - var data = IcPack.StructureToByte(ICMSG_MODE_DW.Build(MORKI_MODE.打料)); - commProxy.SendData(data); - Thread.Sleep(200); - free = false; - new GSIceCream_EndCookEvent() { DeviceId = DeviceId,Status =true}.Publish(); - MessageLog.GetInstance.Show(string.Format("出料操作->设置模式[{0}]",MORKI_MODE.打料)); - callBack?.Invoke(true); - } - else - { - MessageLog.GetInstance.Show(string.Format("出料操作->模式切换失败,当前模式[{0}],不允许出料",(MORKI_MODE)status["IceCreamCurrentMode"])); - new GSIceCream_EndCookEvent() { DeviceId = DeviceId,Status = false }.Publish(); - callBack?.Invoke(false); - } - } - catch (Exception ex) - { - MessageLog.GetInstance.ShowEx($"BPASmartClient.GSIceCream 中引发错误,IceCreamMachine 类,描述:[{ex.Message}]"); - callBack?.Invoke(false); - } - }); + if (modeRight) + { + free = true; + Thread.Sleep(200); + var data = IcPack.StructureToByte(ICMSG_MODE_DW.Build(MORKI_MODE.打料)); + commProxy.SendData(data); + Thread.Sleep(200); + free = false; + new GSIceCream_EndCookEvent() { DeviceId = DeviceId, Status = true }.Publish(); + MessageLog.GetInstance.Show(string.Format("出料操作->设置模式[{0}]", MORKI_MODE.打料)); + callBack?.Invoke(true); + } + else + { + MessageLog.GetInstance.Show(string.Format("出料操作->模式切换失败,当前模式[{0}],不允许出料", (MORKI_MODE)status["IceCreamCurrentMode"])); + new GSIceCream_EndCookEvent() { DeviceId = DeviceId, Status = false }.Publish(); + callBack?.Invoke(false); + } + } + catch (Exception ex) + { + MessageLog.GetInstance.ShowEx($"BPASmartClient.GSIceCream 中引发错误,IceCreamMachine 类,描述:[{ex.Message}]"); + callBack?.Invoke(false); + } + }); InitStatus(); //测试用 Start(); MessageLog.GetInstance.Show("冰淇淋机器初始化完成"); } + + public override void WriteData(string address, object value) + { + } } } diff --git a/BPASmartClient.KLMCoffee/CoffeeMachine.cs b/BPASmartClient.KLMCoffee/CoffeeMachine.cs index 0b803647..ae5519cf 100644 --- a/BPASmartClient.KLMCoffee/CoffeeMachine.cs +++ b/BPASmartClient.KLMCoffee/CoffeeMachine.cs @@ -19,7 +19,7 @@ namespace BPASmartClient.KLMCoffee /// /// 伽乐美咖啡机 /// - public class CoffeeMachine :BasePeripheral + public class CoffeeMachine : BasePeripheral { //通讯代理 SerialPortClient commProxy = null; @@ -92,12 +92,12 @@ namespace BPASmartClient.KLMCoffee commProxy.SendData(cmdAsk); } Thread.Sleep(200); - }),"咖啡机询问线程"); + }), "咖啡机询问线程"); ThreadManage.GetInstance().StartLong(new Action(() => { ResolveMsg(); - }),"咖啡机解析线程"); + }), "咖啡机解析线程"); } private void ResolveMsg() @@ -117,7 +117,7 @@ namespace BPASmartClient.KLMCoffee { temp.Add(dataStorage.GetData()); } - List vs = new List() { temp[temp.Count - 4],temp[temp.Count - 3],temp[temp.Count - 2],temp[temp.Count - 1] }; + List vs = new List() { temp[temp.Count - 4], temp[temp.Count - 3], temp[temp.Count - 2], temp[temp.Count - 1] }; //帧尾 if (Encoding.ASCII.GetString(vs.ToArray()).ToLower() == "\\r\\n" || Encoding.ASCII.GetString(vs.ToArray()).ToLower() == "\r\n") @@ -146,9 +146,9 @@ namespace BPASmartClient.KLMCoffee status["Warning"] = systemStatus.faultMessage.dataFault(); status["Keep"] = systemStatus.upkeepMessage; if (systemStatus.faultMessage.IsFault() || systemStatus.upkeepMessage.IsUpkeep()) - IsWork=false; + IsWork = false; else - IsWork=true; + IsWork = true; } } @@ -164,128 +164,130 @@ namespace BPASmartClient.KLMCoffee status["drinkType"] = DrinkType.意式; status["AppStatus"] = TaskIndex.无任务; status["progress"] = 0; - status["Warning"] = new FaultMessage(0x00,0x00).dataFault(); + status["Warning"] = new FaultMessage(0x00, 0x00).dataFault(); status["Keep"] = new UpkeepMessage(0x00).dataFault(); } public override void Init() { - commProxy = new SerialPortClient(PortName,(BaudRates)Enum.Parse(typeof(BaudRates),BaudRate)); + commProxy = new SerialPortClient(PortName, (BaudRates)Enum.Parse(typeof(BaudRates), BaudRate)); commProxy.SetDataStorage(dataStorage); //伽乐美咖啡机制作 - EventBus.EventBus.GetInstance().Subscribe(DeviceId,delegate (IEvent @event,EventCallBackHandle callBack) - { - try - { - free = true; - Thread.Sleep(200); - byte[] data=command.ReturnsCommandData(K95CommandEnum.配方咖啡制作.GetString(),new RecipeModel().Packe(((KLMCoffee_MakeCoffeeEvent)@event).DrinkCode)); - commProxy.SendData(data); - Thread.Sleep(200); - free = false; - } - catch (Exception ex) - { - MessageLog.GetInstance.ShowEx($"BPASmartClient.KLMCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); - } - }); + EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) + { + try + { + free = true; + Thread.Sleep(200); + byte[] data = command.ReturnsCommandData(K95CommandEnum.配方咖啡制作.GetString(), new RecipeModel().Packe(((KLMCoffee_MakeCoffeeEvent)@event).DrinkCode)); + commProxy.SendData(data); + Thread.Sleep(200); + free = false; + } + catch (Exception ex) + { + MessageLog.GetInstance.ShowEx($"BPASmartClient.KLMCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); + } + }); //伽乐美咖啡机取消制作咖啡 - EventBus.EventBus.GetInstance().Subscribe(DeviceId,delegate (IEvent @event,EventCallBackHandle callBack) - { - try - { - free = true; - Thread.Sleep(200); - byte[] data = command.ReturnsCancelMake(); - commProxy.SendData(data); - Thread.Sleep(200); - free = false; - } - catch (Exception ex) - { - MessageLog.GetInstance.ShowEx($"BPASmartClient.KLMCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); - } - }); + EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) + { + try + { + free = true; + Thread.Sleep(200); + byte[] data = command.ReturnsCancelMake(); + commProxy.SendData(data); + Thread.Sleep(200); + free = false; + } + catch (Exception ex) + { + MessageLog.GetInstance.ShowEx($"BPASmartClient.KLMCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); + } + }); //伽乐美咖啡机清洗冲泡器 - EventBus.EventBus.GetInstance().Subscribe(DeviceId,delegate (IEvent @event,EventCallBackHandle callBack) - { - try - { - free = true; - Thread.Sleep(200); - byte[] data = command.ReturnsWashCPJ(); - commProxy.SendData(data); - Thread.Sleep(200); - free = false; - } - catch (Exception ex) - { - MessageLog.GetInstance.ShowEx($"BPASmartClient.KLMCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); - } - }); + EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) + { + try + { + free = true; + Thread.Sleep(200); + byte[] data = command.ReturnsWashCPJ(); + commProxy.SendData(data); + Thread.Sleep(200); + free = false; + } + catch (Exception ex) + { + MessageLog.GetInstance.ShowEx($"BPASmartClient.KLMCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); + } + }); //伽乐美咖啡机放杯确认 - EventBus.EventBus.GetInstance().Subscribe(DeviceId,delegate (IEvent @event,EventCallBackHandle callBack) - { - try - { - free = true; - Thread.Sleep(200); - byte[] data = command.ReturnsCupIsOK(); - commProxy.SendData(data); - Thread.Sleep(200); - free = false; - } - catch (Exception ex) - { - MessageLog.GetInstance.ShowEx($"BPASmartClient.KLMCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); - } - }); + EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) + { + try + { + free = true; + Thread.Sleep(200); + byte[] data = command.ReturnsCupIsOK(); + commProxy.SendData(data); + Thread.Sleep(200); + free = false; + } + catch (Exception ex) + { + MessageLog.GetInstance.ShowEx($"BPASmartClient.KLMCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); + } + }); //伽乐美咖啡机清洗奶沫器 - EventBus.EventBus.GetInstance().Subscribe(DeviceId,delegate (IEvent @event,EventCallBackHandle callBack) - { - try - { - free = true; - Thread.Sleep(200); - byte[] data = command.ReturnsWashNMJ(); - commProxy.SendData(data); - Thread.Sleep(200); - free = false; - } - catch (Exception ex) - { - MessageLog.GetInstance.ShowEx($"BPASmartClient.KLMCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); - } - }); + EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) + { + try + { + free = true; + Thread.Sleep(200); + byte[] data = command.ReturnsWashNMJ(); + commProxy.SendData(data); + Thread.Sleep(200); + free = false; + } + catch (Exception ex) + { + MessageLog.GetInstance.ShowEx($"BPASmartClient.KLMCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); + } + }); //伽乐美咖啡机清洗奶沫器确认 - EventBus.EventBus.GetInstance().Subscribe(DeviceId,delegate (IEvent @event,EventCallBackHandle callBack) - { - try - { - free = true; - Thread.Sleep(200); - byte[] data = command.ReturnsWashNMJIsOK(); - commProxy.SendData(data); - Thread.Sleep(200); - free = false; - } - catch (Exception ex) - { - MessageLog.GetInstance.ShowEx($"BPASmartClient.KLMCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); - } - }); + EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) + { + try + { + free = true; + Thread.Sleep(200); + byte[] data = command.ReturnsWashNMJIsOK(); + commProxy.SendData(data); + Thread.Sleep(200); + free = false; + } + catch (Exception ex) + { + MessageLog.GetInstance.ShowEx($"BPASmartClient.KLMCoffee 中引发错误,CoffeeMachine 类,描述:[{ex.Message}]"); + } + }); InitStatus(); } - + public override void WriteData(string address, object value) + { + } } } diff --git a/BPASmartClient.Lebai/LebaiRobot.cs b/BPASmartClient.Lebai/LebaiRobot.cs index 721cc893..07a7ced0 100644 --- a/BPASmartClient.Lebai/LebaiRobot.cs +++ b/BPASmartClient.Lebai/LebaiRobot.cs @@ -19,7 +19,7 @@ using BPASmartClient.Model.乐白机器人; namespace BPASmartClient.Lebai { - public class LebaiRobot: BasePeripheral + public class LebaiRobot : BasePeripheral { /// @@ -51,7 +51,7 @@ namespace BPASmartClient.Lebai if (LebaiHelper.GetInstance().robotData != null) status["RobotMode"] = LebaiHelper.GetInstance().robotData.RobotMode.Mode; LebaiHelper.GetInstance().GetRobotModeStatus(); Thread.Sleep(10); - },"获取乐白机器人数据"); + }, "获取乐白机器人数据"); } @@ -62,7 +62,7 @@ namespace BPASmartClient.Lebai public override void Init() { - EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack ) + EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) { }); @@ -90,7 +90,7 @@ namespace BPASmartClient.Lebai if (@event == null) return; if (@event is LebaiRobot_SetValueEvent SetValueEvent) { - LebaiHelper.GetInstance().SetValue(SetValueEvent.RobotSetValue); + LebaiHelper.GetInstance().SetValue(SetValueEvent.RobotSetValue); } }); //控制机器人 @@ -116,7 +116,7 @@ namespace BPASmartClient.Lebai default: break; } - + } }); //选择机器人场景 @@ -134,6 +134,8 @@ namespace BPASmartClient.Lebai MessageLog.GetInstance.Show("乐白机器人初始化完成"); } - + public override void WriteData(string address, object value) + { + } } } diff --git a/BPASmartClient.MORKSM.BK.PLC/PLCMachine.cs b/BPASmartClient.MORKSM.BK.PLC/PLCMachine.cs index b7b11c7f..3551f1ff 100644 --- a/BPASmartClient.MORKSM.BK.PLC/PLCMachine.cs +++ b/BPASmartClient.MORKSM.BK.PLC/PLCMachine.cs @@ -48,7 +48,7 @@ namespace BPASmartClient.PLC { if (@event == null) return; var par = @event as WriteModel; - + //M32.7地址复位 modbusTcp.Write(par?.Address, par?.Value); }); } @@ -63,6 +63,12 @@ namespace BPASmartClient.PLC } + public override void WriteData(string address, object value) + { + if (address != null && value != null) + modbusTcp.Write(address, value); + } + protected override void InitStatus() { diff --git a/BPASmartClient.MorkS/Control_Morks.cs b/BPASmartClient.MorkS/Control_Morks.cs index 8ebe8c34..d2ba57aa 100644 --- a/BPASmartClient.MorkS/Control_Morks.cs +++ b/BPASmartClient.MorkS/Control_Morks.cs @@ -17,6 +17,7 @@ using System.Reflection; using BPASmartClient.MorkS.Model; using System.Collections.ObjectModel; using BPASmartClient.MorkS.ViewModel; +using BPASmartClient.Business; namespace BPASmartClient.MorkS { @@ -287,8 +288,6 @@ namespace BPASmartClient.MorkS else IsHealth = true; - //if (mORKS.AllowRun) - //{ TakeBowlTask(); TakeNoodleTask(); @@ -298,7 +297,15 @@ namespace BPASmartClient.MorkS SingleDetect(); TurntableControl(); - //} + + var data = new List(); + for (int i = 0; i < Json.Data.parSets.Count; i++) + { + data.Add(Json.Data.parSets.ElementAt(i).IsShield); + } + + WriteControl("M260.0", data.ToArray()); + } private void BowlControl(OrderLocInfo orderLocInfo) @@ -400,6 +407,11 @@ namespace BPASmartClient.MorkS { if (mORKS.TurntableFeedbackloc != loc && !mORKS.TurntableLocLists.Contains(loc)) { + if (!mORKS.TurntableLowerLimit) + { + WriteData("M32.7", false); + DeviceProcessLogShow($"执行了转台启动互锁信号复位"); + } TurntableStart(loc); DeviceProcessLogShow($"没有物料检测的启动转台控制,转台位置:[{loc}]"); break; @@ -414,6 +426,15 @@ namespace BPASmartClient.MorkS } } + //if (DelayRTrig.GetInstance("互锁信号复位").Start(!mORKS.TurntableLowerLimit && mORKS.TurntableMoveInPlace, 2)) + //{ + // if (!mORKS.TurntableLowerLimit) + // { + // WriteData("M32.7", false); + // DeviceProcessLogShow($"执行了转台启动互锁信号复位"); + // } + //} + //补料中检测 if (RTrig.GetInstance("mORKS.Feeding").Start(mORKS.Feeding)) { @@ -488,6 +509,17 @@ namespace BPASmartClient.MorkS RobotOutMeal(); CookNoodleStatusReset((ushort)(loc + 1)); ResetAllowFallNoodle(); + + + //新增,待测试 + //if (mORKS.RbOutMealComplete) + //{ + // ResetCookComplete(); + // mORKS.CookCompleteFlatBit = false; + // DeviceProcessLogShow("取餐过程中复位出餐完成信号"); + //} + + mORKS.OutMealId = mORKS.IngredientsCompleteId; mORKS.IngredientsCompleteId = string.Empty; mORKS.CookNodelId[loc] = string.Empty; @@ -522,7 +554,7 @@ namespace BPASmartClient.MorkS } //取餐完成逻辑处理 - if (Delay.GetInstance("CompleteChange1").Start(mORKS.CookCompleteFlatBit && !mORKS.TakeMealDetect, 2)) + if (Delay.GetInstance("CompleteChange1").Start(mORKS.CookCompleteFlatBit && !mORKS.TakeMealDetect, 1)) { OrderChange(mORKS.OutMealId, ORDER_STATUS.COMPLETED_TAKE); DeviceProcessLogShow($"订单【{mORKS.OutMealId}】取餐完成"); @@ -531,15 +563,6 @@ namespace BPASmartClient.MorkS mORKS.OutMealId = string.Empty; } - //if (DelayRTrig.GetInstance("CompleteChange1").Start(mORKS.CookCompleteFlatBit && !mORKS.TakeMealDetect, 2)) - //{ - // OrderChange(mORKS.OutMealId, ORDER_STATUS.COMPLETED_TAKE); - // DeviceProcessLogShow($"订单【{mORKS.OutMealId}】取餐完成"); - // ResetCookComplete(); - // mORKS.CookCompleteFlatBit = false; - // mORKS.OutMealId = string.Empty; - //} - //机器人取面完成信号检测 if (RTrig.GetInstance("TakeNoodleComplete").Start(mORKS.RbTakeNoodleComplete)) { @@ -552,7 +575,11 @@ namespace BPASmartClient.MorkS int OutMealRequstCount = mORKS.CookNoodlesComplete.Where(p => p == true).ToList().Count; int mlCount = mORKS.NoodleCookerStatus.Where(p => p == true).ToList().Count; - mORKS.RobotTaskInterlock = OutMealRequstCount > 0 && mORKS.AllowFallNoodle && (mlCount >= 2 || mORKS.RBTakeNoodleTask.Count == 0); + + mORKS.PriorityJudgment = Delay.GetInstance("取餐优先级判断").Start(mORKS.TurntableLocLists.Count > 0 && !mORKS.TurntableLowerLimit, 4); + mORKS.RobotTaskInterlock = OutMealRequstCount > 0 && mORKS.AllowFallNoodle && (mlCount >= 2 || mORKS.RBTakeNoodleTask.Count == 0 || mORKS.PriorityJudgment); + + } diff --git a/BPASmartClient.MorkS/GVL_MORKS.cs b/BPASmartClient.MorkS/GVL_MORKS.cs index bc1c6a73..35702f06 100644 --- a/BPASmartClient.MorkS/GVL_MORKS.cs +++ b/BPASmartClient.MorkS/GVL_MORKS.cs @@ -42,7 +42,13 @@ namespace BPASmartClient.MorkS public bool AllowRun { get; set; } /// - /// //机器人任务互锁信号 + /// 优先级判断 + /// + [VariableMonitor("优先级判断条件")] + public bool PriorityJudgment { get; set; } + + /// + /// 机器人任务互锁信号,false:取面,true:出餐 /// //[Circuit(new string[] { "机器人取面", "出面控制" }, "机器人互锁", new bool[] { true, false })] [VariableMonitor("机器人任务互锁信号")] diff --git a/BPASmartClient.Peripheral/BasePeripheral.cs b/BPASmartClient.Peripheral/BasePeripheral.cs index c4631550..96664eb5 100644 --- a/BPASmartClient.Peripheral/BasePeripheral.cs +++ b/BPASmartClient.Peripheral/BasePeripheral.cs @@ -47,16 +47,18 @@ namespace BPASmartClient.Peripheral return null; } - public abstract void Start(); public abstract void Stop(); public abstract void Init(); + public abstract void WriteData(string address, object value); + public ConcurrentDictionary GetAllStatus() { return status; } + } } diff --git a/BPASmartClient.Peripheral/IPeripheral.cs b/BPASmartClient.Peripheral/IPeripheral.cs index ed05864a..7aaa611c 100644 --- a/BPASmartClient.Peripheral/IPeripheral.cs +++ b/BPASmartClient.Peripheral/IPeripheral.cs @@ -53,6 +53,8 @@ namespace BPASmartClient.Peripheral /// ConcurrentDictionary status { get; set; } + void WriteData(string address, object value); + /// /// 初始化 /// diff --git a/BPASmartClient.SCChip/ICChipMachine.cs b/BPASmartClient.SCChip/ICChipMachine.cs index 58dc54b6..c26f158a 100644 --- a/BPASmartClient.SCChip/ICChipMachine.cs +++ b/BPASmartClient.SCChip/ICChipMachine.cs @@ -14,7 +14,7 @@ using static BPASmartClient.EventBus.EventBus; namespace BPASmartClient.SCChip { - public class ICChipMachine :BasePeripheral + public class ICChipMachine : BasePeripheral { //通讯代理 SerialPortClient commProxy = null; @@ -80,7 +80,7 @@ namespace BPASmartClient.SCChip ThreadManage.GetInstance().StartLong(new Action(() => { ResolveMsg(); - }),"单片机解析线程"); + }), "单片机解析线程"); } private void ResolveMsg() @@ -120,8 +120,8 @@ namespace BPASmartClient.SCChip IntPtr allocIntPtr = Marshal.AllocHGlobal(size); try { - Marshal.Copy(dataBuffer,0,allocIntPtr,size); - structure = (ICChipPackage)Marshal.PtrToStructure(allocIntPtr,typeof(ICChipPackage)); + Marshal.Copy(dataBuffer, 0, allocIntPtr, size); + structure = (ICChipPackage)Marshal.PtrToStructure(allocIntPtr, typeof(ICChipPackage)); } finally { @@ -141,8 +141,8 @@ namespace BPASmartClient.SCChip IntPtr bufferIntPtr = Marshal.AllocHGlobal(size); try { - Marshal.StructureToPtr(structure,bufferIntPtr,true); - Marshal.Copy(bufferIntPtr,buffer,0,size); + Marshal.StructureToPtr(structure, bufferIntPtr, true); + Marshal.Copy(bufferIntPtr, buffer, 0, size); } finally { @@ -201,8 +201,8 @@ namespace BPASmartClient.SCChip } break; } - if(!OnLine) IsWork = false; - else IsWork = true; + if (!OnLine) IsWork = false; + else IsWork = true; } catch (Exception ex) { @@ -224,163 +224,167 @@ namespace BPASmartClient.SCChip public override void Init() { - commProxy = new SerialPortClient(communicationPar.SerialPort,(BaudRates)communicationPar.BaudRate); + commProxy = new SerialPortClient(communicationPar.SerialPort, (BaudRates)communicationPar.BaudRate); commProxy.SetDataStorage(dataStorage); //STM32F103RCT6单片机下杯 - EventBus.EventBus.GetInstance().Subscribe(DeviceId,delegate (IEvent @event,EventCallBackHandle callBack) - { - try - { - switch ((@event as SCChip_TakeCupEvent).Cup) - { - case IC_CUP.CUP_ICECREAM: - status["CompletedTake_CPU_CUP_ICECREAM"] = false; - break; - case IC_CUP.CUP_COFFEE: - status["CompletedTake_CPU_CUP_COFFEE"] = false; - break; - } - package.Cmd = IC_CMD.TAKE_CUP; - package.Value = (byte)(@event as SCChip_TakeCupEvent).Cup; - commProxy.SendData(StructureToByte(package)); + EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) + { + try + { + switch ((@event as SCChip_TakeCupEvent).Cup) + { + case IC_CUP.CUP_ICECREAM: + status["CompletedTake_CPU_CUP_ICECREAM"] = false; + break; + case IC_CUP.CUP_COFFEE: + status["CompletedTake_CPU_CUP_COFFEE"] = false; + break; + } + package.Cmd = IC_CMD.TAKE_CUP; + package.Value = (byte)(@event as SCChip_TakeCupEvent).Cup; + commProxy.SendData(StructureToByte(package)); - bool wait = true; - var waitTimeout = DateTime.Now.AddSeconds(3); - while (wait) - { - wait = DateTime.Now < waitTimeout; - if (wait) - { - switch ((@event as SCChip_TakeCupEvent).Cup) - { - case IC_CUP.CUP_ICECREAM: - wait = !(bool)status["CompletedTake_CPU_CUP_ICECREAM"]; - break; - case IC_CUP.CUP_COFFEE: - wait = !(bool)status["CompletedTake_CPU_CUP_COFFEE"]; - break; - } - } - Thread.Sleep(10); - } - } - catch (Exception ex) - { - MessageLog.GetInstance.ShowEx($"BPASmartClient.SCChip 中引发错误,ICChipMachine 类,描述:[{ex.Message}]"); - } - }); + bool wait = true; + var waitTimeout = DateTime.Now.AddSeconds(3); + while (wait) + { + wait = DateTime.Now < waitTimeout; + if (wait) + { + switch ((@event as SCChip_TakeCupEvent).Cup) + { + case IC_CUP.CUP_ICECREAM: + wait = !(bool)status["CompletedTake_CPU_CUP_ICECREAM"]; + break; + case IC_CUP.CUP_COFFEE: + wait = !(bool)status["CompletedTake_CPU_CUP_COFFEE"]; + break; + } + } + Thread.Sleep(10); + } + } + catch (Exception ex) + { + MessageLog.GetInstance.ShowEx($"BPASmartClient.SCChip 中引发错误,ICChipMachine 类,描述:[{ex.Message}]"); + } + }); //STM32F103RCT6单片机舵机打料 - EventBus.EventBus.GetInstance().Subscribe(DeviceId,delegate (IEvent @event,EventCallBackHandle callBack) - { - try - { - switch ((IC_SE)(@event as SCChip_MakeIceCreamEvent).SteeringEngine) - { - case IC_SE.SE_1: - status["CompletedOpen_SE_1"] = false; - break; - case IC_SE.SE_2: - status["CompletedOpen_SE_2"] = false; - break; - case IC_SE.SE_3: - status["CompletedOpen_SE_3"] = false; - break; - } - package.Cmd = IC_CMD.OPEN_SE; - package.Value = (byte)(@event as SCChip_MakeIceCreamEvent).SteeringEngine; - commProxy.SendData(StructureToByte(package)); + EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) + { + try + { + switch ((IC_SE)(@event as SCChip_MakeIceCreamEvent).SteeringEngine) + { + case IC_SE.SE_1: + status["CompletedOpen_SE_1"] = false; + break; + case IC_SE.SE_2: + status["CompletedOpen_SE_2"] = false; + break; + case IC_SE.SE_3: + status["CompletedOpen_SE_3"] = false; + break; + } + package.Cmd = IC_CMD.OPEN_SE; + package.Value = (byte)(@event as SCChip_MakeIceCreamEvent).SteeringEngine; + commProxy.SendData(StructureToByte(package)); - bool wait = true; - DateTime waitTimeout = DateTime.Now.AddSeconds(3); - while (wait) - { - wait = DateTime.Now < waitTimeout; - if (wait) - { - switch ((IC_SE)(@event as SCChip_MakeIceCreamEvent).SteeringEngine) - { - case IC_SE.SE_1: - wait = !(bool)status["CompletedOpen_SE_1"]; - break; - case IC_SE.SE_2: - wait = !(bool)status["CompletedOpen_SE_2"]; - break; - case IC_SE.SE_3: - wait = !(bool)status["CompletedOpen_SE_3"]; - break; - } - } - Thread.Sleep(10); - } - Thread.Sleep(2000); - package.Cmd = IC_CMD.CLOSE_SE; - package.Value = (byte)(@event as SCChip_MakeIceCreamEvent).SteeringEngine; - commProxy.SendData(StructureToByte(package)); + bool wait = true; + DateTime waitTimeout = DateTime.Now.AddSeconds(3); + while (wait) + { + wait = DateTime.Now < waitTimeout; + if (wait) + { + switch ((IC_SE)(@event as SCChip_MakeIceCreamEvent).SteeringEngine) + { + case IC_SE.SE_1: + wait = !(bool)status["CompletedOpen_SE_1"]; + break; + case IC_SE.SE_2: + wait = !(bool)status["CompletedOpen_SE_2"]; + break; + case IC_SE.SE_3: + wait = !(bool)status["CompletedOpen_SE_3"]; + break; + } + } + Thread.Sleep(10); + } + Thread.Sleep(2000); + package.Cmd = IC_CMD.CLOSE_SE; + package.Value = (byte)(@event as SCChip_MakeIceCreamEvent).SteeringEngine; + commProxy.SendData(StructureToByte(package)); - wait = true; - waitTimeout = DateTime.Now.AddSeconds(3); - while (wait) - { - wait = DateTime.Now < waitTimeout; - if (wait) - { - switch ((IC_SE)(@event as SCChip_MakeIceCreamEvent).SteeringEngine) - { - case IC_SE.SE_1: - wait = !(bool)status["CompletedClose_SE_1"]; - break; - case IC_SE.SE_2: - wait = !(bool)status["CompletedClose_SE_2"]; - break; - case IC_SE.SE_3: - wait = !(bool)status["CompletedClose_SE_3"]; - break; - } - } - Thread.Sleep(10); - } - } - catch (Exception ex) - { - MessageLog.GetInstance.ShowEx($"BPASmartClient.SCChip 中引发错误,ICChipMachine 类,描述:[{ex.Message}]"); - } - }); + wait = true; + waitTimeout = DateTime.Now.AddSeconds(3); + while (wait) + { + wait = DateTime.Now < waitTimeout; + if (wait) + { + switch ((IC_SE)(@event as SCChip_MakeIceCreamEvent).SteeringEngine) + { + case IC_SE.SE_1: + wait = !(bool)status["CompletedClose_SE_1"]; + break; + case IC_SE.SE_2: + wait = !(bool)status["CompletedClose_SE_2"]; + break; + case IC_SE.SE_3: + wait = !(bool)status["CompletedClose_SE_3"]; + break; + } + } + Thread.Sleep(10); + } + } + catch (Exception ex) + { + MessageLog.GetInstance.ShowEx($"BPASmartClient.SCChip 中引发错误,ICChipMachine 类,描述:[{ex.Message}]"); + } + }); //STM32F103RCT6单片机舵机打开或者关闭 - EventBus.EventBus.GetInstance().Subscribe(DeviceId,delegate (IEvent @event,EventCallBackHandle callBack) - { - try - { - package.Cmd = (@event as SCChip_SESwitchCreamEvent).IsOpen ? IC_CMD.OPEN_SE : IC_CMD.CLOSE_SE; - package.Value = (byte)(@event as SCChip_SESwitchCreamEvent).SteeringEngine; - commProxy.SendData(StructureToByte(package)); - } - catch (Exception ex) - { - MessageLog.GetInstance.ShowEx($"BPASmartClient.SCChip 中引发错误,ICChipMachine 类,描述:[{ex.Message}]"); - } - }); + EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) + { + try + { + package.Cmd = (@event as SCChip_SESwitchCreamEvent).IsOpen ? IC_CMD.OPEN_SE : IC_CMD.CLOSE_SE; + package.Value = (byte)(@event as SCChip_SESwitchCreamEvent).SteeringEngine; + commProxy.SendData(StructureToByte(package)); + } + catch (Exception ex) + { + MessageLog.GetInstance.ShowEx($"BPASmartClient.SCChip 中引发错误,ICChipMachine 类,描述:[{ex.Message}]"); + } + }); //STM32F103RCT6单片机控制冰淇淋机器转 - EventBus.EventBus.GetInstance().Subscribe(DeviceId,delegate (IEvent @event,EventCallBackHandle callBack) - { - try - { - package.Cmd = IC_CMD.ROTOR; - package.Value = (@event as SCChip_RotorSwitchEvent).TurnOn ? (byte)IC_ROTOR.OPEN_ROTOR : (byte)IC_ROTOR.CLOSE_ROTOR; - commProxy.SendData(StructureToByte(package)); - } - catch (Exception ex) - { - MessageLog.GetInstance.ShowEx($"BPASmartClient.SCChip 中引发错误,ICChipMachine 类,描述:[{ex.Message}]"); - } - }); + EventBus.EventBus.GetInstance().Subscribe(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack) + { + try + { + package.Cmd = IC_CMD.ROTOR; + package.Value = (@event as SCChip_RotorSwitchEvent).TurnOn ? (byte)IC_ROTOR.OPEN_ROTOR : (byte)IC_ROTOR.CLOSE_ROTOR; + commProxy.SendData(StructureToByte(package)); + } + catch (Exception ex) + { + MessageLog.GetInstance.ShowEx($"BPASmartClient.SCChip 中引发错误,ICChipMachine 类,描述:[{ex.Message}]"); + } + }); InitStatus(); //测试 Start(); } + + public override void WriteData(string address, object value) + { + } } }