BeckhoffStationLocationManager.cs 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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)
  73. {
  74. string strName = $"{moduleName}.{name}";
  75. return _stationAxisDic.ContainsKey(strName) ? _stationAxisDic[strName] : null;
  76. }
  77. /// <summary>
  78. /// 保存
  79. /// </summary>
  80. /// <param name="key"></param>
  81. /// <param name="position"></param>
  82. public void SaveMotionPosition(string key, double position)
  83. {
  84. if(_stationDic.ContainsKey(key))
  85. {
  86. _stationDic[key].Position = position.ToString();
  87. _stationDic[key].ModifiedDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
  88. CustomXmlSerializer.Serialize(_stationCfg, _xmlPath);
  89. }
  90. }
  91. }
  92. }