| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- using System;
- using System.Linq;
- using SHJX.Service.Model.Dao;
- using SHJX.Service.Control.Modules;
- using SHJX.Service.Control.Interface;
- using SHJX.Service.Common.ReadXML;
- namespace SHJX.Service.Control.Route.RouteController
- {
- /// <summary>
- /// 加液
- /// </summary>
- /// 重铬酸钾
- public class SampleAL2Operate : FlowControlOperateImp
- {
- private string _opName;
- private double _dropAmount;
- private DropLiquid _liquid;
- private EquipmentTask _task;
- public virtual bool Operate(ReadConfigUtil config, DataEventArgs data)
- {
- _task = data.Task;
- _liquid = data.DataManager.QueryLiquid("PotassiumDichromate");
- if (!_liquid.Enable) return true;
- var res = _task.RouteType switch
- {
- "Wash" => WashLiquid(),
- _ => OtherAddLiquid(),
- };
- return res;
- }
- /// <summary>
- /// 清洗 && 润洗
- /// </summary>
- /// <returns></returns>
- private bool WashLiquid()
- {
- string[] types = new string[] { "PotassiumDichromate_Low", "PotassiumDichromate_High" };
- bool res = false;
- foreach (var item in types)
- {
- DataCentre.GetPumpContent.Factory(item).GoBackOriginalPosition("Out");
- var value = _task.TaskType switch
- {
- "润洗" => _liquid.WashVolume,
- "清洗" => _liquid.ClearVolume,
- _ => throw new ArgumentNullException(_task.TaskType),
- };
- var DropOnceAmount = DataCentre.GetConfig.DropOnceAmounts.FirstOrDefault(item => item.Name.Equals("PotassiumDichromate"));
- double dropAmount = item switch
- {
- "PotassiumDichromate_Low" => DropOnceAmount.LowValue,
- "PotassiumDichromate_High" => DropOnceAmount.HighValue,
- _ => throw new ArgumentNullException(_task.TaskType),
- };
- res = DataCentre.GetPumpContent.Factory(item).LiquidOperation("In", Convert.ToInt64(Math.Round(value / dropAmount * 20000 * -1)));
- res = res && DataCentre.GetPumpContent.Factory(item).LiquidOperation("Out", Convert.ToInt64(Math.Round(value / dropAmount * 20000)));
- LiquidTotal liquid = DataCentre._dataManager.Query<LiquidTotal>().Where(it => it.LiquidName.Equals(item)).First();
- liquid.Total -= 5; //重铬酸钾减5毫升
- res = res && DataCentre._dataManager.Update<LiquidTotal>(liquid) > 0;
- }
- return res;
- }
- /// <summary>
- /// 其他加液
- /// </summary>
- /// <returns></returns>
- private bool OtherAddLiquid()
- {
- GetOpName();
- DataCentre.GetPumpContent.Factory(_opName).GoBackOriginalPosition("In");
- var arriveEndpoint = DataCentre.GetPumpContent.Factory(_opName).ArriveEndPoint();
- if (arriveEndpoint) DataCentre.GetPumpContent.Factory(_opName).LiquidOperation("In", Convert.ToInt64(Math.Round(_liquid.SampleVolume / _dropAmount * 20000 * -1)));
- var res = DataCentre.GetPumpContent.Factory(_opName).LiquidOperation("Out", Convert.ToInt64(Math.Round((_liquid.SampleVolume / _dropAmount) * 20000)));
- LiquidTotal liquid = DataCentre._dataManager.Query<LiquidTotal>().Where(it => it.LiquidName.Equals(_opName)).First();
- liquid.Total -= 5; //重铬酸钾减5毫升
- res = res && DataCentre._dataManager.Update<LiquidTotal>(liquid) > 0;
- return res;
- }
- private void GetOpName()
- {
- (_opName, _dropAmount) = _task.SampleConcentration switch
- {
- "Low" => ("PotassiumDichromate_Low", DataCentre.GetConfig.DropOnceAmounts.FirstOrDefault(item => item.Name.Equals("PotassiumDichromate")).LowValue),
- "High" => ("PotassiumDichromate_High", DataCentre.GetConfig.DropOnceAmounts.FirstOrDefault(item => item.Name.Equals("PotassiumDichromate")).HighValue),
- _ => throw new ArgumentNullException(_task.SampleConcentration),
- };
- }
- }
- }
|