版博士V2.0程序
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 

208 líneas
7.1 KiB

  1. using MaiMuAOI.SysCtrl;
  2. using MaiMuAOI.SysUI.DefectPicShow;
  3. using MaiMuAOI.SysUI.SysSet;
  4. using MaiMuControl.Device.IOCardDev;
  5. using MaiMuControl.Utils;
  6. using Newtonsoft.Json;
  7. using Newtonsoft.Json.Linq;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.ComponentModel;
  11. using System.Data;
  12. using System.Drawing;
  13. using System.IO;
  14. using System.Linq;
  15. using System.Security.Cryptography;
  16. using System.Text;
  17. using System.Threading;
  18. using System.Threading.Tasks;
  19. using System.Windows.Forms;
  20. using System.Xml.Linq;
  21. namespace ProductionControl.UI
  22. {
  23. public partial class UIIOCardDev : UserControl
  24. {
  25. SynchronizationContext SyncContext = null;
  26. public Action<string> GetParamsEvent;
  27. //
  28. private IOCardDevProp prop = new IOCardDevProp(ConfMgr.Instance.SysConfigParams.IODevName);
  29. private IOCardDev _dev;
  30. public Action IOOutEvent;
  31. public UIIOCardDev(IOCardDev dev)
  32. {
  33. InitializeComponent();
  34. _dev = dev;
  35. propertyGrid1.PropertyValueChanged += propertyGrid1_PropertyValueChanged;
  36. refreshUIState();
  37. //获取UI线程同步上下文
  38. SyncContext = SynchronizationContext.Current;
  39. //init();
  40. }
  41. private void refreshUIState()
  42. {
  43. foreach (ToolStripItem item in this.toolStrip1.Items)
  44. {
  45. if (item.Text == "打开设备")
  46. item.Visible = (_dev == null );
  47. else
  48. this.propertyGrid1.Enabled = item.Enabled = !(_dev == null);
  49. }
  50. }
  51. public void init()
  52. {
  53. this.tbtnSave.Visible = tssSave.Visible = (GetParamsEvent != null);
  54. this.propertyGrid1.SelectedObject = prop;
  55. //prop.IN = new byte[_dev.GetDIPortCount()];
  56. //prop.OUT = new byte[_dev.GetDOPortCount()];
  57. prop.IN = new byte[4];
  58. prop.OUT = new byte[4];
  59. this.refreshUI();
  60. refreshUIState();
  61. }
  62. public string getParamsData()
  63. {
  64. return prop.serialize();
  65. }
  66. public void setParamsData(string json)
  67. {
  68. if (json == "") return;
  69. prop.deserialize(json);
  70. this.propertyGrid1.Refresh();
  71. }
  72. private void refreshUI()
  73. {
  74. SyncContext.Post(m =>
  75. {
  76. var result = m as string;
  77. propertyGrid1.Refresh();
  78. //tbtnJogOnOff.Text = (prop.AxState == AxisState.STA_AX_EXT_JOG) ? "关闭Jog" : "开启Jog";
  79. //tbtnLeft.Enabled = tbtnRight.Enabled = (prop.AxState == AxisState.STA_AX_EXT_JOG);
  80. }, "异步操作完成结果");
  81. }
  82. private void closeDev()
  83. {
  84. //try
  85. //{
  86. // if (dev == null)
  87. // return;
  88. // dev.stop();
  89. //}
  90. //catch (Exception ex)
  91. //{
  92. // refreshUIState();
  93. // MessageBox.Show(ex.Message, "失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
  94. //}
  95. }
  96. protected override void OnHandleDestroyed(EventArgs e)
  97. {
  98. base.OnHandleDestroyed(e);
  99. // 在此添加需要手动释放资源的代码
  100. this.closeDev();
  101. if(frm!=null)
  102. frm.Close();
  103. }
  104. private void tbtnExport_Click(object sender, EventArgs e)
  105. {
  106. this.propertyGrid1.Refresh();
  107. string filePath = ConfMgr.SaveAsFile($"IOCard配置.json", "JSON|*.json");
  108. if (filePath != "")
  109. {
  110. string jsonText = prop.serialize();
  111. File.WriteAllText(filePath, jsonText);
  112. MessageBox.Show("保存成功!", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
  113. }
  114. }
  115. private void tbtnImport_Click(object sender, EventArgs e)
  116. {
  117. string filePath = ConfMgr.SelectFile("JSON|*.json");
  118. if (filePath != "")
  119. {
  120. string jsonText = File.ReadAllText(filePath);
  121. prop.deserialize(jsonText);
  122. this.propertyGrid1.Refresh();
  123. //this.propertyGrid1.SelectedObject= prop;
  124. //MessageBox.Show("加载成功!", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
  125. }
  126. }
  127. private void propertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
  128. {
  129. //其中包含了两个重要的属性:OldValue和ChangeItem。
  130. //ChangeItem是“PropertyDescriptorGridEntry”类型。一般可以通过ChangeItem.PropertyDescriptor.ComponentType查找到属性的实际类型。
  131. //而通过ChangeItem的Label,则可以查看到当前在属性编辑输入框中显示的值。
  132. string className = e.ChangedItem.PropertyDescriptor.ComponentType.Name;
  133. string propertyName = e.ChangedItem.PropertyDescriptor.Name;
  134. var oldValue = e.OldValue;
  135. var newValue = e.ChangedItem.Value;
  136. switch (propertyName)
  137. {
  138. case "AxisIndex"://prop.propName
  139. //refreshAxisVelParam();
  140. break;
  141. }
  142. }
  143. private void tbtnSave_Click(object sender, EventArgs e)
  144. {
  145. GetParamsEvent?.Invoke(prop.serialize());
  146. }
  147. private void tsbtnOpenDev_Click(object sender, EventArgs e)
  148. {
  149. this.init();
  150. }
  151. private void toolStripButton1_Click(object sender, EventArgs e)
  152. {
  153. this.propertyGrid1.Refresh();
  154. }
  155. DebugTestFrm frm;
  156. private void tsbDebug_Click(object sender, EventArgs e)
  157. {
  158. if ((frm == null) || (frm.IsDisposed))
  159. frm = new DebugTestFrm();
  160. frm.TopMost = true;
  161. frm.Show();
  162. }
  163. private void tbtnRun_Click(object sender, EventArgs e)
  164. {
  165. try
  166. {
  167. if (prop.Direction == IODirectionEnum.输出)
  168. {
  169. string[] OUT_OP_SHOW = SysMgr.IODataFormatBinaryStr(prop.OUT_OP_SHOW, true);
  170. for (int i = 0; i < OUT_OP_SHOW.Length; i++)
  171. {
  172. for (int j = 0; j < OUT_OP_SHOW[i].Length; j++)
  173. {
  174. int jj = OUT_OP_SHOW[i].Length - j - 1;
  175. if (OUT_OP_SHOW[i][jj] == 'L' || OUT_OP_SHOW[i][jj] == 'H')
  176. SysMgr.Instance.IOCardDev.WriteBitState(i, j, OUT_OP_SHOW[i][jj] == 'H');
  177. }
  178. }
  179. }
  180. //running...
  181. }
  182. catch (Exception ex)
  183. {
  184. MessageBox.Show(ex.Message, "失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
  185. }
  186. }
  187. }
  188. }