XYChuanTouJi.c 42 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391
  1. #include "global.h"
  2. #if XIN_YE_MACHINE
  3. //鑫业穿头机
  4. void XYChuanTou_AlarmProtect(void);
  5. void XYChuanTou_ManualAction(void);
  6. void XYChuanTou_AutoAction(void);
  7. void XYChuanTou_StepCheckStart(void);
  8. void XYChuanTou_Motor(void);
  9. void XYChuanTou_SongLiaoAction(void);
  10. void XYChuanTou_HengSongLiao_Action(void); //横送料
  11. void XYChuanTou_ZhuangLiaoStep(void); //装料
  12. void XYChuanTou_HeMo(void); //合模动作
  13. void XYChuanTou_CLT_Step(void); //穿拉头动作
  14. void XYChuanTou_ZhenDongAction(void);
  15. static unsigned char cSongLiaoOk = 0,cMotorDinWei_OK = 0;
  16. static unsigned char cZhuangLiaoOk = 0;
  17. static unsigned char cZLCnt = 0;
  18. unsigned char SingOneFlg001;
  19. unsigned long Zipper_Length = 0;
  20. void CT_SetAlarmCode(unsigned alarm_code)
  21. {
  22. SetAlarmCode(CT_ALARM_ADDR,alarm_code);
  23. bAlarmStop = 1;
  24. }
  25. void ChuanTou_InitAction(void)
  26. {
  27. float length_buff,pulse_buff;
  28. axis_x->speed_unit = 1; //速度频率倍率单位
  29. length_buff = CT_PARAM_CYCLE_LENGTH;
  30. pulse_buff = CT_PARAM_CYCLE_PULSE;
  31. XGearRatio = pulse_buff/length_buff;
  32. YGearRatio = 1;
  33. SetEn(X_AXIS,CT_MOTOR_DISEN);
  34. CT_ZhenDongPian_OUT = 1;
  35. SetAlarmCode(CT_ALARM_ADDR,0);
  36. }
  37. void ChuanTou_Action(void)
  38. {
  39. //数据监控
  40. dwRealPos = GetPos(X_AXIS);
  41. user_datas[121] = CT_MotorStep;
  42. user_datas[122] = CT_AutoStep;
  43. user_datas[123] = dwRealPos;
  44. user_datas[124] = CT_HeMoStep;
  45. user_datas[125] = CT_SL_Step;
  46. user_datas[126] = CT_HSL_Step;
  47. user_datas[127] = CT_ZL_Step;
  48. user_datas[128] = CT_CLT_Step;
  49. InputPinConfig();
  50. XYChuanTou_AlarmProtect();
  51. XYChuanTou_StepCheckStart(); // 调用脚踏开关检测程序
  52. XYChuanTou_Motor();
  53. XYChuanTou_ManualAction();
  54. XYChuanTou_AutoAction();
  55. XYChuanTou_ZhenDongAction();
  56. XYChuanTou_SongLiaoAction();
  57. XYChuanTou_HengSongLiao_Action(); //横送料
  58. XYChuanTou_ZhuangLiaoStep(); //装料
  59. XYChuanTou_HeMo(); //合模动作
  60. XYChuanTou_CLT_Step();
  61. OutputPinConfig();
  62. }
  63. //手动动作
  64. void XYChuanTou_ManualAction(void)
  65. {
  66. if(bRunning == 0)
  67. {
  68. if(bClearTotal) //切断计数清零
  69. {
  70. bClearTotal = 0;
  71. ClrcToTal(CT_TOTAL_ADDR);
  72. }
  73. //手动分带
  74. if(CT_bFD)
  75. {
  76. CT_bFD = 0;
  77. CT_FenDai_VAVLE = ~CT_FenDai_VAVLE;
  78. }
  79. //手动下模
  80. if(CT_bXM)
  81. {
  82. CT_bXM = 0;
  83. if(CT_XiaMo_VAVLE)
  84. CT_XiaMo_VAVLE = 0;
  85. else if(CT_HSL_ORIGIN_IN && !CT_HangSongLiao_VAVLE)
  86. CT_XiaMo_VAVLE = 1;
  87. else //下模输出条件警告
  88. {
  89. SetAlarmCode(CT_ALARM_ADDR,CT_XiaMo_out_ALARM); //横送料在原点才能输出
  90. }
  91. }
  92. if(CT_DZ_IN)
  93. {
  94. CT_GouZhen_VAVLE = 1;
  95. }
  96. if(CT_GUO_LIAN_IN_UP)
  97. {
  98. CT_GouZhen_VAVLE = 0;
  99. CT_HuChi_VAVLE = 1;
  100. }
  101. //手动送料
  102. if(CT_bSL)
  103. {
  104. CT_bSL = 0;
  105. if(CT_SongLiao_VAVLE)
  106. {
  107. CT_SongLiao_VAVLE=0;
  108. }
  109. else if(!CT_HangSongLiao_VAVLE && !CT_HSL_LIMIT_IN)
  110. {
  111. CT_SongLiao_VAVLE = 1;
  112. }
  113. else
  114. {
  115. if(CT_HangSongLiao_VAVLE)
  116. SetAlarmCode(CT_ALARM_ADDR,CT_XiaMo_out_ALARM);
  117. }
  118. }
  119. // 手动合链
  120. if(CT_bHL)
  121. {
  122. CT_bHL = 0;
  123. CT_HeLian_VAVLE = ~CT_HeLian_VAVLE;
  124. }
  125. // 手动横送料
  126. if(CT_bHSL)
  127. {
  128. CT_bHSL = 0;
  129. if(CT_HangSongLiao_VAVLE)
  130. {
  131. if(!CT_SongLiao_VAVLE && !CT_SL_LIMIT_IN)
  132. CT_HangSongLiao_VAVLE = 0;
  133. } //送料电磁阀 接料电磁阀 下模电磁阀 送拉头到位 保证没拉头
  134. else if(!CT_SongLiao_VAVLE && !CT_JieLiao_VAVLE && !CT_XiaMo_VAVLE && !CT_SL_LIMIT_IN && (!CT_MaGou_VAVLE || (CT_MaGou_VAVLE && CT_MG_IN)))
  135. {
  136. CT_MaGou_VAVLE = 0;
  137. CT_HangSongLiao_VAVLE = 1;
  138. }
  139. else //警告代码
  140. {
  141. if(CT_SongLiao_VAVLE)
  142. SetAlarmCode(CT_ALARM_ADDR,CT_SongLiao_VAVLE_Not_ALARM); //送料不能有输出
  143. else if(CT_JieLiao_VAVLE)
  144. SetAlarmCode(CT_ALARM_ADDR,CT_JieLiao_VAVLE_Not_ALARM); //接料不能有输出
  145. else if(CT_XiaMo_VAVLE)//下模不能有输出
  146. SetAlarmCode(CT_ALARM_ADDR,CT_XiaMo_VAVLE_Not_ALARM);
  147. else //已经有拉头
  148. SetAlarmCode(CT_ALARM_ADDR,CT_LaTuo_Not_ALARM); //不能有拉头
  149. }
  150. }
  151. //手动接料
  152. if(CT_bJL)
  153. {
  154. CT_bJL = 0;
  155. if(CT_JieLiao_VAVLE)
  156. {
  157. //如果接料输出后,没马勾或横送料已回到原位才能退
  158. if((!CT_HangSongLiao_VAVLE && CT_HSL_ORIGIN_IN) || !CT_MaGou_VAVLE)
  159. CT_JieLiao_VAVLE = 0;
  160. else //退接料警告
  161. {
  162. SetAlarmCode(CT_ALARM_ADDR,CT_TuiJieLiao_ALARM); //码勾输出情况下横送料要退回原点
  163. }
  164. }
  165. else if((!CT_MaGou_VAVLE && !CT_JiaLaTou_VAVLE) || (CT_HSL_ORIGIN_IN && !CT_HangSongLiao_VAVLE))
  166. {
  167. CT_JieLiao_VAVLE = 1;
  168. }
  169. else //接料警告
  170. {
  171. SetAlarmCode(CT_ALARM_ADDR,CT_JieLiao_out_ALARM); //码勾没输出或横送料在原点才能输出
  172. }
  173. }
  174. if(CT_bGM) //手动勾码
  175. {
  176. CT_bGM = 0;
  177. CT_MaGou_VAVLE = ~CT_MaGou_VAVLE;
  178. }
  179. if(CT_bHC) //手动护齿
  180. {
  181. CT_bHC = 0;
  182. CT_HuChi_VAVLE = ~CT_HuChi_VAVLE;
  183. }
  184. //手动装料
  185. if(CT_bZL)
  186. {
  187. CT_bZL = 0;
  188. if(CT_ZL_Step == 0)
  189. {
  190. cSongLiaoOk = 1;
  191. cZhuangLiaoOk = 0;
  192. CT_ZL_Step = 1;
  193. }
  194. }
  195. //
  196. //手动夹拉头
  197. if(CT_bZLT)
  198. {
  199. CT_bZLT = 0;
  200. if(!CT_JiaLaTou_VAVLE)
  201. CT_JiaLaTou_VAVLE = 1;
  202. else if(!CT_FenDai_VAVLE || !CT_XiaMo_VAVLE)
  203. {
  204. CT_JiaLaTou_VAVLE=0;
  205. }
  206. else
  207. {
  208. SetAlarmCode(CT_ALARM_ADDR,CT_FENDAI_JIALITOU_out_ALARM);
  209. }
  210. }
  211. //
  212. //手动定位
  213. if(CT_bMotorDW)
  214. {
  215. CT_bMotorDW = 0;
  216. if(CT_MotorStep == 0)
  217. {
  218. if(!CT_FenDai_VAVLE && !CT_XiaMo_VAVLE)
  219. {
  220. CT_HuChi_VAVLE = 0;
  221. CT_HeLian_VAVLE = 0;
  222. CT_MotorStep = 1;
  223. }
  224. else
  225. {
  226. if(CT_FenDai_VAVLE) SetAlarmCode(CT_ALARM_ADDR,CT_FenDai_out_ALARM); //分带输出不能拖带
  227. //护链输出不能拖带
  228. }
  229. }
  230. }
  231. //自动装料
  232. if(CT_bZL)
  233. {
  234. CT_bZL = 0;
  235. if(CT_ZL_Step == 0)
  236. CT_ZL_Step = 1;
  237. }
  238. //合模 (半自动)
  239. if(CT_bHM)
  240. {
  241. CT_bHM = 0;
  242. if(CT_XiaMo_VAVLE && CT_FenDai_VAVLE)
  243. {
  244. CT_XiaMo_VAVLE = 0;
  245. CT_FenDai_VAVLE = 0;
  246. CT_HeLian_VAVLE = 0;
  247. CT_HuChi_VAVLE = 0;
  248. CT_JieLiao_VAVLE = 0;
  249. CT_JiaLaTou_VAVLE=0;
  250. CT_MaGou_VAVLE = 0;
  251. CT_HeMoStep = 0;
  252. }
  253. else if(CT_HeMoStep == 0)
  254. {
  255. if(CT_HSL_ORIGIN_IN && !CT_HangSongLiao_VAVLE)
  256. {
  257. CT_HeMoStep = 1;
  258. CT_MaGou_VAVLE = 1;
  259. CT_HeMoDelay = dwTickCount +80; //给码勾检测是否有拉头
  260. }
  261. else //合模条件不满足
  262. {
  263. SetAlarmCode(CT_ALARM_ADDR,CT_XiaMo_out_ALARM); //横送料在原点才能输出
  264. }
  265. }
  266. if(!CT_GUO_LIAN_IN)
  267. SetAlarmCode(CT_ALARM_ADDR,CT_Guo_Lian_IN_ALARM); //拉链在空位上容易爆链
  268. }
  269. //
  270. if(CT_bMotorH)
  271. {
  272. if(!X_DRV)AxisContinueMove(X_AXIS,20,CT_DIR_N);
  273. }
  274. if((QD_MotorStep == 0) && !CT_bMotorH && (CT_AutoStep == 0))
  275. {
  276. if(X_DRV)AxisEgmStop(X_AXIS);
  277. }
  278. //振动盘
  279. if(CT_bZDP)
  280. {
  281. CT_bZDP = 0;
  282. CT_ZDP_Delay = dwTickCount + CT_PARAM_ZDP_STOP_TIME;
  283. CT_ZhenDongPian_OUT = 1;
  284. }
  285. }
  286. }
  287. void XYChuanTou_AlarmProtect(void)
  288. {
  289. }
  290. //振动盘控制
  291. void XYChuanTou_ZhenDongAction(void)
  292. {
  293. if(CT_bDLP || (bRunning && CT_ZhenDongPian_OUT && CT_PARAM_DALIAOPIAN))
  294. {
  295. if( dwTickCount >= CT_DLP_Time)
  296. {
  297. CT_DLP_Time = dwTickCount + CT_PARAM_DLP_TIME + 40;
  298. CT_DaLaPian_VAVLE = ~CT_DaLaPian_VAVLE;
  299. }
  300. }
  301. else
  302. CT_DaLaPian_VAVLE = 0;
  303. #if 1
  304. // if(bRunning)
  305. // {
  306. // if(CT_PARAM_ZDP_MODE)
  307. // {
  308. if(CT_ZhenDongPian_OUT == 0)
  309. {
  310. if(!CT_ZDP_IN)
  311. {
  312. CT_ZhenDongPian_OUT = 1;
  313. CT_ZDP_Delay = dwTickCount + CT_PARAM_ZDP_STOP_TIME+ 50;
  314. }
  315. else
  316. {
  317. CT_ZDP_Delay = dwTickCount + CT_PARAM_ZDP_START_TIME;
  318. }
  319. }
  320. else
  321. {
  322. if(CT_ZDP_IN)
  323. {
  324. if((dwTickCount >= CT_ZDP_Delay))
  325. {
  326. CT_ZhenDongPian_OUT = 0;
  327. }
  328. }
  329. else
  330. CT_ZDP_Delay = dwTickCount + CT_PARAM_ZDP_STOP_TIME+ 50;
  331. }
  332. // }
  333. // else
  334. // {
  335. // if(CT_ZDP_IN_DW)CT_ZenDongPian_OUT = 0;
  336. // if(CT_ZDP_IN_UP)CT_ZenDongPian_OUT = 1;
  337. // }
  338. // }
  339. #if 0
  340. else
  341. {
  342. if(!CT_ZDP_IN && (CT_ZhenDongPian_OUT == 0))
  343. {
  344. CT_ZhenDongPian_OUT = 1;
  345. CT_ZDP_Delay = dwTickCount + CT_PARAM_ZDP_TIME + 20;
  346. }
  347. if((dwTickCount >= CT_ZDP_Delay) && CT_ZhenDongPian_OUT)
  348. {
  349. CT_ZhenDongPian_OUT = 0;
  350. }
  351. }
  352. #endif
  353. #endif
  354. }
  355. //送料
  356. void XYChuanTou_SongLiaoAction(void)
  357. {
  358. #if 1
  359. switch(CT_SL_Step)
  360. {
  361. case 1:
  362. if(cSongLiaoOk)
  363. {
  364. CT_SL_Step = 0;
  365. }
  366. else
  367. {
  368. // if(CT_PARAM_SL_MODE == 0)//横送模式
  369. // {
  370. CT_SL_Step = 2;
  371. CT_SL_Delay = dwTickCount + VAVLE_ALARM_TIME;
  372. // }
  373. // else //直送料
  374. // {
  375. // ;
  376. // }
  377. }
  378. break;
  379. case 2:
  380. {
  381. //横送料必须保持在原位
  382. if(CT_HSL_ORIGIN_IN && !CT_HSL_LIMIT_IN && !CT_HangSongLiao_VAVLE)
  383. {
  384. CT_SongLiao_VAVLE = 1;
  385. CT_SL_Delay = dwTickCount + VAVLE_ALARM_TIME;
  386. CT_SL_Step = 3;
  387. }
  388. else if(dwTickCount >= CT_SL_Delay)
  389. {
  390. if(!CT_HSL_ORIGIN_IN)CT_SetAlarmCode(CT_HSL_ORIGIN_ALARM);
  391. else if(CT_HSL_LIMIT_IN)CT_SetAlarmCode(CT_HSL_LIMIT_ALARM);
  392. else if(!CT_HangSongLiao_VAVLE)CT_SetAlarmCode(CT_HangSongLiao_Out_ALARM);
  393. }
  394. }
  395. break;
  396. case 3:
  397. {//送料离开原位
  398. if(!CT_SL_ORIGIN_IN && CT_SL_LIMIT_IN)
  399. {
  400. CT_SL_Step = 4;
  401. CT_SL_Delay = dwTickCount + CT_PARAM_SL_DELAY_BACK;
  402. }
  403. else if(dwTickCount >= CT_SL_Delay)
  404. {
  405. CT_SetAlarmCode(CT_SL_ORIGIN_ALARM);
  406. }
  407. }break;
  408. case 4:
  409. {//送料时间到延时返回
  410. if(dwTickCount >= CT_SL_Delay)
  411. {
  412. CT_SongLiao_VAVLE = 0;
  413. CT_SL_Delay = dwTickCount + VAVLE_ALARM_TIME;
  414. CT_SL_Step = 5;
  415. }
  416. }break;
  417. case 5:
  418. {
  419. if(CT_SL_ORIGIN_IN)
  420. {
  421. cSongLiaoOk = 1;
  422. CT_SL_Step = 0;
  423. }
  424. else if(dwTickCount >= CT_SL_Delay)
  425. {
  426. CT_SetAlarmCode(CT_SL_ORIGIN_ALARM);
  427. }
  428. }
  429. break;
  430. }
  431. #endif
  432. }
  433. //横送料
  434. void XYChuanTou_HengSongLiao_Action(void)
  435. {
  436. #if 1
  437. switch(CT_HSL_Step)
  438. {
  439. case 1:
  440. {//送料,下模,马勾在原位,电磁阀不能有输出
  441. if(CT_SL_ORIGIN_IN && CT_XM_ORIGIN_IN && !CT_JieLiao_VAVLE && !CT_XiaMo_VAVLE)
  442. {
  443. CT_HSL_Step = 2;
  444. CT_MaGou_VAVLE = 0; //马勾自动打开
  445. CT_JieLiao_VAVLE = 0; //接料也要关掉
  446. CT_JiaLaTou_VAVLE=0; //夹拉头关掉
  447. }
  448. else if(!bRunning)
  449. {
  450. CT_HSL_Step = 0;
  451. }
  452. }
  453. break;
  454. case 2:
  455. if(CT_SL_Step == 0)
  456. {
  457. CT_HangSongLiao_VAVLE = 1;
  458. CT_HSL_Delay = dwTickCount + VAVLE_ALARM_TIME;
  459. CT_HSL_Step = 3;
  460. }
  461. break;
  462. case 3:
  463. {
  464. if(CT_HSL_LIMIT_IN)
  465. {
  466. //横送到位延接料,等待拉片稳定
  467. CT_HSL_Delay = dwTickCount + CT_PARAM_JIELIAO_DELAY;
  468. CT_HSL_Step = 4;
  469. }
  470. else if(dwTickCount >= CT_HSL_Delay) //横送料到位异常
  471. {
  472. CT_SetAlarmCode(CT_HSL_LIMIT_ALARM);
  473. }
  474. }
  475. break;
  476. case 4:
  477. if(dwTickCount >= CT_HSL_Delay)
  478. {
  479. CT_HSL_Step = 5;
  480. CT_JieLiao_VAVLE = 1; //接料输出上升
  481. CT_HSL_Delay = dwTickCount + VAVLE_ALARM_TIME;
  482. }
  483. break;
  484. case 5:
  485. {
  486. if(!CT_XM_ORIGIN_IN)//下模离开后,延时输出马勾
  487. {
  488. cSongLiaoOk = 0;
  489. CT_HSL_Delay = dwTickCount + 20;
  490. CT_HSL_Step = 101;
  491. }
  492. else if(dwTickCount >= CT_HSL_Delay) //下模没法离开,电磁阀没有输出
  493. {
  494. CT_HSL_Step = 0;
  495. CT_SetAlarmCode(CT_XM_ORIGIN_ALARM);
  496. }
  497. }
  498. break;
  499. case 101:
  500. if (dwTickCount >= CT_HSL_Delay)
  501. {
  502. CT_HSL_Step = 6;
  503. CT_JiaLaTou_VAVLE=1; // 夹拉头输出
  504. CT_HSL_Delay = dwTickCount + CT_PARAM_GJ_TIME; //延时码勾输出
  505. }
  506. break;
  507. case 6:
  508. if(dwTickCount >= CT_HSL_Delay)
  509. {
  510. CT_MaGou_VAVLE = 1;
  511. CT_HSL_Delay = dwTickCount + CT_PARAM_HSL_BACK_DELAY;
  512. CT_HSL_Step = 7;
  513. }
  514. break;
  515. case 7:
  516. if(dwTickCount >= CT_HSL_Delay) //码勾输出后横送料退
  517. {
  518. CT_HangSongLiao_VAVLE = 0;
  519. CT_HSL_Delay = dwTickCount + VAVLE_ALARM_TIME;
  520. CT_HSL_Step = 8;
  521. CT_SL_Step = 1;
  522. }
  523. break;
  524. case 8://横送料退回
  525. if(CT_HSL_ORIGIN_IN && !CT_HSL_LIMIT_IN)
  526. {
  527. CT_HSL_Step = 0;
  528. }
  529. else if(dwTickCount >= CT_HSL_Delay)
  530. {
  531. CT_SetAlarmCode(CT_HSL_ORIGIN_ALARM);
  532. }
  533. break;
  534. case 9:
  535. break;
  536. }
  537. #endif
  538. }
  539. //装料
  540. void XYChuanTou_ZhuangLiaoStep(void)
  541. {
  542. #if 1
  543. switch(CT_ZL_Step)
  544. {
  545. case 1:
  546. {
  547. if(cZhuangLiaoOk || (CT_MaGou_VAVLE && !CT_MG_IN))
  548. {
  549. CT_ZL_Step = 0;
  550. cZhuangLiaoOk = 1;
  551. }
  552. else
  553. {
  554. CT_ZL_Delay = dwTickCount + VAVLE_ALARM_TIME;
  555. CT_ZL_Step = 2;
  556. cZLCnt = 0;
  557. CT_ZL_Delay = dwTickCount + 180;
  558. cSongLiaoOk = 1;
  559. CT_MaGou_VAVLE = 1;
  560. }
  561. }
  562. break;
  563. case 2:
  564. if((dwTickCount >= CT_ZL_Delay) || CT_MG_IN)
  565. {
  566. // if(CT_SL_Step == 0)
  567. // CT_SL_Step = 1;
  568. CT_ZL_Step = 3;
  569. if(CT_MaGou_VAVLE && !CT_MG_IN)
  570. {
  571. CT_ZL_Step = 0;
  572. cZhuangLiaoOk = 1;
  573. }
  574. }
  575. break;
  576. case 3:
  577. {
  578. if(CT_SL_Step == 0)
  579. {
  580. CT_ZL_Step = 4;
  581. CT_HSL_Step = 1;
  582. }
  583. }
  584. break;
  585. case 4:
  586. {
  587. if(CT_HSL_Step == 0)
  588. {
  589. CT_ZL_Step = 0;
  590. cZhuangLiaoOk = 1;
  591. if(CT_MG_IN && CT_MaGou_VAVLE)
  592. {
  593. cZhuangLiaoOk = 0;
  594. CT_MaGou_VAVLE = 0;
  595. CT_JieLiao_VAVLE = 0;
  596. CT_ZL_Delay = dwTickCount + 600;
  597. cZLCnt++;
  598. if(cZLCnt>= 3)
  599. {
  600. CT_ZL_Delay = dwTickCount + 0;
  601. CT_ZL_Step = 0;
  602. CT_SetAlarmCode(CT_ZhuangLiao_ALARM);
  603. }
  604. else
  605. CT_ZL_Step = 2;
  606. }
  607. }
  608. }
  609. break;
  610. default:break;
  611. }
  612. #endif
  613. }
  614. //合模动作
  615. void XYChuanTou_HeMo(void)
  616. {
  617. switch(CT_HeMoStep)
  618. {
  619. case 1:
  620. if(CT_HSL_ORIGIN_IN && !CT_HangSongLiao_VAVLE && !CT_HSL_LIMIT_IN && (dwTickCount >= CT_HeMoDelay))
  621. {
  622. CT_HeMoStep = 2;
  623. if(CT_MaGou_VAVLE)
  624. {
  625. if(CT_MG_IN)
  626. {
  627. cZhuangLiaoOk = 0;
  628. CT_MaGou_VAVLE = 0;
  629. }
  630. }
  631. else
  632. {
  633. CT_MaGou_VAVLE = 1;
  634. }
  635. CT_ZL_Step = 1;
  636. CT_HuChi_VAVLE = 1;
  637. if(!bRunning || (dwZipCnt <= 2))
  638. CT_HeMoDelay = dwTickCount + 190; //给码勾检测是否有拉头
  639. else
  640. CT_HeMoDelay = dwTickCount +CT_PARAM_FD_DELAY; //延时分带
  641. // if((CT_PARAM_HouMa_MODE != HouMa_MODE_YOUHOUMA)) //有后码时不能有输出
  642. if((CT_PARAM_HouMa_MODE == HouMa_MODE_DANKUAI) ||
  643. (CT_PARAM_HouMa_MODE == HouMa_MODE_SHUANGBI) )
  644. {
  645. CT_HeLian_VAVLE = 1;
  646. if(bRunning)
  647. CT_HeMoDelay = dwTickCount; //
  648. }
  649. CT_ZL_Step = 1;
  650. }
  651. break;
  652. case 2:
  653. if(dwTickCount >= CT_HeMoDelay)
  654. {
  655. CT_HeMoStep = 3;
  656. CT_FenDai_VAVLE = 1; //
  657. CT_HeMoDelay = dwTickCount +VAVLE_ALARM_TIME; //延时分带
  658. if(CT_MG_IN)
  659. {
  660. cZhuangLiaoOk = 0;
  661. CT_MaGou_VAVLE = 0;
  662. if(CT_ZL_Step == 0)
  663. CT_ZL_Step = 1;
  664. }
  665. }
  666. break;
  667. case 3:
  668. if(CT_FD_IN)
  669. {
  670. //装已经完成或在手动情况下
  671. if(cZhuangLiaoOk && !CT_MG_IN)
  672. {
  673. if(CT_HSL_ORIGIN_IN && !CT_HangSongLiao_VAVLE && !CT_HSL_LIMIT_IN)
  674. {
  675. CT_HeMoStep = 4;
  676. CT_XiaMo_VAVLE = 1;
  677. CT_HeMoDelay = dwTickCount + 50; //延时退接料
  678. }
  679. }
  680. else if(CT_MaGou_VAVLE && CT_MG_IN)
  681. {
  682. if(CT_ZL_Step == 0)
  683. {
  684. CT_MaGou_VAVLE = 0;
  685. CT_ZL_Step = 2;
  686. CT_ZL_Delay = dwTickCount + 0;
  687. }
  688. }
  689. }
  690. else if(dwTickCount >= CT_HeMoDelay)
  691. {
  692. if(bRunning)
  693. {
  694. CT_SetAlarmCode(CT_FD_IN_ALARM);
  695. CT_HeMoStep = 0;
  696. }
  697. }
  698. break;
  699. case 4:
  700. if(dwTickCount >= CT_HeMoDelay)
  701. CT_JieLiao_VAVLE = 0;
  702. //下模离开原点,拉头顶到顶针处,或手动
  703. if(!CT_XM_ORIGIN_IN && CT_DZ_IN)
  704. {
  705. CT_HeMoStep = 5;
  706. CT_JieLiao_VAVLE = 0;
  707. CT_GouZhen_VAVLE = 1;
  708. CT_HeMoDelay = dwTickCount + 30; //退勾针延时拖带
  709. }
  710. break;
  711. case 5:
  712. if(dwTickCount >= CT_HeMoDelay)
  713. {
  714. CT_HeMoStep = 0;
  715. }
  716. break;
  717. }
  718. }
  719. void XYChuanTou_CLT_Step(void)
  720. {
  721. static long xm_buff;
  722. long ch;
  723. #if 1
  724. switch(CT_CLT_Step)
  725. {
  726. case 1:
  727. SetPos(X_AXIS, 0); //开始穿入位为零点
  728. dwRealPos = GetPos(X_AXIS);
  729. CT_CLT_Step = 2;
  730. break;
  731. case 2:
  732. //两段速度移动距离
  733. // 轴 第一段速度 第一段长度 第二段速度 第二段长度 方向
  734. // AxisMoveTwoPos(X_AXIS,QD_PARAM_CUT_BACK_SPEED,QD_PARAM_SJZ_LENGTH,5000,QD_PARAM_BACK_LENGTH,QD_DIR_P);
  735. AxisMovePosAccDec(X_AXIS,CT_PARAM_CR_SPEED,CT_PARAM_CR_LENGTH + 230 - CT_PARAM_STOP_LENGTH ,3000,8,12);
  736. // SetDir(X_AXIS, CT_DIR_P);
  737. CT_HuChi_VAVLE = 0;
  738. CT_CLT_Step = 3;
  739. xm_buff = 0;
  740. cMotorDinWei_OK = 0;
  741. cZhuangLiaoOk = 0;
  742. break;
  743. case 3:
  744. //穿入过程,检测到空位
  745. if(CT_GUO_LIAN_IN_DW)
  746. {
  747. xm_buff = 0;
  748. CancelPmoveState(X_AXIS);
  749. AxisChangeSpeed(X_AXIS,CT_PARAM_LSPEED);
  750. }
  751. //在上升沿
  752. if(CT_GUO_LIAN_IN_UP)
  753. {
  754. xm_buff = dwRealPos;
  755. AxisEgmStop(X_AXIS);
  756. }
  757. //根据后码模式退合链
  758. if(CT_PARAM_HouMa_MODE == HouMa_MODE_DANKUAI)
  759. {
  760. if(dwRealPos >= CT_PARAM_TUIHELIAN_DELAY)
  761. CT_HeLian_VAVLE = 0;
  762. }
  763. //退分带动作//提前8MM退分带 或退长度到
  764. if(((dwRealPos + 80) >= CT_PARAM_CR_LENGTH) || (dwRealPos >= CT_PARAM_TUIFENGDAI_DELAY))
  765. CT_FenDai_VAVLE = 0;
  766. if((dwRealPos + 35) >= CT_PARAM_CR_LENGTH)
  767. {
  768. CT_MaGou_VAVLE = 0;
  769. }
  770. if((dwRealPos) >= CT_PARAM_CR_LENGTH)
  771. {
  772. AxisEgmStop(X_AXIS);
  773. }
  774. //穿入长度到
  775. if(!X_DRV)
  776. {//如果无后码单开模式长度过长时也强制打开 //双闭口要先慢速退
  777. if((CT_PARAM_HouMa_MODE == HouMa_MODE_DANKUAI) ||
  778. ((CT_PARAM_HouMa_MODE == HouMa_MODE_SHUANGBI) && (CT_PARAM_TUIHELIAN_DELAY == 0)))
  779. {
  780. CT_HeLian_VAVLE = 0; //合链关
  781. }
  782. CT_FenDai_VAVLE = 0; //分带关
  783. CT_JiaLaTou_VAVLE=0; //夹拉头关 考虑分带已经提前退, 会有时间差保障
  784. CT_CLT_Delay = dwTickCount + 2;
  785. CT_MaGou_VAVLE = 0; //码勾关
  786. CT_CLT_Step = 4;
  787. }
  788. break;
  789. case 4:
  790. if(dwTickCount >= CT_CLT_Delay)
  791. {
  792. CT_XiaMo_VAVLE = 0; //下模关
  793. cZhuangLiaoOk = 0;
  794. }
  795. if(!CT_DZ_IN)
  796. {
  797. CT_CLT_Delay = dwTickCount + CT_PARAM_XM_BACK_DELAY_START;
  798. CT_CLT_Step = 5;
  799. }
  800. break;
  801. case 5:
  802. //下模退回
  803. if(((dwTickCount >= CT_CLT_Delay) || CT_XM_ORIGIN_IN) && !CT_FD_IN)
  804. {
  805. CT_ZL_Step = 2; //重装料
  806. cZLCnt = 0;
  807. CT_ZL_Delay = dwTickCount + 0;
  808. CT_MaGou_VAVLE = 0; //码勾输出检测拉头是否脱离模具
  809. if(xm_buff) //已经检测到拉链
  810. {
  811. CT_CLT_Step = 8;
  812. CT_MotorStep = 50; //只走定位长度步
  813. }
  814. else //没有检测到拉链
  815. {
  816. if((CT_PARAM_HouMa_MODE == HouMa_MODE_SHUANGBI) && CT_HeLian_VAVLE) //双闭口要先慢速退
  817. {
  818. xm_buff = dwRealPos;
  819. CT_CLT_Step = 6;
  820. ch = 1400;
  821. SetStartSpeed(X_AXIS,ch);
  822. SetDecTime(X_AXIS,10);
  823. if((Zipper_Length > (dwRealPos + 2000)) && (dwZipCnt > 2))
  824. {
  825. AxisContinueMove(X_AXIS,(CT_PARAM_HSPEED + CT_PARAM_HSPEED/3),CT_DIR_N); //主要生成高速表
  826. }
  827. else
  828. AxisContinueMove(X_AXIS,(CT_PARAM_HSPEED),CT_DIR_N);//主要生成高速表
  829. //低速走长度给合链退回争取时间,快转碰拉头,损坏拉链
  830. AxisChangeSpeed(X_AXIS,ch);
  831. //也进入过链检测状态
  832. CT_MotorStep = 3;
  833. CT_MotorDelay = dwTickCount + 0;
  834. }
  835. else
  836. {
  837. CT_CLT_Step = 8;
  838. CT_CLT_Delay = dwTickCount + 0;
  839. }
  840. }
  841. }
  842. break;
  843. case 6:
  844. ch = CT_PARAM_TUIHELIAN_DELAY;
  845. if(ch > 30) //最长限制1.5CM
  846. ch = 28;
  847. // if(dwRealPos >= (xm_buff + ch))
  848. {
  849. CT_HeLian_VAVLE = 0;
  850. CT_CLT_Delay = dwTickCount + 30; //延时时间再加速
  851. CT_CLT_Step = 7;
  852. }
  853. break;
  854. case 7:
  855. if(dwTickCount >= CT_CLT_Delay)
  856. {
  857. if(CT_MotorStep == 3) //如果电机还在检测拉链状态,就到变速程序
  858. CT_MotorStep = 40;
  859. CT_CLT_Step = 8;
  860. }
  861. break;
  862. case 8:
  863. CT_CLT_Step = 0;
  864. if((CT_MotorStep == 0) && (cMotorDinWei_OK == 0))
  865. CT_MotorStep = 1;
  866. break;
  867. }
  868. #endif
  869. }
  870. void XYChuanTou_AutoAction(void)
  871. {
  872. if(bRunning)
  873. {
  874. #if 1
  875. switch(CT_AutoStep)
  876. {
  877. case 1:
  878. if(dwTickCount >= CT_AutoDelay)
  879. {
  880. CT_AutoStep = 2;
  881. if(CT_MotorStep == 0)
  882. {
  883. CT_MotorStep = 1;
  884. }
  885. }
  886. break;
  887. case 2:
  888. if(CT_MotorStep == 0) //电机定位完成
  889. {
  890. if(SingOneFlg001) //当为单一自动时,装料
  891. {
  892. bRunning = 0;
  893. CT_AutoStep = 0;
  894. }
  895. else
  896. {
  897. if(CT_ZL_Step == 0)
  898. {
  899. if(dwZipCnt == 2)
  900. Zipper_Length = dwRealPos;
  901. CT_AutoStep = 3;
  902. CT_HeMoStep = 1;
  903. }
  904. }
  905. }
  906. break;
  907. case 3:
  908. if((CT_MotorStep == 0) && (CT_HeMoStep == 0))
  909. {
  910. CT_CLT_Step = 1;
  911. CT_AutoStep = 4;
  912. }
  913. break;
  914. case 4:
  915. if(CT_CLT_Step >= 3)
  916. {
  917. AddToTal(CT_TOTAL_ADDR);
  918. AddToTal(CT_WORKTOTAL_ADDR);
  919. CalProSP(CT_PROSPEED_ADDR);
  920. CT_AutoStep = 5;
  921. }
  922. break;
  923. case 5:
  924. if(CT_CLT_Step == 0)
  925. {
  926. dwZipCnt++;
  927. dwZipCnt &= 7;
  928. CT_AutoStep = 1;
  929. CT_AutoDelay = dwTickCount + 0;
  930. }
  931. break;
  932. }
  933. #endif
  934. }
  935. }
  936. void XYChuanTou_StepCheckStart(void)
  937. {
  938. // 启动
  939. if((CT_START_IN_UP) || bStart || CT_bSingle)
  940. {
  941. bStart = 0;
  942. SingOneFlg001= 0;
  943. if(CT_bSingle) SingOneFlg001 = 1;
  944. CT_bSingle = 0;
  945. #if 1
  946. if(!bRunning && (CT_AutoStep == 0))
  947. {
  948. if(!CT_HSL_ORIGIN_IN)CT_SetAlarmCode(CT_HSL_ORIGIN_ALARM);
  949. else if(CT_HSL_LIMIT_IN)CT_SetAlarmCode(CT_HSL_LIMIT_ALARM);
  950. else if(!CT_SL_ORIGIN_IN)CT_SetAlarmCode(CT_SL_ORIGIN_ALARM);
  951. {
  952. bRunning = 1;
  953. SetEn(X_AXIS,CT_MOTOR_EN);
  954. CT_AutoStep = 3;
  955. CT_HeMoStep = 1;
  956. // if(!cZhuangLiaoOk)
  957. // CT_ZL_Step = 1;
  958. dwZipCnt = 0;
  959. Zipper_Length = 0;
  960. CT_AutoDelay = dwTickCount + 30;
  961. CT_HeMoDelay = dwTickCount +70;
  962. CT_MaGou_VAVLE = 1;
  963. cZLCnt = 0;
  964. SetAlarmCode(CT_ALARM_ADDR,0);
  965. }
  966. }
  967. #endif
  968. }
  969. #if 1
  970. //停止
  971. if((CT_STOP_IN_UP && (dwTickCount >= CT_StopKey_Time)) || bStop)
  972. {
  973. CT_StopKey_Time = dwTickCount + 60;
  974. if(bRunning)
  975. {
  976. if(!bStop)
  977. {
  978. bRunning = 0;
  979. CT_AutoStep = 0;
  980. CT_MotorStep = 0;
  981. CT_AutoDelay = dwTickCount;
  982. CT_MotorDelay = dwTickCount;
  983. AxisDecStop(X_AXIS);
  984. CT_FenDai_VAVLE = 0;
  985. SingOneFlg001 = 0;
  986. }
  987. else
  988. SingOneFlg001 = 1;
  989. }
  990. else
  991. {
  992. bRunning = 0;
  993. CT_AutoStep = 0;
  994. CT_MotorStep = 0;
  995. CT_HeMoStep = 0;
  996. CT_SL_Step = 0;
  997. CT_HSL_Step = 0;
  998. CT_ZL_Step = 0;
  999. CT_CLT_Step = 0;
  1000. CT_ZD_Step = 0;
  1001. CT_AutoDelay = dwTickCount;
  1002. CT_MotorDelay = dwTickCount;
  1003. CT_HeMoDelay = dwTickCount;
  1004. CT_SL_Delay = dwTickCount;
  1005. CT_HSL_Delay = dwTickCount;
  1006. CT_ZL_Delay = dwTickCount;
  1007. CT_XM_BACK_Delay = dwTickCount;
  1008. CT_CLT_Delay = dwTickCount;
  1009. CT_ZDP_Delay = dwTickCount;
  1010. SingOneFlg001 = 0;
  1011. AxisDecStop(X_AXIS);
  1012. SetEn(X_AXIS,CT_MOTOR_DISEN);
  1013. cSongLiaoOk = 0;
  1014. cZhuangLiaoOk = 0;
  1015. if(!CT_FenDai_VAVLE && !CT_FD_IN && !CT_XM_ORIGIN_IN)
  1016. {
  1017. CT_XiaMo_VAVLE = 0; //下模
  1018. CT_JiaLaTou_VAVLE=0; //夹拉头
  1019. }
  1020. CT_SongLiao_VAVLE = 0; //送料
  1021. CT_GouZhen_VAVLE = 0; //勾针
  1022. CT_DaLaPian_VAVLE = 0; //顶拉片(打拉片)
  1023. CT_FenDai_VAVLE = 0; //分带
  1024. CT_HeLian_VAVLE = 0; //合链(穿模后面)
  1025. CT_ZhenDongPian_OUT = 0; //振动盘
  1026. CT_HuChi_VAVLE = 0; //护齿
  1027. CT_HangSongLiao_VAVLE = 0; //横送料
  1028. if(!CT_MaGou_VAVLE || (CT_HSL_ORIGIN_IN && !CT_HangSongLiao_VAVLE))
  1029. CT_JieLiao_VAVLE = 0; //接料下模
  1030. CT_MaGou_VAVLE = 0; //马勾
  1031. SetAlarmCode(CT_ALARM_ADDR,0);
  1032. }
  1033. bStop = 0;
  1034. }
  1035. #endif
  1036. #if 1
  1037. if(bAlarmStop)
  1038. {
  1039. bAlarmStop = 0;
  1040. bRunning = 0;
  1041. CT_AutoStep = 0;
  1042. // CT_MotorStep = 0;
  1043. CT_HeMoStep = 0;
  1044. CT_ZL_Step = 0;
  1045. CT_HSL_Step = 0;
  1046. CT_AutoDelay = dwTickCount;
  1047. CT_MotorDelay = dwTickCount;
  1048. SingOneFlg001 = 0;
  1049. AxisEgmStop(X_AXIS);
  1050. }
  1051. #endif
  1052. #if 1
  1053. //停止情况下无效
  1054. if(CT_ERROR_IN && bRunning)
  1055. {
  1056. bRunning = 0;
  1057. CT_AutoStep = 0;
  1058. CT_MotorStep = 0;
  1059. CT_HeMoStep = 0;
  1060. // CT_SL_Step = 0;
  1061. // CT_HSL_Step = 0;
  1062. CT_ZL_Step = 0;
  1063. CT_CLT_Step = 0;
  1064. CT_ZD_Step = 0;
  1065. CT_AutoDelay = dwTickCount;
  1066. CT_MotorDelay = dwTickCount;
  1067. CT_HeMoDelay = dwTickCount;
  1068. // CT_SL_Delay = dwTickCount;
  1069. // CT_HSL_Delay = dwTickCount;
  1070. CT_ZL_Delay = dwTickCount;
  1071. CT_XM_BACK_Delay = dwTickCount;
  1072. CT_CLT_Delay = dwTickCount;
  1073. CT_ZDP_Delay = dwTickCount;
  1074. SingOneFlg001 = 0;
  1075. AxisDecStop(X_AXIS);
  1076. SetEn(X_AXIS,CT_MOTOR_DISEN);
  1077. cSongLiaoOk = 0;
  1078. cZhuangLiaoOk = 0;
  1079. // CT_XiaMo_VAVLE = 0; //下模
  1080. // CT_SongLiao_VAVLE = 0; //送料
  1081. // CT_GouZhen_VAVLE = 0; //勾针
  1082. // CT_DaLaPian_VAVLE = 0; //顶拉片(打拉片)
  1083. // CT_FenDai_VAVLE = 0; //分带
  1084. // CT_HeLian_VAVLE = 0; //合链(穿模后面)
  1085. CT_ZhenDongPian_OUT = 0; //振动盘
  1086. // CT_HuChi_VAVLE = 0; //护齿
  1087. // CT_HangSongLiao_VAVLE = 0; //横送料
  1088. //if(!CT_MaGou_VAVLE || (CT_HSL_ORIGIN_IN && !CT_HangSongLiao_VAVLE))
  1089. // CT_JieLiao_VAVLE = 0; //接料下模
  1090. // CT_JiaLaTou_VAVLE=0; //夹拉头
  1091. // CT_MaGou_VAVLE = 0; //马勾
  1092. CT_SetAlarmCode(CT_ERROR_out_ALARM);
  1093. }
  1094. #endif
  1095. }
  1096. //电机动作
  1097. //第1~10前拖带定位
  1098. //
  1099. void XYChuanTou_Motor(void) //
  1100. {
  1101. static long back_buff,save_buff,back_buff1;
  1102. unsigned short ch;
  1103. switch(CT_MotorStep)
  1104. {
  1105. case 0:
  1106. break;
  1107. //拖带定位动作
  1108. case 1:
  1109. if(cMotorDinWei_OK && bRunning)
  1110. {
  1111. CT_MotorStep = 0;
  1112. break;
  1113. }
  1114. else
  1115. {
  1116. cMotorDinWei_OK = 0;
  1117. if(!GetEn(X_AXIS) || !CT_GouZhen_VAVLE)
  1118. {
  1119. SetEn(X_AXIS,CT_MOTOR_EN);
  1120. // CT_SZ_OUT = CT_MOTOR_Y_EN;
  1121. CT_MotorDelay = dwTickCount + 150;
  1122. }
  1123. else
  1124. CT_MotorDelay = dwTickCount + 4;
  1125. SetDir(X_AXIS, CT_DIR_N);
  1126. CT_GouZhen_VAVLE = 1;
  1127. CT_MotorStep = 2;
  1128. }
  1129. break;
  1130. case 2:
  1131. if(dwTickCount >= CT_MotorDelay)
  1132. {
  1133. save_buff = dwRealPos;
  1134. ch = CT_PARAM_HSPEED;
  1135. CT_HuChi_VAVLE = 0;
  1136. if((Zipper_Length > dwRealPos + 2000) && (dwZipCnt > 2))
  1137. {
  1138. ch += CT_PARAM_HSPEED/3;
  1139. CT_MotorStep = 4;
  1140. }
  1141. else
  1142. CT_MotorStep = 3;
  1143. if(!X_DRV)
  1144. {
  1145. SetAccTime(X_AXIS,15);
  1146. SetDecTime(X_AXIS,6);
  1147. AxisContinueMove(X_AXIS,ch,CT_DIR_N);
  1148. }
  1149. }
  1150. break;
  1151. case 3: //不用变速
  1152. if(!CT_GUO_LIAN_IN)
  1153. {
  1154. back_buff = dwRealPos;
  1155. user_datas[127] = dwRealPos;//ch;
  1156. AxisChangeSpeed(X_AXIS,CT_PARAM_LSPEED);
  1157. CT_MotorStep = 5;
  1158. CT_MotorDelay = dwTickCount + VAVLE_ALARM_TIME;
  1159. CT_HuChi_VAVLE = 1;
  1160. }
  1161. else if(((dwRealPos - save_buff) >= CT_PARAM_MAX_LENGTH) && bRunning && CT_PARAM_MAX_LENGTH) //拖带拉链最大长度
  1162. {
  1163. CT_SetAlarmCode(CT_ZIPPER_MAXLENGHT_ALARM); //拉链长度保护
  1164. CT_MotorStep = 0;
  1165. }
  1166. break;
  1167. case 4://到空位
  1168. if(((dwRealPos + 1700) >= Zipper_Length) && Zipper_Length && (dwZipCnt > 2) && (CT_CLT_Step== 0))
  1169. {
  1170. AxisChangeSpeed(X_AXIS,CT_PARAM_HSPEED);
  1171. }
  1172. if(!CT_GUO_LIAN_IN)
  1173. {
  1174. CT_HuChi_VAVLE = 1;
  1175. back_buff = dwRealPos;
  1176. user_datas[127] = dwRealPos;//ch;
  1177. AxisChangeSpeed(X_AXIS,CT_PARAM_LSPEED);
  1178. CT_MotorStep = 5;
  1179. CT_MotorDelay = dwTickCount + VAVLE_ALARM_TIME;
  1180. }
  1181. else if(((dwRealPos - save_buff) >= CT_PARAM_MAX_LENGTH) && bRunning && CT_PARAM_MAX_LENGTH) //拖带拉链最大长度
  1182. {
  1183. CT_SetAlarmCode(CT_ZIPPER_MAXLENGHT_ALARM); //拉链长度保护
  1184. CT_MotorStep = 0;
  1185. }
  1186. break;
  1187. case 5:
  1188. //延迟上勾针
  1189. if((dwRealPos - back_buff) >= CT_PARAM_GZ_LENGTH)
  1190. {
  1191. CT_HuChi_VAVLE = 1;
  1192. CT_GouZhen_VAVLE = 0;
  1193. if((CT_PARAM_HouMa_MODE == HouMa_MODE_DANKUAI) ||
  1194. (CT_PARAM_HouMa_MODE == HouMa_MODE_SHUANGBI) )
  1195. {
  1196. CT_HeLian_VAVLE = 1; //合链关
  1197. }
  1198. }
  1199. if(CT_GUO_LIAN_IN_UP)
  1200. {
  1201. CT_HuChi_VAVLE = 1;
  1202. back_buff1 = dwRealPos;
  1203. AxisChangeSpeed(X_AXIS,CT_PARAM_LSPEED/2);
  1204. CT_MotorStep = 6;
  1205. }
  1206. else if(dwTickCount >= CT_MotorDelay)//(dwRealPos - back_buff) >= 4500) //空位走25公分停止
  1207. {
  1208. CT_SetAlarmCode(CT_NO_ZIPPER_ALARM);
  1209. CT_MotorStep = 0;
  1210. }
  1211. break;
  1212. case 6:
  1213. //延迟上勾针
  1214. if((dwRealPos - back_buff) >= CT_PARAM_GZ_LENGTH)
  1215. {
  1216. CT_HuChi_VAVLE = 1;
  1217. CT_GouZhen_VAVLE = 0;
  1218. if((CT_PARAM_HouMa_MODE == HouMa_MODE_DANKUAI) ||
  1219. (CT_PARAM_HouMa_MODE == HouMa_MODE_SHUANGBI) )
  1220. {
  1221. CT_HeLian_VAVLE = 1; //合链关
  1222. }
  1223. }
  1224. //定位长度
  1225. if((dwRealPos - back_buff1) >= CT_PARAM_STOP_LENGTH)
  1226. {
  1227. CT_GouZhen_VAVLE = 0;
  1228. CT_HuChi_VAVLE = 1;
  1229. AxisEgmStop(X_AXIS);
  1230. CT_MotorStep = 7;
  1231. if((CT_PARAM_HouMa_MODE == HouMa_MODE_DANKUAI) ||
  1232. (CT_PARAM_HouMa_MODE == HouMa_MODE_SHUANGBI) )
  1233. {
  1234. CT_HeLian_VAVLE = 1; //合链关
  1235. }
  1236. }
  1237. break;
  1238. case 7:
  1239. if(!X_DRV)
  1240. {
  1241. CT_MotorStep = 0;
  1242. cMotorDinWei_OK = 1;
  1243. }
  1244. break;
  1245. case 40:
  1246. save_buff = 0;
  1247. ch = CT_PARAM_HSPEED;
  1248. if((Zipper_Length > (dwRealPos + 1800)) && (dwZipCnt > 2))
  1249. {
  1250. ch += CT_PARAM_HSPEED/3;
  1251. CT_MotorStep = 4;
  1252. }
  1253. else
  1254. CT_MotorStep = 3;
  1255. user_datas[125] = ch;
  1256. user_datas[126] = Zipper_Length;
  1257. user_datas[128] = dwRealPos;
  1258. AxisChangeSpeed(X_AXIS,ch);
  1259. break;
  1260. case 50: //此步为穿链时已经检测到拉链上升沿
  1261. back_buff = dwRealPos;
  1262. SetStartSpeed(X_AXIS,CT_PARAM_LSPEED/2);
  1263. SetDecTime(X_AXIS,10);
  1264. AxisContinueMove(X_AXIS,CT_PARAM_LSPEED/2,CT_DIR_N);
  1265. CT_MotorStep = 6;
  1266. break;
  1267. /*
  1268. //穿入动作
  1269. case 100: //穿入电机慢慢复位动作
  1270. CT_MotorStep = 101;
  1271. break;
  1272. case 101:
  1273. if(CT_CR_ORIGIN_IN)
  1274. {
  1275. AxisDecStop(Y_AXIS);
  1276. CT_MotorStep = 102;
  1277. }
  1278. else if(dwTickCount >= CT_MotorDelay)
  1279. CT_SetAlarmCode(CT_CR_ORIGIN_ALARM);
  1280. break;
  1281. case 102:
  1282. if(!Y_DRV)
  1283. {
  1284. CT_MotorStep = 0;
  1285. }
  1286. break;
  1287. */
  1288. }
  1289. }
  1290. #endif