| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | 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)        {            string strName = $"{moduleName}.{name}";            return _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);            }        }    }}
 |