FlashLightForm.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. using Model;
  2. using PlcUiControl;
  3. using PlcUiForm;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.ComponentModel;
  7. using System.Data;
  8. using System.Drawing;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13. using YangjieTester.Properties;
  14. namespace YangjieTester.主界面
  15. {
  16. [FormDescriptionAttribute("跑马灯")]
  17. public partial class FlashLightForm : PlcBaseForm
  18. {
  19. PlcUiLight[] MainLights = new PlcUiLight[40];
  20. PlcUiLight[] TestLoadLights = new PlcUiLight[3];
  21. PlcUiLight[] TestUnloadLights = new PlcUiLight[3];
  22. PlcUiLight[] SubLights = new PlcUiLight[80];
  23. PlcUiLight[] LaserLights = new PlcUiLight[8];
  24. List<PlcUiLight> AllLights= new List<PlcUiLight>();
  25. List<PlcUiStateDisplay> AllStateDisplays = new List<PlcUiStateDisplay>();
  26. Dictionary<PlcUiLight,PlcUiStateDisplay> Lights_StateDisplays= new Dictionary<PlcUiLight, PlcUiStateDisplay>();
  27. public FlashLightForm()
  28. {
  29. for (int i = 0; i < MainLights.Length; i++)
  30. {
  31. MainLights[i] = new PlcUiLight();
  32. MainLights[i].Location = new Point(100, 100);
  33. MainLights[i].Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
  34. MainLights[i].MinimumSize = new System.Drawing.Size(1, 1);
  35. MainLights[i].MyTextAlign = System.Drawing.ContentAlignment.MiddleCenter;
  36. MainLights[i].Name = $"plcUiLight{i+1:D2}";
  37. MainLights[i].NodeName = $"{i + 1:D2}";
  38. MainLights[i].Off_Color = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140)))));
  39. MainLights[i].OffText = null;
  40. MainLights[i].On_Color = Color.Green;
  41. MainLights[i].OnText = null;
  42. MainLights[i].Radius = 35;
  43. MainLights[i].ReadNode = new Node($"Application.Var_state.RotorPieceInf[{i+1}].b_Exist", NodeType.UINT, "");
  44. MainLights[i].RequiredPermissionLevel = PermissionLevel.操作工;
  45. MainLights[i].ShowText = true;
  46. MainLights[i].Size = new System.Drawing.Size(30, 30);
  47. MainLights[i].State = Sunny.UI.UILightState.Off;
  48. MainLights[i].TabIndex = i+1;
  49. MainLights[i].Text = $"{i + 1:D2}";
  50. MainLights[i].TextCoverSymbol = true;
  51. MainLights[i].WriteNode = null;
  52. }
  53. this.Controls.AddRange(MainLights);
  54. for (int i = 0; i < TestLoadLights.Length; i++)
  55. {
  56. TestLoadLights[i] = new PlcUiLight();
  57. TestLoadLights[i].Location = new Point(100, 100);
  58. TestLoadLights[i].Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
  59. TestLoadLights[i].MinimumSize = new System.Drawing.Size(1, 1);
  60. TestLoadLights[i].MyTextAlign = System.Drawing.ContentAlignment.MiddleCenter;
  61. TestLoadLights[i].Name = $"plcUiLight{i + 1:D2}";
  62. TestLoadLights[i].NodeName = $"{i + 1:D2}";
  63. TestLoadLights[i].Off_Color = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140)))));
  64. TestLoadLights[i].OffText = null;
  65. TestLoadLights[i].On_Color = Color.Green;
  66. TestLoadLights[i].OnText = null;
  67. TestLoadLights[i].Radius = 35;
  68. TestLoadLights[i].ReadNode = new Node($"Application.GVL_A15_Auto.dutOutPut入料盘材料信息[{i + 1}].b_Exist", NodeType.UINT, "");
  69. TestLoadLights[i].RequiredPermissionLevel = PermissionLevel.操作工;
  70. TestLoadLights[i].ShowText = true;
  71. TestLoadLights[i].Size = new System.Drawing.Size(20, 20);
  72. TestLoadLights[i].State = Sunny.UI.UILightState.Off;
  73. TestLoadLights[i].TabIndex = i + 1;
  74. TestLoadLights[i].Text = $"{i + 1:D2}";
  75. TestLoadLights[i].TextCoverSymbol = true;
  76. TestLoadLights[i].WriteNode = null;
  77. }
  78. this.Controls.AddRange(TestLoadLights);
  79. for (int i = 0; i < TestUnloadLights.Length; i++)
  80. {
  81. TestUnloadLights[i] = new PlcUiLight();
  82. TestUnloadLights[i].Location = new Point(100, 100);
  83. TestUnloadLights[i].Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
  84. TestUnloadLights[i].MinimumSize = new System.Drawing.Size(1, 1);
  85. TestUnloadLights[i].MyTextAlign = System.Drawing.ContentAlignment.MiddleCenter;
  86. TestUnloadLights[i].Name = $"plcUiLight{i + 1:D2}";
  87. TestUnloadLights[i].NodeName = $"{i + 1:D2}";
  88. TestUnloadLights[i].Off_Color = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140)))));
  89. TestUnloadLights[i].OffText = null;
  90. TestUnloadLights[i].On_Color = Color.Green;
  91. TestUnloadLights[i].OnText = null;
  92. TestUnloadLights[i].Radius = 35;
  93. TestUnloadLights[i].ReadNode = new Node($"Application.GVL_A15_Auto.dutOutPut出料盘材料信息[{i + 1}].b_Exist", NodeType.UINT, "");
  94. TestUnloadLights[i].RequiredPermissionLevel = PermissionLevel.操作工;
  95. TestUnloadLights[i].ShowText = true;
  96. TestUnloadLights[i].Size = new System.Drawing.Size(20, 20);
  97. TestUnloadLights[i].State = Sunny.UI.UILightState.Off;
  98. TestUnloadLights[i].TabIndex = i + 1;
  99. TestUnloadLights[i].Text = $"{i + 1:D2}";
  100. TestUnloadLights[i].TextCoverSymbol = true;
  101. TestUnloadLights[i].WriteNode = null;
  102. }
  103. this.Controls.AddRange(TestUnloadLights);
  104. for (int i = 0; i < SubLights.Length; i++)
  105. {
  106. SubLights[i] = new PlcUiLight();
  107. SubLights[i].Location = new Point(100, 100);
  108. SubLights[i].Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
  109. SubLights[i].MinimumSize = new System.Drawing.Size(1, 1);
  110. SubLights[i].MyTextAlign = System.Drawing.ContentAlignment.MiddleCenter;
  111. SubLights[i].Name = $"plcUiLight{i + 1:D2}";
  112. SubLights[i].NodeName = $"{i + 1:D2}";
  113. SubLights[i].Off_Color = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140)))));
  114. SubLights[i].OffText = null;
  115. SubLights[i].On_Color = Color.Green;
  116. SubLights[i].OnText = null;
  117. SubLights[i].Radius = 35;
  118. SubLights[i].ReadNode = new Node($"Application.GVL_A15_Auto.dutOutPut热测盘材料信息[{i + 1}].b_Exist", NodeType.UINT, "");
  119. SubLights[i].RequiredPermissionLevel = PermissionLevel.操作工;
  120. SubLights[i].ShowText = true;
  121. SubLights[i].Size = new System.Drawing.Size(18, 18);
  122. SubLights[i].State = Sunny.UI.UILightState.Off;
  123. SubLights[i].TabIndex = i + 1;
  124. SubLights[i].Text = $"{i + 1:D2}";
  125. SubLights[i].TextCoverSymbol = true;
  126. SubLights[i].WriteNode = null;
  127. }
  128. this.Controls.AddRange(SubLights);
  129. for (int i = 0; i < LaserLights.Length; i++)
  130. {
  131. LaserLights[i] = new PlcUiLight();
  132. LaserLights[i].Location = new Point(100, 100);
  133. LaserLights[i].Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
  134. LaserLights[i].MinimumSize = new System.Drawing.Size(1, 1);
  135. LaserLights[i].MyTextAlign = System.Drawing.ContentAlignment.MiddleCenter;
  136. LaserLights[i].Name = $"plcUiLight{i + 1:D2}";
  137. LaserLights[i].NodeName = $"{i + 1:D2}";
  138. LaserLights[i].Off_Color = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140)))));
  139. LaserLights[i].OffText = null;
  140. LaserLights[i].On_Color = Color.Green;
  141. LaserLights[i].OnText = null;
  142. LaserLights[i].Radius = 35;
  143. LaserLights[i].ReadNode = new Node($"Application.GVL_A24_Auto.dutOutPut镭射盘材料信息[{i + 1}].b_Exist", NodeType.UINT, "");
  144. LaserLights[i].RequiredPermissionLevel = PermissionLevel.操作工;
  145. LaserLights[i].ShowText = true;
  146. LaserLights[i].Size = new System.Drawing.Size(20, 20);
  147. LaserLights[i].State = Sunny.UI.UILightState.Off;
  148. LaserLights[i].TabIndex = i + 1;
  149. LaserLights[i].Text = $"{i + 1:D2}";
  150. LaserLights[i].TextCoverSymbol = true;
  151. LaserLights[i].WriteNode = null;
  152. }
  153. this.Controls.AddRange(LaserLights);
  154. AllLights.AddRange(this.Controls.Cast<Control>().Select(c=>(PlcUiLight)c).ToList());
  155. var stateDisplayItems = new List<Item>(Destionations.Select(d => new Item() { State = d.destination.ToString(), Message = d.destination.ToString(), BackColor = Color.White, ForeColor = Color.Black, Blink = false }).ToList());
  156. AllStateDisplays.AddRange(AllLights.Select(light=> {
  157. var s = new PlcUiStateDisplay()
  158. {
  159. BorderStyle = BorderStyle.FixedSingle,
  160. TextAlign = ContentAlignment.MiddleCenter,
  161. Location = new Point(light.Right + 5, light.Top),
  162. Font = light.Font,
  163. MinimumSize = new System.Drawing.Size(1, 1),
  164. Name = $"plcUiStateDisplay_{light.Name}",
  165. //ReadNode = new Node(ReplaceAfterLastDot(light.ReadNode.Value, "Goal"), NodeType.UINT, ""),
  166. ReadNode = new Node(light.ReadNode.Value.Replace("b_Exist","Goal"), NodeType.UINT, ""),
  167. RequiredPermissionLevel = 0,
  168. Size = light.Size,
  169. TabIndex = light.TabIndex + 1000,
  170. Items = stateDisplayItems
  171. };
  172. Lights_StateDisplays.Add(light, s);
  173. return s;
  174. }).ToList());
  175. this.Controls.AddRange(AllStateDisplays.ToArray());
  176. AllStateDisplays.ForEach(s => s.Visible=false);
  177. InitializeComponent();
  178. CircleMain.PaintCompleted += CircleMain_PaintCompleted;
  179. CircleLoad.PaintCompleted += CircleLoad_PaintCompleted;
  180. CircleUnload.PaintCompleted += CircleUnload_PaintCompleted;
  181. CircleSub.PaintCompleted += CircleSub_PaintCompleted;
  182. CircleLaser.PaintCompleted += CircleLaser_PaintCompleted;
  183. }
  184. public static string ReplaceAfterLastDot(string input, string newSuffix)
  185. {
  186. if (string.IsNullOrEmpty(input))
  187. return input;
  188. int lastDotIndex = input.LastIndexOf('.');
  189. if (lastDotIndex == -1)
  190. return newSuffix; // 没有 '.',整个字符串视为后缀
  191. return input.Substring(0, lastDotIndex + 1) + newSuffix;
  192. }
  193. List<(int destination, string alias)> Destionations = new List<(int, string)>()
  194. {
  195. (0,""),
  196. (1,"编带1"),
  197. (2,"编带2"),
  198. (11,"料盒1-1"),
  199. (12,"料盒1-21"),
  200. (13,"料盒1-3"),
  201. (14,"料盒1-4"),
  202. (21,"料盒2-1"),
  203. (22,"料盒2-2"),
  204. (23,"料盒2-3"),
  205. (24,"料盒2-4"),
  206. (31,"料盒3-1"),
  207. (32,"料盒3-2"),
  208. (33,"料盒3-3"),
  209. (34,"料盒3-4"),
  210. (41,"料盒4-1"),
  211. (42,"料盒4-2"),
  212. (43,"料盒4-3"),
  213. (44,"料盒4-4"),
  214. };
  215. private void CircleMain_PaintCompleted(object sender, EventArgs e)
  216. {
  217. for (int i = 0; i < CircleMain.Points.Count; i++)
  218. {
  219. MainLights[i].Left = CircleMain.Left + CircleMain.Points[i].X - MainLights[i].Width / 2;
  220. MainLights[i].Top = CircleMain.Top + CircleMain.Points[i].Y - MainLights[i].Height / 2;
  221. Lights_StateDisplays[MainLights[i]].Location = MainLights[i].Location;
  222. }
  223. }
  224. private void CircleLoad_PaintCompleted(object sender, EventArgs e)
  225. {
  226. for (int i = 0; i < CircleLoad.Points.Count; i++)
  227. {
  228. TestLoadLights[i].Left = CircleLoad.Left + CircleLoad.Points[i].X - TestLoadLights[i].Width / 2;
  229. TestLoadLights[i].Top = CircleLoad.Top + CircleLoad.Points[i].Y - TestLoadLights[i].Height / 2;
  230. Lights_StateDisplays[TestLoadLights[i]].Location = TestLoadLights[i].Location;
  231. }
  232. }
  233. private void CircleUnload_PaintCompleted(object sender, EventArgs e)
  234. {
  235. for (int i = 0; i < CircleUnload.Points.Count; i++)
  236. {
  237. TestUnloadLights[i].Left = CircleUnload.Left + CircleUnload.Points[i].X - TestUnloadLights[i].Width / 2;
  238. TestUnloadLights[i].Top = CircleUnload.Top + CircleUnload.Points[i].Y - TestUnloadLights[i].Height / 2;
  239. Lights_StateDisplays[TestUnloadLights[i]].Location = TestUnloadLights[i].Location;
  240. }
  241. }
  242. private void CircleSub_PaintCompleted(object sender, EventArgs e)
  243. {
  244. for (int i = 0; i < CircleSub.Points.Count; i++)
  245. {
  246. SubLights[i].Left = CircleSub.Left + CircleSub.Points[i].X - SubLights[i].Width / 2;
  247. SubLights[i].Top = CircleSub.Top + CircleSub.Points[i].Y - SubLights[i].Height / 2;
  248. Lights_StateDisplays[SubLights[i]].Location = SubLights[i].Location;
  249. }
  250. }
  251. private void CircleLaser_PaintCompleted(object sender, EventArgs e)
  252. {
  253. for (int i = 0; i < CircleLaser.Points.Count; i++)
  254. {
  255. LaserLights[i].Left = CircleLaser.Left + CircleLaser.Points[i].X - LaserLights[i].Width / 2;
  256. LaserLights[i].Top = CircleLaser.Top + CircleLaser.Points[i].Y - LaserLights[i].Height / 2;
  257. Lights_StateDisplays[LaserLights[i]].Location = LaserLights[i].Location;
  258. }
  259. }
  260. private void uiSwitch1_ValueChanged(object sender, bool value)
  261. {
  262. AllStateDisplays.ForEach(s => s.Visible = uiSwitch1.Active);
  263. AllLights.ForEach(l => l.Visible = !uiSwitch1.Active);
  264. lblDestinationDefine.Visible = uiSwitch1.Active;
  265. }
  266. }
  267. }