| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 | using Aitex.Common.Util;using Aitex.Core.RT.DataCenter;using Aitex.Core.RT.OperationCenter;using Aitex.Core.RT.SCCore;using Aitex.Core.Util;using MECF.Framework.Common.Beckhoff.Station;using CyberX8_Core;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MECF.Framework.Common.Beckhoff.Station{    public class BeckhoffStationLocationManager : Singleton<BeckhoffStationLocationManager>    {        private Dictionary<string, BeckhoffStationAxis> _stationAxisDic = new Dictionary<string, BeckhoffStationAxis>();        private Dictionary<string, Station> _stationDic = new Dictionary<string, Station>();        private StationPositionCfg _stationCfg;        private string _xmlPath;        /// <summary>        /// 初始化        /// </summary>        public void Initialize()        {            string xmlPath = PathManager.GetCfgDir() + "Station\\StationPositionsCfg.xml";            if (SC.GetValue<bool>("System.IsSimulatorMode"))            {                xmlPath = PathManager.GetCfgDir() + "Station\\StationPositionsCfg_Simulator.xml";            }            _stationCfg = CustomXmlSerializer.Deserialize<StationPositionCfg>(new FileInfo(xmlPath));            _xmlPath = xmlPath;            for (int i = 0; i < _stationCfg.Module.Count; i++)            {                BeckhoffStationModule stationModule = _stationCfg.Module[i];                for (int j = 0; j < stationModule.Axises.Count; j++)                {                    BeckhoffStationAxis stationAxis = stationModule.Axises[j];                    string name = string.IsNullOrEmpty(stationAxis.MaterialSize) ? stationAxis.Name : $"{stationAxis.Name}.{stationAxis.MaterialSize}";                    _stationAxisDic[$"{name}"] = stationAxis;                    DATA.Subscribe($"Station.{name}", () => stationAxis, SubscriptionAttribute.FLAG.IgnoreSaveDB);                    InitialStation(stationAxis);                }            }        }        /// <summary>        /// 初始化工位        /// </summary>        /// <param name="stationAxis"></param>        private void InitialStation(BeckhoffStationAxis stationAxis)        {            foreach(Station item in stationAxis.Stations)            {                string name = string.IsNullOrEmpty(stationAxis.MaterialSize) ? stationAxis.Name : $"{stationAxis.Name}.{stationAxis.MaterialSize}";                if (string.IsNullOrEmpty(stationAxis.MaterialSize))                {                    _stationDic[item.Name] = item;                }                else                {                    _stationDic[$"{item.Name}.{stationAxis.MaterialSize}"] = item;                }            }        }        /// <summary>        /// 获取位置信息对象        /// </summary>        /// <param name="moduleName"></param>        /// <param name="name"></param>        /// <returns></returns>        public BeckhoffStationAxis GetStationAxis(string moduleName, string name,int waferSize)        {            string strName = $"{moduleName}.{name}";            string str = $"{moduleName}.{name}.{waferSize}";            return _stationAxisDic.ContainsKey(str) ? _stationAxisDic[str] : (_stationAxisDic.ContainsKey(strName) ? _stationAxisDic[strName] : null);        }        /// <summary>        /// 保存        /// </summary>        /// <param name="key"></param>        /// <param name="position"></param>        public void SaveMotionPosition(string key, double position)        {            if(_stationDic.ContainsKey(key))            {                _stationDic[key].Position =  position.ToString();                _stationDic[key].ModifiedDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");                CustomXmlSerializer.Serialize(_stationCfg, _xmlPath);            }        }    }}
 |