| 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 _);        }    }}
 |