| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | using Aitex.Core.RT.Event;using Aitex.Core.RT.SCCore;using Aitex.Core.Util;using DocumentFormat.OpenXml.Wordprocessing;using FurnaceRT.Devices;using FurnaceRT.Equipments.PMs;using FurnaceRT.Equipments.Systems;using MECF.Framework.Common.Equipment;using MECF.Framework.Common.Event;using MECF.Framework.Common.Extens;using MECF.Framework.UI.Client.CenterViews.Editors.Recipe;using RTCommunicatorBase;using RTCommunicatorTLV;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace FurnaceRT.Extraction{    public class MinicsManager : Singleton<MinicsManager>, IRTMini8Provider    {        private readonly object _lock = new object();        public void Connected(string ip, int port)        {            Console.WriteLine($"DisconnectedNotify {ip} {port}");        }        public void DisConnected(string ip, int port)        {            Console.WriteLine($"DisconnectedNotify {ip} {port}");        }        private RTCommunicator_TLV communicator = new RTCommunicator_TLV();        public void Initialize(string ip = "127.0.0.1", int port = 50052)        {                  communicator.Initialize(this);            SWJConnectedMinics(ip, port);            IninHeaterBand();        }        public void SWJConnectedMinics(string ip, int port)        {            if (communicator.StartService(ip, port))            {                EV.PostInfoLog(ModuleName.Minics.ToString(), $"minics  Connected {ip}:{port} sucessful");            }            else            {                for (int i = 1; i <= 3; i++)                {                    var status = this.communicator.StartService(ip, port);                    try                    {                        if (status)                            break;                    }                    catch                    {                        if (i == 3)                            return;                        Thread.Sleep(300);                        EV.PostWarningLog(ModuleName.Minics.ToString(), $"retry minics  Connected {ip}:{port} error {i} times");                    }                }            }        }        public void End()        {        }        public void SelectMinicsConfig(string minicsConfigName)        {            bool result = communicator.SelectConfigFile(minicsConfigName);            if (!result)            {                EV.PostWarningLog(ModuleName.Minics.ToString(), $"SendMinicsConfig {minicsConfigName} fail!");            }        }        public Dictionary<string, Tuple<AlarmEventItem, AlarmEventItem, AlarmEventItem>> MinicsAlarmDic { get; set; } = new Dictionary<string, Tuple<AlarmEventItem, AlarmEventItem, AlarmEventItem>>();        public Dictionary<string, MincsHeaterBand> mincsHeaterBandsDict { get; set; } = new Dictionary<string, MincsHeaterBand>();        public void IninHeaterBand()        {            var pm = Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule;            for (int i = 1; i < 9; i++)            {                for (int j = 1; j < 17; j++)                {                    var item = new MincsHeaterBand() { Name = $"{i}_{j}" };                    item.Initialize();                    mincsHeaterBandsDict.TryAddValue(item.Name, item);                }            }        }        public void CurrentTempConfigFile(string fileName)        {        }        public void Mini8ConnectNotify(byte mini8Index)        {            var pm = Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule;            pm.Mini8ConnectAlarm.Reset();        }        public void Mini8DisconnectNotify(byte mini8)        {            var pm = Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule;            pm.Mini8ConnectAlarm.Set();        }        public void ChannelAlarmNotify(ST_ALARM_Notify alarm)        {            var gasLineHeaterIndex = $"{alarm.Mini8Index}_{alarm.ChannelIndex}";            var pm = Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule;            lock (_lock)            {                string message;                switch (alarm.AlarmType)                {                    case RTCommunicatorBase.AlarmType.CapsOverFlow:                        message = $"Unit{alarm.Mini8Index}CH{alarm.ChannelIndex} Feedback:{alarm.PV} limit is ({alarm.Caps}~{alarm.Floor}) ";                        var alarmEvent = alarm.HeaterType == HeaterType.GaseLine ? pm.GasLineOverTempAlarm : pm.ForLineOverTempAlarm;                        alarmEvent.Set(message);                        break;                    case RTCommunicatorBase.AlarmType.FloorOverFlow:                        message = $"Unit{alarm.Mini8Index}CH{alarm.ChannelIndex} Feedback:{alarm.PV} limit is ({alarm.Caps}~{alarm.Floor}) ";                        alarmEvent = alarm.HeaterType == HeaterType.GaseLine ? pm.GasLineOverTempAlarm : pm.ForLineOverTempAlarm;                        alarmEvent.Set(message);                        break;                    case RTCommunicatorBase.AlarmType.TcBroken:                        message = $"Unit{alarm.Mini8Index}CH{alarm.ChannelIndex} is TcBroken";                        alarmEvent = alarm.HeaterType == HeaterType.GaseLine ? pm.GasLineOverTempAlarm : pm.ForLineOverTempAlarm;                        alarmEvent.Set(message);                        break;                    default:                        // Handle other cases or log an error                        break;                }            }        }        public void ChannelRealtimeNotify(ST_CHANNEL_Notify channel)        {            foreach (var item in mincsHeaterBandsDict)            {                var itemKey = $"{channel.Mini8Index}_{channel.ChannelIndex}";                if (itemKey != item.Key)                    continue;                item.Value.TempFeedback = channel.PV;                item.Value.Power = channel.WorkingOutput;            }        }    }}
 |