using System; using System.Xml; using Aitex.Core.RT.IOCore; namespace Aitex.Core.RT.Device.Unit { public class IoPlcDateTime : BaseDevice, IDevice { private AIAccessor _aiYear; private AIAccessor _aiMonth; private AIAccessor _aiDay; private AIAccessor _aiHour; private AIAccessor _aiMinute; private AIAccessor _aiSecond; public const int YEAR_OFFSET = 2000; public DateTime CurrentDateTime { get { if (Year == 0 && Month == 0 && Day == 0 && Hour == 0 && Minute == 0 && Second == 0) return DateTime.Now; return new DateTime(Year, Month, Day, Hour, Minute, Second); } } public bool IsValid { get { return !(Year == -1 || Month == -1 || -1 == Day || -1 == Hour || -1 == Minute || -1 == Second); } } public int Year { get { int res = -1; if (_aiYear != null) { float a = (_aiYear.Value > 0 && _aiYear.Value < 100) ? (_aiYear.Value + YEAR_OFFSET) : _aiYear.Value; res = (int)a; } return res; } } public int Month => _aiMonth == null ? -1 : (int)_aiMonth.Value; public int Day => _aiDay == null ? -1 : (int)_aiDay.Value; public int Hour => _aiHour == null ? -1 : (int)_aiHour.Value; public int Minute => _aiMinute == null ? -1 : (int)_aiMinute.Value; public int Second => _aiSecond == null ? -1 : (int)_aiSecond.Value; public IoPlcDateTime(string module, XmlElement node) { base.Module = module; base.Name = node.GetAttribute("id"); base.Display = node.GetAttribute("display"); base.DeviceID = node.GetAttribute("schematicId"); _aiYear = ParseAiNode("aiYear", node); _aiMonth = ParseAiNode("aiMonth", node); _aiDay = ParseAiNode("aiDay", node); _aiHour = ParseAiNode("aiHour", node); _aiMinute = ParseAiNode("aiMinute", node); _aiSecond = ParseAiNode("aiSecond", node); } public bool Initialize() { return true;} public void Terminate() { } public void Monitor() { } public void Reset() { } } }