PageWindturbineAGC.xaml.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. using log4net;
  2. using NEIntelligentControl2.Models.Datas;
  3. using NEIntelligentControl2.Models.Messages;
  4. using NEIntelligentControl2.Models.Pages;
  5. using NEIntelligentControl2.Models.Windturbine;
  6. using NEIntelligentControl2.Service.WebSocket;
  7. using NEIntelligentControl2.Views.Matrix;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Configuration;
  11. using System.Linq;
  12. using System.Security.Policy;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using System.Windows;
  16. using System.Windows.Controls;
  17. using System.Windows.Data;
  18. using System.Windows.Documents;
  19. using System.Windows.Input;
  20. using System.Windows.Media;
  21. using System.Windows.Media.Imaging;
  22. using System.Windows.Navigation;
  23. using System.Windows.Shapes;
  24. namespace NEIntelligentControl2.Pages.Home
  25. {
  26. /// <summary>
  27. /// 风机AGC融合页面
  28. /// </summary>
  29. public partial class PageWindturbineAGC : Page
  30. {
  31. private static readonly ILog log = LogManager.GetLogger(typeof(PageWindturbineAGC));
  32. private readonly IPageAction _IPageAction;
  33. private readonly WEBHelper _WEBHelper;
  34. private MessageBridge _MessageBridge;// websocket
  35. private WindturbineInfoBridge _WindturbineInfoBridge;// 风机信息数据桥
  36. /// <summary>
  37. /// 矩阵块
  38. /// </summary>
  39. private List<WindBlock> _WindBlocks;
  40. private bool _IsLoaded;
  41. private string RFDLTag = "";
  42. private string MBGLTag = "";
  43. private string SSGLTag = "";
  44. private string YFDLTag = "";
  45. private string NFDLTag = "";
  46. private string LLGLTag = "";
  47. private string _Url = "";
  48. public PageWindturbineAGC(IPageAction action, MessageBridge mb, WEBHelper web)
  49. {
  50. InitializeComponent();
  51. _IPageAction = action;
  52. _MessageBridge = mb;
  53. _WEBHelper = web;
  54. _WindturbineInfoBridge = new WindturbineInfoBridge() { Messaged = OnWindturbineMessage };
  55. _tbtitle1.Text = "信\n友\n一\n线";
  56. _tbtitle2.Text = "信\n友\n二\n线";
  57. _tbtitle3.Text = "信\n友\n三\n线";
  58. _Url = ConfigurationManager.AppSettings["DataServicePathDebug"];
  59. RFDLTag = ConfigurationManager.AppSettings["RFDLTag"];
  60. MBGLTag = ConfigurationManager.AppSettings["MBGLTag"];
  61. SSGLTag = ConfigurationManager.AppSettings["SSGLTag"];
  62. YFDLTag = ConfigurationManager.AppSettings["YFDLTag"];
  63. NFDLTag = ConfigurationManager.AppSettings["NFDLTag"];
  64. LLGLTag = ConfigurationManager.AppSettings["LLGLTag"];
  65. }
  66. private void OnWindturbineMessage(Dictionary<string, WindturbineInfo> obj)
  67. {
  68. if (!_IsLoaded)
  69. {
  70. InitWindturbine(obj);
  71. return;
  72. }
  73. Dispatcher.Invoke(() =>
  74. {
  75. foreach (var v in _WindBlocks)
  76. {
  77. if (!obj.ContainsKey(v.WindturbineId)) continue;
  78. v.Update(obj[v.WindturbineId]);
  79. }
  80. });
  81. }
  82. private void InitWindturbine(Dictionary<string, WindturbineInfo> obj)
  83. {
  84. if (obj == null || obj.Count == 0) return;
  85. _IsLoaded = true;
  86. _WindBlocks = new List<WindBlock>();
  87. var ls = obj.Values.ToList();
  88. ls.Sort((x, y) => x.ID - y.ID);
  89. Dispatcher.Invoke(() =>
  90. {
  91. foreach (var v in ls)
  92. {
  93. WindBlock bs = new WindBlock(v) { WindturbineId = v.WindturbineId };
  94. bs.Update(v);
  95. _WindBlocks.Add(bs);
  96. if ((v.ID >= 1 && v.ID <= 5) || (v.ID >= 11 && v.ID <= 13))
  97. {
  98. pb1.AddWindturbine(bs);
  99. }
  100. else if ((v.ID >= 6 && v.ID <= 10) || (v.ID >= 16 && v.ID <= 19))
  101. {
  102. pb2.AddWindturbine(bs);
  103. }
  104. else
  105. {
  106. pb3.AddWindturbine(bs);
  107. }
  108. }
  109. });
  110. }
  111. private void Page_Loaded(object sender, RoutedEventArgs e)
  112. {
  113. //var page = _IPageAction["Matrix.PageMatrix"];
  114. //_FrameMatrix.Navigate(page);
  115. var page2 = _IPageAction["AGC.PageAGC"];
  116. _FrameAGC.Navigate(page2);
  117. _MessageBridge.Register(_WindturbineInfoBridge);
  118. Task.Run(RefresData);
  119. }
  120. private async void RefresData()
  121. {
  122. string url = $"{_Url}/ts/latest?keys={RFDLTag},{YFDLTag},{NFDLTag}";
  123. while (true)
  124. {
  125. try
  126. {
  127. //
  128. var vs = GetValues(url);
  129. foreach (var v in vs)
  130. {
  131. log.Warn($"日月年发{v.Value.Ts}:{v.Value.Value}");
  132. }
  133. if (vs == null || vs.Count == 0) continue;
  134. var ss = GetValuesSingle(SSGLTag);
  135. log.Warn($"实时{ss.Ts}:{ss.Value}");
  136. var mb = GetValuesSingle(MBGLTag);
  137. log.Warn($"目标{mb.Ts}:{mb.Value}");
  138. var ll = GetValuesSingle(LLGLTag);
  139. log.Warn($"理论{ll.Ts}:{ll.Value}");
  140. Dispatcher.Invoke(() =>
  141. {
  142. try
  143. {
  144. tbps.Text = Math.Round(ss.Value, 2).ToString("0.00");
  145. tbpc.Text = Math.Round(mb.Value, 2).ToString("0.00");
  146. tbllgl.Text = Math.Round(ll.Value, 2).ToString("0.00");
  147. }
  148. catch (Exception e)
  149. {
  150. log.Error($"实时{e.Message}");
  151. }
  152. try
  153. {
  154. foreach (var v in vs)
  155. {
  156. if (v.Key == RFDLTag)
  157. {
  158. tbrf.Text = Math.Round(v.Value.Value, 2).ToString("0.00");
  159. }
  160. if (v.Key == YFDLTag)
  161. {
  162. tbyf.Text = Math.Round(v.Value.Value, 2).ToString("0.00");
  163. }
  164. if (v.Key == NFDLTag)
  165. {
  166. var nval = v.Value.Value;
  167. tbly.Text = Math.Round(nval / 50, 2).ToString("0.00");
  168. tbnf.Text = Math.Round(nval, 2).ToString("0.00");
  169. }
  170. }
  171. var date = DateTime.Parse("2023-2-18");
  172. var time = (int)(DateTime.Now - date).TotalDays;
  173. aqts.Text = $"{619 + time} 天";
  174. }
  175. catch (Exception e)
  176. {
  177. log.Error($"日月年发{e.Message}");
  178. }
  179. });
  180. }
  181. catch (Exception e)
  182. {
  183. log.Error($"右下{e.Message}");
  184. }
  185. await Task.Delay(1000);
  186. }
  187. }
  188. private Dictionary<string, TsData> GetValues(string url)
  189. {
  190. Dictionary<string, TsData> datas = new Dictionary<string, TsData>();
  191. try
  192. {
  193. datas = _WEBHelper.HttpGetJSON<Dictionary<string, TsData>>(url);
  194. }
  195. catch { }
  196. return datas;
  197. }
  198. private TsData GetValuesSingle(string key)
  199. {
  200. var data = new TsData();
  201. var url = $"{_Url}/ts/latest?keys={key}";
  202. try
  203. {
  204. var datas = _WEBHelper.HttpGetJSON<Dictionary<string, TsData>>(url);
  205. if (datas != null && datas.ContainsKey(key))
  206. {
  207. return datas[key];
  208. }
  209. return data;
  210. }
  211. catch { }
  212. return data;
  213. }
  214. }
  215. }