ZhenYuChuantou_HeLian.c 67 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197
  1. #include "global.h"
  2. #if ZHEN_YU_MACHINE == 1
  3. static unsigned long cycletime,zlttime,cuanliantime,tuodaitime;
  4. static unsigned char comflag=0,JLTFLG,XMFLG,ONCERUNFLG1;
  5. void ExtiAcitionX02(void)//获取X,Y轴的实际位置
  6. {
  7. }
  8. //故障报警
  9. void CTHL_SetAlarmCode(unsigned short alarm_code,unsigned short cStopFlag)
  10. {
  11. SetAlarmCode(CTHL_ALARM_ADDR,alarm_code);
  12. if(!CTHL_wltzi && !bCxcAuto )
  13. bAlarmStop = 1;
  14. else if(bCxcAuto)//伺服告警松轴
  15. {
  16. AxisEgmStop(X_AXIS);
  17. AxisEgmStop(Y_AXIS);
  18. //SetEn(X_AXIS, MOTOR_DISEN);
  19. //SetEn(Y_AXIS, MOTOR_DISEN);
  20. }
  21. }
  22. //运行状态
  23. void CTHL_Running_state(void)
  24. {
  25. user_datas[210] = CTHL_ZhuangLiaoStep;
  26. user_datas[211] = CTHL_FZ_MotorStep;
  27. user_datas[212] = CTHL_TD_MotorStep;
  28. user_datas[213] = CTHL_AutoStep;
  29. user_datas[214] = CTHL_LianLengthGLCheckFirst; //第一条过链感应测量的长度//Y轴测量的长度反转
  30. user_datas[215] = CTHL_LianLengthGLCheck;//过链实时
  31. user_datas[216] = CTHL_LianLengthCheckFirst;//测量第一条长度
  32. user_datas[217] = CTHL_LianLengthCheck;//实时测量的长度
  33. user_datas[218] = CTHL_LianLengthXFZCheckFirst;//X轴反转第一次
  34. user_datas[219] = CTHL_LianLengthXFZCheck;//X轴实时
  35. user_datas[220] = CTHL_LianLengthYFZCheckFirst;//Y轴第一次
  36. user_datas[221] = CTHL_LianLengthYFZCheck; //Y轴实时
  37. memcpy(&user_datas[222],&dwXRealPos,4);
  38. memcpy(&user_datas[224],&dwYRealPos_com,4);
  39. memcpy(&user_datas[226],&CTHL_FKGY_Length,4);//方块感应位置
  40. memcpy(&user_datas[228],&CTHL_FKGY_STOP_Length,4);//方块停长度
  41. memcpy(&user_datas[230],&CTHL_CXCD,4);//穿插销长度。CTHL_GLGY_FKDW_Length
  42. memcpy(&user_datas[232],&CTHL_GLGY_FKDW_Length,4);
  43. user_datas[234] = master1.send_count-master1.receive_count;//GetAlarm(X_AXIS);
  44. user_datas[235] = GetAlarm(Y_AXIS);
  45. user_datas[236] = servo_y.alarmcode;
  46. user_datas[237] = servo_y.IO_TO_COM;
  47. }
  48. void CTHL_AlarmProtect(void)
  49. {
  50. }
  51. //自动动作
  52. void CTHL_AutoStepAction(void)
  53. {
  54. int freq;
  55. //测试用
  56. if(dwTickCount >= CTHL_TestDelay)
  57. {
  58. CTHL_TestDelay = dwTickCount + 200;
  59. CTHL_TestLED = !CTHL_TestLED;
  60. CTHL_Test = 0;
  61. }
  62. if(bRunning)
  63. {
  64. switch(CTHL_AutoStep)
  65. {
  66. case 1:
  67. if(dwTickCount >= CTHL_AutoDelay)
  68. {
  69. cycletime=dwTickCount;
  70. bCxcAuto=0;
  71. CTHL_GF_Change = 0;//公分节转换
  72. CTHL_AutoStep++;
  73. SetEn(X_AXIS, MOTOR_EN);
  74. //设置反转电机的扭矩和速度的设置
  75. if(CTHL_cZipCnt<1)
  76. {
  77. freq=CTHL_PARAM_FZ_Speed+20000;
  78. set_servo_postotarr_limit(Y_AXIS,400,freq,freq,SERVO_TARR_CW);
  79. }
  80. else
  81. {
  82. freq=CTHL_PARAM_FZFirst_SPEED+SERVO_PARAM_SPEED_DIFFER;
  83. set_servo_postotarr_limit(Y_AXIS,SERVO_PARAM_TRARR_LIMITMAX,freq,freq,SERVO_TARR_CW);
  84. }
  85. Set_Ctrlmode_trans(Y_AXIS,POS_MODE);
  86. }
  87. break;
  88. case 2://有拉头,方块并定位
  89. if(CTHL_ZhuangLiaoStep == 0&&bZhuangLiaoOkFlg&&CTHL_TD_MotorStep==0)//装拉头完成,方块定位
  90. {
  91. if(CTHL_FKDW_IN)//无方块定位信号返回,//人工处理信号,不停机
  92. {
  93. CTHL_wltzi=1;//不停机
  94. CTHL_SetAlarmCode(CTHL_FXDW_ALARM,bRunning);// E17方块钩针定位信号异常
  95. }
  96. if(CTHL_LTou_Check)//无拉头信号返回,//人工处理信号,不停机
  97. {
  98. CTHL_wltzi=1;//不停机
  99. CTHL_SetAlarmCode(CTHL_XCDW_Limit_ALARM,bRunning);// E11拉头缺料感应异常
  100. }
  101. if(!CTHL_bDANBU_MODE || CTHL_START_IN_UP)//自动与单步,单步用启动按钮进行
  102. {
  103. if(!CTHL_CTXM_Limit_IN){//下模未到位,下模动作
  104. CTHL_CTXM_VAVLE=1;
  105. CTHL_XCJC_VAVLE=1;//插销检测随着下模上升
  106. CTHL_AutoDelay = dwTickCount + CTHL_VAVLE_ERROR_TIME;
  107. CTHL_AutoStep++;
  108. }
  109. else{//下模到位
  110. CTHL_TXM_VAVLE = 1; //侧推
  111. CTHL_FZYL_VAVLE=1;//压轮
  112. CTHL_AutoStep=4;
  113. CTHL_AutoDelay = dwTickCount + CTHL_VAVLE_ERROR_TIME;
  114. }
  115. }
  116. }
  117. break;
  118. case 3://下模到位
  119. if(CTHL_CTXM_VAVLE&&CTHL_CTXM_Limit_IN) {
  120. CTHL_TXM_VAVLE = 1; //侧推
  121. CTHL_FZYL_VAVLE=1;//压轮
  122. CTHL_AutoStep++;
  123. CTHL_AutoDelay = dwTickCount + CTHL_VAVLE_ERROR_TIME;
  124. }
  125. else if((dwTickCount >= CTHL_AutoDelay) && !CTHL_bDANBU_MODE){//人工处理信号,不停机
  126. CTHL_wltzi=1;//不停机
  127. CTHL_SetAlarmCode(CTHL_CTXM_Limit_ALARM,bRunning); //E08 下模到位异常
  128. }
  129. break;
  130. case 4://压轮到位,侧推布带到位,方块钩针升起
  131. if(CTHL_TXM_VAVLE&&CTHL_TXM_Limit_IN)//侧推布带到位
  132. {
  133. if(CTHL_FZYL_VAVLE&&CTHL_FZYL_Limit_IN)//压轮到位
  134. {
  135. CTHL_AutoDelay = dwTickCount + CTHL_PARAM_TXM_DELAY;//侧推延时时间
  136. CTHL_AutoStep++;
  137. }
  138. else if((dwTickCount >= CTHL_AutoDelay) && !CTHL_bDANBU_MODE)
  139. {
  140. CTHL_wltzi=1;//不停机
  141. CTHL_SetAlarmCode(CTHL_FZYL_Limit_ALARM,bRunning);//E22 右压轮到位异常
  142. }
  143. }
  144. else if((dwTickCount >= CTHL_AutoDelay) && !CTHL_bDANBU_MODE)
  145. {
  146. CTHL_wltzi=1;//不停机
  147. CTHL_SetAlarmCode(CTHL_TXM_Limit_ALARM,bRunning);//E13侧推布带到位异常
  148. }
  149. break;
  150. case 5://侧推到位后延时一小段时间后,退方块定位
  151. if(dwTickCount >= CTHL_AutoDelay)
  152. {
  153. if(!CTHL_bDANBU_MODE || CTHL_START_IN_UP){
  154. CTHL_FKDW_VAVLE = 0; //方块钩针
  155. if(servo_y.IO_TO_COM==0);//SetEn(X_AXIS, MOTOR_DISEN);//X轴松开使能
  156. else
  157. {
  158. SetEn(Y_AXIS, MOTOR_DISEN);//设置扭矩做准备
  159. if(get_tarr_set(Y_AXIS)!=2)//是否配置转矩限制失败
  160. {
  161. SetEn(Y_AXIS, MOTOR_DISEN);//设置扭矩做准备
  162. CTHL_wltzi=0;//停机
  163. CTHL_SetAlarmCode(CTHL_SERVO_CONFIG_ALARM,bRunning);//伺服转矩配置失败
  164. }
  165. }
  166. CTHL_AutoStep++;
  167. CTHL_AutoDelay = dwTickCount + CTHL_PARAM_FKDW_OUT_DELAY;//方块钩针回退延时
  168. }
  169. }
  170. break;
  171. case 6://反转穿入
  172. if(dwTickCount >= CTHL_AutoDelay)
  173. {
  174. if(!CTHL_bDANBU_MODE || CTHL_START_IN_UP)
  175. {
  176. //定位完成后,位置清零。
  177. SetPos(X_AXIS, 0);
  178. SetPos(Y_AXIS, 0);
  179. CTHL_FZ_MotorStep=1; //反转穿入,
  180. CTHL_FZ_MotorDelay = dwTickCount +1;//延时穿入拖带
  181. CTHL_AutoStep = 9;
  182. }
  183. }
  184. break;
  185. case 9://穿方块完成
  186. if(CTHL_FZ_MotorStep==0)//等待穿入完成
  187. {
  188. if(!CTHL_bDANBU_MODE || CTHL_START_IN_UP)
  189. {
  190. cBAOjin=0;
  191. CTHL_JCXBD_VAVLE=1;//插销夹布带,
  192. CTHL_AutoStep++;
  193. CTHL_AutoDelay = dwTickCount + CTHL_VAVLE_ERROR_TIME;
  194. }
  195. }
  196. break;
  197. case 10://夹到位延时
  198. if(CTHL_JCXBD_VAVLE&&CTHL_JCXBD_Limit_IN&&!X_DRV){
  199. CTHL_AutoDelay = dwTickCount + CTHL_PARAM_JBD_DELAY+5;
  200. //布带先于气缸后退
  201. AxisMovePosAccDec(X_AXIS,CTHL_PARAM_HLT_SPEED_Speed,-CTHL_PARAM_FZCXC_LENGTH,
  202. 1200,1200,20,20,0);
  203. if((CTHL_cZipCnt <1))//应该Y轴位置是准的,由于通讯的原因,二次读取。
  204. {
  205. CTHL_LianLengthYFZCheckFirst=dwYRealPos_com; //若这两个值取值比较准的话,可以作为后面的参考
  206. }
  207. CTHL_LianLengthYFZCheck=dwYRealPos_com;
  208. CTHL_AutoStep++;
  209. }
  210. else if((dwTickCount >= CTHL_AutoDelay) && !CTHL_bDANBU_MODE)
  211. {
  212. CTHL_wltzi=1;//不停机
  213. CTHL_SetAlarmCode(CTHL_JCXBD_Limit_ALARM,bRunning);//E23 插销布带夹到位异常
  214. }
  215. break;
  216. case 11://插销夹布后退
  217. if(dwTickCount >= CTHL_AutoDelay){
  218. if(!CTHL_bDANBU_MODE || CTHL_START_IN_UP){
  219. CTHL_CXHT_VAVLE=1;//插销布带后退动作
  220. CTHL_AutoDelay = dwTickCount + CTHL_VAVLE_ERROR_TIME;
  221. CTHL_AutoStep++;
  222. }
  223. }
  224. break;
  225. case 12://插销夹布后退到位延时
  226. if(CTHL_CXHT_VAVLE&&CTHL_CXHT_Limit_IN&&!X_DRV){
  227. CTHL_AutoDelay = dwTickCount + CTHL_PARAM_CXBB_DELAY;
  228. CTHL_AutoStep++;
  229. }
  230. else if((dwTickCount >= CTHL_AutoDelay) && !CTHL_bDANBU_MODE)
  231. {
  232. CTHL_wltzi=1;//不停机
  233. CTHL_SetAlarmCode(CTHL_CXHT_Limit_ALARM,bRunning);//插销回退到位异常
  234. }
  235. break;
  236. case 13://插销摆臂动作
  237. if(dwTickCount >= CTHL_AutoDelay){
  238. if(!CTHL_bDANBU_MODE || CTHL_START_IN_UP){
  239. CTHL_XCBB_VAVLE=1;
  240. CTHL_AutoDelay = dwTickCount + CTHL_VAVLE_ERROR_TIME;
  241. CTHL_AutoStep++;
  242. }
  243. }
  244. break;
  245. case 14://插销摆臂到位延时
  246. if(CTHL_XCBB_VAVLE&&CTHL_XCBB_Limit_IN){
  247. CTHL_AutoDelay = dwTickCount + CTHL_PARAM_YSCX_DELAY;
  248. CTHL_AutoStep++;
  249. }
  250. else if((dwTickCount >= CTHL_AutoDelay) && !CTHL_bDANBU_MODE)
  251. {
  252. CTHL_wltzi=1;//不停机
  253. CTHL_SetAlarmCode(CTHL_CXHT_Limit_ALARM,bRunning);//插销回退到位异常
  254. }
  255. break;
  256. case 15://
  257. if(dwTickCount >= CTHL_AutoDelay)
  258. {
  259. CTHL_AutoDelay = dwTickCount +0;
  260. CTHL_AutoStep++;
  261. }
  262. break;
  263. case 16: //
  264. if(dwTickCount >= CTHL_AutoDelay)
  265. {
  266. if(!CTHL_bDANBU_MODE || CTHL_START_IN_UP){
  267. CTHL_TD_MotorStep =10;
  268. CTHL_TD_MotorDelay = dwTickCount+ 1;
  269. CTHL_AutoStep++;
  270. }
  271. }
  272. break;
  273. case 17:
  274. if((CTHL_TD_MotorStep == 0))//FZ电机运行完成
  275. {
  276. if(!CTHL_bDANBU_MODE || CTHL_START_IN_UP)
  277. {
  278. CTHL_PARAM_CYCLE_TIME=dwTickCount-cycletime;
  279. CTHL_AutoStep = 1; //开始循环
  280. if(cStopMode==1 || bSingOneFlg)
  281. {
  282. cStopMode=2;//停机后循环完成动作
  283. CTHL_ZhouWantwo=1;//做完两条
  284. }
  285. AddToTal(CTHL_TOTAL_ADDR);
  286. AddToTal(CTHL_TRUST_ALARM_ADDR);
  287. CalProSP(CTHL_SPEED_ADDR);
  288. //公分节那条也不加
  289. if((CTHL_cZipCnt<2) && !CTHL_GF_Change) CTHL_cZipCnt++;
  290. if((CTHL_NoLaLian_IN))CTHL_cZipCnt = 0;
  291. if(bSingOneFlg || CTHL_bHandWork_MODE)
  292. {
  293. CTHL_AutoStep = 0;
  294. bRunning = 0;
  295. bSingOneFlg = 0;
  296. }
  297. }
  298. }
  299. break;
  300. }
  301. }
  302. }
  303. void CTHL_CheckStart(void)
  304. {
  305. if(CTHL_START_IN_UP || bStart)
  306. {
  307. if((GetAlarm(X_AXIS)==1 || GetAlarm(Y_AXIS)==1) && !CTHL_PARAM_DBSF_MODE)//伺服告警DB9模式
  308. {
  309. SetClr(X_AXIS, MOTOR_NOALARM);
  310. SetClr(Y_AXIS, MOTOR_NOALARM);
  311. CTHL_bSFBBAOJIN_Delay= dwTickCount + 2000;//清除伺服告警
  312. }
  313. if(CTHL_PARAM_DBSF_MODE)//外部接线模式
  314. {
  315. if(!CTHL_SF_ALR_IN){
  316. CTHL_SF_ALR_CLR=1;
  317. CTHL_bSFBBAOJIN_Delay= dwTickCount + 2000;
  318. }
  319. }
  320. SetAlarmCode(CTHL_ALARM_ADDR,0); //清除告警
  321. }
  322. if(CTHL_wltzi){//装拉头故障标志
  323. if(CTHL_START_IN_UP || bStart)
  324. {
  325. if(bRunning)
  326. {
  327. CTHL_wltzi=0;//清除标志
  328. CTHL_AutoStep = 1;//自动重新开始
  329. CTHL_ZhuangLiaoStep = 1;//重新装拉头
  330. bTuiLaTouOkFlg = 1;
  331. bZhuangLiaoOkFlg= 0;//清除标志
  332. CTHL_ZhuangLiaoDelay = dwTickCount + 150;
  333. }
  334. else{
  335. CTHL_wltzi=0;
  336. }
  337. }
  338. }
  339. #if 1
  340. //启动 自动启动 单一自动
  341. if((CTHL_START_IN_UP || bStart || CTHL_bSingOne ) && !CTHL_wltzi)
  342. {
  343. if(!bRunning)
  344. {
  345. bRunning = 1;
  346. if( CTHL_bSingOne)bSingOneFlg=1;//单次
  347. SetEn(X_AXIS, MOTOR_EN);
  348. SetEn(Y_AXIS, MOTOR_EN);
  349. Set_Ctrlmode_trans(Y_AXIS,POS_MODE);
  350. bFZ_LengthOK = 0;
  351. CTHL_FZ_MotorStep = 0;
  352. CTHL_PARAM_ZDP_AUTO=0;//振动盘控制
  353. bCxcAuto=0;//运行过程中伺服报警
  354. //
  355. CTHL_TLiao_VAVLE =0;
  356. CTHL_HSLiao_VAVLE =0;
  357. //
  358. CTHL_XCBB_VAVLE=0;
  359. CTHL_JCXBD_VAVLE=0;
  360. CTHL_CXHT_VAVLE=0;
  361. CTHL_FZYL_VAVLE=0;
  362. //
  363. CTHL_FKDW_VAVLE=0;
  364. CTHL_SMZ_VAVLE=0;
  365. CTHL_TXM_VAVLE=0;
  366. CTHL_HL_VAVLE=0;
  367. //装料拉头
  368. CTHL_ZhuangLiaoDelay = dwTickCount + 150;
  369. CTHL_ZhuangLiaoStep=1;
  370. bTuiLaTouOkFlg = 1;
  371. bZhuangLiaoOkFlg= 0;
  372. bXiaoMOUpFlg=1;
  373. CTHL_TryCnt = 0;//重装拉头次数
  374. //方块定位
  375. CTHL_TD_MotorStep=1;
  376. //自动运行
  377. CTHL_AutoDelay = dwTickCount + 10;
  378. CTHL_AutoStep = 1;
  379. CTHL_cZipCnt = 0;//头两条检测
  380. //
  381. }
  382. bStart = 0;
  383. CTHL_bSingOne=0;
  384. }
  385. if(CTHL_ZhouWantwo)//按下停止后,该条完成
  386. {
  387. CTHL_ZhouWantwo=0;
  388. if(CTHL_ZhouWanone)
  389. {
  390. CTHL_ZhouWanone=0;
  391. bRunning=0;
  392. cStopMode=0;
  393. AxisEgmStop(X_AXIS);
  394. AxisEgmStop(Y_AXIS);
  395. if((GetAlarm(X_AXIS)==1 || GetAlarm(Y_AXIS)==1) && !CTHL_PARAM_DBSF_MODE)
  396. {
  397. SetClr(X_AXIS, MOTOR_NOALARM);
  398. SetClr(Y_AXIS, MOTOR_NOALARM);
  399. CTHL_bSFBBAOJIN_Delay= dwTickCount + 2000;
  400. }
  401. else if(CTHL_PARAM_DBSF_MODE)
  402. {
  403. if(!CTHL_SF_ALR_IN)
  404. {
  405. CTHL_SF_ALR_CLR=1;
  406. CTHL_bSFBBAOJIN_Delay= dwTickCount + 2000;
  407. }
  408. }
  409. SetEn(X_AXIS, MOTOR_DISEN);
  410. SetEn(Y_AXIS, MOTOR_DISEN);
  411. bSingOneFlg=0;
  412. CTHL_AutoStep = 0;
  413. CTHL_FZ_MotorStep =0;
  414. CTHL_TD_MotorStep =0;
  415. }
  416. }
  417. //停止
  418. if(CTHL_STOP_IN_UP || bStop)
  419. {
  420. if(cStopMode < 2)
  421. {
  422. cStopMode++;//停止模式
  423. }
  424. if(cStopMode==1 && bRunning)CTHL_ZhouWanone=1;//按下停止后,记录标准
  425. else if(cStopMode==2 && bRunning)//按下停止两次后,停机。
  426. {
  427. bRunning=0;
  428. cStopMode=0;
  429. bSingOneFlg=0;
  430. bFZ_LengthOK = 0;
  431. cBAOjin=0;//伺服报警标志
  432. CTHL_wltzi=0;
  433. AxisEgmStop(X_AXIS);
  434. AxisEgmStop(Y_AXIS);
  435. SetEn(X_AXIS, MOTOR_DISEN);
  436. SetEn(Y_AXIS, MOTOR_DISEN);
  437. CTHL_AutoStep = 0;
  438. CTHL_FZ_MotorStep =0;
  439. CTHL_TD_MotorStep =0;
  440. CTHL_ZhuangLiaoStep=0;
  441. CTHL_TLiao_VAVLE=0;
  442. CTHL_HSLiao_VAVLE =0;
  443. CTHL_XCJC_VAVLE=0;
  444. CTHL_XCBB_VAVLE=0;
  445. CTHL_JCXBD_VAVLE=0;
  446. CTHL_HL_VAVLE=0;
  447. if(CTHL_CTXM_VAVLE){
  448. CTHL_JLTou_VAVLE=1;
  449. CTHL_MGuo_VAVLE=0;
  450. }
  451. CTHL_CTXM_VAVLE =0;
  452. CTHL_TXM_VAVLE=0;
  453. CTHL_SMZ_VAVLE=0;
  454. CTHL_FKDW_VAVLE=0;
  455. CTHL_FZYL_VAVLE=0;
  456. if((GetAlarm(X_AXIS)==1 || GetAlarm(Y_AXIS)==1) && !CTHL_PARAM_DBSF_MODE)
  457. {
  458. SetClr(X_AXIS, MOTOR_NOALARM);
  459. SetClr(Y_AXIS, MOTOR_NOALARM);
  460. CTHL_bSFBBAOJIN_Delay= dwTickCount + 2000;
  461. }
  462. else if(CTHL_PARAM_DBSF_MODE)
  463. {
  464. if(!CTHL_SF_ALR_IN)
  465. {
  466. CTHL_SF_ALR_CLR=1;
  467. CTHL_bSFBBAOJIN_Delay= dwTickCount + 2000;
  468. }
  469. }
  470. //SetPos(X_AXIS, 0);
  471. //SetPos(Y_AXIS, 0);
  472. //SetPos(Z_AXIS, 0);
  473. SetAlarmCode(CTHL_ALARM_ADDR,0);
  474. }
  475. else if(!bRunning)
  476. {
  477. bRunning=0;
  478. cStopMode=0;
  479. bSingOneFlg=0;
  480. CTHL_wltzi=0;
  481. bCxcAuto=0;
  482. cBAOjin=0;
  483. bFZ_LengthOK = 0;
  484. AxisEgmStop(X_AXIS);
  485. AxisEgmStop(Y_AXIS);
  486. SetEn(X_AXIS, MOTOR_DISEN);
  487. SetEn(Y_AXIS, MOTOR_DISEN);
  488. SetAlarmCode(CTHL_ALARM_ADDR,0);
  489. CTHL_TLiao_VAVLE =0;
  490. CTHL_HSLiao_VAVLE =0;
  491. CTHL_XCJC_VAVLE=0;
  492. CTHL_JCXBD_VAVLE=0;
  493. if(CTHL_CTXM_VAVLE){
  494. CTHL_JLTou_VAVLE=1;
  495. CTHL_MGuo_VAVLE=0;
  496. }
  497. CTHL_CTXM_VAVLE =0;
  498. CTHL_FKDW_VAVLE=0;
  499. CTHL_TXM_VAVLE=0;
  500. CTHL_SMZ_VAVLE=0;
  501. CTHL_FKDW_VAVLE=0;
  502. CTHL_FZYL_VAVLE=0;
  503. CTHL_XCBB_VAVLE=0;
  504. CTHL_HL_VAVLE=0;
  505. CTHL_AutoStep = 0;
  506. CTHL_ZhuangLiaoStep=0;
  507. CTHL_TLiaoStep=0;
  508. CTHL_TD_MotorStep=0;
  509. CTHL_SongLiaoStep =0;
  510. CTHL_FZ_MotorStep =0;
  511. CTHL_AutoStep1 =0;
  512. if((GetAlarm(X_AXIS)==1 || GetAlarm(Y_AXIS)==1) && !CTHL_PARAM_DBSF_MODE)
  513. {
  514. SetClr(X_AXIS, MOTOR_NOALARM);
  515. SetClr(Y_AXIS, MOTOR_NOALARM);
  516. CTHL_bSFBBAOJIN_Delay= dwTickCount + 2000;
  517. }
  518. if(CTHL_PARAM_DBSF_MODE)
  519. {
  520. if(!CTHL_SF_ALR_IN)
  521. {
  522. CTHL_SF_ALR_CLR=1;
  523. CTHL_bSFBBAOJIN_Delay= dwTickCount + 2000;
  524. }
  525. }
  526. SetAlarmCode(CTHL_ALARM_ADDR,0);
  527. //SetPos(X_AXIS, 0);
  528. //SetPos(Y_AXIS, 0);
  529. CTHL_TLiaoStep = 0;
  530. CTHL_AutoStep = 0;
  531. //CTHL_LianLengthCheck = 0;
  532. }
  533. bStop=0;
  534. }
  535. if(bAlarmStop)
  536. {
  537. bRunning = 0;
  538. bAlarmStop=0;
  539. cStopMode=0;
  540. CTHL_TLiao_VAVLE =0;
  541. CTHL_HSLiao_VAVLE =0;
  542. CTHL_FKDW_VAVLE=0;
  543. CTHL_TXM_VAVLE=0;
  544. CTHL_FKDW_VAVLE=0;
  545. CTHL_FZYL_VAVLE=0;
  546. CTHL_XCBB_VAVLE=0;
  547. CTHL_JCXBD_VAVLE=0;
  548. CTHL_HL_VAVLE=0;
  549. AxisEgmStop(X_AXIS);
  550. AxisEgmStop(Y_AXIS);
  551. CTHL_AutoStep = 0;
  552. CTHL_FZ_MotorStep =0;
  553. CTHL_TD_MotorStep =0;
  554. }
  555. #endif
  556. }
  557. //拖带电机控制动作 X轴
  558. void CTHL_TD_Motor(void) //
  559. {
  560. if(dwTickCount >= CTHL_bSFBBAOJIN_Delay&&CTHL_SF_ALR_CLR) //伺服报警时间
  561. {
  562. CTHL_SF_ALR_CLR=0;
  563. SetClr(X_AXIS,MOTOR_ALARM);
  564. //SetClr(Y_AXIS,MOTOR_ALARM);
  565. }
  566. if((GetAlarm(Y_AXIS)==1 || GetAlarm(X_AXIS)==1) && !CTHL_PARAM_DBSF_MODE &&!cBAOjin)
  567. {
  568. bCxcAuto=1;
  569. cBAOjin=1;
  570. CTHL_SF_ALR_IN=0;
  571. AxisEgmStop(X_AXIS);
  572. AxisEgmStop(Y_AXIS);
  573. CTHL_AutoStep = 101;
  574. SetEn(X_AXIS, MOTOR_DISEN);
  575. SetEn(Y_AXIS, MOTOR_DISEN);
  576. CTHL_SetAlarmCode(CTHL_SF_ALR_ALARM,bRunning); //无拉链自动
  577. }
  578. else
  579. {
  580. CTHL_SF_ALR_IN=1;
  581. }
  582. memcpy(&user_datas[420],&dwXRealPos,4);
  583. #if 1
  584. switch(CTHL_TD_MotorStep)
  585. {
  586. //1步开始,纯定位, 没有穿入
  587. case 1://判断是否有方块感应
  588. if(dwTickCount >= CTHL_TD_MotorDelay)
  589. {
  590. if(!CTHL_FKDW_IN)CTHL_TD_MotorStep = 0;
  591. else {
  592. SetEn(X_AXIS, MOTOR_EN);
  593. SetEn(Y_AXIS, MOTOR_EN);//松轴
  594. CTHL_FKDW_VAVLE=0;
  595. CTHL_SMZ_VAVLE=0;
  596. CTHL_TXM_VAVLE=0;
  597. CTHL_XCBB_VAVLE=0;
  598. CTHL_FZYL_VAVLE=0;//压轮松开
  599. CTHL_TD_MotorDelay=dwTickCount+50;
  600. CTHL_TD_MotorStep++;
  601. }
  602. }
  603. break;
  604. case 2:
  605. if(dwTickCount >= CTHL_TD_MotorDelay){ //给锁轴时间
  606. SetPos(X_AXIS, 0);
  607. AxisContinueMoveAcc(X_AXIS,CTHL_PARAM_First_SPEED,DIR_P,1500,600,30,15);
  608. AxisContinueMoveAcc(Y_AXIS,CTHL_PARAM_First_SPEED,DIR_P,1500,600,30,15);
  609. CTHL_TD_MotorStep++;
  610. }
  611. break;
  612. case 3://检测到过链
  613. if(dwXRealPos >= CTHL_PARAM_first_CL_MAX_Length){ //大于第一条最长长度。没有检测的方块
  614. bCxcAuto=1;
  615. CTHL_SetAlarmCode(CTHL_WLZDTJ_ALARM,bRunning); //无拉链自动停机
  616. }
  617. if(CTHL_FK_Check_UP)//有方块信号;
  618. {
  619. CTHL_XSavePosBuff = dwXRealPos;//方块位置
  620. CTHL_TD_MotorStep++;
  621. }
  622. break;
  623. case 4:
  624. if(dwXRealPos>=CTHL_XSavePosBuff+CTHL_PARAM_FKDW_DW_LENGTH)
  625. {
  626. CTHL_FKDW_VAVLE=1;
  627. }
  628. if(dwXRealPos>=CTHL_XSavePosBuff+CTHL_PARAM_TDDW_LENGTH)
  629. {
  630. AxisContinueMoveChangeSpeed(X_AXIS,600,600,20,10);
  631. AxisContinueMoveChangeSpeed(Y_AXIS,600,600,20,10);
  632. CTHL_TD_MotorDelay = dwTickCount + 1500;
  633. CTHL_TD_MotorStep++;
  634. }
  635. break;
  636. case 5:
  637. //定位感应亮时、位置到达时,或X轴停止时,停止X轴
  638. if(!CTHL_FKDW_IN)
  639. {
  640. AxisEgmStop(X_AXIS);
  641. AxisEgmStop(Y_AXIS);
  642. CTHL_TD_MotorDelay = dwTickCount + 50;
  643. CTHL_TD_MotorStep++;
  644. }
  645. if(dwTickCount >= CTHL_TD_MotorDelay)//1.5S为检测到停机
  646. {
  647. bCxcAuto=1;;
  648. CTHL_SetAlarmCode(CTHL_FXDW_ALARM,bRunning);//方块钩针定位异常
  649. }
  650. if(dwXRealPos >= CTHL_PARAM_first_CL_MAX_Length){ //大于第一条最长长度。没有检测的方块
  651. bCxcAuto=1;
  652. CTHL_SetAlarmCode(CTHL_WLZDTJ_ALARM,bRunning); //无拉链自动停机
  653. }
  654. break;
  655. case 6://压轮动作
  656. if(dwTickCount >= CTHL_TD_MotorDelay&&!X_DRV&&!Y_DRV){
  657. CTHL_FZYL_VAVLE=1;
  658. AxisMovePosAccDec(X_AXIS,1200,-10,1200,1200,20,20,0);
  659. CTHL_TD_MotorDelay = dwTickCount + QDCT_VAVLE_ERROR_TIME;
  660. CTHL_TD_MotorStep++;
  661. }
  662. break;
  663. case 7://压轮到位
  664. if(CTHL_FZYL_VAVLE&&CTHL_FZYL_Limit_IN&&!X_DRV){
  665. CTHL_TD_MotorStep = 0;
  666. CTHL_GLGY_FKDW_Length=dwXRealPos-CTHL_XSavePosBuff;//第一次获取过链感应与定位间的长度
  667. }
  668. else if(dwTickCount >= CTHL_TD_MotorDelay){
  669. CTHL_SetAlarmCode(CTHL_FZYL_Limit_ALARM,bRunning);//压轮到位异常
  670. }
  671. break;
  672. case 10://开始穿小插
  673. if(dwTickCount >= CTHL_TD_MotorDelay&&!X_DRV&&!Y_DRV)
  674. {
  675. tuodaitime=dwTickCount;
  676. CTHL_XSavePosBuff3=dwXRealPos;
  677. CTHL_CXHT_VAVLE=0;
  678. AxisMovePosAccDecNotStop(X_AXIS,CTHL_PARAM_HLT_SPEED_Speed,CTHL_PARAM_CRFZ_LENGTH+180,
  679. 1000,1000,20,20,CTHL_PARAM_XCCR_LENGTH);
  680. CTHL_TD_MotorStep++;
  681. CTHL_TD_MotorDelay = dwTickCount+ 1000;
  682. ONCERUNFLG1=1;
  683. }
  684. break;
  685. case 11:
  686. if(abs(dwXRealPos-CTHL_XSavePosBuff3)>=120)CTHL_JCXBD_VAVLE=0;//夹插销布带松开
  687. if(abs(dwXRealPos-CTHL_XSavePosBuff3)>=50&&ONCERUNFLG1)
  688. {
  689. ONCERUNFLG1=0;
  690. AxisMovePosAccDec(Y_AXIS,1500,250,1500,1000,20,20,0);//Y轴送带
  691. }
  692. if(CTHL_CXGY_IN)
  693. {
  694. CTHL_XCJC_VAVLE=0;//插销检测下降
  695. CTHL_HL_VAVLE=1;
  696. CTHL_TD_MotorStep++;
  697. CTHL_TD_MotorDelay = dwTickCount+ CTHL_PARAM_XCIN_DELAY;
  698. }
  699. else if(dwTickCount >= CTHL_TD_MotorDelay)
  700. {
  701. bCxcAuto=1;//不停机
  702. CTHL_SetAlarmCode(CTHL_CXGY_Check_ALARM,bRunning);//E28 插销感应到位检测异常
  703. }
  704. break;
  705. case 12: //
  706. if(dwTickCount >= CTHL_TD_MotorDelay) //延时停X轴
  707. {
  708. CTHL_TD_MotorStep=40;
  709. AxisEgmStop(X_AXIS);
  710. }
  711. break;
  712. case 40: //
  713. if(!X_DRV&&!Y_DRV)
  714. {
  715. CTHL_SMZ_VAVLE=0;
  716. CTHL_MGuo_VAVLE=0;
  717. CTHL_TD_MotorStep=41;
  718. CTHL_CXCD=abs(dwXRealPos-CTHL_XSavePosBuff3);
  719. CTHL_XSavePosBuff3 = dwXRealPos;
  720. CTHL_XSavePosBuff = dwXRealPos;
  721. }
  722. break;
  723. case 41: //
  724. if(CTHL_SML_Limit_IN)
  725. {
  726. CTHL_TD_MotorDelay = dwTickCount+ CTHL_PARAM_YSXC_DELAY;//延时合练
  727. }
  728. else if(dwTickCount >= CTHL_TD_MotorDelay&&!X_DRV) //开始提速
  729. {
  730. if(!CTHL_bDANBU_MODE || CTHL_START_IN_UP)//自动与单步,单步用启动按钮进行
  731. {
  732. CTHL_TD_MotorStep=42;
  733. CTHL_FZYL_VAVLE=0;
  734. CTHL_XSavePosBuff3=dwXRealPos;
  735. }
  736. }
  737. break;
  738. case 42: //
  739. //if(dwTickCount >= CTHL_TD_MotorDelay)
  740. {
  741. CTHL_TD_MotorStep=13;
  742. }
  743. break;
  744. case 13: //退推方块延时到 ,合练
  745. //if(dwTickCount >= CTHL_TD_MotorDelay&&CTHL_SML_Limit_IN)//走合练长度
  746. {
  747. CTHL_HL_LENTH=abs(dwXRealPos-CTHL_XSavePosBuff3);
  748. if(CTHL_cZipCnt<1||CTHL_NoLaLian_IN_UP)
  749. {
  750. //前两条用反转长度定位合练长度
  751. if(CTHL_LianLengthXFZCheckFirst>=CTHL_PARAM_HELIAN_LENGTH)
  752. {
  753. CTHL_LENTH=CTHL_LianLengthXFZCheckFirst+CTHL_PARAM_HLDW_LENGTH+200-CTHL_PARAM_HELIAN_LENGTH-CTHL_HL_LENTH;
  754. }
  755. else//剩余合练设置错误
  756. {
  757. bCxcAuto=1;
  758. CTHL_SetAlarmCode(CTHL_SYHL_ERRO_ALARM,bRunning);
  759. }
  760. //用第一次速度
  761. AxisMovePosAccDecNotStop(X_AXIS,CTHL_PARAM_First_SPEED,CTHL_LENTH,
  762. 1000,CTHL_PARAM_First_SPEED,30,200,0);//快速合链
  763. }
  764. else
  765. { //前两条用反转长度定位合练长度
  766. if(CTHL_LianLengthCheckFirst>=CTHL_PARAM_HELIAN_LENGTH)
  767. {
  768. CTHL_LENTH=CTHL_LianLengthCheckFirst+CTHL_PARAM_HLDW_LENGTH-CTHL_FKGY_FKDW_Length-CTHL_PARAM_HELIAN_LENGTH-CTHL_HL_LENTH;
  769. }
  770. else//剩余合练设置错误
  771. {
  772. bCxcAuto=1;
  773. CTHL_SetAlarmCode(CTHL_SYHL_ERRO_ALARM,bRunning);
  774. }
  775. //用合练速度
  776. AxisMovePosAccDecNotStop(X_AXIS,CTHL_PARAM_TD_RunSpeed,CTHL_LENTH,
  777. 1200,CTHL_PARAM_TD_RunSpeed,50,100,100);//快速合链
  778. }
  779. CTHL_XSavePosBuff3 = dwXRealPos;
  780. bFKCheck_Flag = 0;
  781. cDELAYONE=0;
  782. CTHL_TD_MotorStep++;
  783. JLTFLG=1;
  784. XMFLG=1;
  785. }
  786. break;
  787. case 14:
  788. if(abs(dwXRealPos-CTHL_XSavePosBuff3)>=80&&JLTFLG)
  789. {
  790. JLTFLG=0;
  791. CTHL_JLTou_VAVLE=1;
  792. }
  793. if(abs(dwXRealPos-CTHL_XSavePosBuff3)>=200&&XMFLG)
  794. {
  795. XMFLG=0;
  796. CTHL_CTXM_VAVLE=0;
  797. if(CTHL_ZhuangLiaoStep==0)//装拉头
  798. {
  799. CTHL_ZhuangLiaoDelay = dwTickCount + 20;
  800. CTHL_ZhuangLiaoStep=1;
  801. bZhuangLiaoOkFlg= 0;
  802. bXiaoMOUpFlg=0;
  803. }
  804. }
  805. if(abs(dwXRealPos-CTHL_XSavePosBuff3)>=30)
  806. {
  807. AxisMovePosAccDecNotStop(Y_AXIS,2000,100,
  808. 1000,1000,30,150,0);//Y轴转动
  809. }
  810. if((CTHL_FK_Check_UP)&& !bFKCheck_Flag){//第一方块信号检测
  811. bFKCheck_Flag = 1; //置方块检测为1
  812. cDELAYONE=1;
  813. CTHL_XSavePosBuff1= dwXRealPos;//第一个方块检测位置
  814. }
  815. if(CTHL_cZipCnt<1)
  816. {
  817. //长度限制
  818. if(abs(dwXRealPos-CTHL_XSavePosBuff) >= CTHL_PARAM_first_CL_MAX_Length){ //大于第一条最长长度。没有检测的方块
  819. bCxcAuto=1;
  820. CTHL_SetAlarmCode(CTHL_WLZDTJ_ALARM,bRunning); //无拉链自动停机
  821. }
  822. }
  823. else
  824. {
  825. //长度限制
  826. if((abs(dwXRealPos-CTHL_XSavePosBuff) >=(long)(CTHL_PARAM_WLCDSHEZHI_LENTH + CTHL_LianLengthCheckFirst)))
  827. {
  828. bCxcAuto=1;
  829. CTHL_SetAlarmCode(CTHL_WLZDTJ_ALARM,bRunning); //无拉链自动停机
  830. }
  831. }
  832. if(abs(dwXRealPos-CTHL_XSavePosBuff3) >=CTHL_LENTH-20){
  833. CTHL_XCJC_VAVLE=0;
  834. CTHL_XCBB_VAVLE=0;
  835. CTHL_HL_VAVLE=0;
  836. }
  837. if(abs(dwXRealPos-CTHL_XSavePosBuff3) >=CTHL_LENTH+50)
  838. {
  839. CTHL_TD_MotorStep++;//
  840. }
  841. break;
  842. case 15: //加速
  843. if(CTHL_FK_Check_UP && !bFKCheck_Flag)//为检测到第一方块继续检测
  844. {
  845. bFKCheck_Flag = 1;
  846. cDELAYONE=2;
  847. CTHL_XSavePosBuff1= dwXRealPos;
  848. CTHL_TD_MotorDelay = dwTickCount+ 200;
  849. }
  850. if((!CTHL_NoLaLian_IN))
  851. {
  852. if(CTHL_cZipCnt<1||CTHL_NoLaLian_IN_UP)
  853. {
  854. AxisContinueMoveChangeSpeed(X_AXIS,CTHL_PARAM_First_SPEED,1000,20,50);
  855. //长度限制
  856. if(abs(dwXRealPos-CTHL_XSavePosBuff) >= CTHL_PARAM_first_CL_MAX_Length){ //大于第一条最长长度。没有检测的方块
  857. bCxcAuto=1;
  858. CTHL_SetAlarmCode(CTHL_WLZDTJ_ALARM,bRunning); //无拉链自动停机
  859. }
  860. }
  861. else
  862. {
  863. if((CTHL_LianLengthCheckFirst < 4000) && (CTHL_LianLengthCheck <4000)){ // 40公分
  864. CTHL_DataBuff = CTHL_PARAM_CLsudu_SPEED*2/3;//长链拖带快速速度,小于4000的链条
  865. }
  866. else if((CTHL_LianLengthCheckFirst < 5000) && (CTHL_LianLengthCheck <5000)) {
  867. CTHL_DataBuff = CTHL_PARAM_CLsudu_SPEED*4/5;//长链拖带快速速度,小于5000的链条
  868. }
  869. else{
  870. CTHL_DataBuff = CTHL_PARAM_CLsudu_SPEED;//长链拖带快速速度
  871. }
  872. CTHL_LENTH=CTHL_LianLengthCheckFirst-CTHL_GLGY_FKDW_Length-dwXRealPos;
  873. AxisMovePosAccDecNotStop(X_AXIS,CTHL_DataBuff,CTHL_LENTH,
  874. 1000,CTHL_PARAM_FKDW_Speed,50,100,CTHL_PARAM_GJSY_LENGTH);
  875. //长度限制
  876. if((abs(dwXRealPos-CTHL_XSavePosBuff) >=(long)(CTHL_PARAM_WLCDSHEZHI_LENTH + CTHL_LianLengthCheckFirst)))
  877. {
  878. bCxcAuto=1;
  879. CTHL_SetAlarmCode(CTHL_WLZDTJ_ALARM,bRunning); //无拉链自动停机
  880. }
  881. }
  882. }
  883. //CTHL_TD_MotorStep = 17;
  884. if(bFKCheck_Flag) CTHL_TD_MotorStep = 17; //说明第一个方块已经检测到
  885. else CTHL_TD_MotorStep++; //第一个方块没检测到时先运动的第一个再检测定位
  886. break;
  887. case 16:
  888. //检测方块
  889. if(CTHL_FK_Check_UP&& !bFKCheck_Flag)//第一次检测到方块
  890. {
  891. bFKCheck_Flag = 1;
  892. cDELAYONE=3;
  893. CTHL_XSavePosBuff1= dwXRealPos;
  894. CTHL_TD_MotorDelay = dwTickCount+ 200;
  895. CTHL_TD_MotorStep++;
  896. }
  897. if(CTHL_cZipCnt<1)
  898. {
  899. //长度限制
  900. if(abs(dwXRealPos-CTHL_XSavePosBuff) >= CTHL_PARAM_first_CL_MAX_Length){ //大于第一条最长长度。没有检测的方块
  901. bCxcAuto=1;
  902. CTHL_SetAlarmCode(CTHL_WLZDTJ_ALARM,bRunning); //无拉链自动停机
  903. }
  904. }
  905. else
  906. {
  907. //长度限制
  908. if((abs(dwXRealPos-CTHL_XSavePosBuff) >=(long)(CTHL_PARAM_WLCDSHEZHI_LENTH + CTHL_LianLengthCheckFirst)))
  909. {
  910. bCxcAuto=1;
  911. CTHL_SetAlarmCode(CTHL_WLZDTJ_ALARM,bRunning); //无拉链自动停机
  912. }
  913. }
  914. break;
  915. case 17://需判断中间无方块的情况,或者是短链的情况
  916. //在链上行走8公分
  917. //检测方块
  918. /*if(CTHL_FK_Check_UP&& !bFKCheck_Flag)//第一次检测到方块
  919. {
  920. bFKCheck_Flag = 1;
  921. cDELAYONE=3;
  922. CTHL_XSavePosBuff1= dwXRealPos;
  923. }*/
  924. if(!CTHL_FK_Check && (dwXRealPos >= 1000))
  925. {
  926. CTHL_TD_MotorStep++;
  927. }
  928. break;
  929. case 18:
  930. //在链上行走8公分
  931. if(!CTHL_FK_Check && dwXRealPos>400 &&(abs(dwXRealPos-CTHL_XSavePosBuff1) >= (CTHL_PARAM_XMUP_LENGTH)))//上摸位置
  932. {
  933. CTHL_XCBB_VAVLE=0;
  934. bXiaoMOUpFlg=1;
  935. }
  936. //第二次感应方块, 要做定位,//感应到第一个方块插销位置
  937. if(CTHL_FK_Check_UP &&dwTickCount >= CTHL_TD_MotorDelay&& (dwXRealPos >= 1600))
  938. {
  939. CTHL_XSavePosBuff3= dwXRealPos;
  940. if(CTHL_cZipCnt<1||CTHL_NoLaLian_IN_UP)
  941. {
  942. CTHL_LianLengthGLCheckFirst= dwXRealPos-CTHL_XSavePosBuff1;
  943. CTHL_LianLengthCheckFirst= dwXRealPos-CTHL_XSavePosBuff1;
  944. }
  945. else
  946. {
  947. //感应到方块后,走段距离减速
  948. CTHL_LENTH=CTHL_PARAM_TDDW_LENGTH;
  949. AxisMovePosAccDecNotStop(X_AXIS,CTHL_PARAM_FKDW_Speed,CTHL_LENTH,
  950. 1000,800,30,30,100);
  951. }
  952. CTHL_LianLengthGLCheck= dwXRealPos-CTHL_XSavePosBuff1;
  953. CTHL_TD_MotorStep++;
  954. //公分节
  955. /*if((CTHL_LianLengthGLCheck <= CTHL_GLGY_FKDW_Length) && (CTHL_cZipCnt>1))//感应到方块后定位距离
  956. {
  957. CTHL_TD_MotorStep=50;
  958. AxisContinueMoveAcc(X_AXIS,CTHL_PARAM_First_SPEED,DIR_P,1500,600,30,15);
  959. AxisContinueMoveAcc(Y_AXIS,CTHL_PARAM_First_SPEED,DIR_P,1500,600,30,15);
  960. bFZ_LengthOK= 0;
  961. CTHL_cZipCnt = 0;
  962. }
  963. else
  964. {
  965. CTHL_TD_MotorStep++;
  966. }*/
  967. }
  968. if(CTHL_cZipCnt<1)
  969. {
  970. //长度限制
  971. if(dwXRealPos >= CTHL_PARAM_first_CL_MAX_Length){ //大于第一条最长长度。没有检测的方块
  972. bCxcAuto=1;
  973. CTHL_SetAlarmCode(CTHL_WLZDTJ_ALARM,bRunning); //无拉链自动停机
  974. }
  975. }
  976. else
  977. {
  978. //长度限制
  979. if((dwXRealPos >=(long)(CTHL_PARAM_WLCDSHEZHI_LENTH + CTHL_LianLengthCheckFirst)))
  980. {
  981. bCxcAuto=1;
  982. CTHL_SetAlarmCode(CTHL_WLZDTJ_ALARM,bRunning); //无拉链自动停机
  983. }
  984. }
  985. break;
  986. case 19:
  987. //方块位置+方块钩针下降位置
  988. if(CTHL_cZipCnt<1||CTHL_NoLaLian_IN_UP){
  989. if(dwXRealPos>=CTHL_XSavePosBuff3+CTHL_PARAM_FKDW_DW_LENGTH){CTHL_FKDW_VAVLE=1;}
  990. if(dwXRealPos>=CTHL_XSavePosBuff3+CTHL_PARAM_TDDW_LENGTH)
  991. {
  992. CTHL_TD_MotorStep++;
  993. CTHL_TD_MotorDelay = dwTickCount+ 1500;
  994. AxisContinueMoveChangeSpeed(X_AXIS,800,800,20,10);
  995. }
  996. }
  997. else
  998. {
  999. if(dwXRealPos>=CTHL_XSavePosBuff3+CTHL_PARAM_FKDW_DW_LENGTH)
  1000. {
  1001. CTHL_FKDW_VAVLE=1;
  1002. CTHL_TD_MotorStep++;
  1003. CTHL_TD_MotorDelay = dwTickCount+ 1500;
  1004. }
  1005. }
  1006. break;
  1007. case 20:
  1008. //定位感应亮时、位置到达时,或X轴停止时,停止X轴
  1009. if(dwTickCount >= CTHL_TD_MotorDelay)//3S为检测到停机
  1010. {
  1011. bCxcAuto=1;
  1012. CTHL_SetAlarmCode(CTHL_FXDW_ALARM,bRunning);//方块钩针定位异常
  1013. }
  1014. if(!CTHL_FKDW_IN)
  1015. {
  1016. CTHL_TD_MotorStep++;
  1017. CTHL_TD_MotorDelay = dwTickCount+ 0;
  1018. AxisEgmStop(X_AXIS);
  1019. AxisEgmStop(Y_AXIS);
  1020. }
  1021. if(CTHL_cZipCnt<1)
  1022. {
  1023. //长度限制
  1024. if(dwXRealPos >= CTHL_PARAM_first_CL_MAX_Length){ //大于第一条最长长度。没有检测的方块
  1025. bCxcAuto=1;
  1026. CTHL_SetAlarmCode(CTHL_WLZDTJ_ALARM,bRunning); //无拉链自动停机
  1027. }
  1028. }
  1029. else
  1030. {
  1031. //长度限制
  1032. if((dwXRealPos >=(long)(CTHL_PARAM_WLCDSHEZHI_LENTH + CTHL_LianLengthCheckFirst)))
  1033. {
  1034. bCxcAuto=1;
  1035. CTHL_SetAlarmCode(CTHL_WLZDTJ_ALARM,bRunning); //无拉链自动停机
  1036. }
  1037. }
  1038. break;
  1039. case 21://压轮动作,做一个反转动作,松一下拉链
  1040. if(dwTickCount >= CTHL_TD_MotorDelay&&!X_DRV)
  1041. {
  1042. CTHL_FZYL_VAVLE=1;//压轮
  1043. CTHL_TD_MotorStep++;
  1044. AxisMovePosAccDec(X_AXIS,1500,-30,1000,1000,20,20,0);
  1045. CTHL_TD_MotorDelay = dwTickCount + QDCT_VAVLE_ERROR_TIME;
  1046. }
  1047. break;
  1048. case 22://到位
  1049. //if(CTHL_FZYL_VAVLE&&CTHL_FZYL_Limit_IN)
  1050. {
  1051. CTHL_TD_MotorStep = 0;
  1052. CTHL_PARAM_TD_TIME=dwTickCount-tuodaitime;
  1053. if(CTHL_cZipCnt<1)
  1054. {
  1055. //测量过链感应与方块定位的距离
  1056. // CTHL_LianLengthCheckFirst=dwXRealPos;
  1057. CTHL_GLGY_FKDW_Length=dwXRealPos-CTHL_XSavePosBuff3;
  1058. //CTHL_PARAM_TDDW_LENGTH=CTHL_GLGY_FKDW_Length;
  1059. //测量方块感应与方块定位的距离
  1060. CTHL_FKGY_FKDW_Length=CTHL_LianLengthCheckFirst-CTHL_LianLengthXFZCheckFirst;
  1061. }
  1062. else
  1063. {
  1064. bFZ_LengthOK = 1;
  1065. }
  1066. CTHL_LianLengthCheck = dwXRealPos ;
  1067. CTHL_TD_MotorDelay = dwTickCount + 0;
  1068. }
  1069. //尺寸变化较大,重新测量
  1070. if(CTHL_cZipCnt>2)
  1071. {
  1072. if(abs(CTHL_LianLengthCheck-CTHL_LianLengthCheckFirst)>2000)
  1073. {
  1074. CTHL_cZipCnt=0;
  1075. }
  1076. }
  1077. break;
  1078. //由公分节调转
  1079. case 50:
  1080. if(CTHL_FK_Check_DW)
  1081. {
  1082. CTHL_TD_MotorStep = 51;
  1083. CTHL_GF_Change = 1;
  1084. SetPos(X_AXIS, 0);
  1085. }
  1086. break;
  1087. case 51:
  1088. if(CTHL_FK_Check)
  1089. {
  1090. CTHL_TD_MotorDelay = dwTickCount + 100;
  1091. }
  1092. else if(dwTickCount >= CTHL_TD_MotorDelay)
  1093. {
  1094. CTHL_TD_MotorStep = 52;
  1095. }
  1096. break;
  1097. case 52:
  1098. if(dwXRealPos>CTHL_GLGY_FKDW_Length+500)
  1099. {
  1100. if(CTHL_FK_Check_UP)
  1101. {
  1102. CTHL_XSavePosBuff = dwXRealPos;//方块位置
  1103. CTHL_TD_MotorStep=4;
  1104. }
  1105. }
  1106. break;
  1107. }
  1108. #endif
  1109. }
  1110. //穿入电机动作,Y轴
  1111. void CTHL_FZ_Motor(void) //
  1112. {
  1113. short *revise_buff;
  1114. #if 1
  1115. //1步开始, 穿链反转长度开始,
  1116. //20步开始 插销定位开始
  1117. switch(CTHL_FZ_MotorStep)
  1118. {
  1119. //穿入长度位置
  1120. case 1:
  1121. if(dwTickCount >= CTHL_FZ_MotorDelay)
  1122. {
  1123. cuanliantime=dwTickCount;
  1124. //Set_Ctrlmode_trans(Y_AXIS,TARR_MODE);
  1125. if(CTHL_cZipCnt<1)//前两次走
  1126. {
  1127. AxisContinueMoveAcc(X_AXIS,CTHL_PARAM_JXM_SPEED,DIR_N,1000,1000,30,50);
  1128. AxisContinueMoveAcc(Y_AXIS,CTHL_PARAM_JXM_SPEED,DIR_N,1000,1000,30,50);
  1129. }
  1130. else
  1131. {
  1132. AxisMovePosAccDecNotStop(X_AXIS,CTHL_PARAM_JXM_SPEED+80,-CTHL_PARAM_XMCR_SLOW_LENGTH,
  1133. 1000,CTHL_PARAM_JXM_SPEED,50,100,0);
  1134. AxisMovePosAccDecNotStop(Y_AXIS,CTHL_PARAM_JXM_SPEED,-CTHL_PARAM_XMCR_SLOW_LENGTH,
  1135. 1000,CTHL_PARAM_JXM_SPEED,50,100,0);
  1136. }
  1137. CTHL_FZ_MotorStep ++;
  1138. }
  1139. break;
  1140. case 2:
  1141. //if(dwYRealPos_com > CTHL_PARAM_TJXM_LENGTH)CTHL_TXM_VAVLE=0; //到达可推出侧推布带时
  1142. //if(dwYRealPos_com > CTHL_PARAM_SMXJ_LENGTH)CTHL_SMZ_VAVLE=1; //到达上模位置上摸下降
  1143. if(abs(dwXRealPos) >=CTHL_PARAM_XMCR_SLOW_LENGTH-50){//提前转换模式
  1144. Set_Ctrlmode_trans(Y_AXIS,TARR_MODE);
  1145. }
  1146. if(abs(dwXRealPos) >= CTHL_PARAM_XMCR_SLOW_LENGTH)//穿链结束,开始走链加速
  1147. {
  1148. CTHL_FZ_MotorDelay = dwTickCount+0;
  1149. if(CTHL_cZipCnt<1)
  1150. {
  1151. //Set_Ctrlmode_trans(Y_AXIS,TARR_MODE);
  1152. AxisContinueMoveChangeSpeed(X_AXIS,CTHL_PARAM_FZFirst_SPEED,1000,20,100);
  1153. AxisContinueMoveChangeSpeed(Y_AXIS,CTHL_PARAM_FZFirst_SPEED,1000,20,100);
  1154. }
  1155. else
  1156. {
  1157. //长度=反转长度-慢速长度-减速长度-修正长度;
  1158. //CTHL_LENTH = CTHL_LianLengthXFZCheckFirst-CTHL_PARAM_XMCR_SLOW_LENGTH+CTHL_PARAM_FZXZ_LENGTH-CTHL_PARAM_FZJS_LENGTH;
  1159. revise_buff=(short *)(&CTHL_PARAM_FZXZ_LENGTH);
  1160. CTHL_LENTH = CTHL_LianLengthAutoFZCRcheck-abs(dwXRealPos)+(*revise_buff)-CTHL_PARAM_FZJS_LENGTH;
  1161. AxisMovePosAccDecNotStop(X_AXIS,CTHL_PARAM_FZ_Speed,-CTHL_LENTH,
  1162. 1500,CTHL_PARAM_FZDS_Speed,100,120,0);
  1163. AxisMovePosAccDecNotStop(Y_AXIS,CTHL_PARAM_FZ_Speed+100,-CTHL_LENTH,
  1164. 1500,CTHL_PARAM_FZDS_Speed,100,120,0);
  1165. }
  1166. CTHL_FZ_MotorStep++;
  1167. }
  1168. //电机速度差太大
  1169. if(abs(dwXRealPos)>dwYRealPos_com+4500)
  1170. {
  1171. bCxcAuto=1;//停轴
  1172. SetEn(Y_AXIS, MOTOR_DISEN);
  1173. CTHL_SetAlarmCode(CTHL_FZMOTOR_ALARM,bRunning); //反转电机卡滞
  1174. }
  1175. comflag=1;
  1176. break;
  1177. case 3:
  1178. //if(dwYRealPos_com> CTHL_PARAM_TJXM_LENGTH)CTHL_TXM_VAVLE=0; //到达可推出侧推布带时
  1179. //if(dwYRealPos_com > CTHL_PARAM_SMXJ_LENGTH)CTHL_SMZ_VAVLE=1; //到达上模位置上摸下降
  1180. if(dwTickCount> CTHL_FZ_MotorDelay+CTHL_PARAM_TJXM_LENGTH)CTHL_TXM_VAVLE=0; //到达可推出侧推布带时
  1181. if(dwTickCount > CTHL_FZ_MotorDelay+CTHL_PARAM_SMXJ_LENGTH)CTHL_SMZ_VAVLE=1; //到达上模位置上摸
  1182. if(CTHL_cZipCnt<1)
  1183. {
  1184. CTHL_FZ_MotorStep++;
  1185. }
  1186. else
  1187. {
  1188. if(abs(dwXRealPos)>=CTHL_LENTH+CTHL_PARAM_XMCR_SLOW_LENGTH)
  1189. {
  1190. AxisMovePosAccDecNotStop(X_AXIS,CTHL_PARAM_FZDS_Speed,-CTHL_PARAM_FZJS_LENGTH,
  1191. 1500,900,120,80,CTHL_PARAM_FZJSDS_LENGTH);
  1192. AxisMovePosAccDecNotStop(Y_AXIS,CTHL_PARAM_FZDS_Speed,-CTHL_PARAM_FZJS_LENGTH,
  1193. 1500,900,120,80,CTHL_PARAM_FZJSDS_LENGTH);
  1194. CTHL_FZ_MotorStep++;
  1195. }
  1196. }
  1197. //长度超出报警
  1198. if(CTHL_cZipCnt>=1)
  1199. {
  1200. if(abs(dwXRealPos)>= (CTHL_PARAM_WLCDSHEZHI_LENTH+ CTHL_LianLengthXFZCheckFirst)) //拉带报警长度
  1201. {
  1202. bCxcAuto=1;//停轴
  1203. SetEn(Y_AXIS, MOTOR_DISEN);
  1204. CTHL_SetAlarmCode(CTHL_CRFK_ALARM,bRunning); //穿入方块超出预设长度
  1205. }
  1206. //方块检测异常(光纤)
  1207. if(abs(dwXRealPos) >= (CTHL_LianLengthXFZCheckFirst + 500))
  1208. {
  1209. bCxcAuto=1;//停轴
  1210. SetEn(Y_AXIS, MOTOR_DISEN);
  1211. CTHL_SetAlarmCode(CTHL_FK_Check_ALARM,bRunning);
  1212. }
  1213. }
  1214. else
  1215. {
  1216. if(abs(dwXRealPos) >= CTHL_PARAM_first_CL_MAX_Length){ //位置大于第一条拉链长度
  1217. bCxcAuto=1;//停轴
  1218. SetEn(Y_AXIS, MOTOR_DISEN);
  1219. CTHL_SetAlarmCode(CTHL_CRFK_ALARM,bRunning); //穿入方块超出预设长度
  1220. }
  1221. }
  1222. //电机速度差太大
  1223. if(abs(dwXRealPos)>dwYRealPos_com+4500)
  1224. {
  1225. bCxcAuto=1;//停轴
  1226. SetEn(Y_AXIS, MOTOR_DISEN);
  1227. //CTHL_FZYL_VAVLE=0;
  1228. CTHL_SetAlarmCode(CTHL_FZMOTOR_ALARM,bRunning); //穿入方块超出预设长度
  1229. }
  1230. break;
  1231. case 4:
  1232. //if(dwYRealPos_com > CTHL_PARAM_TJXM_LENGTH)CTHL_TXM_VAVLE=0; //到达可推出侧推布带时
  1233. //if(dwYRealPos_com > CTHL_PARAM_SMXJ_LENGTH)CTHL_SMZ_VAVLE=1; //到达上模位置上摸下降
  1234. if(dwTickCount> CTHL_FZ_MotorDelay+CTHL_PARAM_TJXM_LENGTH)CTHL_TXM_VAVLE=0; //到达可推出侧推布带时
  1235. if(dwTickCount > CTHL_FZ_MotorDelay+CTHL_PARAM_SMXJ_LENGTH)CTHL_SMZ_VAVLE=1; //到达上模位置上摸
  1236. if((abs(dwXRealPos) > 500) && CTHL_FKGY_IN_UP)//位置大于100,且方块感应上升沿
  1237. {
  1238. //Set_Ctrlmode_trans(Y_AXIS,TARR_MODE);
  1239. CTHL_XSavePosBuff1 = abs(dwXRealPos);
  1240. if(CTHL_cZipCnt<1){//记录前两条的方块感应长度;
  1241. //CTHL_FKGY_Length=abs(dwXRealPos);
  1242. //停机距离调整
  1243. CTHL_LENTH=0;
  1244. AxisMovePosAccDecNotStop(X_AXIS,500,-CTHL_LENTH,
  1245. 800,800,15,25,0);
  1246. AxisMovePosAccDecNotStop(Y_AXIS,600,-CTHL_LENTH,
  1247. 800,800,15,25,0);
  1248. }
  1249. else {
  1250. //停机距离调整
  1251. CTHL_LENTH=CTHL_PARAM_FZSTOP_LENGTH;
  1252. AxisMovePosAccDecNotStop(X_AXIS,500,-CTHL_LENTH,
  1253. 800,800,15,25,0);
  1254. AxisMovePosAccDecNotStop(Y_AXIS,600,-CTHL_LENTH,
  1255. 800,800,15,25,0);
  1256. }
  1257. CTHL_FZ_MotorStep++;
  1258. //启动定时器
  1259. CTHL_FZ_MotorDelay = dwTickCount +2000;//定时2S定位完成
  1260. }
  1261. //长度超出报警
  1262. if(CTHL_cZipCnt>=1)
  1263. {
  1264. if(abs(dwXRealPos)>= (CTHL_PARAM_WLCDSHEZHI_LENTH+ CTHL_LianLengthXFZCheckFirst)) //拉带报警长度
  1265. {
  1266. bCxcAuto=1;//停轴
  1267. SetEn(Y_AXIS, MOTOR_DISEN);
  1268. CTHL_SetAlarmCode(CTHL_CRFK_ALARM,bRunning); //穿入方块超出预设长度
  1269. }
  1270. //方块检测异常(光纤)
  1271. if(abs(dwXRealPos) >= (CTHL_LianLengthXFZCheckFirst + 500))
  1272. {
  1273. bCxcAuto=1;//停轴
  1274. SetEn(Y_AXIS, MOTOR_DISEN);
  1275. CTHL_SetAlarmCode(CTHL_FK_Check_ALARM,bRunning);
  1276. }
  1277. }
  1278. else
  1279. {
  1280. if(abs(dwXRealPos) >= CTHL_PARAM_first_CL_MAX_Length){ //位置大于第一条拉链长度
  1281. bCxcAuto=1;//停轴
  1282. CTHL_SetAlarmCode(CTHL_CRFK_ALARM,bRunning); //穿入方块超出预设长度
  1283. }
  1284. }
  1285. //电机速度差太大
  1286. if(abs(dwXRealPos)>dwYRealPos_com+4500)
  1287. {
  1288. bCxcAuto=1;//停轴
  1289. SetEn(Y_AXIS, MOTOR_DISEN);
  1290. CTHL_FZYL_VAVLE=0;
  1291. CTHL_SetAlarmCode(CTHL_FZMOTOR_ALARM,bRunning); //穿入方块超出预设长度
  1292. }
  1293. break;
  1294. case 5: //方块有亮到灭 ,完成
  1295. if(CTHL_cZipCnt<1)
  1296. {
  1297. if(!CTHL_FKGY_IN)
  1298. {
  1299. CTHL_FZ_MotorStep++;
  1300. AxisDecStop(X_AXIS);
  1301. AxisEgmStop(Y_AXIS);
  1302. CTHL_FZ_MotorDelay = dwTickCount +1;
  1303. Set_Ctrlmode_trans(Y_AXIS,POS_MODE);
  1304. }
  1305. else if(dwTickCount >= CTHL_FZ_MotorDelay){//方块检测异常
  1306. bCxcAuto=1;//停轴
  1307. SetEn(Y_AXIS, MOTOR_DISEN);
  1308. CTHL_SetAlarmCode(CTHL_FK_Check_ALARM,bRunning);
  1309. }
  1310. }
  1311. else
  1312. {
  1313. if(!CTHL_FKGY_IN&&abs(dwXRealPos)>=CTHL_XSavePosBuff1+30)
  1314. {
  1315. CTHL_FZ_MotorStep++;
  1316. AxisDecStop(X_AXIS);
  1317. AxisEgmStop(Y_AXIS);
  1318. CTHL_FZ_MotorDelay = dwTickCount +1;
  1319. Set_Ctrlmode_trans(Y_AXIS,POS_MODE);
  1320. }
  1321. else if(dwTickCount >= CTHL_FZ_MotorDelay){//方块检测异常
  1322. bCxcAuto=1;//停轴
  1323. SetEn(Y_AXIS, MOTOR_DISEN);
  1324. CTHL_SetAlarmCode(CTHL_FK_Check_ALARM,bRunning);
  1325. }
  1326. }
  1327. break;
  1328. case 6: //定位到位后,X轴进行正转拖紧一下带;
  1329. if(!Y_DRV && !X_DRV&&dwTickCount >= CTHL_FZ_MotorDelay )
  1330. {
  1331. if(CTHL_cZipCnt <1)
  1332. {
  1333. CTHL_LianLengthXFZCheckFirst =abs(dwXRealPos);
  1334. AxisMovePosAccDec(Y_AXIS,1500,CTHL_PARAM_FZSJ_LENGTH,1500,600,20,20,0);
  1335. }
  1336. else
  1337. {
  1338. if(CTHL_cZipCnt <2)
  1339. {
  1340. AxisMovePosAccDec(Y_AXIS,1500,CTHL_PARAM_FZSJ_LENGTH,1500,600,20,20,0);
  1341. }
  1342. else
  1343. {
  1344. AxisMovePosAccDec(Y_AXIS,1500,CTHL_PARAM_FZSJ_LENGTH,1500,600,20,20,0);
  1345. }
  1346. }
  1347. CTHL_FKGY_STOP_Length=abs(dwXRealPos)-CTHL_XSavePosBuff1;
  1348. CTHL_LianLengthXFZCheck=abs(dwXRealPos);
  1349. CTHL_FZ_MotorStep++;
  1350. }
  1351. break;
  1352. case 7: //定位到位后,X轴进行正转拖紧一下带;
  1353. CTHL_FZ_MotorStep=0;
  1354. CTHL_PARAM_CL_TIME=dwTickCount-cuanliantime;
  1355. break;
  1356. }
  1357. #endif
  1358. }
  1359. //装拉头动作
  1360. void CTHL_ZLT_Step(void)
  1361. {
  1362. switch(CTHL_ZhuangLiaoStep)
  1363. {
  1364. case 1://判断是否有拉头
  1365. if(bZhuangLiaoOkFlg){//装拉头完成,则等待
  1366. CTHL_ZhuangLiaoStep = 0;
  1367. }
  1368. else if(dwTickCount >= CTHL_ZhuangLiaoDelay)
  1369. {
  1370. zlttime=dwTickCount;
  1371. if(!CTHL_JLTou_VAVLE&&!CTHL_JLiao_Limit_IN && CTHL_LTou_Check||CTHL_JLTou_VAVLE ){ //夹拉头、无拉头到位信号、缺拉头有信号;说明没有拉头
  1372. if(CTHL_CTXM_Origin_IN && !CTHL_CTXM_VAVLE){ //判断下模是否在原位
  1373. CTHL_ZhuangLiaoDelay = dwTickCount + 5;
  1374. if(CTHL_TLiaoStep == 0){//执行给拉头步骤动作
  1375. CTHL_TLiaoStep = 1;
  1376. }
  1377. CTHL_ZhuangLiaoStep++;
  1378. }
  1379. else if(dwTickCount >= CTHL_ZhuangLiaoDelay + QDCT_VAVLE_ERROR_TIME){
  1380. CTHL_wltzi=1;//装拉头故障标志
  1381. CTHL_SetAlarmCode(CTHL_CTXM_Origin_ALARM,bRunning);//警告下模原位异常
  1382. }
  1383. }
  1384. else if(!CTHL_JLTou_VAVLE&&CTHL_JLiao_Limit_IN && !CTHL_LTou_Check){//夹拉头、有拉头到位信号、缺拉头无信号;说明拉头
  1385. CTHL_ZhuangLiaoDelay = dwTickCount + 40;
  1386. CTHL_MGuo_VAVLE = 1;
  1387. CTHL_ZhuangLiaoStep = 12;
  1388. }
  1389. else{//由于上电已经置CTHL_JLTou_VAVLE=0,所有剩下的情况时拉头到位有信号、缺料到位有信号的情况,报警
  1390. CTHL_wltzi=1;
  1391. CTHL_SetAlarmCode(CTHL_JLT_MZ_ALARM,bRunning);//夹拉头模组异常
  1392. }
  1393. }
  1394. break;
  1395. case 2://延时松开夹,和码钩
  1396. if(dwTickCount >= CTHL_ZhuangLiaoDelay)
  1397. {
  1398. CTHL_JLTou_VAVLE = 1; //夹拉头松开
  1399. CTHL_MGuo_VAVLE = 0; //码钩松开
  1400. CTHL_ZhuangLiaoDelay = dwTickCount + 10;
  1401. CTHL_ZhuangLiaoStep++;
  1402. }
  1403. break;
  1404. case 3: // 给拉头动作步骤完成
  1405. if(CTHL_TLiaoStep == 0){ //推料已经完成
  1406. if(dwTickCount >= CTHL_ZhuangLiaoDelay){
  1407. if(!CTHL_JLiao_Limit_IN&&CTHL_JLTou_VAVLE)//夹拉头不在限位,
  1408. {
  1409. if(CTHL_XCJC_Origin_IN&&!CTHL_XCJC_VAVLE){//插销检测在原位
  1410. CTHL_ZhuangLiaoDelay = dwTickCount + CTHL_PARAM_HSLiao_FORWARDDELAY;
  1411. CTHL_ZhuangLiaoStep++;
  1412. }
  1413. else if(dwTickCount >= CTHL_ZhuangLiaoDelay + QDCT_VAVLE_ERROR_TIME){
  1414. CTHL_wltzi=1;
  1415. CTHL_SetAlarmCode(CTHL_XCJC_Origin_ALARM,bRunning);//插销钩针原位异常
  1416. }
  1417. }
  1418. else if(dwTickCount >= CTHL_ZhuangLiaoDelay + QDCT_VAVLE_ERROR_TIME){
  1419. CTHL_wltzi=1;
  1420. CTHL_SetAlarmCode(CTHL_JLT_Limit_ALARM,bRunning);//夹拉头到位异常
  1421. }
  1422. }
  1423. }
  1424. break;
  1425. case 4://延时横送
  1426. if(dwTickCount >= CTHL_ZhuangLiaoDelay)
  1427. {
  1428. CTHL_HSLiao_VAVLE = 1; //横送阀动作
  1429. CTHL_ZhuangLiaoDelay = dwTickCount + QDCT_VAVLE_ERROR_TIME;
  1430. CTHL_ZhuangLiaoStep++;
  1431. }
  1432. break;
  1433. case 5://横推拉头到位后延时
  1434. if(CTHL_HSLiao_Limit_IN && !CTHL_HSLiao_Origin_IN){//横送拉头在到位
  1435. CTHL_ZhuangLiaoDelay = dwTickCount + CTHL_PARAM_HSLiao_BACKDELAY;//停顿10ms,再接拉头
  1436. CTHL_ZhuangLiaoStep ++;
  1437. }
  1438. else if(dwTickCount >= CTHL_ZhuangLiaoDelay){//横送拉头超时,重新横送一次
  1439. CTHL_ZhuangLiaoStep = 30;
  1440. }
  1441. break;
  1442. case 6://接拉头动作
  1443. if(dwTickCount >= CTHL_ZhuangLiaoDelay)
  1444. {
  1445. CTHL_JLTou_VAVLE = 0;
  1446. CTHL_ZhuangLiaoDelay = dwTickCount + QDCT_VAVLE_ERROR_TIME;
  1447. CTHL_ZhuangLiaoStep ++;
  1448. }
  1449. break;
  1450. case 7: //判断接拉头情况
  1451. if(CTHL_JLiao_Limit_IN&&!CTHL_LTou_Check)//接拉头到位,且缺拉头无信号,有拉头
  1452. {
  1453. CTHL_ZhuangLiaoStep ++;
  1454. CTHL_ZhuangLiaoDelay=dwTickCount+CTHL_PARAM_JLiaoCH_DELAY;//延时检测
  1455. }
  1456. else if(!CTHL_JLiao_Limit_IN&&CTHL_LTou_Check)//接拉头到位无信号,且缺拉头有信号,无拉头
  1457. {
  1458. //重新装拉头3次
  1459. CTHL_TryCnt++;
  1460. CTHL_JLTou_VAVLE = 1; //接拉头关
  1461. CTHL_HSLiao_VAVLE = 0; //横送回退
  1462. bTuiLaTouOkFlg = 0;
  1463. if(CTHL_TryCnt >= 3)
  1464. {
  1465. CTHL_TryCnt = 0;
  1466. bZhuangLiaoOkFlg = 0;//装拉头失败
  1467. CTHL_ZhuangLiaoStep = 0;//重新开始
  1468. CTHL_wltzi=1;
  1469. //user_datas[127]=4;//测试用
  1470. CTHL_SetAlarmCode(CTHL_ZLT_ALARM,bRunning);//装拉头异常
  1471. }
  1472. else
  1473. {
  1474. CTHL_ZhuangLiaoStep = 19; //重新送3次
  1475. CTHL_ZhuangLiaoDelay = dwTickCount + QDCT_VAVLE_ERROR_TIME;
  1476. }
  1477. }
  1478. else if(dwTickCount >= CTHL_ZhuangLiaoDelay+QDCT_VAVLE_ERROR_TIME) //接拉头(接料)到们信号异常
  1479. {
  1480. CTHL_SetAlarmCode(CTHL_JLT_MZ_ALARM,bRunning);//接料到位异常
  1481. CTHL_HSLiao_VAVLE = 0; //横送会回位
  1482. CTHL_JLTou_VAVLE = 1; //接拉头松开
  1483. CTHL_ZhuangLiaoStep = 0;//本次装料结束
  1484. }
  1485. break;
  1486. case 8: //二次检测
  1487. if(dwTickCount >= CTHL_ZhuangLiaoDelay)
  1488. {
  1489. if(CTHL_JLiao_Limit_IN&&!CTHL_LTou_Check)//接拉头到位,且缺拉头无信号,有拉头
  1490. {
  1491. CTHL_ZhuangLiaoStep ++;
  1492. CTHL_ZhuangLiaoDelay = dwTickCount + CTHL_PARAM_MaGou_DELAY;//延时码钩
  1493. }
  1494. else //接拉头到位无信号,且缺拉头有信号,无拉头
  1495. {
  1496. //重新装拉头3次
  1497. CTHL_TryCnt++;
  1498. CTHL_JLTou_VAVLE = 1; //接拉头关
  1499. CTHL_HSLiao_VAVLE = 0; //横送回退
  1500. bTuiLaTouOkFlg = 0;
  1501. if(CTHL_TryCnt >= 3)
  1502. {
  1503. CTHL_TryCnt = 0;
  1504. bZhuangLiaoOkFlg = 0;//装拉头失败
  1505. CTHL_ZhuangLiaoStep = 0;//重新开始
  1506. CTHL_wltzi=1;
  1507. //user_datas[127]=4;//测试用
  1508. CTHL_SetAlarmCode(CTHL_ZLT_ALARM,bRunning);//装拉头异常
  1509. }
  1510. else
  1511. {
  1512. CTHL_ZhuangLiaoStep = 19; //重新送3次
  1513. CTHL_ZhuangLiaoDelay = dwTickCount + QDCT_VAVLE_ERROR_TIME;
  1514. }
  1515. }
  1516. }
  1517. break;
  1518. case 9: //码钩动作
  1519. if(dwTickCount >= CTHL_ZhuangLiaoDelay) //延时码勾
  1520. {
  1521. CTHL_MGuo_VAVLE = 1; //码勾输出
  1522. CTHL_ZhuangLiaoStep++;
  1523. CTHL_ZhuangLiaoDelay = dwTickCount + CTHL_PARAM_HSLiao_BACKDELAY;//横送回退延时
  1524. bTuiLaTouOkFlg = 0;
  1525. }
  1526. break;
  1527. case 10: //横送回退
  1528. if(dwTickCount >= CTHL_ZhuangLiaoDelay)
  1529. {
  1530. CTHL_HSLiao_VAVLE = 0;
  1531. CTHL_ZhuangLiaoStep++;
  1532. CTHL_ZhuangLiaoDelay = dwTickCount + QDCT_VAVLE_ERROR_TIME;
  1533. }
  1534. break;
  1535. case 11: //横送原位,给拉头,并判断是否存在着拉头。
  1536. if(!CTHL_HSLiao_Limit_IN&&CTHL_HSLiao_Origin_IN) //横送原位
  1537. {
  1538. CTHL_ZhuangLiaoStep++;
  1539. CTHL_TLiaoStep = 1; //推拉头,步骤动作
  1540. CTHL_ZhuangLiaoDelay = dwTickCount+5 ; //再次检测拉头
  1541. }
  1542. else if(dwTickCount >= CTHL_ZhuangLiaoDelay)//横送原位位异常
  1543. {
  1544. CTHL_wltzi=1;
  1545. CTHL_SetAlarmCode(CTHL_HSLiao_Origin_ALARM,bRunning);
  1546. if(bRunning)//异常后自动暂停
  1547. {
  1548. CTHL_ZhuangLiaoStep = 0 ;//重新开始
  1549. }
  1550. }
  1551. break;
  1552. case 12: //再次检测是否存在拉头
  1553. if(dwTickCount >= CTHL_ZhuangLiaoDelay)
  1554. {
  1555. if(CTHL_JLiao_Limit_IN&&!CTHL_LTou_Check)//接拉头到位,且缺拉头无信号,有拉头
  1556. {
  1557. //bZhuangLiaoOkFlg = 1;//装拉头完成
  1558. CTHL_ZhuangLiaoStep++;
  1559. }
  1560. else
  1561. {
  1562. //重新装拉头3次
  1563. CTHL_TryCnt++;
  1564. CTHL_JLTou_VAVLE = 1; //接拉头关
  1565. CTHL_MGuo_VAVLE = 0;
  1566. if(CTHL_TryCnt >= 3)
  1567. {
  1568. CTHL_TryCnt = 0;
  1569. bZhuangLiaoOkFlg = 0;//装拉头失败
  1570. CTHL_ZhuangLiaoStep = 0;//重新开始
  1571. CTHL_wltzi=1;
  1572. //user_datas[127]=4;//测试用
  1573. CTHL_SetAlarmCode(CTHL_ZLT_ALARM,bRunning);//装拉头异常
  1574. }
  1575. else
  1576. {
  1577. CTHL_ZhuangLiaoStep = 20; //重新送3次
  1578. CTHL_ZhuangLiaoDelay = dwTickCount + QDCT_VAVLE_ERROR_TIME;
  1579. }
  1580. }
  1581. }
  1582. break;
  1583. case 13: //检测是否有下模上升的条件
  1584. if(!CTHL_TXM_VAVLE && !CTHL_TXM_Limit_IN&&!CTHL_SMZ_VAVLE&&!CTHL_SML_Limit_IN&&bXiaoMOUpFlg)//侧推在原位、上摸在原位,下模上升
  1585. {
  1586. CTHL_CTXM_VAVLE = 1; //下模上升
  1587. CTHL_XCJC_VAVLE=1;//插销检测随着下模上升
  1588. CTHL_ZhuangLiaoDelay = dwTickCount + CTHL_VAVLE_ERROR_TIME;
  1589. CTHL_ZhuangLiaoStep++;
  1590. }
  1591. break;
  1592. case 14: //下模上升到位,插销钩针到位
  1593. if(CTHL_CTXM_VAVLE&&CTHL_CTXM_Limit_IN)//下模上到位
  1594. {
  1595. bZhuangLiaoOkFlg = 1;//装拉头完成
  1596. bXiaoMOUpFlg=0;
  1597. CTHL_ZhuangLiaoStep = 0;
  1598. CTHL_PARAM_ZLT_TIME=dwTickCount-zlttime;
  1599. }
  1600. else if((dwTickCount >= CTHL_ZhuangLiaoDelay))
  1601. {
  1602. CTHL_SetAlarmCode(CTHL_CTXM_Limit_ALARM,bRunning);//横送料原位异常
  1603. }
  1604. break;
  1605. case 19: //横送原位,给拉头,并判断是否存在着拉头。
  1606. if(!CTHL_HSLiao_Limit_IN&&CTHL_HSLiao_Origin_IN) //横送原位
  1607. {
  1608. CTHL_ZhuangLiaoStep = 20;
  1609. }
  1610. else if(dwTickCount >= CTHL_ZhuangLiaoDelay)//横送原位位异常
  1611. {
  1612. CTHL_wltzi=1;
  1613. CTHL_SetAlarmCode(CTHL_HSLiao_Origin_ALARM,bRunning);
  1614. if(bRunning)CTHL_ZhuangLiaoStep = 0 ;//重新开始,结束本次装拉头
  1615. }
  1616. break;
  1617. case 20: //重装拉头
  1618. if(CTHL_JLTou_VAVLE&&!CTHL_JLiao_Limit_IN && !CTHL_LTou_Check )//夹拉头松开
  1619. {
  1620. CTHL_ZhuangLiaoStep = 1;
  1621. CTHL_ZhuangLiaoDelay = dwTickCount + 10;
  1622. }
  1623. else if(dwTickCount >=CTHL_ZhuangLiaoDelay)
  1624. {
  1625. CTHL_wltzi=1;
  1626. CTHL_SetAlarmCode(CTHL_JLT_MZ_ALARM,bRunning);//夹拉头松开异常
  1627. }
  1628. break;
  1629. //
  1630. case 30://横送回退
  1631. CTHL_HSLiao_VAVLE=0;
  1632. CTHL_ZhuangLiaoStep = 31;
  1633. CTHL_ZhuangLiaoDelay = dwTickCount + 200;
  1634. break;
  1635. case 31://横送前进
  1636. if(dwTickCount >=CTHL_ZhuangLiaoDelay)
  1637. {
  1638. CTHL_HSLiao_VAVLE=1;
  1639. CTHL_ZhuangLiaoStep = 32;
  1640. CTHL_ZhuangLiaoDelay = dwTickCount + 3000;
  1641. }
  1642. break;
  1643. case 32://横送完成
  1644. if(CTHL_HSLiao_Limit_IN && !CTHL_HSLiao_Origin_IN)
  1645. {
  1646. CTHL_ZhuangLiaoStep = 5;
  1647. CTHL_ZhuangLiaoDelay = dwTickCount + 10;
  1648. }
  1649. else if(dwTickCount >= CTHL_ZhuangLiaoDelay)//异常告警
  1650. {
  1651. CTHL_wltzi=1;
  1652. CTHL_SetAlarmCode(CTHL_HSLiao_Limit_ALARM,bRunning);
  1653. CTHL_ZhuangLiaoStep = 0;
  1654. CTHL_HSLiao_VAVLE = 0;
  1655. }
  1656. }
  1657. }
  1658. //给拉头动作
  1659. void CTHL_TLiao_Step(void)
  1660. {
  1661. switch(CTHL_TLiaoStep)
  1662. {
  1663. case 1://
  1664. if(bTuiLaTouOkFlg)//推拉头完成
  1665. {
  1666. CTHL_TLiaoStep = 0;
  1667. }
  1668. else
  1669. {
  1670. CTHL_TLiao_Delay = dwTickCount + CTHL_VAVLE_ERROR_TIME;//气缸电磁阀不动作判断时间
  1671. CTHL_TLiaoStep++;
  1672. }
  1673. break;
  1674. case 2: //信号到位后,稳定一会给拉头
  1675. if(CTHL_HSLiao_Origin_IN && !CTHL_HSLiao_Limit_IN && !CTHL_HSLiao_VAVLE)//横送料在原位,横送料不在限位,横送气缸不动作
  1676. {
  1677. CTHL_TLiao_Delay = dwTickCount + CTHL_PARAM_TLiao_FORWARDDELAY;//信号到位后,稳定一段时间动作
  1678. CTHL_TLiaoStep++;
  1679. }
  1680. else if(dwTickCount >= CTHL_TLiao_Delay)
  1681. {
  1682. CTHL_wltzi=1;
  1683. CTHL_SetAlarmCode(CTHL_HSLiao_Origin_ALARM,bRunning); // //横送料原位异常
  1684. }
  1685. break;
  1686. case 3: //给拉头
  1687. if(dwTickCount >= CTHL_TLiao_Delay)
  1688. {
  1689. CTHL_TLiao_VAVLE = 1; //推料(推拉头)输出
  1690. CTHL_TLiao_Delay = dwTickCount + CTHL_VAVLE_ERROR_TIME;//气缸电磁阀不动作判断时间
  1691. CTHL_TLiaoStep++;
  1692. }
  1693. break;
  1694. case 4: //给拉头到位后,延时一段时间
  1695. if(CTHL_TLiao_Limit_IN)//给拉头到位
  1696. {
  1697. CTHL_TLiao_Delay = dwTickCount + CTHL_PARAM_TLiao_BACKDELAY;//推拉头到位后停留时间
  1698. CTHL_TLiaoStep++;
  1699. }
  1700. else if(dwTickCount >= CTHL_TLiao_Delay)
  1701. {
  1702. CTHL_wltzi=1;
  1703. CTHL_SetAlarmCode(CTHL_TLiao_Limit_ALARM,bRunning); //推料到位异常
  1704. }
  1705. break;
  1706. case 5://推料到位,推料气缸回退
  1707. if(dwTickCount >= CTHL_TLiao_Delay)
  1708. {
  1709. CTHL_TLiao_VAVLE = 0;//推料回退
  1710. CTHL_TLiao_Delay = dwTickCount + CTHL_VAVLE_ERROR_TIME; //气缸电磁阀不动作判断时间
  1711. CTHL_TLiaoStep++;
  1712. }
  1713. break;
  1714. case 6://推料气缸回退到位
  1715. if(!CTHL_TLiao_Limit_IN)//推拉头动作完成
  1716. {
  1717. CTHL_TLiaoStep = 0;
  1718. CTHL_TLiao_Delay = dwTickCount;
  1719. bTuiLaTouOkFlg = 1;
  1720. }
  1721. else if(dwTickCount >= CTHL_TLiao_Delay)
  1722. {
  1723. CTHL_wltzi=1;
  1724. CTHL_SetAlarmCode(CTHL_TLiao_Limit_ALARM,0);//给料到位异常
  1725. }
  1726. break;
  1727. }
  1728. }
  1729. //振动盘控制
  1730. void CTHL_ZhenDongAction(void)
  1731. {
  1732. #if 0
  1733. if((CTHL_bDLP || bRunning) && CTHL_ZhenDongPian_OUT && CTHL_PARAM_DALIAOPIAN)
  1734. {
  1735. if(CT_DLP_Time >= dwTickCount)
  1736. {
  1737. CT_ZDP_Delay = dwTickCount + CT_PARAM_DLP_TIME + 40;
  1738. CT_DaLaPian_VAVLE = ~CT_DaLaPian_VAVLE;
  1739. }
  1740. }
  1741. else
  1742. CT_DaLaPian_VAVLE = 0;
  1743. #endif
  1744. #if 1
  1745. // if(bRunning)
  1746. // {
  1747. if(!CTHL_PARAM_ZDP_AUTO)
  1748. {
  1749. if(CTHL_ZhenDongPian_OUT == 0)//振动盘未启动
  1750. {
  1751. if(!CTHL_ZDP_IN)//未检测启动
  1752. {
  1753. if(dwTickCount >= CTHL_ZDP_Delay)
  1754. {
  1755. CTHL_ZhenDongPian_OUT = 1;
  1756. CTHL_ZDP_Delay = dwTickCount + CTHL_PARAM_ZDP_Stop_TIME;//CTHL_PARAM_ZDP_Stop_TIME + 50;
  1757. }
  1758. }
  1759. else
  1760. {
  1761. CTHL_ZDP_Delay = dwTickCount + CTHL_PARAM_ZDP_Start_TIME;//CTHL_PARAM_ZDP_Start_TIME;
  1762. }
  1763. }
  1764. else
  1765. {
  1766. if(CTHL_ZDP_IN)
  1767. {
  1768. if(dwTickCount >= CTHL_ZDP_Delay)
  1769. {
  1770. CTHL_ZhenDongPian_OUT = 0;
  1771. CTHL_ZDP_Delay = dwTickCount + CTHL_PARAM_ZDP_Start_TIME;//CTHL_PARAM_ZDP_Start_TIME
  1772. }
  1773. }
  1774. else
  1775. CTHL_ZDP_Delay = dwTickCount + CTHL_PARAM_ZDP_Stop_TIME;//CTHL_PARAM_ZDP_Stop_TIME+ 50;
  1776. }
  1777. }
  1778. else if (CTHL_PARAM_ZDP_AUTO ==1 )
  1779. {
  1780. CTHL_ZhenDongPian_OUT=0;
  1781. CTHL_ZDP_Delay = dwTickCount + 0;
  1782. }
  1783. else if(CTHL_PARAM_ZDP_AUTO == 2)
  1784. {
  1785. CTHL_ZhenDongPian_OUT=1;
  1786. CTHL_ZDP_Delay = dwTickCount + 0;
  1787. }
  1788. #endif
  1789. }
  1790. //手动动作
  1791. void CTHL_ManualAction(void)
  1792. {
  1793. if(CTHL_bBaoJin) //报警清除加松轴
  1794. {
  1795. CTHL_bBaoJin=0;
  1796. SetEn(Y_AXIS, MOTOR_DISEN);
  1797. SetEn(X_AXIS, MOTOR_DISEN);
  1798. SetAlarmCode(CTHL_ALARM_ADDR,0);
  1799. if((GetAlarm(X_AXIS)==1 || GetAlarm(Y_AXIS)==1) && !CTHL_PARAM_DBSF_MODE)
  1800. {
  1801. SetClr(X_AXIS, MOTOR_NOALARM);
  1802. SetClr(Y_AXIS, MOTOR_NOALARM);
  1803. CTHL_bSFBBAOJIN_Delay= dwTickCount + 2000;
  1804. }
  1805. if(CTHL_PARAM_DBSF_MODE)
  1806. {
  1807. if(!CTHL_SF_ALR_IN)
  1808. {
  1809. CTHL_SF_ALR_CLR=1;
  1810. CTHL_bSFBBAOJIN_Delay= dwTickCount + 2000;
  1811. }
  1812. }
  1813. }
  1814. if(bRunning == 0)
  1815. {
  1816. if(bClearTotal) //切断计数清零
  1817. {
  1818. bClearTotal = 0;
  1819. ClrcToTal(QDCT_TOTAL_ADDR);
  1820. }
  1821. if(CTHL_bHSL) //手动横送料
  1822. {
  1823. CTHL_bHSL= 0;
  1824. if(CTHL_HSLiao_VAVLE)
  1825. {
  1826. CTHL_HSLiao_VAVLE = 0;//~XY_CTHL_HSLiao_VAVLE;
  1827. }
  1828. else if((!CTHL_CTXM_VAVLE && CTHL_CTXM_Origin_IN ) && (!CTHL_bMG || (CTHL_bMG && CTHL_LTou_Check)))//下模在原位
  1829. {
  1830. if(!CTHL_TLiao_VAVLE&&!CTHL_TLiao_Limit_IN)//推拉头在原位
  1831. {
  1832. if(!CTHL_XCJC_VAVLE&& CTHL_XCJC_Origin_IN)//插销钩针在原点
  1833. {
  1834. if(CTHL_JLTou_VAVLE&&!CTHL_LTou_Check&&!CTHL_JLiao_Limit_IN)
  1835. {
  1836. CTHL_HSLiao_VAVLE = 1;
  1837. }
  1838. else
  1839. {
  1840. CTHL_SetAlarmCode(CTHL_JLT_Limit_ALARM,0);//夹拉头异常
  1841. }
  1842. }
  1843. else
  1844. {
  1845. CTHL_SetAlarmCode(CTHL_XCJC_Origin_ALARM,0);//插销钩针原位异常
  1846. }
  1847. }
  1848. else
  1849. {
  1850. CTHL_SetAlarmCode(CTHL_TLiao_Limit_ALARM,0);
  1851. }
  1852. }
  1853. else
  1854. {
  1855. CTHL_SetAlarmCode(CTHL_CTXM_Origin_ALARM,0);
  1856. }
  1857. }
  1858. if(CTHL_bJLT)//接拉头
  1859. {
  1860. CTHL_bJLT = 0;
  1861. CTHL_MGuo_VAVLE = 0;
  1862. CTHL_JLTou_VAVLE = !CTHL_JLTou_VAVLE;
  1863. }
  1864. if(CTHL_bTLiao ) //手动推料(给拉头)
  1865. {
  1866. CTHL_bTLiao = 0;
  1867. if(CTHL_TLiao_VAVLE)
  1868. CTHL_TLiao_VAVLE = 0;//CTHL_TLiao_VAVLE;
  1869. else if(!CTHL_HSLiao_VAVLE && CTHL_HSLiao_Origin_IN)
  1870. {
  1871. CTHL_TLiao_VAVLE = 1;
  1872. }
  1873. else//条件警告
  1874. {
  1875. CTHL_SetAlarmCode(CTHL_HSLiao_Origin_ALARM,0);//横送料原位异常
  1876. }
  1877. }
  1878. if(CTHL_bMG) //码勾
  1879. {
  1880. CTHL_bMG = 0;
  1881. CTHL_MGuo_VAVLE = !CTHL_MGuo_VAVLE;
  1882. }
  1883. if(CTHL_bFKDW) //方块检测
  1884. {
  1885. CTHL_bFKDW = 0;
  1886. CTHL_FKDW_VAVLE = !CTHL_FKDW_VAVLE;
  1887. }
  1888. if(CTHL_bCTXM) //下模
  1889. {
  1890. CTHL_bCTXM = 0;
  1891. if(CTHL_CTXM_VAVLE)
  1892. {
  1893. CTHL_CTXM_VAVLE = 0;
  1894. }
  1895. else if(!CTHL_HSLiao_VAVLE && CTHL_HSLiao_Origin_IN ) //横推在原点
  1896. {
  1897. CTHL_CTXM_VAVLE=1;
  1898. }
  1899. else//条件警告
  1900. {
  1901. CTHL_SetAlarmCode(CTHL_HSLiao_Origin_ALARM,0);//横送料原位异常
  1902. }
  1903. }
  1904. //侧推布带
  1905. if(CTHL_bTXM)
  1906. {
  1907. CTHL_bTXM=0;
  1908. if(CTHL_TXM_VAVLE)
  1909. {
  1910. CTHL_TXM_VAVLE = 0;
  1911. }
  1912. else if(!CTHL_SMZ_VAVLE&&!CTHL_SML_Limit_IN)
  1913. {
  1914. CTHL_TXM_VAVLE = 1;
  1915. }
  1916. else//条件警告
  1917. {
  1918. CTHL_SetAlarmCode(CTHL_HSLiao_Origin_ALARM,0);//上模原位异常
  1919. }
  1920. }
  1921. if(CTHL_bSM)//上模
  1922. {
  1923. CTHL_bSM=0;
  1924. if(CTHL_SMZ_VAVLE)
  1925. {
  1926. CTHL_SMZ_VAVLE = 0;
  1927. }
  1928. else if(!CTHL_TXM_VAVLE && !CTHL_TXM_Limit_IN ) //横推在原点
  1929. {
  1930. CTHL_SMZ_VAVLE=1;
  1931. }
  1932. else//条件警告
  1933. {
  1934. CTHL_SetAlarmCode(CTHL_HSLiao_Origin_ALARM,0);//横送料原位异常
  1935. }
  1936. }
  1937. if(CTHL_bCXDW) //插销钩针
  1938. {
  1939. CTHL_bCXDW = 0;
  1940. CTHL_XCJC_VAVLE = !CTHL_XCJC_VAVLE;
  1941. }
  1942. if(CTHL_bJCXBD)//插销布带夹
  1943. {
  1944. CTHL_bJCXBD=0;
  1945. CTHL_JCXBD_VAVLE = !CTHL_JCXBD_VAVLE;
  1946. }
  1947. if( CTHL_bCXHT)//插销回退
  1948. {
  1949. CTHL_bCXHT=0;
  1950. CTHL_CXHT_VAVLE = !CTHL_CXHT_VAVLE;
  1951. }
  1952. if(CTHL_bCXBB)//插销摆动
  1953. {
  1954. CTHL_bCXBB=0;
  1955. CTHL_XCBB_VAVLE = !CTHL_XCBB_VAVLE;
  1956. }
  1957. if(CTHL_bFZYL)//右拖压轮
  1958. {
  1959. CTHL_bFZYL=0;
  1960. CTHL_FZYL_VAVLE = !CTHL_FZYL_VAVLE;
  1961. }
  1962. if(CTHL_bGLBG)//过链摆杆
  1963. {
  1964. CTHL_bGLBG=0;
  1965. CTHL_HL_VAVLE=~CTHL_HL_VAVLE;
  1966. }
  1967. //自动装料
  1968. if(CTHL_bAutoZhuangLiao)
  1969. {
  1970. CTHL_bAutoZhuangLiao = 0;
  1971. if(CTHL_ZhuangLiaoStep == 0)
  1972. {
  1973. bTuiLaTouOkFlg = 1;
  1974. bZhuangLiaoOkFlg = 0;
  1975. bXiaoMOUpFlg=1;
  1976. CTHL_ZhuangLiaoStep = 1;
  1977. CTHL_MGuo_VAVLE = 0;
  1978. CTHL_ZhuangLiaoDelay = dwTickCount + 150;
  1979. }
  1980. }
  1981. //一键定位
  1982. if(CTHL_bYJDW)
  1983. {
  1984. CTHL_bYJDW=0;
  1985. CTHL_FKDW_VAVLE = 0;//方块定位气缸
  1986. CTHL_TXM_VAVLE=0; //侧推布带气缸
  1987. CTHL_SMZ_VAVLE=0; //上模气缸
  1988. CTHL_XCBB_VAVLE=0; //插销摆臂
  1989. CTHL_JCXBD_VAVLE=0; //夹插销布带
  1990. CTHL_CXHT_VAVLE=0; //插销后退
  1991. CTHL_FZYL_VAVLE=0; //右拖带压轮
  1992. CTHL_TD_MotorDelay = dwTickCount + 100;
  1993. if(CTHL_TD_MotorStep==0){
  1994. if(GetEn(X_AXIS) == MOTOR_DISEN){//未使能
  1995. SetEn(X_AXIS, MOTOR_EN);//X使能
  1996. CTHL_TD_MotorDelay = dwTickCount + 200;
  1997. }
  1998. else{
  1999. CTHL_TD_MotorDelay = dwTickCount + 100;
  2000. }
  2001. CTHL_TD_MotorStep=1;
  2002. }
  2003. }
  2004. //X轴Y轴电机测试
  2005. if(CTHL_bCLMotor_N)
  2006. {
  2007. SetEn(Y_AXIS, MOTOR_EN);//使能X轴
  2008. SetEn(X_AXIS, MOTOR_EN);//使能Y轴
  2009. if(CTHL_FK_Check_UP){//检测到过链感应信号后,设置原位。
  2010. SetPos(X_AXIS, 0);
  2011. SetPos(Y_AXIS, 0);
  2012. }
  2013. if(!X_DRV){
  2014. // Y轴— 运行速度—方向—启动速度—停止速度— 加速时间— 减速时间
  2015. //AxisMovePosAccDec(X_AXIS,3000,2953,600,600,100,100,900);
  2016. //AxisMovePosAccDec(Y_AXIS,3000,2953,600,600,100,100,900);
  2017. AxisContinueMoveAcc(X_AXIS,600 ,DIR_P,600,600,15,15);
  2018. if(servo_y.IO_TO_COM==0)AxisContinueMoveAcc(Y_AXIS,580,DIR_P,580,580,15,15);
  2019. }
  2020. }
  2021. if(CTHL_bCLMotor_P)
  2022. {
  2023. SetEn(Y_AXIS, MOTOR_EN);//使能X轴
  2024. SetEn(X_AXIS, MOTOR_EN);//使能Y轴
  2025. if(CTHL_FK_Check_UP){//检测到过链感应信号后,设置原位。
  2026. SetPos(X_AXIS, 0);
  2027. SetPos(Y_AXIS, 0);
  2028. CTHL_SetAlarmCode(CTHL_HSLiao_Origin_ALARM,0);//方块定位有信号
  2029. }
  2030. if(!X_DRV ){
  2031. // Y轴— 运行速度—方向—启动速度—停止速度— 加速时间— 减速时间 速度
  2032. AxisContinueMoveAcc(X_AXIS,600,DIR_N,600,600,15,15);
  2033. if(servo_y.IO_TO_COM==0)AxisContinueMoveAcc(Y_AXIS,630,DIR_N,630,630,15,15);
  2034. }
  2035. }
  2036. if(!CTHL_bCLMotor_P && !CTHL_bCLMotor_N && (CTHL_TD_MotorStep == 0))
  2037. {
  2038. AxisEgmStop(X_AXIS);
  2039. //if(servo_y.IO_TO_COM==0)AxisEgmStop(Y_AXIS);else SetEn(Y_AXIS, MOTOR_EN);
  2040. }
  2041. }
  2042. }
  2043. //初始化动作
  2044. void CTHL_InitAction(void)
  2045. {
  2046. float buff_pulse,buff_dist;
  2047. buff_pulse = CTHL_PARAM_TDCYCLE_PULSE;
  2048. buff_dist = CTHL_PARAM_TDCYCLE_LENGTH;
  2049. XGearRatio = buff_pulse/buff_dist;
  2050. buff_pulse = CTHL_PARAM_TDCYCLE_PULSE;
  2051. buff_dist = CTHL_PARAM_FZCYCLE_LENGTH;
  2052. YGearRatio = buff_pulse/buff_dist;
  2053. //传递伺服齿轮比参数
  2054. #if X_USERING_TARR==1
  2055. set_com_servo_param(X_AXIS,CTHL_PARAM_TDCYCLE_PULSE,CTHL_PARAM_TDCYCLE_LENGTH);
  2056. #endif
  2057. #if Y_USERING_TARR==1
  2058. set_com_servo_param(Y_AXIS,CTHL_PARAM_TDCYCLE_PULSE,CTHL_PARAM_FZCYCLE_LENGTH);
  2059. #endif
  2060. SetAlarmCode(CTHL_ALARM_ADDR,0);
  2061. SetEnReverse(X_AXIS, 0);
  2062. SetEnReverse(Y_AXIS, 0);
  2063. SetDirReverse(X_AXIS, 0);
  2064. SetDirReverse(Y_AXIS, 0);
  2065. //设置伺服告警极性,
  2066. //伺服设置常开,则极性设置为0, 0为正常,1为告警,;
  2067. //伺服设置为常闭,则极性设置为1,0,为正常,1位告警
  2068. SetAlarmReverse(X_AXIS,0);
  2069. SetAlarmReverse(Y_AXIS,0);
  2070. SetEn(X_AXIS, MOTOR_DISEN);
  2071. SetEn(Y_AXIS, MOTOR_DISEN);
  2072. SetPos(X_AXIS, 0); //启动位置设为0点
  2073. SetPos(Y_AXIS, 0); //启动位置设为0点
  2074. }
  2075. //运行
  2076. void CTHL_Action(void)
  2077. {
  2078. dwXRealPos = GetPos(X_AXIS);
  2079. dwYRealPos = GetPos(Y_AXIS);
  2080. dwZRealPos = GetPos(Z_AXIS);
  2081. dwYRealPos_com=get_encode_value(Y_AXIS);
  2082. CTHL_ZhenDongAction();
  2083. CTHL_AlarmProtect();
  2084. CTHL_CheckStart();
  2085. CTHL_ZLT_Step();//装拉头
  2086. CTHL_TLiao_Step();//推拉头
  2087. CTHL_TD_Motor();//拖带电机X轴
  2088. CTHL_FZ_Motor();//穿拉头电机Y轴
  2089. CTHL_ManualAction();
  2090. CTHL_AutoStepAction();
  2091. CTHL_Test++;
  2092. servo_com_run();
  2093. CTHL_Running_state();
  2094. }
  2095. #endif