DeviceFanuc.cs 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. namespace IMCS_CCS.Utils.DeviceProtocol
  5. {
  6. public class DeviceFanuc
  7. {
  8. public ushort h = 0;
  9. public DeviceFanuc(string ip, string port)
  10. {
  11. Fanuc.cnc_allclibhndl3(ip, Convert.ToUInt16(port), 1, out h);
  12. }
  13. public void freehand()
  14. {
  15. Focas1.cnc_freelibhndl(h);
  16. }
  17. public string MainProg()
  18. {
  19. Focas1.ODBPRO pnum = new Focas1.ODBPRO();
  20. int ret = Focas1.cnc_rdprgnum(h, pnum);
  21. if (ret == Fanuc.EW_OK)
  22. {
  23. return pnum.data.ToString().PadLeft(4, '0');
  24. }
  25. else
  26. {
  27. return "error";
  28. }
  29. }
  30. public string Status()
  31. {
  32. Focas1.ODBST cncStatus = new Focas1.ODBST();
  33. string[] str = new string[3];
  34. int ret = Focas1.cnc_statinfo(h, cncStatus);
  35. if (ret == Fanuc.EW_OK)
  36. {
  37. return cncStatus.run.ToString();
  38. }
  39. else
  40. {
  41. return "error";
  42. }
  43. }
  44. public string Mode()
  45. {
  46. Focas1.ODBST cncStatus = new Focas1.ODBST();
  47. string[] str = new string[3];
  48. int ret = Focas1.cnc_statinfo(h, cncStatus);
  49. if (ret == Fanuc.EW_OK)
  50. {
  51. return cncStatus.aut.ToString();
  52. }
  53. else
  54. {
  55. return "error";
  56. }
  57. }
  58. public string EMG()
  59. {
  60. Focas1.IODBPMC0 iodbpmc0 = new Focas1.IODBPMC0();
  61. int ret = Focas1.pmc_rdpmcrng(h, 0, 0, 7, 12, 14, iodbpmc0);
  62. if (ret == Fanuc.EW_OK)
  63. {
  64. byte[] data = iodbpmc0.cdata;
  65. string value = Convert.ToString(data[1], 16).ToString().PadLeft(2, '0').ToUpper();
  66. string str = Convert.ToString(Convert.ToInt32(value.ToString().Substring(0, 1)), 2).PadLeft(4, '0').Substring(3, 1);
  67. if (str == "1")
  68. return "1";
  69. else
  70. return "0";
  71. }
  72. else
  73. {
  74. return "error";
  75. }
  76. }
  77. public string ActFeed()
  78. {
  79. Focas1.IODBPMC0 iodbpmco = new Focas1.IODBPMC0();
  80. int ret = Focas1.pmc_rdpmcrng(h, 0, 1, 12, 13, 10, iodbpmco);
  81. if (ret == Fanuc.EW_OK)
  82. {
  83. return iodbpmco.cdata[0].ToString();
  84. }
  85. else
  86. {
  87. return "error";
  88. }
  89. }
  90. public string ActSpindle()
  91. {
  92. Focas1.ODBACT pindle = new Focas1.ODBACT();
  93. int ret = Focas1.cnc_acts(h, pindle);
  94. if (ret == Fanuc.EW_OK)
  95. {
  96. return pindle.data.ToString();
  97. }
  98. else
  99. {
  100. return "error";
  101. }
  102. }
  103. public string ServoLoadX()
  104. {
  105. Focas1.ODBSVLOAD sv = new Focas1.ODBSVLOAD();
  106. short a = 6;//伺服轴的数量
  107. int ret = Focas1.cnc_rdsvmeter(h, ref a, sv);
  108. if (ret == Fanuc.EW_OK)
  109. {
  110. return sv.svload1.data.ToString();
  111. }
  112. else
  113. {
  114. return "error";
  115. }
  116. }
  117. public string ServoLoadY()
  118. {
  119. Focas1.ODBSVLOAD sv = new Focas1.ODBSVLOAD();
  120. short a = 6;//伺服轴的数量
  121. int ret = Focas1.cnc_rdsvmeter(h, ref a, sv);
  122. if (ret == Fanuc.EW_OK)
  123. {
  124. return sv.svload2.data.ToString();
  125. }
  126. else
  127. {
  128. return "error";
  129. }
  130. }
  131. public string ServoLoadZ()
  132. {
  133. Focas1.ODBSVLOAD sv = new Focas1.ODBSVLOAD();
  134. short a = 6;//伺服轴的数量
  135. int ret = Focas1.cnc_rdsvmeter(h, ref a, sv);
  136. if (ret == Fanuc.EW_OK)
  137. {
  138. return sv.svload3.data.ToString();
  139. }
  140. else
  141. {
  142. return "error";
  143. }
  144. }
  145. public string PowerOnTime()
  146. {
  147. Focas1.IODBPSD_1 iodbpsd = new Focas1.IODBPSD_1();
  148. int ret = Focas1.cnc_rdparam(h, 6750, 0, 8, iodbpsd);
  149. if (ret == Fanuc.EW_OK)
  150. {
  151. return iodbpsd.ldata.ToString();
  152. }
  153. else
  154. {
  155. return "error";
  156. }
  157. }
  158. public string AccumulateCuttingTime()
  159. {
  160. Focas1.IODBPSD_1 iodbpsd = new Focas1.IODBPSD_1();
  161. int ret = Focas1.cnc_rdparam(h, 6754, 0, 8, iodbpsd);
  162. if (ret == Fanuc.EW_OK)
  163. {
  164. return iodbpsd.ldata.ToString();
  165. }
  166. else
  167. {
  168. return "error";
  169. }
  170. }
  171. public string CuttingTimePerCycle()
  172. {
  173. Focas1.IODBPSD_1 iodbpsd = new Focas1.IODBPSD_1();
  174. int min = 0;
  175. int sec = 0;
  176. int ret = Focas1.cnc_rdparam(h, 6757, 0, 8, iodbpsd);//秒
  177. if (ret == Focas1.EW_OK)
  178. {
  179. sec = iodbpsd.ldata;
  180. ret = Focas1.cnc_rdparam(h, 6758, 0, 8, iodbpsd);//分
  181. if (ret == Focas1.EW_OK)
  182. {
  183. min = iodbpsd.ldata;
  184. return (min * 60 * 1000 + sec).ToString();
  185. }
  186. else
  187. { return "error"; }
  188. }
  189. else { return "error"; }
  190. }
  191. public string WorkTime()
  192. {
  193. Focas1.IODBPSD_1 iodbpsd = new Focas1.IODBPSD_1();
  194. int ret = Focas1.cnc_rdparam(h, 6752, -1, 8, iodbpsd);
  195. if (ret == Fanuc.EW_OK)
  196. {
  197. return iodbpsd.ldata.ToString();
  198. }
  199. else
  200. {
  201. return "error";
  202. }
  203. }
  204. public string Part_Count()
  205. {
  206. Focas1.IODBPSD_1 iodbpsd = new Focas1.IODBPSD_1();
  207. int ret = Focas1.cnc_rdparam(h, 6712, 0, 8, iodbpsd);
  208. if (ret == Fanuc.EW_OK)
  209. {
  210. return iodbpsd.ldata.ToString();
  211. }
  212. else
  213. {
  214. return "error";
  215. }
  216. }
  217. public string ToolNo()
  218. {
  219. Focas1.ODBM odb = new Focas1.ODBM();
  220. int ret = Focas1.cnc_rdmacro(h, 523, 10, odb);
  221. if (ret == Fanuc.EW_OK)
  222. {
  223. return (odb.mcr_val * Math.Pow(10, -odb.dec_val)).ToString();
  224. }
  225. else
  226. {
  227. return "error";
  228. }
  229. }
  230. public string ToolLife()
  231. {
  232. Fanuc.ODBTLIFE5 tool = new Focas1.ODBTLIFE5();//读取刀片组的序号
  233. Fanuc.ODBTLIFE2 tool1 = new Focas1.ODBTLIFE2();//读取刀片组的全部数量
  234. Fanuc.ODBTLIFE3 tool2 = new Focas1.ODBTLIFE3();//刀具的数量
  235. Fanuc.ODBTG btg = new Focas1.ODBTG();
  236. Fanuc.ODBUSEGRP grp = new Focas1.ODBUSEGRP();
  237. int m = 2;
  238. Fanuc.cnc_rdgrpid2(h, m, tool);
  239. int group_numer = tool.data;
  240. int all = Fanuc.cnc_rdngrp(Fanuc.h, tool1);//刀片组的全部数量
  241. short b = Convert.ToInt16(group_numer);
  242. Fanuc.cnc_rdntool(h, b, tool2);//刀具的数量
  243. Fanuc.cnc_rdlife(h, b, tool2);//刀具寿命
  244. Fanuc.cnc_rdcount(h, b, tool2);//刀具计时器
  245. Fanuc.cnc_rdtoolgrp(h, 2, 20 + 20 * 1, btg);//根据刀组号读出所有信息,很重要;
  246. int ret = Fanuc.cnc_rdtlusegrp(h, grp);//读出正在使用的到组号;
  247. if (ret == Fanuc.EW_OK)
  248. {
  249. return tool2.data.ToString();
  250. }
  251. else
  252. {
  253. return "error";
  254. }
  255. }
  256. public List<AlmInfo> AlmMsg(out string IsAlarm)
  257. {
  258. List<AlmInfo> stateinfo = new List<AlmInfo>();
  259. IsAlarm = "0";
  260. ushort h = 0;
  261. short b = -1;//哪一类报警,-1所有报警
  262. short num = 11;//设大一些没关系
  263. Focas1.ODBALMMSG odbalmmsg2 = new Focas1.ODBALMMSG();
  264. int ret = Focas1.cnc_rdalmmsg(h, b, ref num, odbalmmsg2);
  265. System.Type type = odbalmmsg2.GetType();
  266. if (ret == 0)
  267. {
  268. if (num > 0)
  269. {
  270. IsAlarm = "1";
  271. for (int i = 0; i <= num - 1; i++)
  272. {
  273. string str1 = "msg";
  274. str1 = str1 + (i + 1);
  275. object obj = type.GetField(str1).GetValue(odbalmmsg2);
  276. //if(obj.)
  277. System.Type type1 = obj.GetType();
  278. if (type1.GetField("alm_msg").GetValue(obj).ToString() != "")
  279. {
  280. AlmInfo s = new AlmInfo();
  281. s.no = Convert.ToInt32(type1.GetField("alm_no").GetValue(obj).ToString()).ToString();
  282. s.msg = type1.GetField("alm_msg").GetValue(obj).ToString();
  283. stateinfo.Add(s);
  284. }
  285. }
  286. return stateinfo;
  287. }
  288. else
  289. {
  290. IsAlarm = "0";
  291. AlmInfo s2 = new AlmInfo();
  292. s2.no = "0";
  293. s2.msg = "无报警";
  294. stateinfo.Add(s2);
  295. return stateinfo;
  296. }
  297. }
  298. else
  299. {
  300. IsAlarm = "0";
  301. AlmInfo s3 = new AlmInfo();
  302. s3.no = "0";
  303. s3.msg = "无报警";
  304. stateinfo.Add(s3);
  305. return stateinfo;
  306. }
  307. }
  308. public string ReadSpindleSpeed()
  309. {
  310. Focas1.ODBACT pindle = new Focas1.ODBACT();
  311. string str = "";
  312. int ret = Focas1.cnc_acts(Fanuc.h, pindle);
  313. if (ret == 0)
  314. str = pindle.data.ToString();
  315. else str = "错误";
  316. return str;
  317. }
  318. public string GetSpload()
  319. {
  320. string str = "";
  321. Focas1.ODBSPLOAD ODBSPLOAD = new Focas1.ODBSPLOAD();
  322. short typel = 0;
  323. short bl = 4;
  324. int ret = Focas1.cnc_rdspmeter(Fanuc.h, typel, ref bl, ODBSPLOAD);
  325. if (ret == Focas1.EW_OK)
  326. str = ODBSPLOAD.spload1.spload.data.ToString();
  327. else
  328. str = "返回错误";
  329. return str;
  330. }
  331. public string GetSpload1()
  332. {
  333. string str = "";
  334. Focas1.ODBSPLOAD ODBSPLOAD = new Focas1.ODBSPLOAD();
  335. short typel = 0;
  336. short bl = 1;
  337. int ret = Focas1.cnc_rdspmeter(Fanuc.h, typel, ref bl, ODBSPLOAD);
  338. if (ret == Focas1.EW_OK)
  339. str = ODBSPLOAD.spload1.spload.data.ToString();
  340. else
  341. str = "返回错误";
  342. return str;
  343. }
  344. public string GetSpload2()
  345. {
  346. string str = "";
  347. Focas1.ODBSPLOAD ODBSPLOAD = new Focas1.ODBSPLOAD();
  348. short typel = 0;
  349. short bl = 2;
  350. int ret = Focas1.cnc_rdspmeter(Fanuc.h, typel, ref bl, ODBSPLOAD);
  351. if (ret == Focas1.EW_OK)
  352. str = ODBSPLOAD.spload1.spload.data.ToString();
  353. else
  354. str = "返回错误";
  355. return str;
  356. }
  357. public string GetSpload3()
  358. {
  359. string str = "";
  360. Focas1.ODBSPLOAD ODBSPLOAD = new Focas1.ODBSPLOAD();
  361. short typel = 0;
  362. short bl = 3;
  363. int ret = Focas1.cnc_rdspmeter(Fanuc.h, typel, ref bl, ODBSPLOAD);
  364. if (ret == Focas1.EW_OK)
  365. str = ODBSPLOAD.spload1.spload.data.ToString();
  366. else
  367. str = "返回错误";
  368. return str;
  369. }
  370. /// <summary>
  371. /// fanuc单次计数
  372. /// </summary>
  373. /// <returns></returns>
  374. public string GetNumber()
  375. {
  376. Focas1.IODBPSD_1 iodbpsd = new Focas1.IODBPSD_1();
  377. int ret = Focas1.cnc_rdparam(Fanuc.h, 6711, 0, 50, iodbpsd);
  378. if (ret == 0)
  379. {
  380. return iodbpsd.idata.ToString();
  381. }
  382. else { return "0"; }
  383. }
  384. /// <summary>
  385. /// fanuc累计计数
  386. /// </summary>
  387. /// <returns></returns>
  388. public string GetTotalNumber()
  389. {
  390. Focas1.IODBPSD_1 iodbpsd = new Focas1.IODBPSD_1();
  391. int ret = Focas1.cnc_rdparam(Fanuc.h, 6712, 0, 8, iodbpsd);
  392. if (ret == 0)
  393. {
  394. return iodbpsd.ldata.ToString();
  395. }
  396. else { return "0"; }
  397. }
  398. static Focas1.IODBPMC0 iodbpmco = new Focas1.IODBPMC0();
  399. public string GetSploadRatio()
  400. {
  401. int ret = Focas1.pmc_rdpmcrng(Fanuc.h, 0, 1, 30, 31, 10, iodbpmco);
  402. if (ret == 0)
  403. {
  404. return iodbpmco.cdata[0].ToString();
  405. }
  406. else { return "0"; }
  407. }
  408. public string GetFeedrate()
  409. {
  410. int ret = Focas1.pmc_rdpmcrng(Fanuc.h, 0, 1, 12, 13, 10, iodbpmco);
  411. if (ret == 0)
  412. {
  413. return (255 - iodbpmco.cdata[0]).ToString();
  414. }
  415. else { return "0"; }
  416. }
  417. public string GetEmergencyStopStatus()
  418. {
  419. try
  420. {
  421. Focas1.IODBPMC0 iodbpmc0 = new Focas1.IODBPMC0();
  422. int ret = Focas1.pmc_rdpmcrng(Fanuc.h, 0, 0, 7, 12, 14, iodbpmc0);
  423. if (ret == Focas1.EW_OK)
  424. {
  425. byte[] data = iodbpmc0.cdata;
  426. string value = Convert.ToString(data[1], 16).ToString().PadLeft(2, '0').ToUpper();
  427. string str = Convert.ToString(Convert.ToInt32(value.ToString().Substring(0, 1)), 2).PadLeft(4, '0').Substring(3, 1);
  428. if (str == "1")
  429. {
  430. return "否";
  431. }
  432. else { return "是"; }
  433. }
  434. else
  435. {
  436. return ret.ToString();
  437. }
  438. }
  439. catch
  440. {
  441. return "Filed";
  442. }
  443. }
  444. /// <summary>
  445. /// 有效轴数
  446. /// </summary>
  447. /// <param name="xd">相对位置</param>
  448. /// <param name="jd">绝对位置</param>
  449. /// <param name="jx">机械位置</param>
  450. /// <param name="sy">剩余位置</param>
  451. /// <returns></returns>
  452. public string GetPostion(out string xd, out string jd, out string jx, out string sy)
  453. {
  454. xd = ""; jd = ""; jx = ""; sy = "";
  455. Fanuc.ODBPOS fos = new Focas1.ODBPOS();
  456. short num = Fanuc.MAX_AXIS;
  457. short type = -1;
  458. short ret = Fanuc.cnc_rdposition(Fanuc.h, type, ref num, fos);
  459. if (ret == 0)
  460. {
  461. xd += fos.p1.rel.name.ToString() + ": " + fos.p1.rel.data * Math.Pow(10, -fos.p1.rel.dec) + ",";
  462. xd += fos.p2.rel.name.ToString() + ": " + fos.p2.rel.data * Math.Pow(10, -fos.p2.rel.dec) + ",";
  463. xd += fos.p3.rel.name.ToString() + ": " + fos.p3.rel.data * Math.Pow(10, -fos.p3.rel.dec) + ",";
  464. xd += fos.p4.rel.name.ToString() + ": " + fos.p4.rel.data * Math.Pow(10, -fos.p4.rel.dec) + ",";
  465. xd += fos.p5.rel.name.ToString() + ": " + fos.p5.rel.data * Math.Pow(10, -fos.p5.rel.dec);
  466. jd += fos.p1.abs.name.ToString() + ": " + fos.p1.abs.data * Math.Pow(10, -fos.p1.abs.dec) + ",";
  467. jd += fos.p2.abs.name.ToString() + ": " + fos.p2.abs.data * Math.Pow(10, -fos.p2.abs.dec) + ",";
  468. jd += fos.p3.abs.name.ToString() + ": " + fos.p3.abs.data * Math.Pow(10, -fos.p3.abs.dec) + ",";
  469. jd += fos.p4.abs.name.ToString() + ": " + fos.p4.abs.data * Math.Pow(10, -fos.p3.abs.dec) + ",";
  470. jd += fos.p5.abs.name.ToString() + ": " + fos.p5.abs.data * Math.Pow(10, -fos.p5.abs.dec);
  471. jx += fos.p1.mach.name.ToString() + ": " + fos.p1.mach.data * Math.Pow(10, -fos.p1.mach.dec) + ",";
  472. jx += fos.p2.mach.name.ToString() + ": " + fos.p2.mach.data * Math.Pow(10, -fos.p2.mach.dec) + ",";
  473. jx += fos.p3.mach.name.ToString() + ": " + fos.p3.mach.data * Math.Pow(10, -fos.p3.mach.dec) + ",";
  474. jx += fos.p4.mach.name.ToString() + ": " + fos.p4.mach.data * Math.Pow(10, -fos.p4.mach.dec) + ",";
  475. jx += fos.p5.mach.name.ToString() + ": " + fos.p5.mach.data * Math.Pow(10, -fos.p5.mach.dec);
  476. sy += fos.p1.dist.name.ToString() + ": " + fos.p1.dist.data * Math.Pow(10, -fos.p1.dist.dec) + ",";
  477. sy += fos.p2.dist.name.ToString() + ": " + fos.p2.dist.data * Math.Pow(10, -fos.p2.dist.dec) + ",";
  478. sy += fos.p3.dist.name.ToString() + ": " + fos.p3.dist.data * Math.Pow(10, -fos.p3.dist.dec) + ",";
  479. sy += fos.p4.dist.name.ToString() + ": " + fos.p3.dist.data * Math.Pow(10, -fos.p4.dist.dec) + ",";
  480. sy += fos.p5.dist.name.ToString() + ": " + fos.p5.dist.data * Math.Pow(10, -fos.p5.dist.dec);
  481. }
  482. return num.ToString();
  483. }
  484. public string GetFeedSpeed()
  485. {
  486. Focas1.ODBACT feedspeed = new Focas1.ODBACT();
  487. Focas1.cnc_actf(Fanuc.h, feedspeed);
  488. return feedspeed.data.ToString();
  489. }
  490. public string GetSdTime()
  491. {
  492. Focas1.IODBPSD_1 iodbpsd = new Focas1.IODBPSD_1();
  493. int ret = Focas1.cnc_rdparam(Fanuc.h, 6750, 0, 8, iodbpsd);
  494. if (ret == 0)
  495. {
  496. return iodbpsd.ldata.ToString();
  497. }
  498. else { return "Filed"; }
  499. }
  500. public string GetRunningTime()
  501. {
  502. Focas1.IODBPSD_1 iodbpsd = new Focas1.IODBPSD_1();
  503. int ret = Focas1.cnc_rdparam(Fanuc.h, 6752, -1, 8, iodbpsd);
  504. if (ret == 0)
  505. {
  506. return iodbpsd.ldata.ToString();
  507. }
  508. else { return "Filed"; }
  509. }
  510. public string GetQXTime()
  511. {
  512. Focas1.IODBPSD_1 iodbpsd = new Focas1.IODBPSD_1();
  513. int ret = Focas1.cnc_rdparam(Fanuc.h, 6754, 0, 8, iodbpsd);
  514. if (ret == 0)
  515. {
  516. return iodbpsd.ldata.ToString();
  517. }
  518. else { return "Filed"; }
  519. }
  520. public string GetCycleTime()
  521. {
  522. Focas1.IODBPSD_1 iodbpsd = new Focas1.IODBPSD_1();
  523. int min = 0;
  524. int sec = 0;
  525. int ret = Focas1.cnc_rdparam(Fanuc.h, 6757, 0, 8, iodbpsd);//秒
  526. if (ret == Focas1.EW_OK)
  527. {
  528. sec = iodbpsd.ldata;
  529. ret = Focas1.cnc_rdparam(Fanuc.h, 6758, 0, 8, iodbpsd);//分
  530. if (ret == Focas1.EW_OK)
  531. {
  532. min = iodbpsd.ldata;
  533. return (min * 60 * 1000 + sec).ToString();
  534. }
  535. else
  536. { return "Filed"; }
  537. }
  538. else { return "Filed"; }
  539. }
  540. public enum MacModeLists
  541. {
  542. MDI = 0,
  543. MEMory = 1,
  544. Null = 2,
  545. EDIT = 3,
  546. HaNDle = 4,
  547. JOG = 5,
  548. TeachInJOG = 6,
  549. TeachInHaNDle = 7,
  550. INCfeed = 8,
  551. REFerence = 9,
  552. ReMoTe = 10,
  553. }
  554. /// <summary>
  555. ///
  556. /// </summary>
  557. /// <param name="Macmode">工作模式</param>
  558. /// <param name="Runstatus">加工状态</param>
  559. public void GetStateInfo(out string Macmode, out string Runstatus)
  560. {
  561. Focas1.ODBST cncStatus = new Focas1.ODBST();
  562. string[] str = new string[3];
  563. Focas1.cnc_statinfo(Fanuc.h, cncStatus);
  564. Macmode = Enum.GetNames(typeof(MacModeLists))[cncStatus.aut];
  565. Runstatus = Enum.GetNames(typeof(MacModeLists))[cncStatus.run];
  566. }
  567. /// <summary>
  568. /// 返回注册程序量
  569. /// </summary>
  570. /// <param name="unreg_prg">可用程序数量</param>
  571. /// <param name="unused_mem">未使用的内存</param>
  572. /// <param name="used_mem">已经使用内存</param>
  573. /// <returns></returns>
  574. public string GetRegPrg(out string unreg_prg, out string unused_mem, out string used_mem)
  575. {
  576. Focas1.ODBNC_1 odbnc_1 = new Focas1.ODBNC_1();
  577. short ret = Focas1.cnc_rdproginfo(Fanuc.h, 0, 16, odbnc_1);
  578. if (ret == Focas1.EW_OK)
  579. {
  580. unreg_prg = odbnc_1.unreg_prg.ToString();
  581. unused_mem = ((int)(Convert.ToDouble(odbnc_1.unused_mem) / 1024.0 + 0.5)).ToString();
  582. used_mem = ((int)(Convert.ToDouble(odbnc_1.used_mem) / 1024.0 + 0.5)).ToString();
  583. return odbnc_1.reg_prg.ToString();
  584. }
  585. else
  586. {
  587. unreg_prg = "Filed";
  588. unused_mem = "Filed";
  589. used_mem = "Filed";
  590. return "Filed";
  591. }
  592. }
  593. /// <summary>
  594. /// 获取当前执行的刀号
  595. /// </summary>
  596. /// <param name="no"></param>
  597. /// <returns></returns>
  598. public string FGetToolNum()
  599. {
  600. string result = "";
  601. Focas1.ODBM odb = new Focas1.ODBM();
  602. var ret = Focas1.cnc_rdmacro(Fanuc.h, 4320, 10, odb);
  603. if (ret == 0)
  604. {
  605. result = (odb.mcr_val * Math.Pow(10, -odb.dec_val)).ToString();
  606. return result;
  607. }
  608. else
  609. {
  610. return "获取失败";
  611. }
  612. }
  613. /// <summary>
  614. /// 执行行号
  615. /// </summary>
  616. /// <param name="no"></param>
  617. /// <param name="result"></param>
  618. /// <returns></returns>
  619. public string FGetPrgSeq()
  620. {
  621. string result = "";
  622. Focas1.ODBSEQ snum = new Focas1.ODBSEQ();
  623. var ret = Focas1.cnc_rdseqnum(Fanuc.h, snum);
  624. if (ret == Focas1.EW_OK)
  625. {
  626. //return result = (String.Format("N{0:00000}", snum.data));
  627. return result = snum.data.ToString();
  628. }
  629. else
  630. {
  631. return "失败";
  632. }
  633. }
  634. /// <summary>
  635. /// 当前执行代码
  636. /// </summary>
  637. /// <returns></returns>
  638. public string FGetCurrentPrg()
  639. {
  640. ushort length = 48;
  641. short b = 0;
  642. char[] c = new char[length];
  643. var ret = Focas1.cnc_rdexecprog(Fanuc.h, ref length, out b, c);
  644. if (ret == Focas1.EW_OK)
  645. {
  646. return new string(c);
  647. }
  648. else
  649. {
  650. return "失败";
  651. }
  652. }
  653. public string GetCanUsePrg()
  654. {
  655. Focas1.ODBNC_1 odbnc_1 = new Focas1.ODBNC_1();
  656. short ret = Focas1.cnc_rdproginfo(Fanuc.h, 0, 16, odbnc_1);
  657. if (ret == Focas1.EW_OK)
  658. {
  659. return odbnc_1.unreg_prg.ToString();
  660. }
  661. else
  662. {
  663. return "Filed";
  664. }
  665. }
  666. public string GetUnUsedMes()
  667. {
  668. Focas1.ODBNC_1 odbnc_1 = new Focas1.ODBNC_1();
  669. short ret = Focas1.cnc_rdproginfo(Fanuc.h, 0, 16, odbnc_1);
  670. if (ret == Focas1.EW_OK)
  671. {
  672. return ((int)(Convert.ToDouble(odbnc_1.unused_mem) / 1024.0 + 0.5)).ToString();
  673. }
  674. else
  675. {
  676. return "Filed";
  677. }
  678. }
  679. public string GetUsedMes()
  680. {
  681. Focas1.ODBNC_1 odbnc_1 = new Focas1.ODBNC_1();
  682. short ret = Focas1.cnc_rdproginfo(Fanuc.h, 0, 16, odbnc_1);
  683. if (ret == Focas1.EW_OK)
  684. {
  685. return ((int)(Convert.ToDouble(odbnc_1.used_mem) / 1024.0 + 0.5)).ToString();
  686. }
  687. else
  688. {
  689. return "Filed";
  690. }
  691. }
  692. public string GetPmcProgramNumber()
  693. {
  694. Focas1.ODBPRO pnum = new Focas1.ODBPRO();
  695. int ret = Focas1.cnc_rdprgnum(Fanuc.h, pnum);
  696. if (ret == Focas1.EW_OK)
  697. {
  698. return pnum.data.ToString().PadLeft(4, '0');
  699. }
  700. else
  701. {
  702. return "程序号Filed";
  703. }
  704. }
  705. public string GetProgramCodes(out string ProgramNumber)
  706. {
  707. ProgramNumber = GetPmcProgramNumber();
  708. if (ProgramNumber != "Filed")
  709. {
  710. short cncNb = Convert.ToInt16(ProgramNumber);
  711. string data = "";
  712. short ret = Fanuc.upload(Fanuc.h, 0, cncNb, ref data, null);
  713. if (ret == 0)
  714. {
  715. data = data.Replace("\n", "\r\n");
  716. return data;
  717. }
  718. else
  719. {
  720. return "Filed,可能受保护";
  721. }
  722. }
  723. else
  724. {
  725. return "Filed,可能受保护";
  726. }
  727. }
  728. public string Get_tool_offset()
  729. {
  730. Fanuc.ODBTLINF inf = new Focas1.ODBTLINF();
  731. Fanuc.ODBTOFS tof = new Focas1.ODBTOFS();
  732. Fanuc.cnc_rdtofsinfo(Fanuc.h, inf);
  733. short a = inf.use_no;
  734. short b = inf.ofs_type;
  735. short ret = Fanuc.cnc_rdtofs(Fanuc.h, a, b, 8, tof);
  736. if (ret == 0)
  737. {
  738. return tof.data.ToString();
  739. }
  740. else
  741. return "Filed";
  742. }
  743. /// <summary>
  744. ///
  745. /// </summary>
  746. /// <param name="dpsl">刀片组数量</param>
  747. /// <param name="dph">刀片号</param>
  748. /// <param name="dpzh">刀组号</param>
  749. /// <param name="smjs">寿命计时</param>
  750. public void Get_tool_life(out string dpsl, out string dph, out string dpzh, out string smjs)//读取获得刀片的有关信息
  751. {
  752. Fanuc.ODBTLIFE5 tool = new Focas1.ODBTLIFE5();//读取刀片组的序号
  753. Fanuc.ODBTLIFE2 tool1 = new Focas1.ODBTLIFE2();//读取刀片组的全部数量
  754. Fanuc.ODBTLIFE3 tool2 = new Focas1.ODBTLIFE3();//刀具的数量
  755. Fanuc.ODBTG btg = new Focas1.ODBTG();
  756. Fanuc.ODBUSEGRP grp = new Focas1.ODBUSEGRP();
  757. int m = 2;
  758. Fanuc.cnc_rdgrpid2(Fanuc.h, m, tool);
  759. int group_numer = tool.data;
  760. int all = Fanuc.cnc_rdngrp(Fanuc.h, tool1);//刀片组的全部数量
  761. short b = Convert.ToInt16(group_numer);
  762. Fanuc.cnc_rdntool(Fanuc.h, b, tool2);//刀具的数量
  763. Fanuc.cnc_rdlife(Fanuc.h, b, tool2);//刀具寿命
  764. Fanuc.cnc_rdcount(Fanuc.h, b, tool2);//刀具计时器
  765. Fanuc.cnc_rdtoolgrp(Fanuc.h, 2, 20 + 20 * 1, btg);//根据刀组号读出所有信息,很重要;
  766. Fanuc.cnc_rdtlusegrp(Fanuc.h, grp);//读出正在使用的到组号;
  767. dpsl = all.ToString();
  768. dph = tool2.ToString();
  769. dpzh = group_numer.ToString();
  770. smjs = tool2.data.ToString();
  771. }
  772. public int FreeHndl()
  773. {
  774. int ret = Focas1.cnc_freelibhndl(Fanuc.h);
  775. return ret;
  776. }
  777. public string bj()
  778. {
  779. string alarmmsg = "";
  780. short b = -1;//哪一类报警,-1所有报警
  781. short num = 11;//设大一些没关系
  782. Focas1.ODBALMMSG odbalmmsg2 = new Focas1.ODBALMMSG();
  783. var ret = Focas1.cnc_rdalmmsg(Fanuc.h, b, ref num, odbalmmsg2);
  784. System.Type type = odbalmmsg2.GetType();
  785. if (ret == 0)
  786. {
  787. if (num > 0)
  788. {
  789. for (int i = 0; i <= num - 1; i++)
  790. {
  791. string str1 = "msg";
  792. str1 = str1 + (i + 1);
  793. object obj = type.GetField(str1).GetValue(odbalmmsg2);
  794. //if(obj.)
  795. System.Type type1 = obj.GetType();
  796. if (type1.GetField("alm_msg").GetValue(obj).ToString() != "")
  797. {
  798. alarmmsg += "第" + i + "行" + "警报号 " + type1.GetField("alm_no").GetValue(obj).ToString().Trim() + "警报信息" + type1.GetField("alm_msg").GetValue(obj).ToString().Trim() + ",";
  799. }
  800. }
  801. }
  802. else
  803. {
  804. }
  805. }
  806. else
  807. {
  808. }
  809. if (alarmmsg == "")
  810. {
  811. alarmmsg = "暂无报警";
  812. }
  813. return alarmmsg;
  814. }
  815. public class AlmInfo
  816. {
  817. public string no { get; set; }
  818. public string msg { get; set; }
  819. }
  820. public class NcInfo
  821. {
  822. public string no { get; set; }
  823. public string lentgh { get; set; }
  824. public string comment { get; set; }
  825. }
  826. }
  827. }