| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | using System;using System.Xml;using Aitex.Core.Common.DeviceData;using Aitex.Core.RT.DataCenter;using Aitex.Core.RT.Device;using Aitex.Core.RT.IOCore;using Aitex.Core.RT.Log;using Aitex.Core.Util;namespace VirgoRT.Devices{    public class IoTemperatureCtrl : BaseDevice, IDevice    {// Fields//         private readonly AOAccessor _aoSubstrate;        private readonly AIAccessor _aiCtrlTemp;        private readonly AIAccessor _aiMonitorTemp;// Properties//         public double SP        {            get { return null != _aoSubstrate ? _aoSubstrate.Value : 0; }            set { if (null != _aoSubstrate) _aoSubstrate.Value = (short)value; }        }        public double CtrlTemp        {            get { return null != _aiCtrlTemp ? _aiCtrlTemp.Value : 0; }        }        public double MonitorTemp        {            get { return null != _aiMonitorTemp ? _aiMonitorTemp.Value : 0; }        }// Constructor//         public IoTemperatureCtrl(string module, XmlElement node, string ioModule = "")        {            base.Module    = module;            base.Name      = node.GetAttribute("id");            base.Display   = node.GetAttribute("display");            base.DeviceID  = node.GetAttribute("schematicId");            _aoSubstrate   = ParseAoNode("aoSetpoint", node, ioModule);            _aiCtrlTemp    = ParseAiNode("aiCtrlFB", node, ioModule);            _aiMonitorTemp = ParseAiNode("aiMonitorFB", node, ioModule);            //_scEnableLeftTcAsControlTc = ParseScNodeBool("scEnalbeLeftTcAsControlTc", node);            //_scMaxDifferenceTcValue = ParseScNodeDouble("scElectrodeTcDifferenceMaxValue", node);            //_scManualProcessElectrodeCriticalTemperature = ParseScNodeDouble("scManualProcessElectrodeCriticalTemperature", node);            //_leftTc = ParseDeviceNode<IoThermalCouple>("deviceLeftElectrodeTc", node);            //_rightTc = ParseDeviceNode<IoThermalCouple>("deviceRightElectrodeTc", node);            //_valveElectrodeWater = ParseDeviceNode<IoValve>("deviceElectrodeWaterValve", node);            //_diLogicIsRfPoweringHeatupMode = ParseDiNode("diLogicIsRfPoweringHeatupMode", node);            //_diLogicManualProcessRfPowering = ParseDiNode("diLogicManualProcessRfPowering", node);        }        public bool Initialize()        {            //DATA.Subscribe(string.Format("{0}.IoTemperatureCtrl.{1}.SubstrateTemperature", Module, Name),            //    () => MonitorTemp);            DATA.Subscribe(string.Format("Device.{0}.{1}", Module, Name), () =>            {                AITHeaterData data = new AITHeaterData()                {                    DeviceName = Name,                    DeviceSchematicId = DeviceID,                    DisplayName = Display,                    SetPoint = SP,                    FeedBack = CtrlTemp,                    MonitorTcFeedBack = MonitorTemp                };                return data;            }, SubscriptionAttribute.FLAG.IgnoreSaveDB);            DEVICE.Register(string.Format("{0}.{1}", Name, AITHeaterOperation.SetTemperature),                (out string reason, int time, object[] param) =>                {                    reason = "";                    double target = Convert.ToDouble((string)param[0]);                    SP = target;                    return true;                });            return true;        }        public void SetTemperature(double val)        {            this.SP = val;            LOG.Write("Temperature of substrate is set to " + val);        }        public void Terminate()        {        }        public void Monitor()        {        }        public void Reset()        {        }    }}
 |