HZFC_DengDaiDianJiaoJi.c 27 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117
  1. #include "global.h"
  2. #if FU_CHEN_MACHINE == 1
  3. //故障报警
  4. void DDDJ_SetAlarmCode(unsigned alarm_code)
  5. {
  6. SetAlarmCode(ALARM_ADDR,alarm_code);
  7. bAlarmStop=1;
  8. }
  9. //X轴回零
  10. static int X_ReSetOrigin(void)
  11. {
  12. switch(XRunResetOStep)
  13. {
  14. case 1:
  15. AxisDisableSoftwarelmt(X_AXIS);
  16. if(dwTickCount >= ReSetXDelay)
  17. {
  18. if(X_Reset_Flag)
  19. {
  20. ReSetXOUT_TIME = dwTickCount + 15000;
  21. if(!DDDJ_X_ORIGIN_IN)
  22. {
  23. XRunResetOStep = 2;
  24. AxisContinueMoveAcc(X_AXIS,PARAM_XREST_SPEED,DIR_N,
  25. 1000,1000,20,20);
  26. }
  27. else
  28. {
  29. AxisContinueMoveAcc(X_AXIS,PARAM_XREST_SPEED/2,DIR_P,1000,1000,20,20);
  30. XRunResetOStep = 4;
  31. }
  32. }
  33. else
  34. {
  35. if(0-dwXRealPos)
  36. AxisMovePosAccDec(X_AXIS,PARAM_XREST_SPEED,0-dwXRealPos,1000,1000,50,50,0);
  37. XRunResetOStep = 10;
  38. ReSetXOUT_TIME = dwTickCount + 10000;
  39. }
  40. }
  41. break;
  42. case 2:
  43. if(DDDJ_X_ORIGIN_IN)
  44. {
  45. AxisDecStop(X_AXIS);
  46. XRunResetOStep = 3;
  47. ReSetXDelay = dwTickCount + 10;
  48. ReSetXOUT_TIME = dwTickCount + 15000;
  49. }
  50. break;
  51. case 3:
  52. if(!X_DRV&&dwTickCount >= ReSetXDelay)
  53. {
  54. AxisContinueMoveAcc(X_AXIS,1000,DIR_P,1000,1000,20,20);
  55. XRunResetOStep = 4;
  56. }
  57. break;
  58. case 4:
  59. if(!DDDJ_X_ORIGIN_IN)
  60. {
  61. XRunResetOStep = 5;
  62. ReSetXDelay = dwTickCount + 50;
  63. ReSetXOUT_TIME = dwTickCount + 15000;
  64. }
  65. break;
  66. case 5:
  67. if(!DDDJ_X_ORIGIN_IN&&dwTickCount >= ReSetXDelay)
  68. {
  69. AxisEgmStop(X_AXIS);
  70. XRunResetOStep = 6;
  71. ReSetXDelay = dwTickCount + 10;
  72. }
  73. break;
  74. case 6:
  75. if(!X_DRV&&dwTickCount >= ReSetXDelay)
  76. {
  77. XRunResetOStep = 7;
  78. AxisContinueMoveAcc(X_AXIS,800,DIR_N,800,800,20,20);
  79. }
  80. break;
  81. case 7:
  82. if(DDDJ_X_ORIGIN_IN)
  83. {
  84. AxisEgmStop(X_AXIS);
  85. XRunResetOStep = 9;
  86. ReSetXDelay = dwTickCount + 20;
  87. }
  88. break;
  89. case 9:
  90. if(!X_DRV&&dwTickCount >= ReSetXDelay)
  91. {
  92. XRunResetOStep = 10;
  93. AxisMovePosAccDec(X_AXIS,PARAM_XREST_SPEED,-10,1000,1000,20,20,0);
  94. }
  95. break;
  96. case 10:
  97. if(!X_DRV)
  98. {
  99. SetPos(X_AXIS,0);
  100. AxisEnableSoftwarelmt(X_AXIS,PARAM_XMAX_LENGTH,0);
  101. XRunResetOStep = 11;
  102. ReSetXDelay = dwTickCount + 50;
  103. }
  104. else if(dwTickCount >= ReSetXOUT_TIME) //多长时间没回到位警告
  105. {
  106. XRunResetOStep = 0;
  107. bXRsting=0;
  108. SetAlarmCode(ALARM_ADDR,X_ORIGIN_ALARM);//机械手回零故障
  109. return 0;
  110. }
  111. break;
  112. case 11:
  113. if(dwTickCount>=ReSetXDelay)
  114. {
  115. XRunResetOStep = 12;
  116. }
  117. break;
  118. case 12:
  119. if(!X_DRV)
  120. {
  121. X_Reset_Flag=0;
  122. XRunResetOStep = 0;
  123. bXRsting=0;
  124. }
  125. break;
  126. }
  127. return 0;
  128. }
  129. //Y轴回零
  130. static int Y_ReSetOrigin(void)
  131. {
  132. switch(YRunResetOStep)
  133. {
  134. case 1:
  135. AxisDisableSoftwarelmt(Y_AXIS);
  136. if(dwTickCount >= ReSetYDelay)
  137. {
  138. if(Y_Reset_Flag)
  139. {
  140. ReSetYOUT_TIME = dwTickCount + 15000;
  141. if(!DDDJ_Y_ORIGIN_IN)
  142. {
  143. YRunResetOStep = 2;
  144. AxisContinueMoveAcc(Y_AXIS,PARAM_YREST_SPEED,DIR_N,
  145. 1000,1000,20,20);
  146. }
  147. else
  148. {
  149. AxisContinueMoveAcc(Y_AXIS,PARAM_YREST_SPEED/2,DIR_P,1000,1000,20,20);
  150. YRunResetOStep = 4;
  151. }
  152. }
  153. else
  154. {
  155. if(0-dwYRealPos)
  156. AxisMovePosAccDec(Y_AXIS,PARAM_YREST_SPEED,0-dwYRealPos,1000,1000,50,50,0);
  157. YRunResetOStep = 10;
  158. ReSetYOUT_TIME = dwTickCount + 10000;
  159. }
  160. }
  161. break;
  162. case 2:
  163. if(DDDJ_Y_ORIGIN_IN)
  164. {
  165. AxisDecStop(Y_AXIS);
  166. YRunResetOStep = 3;
  167. ReSetYDelay = dwTickCount + 10;
  168. }
  169. break;
  170. case 3:
  171. if(!Y_DRV&&dwTickCount >= ReSetYDelay)
  172. {
  173. AxisContinueMoveAcc(Y_AXIS,1000,DIR_P,1000,1000,20,20);
  174. YRunResetOStep = 4;
  175. }
  176. break;
  177. case 4:
  178. if(!DDDJ_Y_ORIGIN_IN)
  179. {
  180. YRunResetOStep = 5;
  181. ReSetYDelay = dwTickCount + 50;
  182. }
  183. break;
  184. case 5:
  185. if(!DDDJ_Y_ORIGIN_IN&&dwTickCount >= ReSetYDelay)
  186. {
  187. AxisEgmStop(Y_AXIS);
  188. YRunResetOStep = 6;
  189. ReSetYDelay = dwTickCount + 10;
  190. }
  191. break;
  192. case 6:
  193. if(!Y_DRV&&dwTickCount >= ReSetYDelay)
  194. {
  195. YRunResetOStep = 7;
  196. AxisContinueMoveAcc(Y_AXIS,800,DIR_N,800,800,20,20);
  197. }
  198. break;
  199. case 7:
  200. if(DDDJ_Y_ORIGIN_IN)
  201. {
  202. AxisEgmStop(Y_AXIS);
  203. YRunResetOStep = 9;
  204. ReSetYDelay = dwTickCount + 20;
  205. }
  206. break;
  207. case 9:
  208. if(!Y_DRV&&dwTickCount >= ReSetYDelay)
  209. {
  210. YRunResetOStep = 10;
  211. AxisMovePosAccDec(Y_AXIS,1000,-10,1000,1000,20,20,0);
  212. }
  213. break;
  214. case 10:
  215. if(!Y_DRV)
  216. {
  217. SetPos(Y_AXIS,0);
  218. AxisEnableSoftwarelmt(Y_AXIS,PARAM_YMAX_LENGTH,0);
  219. YRunResetOStep = 11;
  220. ReSetYDelay = dwTickCount + 50;
  221. }
  222. else if(dwTickCount >= ReSetYOUT_TIME) //多长时间没回到位警告
  223. {
  224. YRunResetOStep = 0;
  225. bXRsting=0;
  226. SetAlarmCode(ALARM_ADDR,Y_ORIGIN_ALARM);//机械手回零故障
  227. return 0;
  228. }
  229. break;
  230. case 11:
  231. if(dwTickCount>=ReSetYDelay)
  232. {
  233. YRunResetOStep = 12;
  234. }
  235. break;
  236. case 12:
  237. if(!Y_DRV)
  238. {
  239. Y_Reset_Flag=0;
  240. YRunResetOStep = 0;
  241. bYRsting=0;
  242. }
  243. break;
  244. }
  245. return 0;
  246. }
  247. //Z轴回零
  248. static int Z_ReSetOrigin(void)
  249. {
  250. switch(ZRunResetOStep)
  251. {
  252. case 1:
  253. AxisDisableSoftwarelmt(Z_AXIS);
  254. if(dwTickCount >= ReSetZDelay)
  255. {
  256. if(Z_Reset_Flag)
  257. {
  258. AxisDisableSoftwarelmt(Z_AXIS);
  259. ReSetZOUT_TIME = dwTickCount + 15000;
  260. if(!DDDJ_Z_ORIGIN_IN)
  261. {
  262. ZRunResetOStep = 2;
  263. AxisContinueMoveAcc(Z_AXIS,PARAM_ZREST_SPEED,DIR_N,
  264. 1000,1000,20,20);
  265. }
  266. else
  267. {
  268. AxisContinueMoveAcc(Z_AXIS,PARAM_ZREST_SPEED/2,DIR_P,1000,1000,20,20);
  269. ZRunResetOStep = 4;
  270. }
  271. }
  272. else
  273. {
  274. if(0-dwZRealPos)
  275. AxisMovePosAccDec(Z_AXIS,PARAM_ZREST_SPEED,0-dwZRealPos,1000,1000,50,50,0);
  276. ZRunResetOStep = 10;
  277. ReSetZOUT_TIME = dwTickCount + 10000;
  278. }
  279. }
  280. break;
  281. case 2:
  282. if(DDDJ_Z_ORIGIN_IN)
  283. {
  284. AxisDecStop(Z_AXIS);
  285. ZRunResetOStep = 3;
  286. ReSetZDelay = dwTickCount + 10;
  287. }
  288. break;
  289. case 3:
  290. if(!Z_DRV&&dwTickCount >= ReSetZDelay)
  291. {
  292. AxisContinueMoveAcc(Z_AXIS,1000,DIR_P,1000,1000,20,20);
  293. ZRunResetOStep = 4;
  294. }
  295. break;
  296. case 4:
  297. if(!DDDJ_Z_ORIGIN_IN)
  298. {
  299. ZRunResetOStep = 5;
  300. ReSetZDelay = dwTickCount + 50;
  301. }
  302. break;
  303. case 5:
  304. if(!DDDJ_Z_ORIGIN_IN&&dwTickCount >= ReSetZDelay)
  305. {
  306. AxisEgmStop(Z_AXIS);
  307. ZRunResetOStep = 6;
  308. ReSetZDelay = dwTickCount + 10;
  309. }
  310. break;
  311. case 6:
  312. if(!Z_DRV&&dwTickCount >= ReSetZDelay)
  313. {
  314. ZRunResetOStep = 7;
  315. AxisContinueMoveAcc(Z_AXIS,800,DIR_N,800,800,20,20);
  316. }
  317. break;
  318. case 7:
  319. if(DDDJ_Z_ORIGIN_IN)
  320. {
  321. AxisEgmStop(Z_AXIS);
  322. ZRunResetOStep = 9;
  323. ReSetZDelay = dwTickCount + 20;
  324. }
  325. break;
  326. case 9:
  327. if(!Z_DRV&&dwTickCount >= ReSetZDelay)
  328. {
  329. ZRunResetOStep = 10;
  330. AxisMovePosAccDec(Z_AXIS,1000,-10,1000,1000,20,20,0);
  331. }
  332. break;
  333. case 10:
  334. if(!Z_DRV)
  335. {
  336. SetPos(Z_AXIS,0);
  337. AxisEnableSoftwarelmt(Z_AXIS,PARAM_ZMAX_LENGTH,0);
  338. ZRunResetOStep = 11;
  339. ReSetZDelay = dwTickCount + 50;
  340. }
  341. else if(dwTickCount >= ReSetZOUT_TIME) //多长时间没回到位警告
  342. {
  343. ZRunResetOStep = 0;
  344. bZRsting=0;
  345. SetAlarmCode(ALARM_ADDR,Z_ORIGIN_ALARM);//机械手回零故障
  346. return 0;
  347. }
  348. break;
  349. case 11:
  350. if(dwTickCount>=ReSetZDelay)
  351. {
  352. ZRunResetOStep = 12;
  353. }
  354. break;
  355. case 12:
  356. if(!Z_DRV)
  357. {
  358. Z_Reset_Flag=0;
  359. ZRunResetOStep = 0;
  360. bZRsting=0;
  361. }
  362. break;
  363. }
  364. return 0;
  365. }
  366. //手动动作
  367. void DDDJ_ManualAction(void)
  368. {
  369. //清除订单产量
  370. if(bClearTotal)
  371. {
  372. bClearTotal=0;
  373. ClrcToTal(TOTAL_ADDR);
  374. }
  375. //清除当前匝数
  376. if(bClerNowTotal)
  377. {
  378. bClerNowTotal=0;
  379. ClrcToTal(NOWTOTAL_ADDR);
  380. }
  381. //清除总产量
  382. if(bClearAllTOTAL)
  383. {
  384. bClearAllTOTAL=0;
  385. ClrcToTal(ALL_TOTAL_ADDR);
  386. }
  387. //清除当班产量
  388. if(bClearDateTOTAL)
  389. {
  390. bClearDateTOTAL=0;
  391. ClrcToTal(DATE_TOTAL_ADDR);
  392. }
  393. if(bRunning == 0)
  394. {
  395. //分料
  396. if(DDDJ_bM62)
  397. {
  398. DDDJ_bM62=0;
  399. DDDJ_TTP_VAVLE=~DDDJ_TTP_VAVLE;
  400. }
  401. //放料
  402. if(DDDJ_bM63)
  403. {
  404. DDDJ_bM63=0;
  405. DDDJ_JTP_VAVLE=~DDDJ_JTP_VAVLE;
  406. }
  407. //顶料
  408. if(DDDJ_bM64)
  409. {
  410. DDDJ_bM64=0;
  411. DDDJ_TPXZ_VAVLE=~DDDJ_TPXZ_VAVLE;
  412. }
  413. //顶料
  414. if(DDDJ_bM65)
  415. {
  416. DDDJ_bM65=0;
  417. DDDJ_TPSJ_VAVLE=~DDDJ_TPSJ_VAVLE;
  418. }
  419. //顶料
  420. if(DDDJ_bM66)
  421. {
  422. DDDJ_bM66=0;
  423. DDDJ_DTP_VAVLE=~DDDJ_DTP_VAVLE;
  424. }
  425. //顶料
  426. if(DDDJ_bM67)
  427. {
  428. DDDJ_bM67=0;
  429. DDDJ_ZJ_VAVLE=~DDDJ_ZJ_VAVLE;
  430. }
  431. //顶料
  432. if(DDDJ_bM68)
  433. {
  434. DDDJ_bM68=0;
  435. DDDJ_YDD_VAVLE=~DDDJ_YDD_VAVLE;
  436. }
  437. //顶料
  438. if(DDDJ_bM69)
  439. {
  440. DDDJ_bM69=0;
  441. DDDJ_JDD_VAVLE=~DDDJ_JDD_VAVLE;
  442. }
  443. //插钩
  444. if(bXMotor_N)
  445. {
  446. //DDDJ_bXMotor_N=0;
  447. //SetEn(X_AXIS, MOTOR_EN);
  448. if(!X_DRV&&!X_SOFT_NLIMIT)
  449. AxisContinueMoveAcc(X_AXIS,2000,DIR_N,1000,1000,15,15);
  450. //AxisMovePosAccDec(X_AXIS,1000,-200,1000,1000,120,120,10);
  451. }
  452. if(bXMotor_P)
  453. {
  454. //bXMotor_P=0;
  455. //SetEn(X_AXIS, MOTOR_EN);
  456. if(!X_DRV&&!X_SOFT_PLIMIT)
  457. AxisContinueMoveAcc(X_AXIS,2000,DIR_P,1000,1000,15,15);
  458. //AxisMovePosAccDec(X_AXIS,1000,2000,1000,1000,120,120,10);
  459. }
  460. if(!bXMotor_N&&!bXMotor_P&&!bXRsting&&!DDDJ_All_RESTING)
  461. {
  462. AxisEgmStop(X_AXIS);
  463. }
  464. //下料
  465. if(bYMotor_N)
  466. {
  467. //bYMotor_N=0;
  468. SetEn(Y_AXIS, MOTOR_EN);
  469. if(!Y_DRV&&!Y_SOFT_NLIMIT)
  470. AxisContinueMoveAcc(Y_AXIS,2000,DIR_N,1000,1000,15,15);
  471. //AxisMovePosAccDec(Y_AXIS,1000,-2000,1000,1000,120,120,10);
  472. }
  473. if(bYMotor_P)
  474. {
  475. //bYMotor_P=0;
  476. SetEn(Y_AXIS, MOTOR_EN);
  477. if(!Y_DRV&&!Y_SOFT_PLIMIT)
  478. AxisContinueMoveAcc(Y_AXIS,2000,DIR_P,1000,1000,15,15);
  479. //AxisMovePosAccDec(Y_AXIS,1000,2000,1000,1000,120,120,10);
  480. }
  481. if(!bYMotor_N&&!bYMotor_P&&!bYRsting&&!DDDJ_All_RESTING)
  482. {
  483. AxisEgmStop(Y_AXIS);
  484. }
  485. //推料前后
  486. if(bZMotor_N)
  487. {
  488. SetEn(Z_AXIS, MOTOR_EN);
  489. if(!Z_DRV&&!Z_SOFT_NLIMIT)
  490. AxisContinueMoveAcc(Z_AXIS,2000,DIR_N,1000,1000,15,15);
  491. }
  492. if(bZMotor_P)
  493. {
  494. //DDDJ_bZMotor_P=0;
  495. SetEn(Z_AXIS, MOTOR_EN);
  496. if(!Z_DRV&&!Z_SOFT_PLIMIT)
  497. AxisContinueMoveAcc(Z_AXIS,2000,DIR_P,1000,1000,15,15);
  498. //AxisMovePosAccDec(Z_AXIS,1000,200,1000,1000,120,120,10);
  499. }
  500. if(!bZMotor_N&&!bZMotor_P&&!bZRsting&&!DDDJ_All_RESTING)
  501. {
  502. AxisEgmStop(Z_AXIS);
  503. }
  504. //X复位
  505. if(bXREST)
  506. {
  507. bXREST=0;
  508. bXRsting=1;
  509. XRunResetOStep=1;
  510. X_Reset_Flag=1;
  511. ReSetXDelay = dwTickCount + 200;
  512. }
  513. //Y复位
  514. if(bYREST)
  515. {
  516. bYREST=0;
  517. bYRsting=1;
  518. YRunResetOStep=1;
  519. Y_Reset_Flag=1;
  520. ReSetYDelay = dwTickCount + 200;
  521. }
  522. //Z复位
  523. if(bZREST)
  524. {
  525. bZREST=0;
  526. bZRsting=1;
  527. ZRunResetOStep=1;
  528. Z_Reset_Flag=1;
  529. ReSetZDelay = dwTickCount + 200;
  530. }
  531. if(DDDJ_All_REST)
  532. {
  533. DDDJ_All_REST=0;
  534. DDDJ_All_RESTING=1;
  535. XRunResetOStep=1;
  536. YRunResetOStep=1;
  537. }
  538. if(DDDJ_All_RESTING)
  539. {
  540. if(XRunResetOStep==0&&YRunResetOStep==0&&ZRunResetOStep==0)
  541. {
  542. DDDJ_All_RESTING=0;
  543. ALL_Reset_Flag=0;
  544. }
  545. }
  546. //收线旋转
  547. if(DDDJ_bXZ_SWC)
  548. {
  549. DDDJ_bXZ_SWC=0;
  550. if(!DDDJ_bXZ_SWO)
  551. {
  552. DDDJ_bXZ_SWO=1;
  553. DDDJ_LSLSN_OUT=1;
  554. DDDJ_LSLQH_OUT=0;
  555. }
  556. else
  557. {
  558. DDDJ_bXZ_SWO=0;
  559. DDDJ_LSLSN_OUT=0;
  560. DDDJ_LSLQH_OUT=0;
  561. }
  562. }
  563. }
  564. }
  565. //插钩动作
  566. void DDDJ_cXMotor_Action(void) //
  567. {
  568. #if 1
  569. long hand_local;
  570. switch(DDDJ_cXMOTORStep)
  571. {
  572. case 1://待机位置
  573. DDDJ_cXMOTORStep=2;
  574. DDDJ_WorkCnt++;
  575. hand_local=0;
  576. hand_local=hand_local-dwXRealPos;
  577. //if(DDDJ_WorkCnt>=DDDJ_PARAM_CMP_SPACE)
  578. //{
  579. // DDDJ_WorkCnt=0;
  580. // hand_local=hand_local+;
  581. //}
  582. AxisMovePosAccDec(X_AXIS,DDDJ_PARAM_QL_HSPEED,hand_local,1000,1000,120,120,50);
  583. break;
  584. case 2:
  585. if(!X_DRV)
  586. {
  587. DDDJ_cXMOTORStep=3;
  588. DDDJ_cXMOTORDelay=dwTickCount+30;
  589. }
  590. break;
  591. case 3:
  592. if(dwTickCount>=DDDJ_cXMOTORDelay)
  593. {
  594. DDDJ_cXMOTORStep=0;
  595. }
  596. break;
  597. case 10://待机位置
  598. if(DDDJ_Fristwork==0)
  599. {
  600. AxisContinueMoveAcc(X_AXIS,DDDJ_PARAM_FRIST_HSPEED,DIR_P,1000,1000,50,50);
  601. }
  602. else
  603. {
  604. hand_local=DDDJ_CHECK_GY_LENGTH*2-DDDJ_PARAM_DW_LENGTH;
  605. //hand_local=hand_local-dwXRealPos;
  606. AxisMovePosAccDecNotStop(X_AXIS,DDDJ_PARAM_QL_HSPEED,hand_local,1000,DDDJ_PARAM_FRIST_HSPEED,150,50,PosToPulse(X_AXIS,100));
  607. }
  608. DDDJ_cXMOTORStep=11;
  609. break;
  610. case 11:
  611. if(DDDJ_DT_GYING_IN_DW)
  612. {
  613. DDDJ_XSAVEPOS=dwXRealPos;
  614. DDDJ_cXMOTORStep=12;
  615. DDDJ_cXMOTORDelay=dwTickCount+50;
  616. }
  617. break;
  618. case 12:
  619. if(dwTickCount>=DDDJ_cXMOTORDelay)
  620. {
  621. if(DDDJ_DT_GYING_IN_DW)
  622. {
  623. DDDJ_Fristwork=1;
  624. DDDJ_cXMOTORStep=13;
  625. DDDJ_CHECK_GY_LENGTH=dwXRealPos-DDDJ_XSAVEPOS;
  626. hand_local=DDDJ_PARAM_DW_LENGTH;
  627. AxisMovePosAccDec(X_AXIS,DDDJ_PARAM_FRIST_HSPEED,hand_local,1000,1000,150,150,10);
  628. }
  629. }
  630. break;
  631. case 13:
  632. if(!X_DRV)
  633. {
  634. //DDDJ_JS_VAVLE=1;
  635. DDDJ_cXMOTORStep=14;
  636. DDDJ_cXMOTORDelay=dwTickCount+DDDJ_PARAM_JS_H_TIME*10;
  637. }
  638. break;
  639. case 14://夹钩
  640. if(dwTickCount>=DDDJ_cXMOTORDelay)
  641. {
  642. DDDJ_cXMOTORStep=0;
  643. }
  644. break;
  645. }
  646. #endif
  647. }
  648. //取衣架放衣架动作
  649. void DDDJ_cYMotor_Action(void)
  650. {
  651. long hand_local;
  652. switch(DDDJ_cYMOTORStep)
  653. {
  654. case 1://判断是否松轴
  655. DDDJ_LSLSN_OUT=1;
  656. DDDJ_LSLQH_OUT=0;
  657. DDDJ_cYMOTORStep=2;
  658. hand_local=DDDJ_PARAM_START_LOCAL;
  659. hand_local=hand_local-dwYRealPos;
  660. AxisMovePosAccDec(Y_AXIS,DDDJ_PARAM_JG_SPEED,hand_local,1000,1000,220,220,50);
  661. break;
  662. case 2://取料位置
  663. if(!Y_DRV)
  664. {
  665. if(DDDJ_CW_TIME>0)
  666. {
  667. DDDJ_cYMOTORStep=3;
  668. }
  669. else if(DDDJ_CCW_TIME>0)
  670. {
  671. DDDJ_cYMOTORStep=19;
  672. }
  673. else
  674. {
  675. DDDJ_cYMOTORStep=6;
  676. }
  677. }
  678. break;
  679. case 3:
  680. if(DDDJ_CW_TIME>=DDDJ_PARAM_JG_NUM)
  681. {
  682. DDDJ_CW_TIME=0;
  683. DDDJ_cYMOTORStep=22;
  684. }
  685. else
  686. {
  687. DDDJ_cYMOTORStep=4;
  688. }
  689. break;
  690. case 4:
  691. DDDJ_cYMOTORStep=5;
  692. hand_local=DDDJ_CW_TIME*DDDJ_PARAM_SXJG_LOCAL;
  693. AxisMovePosAccDec(Y_AXIS,DDDJ_PARAM_JG_SPEED,hand_local,1000,1000,220,220,50);
  694. break;
  695. case 5:
  696. if(!Y_DRV)
  697. {
  698. DDDJ_cYMOTORStep=6;
  699. }
  700. break;
  701. case 6:
  702. if(DDDJ_U_ORIGIN_IN_UP)
  703. {
  704. if(DDDJ_CW_TIME>=DDDJ_PARAM_JG_NUM)
  705. {
  706. DDDJ_CW_TIME=0;
  707. DDDJ_cYMOTORStep=22;
  708. }
  709. else
  710. {
  711. DDDJ_cYMOTORStep=7;
  712. hand_local=DDDJ_PARAM_SXJG_LOCAL;
  713. AxisMovePosAccDec(Y_AXIS,DDDJ_PARAM_JG_SPEED,hand_local,2000,2000,250,250,100);
  714. }
  715. }
  716. break;
  717. case 7:
  718. if(!Y_DRV)
  719. {
  720. DDDJ_cYMOTORStep=8;
  721. DDDJ_cYMOTORDelay=dwTickCount+500;
  722. }
  723. break;
  724. case 8:
  725. if(dwTickCount>=DDDJ_cYMOTORDelay)
  726. {
  727. DDDJ_CW_TIME++;
  728. DDDJ_cYMOTORStep=6;
  729. }
  730. break;
  731. case 19:
  732. if(DDDJ_CCW_TIME>=DDDJ_PARAM_JG_NUM)
  733. {
  734. DDDJ_CCW_TIME=0;
  735. DDDJ_cYMOTORStep=6;
  736. }
  737. else
  738. {
  739. DDDJ_cYMOTORStep=20;
  740. }
  741. break;
  742. case 20:
  743. DDDJ_cYMOTORStep=21;
  744. hand_local=(DDDJ_PARAM_JG_NUM-DDDJ_CCW_TIME)*DDDJ_PARAM_SXJG_LOCAL;
  745. AxisMovePosAccDec(Y_AXIS,DDDJ_PARAM_JG_SPEED,hand_local,1000,1000,220,220,50);
  746. break;
  747. case 21:
  748. if(!Y_DRV)
  749. {
  750. DDDJ_cYMOTORStep=22;
  751. }
  752. break;
  753. case 22:
  754. if(DDDJ_U_ORIGIN_IN_UP)
  755. {
  756. if(DDDJ_CCW_TIME>=DDDJ_PARAM_JG_NUM)
  757. {
  758. DDDJ_CCW_TIME=0;
  759. DDDJ_cYMOTORStep=6;
  760. }
  761. else
  762. {
  763. DDDJ_cYMOTORStep=23;
  764. hand_local=DDDJ_PARAM_SXJG_LOCAL;
  765. AxisMovePosAccDec(Y_AXIS,DDDJ_PARAM_JG_SPEED,-hand_local,2000,2000,250,250,100);
  766. }
  767. }
  768. break;
  769. case 23:
  770. if(!Y_DRV)
  771. {
  772. DDDJ_cYMOTORStep=24;
  773. DDDJ_cYMOTORDelay=dwTickCount+500;
  774. }
  775. break;
  776. case 24:
  777. if(dwTickCount>=DDDJ_cYMOTORDelay)
  778. {
  779. DDDJ_CCW_TIME++;
  780. DDDJ_cYMOTORStep=22;
  781. }
  782. break;
  783. }
  784. }
  785. //自动动作
  786. void DDDJ_AutoStepAction(void)
  787. {
  788. dwXRealPos = GetPos(X_AXIS);
  789. dwYRealPos = GetPos(Y_AXIS);
  790. dwZRealPos = GetPos(Z_AXIS);
  791. X_SOFT_PLIMIT=GetSoftPLimit(X_AXIS);
  792. X_SOFT_NLIMIT=GetSoftNLimit(X_AXIS);
  793. Y_SOFT_PLIMIT=GetSoftPLimit(Y_AXIS);
  794. Y_SOFT_NLIMIT=GetSoftNLimit(Y_AXIS);
  795. Z_SOFT_PLIMIT=GetSoftPLimit(Z_AXIS);
  796. Z_SOFT_NLIMIT=GetSoftNLimit(Z_AXIS);
  797. user_datas[121] = DDDJ_AutoStep;
  798. user_datas[122] = DDDJ_cXMOTORStep;
  799. user_datas[123] = DDDJ_cYMOTORStep;
  800. user_datas[124] = DDDJ_CHECK_GY_LENGTH*2;//DDDJ_cZMOTORStep;
  801. user_datas[125] = DDDJ_WorkCnt;//DDDJ_LPDJStep;
  802. user_datas[126] = DDDJ_CW_TIME;
  803. user_datas[127] = DDDJ_CCW_TIME;//DDDJ_ZLTStep;
  804. user_datas[128] = DDDJ_PARAM_CMP_SPACE;
  805. *PARAM_X_LOCAL=dwXRealPos;
  806. *PARAM_Y_LOCAL=dwYRealPos;
  807. *PARAM_Z_LOCAL=dwZRealPos;
  808. #if 1
  809. if(DDDJ_X_SALARM_IN)
  810. {
  811. DDDJ_SetAlarmCode(X_ORIGIN_ALARM);
  812. }
  813. else
  814. {
  815. if(GetAlarmCode(ALARM_ADDR)==X_ORIGIN_ALARM)SetAlarmCode(ALARM_ADDR,0);
  816. }
  817. switch(DDDJ_AutoStep)
  818. {
  819. case 1://注胶,夹手
  820. if(dwTickCount>=DDDJ_AutoDelay&&DDDJ_cXMOTORStep==0)
  821. {
  822. if(bTestMode&&bStart||!bTestMode)
  823. {
  824. DDDJ_AutoStep=2;
  825. //DDDJ_JS_VAVLE=1;
  826. DDDJ_AutoDelay=dwTickCount+50;
  827. }
  828. }
  829. break;
  830. case 2://退档料,松压料
  831. if(dwTickCount>=DDDJ_AutoDelay)
  832. {
  833. //DDDJ_ZJ_VAVLE=0;
  834. if(bTestMode&&bStart||!bTestMode)
  835. {
  836. if(DDDJ_cXMOTORStep==0)
  837. {
  838. DDDJ_AutoStep=3;
  839. //DDDJ_DL_VAVLE=1;
  840. //DDDJ_YL_VAVLE=1;
  841. DDDJ_AutoDelay=dwTickCount+DDDJ_PARAM_YL_H_TIME*10;
  842. }
  843. }
  844. }
  845. break;
  846. case 3://拉带
  847. if(dwTickCount>=DDDJ_AutoDelay)
  848. {
  849. if(bTestMode&&bStart||!bTestMode)
  850. {
  851. DDDJ_AutoStep=4;
  852. DDDJ_cXMOTORStep=10;
  853. }
  854. }
  855. break;
  856. case 4://压料
  857. if(DDDJ_cXMOTORStep==0)
  858. {
  859. if(bTestMode&&bStart||!bTestMode)
  860. {
  861. DDDJ_AutoStep=5;
  862. //DDDJ_DL_VAVLE=0;
  863. //DDDJ_YL_VAVLE=0;
  864. DDDJ_AutoDelay=dwTickCount+DDDJ_PARAM_YL_R_TIME*10;
  865. }
  866. }
  867. break;
  868. case 5://松夹手
  869. if(dwTickCount>=DDDJ_AutoDelay)
  870. {
  871. if(bTestMode&&bStart||!bTestMode)
  872. {
  873. DDDJ_AutoStep=6;
  874. //DDDJ_JS_VAVLE=0;
  875. DDDJ_ZJ_VAVLE=1;
  876. DDDJ_ZJDelay=dwTickCount+DDDJ_PARAM_ZJ_TIME*10;
  877. DDDJ_AutoDelay=dwTickCount+DDDJ_PARAM_JS_R_TIME*10;
  878. }
  879. }
  880. break;
  881. case 6://伺服回味
  882. if(dwTickCount>=DDDJ_AutoDelay)
  883. {
  884. if(bTestMode&&bStart||!bTestMode)
  885. {
  886. if(DDDJ_cXMOTORStep==0)
  887. {
  888. DDDJ_AutoStep=7;
  889. DDDJ_cXMOTORStep=1;
  890. CalProSP(SPEED_ADDR);//计算生产速度
  891. AddToTal(TOTAL_ADDR);//生产总量加1并保存
  892. AddToTal(NOWTOTAL_ADDR);//生产总量加1并保存
  893. AddToTal(ALL_TOTAL_ADDR);//累计生产总量
  894. AddToTal(DATE_TOTAL_ADDR);//当班生产总量
  895. }
  896. }
  897. }
  898. break;
  899. case 7://完成等待下一步
  900. if(START_IN_UP||DDDJ_bAuto_TEST)
  901. {
  902. DDDJ_AutoStep=1;
  903. DDDJ_AutoDelay=dwTickCount+30;
  904. if(DDDJ_bAuto_TEST)
  905. DDDJ_AutoDelay=dwTickCount+100;
  906. }
  907. break;
  908. }
  909. if(bRunning&&DDDJ_ZJ_VAVLE&&dwTickCount>=DDDJ_ZJDelay)
  910. {
  911. DDDJ_ZJ_VAVLE=0;
  912. }
  913. #endif
  914. }
  915. void DDDJ_CheckStart(void)
  916. {
  917. #if 1
  918. //启动
  919. if((START_IN_UP||bStart||bOnceStart)&&!bRunning&&!EMGSTOP_IN)
  920. {
  921. if(ALL_Reset_Flag)
  922. {
  923. SetAlarmCode(ALARM_ADDR,DDDJ_NO_RESET_ALARM);
  924. }
  925. else if(GetAlarmCode(ALARM_ADDR)==0)
  926. {
  927. //
  928. bRunning=1;
  929. DDDJ_AutoStep=1;
  930. //Y轴回待机位
  931. DDDJ_cXMOTORStep=1;
  932. DDDJ_cYMOTORStep=1;
  933. //IO清零
  934. //DDDJ_JS_VAVLE=1;
  935. //
  936. DDDJ_Fristwork=0;
  937. //
  938. DDDJ_WorkCnt=0;
  939. DDDJ_AutoDelay=dwTickCount+200;
  940. if(bOnceStart)SingOneFlg=1;
  941. }
  942. bStart=0;
  943. }
  944. //停止
  945. if(STOP_IN_UP||bStop||EMGSTOP_IN)
  946. {
  947. //DDDJ_STOP_NUM++;
  948. //if(DDDJ_STOP_NUM>2)DDDJ_STOP_NUM=0;
  949. /*if(bStop&&bRunning)
  950. {
  951. SingOneFlg=1;
  952. bStop=0;
  953. }
  954. else*/
  955. {
  956. DDDJ_LSLSN_OUT=1;
  957. DDDJ_LSLQH_OUT=1;
  958. //轴停止步
  959. bRunning=0;
  960. bStop=0;
  961. AxisEgmStop(X_AXIS);
  962. AxisEgmStop(Y_AXIS);
  963. AxisEgmStop(Z_AXIS);
  964. //自动
  965. DDDJ_AutoStep=0;
  966. DDDJ_cXMOTORStep=0;
  967. DDDJ_cYMOTORStep=0;
  968. DDDJ_cZMOTORStep=0;
  969. //
  970. DDDJ_LPDJStep=0;
  971. //
  972. DDDJ_ZLTStep=0;
  973. //
  974. DDDJ_cGPJRStep=0;
  975. //IO
  976. //DDDJ_JS_VAVLE=0;
  977. //DDDJ_DL_VAVLE=0;
  978. //DDDJ_YL_VAVLE=0;
  979. //DDDJ_ZJ_VAVLE=0;
  980. //复位
  981. bXRsting=0;
  982. XRunResetOStep=0;
  983. bYRsting=0;
  984. YRunResetOStep=0;
  985. bZRsting=0;
  986. ZRunResetOStep=0;
  987. }
  988. }
  989. //故障处理
  990. if(bAlarmStop)
  991. {
  992. bAlarmStop=0;
  993. AxisEgmStop(X_AXIS);
  994. AxisEgmStop(Y_AXIS);
  995. AxisEgmStop(Z_AXIS);
  996. //自动
  997. bRunning=0;
  998. DDDJ_AutoStep=0;
  999. //自动
  1000. DDDJ_AutoStep=0;
  1001. DDDJ_cXMOTORStep=0;
  1002. DDDJ_cYMOTORStep=0;
  1003. DDDJ_cZMOTORStep=0;
  1004. //
  1005. DDDJ_LPDJStep=0;
  1006. //
  1007. DDDJ_ZLTStep=0;
  1008. //
  1009. DDDJ_cGPJRStep=0;
  1010. }
  1011. /*
  1012. //伺服报警标志
  1013. if(((GetAlarm(Y_AXIS)==1)) || GetAlarm(X_AXIS)==1))
  1014. {
  1015. DDDJ_bAlarmStop=1;
  1016. DDDJ_SERVO_ALAEM_FLAG=1;
  1017. DDDJ_SetAlarmCode(DDDJ_HAND_SERVO_ALARM);
  1018. }
  1019. //清除伺服告警
  1020. if(dwTickCount>=DDDJ_CLR_ALARM_Pulse&&DDDJ_CLR_SERVOALAEM_FLAG)
  1021. {
  1022. DDDJ_CLR_SERVOALAEM_FLAG=0;
  1023. SetClr(X_AXIS, 0);
  1024. SetClr(Y_AXIS, 0);
  1025. }*/
  1026. #endif
  1027. }
  1028. //初始化动作
  1029. void DDDJ_InitAction(void)
  1030. {
  1031. float buff_pulse,buff_dist;
  1032. buff_pulse = PARAM_XCYCLE_PULSE;
  1033. buff_dist = PARAM_XCYCLE_LENGTH;
  1034. XGearRatio = buff_pulse/buff_dist;
  1035. buff_pulse = PARAM_YCYCLE_PULSE;
  1036. buff_dist = PARAM_YCYCLE_LENGTH;
  1037. YGearRatio = buff_pulse/buff_dist;
  1038. buff_pulse = PARAM_ZCYCLE_PULSE;
  1039. buff_dist = PARAM_ZCYCLE_LENGTH;
  1040. ZGearRatio = buff_pulse/buff_dist;
  1041. //SetEnReverse(X_AXIS, 0);
  1042. //SetEnReverse(Y_AXIS, 0);
  1043. //SetEn(X_AXIS, DDDJ_MOTOR_DISEN);
  1044. //SetEn(Y_AXIS, DDDJ_MOTOR_DISEN);
  1045. SetAlarmCode(ALARM_ADDR,DDDJ_NO_ALARM);
  1046. SetDirReverse(X_AXIS, 1);
  1047. SetDirReverse(Y_AXIS, 0);
  1048. SetDirReverse(Z_AXIS, 0);
  1049. //伺服报警常闭输入、0为正常,1为告警,
  1050. //SetAlarmReverse(X_AXIS,1);
  1051. //SetAlarmReverse(Y_AXIS,1);
  1052. X_Reset_Flag=1;
  1053. Y_Reset_Flag=1;
  1054. //Z_Reset_Flag=1;
  1055. ALL_Reset_Flag=1;
  1056. //X轴上电复位
  1057. if(PARAM_XPOWERON_RST)
  1058. {
  1059. bXREST=1;
  1060. bYREST=1;
  1061. //bZREST=1;
  1062. }
  1063. DDDJ_CW_TIME=0;
  1064. DDDJ_CCW_TIME=0;
  1065. }
  1066. void DDDJ_Action(void)
  1067. {
  1068. DDDJ_CheckStart();
  1069. DDDJ_ManualAction();
  1070. //回原点处理
  1071. Y_ReSetOrigin();
  1072. X_ReSetOrigin();
  1073. Z_ReSetOrigin();
  1074. //插衣钩
  1075. DDDJ_cXMotor_Action();
  1076. //出料
  1077. DDDJ_cYMotor_Action();
  1078. //自动动作
  1079. DDDJ_AutoStepAction();
  1080. }
  1081. #endif