123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- using Aitex.Core.Common.DeviceData;
- using Aitex.Core.RT.DataCenter;
- using Aitex.Core.RT.Device;
- using Aitex.Core.RT.IOCore;
- using Aitex.Core.RT.SCCore;
- using Aitex.Core.Util;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Threading.Tasks;
- using System.Xml;
- namespace Venus_RT.Devices.IODevices
- {
-
- public class IoHongHuControl : BaseDevice, IDevice
- {
- private bool _lastValue;
- //WriteMode分为两种模式 一种是Flow模式 一种是控压模式
- private SCConfigItem _scWriteMode;
- private SCConfigItem _scTargetMFC;
- private SCConfigItem _scTargetPressure;
- private readonly DOAccessor _FlowMode;
- private readonly DOAccessor _PressureMode;
- private readonly AOAccessor _MFCSetPoint;
- private readonly AOAccessor _PressureSetPoint;
- private bool _IsProcessControl
- {
- get
- {
- if (!_FlowMode.Value && _PressureMode.Value)
- return true;
- else if (_FlowMode.Value && !_PressureMode.Value)
- return false;
- else
- return false;
- }
- }
- public bool IsProcessControl => _IsProcessControl;
- public IoHongHuControl(string module, XmlElement node, string ioModule = "")
- {
- base.Module = module;
- base.Name = node.GetAttribute("id");
- base.Display = node.GetAttribute("display");
- base.DeviceID = node.GetAttribute("schematicId");
- _scWriteMode = SC.GetConfigItem($"{Module}.{Name}.ControlWriteMode");
- _scTargetMFC = SC.GetConfigItem($"{Module}.{Name}.TargetMFC");
- _scTargetPressure = SC.GetConfigItem($"{Module}.{Name}.TargetPressure");
- _FlowMode = ParseDoNode("doMFCFlow", node, ioModule);
- _PressureMode = ParseDoNode("doPressureMode", node, ioModule);
- _MFCSetPoint = ParseAoNode("aoMFCFlow", node, ioModule);
- _PressureSetPoint = ParseAoNode("aoPressure", node, ioModule);
- }
- //
- public bool Initialize()
- {
- DATA.Subscribe($"{Module}.{Name}.IsControlPressure", () => IsProcessControl, SubscriptionAttribute.FLAG.IgnoreSaveDB);
- Reset();
- return true;
- }
- public void Monitor()
- {
- //如果是true MFC模式
- if (_scWriteMode.BoolValue)
- {
- if(_FlowMode != null && _FlowMode.Value !=true)
- _FlowMode.SetValue(true,out string _);
- if (_PressureMode != null && _PressureMode.Value != false)
- _PressureMode.SetValue(false,out _);
- if (_MFCSetPoint != null)
- {
- byte[] flow;
- flow = BitConverter.GetBytes(float.Parse(_scTargetMFC.Value.ToString()));
- _MFCSetPoint.Buffer[_MFCSetPoint.Index] = BitConverter.ToInt16(flow, 0);
- _MFCSetPoint.Buffer[_MFCSetPoint.Index + 1] = BitConverter.ToInt16(flow, 2);
- }
- //if (_lastValue != _scWriteMode.BoolValue)
- //{
- // if (_ventvalve != null && _ventvalve.Value != false)
- // _ventvalve.SetValue(false, out _);
- // if (_pumpvalve != null && _pumpvalve.Value != false)
- // _pumpvalve.SetValue(false, out _);
- //}
- }
- else
- {
- if (_FlowMode != null && _FlowMode.Value != false)
- _FlowMode.SetValue(false, out string _);
- if (_PressureMode != null && _PressureMode.Value != true)
- _PressureMode.SetValue(true, out string _);
- if (_PressureSetPoint != null )
- {
- byte[] pressure;
- pressure = BitConverter.GetBytes(float.Parse(_scTargetPressure.Value.ToString()));
- _PressureSetPoint.Buffer[_PressureSetPoint.Index] = BitConverter.ToInt16(pressure, 0);
- _PressureSetPoint.Buffer[_PressureSetPoint.Index + 1] = BitConverter.ToInt16(pressure, 2);
- }
- //if (_lastValue != _scWriteMode.BoolValue)
- //{
- // if (_ventvalve != null && _ventvalve.Value != true)
- // _ventvalve.SetValue(true, out _);
- // if (_pumpvalve != null && _pumpvalve.Value != true)
- // _pumpvalve.SetValue(true, out _);
- //}
- }
- _lastValue = _scWriteMode.BoolValue;
- }
- public void SetMode(bool bCtrl)
- {
- if (bCtrl && _scWriteMode.BoolValue)
- SC.SetItemValue($"{Module}.PressureControl.ControlWriteMode", false);
- if(!bCtrl && !_scWriteMode.BoolValue)
- SC.SetItemValue($"{Module}.PressureControl.ControlWriteMode", true);
- }
- public void Reset()
- {
- if (_FlowMode != null && _FlowMode.Value != true)
- _FlowMode.SetValue(true, out string _);
- if (_PressureMode != null && _PressureMode.Value != false)
- _PressureMode.SetValue(false, out _);
- if (_MFCSetPoint != null)
- {
- byte[] flow;
- flow = BitConverter.GetBytes(float.Parse("0"));
- _MFCSetPoint.Buffer[_MFCSetPoint.Index] = BitConverter.ToInt16(flow, 0);
- _MFCSetPoint.Buffer[_MFCSetPoint.Index + 1] = BitConverter.ToInt16(flow, 2);
- }
- //if (_ventvalve != null && _ventvalve.Value != false)
- // _ventvalve.SetValue(false, out _);
- //if (_pumpvalve != null && _pumpvalve.Value != false)
- // _pumpvalve.SetValue(false, out _);
- }
- public void Terminate()
- {
- if (_FlowMode != null && _FlowMode.Value != true)
- _FlowMode.SetValue(true, out string _);
- if (_PressureMode != null && _PressureMode.Value != false)
- _PressureMode.SetValue(false, out _);
- if (_MFCSetPoint != null)
- {
- byte[] flow;
- flow = BitConverter.GetBytes(float.Parse("0"));
- _MFCSetPoint.Buffer[_MFCSetPoint.Index] = BitConverter.ToInt16(flow, 0);
- _MFCSetPoint.Buffer[_MFCSetPoint.Index + 1] = BitConverter.ToInt16(flow, 2);
- }
- //if (_ventvalve != null && _ventvalve.Value != false)
- // _ventvalve.SetValue(false, out _);
- //if (_pumpvalve != null && _pumpvalve.Value != false)
- // _pumpvalve.SetValue(false, out _);
- }
- }
- }
|