HZFC_YanHuaNeiTongJi.c 27 KB

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