Sic.Framework/MECF.Framework.RT.Equipment.../Unit/IoLift4.cs

92 lines
2.5 KiB
C#

using System.Xml;
using Aitex.Core.RT.DataCenter;
using Aitex.Core.RT.Event;
using Aitex.Core.RT.IOCore;
using Aitex.Core.RT.Log;
using Aitex.Core.RT.OperationCenter;
using Aitex.Core.Util;
namespace Aitex.Core.RT.Device.Unit
{
public class IoLift4 : BaseDevice, IDevice
{
private DIAccessor _diUp;
private DIAccessor _diDown;
private DOAccessor _doUp;
private DOAccessor _doDown;
public bool IsUp
{
get { return _diUp == null ? false : _diUp.Value; }
}
public bool IsDown
{
get { return _diDown == null ? false : _diDown.Value; }
}
public IoLift4(string module, XmlElement node, string ioModule = "")
{
base.Module = string.IsNullOrEmpty(node.GetAttribute("module")) ? module : node.GetAttribute("module");
base.Name = node.GetAttribute("id");
base.Display = node.GetAttribute("display");
base.DeviceID = node.GetAttribute("schematicId");
_diUp = ParseDiNode("diUp", node, ioModule);
_diDown = ParseDiNode("diDown", node, ioModule);
_doUp = ParseDoNode("doUp", node, ioModule);
_doDown = ParseDoNode("doDown", node, ioModule);
}
public bool Initialize()
{
DATA.Subscribe($"{Module}.{Name}.UpSensor", () => _diUp.Value);
DATA.Subscribe($"{Module}.{Name}.DownSensor", () => _diDown.Value);
DATA.Subscribe($"{Module}.{Name}.DoUp", () => _doUp.Value);
DATA.Subscribe($"{Module}.{Name}.DoDown", () => _doDown.Value);
OP.Subscribe($"{Module}.{Name}.MoveUp", (function, args) =>
{
return MoveUp(out string reason);
});
OP.Subscribe($"{Module}.{Name}.MoveDown", (function, args) =>
{
return MoveDown(out string reason);
});
return true;
}
public void Terminate()
{
}
public bool MoveUp(out string reason)
{
_doDown.SetValue(false, out reason);
_doUp.SetValue(true, out reason);
return true;
}
public bool MoveDown(out string reason)
{
_doDown.SetValue(true, out reason);
_doUp.SetValue(false, out reason);
return true;
}
public void Reset()
{
}
public void Monitor()
{
}
}
}