ScalingMamager.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using Aitex.Core.Util;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace MECF.Framework.Common.TwinCat
  8. {
  9. public class ScalingManager : Singleton<ScalingManager>
  10. {
  11. /// <summary>
  12. /// 字典
  13. /// </summary>
  14. private Dictionary<string, Scaling> _scalingDic = new Dictionary<string, Scaling>();
  15. /// <summary>
  16. /// 初始化
  17. /// </summary>
  18. /// <param name="name"></param>
  19. /// <param name="strScaling"></param>
  20. public void Initialize(string name,string strScaling)
  21. {
  22. if (!string.IsNullOrEmpty(strScaling))
  23. {
  24. string[] str = strScaling.Split(',');
  25. double x1 = 0, y1 = 0, x2 = 0, y2 = 0;
  26. if (str.Length == 2)
  27. {
  28. var result1 = Analyse(str[0]);
  29. if (result1.Item1)
  30. {
  31. x1 = result1.Item3;
  32. y1 = result1.Item2;
  33. }
  34. else
  35. {
  36. return;
  37. }
  38. var result2 = Analyse(str[1]);
  39. if (result2.Item1)
  40. {
  41. x2 = result2.Item3;
  42. y2 = result2.Item2;
  43. Scaling scaling = new Scaling(x1, x2, y1, y2);
  44. _scalingDic[name] = scaling;
  45. }
  46. }
  47. }
  48. }
  49. /// <summary>
  50. /// 解析
  51. /// </summary>
  52. /// <param name="str"></param>
  53. /// <returns></returns>
  54. private (bool,double,double) Analyse(string str)
  55. {
  56. string[] strOperator = str.Split('=');
  57. if (strOperator.Length == 2)
  58. {
  59. bool xResult = double.TryParse(strOperator[0],out var x);
  60. bool yResult = double.TryParse(strOperator[1],out var y);
  61. if (xResult && yResult)
  62. {
  63. return (true, x, y);
  64. }
  65. else
  66. {
  67. return (false, x, y);
  68. }
  69. }
  70. return (false,0,0);
  71. }
  72. /// <summary>
  73. /// 是否包含
  74. /// </summary>
  75. /// <param name="name"></param>
  76. /// <returns></returns>
  77. public bool IsContained(string name)
  78. {
  79. return _scalingDic.ContainsKey(name);
  80. }
  81. /// <summary>
  82. /// 通过Twincat数值计算
  83. /// </summary>
  84. /// <param name="name"></param>
  85. /// <param name="x"></param>
  86. /// <returns></returns>
  87. public (bool,double) CalculateValueByTwincatVariable(string name,double x)
  88. {
  89. if(_scalingDic.ContainsKey(name))
  90. {
  91. return (true, _scalingDic[name].CalculateYByX(x));
  92. }
  93. else
  94. {
  95. return (false, 0);
  96. }
  97. }
  98. /// <summary>
  99. /// 计算Twincat数值
  100. /// </summary>
  101. /// <param name="name"></param>
  102. /// <param name="y"></param>
  103. /// <returns></returns>
  104. public (bool,int) CalculateTwincatValueByInput(string name,double y)
  105. {
  106. if (_scalingDic.ContainsKey(name))
  107. {
  108. return (true, _scalingDic[name].CaculateXByY(y));
  109. }
  110. else
  111. {
  112. return (false, 0);
  113. }
  114. }
  115. }
  116. }