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 { private Dictionary _stationAxisDic = new Dictionary(); private Dictionary _stationDic = new Dictionary(); private StationPositionCfg _stationCfg; private string _xmlPath; /// /// 初始化 /// public void Initialize() { string xmlPath = PathManager.GetCfgDir() + "Station\\StationPositionsCfg.xml"; if (SC.GetValue("System.IsSimulatorMode")) { xmlPath = PathManager.GetCfgDir() + "Station\\StationPositionsCfg_Simulator.xml"; } _stationCfg = CustomXmlSerializer.Deserialize(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); } } } /// /// 初始化工位 /// /// 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; } } } /// /// 获取位置信息对象 /// /// /// /// 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); } /// /// 保存 /// /// /// 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); } } } }