MyHub.cs 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708
  1. using FBoxClientDriver.Contract;
  2. using Microsoft.AspNetCore.Cors;
  3. using Microsoft.AspNetCore.SignalR;
  4. using Microsoft.Extensions.Logging;
  5. using NLog;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Threading.Tasks;
  10. using Serilog;
  11. using InitQ.Cache;
  12. using Microsoft.Extensions.DependencyInjection;
  13. namespace Ropin.Environmentally.WebScada.Hubs
  14. {
  15. [EnableCors("cors")]
  16. public class MyHub : Hub
  17. {
  18. private readonly ILogger<MyHub> _logger;
  19. DeviceValueModel device = new DeviceValueModel();
  20. private readonly IServiceProvider _provider;
  21. private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(MyHub));
  22. public MyHub(ILogger<MyHub> logger, IServiceProvider provider)
  23. {
  24. _logger = logger;
  25. _provider = provider;
  26. }
  27. public Task SendMessage(string devId)
  28. {
  29. log.Info($"SendMessage接口到的数据【{devId}】");
  30. using (var scope = _provider.GetRequiredService<IServiceScopeFactory>().CreateScope())
  31. {
  32. // 获取调用方的ID
  33. string clientId = Context.ConnectionId;
  34. log.Info($"Context.ConnectionId【{clientId}】");
  35. var _redisService = scope.ServiceProvider.GetService<ICacheService>();
  36. var devValues = _redisService.Get("fanyibox_devStore_" + devId);
  37. log.Info($"webSocket_devStore_{devId}数据:【{devValues}】");
  38. _redisService.SetAsync($"webSocket_devStore_{devId}", "1");
  39. return Clients.All.SendAsync("webSocket_devStore_" + devId, devValues);
  40. //_hubContext.Clients.All.SendAsync("webSocket_devStore_", str);
  41. // 向所有客户端广播消息,除了发送者
  42. //Clients.AllExcept(new[] { Context.ConnectionId }).SendAsync("ReceiveMessage", $"{clientId} says: {message}");
  43. // 如果需要向特定的客户端发送消息,可以使用Clients.Client(connectionId)
  44. // 例如,向ID为特定connectionId的客户端发送消息
  45. //return Clients.Client(clientId).SendAsync("webSocket_devStore_"+ devId,devValues);
  46. }
  47. }
  48. [EnableCors("cors")]
  49. /// <summary>
  50. /// 这个方法允许客户端调用
  51. /// </summary>
  52. public Task UpdateDataServer(DataStatus data)
  53. {
  54. Log.Logger = new LoggerConfiguration()
  55. .MinimumLevel.Information()
  56. .WriteTo.Console()
  57. .WriteTo.File("log/log.txt",
  58. rollingInterval: RollingInterval.Day,
  59. rollOnFileSizeLimit: true)
  60. .CreateLogger();
  61. using (var dmon = new demo())
  62. {
  63. dmon._fbox.DataMonitorValueChanged += _fbox_DataMonitorValueChanged;
  64. dmon.Start().Wait();
  65. //Thread.Sleep(3000);
  66. //调用方法
  67. // dmon.WriteValue();
  68. string ln = "aa";
  69. do
  70. {
  71. ln = Console.ReadLine();
  72. } while (ln != "quit");
  73. Log.CloseAndFlush();
  74. }
  75. // 在里面可以调用客户端的方法
  76. return Clients.All.SendAsync("UpdateData", data);
  77. }
  78. //public override async Task OnConnectedAsync()
  79. //{
  80. // await Clients.All.SendAsync("UpdateData", "上线");
  81. //}
  82. private void _fbox_DataMonitorValueChanged(object sender, IList<DataMonitorValueChangedArgs> e)
  83. {
  84. foreach (var dmon in e)
  85. {
  86. var deviceValue = $"dmv:{dmon.Uid},Value:{dmon.Value},Status:{dmon.Status},BoxNo:{dmon.BoxNo},Name:{dmon.Name},BoxId:{dmon.BoxId},GroupName:{dmon.GroupName},Timestamp:{dmon.Timestamp}";
  87. //Console.WriteLine(deviceValue);
  88. //_logger.LogInformation(deviceValue);
  89. Log.Information(deviceValue);
  90. System.DateTime currentTime = new System.DateTime();
  91. currentTime = System.DateTime.Now;
  92. Console.WriteLine(currentTime);
  93. //Clients.All.SendAsync("UpdateData", deviceValue);
  94. if (dmon.BoxNo.Equals("300220010352")) //shanghai
  95. {
  96. switch (dmon.Uid)
  97. {
  98. case 224872264061309166: //自动油雾过滤器电子差压计D0实际值 喷漆房1
  99. device.Value = dmon.Value?.ToString().Split('.')[0];
  100. device.Name = "自动油雾过滤器电子差压计D0实值";
  101. break;
  102. case 224872320671830341: //前处理过滤箱电子差压计D2实际值 喷漆房1
  103. device.Value10 = dmon.Value?.ToString().Split('.')[0];
  104. device.Name10 = dmon.Name;
  105. break;
  106. case 224872358809588078: //前处理过滤箱电子差压计D3实际值 喷漆房1
  107. device.Value11 = dmon.Value?.ToString().Split('.')[0];
  108. device.Name11 = dmon.Name;
  109. break;
  110. case 224872398136431165: //前处理过滤箱电子差压计D4实际值 喷漆房1
  111. device.Value12 = dmon.Value?.ToString().Split('.')[0];
  112. device.Name12 = dmon.Name;
  113. break;
  114. case 224870861103322707: //\"数据块_1\".运行时间记录_D 喷漆房1
  115. device.Value13 = dmon.Value?.ToString().Split('.')[0];
  116. device.Name13 = "运行时间";
  117. break;
  118. case 224870964895569613: //\"数据块_1\".运行时间记录_H 喷漆房1
  119. device.Value14 = dmon.Value?.ToString().Split('.')[0];
  120. device.Name14 = "运行时间";
  121. break;
  122. case 224871047406966583: //\"数据块_1\".运行时间记录_M 喷漆房1
  123. device.Value15 = dmon.Value?.ToString().Split('.')[0];
  124. device.Name15 = "运行时间";
  125. break;
  126. case 224870797169546552: //报警1 喷漆房1
  127. device.Value16 = dmon.Value?.ToString().Split('.')[0];
  128. device.Name16 = dmon.Name;
  129. break;
  130. case 224870694618813617: //主加热器1 喷漆房1
  131. device.Value17 = dmon.Value?.ToString().Split('.')[0];
  132. device.Name17 = "主加热器";
  133. break;
  134. case 224870729933804772: //辅助加热器1 喷漆房1
  135. device.Value18 = dmon.Value?.ToString().Split('.')[0];
  136. device.Name18 = "辅助加热器";
  137. break;
  138. case 224870650814550567: //主风机1 喷漆房1
  139. device.Value19 = dmon.Value?.ToString();
  140. device.Name19 = dmon.Name;
  141. break;
  142. //case 224872612786230640: //自动油雾过滤器电子差压计D0实际值 喷漆房2
  143. // device.Value12 = dmon.Value?.ToString().Split('.')[0];
  144. // device.Name12 = dmon.Name;
  145. // break;
  146. //case 224872713744176788: //前处理过滤箱电子差压计D2实际值 喷漆房2
  147. // device.Value13 = dmon.Value?.ToString().Split('.')[0];
  148. // device.Name13 = dmon.Name;
  149. // break;
  150. //case 224872753250326203://前处理过滤箱电子差压计D3实际值 喷漆房2
  151. // device.Value14 = dmon.Value?.ToString().Split('.')[0];
  152. // device.Name14 = dmon.Name;
  153. // break;
  154. //case 224873107568351846: //前处理过滤箱电子差压计D2实际值 喷漆房3
  155. // device.Value15 = dmon.Value?.ToString().Split('.')[0];
  156. // device.Name15 = dmon.Name;
  157. // break;
  158. //case 224873198976916185: //前处理过滤箱电子差压计D3实际值 喷漆房3
  159. // device.Value16 = dmon.Value?.ToString().Split('.')[0];
  160. // device.Name16 = dmon.Name;
  161. // break;
  162. //case 224873045402475044://自动油雾过滤器电子差压计D1实际值 喷漆房3
  163. // device.Value17 = dmon.Value?.ToString().Split('.')[0];
  164. // device.Name17 = dmon.Name;
  165. // break;
  166. default:
  167. break;
  168. }
  169. }
  170. if (dmon.BoxNo.Equals("300220010352")) //喷漆房2
  171. {
  172. switch (dmon.Uid)
  173. {
  174. #region 喷漆房2
  175. case 224872612786230640: //自动油雾过滤器电子差压计D0实际值 喷漆房2
  176. device.ValueB = dmon.Value?.ToString().Split('.')[0];
  177. device.NameB = "自动油雾过滤器电子差压计D0实值";
  178. break;
  179. case 224872713744176788: //前处理过滤箱电子差压计D2实际值 喷漆房2
  180. device.ValueB10 = dmon.Value?.ToString().Split('.')[0];
  181. device.NameB10 = dmon.Name;
  182. break;
  183. case 224872753250326203: //前处理过滤箱电子差压计D3实际值 喷漆房2
  184. device.ValueB11 = dmon.Value?.ToString().Split('.')[0];
  185. device.NameB11 = "前处理过滤箱电子差压计D3实际值";
  186. break;
  187. case 224872793931929321: //蜂窝沸石转筒电子差压计D4实际值 喷漆房2
  188. device.ValueB12 = dmon.Value?.ToString().Split('.')[0];
  189. device.NameB12 = dmon.Name;
  190. break;
  191. case 224258613904301846: //\"数据块_1\".运行时间记录_D 喷漆房2
  192. device.ValueB13 = dmon.Value?.ToString().Split('.')[0];
  193. device.NameB13 = "运行时间";
  194. break;
  195. case 224258495862952967: //\"数据块_1\".运行时间记录_H 喷漆房2
  196. device.ValueB14 = dmon.Value?.ToString().Split('.')[0];
  197. device.NameB14 = "运行时间";
  198. break;
  199. case 224258680408133884: //\"数据块_1\".运行时间记录_M 喷漆房2
  200. device.ValueB15 = dmon.Value?.ToString().Split('.')[0];
  201. device.NameB15 = "运行时间";
  202. break;
  203. case 224257908353160069: //报警2 喷漆房2
  204. device.ValueB16 = dmon.Value?.ToString().Split('.')[0];
  205. device.NameB16 = dmon.Name;
  206. break;
  207. case 224257839222641425: //主加热器2 喷漆房2
  208. device.ValueB17 = dmon.Value?.ToString().Split('.')[0];
  209. device.NameB17 = "主加热器";
  210. break;
  211. case 224257877813384018: //辅助加热器2 喷漆房2
  212. device.ValueB18 = dmon.Value?.ToString().Split('.')[0];
  213. device.NameB18 = "辅助加热器";
  214. break;
  215. case 224257666812632474: //主风机2 喷漆房2
  216. device.ValueB19 = dmon.Value?.ToString();
  217. device.NameB19 = dmon.Name;
  218. break;
  219. #endregion
  220. default:
  221. break;
  222. }
  223. }
  224. if (dmon.BoxNo.Equals("300220010352")) //喷漆房3
  225. {
  226. switch (dmon.Uid)
  227. {
  228. #region 喷漆房3
  229. case 224872971032222163: //自动油雾过滤器电子差压计D0实际值 喷漆房3
  230. device.ValueC = dmon.Value?.ToString().Split('.')[0];
  231. device.NameC = "自动油雾过滤器电子差压计D0实值";
  232. break;
  233. case 224873045402475044: //前处理过滤箱电子差压计D2实际值 喷漆房3
  234. device.ValueC10 = dmon.Value?.ToString().Split('.')[0];
  235. device.NameC10 = "自动油雾过滤器电子差压计D1实值";
  236. break;
  237. case 224873198976916185: //前处理过滤箱电子差压计D3实际值 喷漆房3
  238. device.ValueC11 = dmon.Value?.ToString().Split('.')[0];
  239. device.NameC11 = dmon.Name;
  240. break;
  241. case 224873254060711069: //蜂窝沸石转筒电子差压计D4实际值 喷漆房3
  242. device.ValueC12 = dmon.Value?.ToString().Split('.')[0];
  243. device.NameC12 = dmon.Name;
  244. break;
  245. case 224274954993426315: //\"数据块_1\".运行时间记录_D 喷漆房3
  246. device.ValueC13 = dmon.Value?.ToString().Split('.')[0];
  247. device.NameC13 = "运行时间";
  248. break;
  249. case 224274989968678850: //\"数据块_1\".运行时间记录_H 喷漆房3
  250. device.ValueC14 = dmon.Value?.ToString().Split('.')[0];
  251. device.NameC14 = "运行时间";
  252. break;
  253. case 224274745723870963: //\"数据块_1\".运行时间记录_M 喷漆房3
  254. device.ValueC15 = dmon.Value?.ToString().Split('.')[0];
  255. device.NameC15 = "运行时间";
  256. break;
  257. case 224258807236547733: //报警3 喷漆房3
  258. device.ValueC16 = dmon.Value?.ToString().Split('.')[0];
  259. device.NameC16 = dmon.Name;
  260. break;
  261. case 224258724932768342: //主加热器3 喷漆房3
  262. device.ValueC17 = dmon.Value?.ToString().Split('.')[0];
  263. device.NameC17 = "主加热器";
  264. break;
  265. case 224258769723740974: //辅助加热器3 喷漆房3
  266. device.ValueC18 = dmon.Value?.ToString().Split('.')[0];
  267. device.NameC18 = "辅助加热器";
  268. break;
  269. case 224257779157061674: //主风机3 喷漆房3
  270. device.ValueC19 = dmon.Value?.ToString();
  271. device.NameC19 = dmon.Name;
  272. break;
  273. #endregion
  274. default:
  275. break;
  276. }
  277. }
  278. if (dmon.BoxNo.Equals("300220010352")) //喷漆房4
  279. {
  280. switch (dmon.Uid)
  281. {
  282. #region 喷漆房4
  283. case 224873538997605040: //自动油雾过滤器电子差压计D0实际值 喷漆房4
  284. device.ValueD = dmon.Value?.ToString().Split('.')[0];
  285. device.NameD = "自动油雾过滤器电子差压计D0实值";
  286. break;
  287. case 224873575130485457: //前处理过滤箱电子差压计D2实际值 喷漆房4
  288. device.ValueD10 = dmon.Value?.ToString().Split('.')[0];
  289. device.NameD10 = dmon.Name;
  290. break;
  291. case 224873679711261516: //前处理过滤箱电子差压计D3实际值 喷漆房4
  292. device.ValueD11 = dmon.Value?.ToString().Split('.')[0];
  293. device.NameD11 = dmon.Name;
  294. break;
  295. case 224873715894473966: //蜂窝沸石转筒电子差压计D4实际值 喷漆房4
  296. device.ValueD12 = dmon.Value?.ToString().Split('.')[0];
  297. device.NameD12 = dmon.Name;
  298. break;
  299. case 224275677238940201: //\"数据块_1\".运行时间记录_D 喷漆房4
  300. device.ValueD13 = dmon.Value?.ToString().Split('.')[0];
  301. device.NameD13 = "运行时间";
  302. break;
  303. case 224275487304077613: //\"数据块_1\".运行时间记录_H 喷漆房4
  304. device.ValueD14 = dmon.Value?.ToString().Split('.')[0];
  305. device.NameD14 = "运行时间";
  306. break;
  307. case 224275633134785002: //\"数据块_1\".运行时间记录_M 喷漆房4
  308. device.ValueD15 = dmon.Value?.ToString().Split('.')[0];
  309. device.NameD15 = "运行时间";
  310. break;
  311. case 224275157925384276: //报警4 喷漆房4
  312. device.ValueD16 = dmon.Value?.ToString().Split('.')[0];
  313. device.NameD16 = dmon.Name;
  314. break;
  315. case 224274232172240099: //主加热器4 喷漆房4
  316. device.ValueD17 = dmon.Value?.ToString().Split('.')[0];
  317. device.NameD17 = "主加热器";
  318. break;
  319. case 224274264027979000: //辅助加热器4 喷漆房4
  320. device.ValueD18 = dmon.Value?.ToString().Split('.')[0];
  321. device.NameD18 = "辅助加热器";
  322. break;
  323. case 224257795187691889: //主风机4 喷漆房4
  324. device.ValueD19 = dmon.Value?.ToString();
  325. device.NameD19 = dmon.Name;
  326. break;
  327. #endregion
  328. default:
  329. break;
  330. }
  331. }
  332. if (dmon.BoxNo.Equals("300221100748")) //大厂
  333. {
  334. switch (dmon.Uid)
  335. {
  336. #region 大厂
  337. case 254066938408343960: //非甲烷总烃
  338. device.ValueE = dmon.Value?.ToString().Split('.')[0];
  339. device.NameE = dmon.Name;
  340. break;
  341. case 254066938411489690: //废气温度
  342. device.ValueE10 = dmon.Value?.ToString().Split('.')[0];
  343. device.NameE10 = dmon.Name;
  344. break;
  345. case 254066938413586843: //废气压力
  346. device.ValueE11 = dmon.Value?.ToString().Split('.')[0];
  347. device.NameE11 = dmon.Name;
  348. break;
  349. case 254066938414635420: //废气流速
  350. device.ValueE12 = dmon.Value?.ToString().Split('.')[0];
  351. device.NameE12 = dmon.Name;
  352. break;
  353. case 254066938416732573: //废气湿度
  354. device.ValueE13 = dmon.Value?.ToString().Split('.')[0];
  355. device.NameE13 = dmon.Name;
  356. break;
  357. case 254066938417781150: //废气标态流量
  358. device.ValueE14 = dmon.Value?.ToString().Split('.')[0];
  359. device.NameE14 = dmon.Name;
  360. break;
  361. case 254066938418829727: //甲烷
  362. device.ValueE15 = dmon.Value?.ToString().Split('.')[0];
  363. device.NameE15 = dmon.Name;
  364. break;
  365. case 254066938420926880: //总烃
  366. device.ValueE16 = dmon.Value?.ToString().Split('.')[0];
  367. device.NameE16 = dmon.Name;
  368. break;
  369. case 254066938421975457: //苯
  370. device.ValueE17 = dmon.Value?.ToString().Split('.')[0];
  371. device.NameE17 = dmon.Name;
  372. break;
  373. case 254066938424072610: //甲苯
  374. device.ValueE18 = dmon.Value?.ToString().Split('.')[0];
  375. device.NameE18 = dmon.Name;
  376. break;
  377. case 254066938426169763: //二甲苯
  378. device.ValueE19 = dmon.Value?.ToString();
  379. device.NameE19 = dmon.Name;
  380. break;
  381. #endregion
  382. default:
  383. break;
  384. }
  385. }
  386. else if(dmon.BoxNo.Equals("300220010335"))//anhui
  387. {
  388. switch (dmon.Uid)
  389. {
  390. case 225981570888392599: //调节阀1开度
  391. device.Value20 = dmon.Value?.ToString().Split('.')[0];
  392. device.Name20 = dmon.Name;
  393. break;
  394. case 225887304201690740: //实际开度1 默认组
  395. device.Value21 = dmon.Value?.ToString().Split('.')[0];
  396. device.Name21 = dmon.Name;
  397. break;
  398. case 225887469583093963: //实际开度2 默认组
  399. device.Value22 = dmon.Value?.ToString().Split('.')[0];
  400. device.Name22 = dmon.Name;
  401. break;
  402. case 225981611964260302: //调节阀2开度 默认组
  403. device.Value23 = dmon.Value?.ToString().Split('.')[0];
  404. device.Name23 = dmon.Name;
  405. break;
  406. case 225887536297694857: //实际开度3 默认组
  407. device.Value24 = dmon.Value?.ToString().Split('.')[0];
  408. device.Name24 = dmon.Name;
  409. break;
  410. case 225981652471795782: //调节阀3开度 默认组
  411. device.Value25 = dmon.Value?.ToString().Split('.')[0];
  412. device.Name25 = dmon.Name;
  413. break;
  414. case 225975315764502499: //前轴振动实际值 默认组
  415. device.Value26 = dmon.Value?.ToString().Split('.')[0];
  416. device.Name26 = dmon.Name;
  417. break;
  418. case 225975390380118077: //后轴振动实际值 默认组
  419. device.Value27 = dmon.Value?.ToString().Split('.')[0];
  420. device.Name27 = dmon.Name;
  421. break;
  422. case 225975436688380055: //空气压力实际值 默认组
  423. device.Value28 = dmon.Value?.ToString().Split('.')[0];
  424. device.Name28 = dmon.Name;
  425. break;
  426. case 225982560290101472: //1 - 5仓压差实际值 默认组
  427. device.Value29 = dmon.Value?.ToString().Split('.')[0];
  428. device.Name29 = dmon.Name;
  429. break;
  430. default:
  431. break;
  432. }
  433. }
  434. //Clients.All.SendAsync("UpdateDeviceData", new MsgInfo { MsgContent = dmon.Value.ToString(), Title = dmon.Name } );
  435. //Clients.All.SendAsync("UpdateData", new MsgInfo { Title = dmon.Value.ToString(), MsgContent = dmon.Name });
  436. //Clients.All.SendAsync("ShowMsg", new MsgInfo { Title = "DeviceTitle", MsgContent = deviceValue });
  437. //logger.Info("时间" + currentTime + "Uid" + dmon.Uid + "名称:" + dmon.Name + "值:" + dmon.Value + "状态:" + dmon.Status + "盒子号:" + dmon.BoxNo + "分组名称:" + dmon.GroupName + "时间" + dmon.Timestamp);
  438. }
  439. Clients.All.SendAsync("UpdateDeviceData", device);
  440. //接收数据,先存数据,再把数据显示到页面上
  441. }
  442. }
  443. public class DeviceValueModel
  444. {
  445. public string Name { get; set; }
  446. public string Value { get; set; }
  447. public string Name10 { get; set; }
  448. public string Value10 { get; set; }
  449. public string Name11 { get; set; }
  450. public string Value11 { get; set; }
  451. public string Name12 { get; set; }
  452. public string Value12 { get; set; }
  453. public string Name13 { get; set; }
  454. public string Value13 { get; set; }
  455. public string Name14 { get; set; }
  456. public string Value14 { get; set; }
  457. public string Name15 { get; set; }
  458. public string Value15 { get; set; }
  459. public string Name16 { get; set; }
  460. public string Value16 { get; set; }
  461. public string Name17 { get; set; }
  462. public string Value17 { get; set; }
  463. public string Name18 { get; set; }
  464. public string Value18 { get; set; }
  465. public string Name19 { get; set; }
  466. public string Value19 { get; set; }
  467. #region 2
  468. public string NameB { get; set; }
  469. public string ValueB { get; set; }
  470. public string NameB10 { get; set; }
  471. public string ValueB10 { get; set; }
  472. public string NameB11 { get; set; }
  473. public string ValueB11 { get; set; }
  474. public string NameB12 { get; set; }
  475. public string ValueB12 { get; set; }
  476. public string NameB13 { get; set; }
  477. public string ValueB13 { get; set; }
  478. public string NameB14 { get; set; }
  479. public string ValueB14 { get; set; }
  480. public string NameB15 { get; set; }
  481. public string ValueB15 { get; set; }
  482. public string NameB16 { get; set; }
  483. public string ValueB16 { get; set; }
  484. public string NameB17 { get; set; }
  485. public string ValueB17 { get; set; }
  486. public string NameB18 { get; set; }
  487. public string ValueB18 { get; set; }
  488. public string NameB19 { get; set; }
  489. public string ValueB19 { get; set; }
  490. #endregion
  491. #region 2
  492. public string NameC { get; set; }
  493. public string ValueC { get; set; }
  494. public string NameC10 { get; set; }
  495. public string ValueC10 { get; set; }
  496. public string NameC11 { get; set; }
  497. public string ValueC11 { get; set; }
  498. public string NameC12 { get; set; }
  499. public string ValueC12 { get; set; }
  500. public string NameC13 { get; set; }
  501. public string ValueC13 { get; set; }
  502. public string NameC14 { get; set; }
  503. public string ValueC14 { get; set; }
  504. public string NameC15 { get; set; }
  505. public string ValueC15 { get; set; }
  506. public string NameC16 { get; set; }
  507. public string ValueC16 { get; set; }
  508. public string NameC17 { get; set; }
  509. public string ValueC17 { get; set; }
  510. public string NameC18 { get; set; }
  511. public string ValueC18 { get; set; }
  512. public string NameC19 { get; set; }
  513. public string ValueC19 { get; set; }
  514. #endregion
  515. #region 3
  516. public string NameD { get; set; }
  517. public string ValueD { get; set; }
  518. public string NameD10 { get; set; }
  519. public string ValueD10 { get; set; }
  520. public string NameD11 { get; set; }
  521. public string ValueD11 { get; set; }
  522. public string NameD12 { get; set; }
  523. public string ValueD12 { get; set; }
  524. public string NameD13 { get; set; }
  525. public string ValueD13 { get; set; }
  526. public string NameD14 { get; set; }
  527. public string ValueD14 { get; set; }
  528. public string NameD15 { get; set; }
  529. public string ValueD15 { get; set; }
  530. public string NameD16 { get; set; }
  531. public string ValueD16 { get; set; }
  532. public string NameD17 { get; set; }
  533. public string ValueD17 { get; set; }
  534. public string NameD18 { get; set; }
  535. public string ValueD18 { get; set; }
  536. public string NameD19 { get; set; }
  537. public string ValueD19 { get; set; }
  538. #endregion
  539. public bool Alarm { get; set; }
  540. #region PaintRoom5
  541. public string NameE { get; set; }
  542. public string ValueE { get; set; }
  543. public string NameE10 { get; set; }
  544. public string ValueE10 { get; set; }
  545. public string NameE11 { get; set; }
  546. public string ValueE11 { get; set; }
  547. public string NameE12 { get; set; }
  548. public string ValueE12 { get; set; }
  549. public string NameE13 { get; set; }
  550. public string ValueE13 { get; set; }
  551. public string NameE14 { get; set; }
  552. public string ValueE14 { get; set; }
  553. public string NameE15 { get; set; }
  554. public string ValueE15 { get; set; }
  555. public string NameE16 { get; set; }
  556. public string ValueE16 { get; set; }
  557. public string NameE17 { get; set; }
  558. public string ValueE17 { get; set; }
  559. public string NameE18 { get; set; }
  560. public string ValueE18 { get; set; }
  561. public string NameE19 { get; set; }
  562. public string ValueE19 { get; set; }
  563. #endregion
  564. //另外一个盒子
  565. public string Name20 { get; set; }
  566. public string Value20 { get; set; }
  567. public string Name21 { get; set; }
  568. public string Value21 { get; set; }
  569. public string Name22 { get; set; }
  570. public string Value22 { get; set; }
  571. public string Name23 { get; set; }
  572. public string Value23 { get; set; }
  573. public string Name24 { get; set; }
  574. public string Value24 { get; set; }
  575. public string Name25 { get; set; }
  576. public string Value25 { get; set; }
  577. public string Name26 { get; set; }
  578. public string Value26 { get; set; }
  579. public string Name27 { get; set; }
  580. public string Value27 { get; set; }
  581. public string Name28 { get; set; }
  582. public string Value28 { get; set; }
  583. public string Name29 { get; set; }
  584. public string Value29 { get; set; }
  585. }
  586. public class DataStatus
  587. {
  588. public string Status1 { get; set; }
  589. public string Status2 { get; set; }
  590. }
  591. public class MsgInfo
  592. {
  593. public string Title { get; set; }
  594. public string MsgContent { get; set; }
  595. }
  596. }