SmartSEM.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.InteropServices;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using APILib;
  8. using System.Threading;
  9. namespace SmartSEMControl
  10. {
  11. public class SmartSEM : SEMControl
  12. {
  13. #region 模拟参数
  14. //放大缩小
  15. private String AP_MAG = "AP_MAG";
  16. //焦距
  17. private String AP_WD = "AP_WD";
  18. //亮度
  19. private String AP_BRIGHTNESS = "AP_BRIGHTNESS";
  20. //对比度
  21. private String AP_CONTRAST = "AP_CONTRAST";
  22. //消像散X轴
  23. private String AP_STIG_X = "AP_STIG_X";
  24. //消像散Y轴
  25. private String AP_STIG_Y = "AP_STIG_Y";
  26. //角度补偿
  27. private String AP_TILT_ANGLE = "AP_TILT_ANGLE";
  28. //SEM移动X
  29. private String AP_BEAMSHIFT_X = "AP_BEAMSHIFT_X";
  30. //SEM移动Y
  31. private String AP_BEAMSHIFT_Y = "AP_BEAMSHIFT_Y";
  32. //X轴移动到
  33. private String AP_STAGE_GOTO_X = "AP_STAGE_GOTO_X";
  34. //Y轴移动到
  35. private String AP_STAGE_GOTO_Y = "AP_STAGE_GOTO_Y";
  36. //Z轴移动到
  37. private String AP_STAGE_GOTO_Z = "AP_STAGE_GOTO_Z";
  38. //T轴移动到
  39. private String AP_STAGE_GOTO_T = "AP_STAGE_GOTO_T";
  40. //R轴移动到
  41. private String AP_STAGE_GOTO_R = "AP_STAGE_GOTO_R";
  42. //M轴移动到
  43. private String AP_STAGE_GOTO_M = "AP_STAGE_GOTO_M";
  44. //Scan Rotate角度
  45. private String AP_SCANROTATION = "AP_SCANROTATION";
  46. //像素大小
  47. private String AP_PIXEL_SIZE = "AP_PIXEL_SIZE";
  48. //X轴坐标
  49. private String AP_STAGE_AT_X = "AP_STAGE_AT_X";
  50. //Y轴坐标
  51. private String AP_STAGE_AT_Y = "AP_STAGE_AT_Y";
  52. //Z轴坐标
  53. private String AP_STAGE_AT_Z = "AP_STAGE_AT_Z";
  54. //T轴坐标
  55. private String AP_STAGE_AT_T = "AP_STAGE_AT_T";
  56. //R轴坐标
  57. private String AP_STAGE_AT_R = "AP_STAGE_AT_R";
  58. //M轴坐标
  59. private String AP_STAGE_AT_M = "AP_STAGE_AT_M";
  60. #endregion
  61. #region 数字参数
  62. //Scan Rotate开关
  63. private String DP_SCAN_ROT = "DP_SCAN_ROT";
  64. //取消电子束校正
  65. private String DP_TILT_CORRECTION = "DP_TILT_CORRECTION";
  66. #endregion
  67. #region 命令
  68. //开启电压
  69. private String CMD_BEAM_ON = "CMD_BEAM_ON";
  70. //关闭电压
  71. private String CMD_EHT_OFF = "CMD_EHT_OFF";
  72. #endregion
  73. #region APILib
  74. private Api CZEMApi = new Api();
  75. private Boolean m_bInitialised = false;
  76. private long lrt = 0;
  77. #endregion
  78. #region 构造函数
  79. public SmartSEM()
  80. {
  81. Init();
  82. }
  83. #endregion
  84. #region 设备初始化
  85. /// <summary>
  86. /// 设备初始化
  87. /// </summary>
  88. /// <returns>return:true or false</returns>
  89. public Boolean Init()
  90. {
  91. #if ROMOTE
  92. lrt = CZEMApi.InitialiseRemoting();
  93. #else
  94. lrt = CZEMApi.Initialise("");
  95. #endif
  96. if (lrt != 0)
  97. {
  98. m_bInitialised = false;
  99. return false;
  100. }
  101. else
  102. {
  103. m_bInitialised = true;
  104. return true;
  105. }
  106. }
  107. #endregion
  108. #region 设备远程初始化
  109. /// <summary>
  110. /// 设备远程初始化
  111. /// </summary>
  112. /// <returns>return:true or false</returns>
  113. public Boolean InitRemoting()
  114. {
  115. lrt = CZEMApi.InitialiseRemoting();
  116. if (lrt != 0)
  117. {
  118. m_bInitialised = false;
  119. return false;
  120. }
  121. else
  122. {
  123. m_bInitialised = true;
  124. return true;
  125. }
  126. }
  127. #endregion
  128. #region 关闭设备
  129. /// <summary>
  130. /// 关闭设备
  131. /// </summary>
  132. /// <returns>true or false</returns>
  133. public Boolean Dispose()
  134. {
  135. if (m_bInitialised)
  136. {
  137. lrt = CZEMApi.ClosingControl();
  138. if (lrt != 0)
  139. {
  140. return false;
  141. }
  142. else
  143. {
  144. m_bInitialised = false;
  145. return true;
  146. }
  147. }
  148. else
  149. {
  150. return false;
  151. }
  152. }
  153. #endregion
  154. #region 读参数函数
  155. private Boolean ReadParams(String str_param, ref float value)
  156. {
  157. if (m_bInitialised)
  158. {
  159. object varfloat = new VariantWrapper((float)0.0f);
  160. lrt = CZEMApi.Get(str_param, ref varfloat);
  161. if (lrt != 0)
  162. {
  163. return false;
  164. }
  165. else
  166. {
  167. value = Convert.ToSingle(varfloat);
  168. return true;
  169. }
  170. }
  171. else
  172. {
  173. return false;
  174. }
  175. }
  176. #endregion
  177. #region 写模拟参数函数
  178. private Boolean WriteParams(String str_param, float value)
  179. {
  180. if (m_bInitialised)
  181. {
  182. //先取范围
  183. object varMin = new VariantWrapper((float)0.0f);
  184. object varMax = new VariantWrapper((float)0.0f);
  185. lrt = CZEMApi.GetLimits(str_param, ref varMin, ref varMax);
  186. if (lrt != 0)
  187. {
  188. return false;
  189. }
  190. if (value <= Convert.ToSingle(varMax) && value >= Convert.ToSingle(varMin))
  191. {
  192. object varFloat = new VariantWrapper(value);
  193. lrt = CZEMApi.Set(str_param, ref varFloat);// set value
  194. if (lrt != 0)
  195. {
  196. return false;
  197. }
  198. return true;
  199. //这里是写入后读取判断值是否写入,也可以在事件1中捕获返回值
  200. //object varfloat = new VariantWrapper((float)0.0f);
  201. ////object varStr = new VariantWrapper("");
  202. //lrt = CZEMApi.Get(strPara, ref varfloat);
  203. //if (lrt != 0)
  204. //{
  205. // ReportError(lrt, "Set Value", strPara);
  206. // return;
  207. //}
  208. //lblgetValue.Text = Convert.ToDecimal(varfloat).ToString();
  209. }
  210. else
  211. {
  212. return false;
  213. }
  214. }
  215. else
  216. {
  217. return false;
  218. }
  219. }
  220. #endregion
  221. #region 写数字参数函数
  222. private Boolean WriteDataParams(String str_param, float value)
  223. {
  224. if (m_bInitialised)
  225. {
  226. object varFloat = new VariantWrapper(value);
  227. lrt = CZEMApi.Set(str_param, ref varFloat);// set value
  228. if (lrt != 0)
  229. {
  230. return false;
  231. }
  232. return true;
  233. }
  234. else
  235. {
  236. return false;
  237. }
  238. }
  239. #endregion
  240. #region 执行命令
  241. private Boolean ExecuteCmd(String cmd)
  242. {
  243. if (m_bInitialised)
  244. {
  245. lrt = CZEMApi.Execute(cmd);// execute command
  246. if (lrt != 0)
  247. {
  248. return false;
  249. }
  250. else
  251. {
  252. return true;
  253. }
  254. }
  255. else
  256. {
  257. return false;
  258. }
  259. }
  260. #endregion
  261. #region 缩放
  262. public float Magnification
  263. {
  264. get
  265. {
  266. float ret = 0;
  267. if (ReadParams(AP_MAG, ref ret))
  268. {
  269. return ret;
  270. }
  271. else
  272. {
  273. return float.NaN;
  274. }
  275. }
  276. set
  277. {
  278. WriteParams(AP_MAG, value);
  279. }
  280. }
  281. #endregion
  282. #region 焦距
  283. public float WorkingDistance
  284. {
  285. get
  286. {
  287. float ret = 0;
  288. if (ReadParams(AP_WD, ref ret))
  289. {
  290. return ret;
  291. }
  292. else
  293. {
  294. return float.NaN;
  295. }
  296. }
  297. set
  298. {
  299. WriteParams(AP_WD, value);
  300. }
  301. }
  302. #endregion
  303. #region 亮度
  304. /// <summary>
  305. /// 读取亮度
  306. /// </summary>
  307. /// <returns>true:float or false:NaN</returns>
  308. public float GetBrightness()
  309. {
  310. float ret = 0;
  311. if (ReadParams(AP_BRIGHTNESS, ref ret))
  312. {
  313. return ret;
  314. }
  315. else
  316. {
  317. return float.NaN;
  318. }
  319. }
  320. /// <summary>
  321. /// 设置亮度
  322. /// </summary>
  323. /// <param name="set">亮度</param>
  324. /// <returns>true or false</returns>
  325. public Boolean SetBrightness(float set)
  326. {
  327. return WriteParams(AP_BRIGHTNESS, set);
  328. }
  329. #endregion
  330. #region 对比度
  331. /// <summary>
  332. /// 读取对比度
  333. /// </summary>
  334. /// <returns>true:float or false:NaN</returns>
  335. public float GetContrast()
  336. {
  337. float ret = 0;
  338. if (ReadParams(AP_CONTRAST, ref ret))
  339. {
  340. return ret;
  341. }
  342. else
  343. {
  344. return float.NaN;
  345. }
  346. }
  347. /// <summary>
  348. /// 设置对比度
  349. /// </summary>
  350. /// <param name="set">对比度</param>
  351. /// <returns>true or false</returns>
  352. public Boolean SetContrast(float set)
  353. {
  354. return WriteParams(AP_CONTRAST, set);
  355. }
  356. #endregion
  357. #region 消像散
  358. /// <summary>
  359. /// 读取消像散X
  360. /// </summary>
  361. /// <returns>true:float or false:NaN</returns>
  362. public float GetAstigmatismX()
  363. {
  364. float ret = 0;
  365. if (ReadParams(AP_STIG_X, ref ret))
  366. {
  367. return ret;
  368. }
  369. else
  370. {
  371. return float.NaN;
  372. }
  373. }
  374. /// <summary>
  375. /// 读取消像散Y
  376. /// </summary>
  377. /// <returns>true:float or false:NaN</returns>
  378. public float GetAstigmatismY()
  379. {
  380. float ret = 0;
  381. if (ReadParams(AP_STIG_Y, ref ret))
  382. {
  383. return ret;
  384. }
  385. else
  386. {
  387. return float.NaN;
  388. }
  389. }
  390. /// <summary>
  391. /// 设置消像散X
  392. /// </summary>
  393. /// <param name="set">对比度</param>
  394. /// <returns>true or false</returns>
  395. public Boolean SetAstigmatismX(float set)
  396. {
  397. return WriteParams(AP_STIG_X, set);
  398. }
  399. /// <summary>
  400. /// 设置消像散Y
  401. /// </summary>
  402. /// <param name="set">对比度</param>
  403. /// <returns>true or false</returns>
  404. public Boolean SetAstigmatismY(float set)
  405. {
  406. return WriteParams(AP_STIG_Y, set);
  407. }
  408. #endregion
  409. #region 角度补偿
  410. /// <summary>
  411. /// 读取角度补偿
  412. /// </summary>
  413. /// <returns>true:float or false:NaN</returns>
  414. public float GetTiltAngle()
  415. {
  416. float ret = 0;
  417. if (ReadParams(AP_TILT_ANGLE, ref ret))
  418. {
  419. return ret;
  420. }
  421. else
  422. {
  423. return float.NaN;
  424. }
  425. }
  426. /// <summary>
  427. /// 设置角度补偿
  428. /// </summary>
  429. /// <param name="set">角度补偿</param>
  430. /// <returns>true or false</returns>
  431. public Boolean SetTiltAngle(float set)
  432. {
  433. return WriteParams(AP_TILT_ANGLE, set);
  434. }
  435. #endregion
  436. #region 抓取图像
  437. /// <summary>
  438. /// 抓取图像
  439. /// </summary>
  440. /// <returns>true:float or false:NaN</returns>
  441. public Boolean GrabImage(String filename, short type)
  442. {
  443. if (m_bInitialised)
  444. {
  445. lrt = CZEMApi.Grab(0, 0, 1024, 768, type, filename);
  446. if (lrt != 0)
  447. {
  448. return false;
  449. }
  450. else
  451. {
  452. return true;
  453. }
  454. }
  455. else
  456. {
  457. return false;
  458. }
  459. }
  460. #endregion
  461. #region SEM移动接口
  462. /// <summary>
  463. /// 获取SEM移动接口X
  464. /// </summary>
  465. /// <returns>true:float or false:NaN</returns>
  466. public float GetBeamShiftX()
  467. {
  468. float ret = 0;
  469. if (ReadParams(AP_BEAMSHIFT_X, ref ret))
  470. {
  471. return ret;
  472. }
  473. else
  474. {
  475. return float.NaN;
  476. }
  477. }
  478. /// <summary>
  479. /// 获取SEM移动接口Y
  480. /// </summary>
  481. /// <returns>true:float or false:NaN</returns>
  482. public float GetBeamShiftY()
  483. {
  484. float ret = 0;
  485. if (ReadParams(AP_BEAMSHIFT_Y, ref ret))
  486. {
  487. return ret;
  488. }
  489. else
  490. {
  491. return float.NaN;
  492. }
  493. }
  494. /// <summary>
  495. /// 设置SEM移动接口X
  496. /// </summary>
  497. /// <param name="set">X坐标</param>
  498. /// <returns>true or false</returns>
  499. public Boolean SetBeamShiftX(float set)
  500. {
  501. return WriteParams(AP_BEAMSHIFT_X, set);
  502. }
  503. /// <summary>
  504. /// 设置SEM移动接口Y
  505. /// </summary>
  506. /// <param name="set">X坐标</param>
  507. /// <returns>true or false</returns>
  508. public Boolean SetBeamShiftY(float set)
  509. {
  510. return WriteParams(AP_BEAMSHIFT_Y, set);
  511. }
  512. #endregion
  513. #region 样品台移动接口
  514. /// <summary>
  515. /// 返回样品台坐标数组
  516. /// </summary>
  517. /// <returns>Lenght=6</returns>
  518. public float[] GetStagePosition()
  519. {
  520. object retx = new VariantWrapper((float)0.0f);
  521. object rety = new VariantWrapper((float)0.0f);
  522. object retz = new VariantWrapper((float)0.0f);
  523. object rett = new VariantWrapper((float)0.0f);
  524. object retr = new VariantWrapper((float)0.0f);
  525. object retm = new VariantWrapper((float)0.0f);
  526. float[] ret = new float[6];
  527. if (m_bInitialised)
  528. {
  529. CZEMApi.GetStagePosition(ref retx, ref rety, ref retz, ref rett, ref retr, ref retm);
  530. ret[0] = Convert.ToSingle(retx);
  531. ret[1] = Convert.ToSingle(rety);
  532. ret[2] = Convert.ToSingle(retz);
  533. ret[3] = Convert.ToSingle(rett);
  534. ret[4] = Convert.ToSingle(retr);
  535. ret[5] = Convert.ToSingle(retm);
  536. }
  537. else
  538. {
  539. ret[0] = float.NaN;
  540. ret[1] = float.NaN;
  541. ret[2] = float.NaN;
  542. ret[3] = float.NaN;
  543. ret[4] = float.NaN;
  544. ret[5] = float.NaN;
  545. }
  546. return ret;
  547. }
  548. /// <summary>
  549. /// 样品台位置 X轴
  550. /// </summary>
  551. /// <returns>true:float or false:NaN</returns>
  552. public float GetStageAtX()
  553. {
  554. float ret = 0;
  555. if (ReadParams(AP_STAGE_AT_X, ref ret))
  556. {
  557. return ret;
  558. }
  559. else
  560. {
  561. return float.NaN;
  562. }
  563. }
  564. /// <summary>
  565. /// 样品台位置 Y轴
  566. /// </summary>
  567. /// <returns>true:float or false:NaN</returns>
  568. public float GetStageAtY()
  569. {
  570. float ret = 0;
  571. if (ReadParams(AP_STAGE_AT_Y, ref ret))
  572. {
  573. return ret;
  574. }
  575. else
  576. {
  577. return float.NaN;
  578. }
  579. }
  580. /// <summary>
  581. /// 样品台位置 Z轴
  582. /// </summary>
  583. /// <returns>true:float or false:NaN</returns>
  584. public float GetStageAtZ()
  585. {
  586. float ret = 0;
  587. if (ReadParams(AP_STAGE_AT_Z, ref ret))
  588. {
  589. return ret;
  590. }
  591. else
  592. {
  593. return float.NaN;
  594. }
  595. }
  596. /// <summary>
  597. /// 样品台位置 T轴
  598. /// </summary>
  599. /// <returns>true:float or false:NaN</returns>
  600. public float GetStageAtT()
  601. {
  602. float ret = 0;
  603. if (ReadParams(AP_STAGE_AT_T, ref ret))
  604. {
  605. return ret;
  606. }
  607. else
  608. {
  609. return float.NaN;
  610. }
  611. }
  612. /// <summary>
  613. /// 样品台位置 R轴
  614. /// </summary>
  615. /// <returns>true:float or false:NaN</returns>
  616. public float GetStageAtR()
  617. {
  618. float ret = 0;
  619. if (ReadParams(AP_STAGE_AT_R, ref ret))
  620. {
  621. return ret;
  622. }
  623. else
  624. {
  625. return float.NaN;
  626. }
  627. }
  628. /// <summary>
  629. /// 样品台位置 M轴
  630. /// </summary>
  631. /// <returns>true:float or false:NaN</returns>
  632. public float GetStageAtM()
  633. {
  634. float ret = 0;
  635. if (ReadParams(AP_STAGE_AT_M, ref ret))
  636. {
  637. return ret;
  638. }
  639. else
  640. {
  641. return float.NaN;
  642. }
  643. }
  644. /// <summary>
  645. /// 样品台位置 X轴
  646. /// </summary>
  647. /// <param name="set">X轴移动坐标</param>
  648. /// <returns></returns>
  649. public Boolean SetStageGotoX(float set)
  650. {
  651. return WriteParams(AP_STAGE_GOTO_X, set);
  652. }
  653. /// <summary>
  654. /// 样品台位置 Y轴
  655. /// </summary>
  656. /// <param name="set">Y轴移动坐标</param>
  657. /// <returns></returns>
  658. public Boolean SetStageGotoY(float set)
  659. {
  660. return WriteParams(AP_STAGE_GOTO_Y, set);
  661. }
  662. /// <summary>
  663. /// 样品台位置 Z轴
  664. /// </summary>
  665. /// <param name="set">Y轴移动坐标</param>
  666. /// <returns></returns>
  667. public Boolean SetStageGotoZ(float set)
  668. {
  669. return WriteParams(AP_STAGE_GOTO_Z, set);
  670. }
  671. /// <summary>
  672. /// 样品台位置 T轴
  673. /// </summary>
  674. /// <param name="set">Y轴移动坐标</param>
  675. /// <returns></returns>
  676. public Boolean SetStageGotoT(float set)
  677. {
  678. return WriteParams(AP_STAGE_GOTO_T, set);
  679. }
  680. /// <summary>
  681. /// 样品台位置 R轴
  682. /// </summary>
  683. /// <param name="set">Y轴移动坐标</param>
  684. /// <returns></returns>
  685. public Boolean SetStageGotoR(float set)
  686. {
  687. return WriteParams(AP_STAGE_GOTO_R, set);
  688. }
  689. /// <summary>
  690. /// 样品台位置 M轴
  691. /// </summary>
  692. /// <param name="set">M轴移动坐标</param>
  693. /// <returns></returns>
  694. public Boolean SetStageGotoM(float set)
  695. {
  696. return WriteParams(AP_STAGE_GOTO_M, set);
  697. }
  698. #endregion
  699. #region Scan Rotate角度接口
  700. /// <summary>
  701. /// 获取Scan Rotate角度接口
  702. /// </summary>
  703. /// <returns>true:float or false:NaN</returns>
  704. public float GetScanRotation()
  705. {
  706. float ret = 0;
  707. if (ReadParams(AP_SCANROTATION, ref ret))
  708. {
  709. return ret;
  710. }
  711. else
  712. {
  713. return float.NaN;
  714. }
  715. }
  716. /// <summary>
  717. /// 设置Scan Rotate角度接口
  718. /// </summary>
  719. /// <param name="set">角度补偿</param>
  720. /// <returns>true or false</returns>
  721. public Boolean SetScanRotation(float set)
  722. {
  723. WriteDataParams(DP_SCAN_ROT, 1);
  724. return WriteParams(AP_SCANROTATION, set);
  725. WriteDataParams(DP_SCAN_ROT, 0);
  726. }
  727. #endregion
  728. #region 像素读取PixelSize
  729. /// <summary>
  730. /// 获取Pixel Size 接口,只读
  731. /// </summary>
  732. /// <returns>true:float or false:NaN</returns>
  733. public float GetPixelSize()
  734. {
  735. float ret = 0;
  736. if (ReadParams(AP_PIXEL_SIZE, ref ret))
  737. {
  738. return ret;
  739. }
  740. else
  741. {
  742. return float.NaN;
  743. }
  744. }
  745. #endregion
  746. #region 电子束校正设置
  747. /// <summary>
  748. /// 读取电子束校正状态
  749. /// </summary>
  750. /// <returns></returns>
  751. public float GetTiltCorrection()
  752. {
  753. float ret = 0;
  754. if (ReadParams(DP_TILT_CORRECTION, ref ret))
  755. {
  756. return ret;
  757. }
  758. else
  759. {
  760. return float.NaN;
  761. }
  762. }
  763. /// <summary>
  764. /// 设置电子束校正状态
  765. /// </summary>
  766. /// <param name="set"></param>
  767. /// <returns></returns>
  768. public Boolean SetTiltCorrection(float set)
  769. {
  770. return WriteDataParams(DP_TILT_CORRECTION, set);
  771. }
  772. #endregion
  773. #region 开启电压
  774. public Boolean CmdOpenVoltage()
  775. {
  776. return ExecuteCmd(CMD_BEAM_ON);
  777. }
  778. #endregion
  779. #region 关闭电压
  780. public Boolean CmdCloseVoltage()
  781. {
  782. return ExecuteCmd(CMD_EHT_OFF);
  783. }
  784. #endregion
  785. }
  786. }