版博士V2.0程序
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

434 строки
15 KiB

  1. using HalconDotNet;
  2. using ImageToolKits;
  3. using MaiMuAOI.SysCtrl;
  4. using MaiMuControl.Device;
  5. using MaiMuControl.Device.AxisDev;
  6. using MaiMuControl.Device.CamDev;
  7. using OpenCvSharp;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.ComponentModel;
  11. using System.Data;
  12. using System.Drawing;
  13. using System.Linq;
  14. using System.Text;
  15. using System.Threading.Tasks;
  16. using System.Windows.Forms;
  17. using ToolKits.EnumTool;
  18. namespace MaiMuAOI.SysUI.DefectPicShow
  19. {
  20. public partial class DebugTestFrm : Form
  21. {
  22. public DebugTestFrm()
  23. {
  24. InitializeComponent();
  25. UIStyle.SetUIStyle(this);
  26. this.uiTitel1.FatherForm = this;
  27. }
  28. private void DebugTestFrm_Load(object sender, EventArgs e)
  29. {
  30. this.Left = 600;
  31. //显示tS曲线
  32. cbTS.Items.Clear();
  33. Type VelType = typeof(VelocityCurveType);
  34. foreach (object s in Enum.GetValues(VelType))
  35. {
  36. string st = EnumExtension.GetEnumDescription((VelocityCurveType)s);
  37. cbTS.Items.Add(st);
  38. }
  39. cbTS.Text = cbTS.Items[0].ToString();
  40. cbTS.SelectedIndex = 0;
  41. cbDir.Items.Clear();
  42. cbDir.Items.Add("相对运动");
  43. cbDir.Items.Add("绝对运动");
  44. cbDir.Text = cbDir.Items[0].ToString();
  45. cbDir.SelectedIndex = 0;
  46. cbAxisName.Items.Clear();
  47. cbAxisName.Items.Add("X1轴");
  48. cbAxisName.Items.Add("X2轴");
  49. cbAxisName.Items.Add("Y轴");
  50. cbAxisName.Items.Add("Z轴");
  51. cbAxisName.Text = cbAxisName.Items[0].ToString();
  52. cbAxisName.SelectedIndex = 0;
  53. cbCH.Items.Clear();
  54. Type lightenum = typeof(LightChannelEnum);
  55. foreach (object s in Enum.GetValues(lightenum))
  56. {
  57. string st = EnumExtension.GetEnumDescription((LightChannelEnum)s);
  58. cbCH.Items.Add(st);
  59. }
  60. cbCH.Text = cbCH.Items[0].ToString();
  61. cbCH.SelectedIndex = 0;
  62. cbLensMotor.SelectedIndex = 8;
  63. timer2.Enabled = true;
  64. if(SysMgr.Instance.QGSts())
  65. button5.Text = "气缸松开";
  66. else
  67. button5.Text = "气缸加紧";
  68. if (SysMgr.Instance.ThicknessSts())
  69. BtnHeightAck.Text = "高度传感器上升";
  70. else
  71. BtnHeightAck.Text = "高度传感器下降";
  72. }
  73. #region 前部相机
  74. private void btnTrg_Click(object sender, EventArgs e)
  75. {
  76. SysMgr.Instance.CamDevFront.ClearImageQueue();
  77. Acquisition acq = SysMgr.Instance.CamDevFront.Snap(1, 5000);
  78. if (acq.GrabStatus != "GrabPass")
  79. {
  80. ;
  81. }
  82. //ShowImage(acq.Image.CopyObj(1, -1));
  83. ShowImage1(acq.Image);
  84. }
  85. private void ShowImage1(HObject image)
  86. {
  87. lock (this)
  88. {
  89. Mat img = CamDev.HImageToMat(image);
  90. //imageBox1.ColorName = "red";
  91. imageBox1.SetInteractive(false);
  92. if (imageBox1.Image == null)
  93. imageBox1.RefreshWindow(img, ImageBox.ImageModeEnum.Zoom);//可以不显示区域
  94. else
  95. imageBox1.RefreshWindow(img, ImageBox.ImageModeEnum.Part);//可以不显示区域
  96. imageBox1.SetInteractive(true);
  97. //imageBox1.ColorName = "green";
  98. }
  99. }
  100. private void btnGrab_Click(object sender, EventArgs e)
  101. {
  102. if (this.btnGrab.Text == "连续拍照")
  103. {
  104. this.btnTrg.Enabled = false;
  105. this.btnGrab.Text = "停止拍照";
  106. timer1.Enabled = true;
  107. }
  108. else
  109. {
  110. this.btnTrg.Enabled = true;
  111. this.btnGrab.Text = "连续拍照";
  112. timer1.Enabled = false;
  113. }
  114. }
  115. private void timer1_Tick(object sender, EventArgs e)
  116. {
  117. SysMgr.Instance.CamDevFront.ClearImageQueue();
  118. Acquisition acq = SysMgr.Instance.CamDevFront.Snap(1, 100);
  119. if (acq.GrabStatus != "GrabPass")
  120. {
  121. return;
  122. //MessageBox.Show( "获取图片失败!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
  123. }
  124. //ShowImage(acq.Image.CopyObj(1, -1));
  125. ShowImage1(acq.Image);
  126. }
  127. private void button2_Click(object sender, EventArgs e)
  128. {
  129. if (!SysMgr.Instance.CamDevFront.SetExposure((double)numExposure.Value))
  130. {
  131. stslog.Text = "曝光设置失败!";
  132. return;
  133. }
  134. if (!SysMgr.Instance.CamDevFront.SetGain((double)numGain.Value))
  135. {
  136. stslog.Text = "增益设置失败!";
  137. return;
  138. }
  139. stslog.Text = "曝光-增益-帧率设置成功";
  140. }
  141. private void button6_Click(object sender, EventArgs e)
  142. {
  143. SysMgr.Instance.CamDevFront.CloseCamera();
  144. button2.Enabled = false;
  145. btnTrg.Enabled = false;
  146. btnGrab.Enabled = false;
  147. }
  148. #endregion
  149. #region 后部相机
  150. private void ShowImage2(HObject image)
  151. {
  152. lock (this)
  153. {
  154. Mat img = CamDev.HImageToMat(image);
  155. imageBox2.SetInteractive(false);
  156. if (imageBox2.Image == null)
  157. imageBox2.RefreshWindow(img, ImageBox.ImageModeEnum.Zoom);//可以不显示区域
  158. else
  159. imageBox2.RefreshWindow(img, ImageBox.ImageModeEnum.Part);//可以不显示区域
  160. imageBox2.SetInteractive(true);
  161. }
  162. }
  163. private void btnTrg2_Click(object sender, EventArgs e)
  164. {
  165. SysMgr.Instance.CamDevBack.ClearImageQueue();
  166. Acquisition acq = SysMgr.Instance.CamDevBack.Snap(1, 5000);
  167. if (acq.GrabStatus != "GrabPass")
  168. {
  169. ;
  170. }
  171. ShowImage2(acq.Image);
  172. }
  173. private void timer3_Tick(object sender, EventArgs e)
  174. {
  175. SysMgr.Instance.CamDevBack.ClearImageQueue();
  176. Acquisition acq = SysMgr.Instance.CamDevBack.Snap(1, 100);
  177. if (acq.GrabStatus != "GrabPass")
  178. {
  179. return;
  180. }
  181. ShowImage2(acq.Image);
  182. }
  183. private void BtnGrab2_Click(object sender, EventArgs e)
  184. {
  185. if (this.BtnGrab2.Text == "连续拍照")
  186. {
  187. this.btnTrg2.Enabled = false;
  188. this.BtnGrab2.Text = "停止拍照";
  189. timer3.Enabled = true;
  190. }
  191. else
  192. {
  193. this.btnTrg2.Enabled = true;
  194. this.BtnGrab2.Text = "连续拍照";
  195. timer3.Enabled = false;
  196. }
  197. }
  198. private void BtnSet2_Click(object sender, EventArgs e)
  199. {
  200. if (!SysMgr.Instance.CamDevBack.SetExposure((double)numExp2.Value))
  201. {
  202. stslog.Text = "曝光设置失败!";
  203. return;
  204. }
  205. if (!SysMgr.Instance.CamDevBack.SetGain((double)numGain2.Value))
  206. {
  207. stslog.Text = "增益设置失败!";
  208. return;
  209. }
  210. stslog.Text = "曝光-增益-帧率设置成功";
  211. }
  212. private void BtnDisCam2_Click(object sender, EventArgs e)
  213. {
  214. SysMgr.Instance.CamDevBack.CloseCamera();
  215. BtnGrab2.Enabled = false;
  216. btnTrg2.Enabled = false;
  217. BtnSet2.Enabled = false;
  218. }
  219. #endregion
  220. #region 轴移动
  221. private void btnMove_Click(object sender, EventArgs e)
  222. {
  223. if (SysMgr.Instance.AxisDev != null)
  224. {
  225. //测厚气缸缩回
  226. if(!SysMgr.Instance.ThicknessIsSafe())
  227. {
  228. stslog.Text = "高度传感器不在安全位置";
  229. return;
  230. }
  231. VelocityCurveParams _VelParams = new VelocityCurveParams();
  232. int axisNo = cbAxisName.SelectedIndex;
  233. _VelParams.Acc = (double)numAcc.Value;
  234. _VelParams.Dec = (double)numDec.Value;
  235. _VelParams.StartVel = (double)numST.Value;
  236. _VelParams.RunVel = (double)numET.Value;
  237. _VelParams.JerkT_S = cbTS.SelectedIndex;
  238. _VelParams.MM2PulseNum = SysMgr.Instance.GetMMtoPlus((AxisName)axisNo);
  239. if (cbDir.Text == "绝对运动")
  240. {
  241. stslog.Text = "绝对运动:" + numDist.Value.ToString();
  242. SysMgr.Instance.AxisDev.MoveAbsValue(axisNo, _VelParams, (double)numDist.Value);
  243. }
  244. else if (cbDir.Text == "相对运动")
  245. {
  246. stslog.Text = "相对运动:" + numDist.Value.ToString();
  247. SysMgr.Instance.AxisDev.MoveRelValue(axisNo, _VelParams, (double)numDist.Value);
  248. }
  249. }
  250. }
  251. private void btnJogP_MouseDown(object sender, MouseEventArgs e)
  252. {
  253. if (!SysMgr.Instance.ThicknessIsSafe())
  254. {
  255. stslog.Text = "高度传感器不在安全位置";
  256. return;
  257. }
  258. Button btn = sender as Button;
  259. int axisNo = cbAxisName.SelectedIndex;
  260. double val = 50;
  261. VelocityCurveParams velocityCurveParams = new VelocityCurveParams(100, 100, 0, 100, 1, SysMgr.Instance.GetMMtoPlus((AxisName)axisNo));
  262. if (btn.Name == "btnJogP")
  263. val = 50;
  264. else
  265. val = -50;
  266. SysMgr.Instance.AxisDev.MoveRelValue(axisNo, velocityCurveParams, val);
  267. }
  268. private void btnJogP_MouseUp(object sender, MouseEventArgs e)
  269. {
  270. int axisNo = cbAxisName.SelectedIndex;
  271. SysMgr.Instance.AxisDev.DecelStop(axisNo);
  272. }
  273. private void timer2_Tick(object sender, EventArgs e)
  274. {
  275. int axisNo = cbAxisName.SelectedIndex;
  276. try
  277. {
  278. numericUpDown1.Value = (decimal)SysMgr.Instance.AxisDev.GetFeedbackPos(axisNo) / SysMgr.Instance.GetMMtoPlus((AxisName)axisNo);
  279. }
  280. catch
  281. {
  282. numericUpDown1.Value = 0;
  283. }
  284. }
  285. #endregion
  286. #region 光源控制
  287. private void button4_Click(object sender, EventArgs e)
  288. {
  289. int ch = cbCH.SelectedIndex + 1;
  290. SysMgr.Instance.LightDev.SetLightDigitalValue(ch, (int)numericUpDown3.Value);
  291. }
  292. private void button1_Click(object sender, EventArgs e)
  293. {
  294. int ch = cbCH.SelectedIndex + 1;
  295. SysMgr.Instance.LightDev.OpenLight(ch);
  296. }
  297. private void button3_Click(object sender, EventArgs e)
  298. {
  299. int ch = cbCH.SelectedIndex + 1;
  300. SysMgr.Instance.LightDev.CloseLight(ch);
  301. }
  302. #endregion
  303. #region 产品加紧
  304. private void button5_Click(object sender, EventArgs e)
  305. {
  306. if (button5.Text == "气缸加紧")
  307. {
  308. button5.Text = "气缸松开";
  309. SysMgr.Instance.RunQG(true);
  310. }
  311. else
  312. {
  313. button5.Text = "气缸加紧";
  314. SysMgr.Instance.RunQG(false);
  315. }
  316. }
  317. #endregion
  318. #region 厚度
  319. private void BtnHeightAck_Click(object sender, EventArgs e)
  320. {
  321. if (BtnHeightAck.Text == "高度传感器下降")
  322. {
  323. BtnHeightAck.Text = "高度传感器上升";
  324. SysMgr.Instance.RunThickness(true);
  325. }
  326. else
  327. {
  328. BtnHeightAck.Text = "高度传感器上升";
  329. SysMgr.Instance.RunThickness(false);
  330. }
  331. }
  332. private void BtnReadHeight_Click(object sender, EventArgs e)
  333. {
  334. double val = SysMgr.Instance.ThicknessDev.GetValue();
  335. numHeightValue.Value = (decimal)val;
  336. }
  337. #endregion
  338. #region 张力
  339. private void btnReadTension_Click(object sender, EventArgs e)
  340. {
  341. double val = SysMgr.Instance.TensionDev.GetValue();
  342. numTensionValue.Value = (decimal)val;
  343. }
  344. #endregion
  345. #region 变焦
  346. private void btnLens_Click(object sender, EventArgs e)
  347. {
  348. int val = (int)SmallAxCmdPos.倍率0_58X;
  349. switch(cbLensMotor.SelectedIndex)
  350. {
  351. case 0:
  352. val = (int)SmallAxCmdPos.倍率0_58X;
  353. break;
  354. case 1:
  355. val = (int)SmallAxCmdPos.倍率1_0X;
  356. break;
  357. case 2:
  358. val = (int)SmallAxCmdPos.倍率1_5X;
  359. break;
  360. case 3:
  361. val = (int)SmallAxCmdPos.倍率2_0X;
  362. break;
  363. case 4:
  364. val = (int)SmallAxCmdPos.倍率2_5X;
  365. break;
  366. case 5:
  367. val = (int)SmallAxCmdPos.倍率3_0X;
  368. break;
  369. case 6:
  370. val = (int)SmallAxCmdPos.倍率3_5X;
  371. break;
  372. case 7:
  373. val = (int)SmallAxCmdPos.倍率4_0X;
  374. break;
  375. case 8:
  376. val = (int)SmallAxCmdPos.倍率4_5X;
  377. break;
  378. case 9:
  379. val = (int)SmallAxCmdPos.倍率5_0X;
  380. break;
  381. case 10:
  382. val = (int)SmallAxCmdPos.倍率5_5X;
  383. break;
  384. case 11:
  385. val = (int)SmallAxCmdPos.倍率6_0X;
  386. break;
  387. case 12:
  388. val = (int)SmallAxCmdPos.倍率6_5X;
  389. break;
  390. case 13:
  391. val = (int)SmallAxCmdPos.倍率7_0X;
  392. break;
  393. case 14:
  394. val = (int)SmallAxCmdPos.倍率7_5X;
  395. break;
  396. }
  397. SysMgr.Instance.LensMotorDev.MoveAbsPulse(0, new VelocityCurveParams(), val);
  398. //SysMgr.Instance.LensMotorDev.CheckDone(0, 10000);
  399. }
  400. #endregion
  401. }
  402. }