Led.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using DK.XuWei.WebMes;
  6. using Curtain.DataAccess;
  7. using Curtain.Log;
  8. using System.Data;
  9. /// <summary>
  10. /// 发送LED看板数据到PLC xuwei add 2023-05-12
  11. /// </summary>
  12. public static class Led
  13. {
  14. public static void SendData()
  15. {
  16. //一线产量明细
  17. DataTable oneDt = new DataTable();
  18. //二线产量明细
  19. DataTable twoDt = new DataTable();
  20. //总计产量
  21. DataTable infoDt = new DataTable();
  22. //当前时间
  23. string datetime = DateTime.Now.ToShortDateString().ToString();
  24. //读取看板数据
  25. using (IDataAccess conn = DataAccess.Create())
  26. {
  27. //一线明细
  28. oneDt = conn.ExecuteDatatable(@"
  29. SELECT
  30. sj,
  31. CL
  32. FROM
  33. (
  34. SELECT
  35. '07-10' AS sj,
  36. SUM( ct ) CL
  37. FROM
  38. (
  39. SELECT
  40. TO_CHAR( pd.CREATETIME, 'hh24' ) sj,
  41. COUNT( pd.BARCODE ) ct
  42. FROM
  43. TP_PM_PRODUCTIONDATA pd
  44. WHERE
  45. pd.USERCODE IN ('Z26','Z101','Z98','Z90')
  46. AND pd.CREATETIME >= to_date( @DATETIMENOW@, 'yyyy-mm-dd hh24:mi:ss' )
  47. AND pd.VALUEFLAG = 1
  48. AND pd.PROCEDUREID IN (2,82)
  49. GROUP BY
  50. TO_CHAR( pd.CREATETIME, 'hh24' )
  51. ORDER BY
  52. TO_CHAR( pd.CREATETIME, 'hh24' )
  53. )
  54. WHERE
  55. sj IN ( '07', '08','09' )
  56. UNION ALL
  57. SELECT
  58. '10-12' AS SJ,
  59. SUM(ct ) AS CL
  60. FROM
  61. (
  62. SELECT
  63. TO_CHAR( pd.CREATETIME, 'hh24' ) sj,
  64. COUNT( pd.BARCODE ) ct
  65. FROM
  66. TP_PM_PRODUCTIONDATA pd
  67. WHERE
  68. pd.USERCODE IN ('Z26','Z101','Z98','Z90')
  69. AND pd.CREATETIME >= to_date( @DATETIMENOW@, 'yyyy-mm-dd hh24:mi:ss' )
  70. AND pd.VALUEFLAG = 1
  71. AND pd.PROCEDUREID IN (2,82)
  72. GROUP BY
  73. TO_CHAR( pd.CREATETIME, 'hh24' )
  74. ORDER BY
  75. TO_CHAR( pd.CREATETIME, 'hh24' )
  76. )
  77. WHERE
  78. sj IN ( '10', '11' )
  79. UNION ALL
  80. SELECT
  81. '13-16' AS sj,
  82. SUM( ct )
  83. FROM
  84. (
  85. SELECT
  86. TO_CHAR( pd.CREATETIME, 'hh24' ) sj,
  87. COUNT( pd.BARCODE ) ct
  88. FROM
  89. TP_PM_PRODUCTIONDATA pd
  90. WHERE
  91. pd.USERCODE IN ('Z26','Z101','Z98','Z90')
  92. AND pd.CREATETIME >= to_date( @DATETIMENOW@, 'yyyy-mm-dd hh24:mi:ss' )
  93. AND pd.VALUEFLAG = 1
  94. AND pd.PROCEDUREID IN (2,82)
  95. GROUP BY
  96. TO_CHAR( pd.CREATETIME, 'hh24' )
  97. ORDER BY
  98. TO_CHAR( pd.CREATETIME, 'hh24' )
  99. )
  100. WHERE
  101. sj IN ( '12', '13','14','15' )
  102. UNION ALL
  103. SELECT
  104. '16-24' AS sj,
  105. SUM( ct )
  106. FROM
  107. (
  108. SELECT
  109. TO_CHAR( pd.CREATETIME, 'hh24' ) sj,
  110. COUNT( pd.BARCODE ) ct
  111. FROM
  112. TP_PM_PRODUCTIONDATA pd
  113. WHERE
  114. pd.USERCODE IN ('Z26','Z101','Z98','Z90')
  115. AND pd.CREATETIME >= to_date( @DATETIMENOW@, 'yyyy-mm-dd hh24:mi:ss' )
  116. AND pd.VALUEFLAG = 1
  117. AND pd.PROCEDUREID IN (2,82)
  118. GROUP BY
  119. TO_CHAR( pd.CREATETIME, 'hh24' )
  120. ORDER BY
  121. TO_CHAR( pd.CREATETIME, 'hh24' )
  122. )
  123. WHERE
  124. sj IN ( '16', '17','18','19','20','21','22','23' )
  125. )
  126. ORDER BY
  127. sj
  128. ",
  129. new CDAParameter("USERID", ""), new CDAParameter("DATETIMENOW", datetime)
  130. );
  131. //二线明细
  132. twoDt = conn.ExecuteDatatable(@"
  133. SELECT
  134. sj,
  135. CL
  136. FROM
  137. (
  138. SELECT
  139. '07-10' AS sj,
  140. SUM( ct ) CL
  141. FROM
  142. (
  143. SELECT
  144. TO_CHAR( pd.CREATETIME, 'hh24' ) sj,
  145. COUNT( pd.BARCODE ) ct
  146. FROM
  147. TP_PM_PRODUCTIONDATA pd
  148. WHERE
  149. pd.USERCODE IN ('Z28','Z88','Z80')
  150. AND pd.CREATETIME >= to_date( @DATETIMENOW@, 'yyyy-mm-dd hh24:mi:ss' )
  151. AND pd.VALUEFLAG = 1
  152. AND pd.PROCEDUREID IN (2,82)
  153. GROUP BY
  154. TO_CHAR( pd.CREATETIME, 'hh24' )
  155. ORDER BY
  156. TO_CHAR( pd.CREATETIME, 'hh24' )
  157. )
  158. WHERE
  159. sj IN ( '07', '08','09' )
  160. UNION ALL
  161. SELECT
  162. '10-12' AS SJ,
  163. SUM(ct ) AS CL
  164. FROM
  165. (
  166. SELECT
  167. TO_CHAR( pd.CREATETIME, 'hh24' ) sj,
  168. COUNT( pd.BARCODE ) ct
  169. FROM
  170. TP_PM_PRODUCTIONDATA pd
  171. WHERE
  172. pd.USERCODE IN ('Z28','Z88','Z80')
  173. AND pd.CREATETIME >= to_date( @DATETIMENOW@, 'yyyy-mm-dd hh24:mi:ss' )
  174. AND pd.VALUEFLAG = 1
  175. AND pd.PROCEDUREID IN (2,82)
  176. GROUP BY
  177. TO_CHAR( pd.CREATETIME, 'hh24' )
  178. ORDER BY
  179. TO_CHAR( pd.CREATETIME, 'hh24' )
  180. )
  181. WHERE
  182. sj IN ( '10', '11' )
  183. UNION ALL
  184. SELECT
  185. '13-16' AS sj,
  186. SUM( ct )
  187. FROM
  188. (
  189. SELECT
  190. TO_CHAR( pd.CREATETIME, 'hh24' ) sj,
  191. COUNT( pd.BARCODE ) ct
  192. FROM
  193. TP_PM_PRODUCTIONDATA pd
  194. WHERE
  195. pd.USERCODE IN ('Z28','Z88','Z80')
  196. AND pd.CREATETIME >= to_date( @DATETIMENOW@, 'yyyy-mm-dd hh24:mi:ss' )
  197. AND pd.VALUEFLAG = 1
  198. AND pd.PROCEDUREID IN (2,82)
  199. GROUP BY
  200. TO_CHAR( pd.CREATETIME, 'hh24' )
  201. ORDER BY
  202. TO_CHAR( pd.CREATETIME, 'hh24' )
  203. )
  204. WHERE
  205. sj IN ( '12', '13','14','15' )
  206. UNION ALL
  207. SELECT
  208. '16-24' AS sj,
  209. SUM( ct )
  210. FROM
  211. (
  212. SELECT
  213. TO_CHAR( pd.CREATETIME, 'hh24' ) sj,
  214. COUNT( pd.BARCODE ) ct
  215. FROM
  216. TP_PM_PRODUCTIONDATA pd
  217. WHERE
  218. pd.USERCODE IN ('Z28','Z88','Z80')
  219. AND pd.CREATETIME >= to_date( @DATETIMENOW@, 'yyyy-mm-dd hh24:mi:ss' )
  220. AND pd.VALUEFLAG = 1
  221. AND pd.PROCEDUREID IN (2,82)
  222. GROUP BY
  223. TO_CHAR( pd.CREATETIME, 'hh24' )
  224. ORDER BY
  225. TO_CHAR( pd.CREATETIME, 'hh24' )
  226. )
  227. WHERE
  228. sj IN ( '16', '17','18','19','20','21','22','23' )
  229. )
  230. ORDER BY
  231. sj
  232. ",
  233. new CDAParameter("USERID", ""), new CDAParameter("DATETIMENOW", datetime)
  234. );
  235. //总计
  236. infoDt = conn.ExecuteDatatable(@"
  237. WITH 一线 AS (
  238. SELECT
  239. COUNT( DISTINCT pd.BARCODE ) 一线产量
  240. FROM
  241. TP_PM_PRODUCTIONDATA pd
  242. WHERE
  243. pd.VALUEFLAG = 1
  244. AND pd.PROCEDUREID IN (2,82)
  245. AND pd.USERCODE IN ('Z26','Z101','Z98','Z90')
  246. AND pd.CREATETIME >= to_date( @DATETIMENOW@, 'yyyy-mm-dd hh24:mi:ss' )
  247. ),
  248. 二线 AS (
  249. SELECT
  250. COUNT( DISTINCT pd.BARCODE ) 二线产量
  251. FROM
  252. TP_PM_PRODUCTIONDATA pd
  253. WHERE
  254. pd.VALUEFLAG = 1
  255. AND pd.PROCEDUREID IN (2,82)
  256. AND pd.USERCODE IN ('Z28','Z88','Z80')
  257. AND pd.CREATETIME >= to_date( @DATETIMENOW@, 'yyyy-mm-dd hh24:mi:ss' )
  258. ) SELECT
  259. 一线.一线产量,
  260. 二线.二线产量,
  261. ( 一线.一线产量 +二线.二线产量 ) 总计
  262. FROM
  263. 一线
  264. LEFT JOIN 二线 ON 1 =1
  265. ",
  266. new CDAParameter("USERID", ""), new CDAParameter("DATETIMENOW", datetime)
  267. );
  268. }
  269. Logger.Debug("读取看板数据完成!");
  270. string jsonStr = new JsonResult(oneDt).ToJson();
  271. string jsonStr2 = new JsonResult(twoDt).ToJson();
  272. Logger.Debug("明细数据:" + " 一线:" + jsonStr + " 二线:" + jsonStr2);
  273. //发送数据到LED
  274. //SiemensS7.Open("172.19.2.71", 102);
  275. SiemensS7.Open("172.19.26.82", 102);
  276. #region 总产量
  277. if (infoDt != null && infoDt.Rows.Count > 0 && infoDt.Rows[0] != null && infoDt.Rows[0]["总计"] != null)
  278. {
  279. SiemensS7.Write<short>("30.0", Convert.ToInt16(infoDt.Rows[0]["总计"]));//包装总量
  280. }
  281. else
  282. {
  283. SiemensS7.Write<short>("30.0", Convert.ToInt16(0));//包装总量
  284. }
  285. if (infoDt != null && infoDt.Rows.Count > 0 && infoDt.Rows[0] != null && infoDt.Rows[0]["一线产量"].ToString() != "")
  286. {
  287. SiemensS7.Write<short>("30.2", Convert.ToInt16(infoDt.Rows[0]["一线产量"]));//一线包装产量
  288. }
  289. else
  290. {
  291. SiemensS7.Write<short>("30.2", Convert.ToInt16(0));//一线包装产量
  292. }
  293. if (infoDt != null && infoDt.Rows.Count > 0 && infoDt.Rows[0] != null && infoDt.Rows[0]["二线产量"].ToString() != "")
  294. {
  295. SiemensS7.Write<short>("30.4", Convert.ToInt16(infoDt.Rows[0]["二线产量"]));//二线包装产量
  296. }
  297. else
  298. {
  299. SiemensS7.Write<short>("30.4", Convert.ToInt16(0));//二线包装产量
  300. }
  301. #endregion
  302. #region 一线产量
  303. if (oneDt != null && oneDt.Rows.Count > 0 && oneDt.Rows[0] != null && oneDt.Rows[0]["CL"].ToString() != "")
  304. {
  305. SiemensS7.Write<short>("30.6", Convert.ToInt16(oneDt.Rows[0]["CL"]));//一线7:00-9:00产量
  306. }
  307. else
  308. {
  309. SiemensS7.Write<short>("30.6", Convert.ToInt16(0));//一线7:00-9:00产量
  310. }
  311. if (oneDt != null && oneDt.Rows.Count > 0 && oneDt.Rows[1] != null && oneDt.Rows[1]["CL"].ToString() != "")
  312. {
  313. SiemensS7.Write<short>("30.8", Convert.ToInt16(oneDt.Rows[1]["CL"]));//一线9:00-10:00产量
  314. }
  315. else
  316. {
  317. SiemensS7.Write<short>("30.8", Convert.ToInt16(0));//一线9:00-10:00产量
  318. }
  319. if (oneDt != null && oneDt.Rows.Count > 2 && oneDt.Rows[2] != null && oneDt.Rows[2]["CL"].ToString() != "")
  320. {
  321. SiemensS7.Write<short>("30.10", Convert.ToInt16(oneDt.Rows[2]["CL"]));//一线10:00-11:00产量
  322. }
  323. else
  324. {
  325. SiemensS7.Write<short>("30.10", Convert.ToInt16(0));//一线10:00-11:00产量
  326. }
  327. if (oneDt != null && oneDt.Rows.Count > 3 && oneDt.Rows[3] != null && oneDt.Rows[3]["CL"].ToString() != "")
  328. {
  329. SiemensS7.Write<short>("30.12", Convert.ToInt16(oneDt.Rows[3]["CL"]));//一线12:00-14:00产量
  330. }
  331. else
  332. {
  333. SiemensS7.Write<short>("30.12", Convert.ToInt16(0));//一线12:00-14:00产量
  334. }
  335. //if (oneDt != null && oneDt.Rows.Count > 4 && oneDt.Rows[4] != null && oneDt.Rows[4]["CL"].ToString() != "")
  336. //{
  337. // SiemensS7.Write<short>("30.14", Convert.ToInt16(oneDt.Rows[4]["CL"]));//一线14:00-15:00产量
  338. //}
  339. //else
  340. //{
  341. // SiemensS7.Write<short>("30.14", Convert.ToInt16(0));//一线14:00-15:00产量
  342. //}
  343. //if (oneDt != null && oneDt.Rows.Count > 5 && oneDt.Rows[5] != null && oneDt.Rows[5]["CL"].ToString() != "")
  344. //{
  345. // SiemensS7.Write<short>("30.16", Convert.ToInt16(oneDt.Rows[5]["CL"]));//一线15:00-16:00产量
  346. //}
  347. //else
  348. //{
  349. // SiemensS7.Write<short>("30.16", Convert.ToInt16(0));//一线15:00-16:00产量
  350. //}
  351. //if (oneDt != null && oneDt.Rows.Count > 6 && oneDt.Rows[6] != null && oneDt.Rows[6]["CL"].ToString() != "")
  352. //{
  353. // SiemensS7.Write<short>("30.18", Convert.ToInt16(oneDt.Rows[6]["CL"]));//一线16:00-17:00产量
  354. //}
  355. //else
  356. //{
  357. // SiemensS7.Write<short>("30.18", Convert.ToInt16(0));//一线16:00-17:00产量
  358. //}
  359. //if (oneDt != null && oneDt.Rows.Count > 7 && oneDt.Rows[7] != null && oneDt.Rows[7]["CL"].ToString() != "")
  360. //{
  361. // SiemensS7.Write<short>("30.20", Convert.ToInt16(oneDt.Rows[7]["CL"]));//一线17:00-18:00产量
  362. //}
  363. //else
  364. //{
  365. // SiemensS7.Write<short>("30.20", Convert.ToInt16(0));//一线17:00-18:00产量
  366. //}
  367. #endregion
  368. #region 二线产量
  369. if (twoDt != null && twoDt.Rows.Count > 0 && twoDt.Rows[0] != null && twoDt.Rows[0]["CL"].ToString() != "")
  370. {
  371. SiemensS7.Write<short>("30.14", Convert.ToInt16(twoDt.Rows[0]["CL"]));//二线7:00-9:00产量
  372. }
  373. else
  374. {
  375. SiemensS7.Write<short>("30.14", Convert.ToInt16(0));//二线17:00-18:00产量
  376. }
  377. if (twoDt != null && twoDt.Rows.Count > 1 && twoDt.Rows[1] != null && twoDt.Rows[1]["CL"].ToString() != "")
  378. {
  379. SiemensS7.Write<short>("30.16", Convert.ToInt16(twoDt.Rows[1]["CL"]));//二线9:00-10:00产量
  380. }
  381. else
  382. {
  383. SiemensS7.Write<short>("30.16", Convert.ToInt16(0));//二线9:00-10:00产量
  384. }
  385. if (twoDt != null && twoDt.Rows.Count > 2 && twoDt.Rows[2] != null && twoDt.Rows[2]["CL"].ToString() != "")
  386. {
  387. SiemensS7.Write<short>("30.18", Convert.ToInt16(twoDt.Rows[2]["CL"]));//二线10:00-11:00产量
  388. }
  389. else
  390. {
  391. SiemensS7.Write<short>("30.18", Convert.ToInt16(0));//二线10:00-11:00产量
  392. }
  393. if (twoDt != null && twoDt.Rows.Count > 3 && twoDt.Rows[3] != null && twoDt.Rows[3]["CL"].ToString() != "")
  394. {
  395. SiemensS7.Write<short>("30.20", Convert.ToInt16(twoDt.Rows[3]["CL"]));//二线12:00-14:00产量
  396. }
  397. else
  398. {
  399. SiemensS7.Write<short>("30.20", Convert.ToInt16(0));//二线12:00-14:00产量
  400. }
  401. //if (twoDt != null && twoDt.Rows.Count > 4 && twoDt.Rows[4] != null && twoDt.Rows[4]["CL"].ToString() != "")
  402. //{
  403. // SiemensS7.Write<short>("30.30", Convert.ToInt16(twoDt.Rows[4]["CL"]));//二线14:00-15:00产量
  404. //}
  405. //else
  406. //{
  407. // SiemensS7.Write<short>("30.30", Convert.ToInt16(0));//二线14:00-15:00产量
  408. //}
  409. //if (twoDt != null && twoDt.Rows.Count > 5 && twoDt.Rows[5] != null && twoDt.Rows[5]["CL"].ToString() != "")
  410. //{
  411. // SiemensS7.Write<short>("30.32", Convert.ToInt16(twoDt.Rows[5]["CL"]));//二线15:00-16:00产量
  412. //}
  413. //else
  414. //{
  415. // SiemensS7.Write<short>("30.32", Convert.ToInt16(0));//二线15:00-16:00产量
  416. //}
  417. //if (twoDt != null && twoDt.Rows.Count > 6 && twoDt.Rows[6] != null && twoDt.Rows[6]["CL"].ToString() != "")
  418. //{
  419. // SiemensS7.Write<short>("30.34", Convert.ToInt16(twoDt.Rows[6]["CL"]));//二线16:00-17:00产量
  420. //}
  421. //else
  422. //{
  423. // SiemensS7.Write<short>("30.34", Convert.ToInt16(0));//二线16:00-17:00产量
  424. //}
  425. //if (twoDt != null && twoDt.Rows.Count > 7 && twoDt.Rows[7] != null && twoDt.Rows[7]["CL"].ToString() != "")
  426. //{
  427. // SiemensS7.Write<short>("30.36", Convert.ToInt16(twoDt.Rows[7]["CL"]));//二线17:00-18:00产量
  428. //}
  429. //else
  430. //{
  431. // SiemensS7.Write<short>("30.36", Convert.ToInt16(0));//二线17:00-18:00产量
  432. //}
  433. #endregion
  434. Logger.Debug("读取一线数据:" + SiemensS7.Read<short>("30.2", 0));
  435. SiemensS7.Close();
  436. Logger.Debug("发送LED数据完成!");
  437. }
  438. }