BeckhoffStationLocationManager.cs 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using Aitex.Common.Util;
  2. using Aitex.Core.RT.DataCenter;
  3. using Aitex.Core.RT.OperationCenter;
  4. using Aitex.Core.RT.SCCore;
  5. using Aitex.Core.Util;
  6. using MECF.Framework.Common.Beckhoff.Station;
  7. using CyberX8_Core;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. namespace MECF.Framework.Common.Beckhoff.Station
  15. {
  16. public class BeckhoffStationLocationManager : Singleton<BeckhoffStationLocationManager>
  17. {
  18. private Dictionary<string, BeckhoffStationAxis> _stationAxisDic = new Dictionary<string, BeckhoffStationAxis>();
  19. private Dictionary<string, Station> _stationDic = new Dictionary<string, Station>();
  20. private StationPositionCfg _stationCfg;
  21. private string _xmlPath;
  22. /// <summary>
  23. /// 初始化
  24. /// </summary>
  25. public void Initialize()
  26. {
  27. string xmlPath = PathManager.GetCfgDir() + "Station\\StationPositionsCfg.xml";
  28. if (SC.GetValue<bool>("System.IsSimulatorMode"))
  29. {
  30. xmlPath = PathManager.GetCfgDir() + "Station\\StationPositionsCfg_Simulator.xml";
  31. }
  32. _stationCfg = CustomXmlSerializer.Deserialize<StationPositionCfg>(new FileInfo(xmlPath));
  33. _xmlPath = xmlPath;
  34. for (int i = 0; i < _stationCfg.Module.Count; i++)
  35. {
  36. BeckhoffStationModule stationModule = _stationCfg.Module[i];
  37. for (int j = 0; j < stationModule.Axises.Count; j++)
  38. {
  39. BeckhoffStationAxis stationAxis = stationModule.Axises[j];
  40. string name = string.IsNullOrEmpty(stationAxis.MaterialSize) ? stationAxis.Name : $"{stationAxis.Name}.{stationAxis.MaterialSize}";
  41. _stationAxisDic[$"{name}"] = stationAxis;
  42. DATA.Subscribe($"Station.{name}", () => stationAxis, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  43. InitialStation(stationAxis);
  44. }
  45. }
  46. }
  47. /// <summary>
  48. /// 初始化工位
  49. /// </summary>
  50. /// <param name="stationAxis"></param>
  51. private void InitialStation(BeckhoffStationAxis stationAxis)
  52. {
  53. foreach(Station item in stationAxis.Stations)
  54. {
  55. string name = string.IsNullOrEmpty(stationAxis.MaterialSize) ? stationAxis.Name : $"{stationAxis.Name}.{stationAxis.MaterialSize}";
  56. if (string.IsNullOrEmpty(stationAxis.MaterialSize))
  57. {
  58. _stationDic[item.Name] = item;
  59. }
  60. else
  61. {
  62. _stationDic[$"{item.Name}.{stationAxis.MaterialSize}"] = item;
  63. }
  64. }
  65. }
  66. /// <summary>
  67. /// 获取位置信息对象
  68. /// </summary>
  69. /// <param name="moduleName"></param>
  70. /// <param name="name"></param>
  71. /// <returns></returns>
  72. public BeckhoffStationAxis GetStationAxis(string moduleName, string name,int waferSize)
  73. {
  74. string strName = $"{moduleName}.{name}";
  75. string str = $"{moduleName}.{name}.{waferSize}";
  76. return _stationAxisDic.ContainsKey(str) ? _stationAxisDic[str] : (_stationAxisDic.ContainsKey(strName) ? _stationAxisDic[strName] : null);
  77. }
  78. /// <summary>
  79. /// 保存
  80. /// </summary>
  81. /// <param name="key"></param>
  82. /// <param name="position"></param>
  83. public void SaveMotionPosition(string key, double position)
  84. {
  85. if(_stationDic.ContainsKey(key))
  86. {
  87. _stationDic[key].Position = position.ToString();
  88. _stationDic[key].ModifiedDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
  89. CustomXmlSerializer.Serialize(_stationCfg, _xmlPath);
  90. }
  91. }
  92. }
  93. }