HZFC_YiJiaGouHanjie.c 40 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681
  1. #include "global.h"
  2. #if FU_CHEN_MACHINE == 1
  3. //故障报警
  4. void YJHJ_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(!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(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(!X_ORIGIN_IN)
  59. {
  60. XRunResetOStep = 5;
  61. ReSetXDelay = dwTickCount + 50;
  62. }
  63. break;
  64. case 5:
  65. if(!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(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,-10,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(!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(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(!Y_ORIGIN_IN)
  177. {
  178. YRunResetOStep = 5;
  179. ReSetYDelay = dwTickCount + 50;
  180. }
  181. break;
  182. case 5:
  183. if(!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(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(!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(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(!Z_ORIGIN_IN)
  296. {
  297. ZRunResetOStep = 5;
  298. ReSetZDelay = dwTickCount + 50;
  299. }
  300. break;
  301. case 5:
  302. if(!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(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 YJHJ_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(YJHJ_bLPDJ)
  395. {
  396. YJHJ_bLPDJ=0;
  397. YJHJ_LPMOTOR_OUT=~YJHJ_LPMOTOR_OUT;
  398. }
  399. //加热开关
  400. if(YJHJ_bHeat)
  401. {
  402. YJHJ_bHeat=0;
  403. YJHJ_HEAT_OUT=~YJHJ_HEAT_OUT;
  404. }
  405. //分料
  406. if(YJHJ_bFENGL)
  407. {
  408. YJHJ_bFENGL=0;
  409. YJHJ_FENL_VAVLE=~YJHJ_FENL_VAVLE;
  410. }
  411. //放料
  412. if(YJHJ_bFANGL)
  413. {
  414. YJHJ_bFANGL=0;
  415. YJHJ_FANGL_VAVLE=~YJHJ_FANGL_VAVLE;
  416. }
  417. //顶料
  418. if(YJHJ_bDINGL)
  419. {
  420. YJHJ_bDINGL=0;
  421. YJHJ_DINGL_VAVLE=~YJHJ_DINGL_VAVLE;
  422. }
  423. //分钩
  424. if(YJHJ_bFENG)
  425. {
  426. YJHJ_bFENG=0;
  427. YJHJ_FENGG_VAVLE=~YJHJ_FENGG_VAVLE;
  428. }
  429. //上档钩
  430. if(YJHJ_bSDG)
  431. {
  432. YJHJ_bSDG=0;
  433. YJHJ_SDG_VAVLE=~YJHJ_SDG_VAVLE;
  434. }
  435. //下档钩
  436. if(YJHJ_bXDG)
  437. {
  438. YJHJ_bXDG=0;
  439. YJHJ_XDG_VAVLE=~YJHJ_XDG_VAVLE;
  440. }
  441. //夹钩气缸
  442. if(YJHJ_bJG)
  443. {
  444. YJHJ_bJG=0;
  445. YJHJ_JG_VAVLE=~YJHJ_JG_VAVLE;
  446. }
  447. //顶钩气缸
  448. if(YJHJ_bDG)
  449. {
  450. YJHJ_bDG=0;
  451. YJHJ_DG_VAVLE=~YJHJ_DG_VAVLE;
  452. }
  453. //取料
  454. if(YJHJ_bQL)
  455. {
  456. YJHJ_bQL=0;
  457. YJHJ_QL_VAVLE=~YJHJ_QL_VAVLE;
  458. }
  459. //压料
  460. if(YJHJ_bYL)
  461. {
  462. YJHJ_bYL=0;
  463. YJHJ_YL_VAVLE=~YJHJ_YL_VAVLE;
  464. }
  465. //夹子
  466. if(YJHJ_bJZ)
  467. {
  468. YJHJ_bJZ=0;
  469. YJHJ_JZ_VAVLE=~YJHJ_JZ_VAVLE;
  470. }
  471. //插钩
  472. if(YJHJ_bCYG)
  473. {
  474. YJHJ_bCYG=0;
  475. YJHJ_CYG_VAVLE=~YJHJ_CYG_VAVLE;
  476. }
  477. //插钩
  478. if(bXMotor_N)
  479. {
  480. //YJHJ_bXMotor_N=0;
  481. //SetEn(X_AXIS, MOTOR_EN);
  482. if(!X_DRV&&!X_SOFT_NLIMIT)
  483. AxisContinueMoveAcc(X_AXIS,2000,DIR_N,1000,1000,15,15);
  484. //AxisMovePosAccDec(X_AXIS,1000,-200,1000,1000,120,120,10);
  485. }
  486. if(bXMotor_P)
  487. {
  488. //YJHJ_bXMotor_P=0;
  489. //SetEn(X_AXIS, MOTOR_EN);
  490. if(!X_DRV&&!X_SOFT_PLIMIT)
  491. AxisContinueMoveAcc(X_AXIS,2000,DIR_P,1000,1000,15,15);
  492. //AxisMovePosAccDec(X_AXIS,1000,200,1000,1000,120,120,10);
  493. }
  494. if(!bXMotor_N&&!bXMotor_P&&!bXRsting&&!YJHJ_All_RESTING)
  495. {
  496. AxisEgmStop(X_AXIS);
  497. }
  498. //下料
  499. if(bYMotor_N)
  500. {
  501. //bYMotor_N=0;
  502. SetEn(Y_AXIS, MOTOR_EN);
  503. if(!Y_DRV&&!Y_SOFT_NLIMIT)
  504. AxisContinueMoveAcc(Y_AXIS,2000,DIR_N,1000,1000,15,15);
  505. //AxisMovePosAccDec(Y_AXIS,1000,-2000,1000,1000,120,120,10);
  506. }
  507. if(bYMotor_P)
  508. {
  509. //bYMotor_P=0;
  510. SetEn(Y_AXIS, MOTOR_EN);
  511. if(!Y_DRV&&!Y_SOFT_PLIMIT)
  512. AxisContinueMoveAcc(Y_AXIS,2000,DIR_P,1000,1000,15,15);
  513. //AxisMovePosAccDec(Y_AXIS,1000,2000,1000,1000,120,120,10);
  514. }
  515. if(!bYMotor_N&&!bYMotor_P&&!bYRsting&&!YJHJ_All_RESTING)
  516. {
  517. AxisEgmStop(Y_AXIS);
  518. }
  519. //推料前后
  520. if(bZMotor_N)
  521. {
  522. SetEn(Z_AXIS, MOTOR_EN);
  523. if(!Z_DRV&&!Z_SOFT_NLIMIT)
  524. AxisContinueMoveAcc(Z_AXIS,2000,DIR_N,1000,1000,15,15);
  525. }
  526. if(bZMotor_P)
  527. {
  528. //YJHJ_bZMotor_P=0;
  529. SetEn(Z_AXIS, MOTOR_EN);
  530. if(!Z_DRV&&!Z_SOFT_PLIMIT)
  531. AxisContinueMoveAcc(Z_AXIS,2000,DIR_P,1000,1000,15,15);
  532. //AxisMovePosAccDec(Z_AXIS,1000,200,1000,1000,120,120,10);
  533. }
  534. if(!bZMotor_N&&!bZMotor_P&&!bZRsting&&!YJHJ_All_RESTING)
  535. {
  536. AxisEgmStop(Z_AXIS);
  537. }
  538. //X复位
  539. if(bXREST)
  540. {
  541. bXREST=0;
  542. bXRsting=1;
  543. XRunResetOStep=1;
  544. X_Reset_Flag=1;
  545. ReSetXDelay = dwTickCount + 200;
  546. }
  547. //Y复位
  548. if(bYREST)
  549. {
  550. bYREST=0;
  551. bYRsting=1;
  552. YRunResetOStep=1;
  553. Y_Reset_Flag=1;
  554. ReSetYDelay = dwTickCount + 200;
  555. }
  556. //Z复位
  557. if(bZREST)
  558. {
  559. bZREST=0;
  560. bZRsting=1;
  561. ZRunResetOStep=1;
  562. Z_Reset_Flag=1;
  563. ReSetZDelay = dwTickCount + 200;
  564. }
  565. if(YJHJ_All_REST)
  566. {
  567. if(ALL_Reset_Flag)
  568. {
  569. if(SERVO_VAVLE==0)bXREST=1;
  570. bYREST=1;
  571. bZREST=1;
  572. }
  573. else
  574. {
  575. ZRunResetOStep=1;
  576. YRunResetOStep=1;
  577. if(SERVO_VAVLE==0)XRunResetOStep=1;
  578. }
  579. YJHJ_All_REST=0;
  580. YJHJ_All_RESTING=1;
  581. YJHJ_FANGL_VAVLE=0;
  582. YJHJ_XDG_VAVLE=1;
  583. YJHJ_JG_VAVLE=0;
  584. YJHJ_CYG_VAVLE=0;
  585. }
  586. if(YJHJ_All_RESTING)
  587. {
  588. if(ALL_Reset_Flag)
  589. {
  590. if(bXREST==0&&bYREST==0&&bZREST==0)
  591. {
  592. YJHJ_All_RESTING=0;
  593. ALL_Reset_Flag=0;
  594. }
  595. }
  596. else
  597. {
  598. if(XRunResetOStep==0&&YRunResetOStep==0&&ZRunResetOStep==0)
  599. {
  600. YJHJ_All_RESTING=0;
  601. ALL_Reset_Flag=0;
  602. }
  603. }
  604. }
  605. //料盘启动
  606. if(YJHJ_bLPStart)
  607. {
  608. YJHJ_bLPStart=0;
  609. if(YJHJ_bLPRunning)
  610. {
  611. YJHJ_bLPRunning=0;
  612. YJHJ_LPDJStep=0;
  613. YJHJ_LPMOTOR_OUT=0;
  614. }
  615. else
  616. {
  617. YJHJ_bLPRunning=1;
  618. YJHJ_LPDJStep=1;
  619. }
  620. }
  621. }
  622. }
  623. //装料头
  624. void YJHJ_ZLT_Action(void)
  625. {
  626. switch(YJHJ_ZLTStep)
  627. {
  628. case 1:
  629. if(dwTickCount>=YJHJ_ZLTDelay)
  630. {
  631. //YJHJ_ZYJ_EN_FLAG=0;
  632. YJHJ_ZLTStep=2;
  633. YJHJ_FANGL_VAVLE=0;
  634. YJHJ_ZLTDelay=dwTickCount+YJHJ_PARAM_FangL_R_TIME*10;
  635. }
  636. break;
  637. case 2:
  638. if(dwTickCount>=YJHJ_ZLTDelay)
  639. {
  640. YJHJ_ZLTStep=3;
  641. YJHJ_FENL_VAVLE=0;
  642. YJHJ_ZLTDelay=dwTickCount+YJHJ_PARAM_FenL_R_TIME*10;
  643. }
  644. break;
  645. case 3:
  646. if(dwTickCount>=YJHJ_ZLTDelay)
  647. {
  648. YJHJ_ZLTStep=4;
  649. YJHJ_FENL_VAVLE=1;
  650. YJHJ_ZLTDelay=dwTickCount+YJHJ_PARAM_FenL_H_TIME*10;
  651. }
  652. break;
  653. case 4:
  654. if(dwTickCount>=YJHJ_ZLTDelay)
  655. {
  656. //YJHJ_ZYJ_YL_FLAG=1;
  657. YJHJ_ZLTStep=0;
  658. }
  659. break;
  660. }
  661. }
  662. //推衣架动作
  663. void YJHJ_cZMotor_Action(void)
  664. {
  665. long hand_local;
  666. static unsigned char run_z_once=0;
  667. switch(YJHJ_cZMOTORStep)
  668. {
  669. case 1://判断是否复位
  670. if(Z_Reset_Flag!=0)
  671. {
  672. ZRunResetOStep=1;
  673. YJHJ_cZMOTORStep=2;
  674. YJHJ_cZMOTORDelay = dwTickCount + 50;
  675. ReSetZDelay=dwTickCount + 200;
  676. }
  677. else
  678. {
  679. YJHJ_cZMOTORStep=2;
  680. YJHJ_cZMOTORDelay = dwTickCount + 50;
  681. }
  682. break;
  683. case 2://移动到接料位置
  684. if(Z_Reset_Flag==0&&ZRunResetOStep==0&&dwTickCount>=YJHJ_cZMOTORDelay)
  685. {
  686. YJHJ_cZMOTORStep=3;
  687. hand_local=YJHJ_PARAM_TLJL_LOCAL;
  688. hand_local=hand_local-dwZRealPos;
  689. AxisMovePosAccDec(Z_AXIS,YJHJ_PARAM_TLDJ_HSPEED,hand_local,1000,1000,150,150,50);
  690. }
  691. break;
  692. case 3://
  693. if(!Z_DRV)
  694. {
  695. YJHJ_cZMOTORStep=0;
  696. }
  697. break;
  698. // 回到待机点
  699. case 10://待机点
  700. YJHJ_cZMOTORStep=11;
  701. hand_local=YJHJ_PARAM_TLJL_LOCAL;
  702. hand_local=hand_local-dwZRealPos;
  703. AxisMovePosAccDec(Z_AXIS,YJHJ_PARAM_TLDJ_HSPEED,hand_local,1000,1000,120,120,50);
  704. break;
  705. case 11://
  706. if(!Z_DRV)
  707. {
  708. YJHJ_cZMOTORStep=12;
  709. YJHJ_cZMOTORDelay = dwTickCount + 10;
  710. }
  711. break;
  712. case 12://放料
  713. if(dwTickCount>=YJHJ_cZMOTORDelay)
  714. {
  715. if(YJHJ_ZLTStep==0)
  716. {
  717. YJHJ_cZMOTORStep=13;
  718. if(YJHJ_ONCE_FLAG==0)
  719. {
  720. YJHJ_FANGL_VAVLE=1;
  721. }
  722. YJHJ_cZMOTORDelay = dwTickCount + YJHJ_PARAM_FangL_H_TIME*10;
  723. }
  724. }
  725. break;
  726. case 13://推料到工作位置,同时装料
  727. if(dwTickCount>=YJHJ_cZMOTORDelay)
  728. {
  729. YJHJ_cZMOTORStep=0;
  730. YJHJ_ZLTStep=1;//装衣架使能
  731. YJHJ_ZLTDelay=dwTickCount+50;
  732. }
  733. break;
  734. case 20://推料到工作位置,同时装料
  735. YJHJ_cZMOTORStep=21;
  736. hand_local=YJHJ_PARAM_TLDW_LOCAL;
  737. hand_local=hand_local-dwZRealPos;
  738. AxisMovePosAccDec(Z_AXIS,YJHJ_PARAM_TLDJ_LSPEED,hand_local,1000,1000,220,220,50);
  739. break;
  740. case 21://
  741. if(!Z_DRV)
  742. {
  743. YJHJ_cZMOTORStep=22;
  744. YJHJ_cZMOTORDelay = dwTickCount +5;
  745. }
  746. break;
  747. case 22://
  748. if(dwTickCount>=YJHJ_cZMOTORDelay)
  749. {
  750. YJHJ_cZMOTORStep=0;
  751. }
  752. break;
  753. }
  754. }
  755. //料盘动作
  756. void YJHJ_LPDJ_Action(void)
  757. {
  758. switch(YJHJ_LPDJStep)
  759. {
  760. case 1:
  761. if(!YJHJ_YG_GANYING_IN)
  762. {
  763. YJHJ_LPDJStep=2;
  764. YJHJ_LPMOTOR_OUT=1;
  765. }
  766. break;
  767. case 2:
  768. if(YJHJ_YG_GANYING_IN)
  769. {
  770. YJHJ_LPDJStep=3;
  771. YJHJ_LPDJDelay=dwTickCount+YJHJ_PARAM_YG_CHECK_TIME*10;
  772. }
  773. break;
  774. case 3:
  775. if(dwTickCount>=YJHJ_LPDJDelay)
  776. {
  777. if(YJHJ_YG_GANYING_IN)
  778. {
  779. YJHJ_LPDJStep=4;
  780. YJHJ_LPDJDelay=dwTickCount+YJHJ_PARAM_LP_STOP_TIME*10;
  781. }
  782. else
  783. {
  784. YJHJ_LPDJStep=2;
  785. }
  786. }
  787. break;
  788. case 4:
  789. if(dwTickCount>=YJHJ_LPDJDelay)
  790. {
  791. YJHJ_LPMOTOR_OUT=0;
  792. YJHJ_LPDJStep=5;
  793. }
  794. break;
  795. case 5:
  796. if(!YJHJ_YG_GANYING_IN)
  797. {
  798. YJHJ_LPDJStep=6;
  799. YJHJ_LPDJDelay=dwTickCount+200;
  800. }
  801. break;
  802. case 6:
  803. if(dwTickCount>=YJHJ_LPDJDelay)
  804. {
  805. if(YJHJ_YG_GANYING_IN)
  806. {
  807. YJHJ_LPDJStep=5;
  808. }
  809. else
  810. {
  811. YJHJ_LPDJStep=1;
  812. }
  813. }
  814. break;
  815. }
  816. }
  817. //装衣钩动作
  818. void YJHJ_ZYG_Action(void)
  819. {
  820. switch(YJHJ_ZYGStep)
  821. {
  822. case 1:
  823. //if(YJHJ_YG_GANYING_IN&&)
  824. if(YJHJ_GP_HEAT_FLAG)
  825. {
  826. YJHJ_ZYGStep=2;
  827. YJHJ_SDG_VAVLE=0;
  828. YJHJ_ZYGDelay=dwTickCount+YJHJ_PARAM_SDG_R_TIME*10;
  829. }
  830. break;
  831. case 2:
  832. if(dwTickCount>=YJHJ_ZYGDelay)
  833. {
  834. YJHJ_ZYGStep=3;
  835. YJHJ_FENGG_VAVLE=0;
  836. YJHJ_ZYGDelay=dwTickCount+YJHJ_PARAM_FG_R_TIME*10;
  837. }
  838. break;
  839. case 3:
  840. if(dwTickCount>=YJHJ_ZYGDelay)
  841. {
  842. YJHJ_ZYGStep=4;
  843. YJHJ_FENGG_VAVLE=1;
  844. YJHJ_ZYGDelay=dwTickCount+YJHJ_PARAM_FG_H_TIME*10;
  845. }
  846. break;
  847. case 4:
  848. if(dwTickCount>=YJHJ_ZYGDelay&&YJHJ_ZG_EN_FLAG)
  849. {
  850. YJHJ_ZG_EN_FLAG=0;
  851. YJHJ_ZYGStep=5;
  852. YJHJ_SDG_VAVLE=1;
  853. YJHJ_ZYGDelay=dwTickCount+YJHJ_PARAM_SDG_H_TIME*10;
  854. }
  855. break;
  856. case 5:
  857. if(dwTickCount>=YJHJ_ZYGDelay)
  858. {
  859. YJHJ_XDG_YL_FLAG=1;
  860. YJHJ_ZYGStep=1;
  861. }
  862. break;
  863. }
  864. }
  865. //插钩动作
  866. void YJHJ_cXMotor_Action(void) //
  867. {
  868. #if 1
  869. long hand_local;
  870. switch(YJHJ_cXMOTORStep)
  871. {
  872. case 1://判断是否松轴
  873. if(X_Reset_Flag!=0)
  874. {
  875. XRunResetOStep=1;
  876. YJHJ_cXMOTORStep=2;
  877. ReSetXDelay = dwTickCount + 200;
  878. YJHJ_cXMOTORDelay=dwTickCount+50;
  879. }
  880. else
  881. {
  882. YJHJ_cXMOTORStep=2;
  883. YJHJ_cXMOTORDelay = dwTickCount + 50;
  884. }
  885. break;
  886. case 2://待机位置
  887. if(XRunResetOStep==0&&X_Reset_Flag==0&&dwTickCount>=YJHJ_cXMOTORDelay)
  888. {
  889. YJHJ_cXMOTORStep=3;
  890. hand_local=YJHJ_PARAM_CGJG_LOCAL;
  891. hand_local=hand_local-dwXRealPos;
  892. AxisMovePosAccDec(X_AXIS,YJHJ_PARAM_CGDJ_HSPEED,hand_local,1000,1000,120,120,50);
  893. }
  894. break;
  895. case 3:
  896. if(!X_DRV)
  897. {
  898. YJHJ_cXMOTORStep=0;
  899. }
  900. break;
  901. case 10://待机位置
  902. YJHJ_cXMOTORStep=11;
  903. if(SERVO_VAVLE==0)
  904. {
  905. hand_local=YJHJ_PARAM_CGJG_LOCAL;
  906. hand_local=hand_local-dwXRealPos;
  907. AxisMovePosAccDec(X_AXIS,YJHJ_PARAM_CGDJ_HSPEED,hand_local,1000,1000,150,150,10);
  908. }
  909. else
  910. {
  911. YJHJ_CYG_VAVLE=0;
  912. YJHJ_cXMOTORDelay=dwTickCount+YJHJ_VAVLE_ERROR_TIME;
  913. }
  914. break;
  915. case 11:
  916. if(SERVO_VAVLE==0)
  917. {
  918. if(!X_DRV)
  919. {
  920. YJHJ_DG_VAVLE=0;
  921. YJHJ_cXMOTORStep=12;
  922. YJHJ_cXMOTORDelay=dwTickCount+30;
  923. }
  924. }
  925. else
  926. {
  927. if(YJHJ_CG_ORIGIN_IN)
  928. {
  929. YJHJ_DG_VAVLE=0;
  930. YJHJ_cXMOTORStep=12;
  931. YJHJ_cXMOTORDelay=dwTickCount+YJHJ_VAVLE_ERROR_TIME;
  932. }
  933. else if(dwTickCount>=YJHJ_cXMOTORDelay)
  934. {
  935. YJHJ_SetAlarmCode(YJHJ_CYG_ORIGIN_ALARM);
  936. }
  937. }
  938. break;
  939. case 12://下档钩
  940. if(YJHJ_JG_ORIGIN_IN)//判断衣钩感
  941. {
  942. if(YJHJ_XDG_YL_FLAG)
  943. {
  944. YJHJ_cXMOTORStep=13;
  945. YJHJ_XDG_VAVLE=1;
  946. YJHJ_XDG_YL_FLAG=0;
  947. YJHJ_DG_VAVLE=0;
  948. YJHJ_cXMOTORDelay=dwTickCount+YJHJ_PARAM_XDG_H_TIME*10;
  949. }
  950. }
  951. else if(dwTickCount>=YJHJ_cXMOTORDelay)
  952. {
  953. if(!YJHJ_JG_ORIGIN_IN)
  954. YJHJ_SetAlarmCode(YJHJ_JYG_ORIGIN_ALARM);
  955. }
  956. break;
  957. case 13://夹钩
  958. if(dwTickCount>=YJHJ_cXMOTORDelay)
  959. {
  960. //发送标志位
  961. YJHJ_XDG_VAVLE=0;
  962. YJHJ_ZG_EN_FLAG=1;
  963. YJHJ_cXMOTORStep=14;
  964. YJHJ_ZYGDelay=dwTickCount+YJHJ_PARAM_XDG_R_TIME*10;
  965. YJHJ_cXMOTORDelay=dwTickCount+YJHJ_PARAM_JiaoG_H_TIME*10;
  966. }
  967. break;
  968. case 14:
  969. if(dwTickCount>=YJHJ_cXMOTORDelay)//
  970. {
  971. YJHJ_cXMOTORStep=0;
  972. YJHJ_JG_VAVLE=1;
  973. }
  974. break;
  975. case 20:
  976. YJHJ_cXMOTORStep=21;
  977. if(SERVO_VAVLE==0)
  978. {
  979. hand_local=YJHJ_PARAM_CGDW_LOCAL;
  980. hand_local=hand_local-dwXRealPos;
  981. AxisMovePosAccDec(X_AXIS,YJHJ_PARAM_CGDJ_HSPEED,hand_local,1000,YJHJ_PARAM_CGDJ_LSPEED,150,250,
  982. PosToPulse(X_AXIS,YJHJ_PARAM_CGDJ_LOCAL));
  983. }
  984. else
  985. {
  986. YJHJ_CYG_VAVLE=1;
  987. YJHJ_cXMOTORDelay=dwTickCount+YJHJ_PARAM_CG_H_TIME*10;
  988. }
  989. break;
  990. case 21:
  991. if(SERVO_VAVLE==0)
  992. {
  993. if(!X_DRV)
  994. {
  995. YJHJ_cXMOTORStep=22;
  996. YJHJ_cXMOTORDelay=dwTickCount+30;
  997. }
  998. }
  999. else
  1000. {
  1001. YJHJ_cXMOTORStep=22;
  1002. }
  1003. break;
  1004. case 22:
  1005. if(dwTickCount>=YJHJ_cXMOTORDelay)
  1006. {
  1007. YJHJ_cXMOTORStep=23;
  1008. YJHJ_DG_VAVLE=1;
  1009. YJHJ_JG_VAVLE=0;
  1010. YJHJ_cXMOTORDelay=dwTickCount+YJHJ_PARAM_DingG_H_TIME*10;
  1011. }
  1012. break;
  1013. case 23:
  1014. if(dwTickCount>=YJHJ_cXMOTORDelay)
  1015. {
  1016. YJHJ_cXMOTORStep=10;
  1017. YJHJ_CG_WC_FLAG=1;
  1018. }
  1019. }
  1020. #endif
  1021. }
  1022. //取衣架放衣架动作
  1023. void YJHJ_cYMotor_Action(void)
  1024. {
  1025. long hand_local;
  1026. switch(YJHJ_cYMOTORStep)
  1027. {
  1028. case 1://判断是否松轴
  1029. if(Y_Reset_Flag!=0)
  1030. {
  1031. YRunResetOStep=1;
  1032. YJHJ_cYMOTORStep=2;
  1033. ReSetYDelay = dwTickCount + 200;
  1034. YJHJ_cYMOTORDelay=dwTickCount+50;
  1035. }
  1036. else
  1037. {
  1038. YJHJ_cYMOTORStep=2;
  1039. YJHJ_cYMOTORDelay = dwTickCount + 100;
  1040. }
  1041. break;
  1042. case 2://取料位置
  1043. if(YRunResetOStep==0&&Y_Reset_Flag==0&&dwTickCount>=YJHJ_cYMOTORDelay)
  1044. {
  1045. if(YJHJ_XLJ_ORIGIN_IN)
  1046. {
  1047. YJHJ_cYMOTORStep=3;
  1048. hand_local=YJHJ_PARAM_QYJ_LOCAL;
  1049. hand_local=hand_local-dwYRealPos;
  1050. AxisMovePosAccDec(Y_AXIS,YJHJ_PARAM_XLDJ_HSPEED/2,hand_local,1000,1000,220,220,50);
  1051. }
  1052. else
  1053. {
  1054. YJHJ_SetAlarmCode(YJHJ_XLJ_ORIGIN_ALARM);
  1055. }
  1056. }
  1057. break;
  1058. case 3:
  1059. if(!Y_DRV)
  1060. {
  1061. YJHJ_cYMOTORStep=0;
  1062. }
  1063. break;
  1064. case 10:
  1065. if(YJHJ_XLJ_ORIGIN_IN)
  1066. {
  1067. YJHJ_cYMOTORStep=11;
  1068. hand_local=YJHJ_PARAM_FYJ_LOCAL;
  1069. hand_local=hand_local-dwYRealPos;
  1070. AxisMovePosAccDec(Y_AXIS,YJHJ_PARAM_XLDJ_HSPEED,hand_local,2000,2000,250,250,100);
  1071. }
  1072. else if(dwTickCount>=YJHJ_cYMOTORDelay)
  1073. {
  1074. YJHJ_SetAlarmCode(YJHJ_XLJ_ORIGIN_ALARM);
  1075. }
  1076. break;
  1077. case 11:
  1078. if(!Y_DRV)
  1079. {
  1080. YJHJ_cYMOTORStep=12;
  1081. YJHJ_cYMOTORDelay=dwTickCount+30;
  1082. }
  1083. break;
  1084. case 12:
  1085. if(dwTickCount>=YJHJ_cYMOTORDelay)
  1086. {
  1087. YJHJ_JZ_VAVLE=0;
  1088. YJHJ_cYMOTORStep=13;
  1089. YJHJ_cYMOTORDelay=dwTickCount+YJHJ_PARAM_JZ_R_TIME*10;
  1090. }
  1091. break;
  1092. case 13://夹钩
  1093. if(dwTickCount>=YJHJ_cYMOTORDelay)
  1094. {
  1095. YJHJ_cYMOTORStep=14;
  1096. hand_local=YJHJ_PARAM_QYJ_LOCAL;
  1097. hand_local=hand_local-dwYRealPos;
  1098. AxisMovePosAccDec(Y_AXIS,YJHJ_PARAM_XLDJ_HSPEED,hand_local,2000,2000,250,250,50);
  1099. }
  1100. break;
  1101. case 14:
  1102. if(!Y_DRV)
  1103. {
  1104. YJHJ_cYMOTORStep=15;
  1105. YJHJ_cYMOTORDelay=dwTickCount+30;
  1106. }
  1107. break;
  1108. case 15:
  1109. if(dwTickCount>=YJHJ_cYMOTORDelay)
  1110. {
  1111. YJHJ_cYMOTORStep=0;
  1112. }
  1113. break;
  1114. //下取料,夹
  1115. case 20:
  1116. YJHJ_QL_VAVLE=1;
  1117. YJHJ_cYMOTORStep=21;
  1118. YJHJ_cYMOTORDelay=dwTickCount+YJHJ_PARAM_QUL_H_TIME*10;
  1119. break;
  1120. case 21:
  1121. if(dwTickCount>=YJHJ_cYMOTORDelay)
  1122. {
  1123. YJHJ_JZ_VAVLE=1;
  1124. YJHJ_cYMOTORStep=22;
  1125. YJHJ_cYMOTORDelay=dwTickCount+YJHJ_PARAM_JZ_H_TIME*10;
  1126. }
  1127. break;
  1128. case 22:
  1129. if(dwTickCount>=YJHJ_cYMOTORDelay)
  1130. {
  1131. YJHJ_cYMOTORStep=0;
  1132. }
  1133. break;
  1134. }
  1135. }
  1136. //高频加热动作
  1137. void YJHJ_GPJR_Action(void)
  1138. {
  1139. switch(YJHJ_cGPJRStep)
  1140. {
  1141. case 1:
  1142. if(YJHJ_WorkCnt==0)
  1143. {
  1144. //if(YJHJ_YG_GANYING_IN)
  1145. {
  1146. YJHJ_cGPJRStep=2;
  1147. YJHJ_GP_HEAT_FLAG=0;
  1148. YJHJ_HEAT_OUT=1;
  1149. YJHJ_cGPJRDelay=dwTickCount+YJHJ_PARAM_GPJR_TIME*10;
  1150. }
  1151. }
  1152. break;
  1153. case 2:
  1154. if(dwTickCount>=YJHJ_cGPJRDelay)
  1155. {
  1156. YJHJ_cGPJRStep=1;
  1157. YJHJ_HEAT_OUT=0;
  1158. YJHJ_GP_HEAT_FLAG=1;
  1159. if(YJHJ_PARAM_GPJR_SPACE_MUN==0)YJHJ_PARAM_GPJR_SPACE_MUN=1;
  1160. YJHJ_WorkCnt=YJHJ_PARAM_GPJR_SPACE_MUN;
  1161. }
  1162. break;
  1163. }
  1164. }
  1165. //自动动作
  1166. void YJHJ_AutoStepAction(void)
  1167. {
  1168. long hand_local;
  1169. dwXRealPos = GetPos(X_AXIS);
  1170. dwYRealPos = GetPos(Y_AXIS);
  1171. dwZRealPos = GetPos(Z_AXIS);
  1172. X_SOFT_PLIMIT=GetSoftPLimit(X_AXIS);
  1173. X_SOFT_NLIMIT=GetSoftNLimit(X_AXIS);
  1174. Y_SOFT_PLIMIT=GetSoftPLimit(Y_AXIS);
  1175. Y_SOFT_NLIMIT=GetSoftNLimit(Y_AXIS);
  1176. Z_SOFT_PLIMIT=GetSoftPLimit(Z_AXIS);
  1177. Z_SOFT_NLIMIT=GetSoftNLimit(Z_AXIS);
  1178. user_datas[121] = YJHJ_AutoStep;
  1179. user_datas[122] = YJHJ_cXMOTORStep;
  1180. user_datas[123] = YJHJ_cYMOTORStep;
  1181. user_datas[124] = YJHJ_cZMOTORStep;
  1182. user_datas[125] = YJHJ_LPDJStep;
  1183. user_datas[126] = YJHJ_cGPJRStep;
  1184. user_datas[127] = YJHJ_ZLTStep;
  1185. user_datas[128] = YJHJ_PARAM_XLDJ_HSPEED;//YJHJ_ZYGStep;
  1186. *PARAM_X_LOCAL=dwXRealPos;
  1187. *PARAM_Y_LOCAL=dwYRealPos;
  1188. *PARAM_Z_LOCAL=dwZRealPos;
  1189. #if 1
  1190. if(YJHJ_XL_SALARM_IN)
  1191. {
  1192. YJHJ_SetAlarmCode(Y_ORIGIN_ALARM);
  1193. }
  1194. else
  1195. {
  1196. if(GetAlarmCode(ALARM_ADDR)==Y_ORIGIN_ALARM)SetAlarmCode(ALARM_ADDR,0);
  1197. }
  1198. if(YJHJ_TL_SALARM_IN)
  1199. {
  1200. YJHJ_SetAlarmCode(Z_ORIGIN_ALARM);
  1201. }
  1202. else
  1203. {
  1204. if(GetAlarmCode(ALARM_ADDR)==Z_ORIGIN_ALARM)SetAlarmCode(ALARM_ADDR,0);
  1205. }
  1206. /* if(YJHJ_WLSTOP_FLAG&&dwTickCount>=YJHJ_cWLJCDelay)
  1207. {
  1208. YJHJ_WLSTOP_FLAG=0;
  1209. YJHJ_SetAlarmCode(YJHJ_NO_WLSTOP_ALARM);
  1210. }*/
  1211. switch(YJHJ_AutoStep)
  1212. {
  1213. case 1://料盘启动,各种回待机位置
  1214. if(dwTickCount>=YJHJ_AutoDelay&&YJHJ_cXMOTORStep==0&&
  1215. YJHJ_cYMOTORStep==0&&YJHJ_cZMOTORStep==0)
  1216. {
  1217. if(bTestMode&&bStart||!bTestMode)
  1218. {
  1219. YJHJ_AutoStep=2;
  1220. YJHJ_cGPJRStep=1;//加热
  1221. YJHJ_GP_HEAT_FLAG=0;
  1222. }
  1223. }
  1224. break;
  1225. case 2://判断衣钩感
  1226. if(YJHJ_YG_GANYING_IN&&YJHJ_GP_HEAT_FLAG==1)
  1227. {
  1228. YJHJ_ZG_EN_FLAG=1;
  1229. YJHJ_AutoStep=3;
  1230. }
  1231. break;
  1232. case 3://加热完成
  1233. if(YJHJ_GP_HEAT_FLAG==1)
  1234. {
  1235. if(bTestMode&&bStart||!bTestMode)
  1236. {
  1237. YJHJ_CG_WC_FLAG=0;
  1238. YJHJ_cXMOTORStep=12;//推钩
  1239. YJHJ_cXMOTORDelay=dwTickCount+YJHJ_VAVLE_ERROR_TIME;
  1240. YJHJ_cZMOTORStep=12;//推衣架动作
  1241. YJHJ_AutoStep=40;
  1242. }
  1243. }
  1244. break;
  1245. case 40://衣架推到位,顶料
  1246. if(YJHJ_cZMOTORStep==0)
  1247. {
  1248. YJHJ_cZMOTORStep=20;
  1249. YJHJ_AutoStep=4;
  1250. }
  1251. break;
  1252. case 4://衣架推到位,顶料
  1253. if(YJHJ_cZMOTORStep==0)
  1254. {
  1255. if(bTestMode&&bStart||!bTestMode)
  1256. {
  1257. YJHJ_AutoStep=5;
  1258. YJHJ_DINGL_VAVLE=1;
  1259. YJHJ_AutoDelay=dwTickCount+YJHJ_PARAM_DINGL_H_TIME*10;
  1260. if(YJHJ_YG_GANYING_IN)
  1261. {
  1262. YJHJ_WLSTOP_FLAG=1;
  1263. YJHJ_cWLJCDelay=dwTickCount+YJHJ_PARAM_WL_STOP_TIME*10;
  1264. }
  1265. }
  1266. }
  1267. break;
  1268. case 5://压料
  1269. if(dwTickCount>=YJHJ_AutoDelay)
  1270. {
  1271. if(bTestMode&&bStart||!bTestMode)
  1272. {
  1273. YJHJ_AutoStep=60;
  1274. YJHJ_YL_VAVLE=1;
  1275. YJHJ_cZMOTORStep =10; //回到待机位置
  1276. if(YJHJ_ONCE_FLAG==1)
  1277. {
  1278. YJHJ_AutoDelay=dwTickCount+200;
  1279. }
  1280. else
  1281. YJHJ_AutoDelay=dwTickCount+YJHJ_VAVLE_ERROR_TIME;
  1282. }
  1283. }
  1284. break;
  1285. case 60://判断是否有料
  1286. if(YJHJ_YL_LIMIT_IN)
  1287. {
  1288. YJHJ_AutoStep=6;
  1289. YJHJ_AutoDelay=dwTickCount+30;
  1290. }
  1291. else if(YJHJ_ONCE_FLAG==1)
  1292. {
  1293. if(dwTickCount>=YJHJ_AutoDelay)
  1294. {
  1295. YJHJ_cZMOTORStep=12;//推衣架动作
  1296. YJHJ_AutoStep=40;
  1297. YJHJ_ONCE_FLAG=0;
  1298. YJHJ_YL_VAVLE=0;
  1299. YJHJ_DINGL_VAVLE=0;
  1300. }
  1301. }
  1302. else if(dwTickCount>=YJHJ_AutoDelay)
  1303. {
  1304. YJHJ_AutoStep=100;
  1305. SetAlarmCode(ALARM_ADDR,YJHJ_YL_ORIGIN_ALARM);
  1306. YJHJ_AutoDelay=dwTickCount+500;
  1307. //YJHJ_SetAlarmCode(YJHJ_YL_ORIGIN_ALARM);//无料告警停机
  1308. }
  1309. break;
  1310. case 6://判断是否有料
  1311. if(dwTickCount>=YJHJ_AutoDelay)
  1312. {
  1313. if(YJHJ_YL_LIMIT_IN)//(dwTickCount>=YJHJ_AutoDelay)//
  1314. {
  1315. if(YJHJ_cXMOTORStep==0)
  1316. {
  1317. YJHJ_ONCE_FLAG=0;
  1318. YJHJ_AutoStep=7;
  1319. YJHJ_cXMOTORStep=20; //插钩
  1320. }
  1321. }
  1322. else
  1323. {
  1324. YJHJ_AutoStep=60;
  1325. YJHJ_AutoDelay=dwTickCount+YJHJ_VAVLE_ERROR_TIME;
  1326. }
  1327. }
  1328. break;
  1329. case 7://有料,插钩,取料下
  1330. if(bTestMode&&bStart||!bTestMode)
  1331. {
  1332. if(YJHJ_cYMOTORStep==0)
  1333. {
  1334. YJHJ_cYMOTORStep=20; //取料下
  1335. YJHJ_AutoStep=8;
  1336. }
  1337. }
  1338. break;
  1339. case 8://插钩完成,取料下完,松开夹钩,顶料下;
  1340. if(YJHJ_cYMOTORStep==0)
  1341. {
  1342. if(bTestMode&&bStart||!bTestMode)
  1343. {
  1344. if(YJHJ_CG_WC_FLAG)
  1345. {
  1346. YJHJ_CG_WC_FLAG=0;
  1347. YJHJ_AutoStep=9;
  1348. YJHJ_AutoDelay=dwTickCount+10;
  1349. }
  1350. }
  1351. }
  1352. break;
  1353. case 9://松开顶钩,松开压料,
  1354. if(dwTickCount>=YJHJ_AutoDelay)
  1355. {
  1356. YJHJ_AutoStep=10;
  1357. YJHJ_YL_VAVLE=0;
  1358. YJHJ_AutoDelay=dwTickCount+10;
  1359. }
  1360. break;
  1361. case 10://
  1362. if(dwTickCount>=YJHJ_AutoDelay)
  1363. {
  1364. YJHJ_AutoStep=11;
  1365. YJHJ_QL_VAVLE=0;
  1366. YJHJ_DINGL_VAVLE=0;
  1367. YJHJ_cYMOTORStep=10;
  1368. YJHJ_cYMOTORDelay=dwTickCount+2000;
  1369. YJHJ_AutoDelay=dwTickCount+YJHJ_PARAM_DINGL_R_TIME*10;
  1370. }
  1371. break;
  1372. case 11://
  1373. if(dwTickCount>=YJHJ_AutoDelay)
  1374. {
  1375. if(YJHJ_cZMOTORStep==0)
  1376. {
  1377. CalProSP(SPEED_ADDR);//计算生产速度
  1378. AddToTal(TOTAL_ADDR);//生产总量加1并保存
  1379. AddToTal(NOWTOTAL_ADDR);//生产总量加1并保存
  1380. AddToTal(ALL_TOTAL_ADDR);//累计生产总量
  1381. AddToTal(DATE_TOTAL_ADDR);//当班生产总量
  1382. YJHJ_cZMOTORStep=20;
  1383. YJHJ_AutoStep=12;
  1384. }
  1385. }
  1386. break;
  1387. case 12://送线
  1388. if((GetTotal(TOTAL_ADDR) >= GetTotal(SETTOTAL_ADDR)) && (GetTotal(SETTOTAL_ADDR) != 0))
  1389. {
  1390. SetAlarmCode(ALARM_ADDR,YJHJ_TOTAL_ALARM);
  1391. //回到待机点
  1392. YJHJ_AutoStep=20;
  1393. }
  1394. else if(SingOneFlg)
  1395. {
  1396. SingOneFlg=0;
  1397. YJHJ_AutoStep=20;
  1398. }
  1399. else
  1400. {
  1401. YJHJ_AutoStep=4;
  1402. if(YJHJ_WorkCnt>0)YJHJ_WorkCnt--;
  1403. }
  1404. break;
  1405. case 20://回待机点
  1406. if(YJHJ_cXMOTORStep==0&&YJHJ_cYMOTORStep==0&&YJHJ_cZMOTORStep==0)
  1407. {
  1408. YJHJ_AutoStep=0;
  1409. bRunning=0;
  1410. }
  1411. break;
  1412. case 100://回待机点
  1413. if(dwTickCount>=YJHJ_AutoDelay)
  1414. {
  1415. YJHJ_AutoStep=101;
  1416. YJHJ_YL_VAVLE=0;
  1417. YJHJ_DINGL_VAVLE=0;
  1418. YJHJ_AutoDelay=dwTickCount+500;
  1419. }
  1420. break;
  1421. case 101://回待机点
  1422. if(dwTickCount>=YJHJ_AutoDelay)
  1423. {
  1424. if(bStart)
  1425. {
  1426. bStart=0;
  1427. YJHJ_ONCE_FLAG=1;
  1428. YJHJ_AutoStep=5;
  1429. }
  1430. }
  1431. break;
  1432. }
  1433. #endif
  1434. }
  1435. void YJHJ_CheckStart(void)
  1436. {
  1437. #if 1
  1438. //启动
  1439. if((START_IN_UP||bStart||bOnceStart)&&!bRunning&&!EMGSTOP_IN)
  1440. {
  1441. if(ALL_Reset_Flag)
  1442. {
  1443. SetAlarmCode(ALARM_ADDR,YJHJ_NO_RESET_ALARM);
  1444. }
  1445. else if(GetAlarmCode(ALARM_ADDR)==0)
  1446. {
  1447. //
  1448. bRunning=1;
  1449. YJHJ_AutoStep=1;
  1450. //X轴回待机位
  1451. if(SERVO_VAVLE==0)YJHJ_cXMOTORStep=1;
  1452. //Y轴回待机位
  1453. YJHJ_cYMOTORStep=1;
  1454. //Z轴回待机位
  1455. YJHJ_cZMOTORStep=1;
  1456. //装料,装钩
  1457. //YJHJ_ZLTStep=1;
  1458. //YJHJ_ZLTDelay=dwTickCount+20;
  1459. YJHJ_FENL_VAVLE=1;
  1460. //
  1461. YJHJ_ZYGStep=1;
  1462. //料盘启动
  1463. YJHJ_LPDJStep=1;
  1464. //IO清零
  1465. YJHJ_DINGL_VAVLE=0;//顶料
  1466. YJHJ_JG_VAVLE=0;
  1467. YJHJ_DG_VAVLE=0;
  1468. YJHJ_YL_VAVLE=0;
  1469. YJHJ_QL_VAVLE=0;
  1470. YJHJ_JZ_VAVLE=0;
  1471. YJHJ_CYG_VAVLE=0;
  1472. //
  1473. //YJHJ_ZG_EN_FLAG=1;
  1474. //YJHJ_ZYJ_EN_FLAG=1;
  1475. //
  1476. YJHJ_WLSTOP_FLAG=0;
  1477. //
  1478. YJHJ_WorkCnt=0;
  1479. YJHJ_AutoDelay=dwTickCount+200;
  1480. if(bOnceStart)SingOneFlg=1;
  1481. YJHJ_TYG_TIME=0;
  1482. YJHJ_ONCE_FLAG=1;
  1483. }
  1484. bStart=0;
  1485. }
  1486. //停止
  1487. if(STOP_IN_UP||bStop||EMGSTOP_IN)
  1488. {
  1489. //YJHJ_STOP_NUM++;
  1490. //if(YJHJ_STOP_NUM>2)YJHJ_STOP_NUM=0;
  1491. /*if(bStop&&bRunning)
  1492. {
  1493. SingOneFlg=1;
  1494. bStop=0;
  1495. }
  1496. else*/
  1497. {
  1498. //轴停止步
  1499. bRunning=0;
  1500. YJHJ_WLSTOP_FLAG=0;
  1501. bStop=0;
  1502. AxisEgmStop(X_AXIS);
  1503. AxisEgmStop(Y_AXIS);
  1504. AxisEgmStop(Z_AXIS);
  1505. //自动
  1506. YJHJ_AutoStep=0;
  1507. YJHJ_cXMOTORStep=0;
  1508. YJHJ_cYMOTORStep=0;
  1509. YJHJ_cZMOTORStep=0;
  1510. //
  1511. YJHJ_LPDJStep=0;
  1512. //
  1513. YJHJ_ZLTStep=0;
  1514. //
  1515. YJHJ_cGPJRStep=0;
  1516. //
  1517. YJHJ_ZYGStep=0;
  1518. //IO
  1519. YJHJ_FENL_VAVLE=0;
  1520. YJHJ_FANGL_VAVLE=0;
  1521. YJHJ_DINGL_VAVLE=0;
  1522. YJHJ_FENGG_VAVLE=0;
  1523. YJHJ_SDG_VAVLE=0;
  1524. YJHJ_XDG_VAVLE=0;
  1525. YJHJ_JG_VAVLE=0;
  1526. YJHJ_DG_VAVLE=0;
  1527. YJHJ_QL_VAVLE=0;
  1528. YJHJ_YL_VAVLE=0;
  1529. YJHJ_JZ_VAVLE=0;
  1530. YJHJ_CYG_VAVLE=0;
  1531. YJHJ_LPMOTOR_OUT=0;
  1532. YJHJ_HEAT_OUT=0;
  1533. //复位
  1534. bXRsting=0;
  1535. XRunResetOStep=0;
  1536. bYRsting=0;
  1537. YRunResetOStep=0;
  1538. bZRsting=0;
  1539. ZRunResetOStep=0;
  1540. }
  1541. }
  1542. //故障处理
  1543. if(bAlarmStop)
  1544. {
  1545. bAlarmStop=0;
  1546. AxisEgmStop(X_AXIS);
  1547. AxisEgmStop(Y_AXIS);
  1548. AxisEgmStop(Z_AXIS);
  1549. //自动
  1550. bRunning=0;
  1551. YJHJ_AutoStep=0;
  1552. //自动
  1553. YJHJ_AutoStep=0;
  1554. YJHJ_cXMOTORStep=0;
  1555. YJHJ_cYMOTORStep=0;
  1556. YJHJ_cZMOTORStep=0;
  1557. //
  1558. YJHJ_LPDJStep=0;
  1559. //
  1560. YJHJ_ZLTStep=0;
  1561. //
  1562. YJHJ_cGPJRStep=0;
  1563. //
  1564. YJHJ_ZYGStep=0;
  1565. }
  1566. /*
  1567. //伺服报警标志
  1568. if(((GetAlarm(Y_AXIS)==1)) || GetAlarm(X_AXIS)==1))
  1569. {
  1570. YJHJ_bAlarmStop=1;
  1571. YJHJ_SERVO_ALAEM_FLAG=1;
  1572. YJHJ_SetAlarmCode(YJHJ_HAND_SERVO_ALARM);
  1573. }
  1574. //清除伺服告警
  1575. if(dwTickCount>=YJHJ_CLR_ALARM_Pulse&&YJHJ_CLR_SERVOALAEM_FLAG)
  1576. {
  1577. YJHJ_CLR_SERVOALAEM_FLAG=0;
  1578. SetClr(X_AXIS, 0);
  1579. SetClr(Y_AXIS, 0);
  1580. }*/
  1581. #endif
  1582. }
  1583. //初始化动作
  1584. void YJHJ_InitAction(void)
  1585. {
  1586. float buff_pulse,buff_dist;
  1587. buff_pulse = PARAM_XCYCLE_PULSE;
  1588. buff_dist = PARAM_XCYCLE_LENGTH;
  1589. XGearRatio = buff_pulse/buff_dist;
  1590. buff_pulse = PARAM_YCYCLE_PULSE;
  1591. buff_dist = PARAM_YCYCLE_LENGTH;
  1592. YGearRatio = buff_pulse/buff_dist;
  1593. buff_pulse = PARAM_ZCYCLE_PULSE;
  1594. buff_dist = PARAM_ZCYCLE_LENGTH;
  1595. ZGearRatio = buff_pulse/buff_dist;
  1596. //SetEnReverse(X_AXIS, 0);
  1597. //SetEnReverse(Y_AXIS, 0);
  1598. //SetEn(X_AXIS, YJHJ_MOTOR_DISEN);
  1599. //SetEn(Y_AXIS, YJHJ_MOTOR_DISEN);
  1600. SetAlarmCode(ALARM_ADDR,YJHJ_NO_ALARM);
  1601. SetDirReverse(X_AXIS, 0);
  1602. SetDirReverse(Y_AXIS, 1);
  1603. SetDirReverse(Z_AXIS, 0);
  1604. //伺服报警常闭输入、0为正常,1为告警,
  1605. //SetAlarmReverse(X_AXIS,1);
  1606. //SetAlarmReverse(Y_AXIS,1);
  1607. if(SERVO_VAVLE==0)X_Reset_Flag=1;
  1608. Y_Reset_Flag=1;
  1609. Z_Reset_Flag=1;
  1610. ALL_Reset_Flag=1;
  1611. //X轴上电复位
  1612. if(PARAM_XPOWERON_RST)
  1613. {
  1614. YJHJ_All_REST=1;
  1615. }
  1616. }
  1617. void YJHJ_Action(void)
  1618. {
  1619. YJHJ_CheckStart();
  1620. YJHJ_ManualAction();
  1621. //回原点处理
  1622. Y_ReSetOrigin();
  1623. X_ReSetOrigin();
  1624. Z_ReSetOrigin();
  1625. //料盘动作
  1626. YJHJ_LPDJ_Action();
  1627. //加热动作
  1628. YJHJ_GPJR_Action();
  1629. //装料动作
  1630. YJHJ_ZLT_Action();
  1631. //推料
  1632. YJHJ_cZMotor_Action();
  1633. //装衣钩
  1634. YJHJ_ZYG_Action();
  1635. //插衣钩
  1636. YJHJ_cXMotor_Action();
  1637. //出料
  1638. YJHJ_cYMotor_Action();
  1639. //自动动作
  1640. YJHJ_AutoStepAction();
  1641. }
  1642. #endif