FormUnitControl.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Runtime.InteropServices;
  8. using System.Text;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. using System.IO;
  13. using SmartSEMControl;
  14. namespace HOZProject
  15. {
  16. public partial class FormUnitControl : Form
  17. {
  18. #region 系统参数
  19. private String path = Directory.GetCurrentDirectory();
  20. private SmartSEM sem = new SmartSEM();
  21. #endregion
  22. #region 构造函数
  23. public FormUnitControl()
  24. {
  25. InitializeComponent();
  26. //Calling Notification for updated status
  27. //CZEMApi.Notify += new _EMApiEvents_NotifyEventHandler(CZEMApi_Notify);
  28. //CZEMApi.NotifyWithCurrentValue += new _EMApiEvents_NotifyWithCurrentValueEventHandler(CZEMApi_NotifyWithCurrentValue);
  29. //加载参数
  30. }
  31. #endregion
  32. #region 设备初始化按键
  33. private void btnInit_Click(object sender, EventArgs e)
  34. {
  35. if (sem.Init())
  36. {
  37. btnInit.BackColor = Color.Lime;
  38. }
  39. else
  40. {
  41. btnInit.BackColor = Color.Red;
  42. }
  43. }
  44. #endregion
  45. #region 设备关闭按键
  46. private void btnCloseCtrl_Click(object sender, EventArgs e)
  47. {
  48. if (sem.UnInit())
  49. {
  50. btnInit.BackColor = Control.DefaultBackColor;
  51. }
  52. }
  53. #endregion
  54. #region 设置参数更新通知
  55. private void btnSetNotify_Click(object sender, EventArgs e)
  56. {
  57. //if (m_bInitialised)
  58. //{
  59. // // Magnification
  60. // if (CZEMApi.SetNotify("AP_MAG", 1) != 0)
  61. // {
  62. // DisplayError("SetNotify", "AP_MAG");
  63. // return;
  64. // }
  65. // // Working distance
  66. // if (CZEMApi.SetNotify("AP_WD", 1) != 0)
  67. // {
  68. // DisplayError("SetNotify", "AP_WD");
  69. // return;
  70. // }
  71. // // BRIGHTNESS 亮度
  72. // if (CZEMApi.SetNotify("AP_BRIGHTNESS", 1) != 0)
  73. // {
  74. // DisplayError("SetNotify", "AP_BRIGHTNESS");
  75. // return;
  76. // }
  77. // // AP_CONTRAST,对比度
  78. // if (CZEMApi.SetNotify("AP_CONTRAST", 1) != 0)
  79. // {
  80. // DisplayError("SetNotify", "AP_CONTRAST");
  81. // return;
  82. // }
  83. // // Vacuum
  84. // if (CZEMApi.SetNotify("DP_VACSTATUS", 1) != 0)
  85. // {
  86. // DisplayError("SetNotify", "DP_VACSTATUS");
  87. // return;
  88. // }
  89. // // Gun / EHT state
  90. // if (CZEMApi.SetNotify("DP_RUNUPSTATE", 1) != 0)
  91. // {
  92. // DisplayError("SetNotify", "DP_RUNUPSTATE");
  93. // return;
  94. // }
  95. // // actual KV / EHT
  96. // if (CZEMApi.SetNotify("AP_ACTUALKV", 1) != 0)
  97. // {
  98. // DisplayError("SetNotify", "AP_ACTUALKV");
  99. // return;
  100. // }
  101. // // actual current
  102. // if (CZEMApi.SetNotify("AP_ACTUALCURRENT", 1) != 0)
  103. // {
  104. // DisplayError("SetNotify", "AP_ACTUALCURRENT");
  105. // return;
  106. // }
  107. // // column type
  108. // if (CZEMApi.SetNotify("DP_COLUMN_TYPE", 1) != 0)
  109. // {
  110. // DisplayError("SetNotify", "DP_COLUMN_TYPE");
  111. // return;
  112. // }
  113. // // mode
  114. // if (CZEMApi.SetNotify("DP_OPERATING_MODE", 1) != 0)
  115. // {
  116. // DisplayError("SetNotify", "DP_OPERATING_MODE");
  117. // return;
  118. // }
  119. // // scan rate
  120. // if (CZEMApi.SetNotify("DP_SCANRATE", 1) != 0)
  121. // {
  122. // DisplayError("SetNotify", "DP_SCANRATE");
  123. // return;
  124. // }
  125. // // auto function active
  126. // if (CZEMApi.SetNotify("DP_AUTO_FUNCTION", 1) != 0)
  127. // {
  128. // DisplayError("SetNotify", "DP_AUTO_FUNCTION");
  129. // return;
  130. // }
  131. // // probe current
  132. // if (CZEMApi.SetNotify("AP_IPROBE", 1) != 0)
  133. // {
  134. // DisplayError("SetNotify", "AP_IPROBE");
  135. // return;
  136. // }
  137. // // detector
  138. // if (CZEMApi.SetNotify("DP_DETECTOR_TYPE", 1) != 0)
  139. // {
  140. // DisplayError("SetNotify", "DP_DETECTOR_TYPE");
  141. // return;
  142. // }
  143. // // stage initialised
  144. // if (CZEMApi.SetNotify("DP_STAGE_INIT", 1) != 0)
  145. // {
  146. // DisplayError("SetNotify", "DP_STAGE_INIT");
  147. // return;
  148. // }
  149. // // stage busy?
  150. // if (CZEMApi.SetNotify("DP_STAGE_IS", 1) != 0)
  151. // {
  152. // DisplayError("SetNotify", "DP_STAGE_IS");
  153. // return;
  154. // }
  155. // // fib mode
  156. // if (CZEMApi.SetNotify("DP_FIB_MODE", 1) != 0)
  157. // {
  158. // DisplayError("SetNotify", "DP_FIB_MODE");
  159. // return;
  160. // }
  161. // // fib gun state
  162. // if (CZEMApi.SetNotify("DP_FIB_GUN_STATE", 1) != 0)
  163. // {
  164. // DisplayError("SetNotify", "DP_FIB_GUN_STATE");
  165. // return;
  166. // }
  167. //listmsg.Items.Add("Notification enabled");
  168. // }
  169. }
  170. #endregion
  171. #region 缩放Get
  172. private void btnenlargeGet_Click(object sender, EventArgs e)
  173. {
  174. float ret = sem.GetMagnification();
  175. if (float.IsNaN(ret))
  176. {
  177. lblenlargeGet.Text = "NaN";
  178. txtenlargeSet.Enabled = false;
  179. btnenlargeSet.Enabled = false;
  180. }
  181. else
  182. {
  183. lblenlargeGet.Text = ret.ToString();
  184. txtenlargeSet.Text = ret.ToString();
  185. btnenlargeSet.Enabled = true;
  186. }
  187. }
  188. #endregion
  189. #region 缩放Set
  190. private void btnenlargeSet_Click(object sender, EventArgs e)
  191. {
  192. float set = 0;
  193. if (float.TryParse(txtenlargeSet.Text, out set))
  194. {
  195. sem.SetMagnification(set);
  196. }
  197. }
  198. #endregion
  199. #region 焦距Get
  200. private void btnWDGet_Click(object sender, EventArgs e)
  201. {
  202. float ret = sem.GetWorkingDistance();
  203. if (float.IsNaN(ret))
  204. {
  205. lblWDGet.Text = "NaN";
  206. txtWDSet.Enabled = false;
  207. btnWDSet.Enabled = false;
  208. }
  209. else
  210. {
  211. lblWDGet.Text = ret.ToString();
  212. txtWDSet.Text = ret.ToString();
  213. btnWDSet.Enabled = true;
  214. }
  215. }
  216. #endregion
  217. #region 焦距Set
  218. private void btnWDSet_Click(object sender, EventArgs e)
  219. {
  220. float set = 0;
  221. if (float.TryParse(txtWDSet.Text, out set))
  222. {
  223. sem.SetWorkingDistance(set);
  224. }
  225. }
  226. #endregion
  227. #region 亮度Get
  228. private void btnBrightnessGet_Click(object sender, EventArgs e)
  229. {
  230. float ret = sem.GetBrightness();
  231. if (float.IsNaN(ret))
  232. {
  233. lblBrightnessGet.Text = "NaN";
  234. txtBrightnessSet.Enabled = false;
  235. btnBrightnessSet.Enabled = false;
  236. }
  237. else
  238. {
  239. lblBrightnessGet.Text = ret.ToString();
  240. txtBrightnessSet.Text = ret.ToString();
  241. btnBrightnessSet.Enabled = true;
  242. }
  243. }
  244. #endregion
  245. #region 亮度Set
  246. private void btnBrightnessSet_Click(object sender, EventArgs e)
  247. {
  248. float set = 0;
  249. if (float.TryParse(txtBrightnessSet.Text, out set))
  250. {
  251. sem.SetBrightness(set);
  252. }
  253. }
  254. #endregion
  255. #region 对比度Get
  256. private void btnContrastGet_Click(object sender, EventArgs e)
  257. {
  258. float ret = sem.GetContrast();
  259. if (float.IsNaN(ret))
  260. {
  261. lblContrastGet.Text = "NaN";
  262. txtContrastSet.Enabled = false;
  263. btnContrastSet.Enabled = false;
  264. }
  265. else
  266. {
  267. lblContrastGet.Text = ret.ToString();
  268. txtContrastSet.Text = ret.ToString();
  269. btnContrastSet.Enabled = true;
  270. }
  271. }
  272. #endregion
  273. #region 对比度Set
  274. private void btnContrastSet_Click(object sender, EventArgs e)
  275. {
  276. float set = 0;
  277. if (float.TryParse(txtContrastSet.Text, out set))
  278. {
  279. sem.SetContrast(set);
  280. }
  281. }
  282. #endregion
  283. #region 消像散X Get
  284. private void btnAstigmatismXGet_Click(object sender, EventArgs e)
  285. {
  286. float ret = sem.GetAstigmatismX();
  287. if (float.IsNaN(ret))
  288. {
  289. lblAstigmatismXGet.Text = "NaN";
  290. txtAstigmatismXSet.Enabled = false;
  291. btnAstigmatismXSet.Enabled = false;
  292. }
  293. else
  294. {
  295. lblAstigmatismXGet.Text = ret.ToString();
  296. txtAstigmatismXSet.Text = ret.ToString();
  297. btnAstigmatismXSet.Enabled = true;
  298. }
  299. }
  300. #endregion
  301. #region 消像散X Set
  302. private void btnAstigmatismXSet_Click(object sender, EventArgs e)
  303. {
  304. float set = 0;
  305. if (float.TryParse(txtAstigmatismXSet.Text, out set))
  306. {
  307. sem.SetAstigmatismX(set);
  308. }
  309. }
  310. #endregion
  311. #region 消像散Y Get
  312. private void btnAstigmatismYGet_Click(object sender, EventArgs e)
  313. {
  314. float ret = sem.GetAstigmatismY();
  315. if (float.IsNaN(ret))
  316. {
  317. lblAstigmatismYGet.Text = "NaN";
  318. txtAstigmatismYSet.Enabled = false;
  319. btnAstigmatismYSet.Enabled = false;
  320. }
  321. else
  322. {
  323. lblAstigmatismYGet.Text = ret.ToString();
  324. txtAstigmatismYSet.Text = ret.ToString();
  325. btnAstigmatismYSet.Enabled = true;
  326. }
  327. }
  328. #endregion
  329. #region 消像散Y Set
  330. private void btnAstigmatismYSet_Click(object sender, EventArgs e)
  331. {
  332. float set = 0;
  333. if (float.TryParse(txtAstigmatismYSet.Text, out set))
  334. {
  335. sem.SetAstigmatismY(set);
  336. }
  337. }
  338. #endregion
  339. #region 角度补偿Get
  340. private void btnTiltAngleGet_Click(object sender, EventArgs e)
  341. {
  342. float ret = sem.GetTiltAngle();
  343. if (float.IsNaN(ret))
  344. {
  345. lblTiltAngleGet.Text = "NaN";
  346. txtTiltAngleSet.Enabled = false;
  347. btnTiltAngleSet.Enabled = false;
  348. }
  349. else
  350. {
  351. lblTiltAngleGet.Text = ret.ToString();
  352. txtTiltAngleSet.Text = ret.ToString();
  353. btnTiltAngleSet.Enabled = true;
  354. }
  355. }
  356. #endregion
  357. #region 角度补偿Set
  358. private void btnTiltAngleSet_Click(object sender, EventArgs e)
  359. {
  360. float set = 0;
  361. if (float.TryParse(txtTiltAngleSet.Text, out set))
  362. {
  363. sem.SetTiltAngle(set);
  364. }
  365. }
  366. #endregion
  367. #region 抓取图像
  368. private void btnGrabImage_Click(object sender, EventArgs e)
  369. {
  370. SaveFileDialog sfd = new SaveFileDialog();
  371. sfd.Title = "图像保存位置:";
  372. sfd.FileName = "test.tif";
  373. sfd.Filter = "TIF文件|*.tif";
  374. if (sfd.ShowDialog() == DialogResult.OK)
  375. {
  376. string fn = sfd.FileName;
  377. sem.GrabImage(fn, 0);
  378. }
  379. }
  380. #endregion
  381. #region ScanRotate Get
  382. private void btnScanRotationGet_Click(object sender, EventArgs e)
  383. {
  384. float ret = sem.GetScanRotation();
  385. if (float.IsNaN(ret))
  386. {
  387. lblScanRotationGet.Text = "NaN";
  388. txtScanRotationSet.Enabled = false;
  389. btnScanRotationSet.Enabled = false;
  390. }
  391. else
  392. {
  393. lblScanRotationGet.Text = ret.ToString();
  394. txtScanRotationSet.Text = ret.ToString();
  395. btnScanRotationSet.Enabled = true;
  396. }
  397. }
  398. #endregion
  399. #region ScanRotate Set
  400. private void btnScanRotationSet_Click(object sender, EventArgs e)
  401. {
  402. float set = 0;
  403. if (float.TryParse(txtScanRotationSet.Text, out set))
  404. {
  405. sem.SetScanRotation(set);
  406. }
  407. }
  408. #endregion
  409. #region PixelSize Get
  410. private void btnPixelSizeGet_Click(object sender, EventArgs e)
  411. {
  412. float ret = sem.GetPixelSize();
  413. if (float.IsNaN(ret))
  414. {
  415. lblPixelSizeGet.Text = "NaN";
  416. }
  417. else
  418. {
  419. lblPixelSizeGet.Text = ret.ToString();
  420. }
  421. }
  422. #endregion
  423. #region 开启电压
  424. private void btnOpenVoltage_Click(object sender, EventArgs e)
  425. {
  426. sem.CmdOpenVoltage();
  427. }
  428. #endregion
  429. #region 关闭电压
  430. private void btnCloseVoltage_Click(object sender, EventArgs e)
  431. {
  432. sem.CmdCloseVoltage();
  433. }
  434. #endregion
  435. #region 样品台位置获取
  436. private void btnStageGetX_Click(object sender, EventArgs e)
  437. {
  438. float ret = sem.GetStageAtX();
  439. if (float.IsNaN(ret))
  440. {
  441. lblStageX.Text = "NaN";
  442. }
  443. else
  444. {
  445. lblStageX.Text = ret.ToString();
  446. }
  447. }
  448. private void btnStageGetY_Click(object sender, EventArgs e)
  449. {
  450. float ret = sem.GetStageAtY();
  451. if (float.IsNaN(ret))
  452. {
  453. lblStageY.Text = "NaN";
  454. }
  455. else
  456. {
  457. lblStageY.Text = ret.ToString();
  458. }
  459. }
  460. private void btnStageGetZ_Click(object sender, EventArgs e)
  461. {
  462. float ret = sem.GetStageAtZ();
  463. if (float.IsNaN(ret))
  464. {
  465. lblStageZ.Text = "NaN";
  466. }
  467. else
  468. {
  469. lblStageZ.Text = ret.ToString();
  470. }
  471. }
  472. private void btnStageGetT_Click(object sender, EventArgs e)
  473. {
  474. float ret = sem.GetStageAtT();
  475. if (float.IsNaN(ret))
  476. {
  477. lblStageT.Text = "NaN";
  478. }
  479. else
  480. {
  481. lblStageT.Text = ret.ToString();
  482. }
  483. }
  484. private void btnStageGetR_Click(object sender, EventArgs e)
  485. {
  486. float ret = sem.GetStageAtR();
  487. if (float.IsNaN(ret))
  488. {
  489. lblStageR.Text = "NaN";
  490. }
  491. else
  492. {
  493. lblStageR.Text = ret.ToString();
  494. }
  495. }
  496. private void btnStageGetM_Click(object sender, EventArgs e)
  497. {
  498. float ret = sem.GetStageAtM();
  499. if (float.IsNaN(ret))
  500. {
  501. lblStageM.Text = "NaN";
  502. }
  503. else
  504. {
  505. lblStageM.Text = ret.ToString();
  506. }
  507. }
  508. #endregion
  509. #region 样品台位置设置
  510. private void btnStageSetX_Click(object sender, EventArgs e)
  511. {
  512. float set = 0;
  513. if (float.TryParse(txtStageX.Text, out set))
  514. {
  515. sem.SetStageGotoX(set);
  516. }
  517. }
  518. private void btnStageSetY_Click(object sender, EventArgs e)
  519. {
  520. float set = 0;
  521. if (float.TryParse(txtStageY.Text, out set))
  522. {
  523. sem.SetStageGotoY(set);
  524. }
  525. }
  526. private void btnStageSetZ_Click(object sender, EventArgs e)
  527. {
  528. float set = 0;
  529. if (float.TryParse(txtStageZ.Text, out set))
  530. {
  531. sem.SetStageGotoZ(set);
  532. }
  533. }
  534. private void btnStageSetT_Click(object sender, EventArgs e)
  535. {
  536. float set = 0;
  537. if (float.TryParse(txtStageT.Text, out set))
  538. {
  539. sem.SetStageGotoT(set);
  540. }
  541. }
  542. private void btnStageSetR_Click(object sender, EventArgs e)
  543. {
  544. float set = 0;
  545. if (float.TryParse(txtStageR.Text, out set))
  546. {
  547. sem.SetStageGotoR(set);
  548. }
  549. }
  550. private void btnStageSetM_Click(object sender, EventArgs e)
  551. {
  552. float set = 0;
  553. if (float.TryParse(txtStageM.Text, out set))
  554. {
  555. sem.SetStageGotoM(set);
  556. }
  557. }
  558. #endregion
  559. #region 获取样品台位置数组
  560. private void btnGetStagePosition_Click(object sender, EventArgs e)
  561. {
  562. float[] pt = sem.GetStagePosition();
  563. if (!float.IsNaN(pt[0]))
  564. {
  565. lblStageX.Text = pt[0].ToString();
  566. }
  567. if (!float.IsNaN(pt[1]))
  568. {
  569. lblStageY.Text = pt[1].ToString();
  570. }
  571. if (!float.IsNaN(pt[2]))
  572. {
  573. lblStageZ.Text = pt[2].ToString();
  574. }
  575. if (!float.IsNaN(pt[3]))
  576. {
  577. lblStageT.Text = pt[3].ToString();
  578. }
  579. if (!float.IsNaN(pt[4]))
  580. {
  581. lblStageR.Text = pt[4].ToString();
  582. }
  583. if (!float.IsNaN(pt[5]))
  584. {
  585. lblStageM.Text = pt[5].ToString();
  586. }
  587. }
  588. #endregion
  589. }
  590. }