| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- using SHJX.Service.Control.Common.Assets;
- namespace SHJX.Service.Control.LiquidHandler.Handler.NormalLiquidHandler
- {
- public class AddLiquidPotassiumPermanganateNormalLiquidHandler : INormalLiquid
- {
- public bool Execute(Action<object> action = null, params object[] args)
- {
- bool locker;
- do
- {
- StateMachine state = DataManagerInstance.QueryStateMachine(StateMachineName.POTASSIUM2PERMANGANATE_LOCK);
- locker = state.Status > 0;
- } while (locker);
- DataManagerInstance.IncreaseLock(StateMachineName.POTASSIUM2PERMANGANATE_LOCK);
- LiquidVolume liquidVolume = DataManagerInstance.GetLiquidVolume(EquipmentNames.Titration2PotassiumPermanganate);
- if (liquidVolume is null)
- {
- throw new ArgumentException($"{EquipmentNames.Titration2PotassiumPermanganate}查询Volume为空");
- }
- if (!liquidVolume.Enable)
- {
- return true;
- }
- LiquidAmount liquidAmount = DataManagerInstance.GetLiquidAmount(EquipmentNames.Titration2PotassiumPermanganate);
- if (liquidAmount is null)
- {
- throw new ArgumentException($"{EquipmentNames.Titration2PotassiumPermanganate}查询Amount为空");
- }
- int distance;
- bool writeResponse = true;
- double count = Math.Floor(liquidVolume.SampleVolume / liquidAmount.Capacity);
-
- #region
- //自动吸液代码
- distance = Convert.ToInt32(Math.Round(liquidAmount.Capacity / liquidAmount.Amount * liquidAmount.ConvertRatio));
- bool arriveEndPoint = LiquidPipeSwitch.StartNew.SetLiquidName(EquipmentNames.Titration2PotassiumPermanganate).IsArriveEndPoint;
- if (ConfigInstance.IsAutomaticInLiquid && !arriveEndPoint)
- {
- writeResponse = writeResponse && LiquidPipeSwitch.StartNew.SetLiquidName(EquipmentNames.Titration2PotassiumPermanganate).Execute(LiquidSwitchPattern.Out, distance);
- }
- else
- {
- writeResponse = writeResponse && LiquidPipeSwitch.StartNew.SetLiquidName(EquipmentNames.Titration2PotassiumPermanganate).CheckWhetherArriveEndPoint().Execute(distance);
- }
- //自动吸液代码
- #endregion
- for (int i = 1; i < count; i++)//上面出液一次所以i是从1开始
- {
- distance = Convert.ToInt32(Math.Round(liquidAmount.Capacity / liquidAmount.Amount * liquidAmount.ConvertRatio));
- writeResponse = writeResponse && LiquidPipeSwitch.StartNew.SetLiquidName(EquipmentNames.Titration2PotassiumPermanganate).CheckWhetherArriveEndPoint().Execute(distance);
- }
- double residue = liquidVolume.SampleVolume % liquidAmount.Capacity;
- if (residue > 0)
- {
- distance = Convert.ToInt32(Math.Round(residue / liquidAmount.Amount * liquidAmount.ConvertRatio));
- writeResponse = writeResponse && LiquidPipeSwitch.StartNew.SetLiquidName(EquipmentNames.Titration2PotassiumPermanganate).CheckWhetherArriveEndPoint().Execute(distance);
- }
- //Todo:这里做液体扣减
- DataManagerInstance.DecreaseLiquidTotal("PotassiumPermanganate", liquidVolume.SampleVolume);
- DataManagerInstance.DecreaseLiquidReserve("PotassiumPermanganate");
- DataManagerInstance.DecreaseLock(StateMachineName.POTASSIUM2PERMANGANATE_LOCK);
- return writeResponse;
- }
- }
- }
|