// /************************************************************************ // * @file BaseRoutineWithDeviceLocker.cs // * @author Su Liang // * @date 2022/11/18 // * // * @copyright © Sicentury Inc. // * // * @brief // * // * @details // * // * // * *****************************************************************************/ using System; using Aitex.Core.RT.Event; using Aitex.Core.RT.Routine; using Sicentury.Core; namespace MECF.Framework.RT.EquipmentLibrary.Core { public class BaseRoutineWithDeviceLocker : ModuleRoutine { private readonly DeviceLocker _lockerPump2; public BaseRoutineWithDeviceLocker() { _lockerPump2 = DeviceLockerManager.Instance.GetLocker(DeviceLockerManager.LockerNames.Pump2); } public void LockPump2(out string reason, int timeoutMs = Int32.MaxValue) { reason = ""; var ret = _lockerPump2?.TryLock(Module, out reason, timeoutMs); if (ret.HasValue == false || ret == DeviceLocker.Results.Ok || ret == DeviceLocker.Results.IHaveLocker) // 不需要锁定、已锁定成功、或已占有该锁 return; // 无法锁定设备。 throw new Exception($"unable to lock {_lockerPump2.LockerName} by {Module}, {reason}"); } public void UnlockPump2() { var reason = ""; var ret = _lockerPump2?.TryUnlock(Module, out reason); if (ret.HasValue == false || ret == DeviceLocker.Results.Ok) // 不需要锁定、解锁成功 return; EV.PostWarningLog(Module, $"Unable to unlock pump2, {reason}"); } public void ResetLockerPump2() { _lockerPump2?.Reset(); } public virtual void Abort() { UnlockPump2(); } } }