Form_PLCDB.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565
  1. using StandardLibrary;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. namespace MainForm.FaForm
  12. {
  13. public partial class Form_PLCDB : Form
  14. {
  15. #region 变量
  16. /// <summary>
  17. /// 日志
  18. /// </summary>
  19. public event AlarmMessageHandler MessageEvent;
  20. // string stationName = "[S1]壳体上料";
  21. // [S2]上盖上料
  22. // [S3]点胶
  23. // [S4]胶线检测
  24. // [S5]ADD板上料
  25. // [S6]上盖组装
  26. // [S7]锁螺丝
  27. // [S8]NG下料
  28. // [S9]OK下料
  29. // 192, 255, 192绿色
  30. #endregion 变量
  31. public Form_PLCDB()
  32. {
  33. InitializeComponent();
  34. }
  35. private void Form_PLCDB_Load(object sender, EventArgs e)
  36. {
  37. try
  38. {
  39. #region 页面样式
  40. cmb_SimpleStationName.SelectedIndex = 0;
  41. // dgv_S0
  42. dgv_S0.ColumnHeadersDefaultCellStyle.BackColor = Color.WhiteSmoke;
  43. dgv_S0.ColumnHeadersDefaultCellStyle.ForeColor = Color.Black;
  44. dgv_S0.RectColor = Color.Gainsboro;
  45. dgv_S0.GridColor = Color.Gainsboro;
  46. dgv_S0.BackgroundColor = Color.White;
  47. // dgv_S1
  48. dgv_S1.ColumnHeadersDefaultCellStyle.BackColor = Color.WhiteSmoke;
  49. dgv_S1.ColumnHeadersDefaultCellStyle.ForeColor = Color.Black;
  50. dgv_S1.RectColor = Color.Gainsboro;
  51. dgv_S1.GridColor = Color.Gainsboro;
  52. dgv_S1.BackgroundColor = Color.White;
  53. // dgv_S2
  54. dgv_S2.ColumnHeadersDefaultCellStyle.BackColor = Color.WhiteSmoke;
  55. dgv_S2.ColumnHeadersDefaultCellStyle.ForeColor = Color.Black;
  56. dgv_S2.RectColor = Color.Gainsboro;
  57. dgv_S2.GridColor = Color.Gainsboro;
  58. dgv_S2.BackgroundColor = Color.White;
  59. // dgv_S3
  60. dgv_S3.ColumnHeadersDefaultCellStyle.BackColor = Color.WhiteSmoke;
  61. dgv_S3.ColumnHeadersDefaultCellStyle.ForeColor = Color.Black;
  62. dgv_S3.RectColor = Color.Gainsboro;
  63. dgv_S3.GridColor = Color.Gainsboro;
  64. dgv_S3.BackgroundColor = Color.White;
  65. // dgv_S4
  66. dgv_S4.ColumnHeadersDefaultCellStyle.BackColor = Color.WhiteSmoke;
  67. dgv_S4.ColumnHeadersDefaultCellStyle.ForeColor = Color.Black;
  68. dgv_S4.RectColor = Color.Gainsboro;
  69. dgv_S4.GridColor = Color.Gainsboro;
  70. dgv_S4.BackgroundColor = Color.White;
  71. // dgv_S5
  72. dgv_S5.ColumnHeadersDefaultCellStyle.BackColor = Color.WhiteSmoke;
  73. dgv_S5.ColumnHeadersDefaultCellStyle.ForeColor = Color.Black;
  74. dgv_S5.RectColor = Color.Gainsboro;
  75. dgv_S5.GridColor = Color.Gainsboro;
  76. dgv_S5.BackgroundColor = Color.White;
  77. // dgv_S6
  78. dgv_S6.ColumnHeadersDefaultCellStyle.BackColor = Color.WhiteSmoke;
  79. dgv_S6.ColumnHeadersDefaultCellStyle.ForeColor = Color.Black;
  80. dgv_S6.RectColor = Color.Gainsboro;
  81. dgv_S6.GridColor = Color.Gainsboro;
  82. dgv_S6.BackgroundColor = Color.White;
  83. // dgv_S7
  84. dgv_S7.ColumnHeadersDefaultCellStyle.BackColor = Color.WhiteSmoke;
  85. dgv_S7.ColumnHeadersDefaultCellStyle.ForeColor = Color.Black;
  86. dgv_S7.RectColor = Color.Gainsboro;
  87. dgv_S7.GridColor = Color.Gainsboro;
  88. dgv_S7.BackgroundColor = Color.White;
  89. // dgv_S8
  90. dgv_S8.ColumnHeadersDefaultCellStyle.BackColor = Color.WhiteSmoke;
  91. dgv_S8.ColumnHeadersDefaultCellStyle.ForeColor = Color.Black;
  92. dgv_S8.RectColor = Color.Gainsboro;
  93. dgv_S8.GridColor = Color.Gainsboro;
  94. dgv_S8.BackgroundColor = Color.White;
  95. #endregion 页面样式
  96. }
  97. catch (Exception ex)
  98. {
  99. string str = ex.StackTrace;
  100. MessageBox.Show("PLC交互页面初始化出错!异常信息:" + ex.Message);
  101. AddMessage(LogType.Error, "PLC交互页面初始化出错!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  102. }
  103. }
  104. #region 单工位操作
  105. /// <summary>
  106. /// 连接
  107. /// </summary>
  108. private void Btn_SimpleStationConnect_Click(object sender, EventArgs e)
  109. {
  110. string plcControl = cmb_SimpleStationName.Text.Trim();
  111. switch (plcControl)
  112. {
  113. case "[S1]壳体上料":
  114. GlobalContext._IsCon_Funs1 = true;
  115. break;
  116. case "[S2]上盖上料":
  117. GlobalContext._IsCon_Funs2 = true;
  118. break;
  119. case "[S3]点胶":
  120. GlobalContext._IsCon_Funs3 = true;
  121. break;
  122. case "[S4]胶线检测":
  123. GlobalContext._IsCon_Funs4 = true;
  124. break;
  125. case "[S5]ADD板上料":
  126. GlobalContext._IsCon_Funs5 = true;
  127. break;
  128. case "[S6]上盖组装":
  129. GlobalContext._IsCon_Funs6 = true;
  130. break;
  131. case "[S7]锁螺丝":
  132. GlobalContext._IsCon_Funs7 = true;
  133. break;
  134. case "[S8]NG下料":
  135. GlobalContext._IsCon_Funs8 = true;
  136. break;
  137. case "[S9]OK下料":
  138. GlobalContext._IsCon_Funs9 = true;
  139. break;
  140. case "独立线程-上位机心跳":
  141. GlobalContext._IsCon_plc1Heat = true;
  142. break;
  143. case "独立线程-采集设备状态与报警":
  144. GlobalContext._IsCon_plc1Alarm = true;
  145. break;
  146. default:
  147. break;
  148. }
  149. AddMessage(LogType.Info, $"用户【{currentRole}】启用了工位【{plcControl}】的运行!本次有效!");
  150. }
  151. /// <summary>
  152. /// 断开连接
  153. /// </summary>
  154. private void Btn_SimpleStationDisconnect_Click(object sender, EventArgs e)
  155. {
  156. string plcControl = cmb_SimpleStationName.Text.Trim();
  157. switch (plcControl)
  158. {
  159. case "[S1]壳体上料":
  160. GlobalContext._IsCon_Funs1 = false;
  161. break;
  162. case "[S2]上盖上料":
  163. GlobalContext._IsCon_Funs2 = false;
  164. break;
  165. case "[S3]点胶":
  166. GlobalContext._IsCon_Funs3 = false;
  167. break;
  168. case "[S4]胶线检测":
  169. GlobalContext._IsCon_Funs4 = false;
  170. break;
  171. case "[S5]ADD板上料":
  172. GlobalContext._IsCon_Funs5 = false;
  173. break;
  174. case "[S6]上盖组装":
  175. GlobalContext._IsCon_Funs6 = false;
  176. break;
  177. case "[S7]锁螺丝":
  178. GlobalContext._IsCon_Funs7 = false;
  179. break;
  180. case "[S8]NG下料":
  181. GlobalContext._IsCon_Funs8 = false;
  182. break;
  183. case "[S9]OK下料":
  184. GlobalContext._IsCon_Funs9 = false;
  185. break;
  186. case "独立线程-上位机心跳":
  187. GlobalContext._IsCon_plc1Heat = false;
  188. break;
  189. case "独立线程-采集设备状态与报警":
  190. GlobalContext._IsCon_plc1Alarm = false;
  191. break;
  192. default:
  193. break;
  194. }
  195. AddMessage(LogType.Info, $"用户【{currentRole}】屏蔽了工位【{plcControl}】的运行!本次有效!");
  196. }
  197. /// <summary>
  198. /// 查看实时数据
  199. /// </summary>
  200. private void Btn_SimpleStationDBView_Click(object sender, EventArgs e)
  201. {
  202. try
  203. {
  204. string stationName = cmb_SimpleStationName.Text.Trim();
  205. Form_PLCDB_ShowInfo plcDB_ShowInfo = Form_PLCDB_ShowInfo.Singleton(stationName,this);
  206. AddMessage(LogType.Info, $"用户【{currentRole}】查看了各工位的实时数据!");
  207. plcDB_ShowInfo.ShowDialog();
  208. }
  209. catch (Exception ex)
  210. {
  211. string str = ex.StackTrace;
  212. MessageBox.Show("PLC交互页面初始化出错!异常信息:" + ex.Message);
  213. AddMessage(LogType.Error, "PLC交互页面初始化出错!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  214. }
  215. }
  216. #endregion 单工位操作
  217. #region 整线工位操作
  218. /// <summary>
  219. /// 连接
  220. /// </summary>
  221. private void Btn_WholeLineConnect_Click(object sender, EventArgs e)
  222. {
  223. GlobalContext._IsCon_Funs1 = true;
  224. GlobalContext._IsCon_Funs2 = true;
  225. GlobalContext._IsCon_Funs3 = true;
  226. GlobalContext._IsCon_Funs4 = true;
  227. GlobalContext._IsCon_Funs5 = true;
  228. GlobalContext._IsCon_Funs6 = true;
  229. GlobalContext._IsCon_Funs7 = true;
  230. GlobalContext._IsCon_Funs8 = true;
  231. GlobalContext._IsCon_Funs9 = true;
  232. GlobalContext._IsCon_plc1Heat = true;
  233. GlobalContext._IsCon_plc1Alarm = true;
  234. AddMessage(LogType.Info, $"用户【{currentRole}】启用了所有工位的运行!本次有效!");
  235. }
  236. /// <summary>
  237. /// 断开连接
  238. /// </summary>
  239. private void Btn_WholeLineDisconnect_Click(object sender, EventArgs e)
  240. {
  241. GlobalContext._IsCon_Funs1 = false;
  242. GlobalContext._IsCon_Funs2 = false;
  243. GlobalContext._IsCon_Funs3 = false;
  244. GlobalContext._IsCon_Funs4 = false;
  245. GlobalContext._IsCon_Funs5 = false;
  246. GlobalContext._IsCon_Funs6 = false;
  247. GlobalContext._IsCon_Funs7 = false;
  248. GlobalContext._IsCon_Funs8 = false;
  249. GlobalContext._IsCon_Funs9 = false;
  250. GlobalContext._IsCon_plc1Heat = false;
  251. GlobalContext._IsCon_plc1Alarm = false;
  252. AddMessage(LogType.Info, $"用户【{currentRole}】屏蔽了所有工位的运行!本次有效!");
  253. }
  254. /// <summary>
  255. /// 重新连接
  256. /// </summary>
  257. private void Btn_WholeLineRConnect_Click(object sender, EventArgs e)
  258. {
  259. GlobalContext._IsCon_Funs1 = true;
  260. GlobalContext._IsCon_Funs2 = true;
  261. GlobalContext._IsCon_Funs3 = true;
  262. GlobalContext._IsCon_Funs4 = true;
  263. GlobalContext._IsCon_Funs5 = true;
  264. GlobalContext._IsCon_Funs6 = true;
  265. GlobalContext._IsCon_Funs7 = true;
  266. GlobalContext._IsCon_Funs8 = true;
  267. GlobalContext._IsCon_Funs9 = true;
  268. GlobalContext._IsCon_plc1Heat = true;
  269. GlobalContext._IsCon_plc1Alarm = true;
  270. AddMessage(LogType.Info, $"用户【{currentRole}】重新启用了所有工位的运行!本次有效!");
  271. }
  272. #endregion 整线工位操作
  273. /// <summary>
  274. /// 更新PLC方法运行状态的UI
  275. /// </summary>
  276. /// <param name="no">PLC编号</param>
  277. /// <param name="status">状态</param>
  278. public void UpdatePLCFunMonitor(int no, int status)
  279. {
  280. try
  281. {
  282. if (this.InvokeRequired) // 当前线程不是控件UI线程时为true
  283. {
  284. this.Invoke(new Action<int, int>(UpdatePLCFunMonitor), no, status);
  285. return;
  286. }
  287. // 255, 192, 192红色
  288. // 192, 255, 192绿色
  289. switch (no)
  290. {
  291. case -1: // plc1Heat 独立线程-上位机心跳
  292. LedB_Heat.Color = status == 1 ? Color.FromArgb(192, 255, 192) : Color.FromArgb(255, 192, 192);
  293. break;
  294. case -2: // plc1Alarm 独立线程-采集设备状态与报警
  295. LedB_Alarm.Color = status == 1 ? Color.FromArgb(192, 255, 192) : Color.FromArgb(255, 192, 192);
  296. break;
  297. case 1: // [S0]壳体清洁上料
  298. LedB_S0.Color = status == 1 ? Color.FromArgb(192, 255, 192) : Color.FromArgb(255, 192, 192);
  299. break;
  300. case 2: // [S1]顶盖上料
  301. LedB_S1.Color = status == 1 ? Color.FromArgb(192, 255, 192) : Color.FromArgb(255, 192, 192);
  302. break;
  303. case 3: // [S2]点胶设备
  304. LedB_S2.Color = status == 1 ? Color.FromArgb(192, 255, 192) : Color.FromArgb(255, 192, 192);
  305. break;
  306. case 4: // [S3]OP40 胶线检测设备
  307. LedB_S3.Color = status == 1 ? Color.FromArgb(192, 255, 192) : Color.FromArgb(255, 192, 192);
  308. break;
  309. case 5: // [S4]OP50 ADD PCB板上料设备
  310. LedB_S4.Color = status == 1 ? Color.FromArgb(192, 255, 192) : Color.FromArgb(255, 192, 192);
  311. break;
  312. case 6: // [S5]OP60 顶盖组装
  313. LedB_S5.Color = status == 1 ? Color.FromArgb(192, 255, 192) : Color.FromArgb(255, 192, 192);
  314. break;
  315. case 7: // [S6]OP70 锁螺丝设备
  316. LedB_S6.Color = status == 1 ? Color.FromArgb(192, 255, 192) : Color.FromArgb(255, 192, 192);
  317. break;
  318. case 8: // [S7]OP80 3D螺丝高度检测,NG出料设备
  319. LedB_S7.Color = status == 1 ? Color.FromArgb(192, 255, 192) : Color.FromArgb(255, 192, 192);
  320. break;
  321. case 9: // [S8]OP90 下料设备
  322. LedB_S8.Color = status == 1 ? Color.FromArgb(192, 255, 192) : Color.FromArgb(255, 192, 192);
  323. break;
  324. default:
  325. break;
  326. }
  327. }
  328. catch (Exception ex)
  329. {
  330. string str = ex.StackTrace;
  331. AddMessage(LogType.Error, "更新PLC交互页_PLC运行状态UI出错!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  332. }
  333. }
  334. /// <summary>
  335. /// 测试“展示事件记录”
  336. /// </summary>
  337. private void button1_Click(object sender, EventArgs e)
  338. {
  339. UpdateMessage(new PLCDBFormMessage()
  340. {
  341. StationName= "[S1]壳体上料",
  342. SnNumber="SN01",
  343. Message= "[S1]壳体上料-测试信息",
  344. CreateTime=DateTime.Now
  345. });
  346. UpdateMessage(new PLCDBFormMessage()
  347. {
  348. StationName = "[S2]上盖上料",
  349. SnNumber = "SN02",
  350. Message = "[S2]上盖上料-测试信息",
  351. CreateTime = DateTime.Now
  352. });
  353. UpdateMessage(new PLCDBFormMessage()
  354. {
  355. StationName = "[S3]点胶",
  356. SnNumber = "SN03",
  357. Message = "[S3]点胶-测试信息",
  358. CreateTime = DateTime.Now
  359. });
  360. UpdateMessage(new PLCDBFormMessage()
  361. {
  362. StationName = "[S4]胶线检测",
  363. SnNumber = "SN04",
  364. Message = "[S4]胶线检测-测试信息",
  365. CreateTime = DateTime.Now
  366. });
  367. UpdateMessage(new PLCDBFormMessage()
  368. {
  369. StationName = "[S5]ADD板上料",
  370. SnNumber = "SN05",
  371. Message = "[S5]ADD板上料-测试信息",
  372. CreateTime = DateTime.Now
  373. });
  374. UpdateMessage(new PLCDBFormMessage()
  375. {
  376. StationName = "[S6]上盖组装",
  377. SnNumber = "SN06",
  378. Message = "[S6]上盖组装-测试信息",
  379. CreateTime = DateTime.Now
  380. });
  381. UpdateMessage(new PLCDBFormMessage()
  382. {
  383. StationName = "[S7]锁螺丝",
  384. SnNumber = "SN07",
  385. Message = "[S7]锁螺丝-测试信息",
  386. CreateTime = DateTime.Now
  387. });
  388. UpdateMessage(new PLCDBFormMessage()
  389. {
  390. StationName = "[S8]NG下料",
  391. SnNumber = "SN08",
  392. Message = "[S8]NG下料-测试信息",
  393. CreateTime = DateTime.Now
  394. });
  395. UpdateMessage(new PLCDBFormMessage()
  396. {
  397. StationName = "[S9]NG下料",
  398. SnNumber = "SN09",
  399. Message = "[S9]NG下料-测试信息",
  400. CreateTime = DateTime.Now
  401. });
  402. }
  403. /// <summary>
  404. /// 展示事件记录
  405. /// </summary>
  406. /// <param name="stationName">工站</param>
  407. /// <param name="snNumber">产品数字SN</param>
  408. /// <param name="message"></param>
  409. public void UpdateMessage(PLCDBFormMessage plCMessage)
  410. {
  411. try
  412. {
  413. if (this.InvokeRequired) // 当前线程不是控件UI线程时为true
  414. {
  415. this.Invoke(new Action<PLCDBFormMessage>(UpdateMessage), plCMessage);
  416. return;
  417. }
  418. switch (plCMessage.StationName)
  419. {
  420. /// [S1]壳体上料
  421. /// [S2]上盖上料
  422. /// [S3]点胶
  423. /// [S4]胶线检测
  424. /// [S5]ADD板上料
  425. /// [S6]上盖组装
  426. /// [S7]锁螺丝
  427. /// [S8]NG下料
  428. /// [S9]OK下料
  429. /// 上位机心跳
  430. /// 获取设备报警数据与状态信息
  431. case "[S1]壳体上料":
  432. dgv_S0.Rows.Insert(0, plCMessage.SnNumber, plCMessage.Message, plCMessage.CreateTime.ToString("yyyy/MM/dd HH:mm:ss:fff"));
  433. if (dgv_S0.Rows.Count >= 100)
  434. dgv_S0.Rows.RemoveAt(dgv_S0.Rows.Count - 1);
  435. break;
  436. case "[S2]上盖上料":
  437. dgv_S1.Rows.Insert(0, plCMessage.SnNumber, plCMessage.Message, plCMessage.CreateTime.ToString("yyyy/MM/dd HH:mm:ss:fff"));
  438. if (dgv_S1.Rows.Count >= 100)
  439. dgv_S1.Rows.RemoveAt(dgv_S1.Rows.Count - 1);
  440. break;
  441. case "[S3]点胶":
  442. dgv_S2.Rows.Insert(0, plCMessage.SnNumber, plCMessage.Message, plCMessage.CreateTime.ToString("yyyy/MM/dd HH:mm:ss:fff"));
  443. if (dgv_S2.Rows.Count >= 100)
  444. dgv_S2.Rows.RemoveAt(dgv_S2.Rows.Count - 1);
  445. break;
  446. case "[S4]胶线检测":
  447. dgv_S3.Rows.Insert(0, plCMessage.SnNumber, plCMessage.Message, plCMessage.CreateTime.ToString("yyyy/MM/dd HH:mm:ss:fff"));
  448. if (dgv_S3.Rows.Count >= 100)
  449. dgv_S3.Rows.RemoveAt(dgv_S3.Rows.Count - 1);
  450. break;
  451. case "[S5]ADD板上料":
  452. dgv_S4.Rows.Insert(0, plCMessage.SnNumber, plCMessage.Message, plCMessage.CreateTime.ToString("yyyy/MM/dd HH:mm:ss:fff"));
  453. if (dgv_S4.Rows.Count >= 100)
  454. dgv_S4.Rows.RemoveAt(dgv_S4.Rows.Count - 1);
  455. break;
  456. case "[S6]上盖组装":
  457. dgv_S5.Rows.Insert(0, plCMessage.SnNumber, plCMessage.Message, plCMessage.CreateTime.ToString("yyyy/MM/dd HH:mm:ss:fff"));
  458. if (dgv_S5.Rows.Count >= 100)
  459. dgv_S5.Rows.RemoveAt(dgv_S5.Rows.Count - 1);
  460. break;
  461. case "[S7]锁螺丝":
  462. dgv_S6.Rows.Insert(0, plCMessage.SnNumber, plCMessage.Message, plCMessage.CreateTime.ToString("yyyy/MM/dd HH:mm:ss:fff"));
  463. if (dgv_S6.Rows.Count >= 100)
  464. dgv_S6.Rows.RemoveAt(dgv_S6.Rows.Count - 1);
  465. break;
  466. case "[S8]NG下料":
  467. dgv_S7.Rows.Insert(0, plCMessage.SnNumber, plCMessage.Message, plCMessage.CreateTime.ToString("yyyy/MM/dd HH:mm:ss:fff"));
  468. if (dgv_S7.Rows.Count >= 100)
  469. dgv_S7.Rows.RemoveAt(dgv_S7.Rows.Count - 1);
  470. break;
  471. case "[S9]OK下料":
  472. dgv_S8.Rows.Insert(0, plCMessage.SnNumber, plCMessage.Message, plCMessage.CreateTime.ToString("yyyy/MM/dd HH:mm:ss:fff"));
  473. if (dgv_S8.Rows.Count >= 100)
  474. dgv_S8.Rows.RemoveAt(dgv_S8.Rows.Count - 1);
  475. break;
  476. //case "上位机心跳":
  477. // dgv_S0.Rows.Insert(0, plCMessage.SnNumber, plCMessage.Message, plCMessage.CreateTime.ToString("yyyy/MM/dd HH:mm:ss:fff"));
  478. // if (dgv_S0.Rows.Count >= 100)
  479. // dgv_S0.Rows.RemoveAt(dgv_S0.Rows.Count - 1);
  480. // break;
  481. //case "获取设备报警数据与状态信息":
  482. // dgv_S0.Rows.Insert(0, plCMessage.SnNumber, plCMessage.Message, plCMessage.CreateTime.ToString("yyyy/MM/dd HH:mm:ss:fff"));
  483. // if (dgv_S0.Rows.Count >= 100)
  484. // dgv_S0.Rows.RemoveAt(dgv_S0.Rows.Count - 1);
  485. // break;
  486. default:
  487. break;
  488. }
  489. }
  490. catch (Exception ex)
  491. {
  492. string str = ex.StackTrace;
  493. AddMessage(LogType.Error, "更新PLC交互页_事件记录UI出错!异常位置:" + str.Substring(str.LastIndexOf("\\") + 1, str.Length - str.LastIndexOf("\\") - 1) + ";异常信息:" + ex.Message.ToString());
  494. }
  495. }
  496. #region 记录
  497. public void AddMessage(LogType logType, string msg)
  498. {
  499. MessageEvent?.Invoke(logType, msg);
  500. }
  501. /// <summary>
  502. /// 当前用户的角色
  503. /// </summary>
  504. public string currentRole = "";
  505. /// <summary>
  506. /// 改变用户时更新页面
  507. /// </summary>
  508. /// <param name="user">用户信息</param>
  509. public void ForUserChangeToUpdate(User user)
  510. {
  511. currentRole = user.ToString();
  512. }
  513. #endregion 记录
  514. }
  515. /// <summary>
  516. /// PLC交互页-事件记录展示实体
  517. /// </summary>
  518. public class PLCDBFormMessage
  519. {
  520. /// <summary>
  521. /// 工位名称
  522. /// [S1]壳体上料
  523. /// [S2]上盖上料
  524. /// [S3]点胶
  525. /// [S4]胶线检测
  526. /// [S5]ADD板上料
  527. /// [S6]上盖组装
  528. /// [S7]锁螺丝
  529. /// [S8]NG下料
  530. /// [S9]OK下料
  531. /// 上位机心跳
  532. /// 获取设备报警数据与状态信息
  533. /// </summary>
  534. public string StationName{get;set;}
  535. /// <summary>
  536. /// 产品数字SN
  537. /// </summary>
  538. public string SnNumber { get; set; }
  539. /// <summary>
  540. /// 信息
  541. /// </summary>
  542. public string Message { get; set; }
  543. /// <summary>
  544. /// 发生时间
  545. /// </summary>
  546. public DateTime CreateTime { get; set; }
  547. }
  548. }