JHMXC_NiLong_StepJi.c 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579
  1. #include "global.h"
  2. #if JIN_HONG_MACHINE==1
  3. void MXC_InitAction(void);
  4. void MXC_Action(void);
  5. void MXC_CheckStart(void);
  6. void MXC_ManualAction(void);
  7. void MXC_DC_AutoAction(void);
  8. void MXC_DC_Motor(void);
  9. void MXC_XiaChong(void);
  10. void MXC_ChuiQi(void);
  11. void MXC_FenZhen(void);
  12. void MXC_DC_SongDai(void);
  13. void MXC_DC_ShaChe(void);
  14. void MXC_DC_XC_BuJin_motor(void);
  15. void MXC_ExtiAcitionX20(void);
  16. unsigned long cZipperLength[2];
  17. #define SB_CHECK_IN !PAin(15)
  18. //故障报警
  19. void MXC_SetAlarmCode(unsigned alarm_code)
  20. {
  21. SetAlarmCode(MXC_ALARM_ADDR,alarm_code);
  22. MXC_DC_bAlarmStop = 1;
  23. }
  24. //X20中断
  25. void MXC_ExtiAcitionX20(void)
  26. {
  27. if (cSeBiaoEn && !cSeBiaoOk)
  28. {
  29. cSeBiaoOk = 1;
  30. MXC_SB_SaveLength = GetPos(X_AXIS);
  31. MXC_SB_ENCODE_MIN=dwEnRealPos;
  32. //MXC_Clear_Servo_Pos=1;
  33. }
  34. }
  35. void MXC_SBCHECK_PROC(void)
  36. {
  37. static unsigned short flitering=0;
  38. if(SB_CHECK_IN)
  39. {
  40. flitering++;
  41. if(flitering>=2)
  42. {
  43. if (cSeBiaoEn && !cSeBiaoOk)
  44. {
  45. cSeBiaoOk = 1;
  46. MXC_SB_SaveLength = GetPos(X_AXIS);
  47. MXC_SB_ENCODE_MIN=dwEnRealPos;
  48. }
  49. }
  50. }
  51. else
  52. {
  53. flitering=0;
  54. }
  55. }
  56. unsigned char ComPareLength(void)//前后拉链对比
  57. {
  58. if ((cZipperLength[0] != 0) && (cZipperLength[1] != 0))
  59. {
  60. if (cZipperLength[0] > cZipperLength[1])
  61. {
  62. if ((cZipperLength[0] - cZipperLength[1]) > 50)
  63. {
  64. return 0;
  65. }
  66. else
  67. return 1;
  68. }
  69. else
  70. {
  71. if ((cZipperLength[1] - cZipperLength[0]) > 50)
  72. {
  73. return 0;
  74. }
  75. else
  76. return 1;
  77. }
  78. }
  79. else
  80. return 0;
  81. }
  82. void MXC_JiaoDao(void)
  83. {
  84. if (MXC_cJiaoDaoStep == 1)
  85. {
  86. MXC_cJiaoDaoDelay = dwTickCount + 500;
  87. MXC_SeBiao_JiaoDao = 1;
  88. MXC_cJiaoDaoStep = 2;
  89. }
  90. else if ((MXC_cJiaoDaoStep == 2) && (dwTickCount >= MXC_cJiaoDaoDelay))
  91. {
  92. MXC_SeBiao_JiaoDao = 0;
  93. MXC_cJiaoDaoStep = 0;
  94. }
  95. }
  96. //步进电机下冲
  97. void MXC_DC_XC_BuJin_motor(void)
  98. {
  99. switch(MXC_cXiaChongStep)
  100. {
  101. case 0:
  102. break;
  103. case 1:
  104. if(GetEn(Z_AXIS) == XC_MOTOR_DISEN)
  105. {
  106. SetEn(Z_AXIS,XC_MOTOR_EN);
  107. MXC_BUJIN_XC_Delay = dwTickCount + 170;
  108. }
  109. MXC_cXiaChongStep = 2;
  110. MXC_cRightFZStep = 1;//启动右分针
  111. MXC_cLeftFZStep = 0;
  112. break;
  113. case 2:
  114. if((MXC_cRightFZStep == 0) && (MXC_cLeftFZStep == 0) && MXC_RighttFenZhen_IN && MXC_LeftFenZhen_IN )
  115. {
  116. SetPos(Z_AXIS, 0);
  117. if (MXC_DC_bRunning)
  118. {
  119. MXC_BUJIN_XC_Delay = dwTickCount + MXC_PARAM_DELAY_XC;
  120. }
  121. MXC_cXiaChongStep = 3;
  122. }
  123. break;
  124. case 3:
  125. if(dwTickCount >= MXC_BUJIN_XC_Delay)
  126. {
  127. MXC_cXiaChongStep = 4;
  128. if(MXC_DC_bRunning) MXC_GouZhen_VAVLE = 1;
  129. AxisMovePosAccDecNotStop(Z_AXIS,MXC_DC_XC_MOTOR_HIGH_SPEED,2000,
  130. 1200,MXC_DC_XC_MOTOR_LOW_SPEED,
  131. 100,100,MXC_DC_XC_MOTOR_LOW_LENGTH);
  132. MXC_BUJIN_XC_Delay = dwTickCount + MXC_XIACHONG_EEROR_TIME;
  133. }
  134. break;
  135. case 4:
  136. if(MXC_XiaChong_IN_UP)
  137. {
  138. SetEncodePos(ENCODE_X22X23, 0);
  139. SetPos(X_AXIS, 0);
  140. AxisMovePosAccDec(Z_AXIS,MXC_DC_XC_MOTOR_LOW_SPEED,MXC_DC_XC_MOTOR_GO_LENGTH,
  141. 1200,MXC_DC_XC_MOTOR_LOW_SPEED,
  142. 100,100,MXC_DC_XC_MOTOR_GO_LENGTH/3);
  143. MXC_LeftFenZhen_VAVLE = 0;
  144. MXC_RightFenZhen_VAVLE = 0;
  145. MXC_cXiaChongStep = 5;
  146. MXC_BUJIN_XC_Delay = dwTickCount;
  147. }
  148. else if(dwTickCount >= MXC_BUJIN_XC_Delay)//步进异常
  149. {
  150. MXC_SetAlarmCode(MXC_XC_ALARM);
  151. MXC_LeftFenZhen_VAVLE = 0;
  152. MXC_RightFenZhen_VAVLE = 0;
  153. MXC_cXiaChongStep = 0;
  154. }
  155. break;
  156. case 5:
  157. if(dwTickCount >= MXC_BUJIN_XC_Delay && !Z_DRV)
  158. {
  159. MXC_MOTOR_DATA_Num++;
  160. if(MXC_MOTOR_DATA_Num > 99)
  161. MXC_MOTOR_DATA_Num = 0;
  162. if(!MXC_DC_bRunning){
  163. SetEncodePos(ENCODE_X22X23, 0);
  164. SetPos(X_AXIS, 0);
  165. }
  166. MXC_cXiaChongStep = 0;
  167. }
  168. break;
  169. }
  170. }
  171. void MXC_InitAction(void)
  172. {
  173. float length_buff,pulse_buff;
  174. length_buff = MXC_MXC_PARAM_DAILUN_LENGTH;
  175. pulse_buff = MXC_MXC_PARAM_CYCLE_PULSE;
  176. XGearRatio = pulse_buff/length_buff;
  177. length_buff = MXC_BM_LENGTH;
  178. pulse_buff = MXC_BM_CYCLE_PULSE * 4;
  179. SetEncodeGearRatio(ENCODE_X22X23, pulse_buff/length_buff);
  180. ZGearRatio = 1;//z轴用脉冲数做单位
  181. SetEn(X_AXIS,DC_Motor_DISEN);
  182. SetEn(Y_AXIS,XZ_Motor_DISEN);
  183. SetDirReverse(X_AXIS, MXC_DC_Reverse_EN);
  184. MXC_STOP_IN_FLAG = MXC_STOP_IN;
  185. MXC_STOP_IN_FLAG_OLD = MXC_STOP_IN_FLAG;
  186. MXC_SaveLength = 0;
  187. //外部中断配置
  188. USE_X20_EXTI = 1;
  189. X20EXTI_DIR = 0;
  190. //设置X轴的加速模式
  191. axis_set_parameter(axis_x,AXIS_ACCDEC_MODE,4);
  192. //只有编码器的情况长度由编码器值确定
  193. SetEncode_enable(ENCODE_X22X23);
  194. MXC_DC_KongWei_Length = MXC_PARAM_DAOKOU_LENGTH;
  195. }
  196. void MXC_Action(void)
  197. {
  198. MXC_CheckStart(); //启动
  199. MXC_ManualAction();
  200. MXC_DC_AutoAction();
  201. MXC_DC_Motor(); //定寸电机控制
  202. if(!MXC_DC_XC_MODE)
  203. MXC_XiaChong(); //下冲
  204. else if(MXC_DC_XC_MODE)
  205. MXC_DC_XC_BuJin_motor();
  206. MXC_DC_ShaChe();
  207. MXC_FenZhen(); //分针
  208. MXC_ChuiQi(); //吹气
  209. MXC_DC_SongDai(); //送带控制
  210. MXC_JiaoDao(); //色标教导
  211. //servo_com_run();
  212. }
  213. void MXC_DC_SongDai(void)
  214. {
  215. if(!MXC_SongDai_MOTOR)
  216. {
  217. MXC_SongDai_LongTime = dwTickCount;
  218. }
  219. else//送带一直输出无法触发送带到位
  220. {
  221. if((dwTickCount - MXC_SongDai_LongTime) >= MXC_PARAM_SD_Pretect_TIME)
  222. {
  223. if(!MXC_DC_bRunning)
  224. {
  225. MXC_PARAM_SongDai_Switch = 0;
  226. MXC_SetAlarmCode(MXC_DC_SONGDAI_ALARM);
  227. }
  228. else
  229. {
  230. MXC_SongDai_MOTOR = 0;
  231. MXC_cSongDaiDelay = dwTickCount + MXC_PARAM_SongDai_Delay;
  232. }
  233. }
  234. }
  235. }
  236. void MXC_ManualAction(void)
  237. {
  238. char i;
  239. short *revise_buff;
  240. revise_buff =(short *)( &user_datas[17]);
  241. if(MXC_DATA_Clean)
  242. {
  243. i = 0;
  244. while(i < 100)
  245. {
  246. user_datas[200 + i] = 0;
  247. i++;
  248. }
  249. MXC_DATA_Clean = 0;
  250. MXC_MOTOR_DATA_Num = 0;
  251. }
  252. //清总产量
  253. if(MXC_bClear)
  254. {
  255. MXC_bClear = 0;
  256. ClrcToTal(MXC_DC_TOTAL_ADDR);
  257. }
  258. if(MXC_bAddLength)
  259. {
  260. MXC_bAddLength=0;
  261. *revise_buff += 5;
  262. }
  263. if(MXC_bDecLength)
  264. {
  265. MXC_bDecLength=0;
  266. *revise_buff -= 5;
  267. }
  268. //当长度改变时,生产总量自动清零
  269. if(MXC_bChangeLength)
  270. {
  271. MXC_bChangeLength = 0;
  272. MXC_SaveLength = 0;
  273. MXC_bClear = 1;
  274. }
  275. //工作方式选择(数控定寸和勾针定寸) 
  276. if (MXC_bSetDCMode)
  277. {
  278. MXC_bSetDCMode = 0;
  279. if (!MXC_DC_bRunning)
  280. {
  281. MXC_DC_MODE++;
  282. if (MXC_DC_MODE > 2)
  283. MXC_DC_MODE = 0;
  284. if (MXC_DC_MODE != 0)
  285. {
  286. MXC_GouZhen_VAVLE = 1;
  287. }
  288. }
  289. }
  290. //有链感应
  291. if (MXC_DC_bRunning)//检测拉链,由于拉链有间隙,故需要延迟检测
  292. {
  293. if (MXC_Zipper_IN)
  294. {
  295. MXC_cBudaiCheckDelay = dwTickCount + MXC_PARAM_BUDAI_ALARM_TIME;
  296. }
  297. else if (dwTickCount >= MXC_cBudaiCheckDelay)
  298. {
  299. MXC_SetAlarmCode(MXC_NO_ZIPPER_ALARM); //没拉链
  300. }
  301. }
  302. if(MXC_PARAM_SongDai_Switch)
  303. {
  304. if(!MXC_SongDai_IN && MXC_Zipper_IN && (dwTickCount >= MXC_cSongDaiDelay))
  305. {
  306. MXC_SongDai_MOTOR = 1;
  307. }
  308. else if(MXC_SongDai_IN)
  309. {
  310. MXC_SongDai_MOTOR = 0;
  311. MXC_cSongDaiDelay = dwTickCount + MXC_PARAM_SongDai_Delay;
  312. }
  313. }
  314. else
  315. {
  316. MXC_SongDai_MOTOR = 0;
  317. MXC_cSongDaiDelay = dwTickCount + MXC_PARAM_SongDai_Delay;
  318. }
  319. if((MXC_DC_bRunning) == 0) ////手动
  320. {
  321. //送带
  322. if(MXC_bSongDai)
  323. {
  324. MXC_SongDai_MOTOR = 1;
  325. }
  326. //顶刀保护
  327. if(MXC_bDingDao_Baohu)
  328. {
  329. MXC_bDingDao_Baohu = 0;
  330. MXC_DingDao_BaoHu_VAVLE = ~MXC_DingDao_BaoHu_VAVLE;
  331. }
  332. //吹气
  333. if (MXC_bChuiQi)
  334. {
  335. MXC_bChuiQi = 0;
  336. if (MXC_cChuiQiStep == 0)
  337. MXC_cChuiQiStep = 1;
  338. }
  339. //定寸电机拖带
  340. if(MXC_bDCTD_P)
  341. {
  342. if(!X_DRV)
  343. {
  344. // MXC_TuoDaiSongZhou= MXC_SERVER_EN;
  345. SetEn(X_AXIS, DC_Motor_EN);
  346. AxisContinueMoveAcc(X_AXIS, MXC_DC_PARAM_MUL_SPEED, MXC_DC_DIR_P, 1200,
  347. 1200, 120, 120);
  348. }
  349. }
  350. if(X_DRV && !MXC_bDCTD_P && !MXC_DC_bRunning && (MXC_DC_cMotorStep == 0))
  351. {
  352. AxisEgmStop(X_AXIS);
  353. }
  354. //下冲电机正转
  355. if(MXC_bXCDJ_P)
  356. {
  357. if(!Z_DRV)
  358. {
  359. SetEn(Z_AXIS, XC_MOTOR_EN);
  360. AxisContinueMoveAcc(Z_AXIS, 3000, MXC_XC_DIR_P, 1200,
  361. 1200, 120, 120);
  362. }
  363. }
  364. if(Z_DRV && !MXC_bXCDJ_P && !MXC_DC_bRunning && (MXC_cXiaChongStep == 0))
  365. {
  366. // SetEn(Z_AXIS, XC_MOTOR_DISEN);
  367. AxisEgmStop(Z_AXIS);
  368. }
  369. //分针+下冲
  370. if (MXC_ManXiaChong_UP || MXC_bXiaChong)
  371. {
  372. MXC_bXiaChong = 0;
  373. if (MXC_cXiaChongStep == 0)
  374. MXC_cXiaChongStep = 1;
  375. }
  376. //下冲单一动作
  377. if (MXC_cXiaChongStep == 0)
  378. {
  379. if (MXC_bLeftFenZhen)
  380. {
  381. MXC_bLeftFenZhen = 0;
  382. MXC_LeftFenZhen_VAVLE = ~MXC_LeftFenZhen_VAVLE;
  383. }
  384. if (MXC_bRightFenZhen)
  385. {
  386. MXC_bRightFenZhen = 0;
  387. MXC_RightFenZhen_VAVLE = ~MXC_RightFenZhen_VAVLE;
  388. }
  389. if(MXC_bDotXiaChong && MXC_RighttFenZhen_IN && MXC_LeftFenZhen_IN)
  390. {
  391. MXC_bDotXiaChong = 0;
  392. if(MXC_cXiaChongStep == 0)
  393. MXC_cXiaChongStep = 1;
  394. }
  395. }
  396. if(MXC_bSeBiaoJiaoDao)
  397. {
  398. MXC_bSeBiaoJiaoDao = 0;
  399. MXC_cJiaoDaoStep = 1;
  400. }
  401. if(MXC_bGouZhen && MXC_DC_MODE == 0)
  402. {
  403. MXC_bGouZhen = 0;
  404. MXC_GouZhen_VAVLE = ~MXC_GouZhen_VAVLE;
  405. }
  406. if (MXC_DC_MODE != 0) //非钩针模式
  407. {
  408. MXC_GouZhen_VAVLE = 1;
  409. }
  410. }
  411. }
  412. void MXC_DC_AutoAction(void)
  413. {
  414. if(MXC_MOTOR_DATA_Num <= 99)user_datas[420+MXC_MOTOR_DATA_Num] = MXC_ENCODE_FENZHEN_Lenth;
  415. dwZRealPos = GetPos(Z_AXIS);
  416. //DISPLAY_DATA0 = cCheckLengthOk;//Cur_DC_length;//MXC_cXiaChongStep;//MXC_DC_cAutoStep;
  417. //DISPLAY_DATA1 = MXC_bSeBiao_CheckOK;//cZipperLength[0];//Cur_XZ_length;//MXC_XZ_cAutoStep;
  418. DISPLAY_DATA2 = MXC_bSeBiao_CheckOK;//cZipperLength[1];//
  419. DISPLAY_DATA3 = MXC_DC_cAutoStep;//MXC_XZ_cMotorStep;
  420. DISPLAY_DATA4 = MXC_SB_ENCODE_MIN;//MXC_DC_cMotorStep;
  421. DISPLAY_DATA5 = MXC_SB_SaveLength;//MXC_cXiaChongStep;
  422. DISPLAY_DATA6 = dwXRealPos;
  423. DISPLAY_DATA7 = dwEnRealPos;
  424. if(MXC_DC_bRunning)
  425. {
  426. switch(MXC_DC_cAutoStep)
  427. {
  428. case 0:
  429. break;
  430. case 1:
  431. if(dwTickCount >= MXC_DC_cAutoDelay)
  432. {
  433. SetEn(X_AXIS, DC_Motor_EN);
  434. MXC_DC_cAutoDelay = dwTickCount + 700; //先锁轴;
  435. MXC_DC_cAutoStep = 2;
  436. }
  437. break;
  438. case 2:
  439. //左右分针要退到位,过链到位要离开
  440. if((dwTickCount >= MXC_DC_cAutoDelay) && !MXC_RighttFenZhen_IN && !MXC_LeftFenZhen_IN && MXC_RightFenZhen_Origin_IN
  441. && MXC_LeftFenZhen_Origin_IN)
  442. {
  443. switch(MXC_DC_MODE)
  444. {
  445. case MXC_DC_SF_MODE:MXC_DC_cMotorStep = 1; break; //伺服
  446. case MXC_DC_GZ_MODE:MXC_DC_cMotorStep = 20;break; //钩针
  447. case MXC_DC_SB_MODE:MXC_DC_cMotorStep = 40;break; //色标
  448. //case MXC_DC_BMQ_MODE:MXC_DC_cMotorStep = 60; break; //编码器
  449. }
  450. MXC_DC_cAutoStep = 3;
  451. }
  452. else if(dwTickCount >= MXC_DC_cAutoDelay + MXC_ERRORTIME)
  453. {
  454. if (MXC_RighttFenZhen_IN)MXC_SetAlarmCode(MXC_RFZ_LIMIT_ALARM);
  455. if (MXC_LeftFenZhen_IN)MXC_SetAlarmCode(MXC_LFZ_LIMIT_ALARM);
  456. if (!MXC_RightFenZhen_Origin_IN)MXC_SetAlarmCode(MXC_RFZ_ORIGIN_ALARM);
  457. if (!MXC_LeftFenZhen_Origin_IN)MXC_SetAlarmCode(MXC_LFZ_ORIGIN_ALARM);
  458. }
  459. break;
  460. case 3:
  461. //拖带已经完成
  462. if(MXC_DC_cMotorStep == 0)
  463. {
  464. MXC_cXiaChongStep = 1;
  465. MXC_DC_cAutoStep = 4;
  466. }
  467. break;
  468. case 4://下冲完成
  469. if((MXC_cXiaChongStep == 0) || (MXC_cXiaChongStep >= 5))
  470. {
  471. dwZipCnt++;
  472. MXC_DC_cAutoStep = 5;
  473. //除齿判断
  474. if(MXC_CRUKONGWEILENGTH >= MXC_DC_KongWei_Length || MXC_DC_MODE==0 || MXC_DC_MODE==2)
  475. {
  476. MXC_CRUKONGWEILENGTH = 0;
  477. if(!MXC_DC_SingOneFlag)
  478. {
  479. AddToTal(MXC_DC_TOTAL_ADDR);
  480. CalProSP(MXC_DC_PROSPEED_ADDR);
  481. }
  482. MXC_DC_cAutoStep = 5;
  483. }
  484. else
  485. {
  486. MXC_DC_cAutoStep = 2;
  487. MXC_DC_cAutoDelay = dwTickCount;
  488. }
  489. }
  490. break;
  491. case 5:
  492. if(GetTotal(MXC_DC_TOTAL_ADDR) >= MXC_SET_TOTAL)
  493. {
  494. MXC_SetAlarmCode(MXC_TOTAL_ALARM);
  495. MXC_DC_cAutoStep = 0;
  496. }
  497. else
  498. MXC_DC_cAutoStep = 6;
  499. break;
  500. case 6:
  501. MXC_DC_cAutoStep = 2;
  502. //MXC_Clear_Servo_Pos=0;
  503. MXC_DC_cAutoDelay = dwTickCount+1;
  504. if(MXC_DC_SingOneFlag || MXC_DC_Single_Stop)
  505. {
  506. dwZipCnt = 0;
  507. MXC_DC_bAlarmStop = 1;
  508. MXC_DC_SingOneFlag = 0;
  509. MXC_DC_cAutoStep = 0;
  510. MXC_DC_bRunning = 0;
  511. MXC_DC_Single_Stop = 0;
  512. }
  513. break;
  514. }
  515. }
  516. }
  517. // 检测是否踏了脚踏开关
  518. void MXC_CheckStart(void)
  519. {
  520. // 开始键
  521. if((MXC_START_IN_UP || MXC_DC_bStart || MXC_DC_bStart_Single))
  522. {
  523. if(MXC_DC_bStart_Single)
  524. {
  525. MXC_DC_bStart = 1;
  526. MXC_DC_SingOneFlag = 1;
  527. MXC_DC_bStart_Single = 0;
  528. }
  529. if(MXC_START_IN_UP || MXC_DC_bStart)
  530. {
  531. //定寸启动
  532. if(!MXC_DC_bRunning)
  533. {
  534. if (MXC_KaDai_IN)MXC_SetAlarmCode(MXC_KA_DAI_ALARM);
  535. else if (!MXC_RightFenZhen_Origin_IN)MXC_SetAlarmCode(MXC_START_RFZ_ORIGIN_ALARM);
  536. else if (!MXC_Zipper_IN)MXC_SetAlarmCode(MXC_NO_ZIPPER_ALARM);
  537. else
  538. {
  539. dwZipCnt = 0;
  540. cZipperLength[0] = 0;
  541. cZipperLength[1] = 0;
  542. MXC_DC_cAutoStep = 1;
  543. MXC_DC_bRunning = 1;
  544. MXC_DC_cAutoDelay = dwTickCount;
  545. MXC_DC_cMotorDelay = dwTickCount;
  546. MXC_cXiaChongDelay = dwTickCount;
  547. MXC_cChuiQiDelay = dwTickCount;
  548. MXC_CRUKONGWEILENGTH=0;
  549. MXC_ENCODE_FENZHEN_Lenth = 0;
  550. cSeBiaoOk=0;
  551. }
  552. }
  553. cCheckLengthOk = 0;
  554. MXC_bSeBiao_Check=0;
  555. MXC_PARAM_SongDai_Switch = 1;
  556. }
  557. MXC_DC_bStart = 0;
  558. MXC_DC_bStart_Single = 0;
  559. }
  560. //卡带感应
  561. if(MXC_KaDai_IN_UP)
  562. {
  563. //MXC_SetAlarmCode(MXC_KA_DAI_ALARM);
  564. SetAlarmCode(MXC_ALARM_ADDR,MXC_KA_DAI_ALARM);
  565. MXC_bStop=1;
  566. }
  567. else
  568. {
  569. if((GetAlarmCode(MXC_ALARM_ADDR) == MXC_KA_DAI_ALARM))
  570. SetAlarmCode(MXC_ALARM_ADDR,0);
  571. }
  572. if(MXC_KaDai_IN_UP)
  573. {
  574. if(MXC_cChuiQiStep == 0)MXC_cChuiQiStep = 1;
  575. }
  576. //停止
  577. MXC_STOP_IN_FLAG_OLD = MXC_STOP_IN_FLAG;
  578. if(MXC_STOP_IN)
  579. {
  580. if(MXC_STOP_FILTER < 50)
  581. {
  582. MXC_STOP_FILTER++;
  583. }
  584. else
  585. MXC_STOP_IN_FLAG = 1;
  586. }
  587. else if(MXC_STOP_FILTER > 25)
  588. {
  589. MXC_STOP_FILTER--;
  590. }
  591. else
  592. MXC_STOP_IN_FLAG = 0;
  593. //停止键
  594. if(MXC_STOP_IN_FLAG && !MXC_STOP_IN_FLAG_OLD || MXC_bStop)
  595. {
  596. MXC_bStop = 0;
  597. MXC_bSeBiao_Check=0;
  598. if(MXC_DC_bRunning)
  599. {
  600. if(MXC_DC_cMotorStep==0 && MXC_cXiaChongStep!=0)
  601. {
  602. MXC_DC_Single_Stop = 1;
  603. }
  604. else if(X_DRV&&MXC_DC_MODE==MXC_DC_SF_MODE)
  605. {
  606. MXC_DC_cMotorStep=5;
  607. }
  608. else
  609. {
  610. if(MXC_cXiaChongStep==0)
  611. {
  612. if(MXC_cChuiQiStep == 0)MXC_cChuiQiStep = 1;
  613. }
  614. MXC_DC_SingOneFlag = 0;
  615. MXC_DC_bRunning = 0;
  616. MXC_DC_cAutoStep = 0;
  617. MXC_DC_cMotorStep = 0;
  618. MXC_cXiaChongStep = 0;
  619. AxisEgmStop(X_AXIS);
  620. AxisEgmStop(Z_AXIS);
  621. //MXC_cJiaoDaoStep = 0;
  622. MXC_Zipper_cnt = 0;
  623. //输出
  624. MXC_LeftFenZhen_VAVLE = 0;
  625. MXC_SongDai_MOTOR = 0;
  626. MXC_RightFenZhen_VAVLE = 0;
  627. MXC_DingDao_BaoHu_VAVLE = 0;
  628. MXC_PARAM_SongDai_Switch = 0;
  629. cSeBiaoOk=0;
  630. if(MXC_DC_MODE==0)
  631. MXC_GouZhen_VAVLE = 0;
  632. }
  633. }
  634. else
  635. {
  636. MXC_DC_SingOneFlag = 0;
  637. MXC_DC_bRunning = 0;
  638. MXC_DC_cAutoStep = 0;
  639. MXC_DC_cMotorStep = 0;
  640. MXC_cXiaChongStep = 0;
  641. MXC_cXiaChongStep = 0;
  642. MXC_cRightFZStep = 0;
  643. MXC_cLeftFZStep = 0;
  644. SetEn(X_AXIS,DC_Motor_DISEN);
  645. SetEn(Z_AXIS,XC_MOTOR_DISEN);
  646. if((MXC_cChuiQiStep == 0) &&(MXC_cXiaChongStep==0))MXC_cChuiQiStep = 1;
  647. AxisEgmStop(X_AXIS);
  648. AxisEgmStop(Z_AXIS);
  649. MXC_SetAlarmCode(MXC_NO_ALARM);
  650. //输出
  651. if(MXC_cXiaChongStep == 0)
  652. {
  653. MXC_XiaChong_MOTOR = 0;
  654. }
  655. MXC_LeftFenZhen_VAVLE = 0;
  656. MXC_SongDai_MOTOR = 0;
  657. MXC_RightFenZhen_VAVLE = 0;
  658. MXC_DingDao_BaoHu_VAVLE = 0;
  659. MXC_PARAM_SongDai_Switch = 0;
  660. MXC_MOTOR_DATA_Num = 0;
  661. cSeBiaoOk=0;
  662. if(MXC_DC_MODE==0)
  663. MXC_GouZhen_VAVLE = 0;
  664. }
  665. }
  666. if(MXC_DC_bAlarmStop)
  667. {
  668. MXC_DC_bAlarmStop = 0;
  669. MXC_DC_bRunning = 0;
  670. MXC_DC_cAutoStep = 0;
  671. MXC_DC_cMotorStep = 0;
  672. MXC_cXiaChongStep = 0;
  673. MXC_cRightFZStep = 0;
  674. MXC_cLeftFZStep = 0;
  675. MXC_DC_SingOneFlag = 0;
  676. MXC_cXiaChongStep = 0;
  677. MXC_XiaChong_MOTOR = 0;
  678. MXC_LeftFenZhen_VAVLE = 0;
  679. MXC_RightFenZhen_VAVLE = 0;
  680. MXC_DingDao_BaoHu_VAVLE = 0;
  681. MXC_cShaCheStep = 1;
  682. AxisEgmStop(X_AXIS);
  683. }
  684. }
  685. void MXC_ChuiQi(void)
  686. {
  687. //吹气
  688. if(MXC_XiaChong_IN_DW && !MXC_DC_XC_MODE)
  689. {
  690. if(MXC_cChuiQiStep == 0)MXC_cChuiQiStep = 1;
  691. MXC_cDDBH_Step = 1;
  692. }
  693. if(MXC_DC_XC_MODE)
  694. {
  695. if(PosToPulse(Z_AXIS,GetPos(Z_AXIS)) >= MXC_DC_XC_CHUIQI_PULSE && PosToPulse(Z_AXIS,GetPos(Z_AXIS)) <= MXC_DC_XC_CHUIQI_PULSE + 30)
  696. if(MXC_cChuiQiStep == 0)MXC_cChuiQiStep = 1;
  697. if(PosToPulse(Z_AXIS,GetPos(Z_AXIS)) >= MXC_DC_XC_DINDAO_PULSE && PosToPulse(Z_AXIS,GetPos(Z_AXIS)) <= MXC_DC_XC_DINDAO_PULSE + 30)
  698. if(MXC_cDDBH_Step == 0)MXC_cDDBH_Step = 1;
  699. }
  700. switch(MXC_cChuiQiStep)
  701. {
  702. case 1:
  703. MXC_cChuiQiStep = 2;
  704. MXC_cChuiQiDelay = dwTickCount + MXC_PARAM_DELAY_CHUIQI_TIME;
  705. break;
  706. case 2:
  707. if(dwTickCount >= MXC_cChuiQiDelay)
  708. {
  709. MXC_cChuiQiDelay = dwTickCount + MXC_PARAM_CHUIQI_TIME;
  710. MXC_ChuiQi_VAVLE = 1;//
  711. MXC_cChuiQiStep = 3;
  712. }
  713. break;
  714. case 3:
  715. if(dwTickCount >= MXC_cChuiQiDelay)
  716. {
  717. MXC_ChuiQi_VAVLE = 0;//
  718. MXC_cChuiQiStep = 0;
  719. }
  720. break;
  721. }
  722. switch (MXC_cDDBH_Step)
  723. {
  724. case 1:
  725. MXC_cDDBH_Step = 2;
  726. MXC_cDDBHDelay = dwTickCount + MXC_PARAM_DDBH_delay;
  727. break;
  728. case 2:
  729. if(dwTickCount >= MXC_cDDBHDelay)
  730. {
  731. MXC_cDDBH_Step = 3;
  732. MXC_DingDao_BaoHu_VAVLE = 1;
  733. MXC_cDDBHDelay = dwTickCount + MXC_DDBH_TIME;
  734. }
  735. break;
  736. case 3:
  737. if(dwTickCount >= MXC_cDDBHDelay)
  738. {
  739. MXC_cDDBH_Step = 0;
  740. MXC_DingDao_BaoHu_VAVLE = 0;
  741. }
  742. break;
  743. }
  744. }
  745. void MXC_DC_Motor(void)
  746. {
  747. static long zipper_length;
  748. short *revise_buff;
  749. unsigned long cmp=0;
  750. unsigned long cyclenum=0;
  751. dwXRealPos = GetPos(X_AXIS);
  752. dwEnRealPos = GetEncodePos(ENCODE_X22X23);
  753. revise_buff = (short *)(&user_datas[17]);
  754. switch(MXC_DC_cMotorStep)
  755. {
  756. case 0:
  757. break;
  758. //电机定寸模式
  759. case 1:
  760. if(dwEnRealPos>(MXC_SET_ZIPPER_LENGTH + MXC_PARAM_DAOKOU_LENGTH) && MXC_CRUKONGWEILENGTH==0)
  761. {
  762. MXC_DC_cMotorStep = 0;
  763. MXC_CRUKONGWEILENGTH = MXC_PARAM_DAOKOU_LENGTH;
  764. MXC_DC_cMotorDelay = dwTickCount + MXC_MOTOR_ALALRM_TIME;
  765. SetEncodePos(ENCODE_X22X23, 0);
  766. }
  767. else
  768. {
  769. MXC_DC_cMotorStep = 2;
  770. MXC_DC_cMotorDelay = dwTickCount;
  771. //SetPos(X_AXIS, 0);
  772. }
  773. break;
  774. case 2:
  775. if(dwTickCount >= MXC_DC_cMotorDelay)
  776. {
  777. if(MXC_CRUKONGWEILENGTH==0)//MXC_CRUKONGWEILENGTH 记录已除齿长度
  778. {
  779. if(dwXRealPos>dwEnRealPos)
  780. zipper_length = MXC_SET_ZIPPER_LENGTH + (*revise_buff) + MXC_PARAM_DAOKOU_LENGTH - dwXRealPos;
  781. else
  782. zipper_length = MXC_SET_ZIPPER_LENGTH + (*revise_buff) + MXC_PARAM_DAOKOU_LENGTH - dwEnRealPos;
  783. MXC_CRUKONGWEILENGTH=MXC_PARAM_DAOKOU_LENGTH;
  784. }
  785. else if(MXC_DC_KongWei_Length-MXC_CRUKONGWEILENGTH>=MXC_PARAM_DAOKOU_LENGTH)
  786. {
  787. zipper_length=MXC_PARAM_DAOKOU_LENGTH;
  788. MXC_CRUKONGWEILENGTH+=zipper_length;
  789. }
  790. else
  791. {
  792. zipper_length=MXC_DC_KongWei_Length-MXC_CRUKONGWEILENGTH;
  793. MXC_CRUKONGWEILENGTH+=zipper_length;
  794. }
  795. if(zipper_length>MXC_MXC_PARAM_DAILUN_LENGTH)
  796. {
  797. cmp=MXC_PARAM_LENGTH_CMP;
  798. cyclenum=zipper_length/MXC_MXC_PARAM_DAILUN_LENGTH;
  799. zipper_length=zipper_length+(zipper_length*cyclenum*cmp)/((cyclenum+1)*MXC_MXC_PARAM_DAILUN_LENGTH);
  800. DISPLAY_DATA0=zipper_length;
  801. }
  802. AxisMovePosAccDec(X_AXIS, MXC_PARAM_SK_HIGH_SPEED, zipper_length, 1000,
  803. MXC_PARAM_SK_SLOW_SPEED, 150, 150, MXC_PARAM_SK_SLOW_LENGTH);
  804. MXC_DC_cMotorStep = 3;
  805. MXC_DC_cMotorDelay = dwTickCount + MXC_MOTOR_ALALRM_TIME;
  806. }
  807. break;
  808. case 3:
  809. if(!X_DRV)
  810. {
  811. if(MXC_MOTOR_DATA_Num<=99)user_datas[200+MXC_MOTOR_DATA_Num] = dwEnRealPos;
  812. //SetEncodePos(ENCODE_X22X23, 0);
  813. MXC_DC_cMotorStep = 4;
  814. MXC_DC_cMotorDelay = dwTickCount + 20;
  815. }
  816. else if(dwTickCount >= MXC_DC_cMotorDelay)MXC_SetAlarmCode(MXC_LONG_TIME_NO_ZIPPER_ALARM);
  817. break;
  818. case 4:
  819. if(dwTickCount >= MXC_DC_cMotorDelay)
  820. {
  821. MXC_DC_cMotorStep = 0;
  822. }
  823. break;
  824. case 5:
  825. if(dwXRealPos<=zipper_length-500)//剩余长度小于5CM
  826. {
  827. AxisMovePosAccDec(X_AXIS,1000,300,600,600,20,20,0);
  828. MXC_DC_cMotorStep = 6;
  829. }
  830. else
  831. {
  832. MXC_DC_cMotorStep = 3;
  833. }
  834. break;
  835. case 6:
  836. if(!X_DRV)
  837. {
  838. MXC_DC_cAutoStep=0;
  839. MXC_DC_cMotorStep=0;
  840. MXC_CRUKONGWEILENGTH=0;
  841. MXC_DC_bRunning=0;
  842. }
  843. break;
  844. //钩针定寸 step20-24
  845. case 20:
  846. if (MXC_DEC_MODE) //减速方式:1数控模式 0感应方式
  847. {
  848. SetPos(X_AXIS, 0);
  849. if (MXC_PARAM_AUTO_CHECK_MODE) //1为自动测长0为手动输入长度
  850. {
  851. if (cCheckLengthOk)
  852. {
  853. if (zipper_length > MXC_DC_PARAM_LOWSPEED_LENGTH)
  854. {
  855. AxisMovePosAccDecNotStop(X_AXIS, MXC_DC_PARAM_SET_SPEED,
  856. zipper_length - MXC_DC_PARAM_LOWSPEED_LENGTH,
  857. 2000, MXC_DC_PARAM_LOW_SPEED, 150,
  858. 150, 0);
  859. }
  860. else
  861. {
  862. AxisMovePosAccDecNotStop(X_AXIS, MXC_DC_PARAM_LOW_SPEED, zipper_length,
  863. 1000, MXC_DC_PARAM_LOW_SPEED, 30, 30, 0);
  864. }
  865. }
  866. else
  867. {
  868. if (cCheckLengthOk == 0)
  869. {
  870. cZipperLength[0] = cZipperLength[1];
  871. cZipperLength[1] = zipper_length_buff;
  872. if (ComPareLength())//返回1,前后拉链没有明显变化
  873. {
  874. cCheckLengthOk = 1;
  875. }
  876. }
  877. if (cCheckLengthOk)
  878. {
  879. zipper_length = cZipperLength[1];
  880. if (zipper_length > MXC_PARAM_DAOKOU_LENGTH)
  881. {
  882. SetData32bits(MXC_XC_ZIPPER_LENGTH_ADDR, zipper_length - MXC_PARAM_DAOKOU_LENGTH);
  883. }
  884. if (zipper_length > MXC_DC_PARAM_LOWSPEED_LENGTH)
  885. {
  886. AxisMovePosAccDecNotStop(X_AXIS, MXC_DC_PARAM_SET_SPEED,
  887. zipper_length - MXC_DC_PARAM_LOWSPEED_LENGTH,
  888. 2000, MXC_DC_PARAM_LOW_SPEED, 100,
  889. 100, 100);
  890. }
  891. else
  892. {
  893. AxisMovePosAccDecNotStop(X_AXIS, MXC_DC_PARAM_LOW_SPEED, zipper_length,
  894. 1000, MXC_DC_PARAM_LOW_SPEED, 30, 30, 0);
  895. }
  896. }
  897. else
  898. {
  899. AxisContinueMoveAcc(X_AXIS, MXC_PARAM_FIRST_SPEED, MXC_DC_DIR_P, 1200,
  900. 800, 80, 120);
  901. }
  902. }
  903. }
  904. else//手动输入长度模式
  905. {
  906. if (dwZipCnt == 0)
  907. AxisContinueMoveAcc(X_AXIS, MXC_PARAM_FIRST_SPEED, MXC_DC_DIR_P, 1200, 1200,
  908. 80, 120);
  909. else
  910. {
  911. zipper_length = MXC_SET_ZIPPER_LENGTH + (*revise_buff) + MXC_PARAM_DAOKOU_LENGTH;
  912. //输入长度过大
  913. if (zipper_length > zipper_length_buff && dwZipCnt > 1)
  914. zipper_length = zipper_length_buff;
  915. if (zipper_length > MXC_DC_PARAM_LOWSPEED_LENGTH)
  916. {
  917. AxisMovePosAccDecNotStop(X_AXIS, MXC_DC_PARAM_SET_SPEED,
  918. zipper_length - MXC_DC_PARAM_LOWSPEED_LENGTH,
  919. 1000, MXC_DC_PARAM_LOW_SPEED, MXC_DC_PARAM_SET_SPEED / 300,
  920. MXC_DC_PARAM_SET_SPEED / 300, 0);
  921. }
  922. else
  923. {
  924. AxisMovePosAccDecNotStop(X_AXIS, MXC_DC_PARAM_LOW_SPEED, zipper_length,
  925. 800, MXC_DC_PARAM_LOW_SPEED, 30, 30, 0);
  926. }
  927. }
  928. }
  929. MXC_DC_cMotorStep = 22;
  930. }
  931. else // 感应方式
  932. {
  933. AxisContinueMoveAcc(X_AXIS, MXC_DC_PARAM_SET_SPEED, MXC_DC_DIR_P,1000,1000,30,30);
  934. MXC_DC_cMotorStep = 21;
  935. }
  936. MXC_cGouZhenTime = dwTickCount + MXC_PARAM_GZ_DELAY;
  937. MXC_DC_cMotorDelay = dwTickCount + MXC_MOTOR_ALALRM_TIME;
  938. break;
  939. case 21:
  940. //if ((dwTickCount >= MXC_cGouZhenTime))
  941. // MXC_GouZhen_VAVLE = 0;
  942. if (MXC_DEC_MODE == 0) // 感应模式
  943. {
  944. if (MXC_JianSu_IN_DW)
  945. {
  946. AxisChangeSpeedDirect(X_AXIS, MXC_DC_PARAM_LOW_SPEED);
  947. //MXC_cGouZhenTime = dwTickCount + MXC_PARAM_GZ_DELAY;
  948. MXC_DC_cMotorStep = 23;
  949. }
  950. if (MXC_GouZhen_IN)
  951. {
  952. MXC_DC_cMotorStep = 24;
  953. AxisEgmStop(X_AXIS);
  954. }
  955. }
  956. if (dwTickCount >= MXC_DC_cMotorDelay)
  957. MXC_SetAlarmCode(MXC_LONG_TIME_NO_ZIPPER_ALARM);
  958. break;
  959. case 22:
  960. // if ((dwTickCount >= MXC_cGouZhenTime) && (MXC_PARAM_GZ_RESET_MODE == 0))
  961. // MXC_GouZhen_VAVLE = 0;
  962. if (MXC_DEC_MODE) // 数控方式
  963. {
  964. if (MXC_PARAM_AUTO_CHECK_MODE)///1为自动测长0为手动输入长度
  965. {
  966. if (cCheckLengthOk)
  967. {
  968. if ((dwXRealPos >= (zipper_length - MXC_PARAM_GZ_LENGTH)) && MXC_PARAM_GZ_RESET_MODE)
  969. MXC_GouZhen_VAVLE = 0;
  970. }
  971. else
  972. {
  973. if (dwTickCount >= MXC_cGouZhenTime)
  974. MXC_GouZhen_VAVLE = 0;
  975. }
  976. }
  977. else
  978. {
  979. if ((dwXRealPos >= (zipper_length - MXC_PARAM_GZ_LENGTH)) && MXC_PARAM_GZ_RESET_MODE)
  980. MXC_GouZhen_VAVLE = 0;
  981. if ((dwZipCnt == 0) && (dwTickCount >= MXC_cGouZhenTime) && (MXC_PARAM_GZ_RESET_MODE == 1))
  982. MXC_GouZhen_VAVLE = 0;
  983. }
  984. if (MXC_JianSu_IN_DW)
  985. {
  986. if (cCheckLengthOk)
  987. {
  988. ;
  989. }
  990. else
  991. {
  992. AxisChangeSpeedDirect(X_AXIS, MXC_DC_PARAM_LOW_SPEED);
  993. }
  994. }
  995. if (MXC_GouZhen_IN_UP)
  996. {
  997. MXC_GouZhen_VAVLE = 0;
  998. MXC_DC_cMotorStep = 23;
  999. AxisEgmStop(X_AXIS);
  1000. }
  1001. }
  1002. if (dwTickCount >= MXC_DC_cMotorDelay)
  1003. MXC_SetAlarmCode(MXC_LONG_TIME_NO_ZIPPER_ALARM);
  1004. break;
  1005. case 23:
  1006. if ((dwTickCount >= MXC_cGouZhenTime) && (MXC_PARAM_GZ_RESET_MODE == 0))
  1007. MXC_GouZhen_VAVLE = 0;
  1008. if (MXC_DEC_MODE) // 数控方式
  1009. {
  1010. if (!X_DRV)
  1011. {
  1012. MXC_DC_cMotorStep = 0;
  1013. zipper_length_buff = dwXRealPos;
  1014. }
  1015. }
  1016. else // 感应方式
  1017. {
  1018. if (MXC_GouZhen_IN)
  1019. {
  1020. MXC_DC_cMotorStep = 24;
  1021. AxisEgmStop(X_AXIS);
  1022. }
  1023. }
  1024. if (dwTickCount >= MXC_DC_cMotorDelay)
  1025. MXC_SetAlarmCode(MXC_LONG_TIME_NO_ZIPPER_ALARM);
  1026. break;
  1027. case 24:
  1028. if (!X_DRV)
  1029. {
  1030. MXC_DC_cMotorStep = 0;
  1031. }
  1032. if (dwTickCount >= MXC_DC_cMotorDelay)
  1033. MXC_SetAlarmCode(MXC_LONG_TIME_NO_ZIPPER_ALARM);
  1034. break;
  1035. //色标定寸 step 40-42
  1036. case 40:
  1037. SetPos(X_AXIS, 0);
  1038. MCX_SB_ENCODE_END=dwEnRealPos;
  1039. SetEncodePos(ENCODE_X22X23, 0);
  1040. if ((dwZipCnt == 0) || SingOneFlg)
  1041. {
  1042. AxisContinueMoveAcc(X_AXIS, 1000, MXC_DC_DIR_P, 1000,
  1043. 1000, 10, 10);
  1044. MXC_DC_cMotorStep = 41;
  1045. }
  1046. else
  1047. {
  1048. zipper_length=MXC_SET_ZIPPER_LENGTH+ (*revise_buff)-MXC_DC_PARAM_SEBIAO_DW_LENGTH;
  1049. if(zipper_length>MXC_MXC_PARAM_DAILUN_LENGTH)
  1050. {
  1051. cmp=MXC_PARAM_LENGTH_CMP;
  1052. cyclenum=zipper_length/MXC_MXC_PARAM_DAILUN_LENGTH;
  1053. zipper_length=zipper_length+(zipper_length*cyclenum*cmp)/((cyclenum+1)*MXC_MXC_PARAM_DAILUN_LENGTH);
  1054. }
  1055. if(zipper_length>0)
  1056. {
  1057. AxisMovePosAccDecNotStop(X_AXIS,MXC_PARAM_SB_HIGH_SPEED,zipper_length,
  1058. 1500,MXC_PARAM_SB_LOW_SPEED,100,100,
  1059. PosToPulse(X_AXIS,MXC_PARAM_SEBIAO_LOWSPEED_LENGTH));
  1060. }
  1061. else
  1062. {
  1063. MXC_SetAlarmCode(MXC_ZIPPER_SB_LENGTH_ALARM);
  1064. }
  1065. MXC_DC_cMotorStep = 41;
  1066. }
  1067. cSeBiaoOk = 0;
  1068. cSeBiaoEn = 0;
  1069. MXC_DC_cMotorDelay = dwTickCount + MXC_MOTOR_ALALRM_TIME;
  1070. break;
  1071. case 41://使能色标位置
  1072. if (dwZipCnt == 0)
  1073. {
  1074. cSeBiaoOk = 0;
  1075. cSeBiaoEn = 1;
  1076. MXC_DC_cMotorStep = 42;
  1077. }
  1078. else
  1079. {
  1080. if (dwXRealPos>=zipper_length-MXC_PARAM_SEBIAO_LOWSPEED_LENGTH)
  1081. {
  1082. if ((dwXRealPos+MXC_PARAM_SEBIAO_TQ_LENGTH) >= zipper_length+MXC_PARAM_First_CMP)
  1083. {
  1084. cSeBiaoOk = 0;//开启色标中断
  1085. cSeBiaoEn = 1;//色标中断使能
  1086. MXC_DC_cMotorStep = 42;
  1087. MXC_DC_cMotorDelay = dwTickCount + MXC_MOTOR_ALALRM_TIME;
  1088. }
  1089. else if (dwXRealPos > (zipper_length + MXC_PARAM_SEBIAO_ERROR_LENGTH+MXC_PARAM_First_CMP))
  1090. {
  1091. MXC_SetAlarmCode(MXC_NO_SEBIAO_ALARM);
  1092. }
  1093. }
  1094. }
  1095. break;
  1096. case 42://色标定位
  1097. if(cSeBiaoOk && cSeBiaoEn)
  1098. {
  1099. cSeBiaoEn = 0;
  1100. if (dwZipCnt == 0)
  1101. {
  1102. zipper_length= MXC_DC_PARAM_SEBIAO_DW_LENGTH-(MXC_SB_SaveLength-MXC_SB_ENCODE_MIN);
  1103. AxisMovePosAccDec(X_AXIS, MXC_DC_PARAM_SB_OFFSET_SPEED,
  1104. MXC_DC_PARAM_SEBIAO_DW_LENGTH,
  1105. 800, 800,
  1106. 120, 100, 50);
  1107. MXC_DC_cMotorStep = 44;
  1108. MXC_Clear_Servo_Pos=1;
  1109. }
  1110. else
  1111. {
  1112. zipper_length= MXC_DC_PARAM_SEBIAO_DW_LENGTH-MXC_PARAM_First_CMP;
  1113. AxisMovePosAccDec(X_AXIS, MXC_DC_PARAM_SB_OFFSET_SPEED,
  1114. zipper_length,
  1115. 800, 800,
  1116. 120, 100, 50);
  1117. MXC_DC_cMotorStep = 44;
  1118. MCX_XPOS_BUFF=dwXRealPos;
  1119. DISPLAY_DATA0=dwXRealPos-MXC_SB_SaveLength;
  1120. }
  1121. }
  1122. break;
  1123. case 44://色标定位
  1124. if (dwZipCnt == 0&&!X_DRV)
  1125. {
  1126. MXC_DC_cMotorStep = 45;
  1127. MXC_bSeBiao_Check=1;//第一条,屏幕弹出小窗口,人工确认色标定位位置
  1128. MXC_bSeBiao_CheckOK=0;
  1129. MXC_bSeBiao_CheckStop=0;
  1130. MXC_Clear_Servo_Pos=0;
  1131. }
  1132. else if(!X_DRV)
  1133. {
  1134. MXC_DC_cMotorStep = 0;
  1135. }
  1136. else if (dwTickCount >= MXC_DC_cMotorDelay)
  1137. {
  1138. MXC_SetAlarmCode(MXC_NO_SEBIAO_ALARM);
  1139. }
  1140. break;
  1141. case 45:
  1142. if(MXC_bSeBiao_CheckOK)//人工确认位置色标定位位置正确
  1143. {
  1144. MXC_bSeBiao_CheckOK=0;
  1145. MXC_DC_cMotorStep = 0;
  1146. MXC_bSeBiao_Check=0;
  1147. }
  1148. if(MXC_bSeBiao_CheckStop)//位置不正确,停止
  1149. {
  1150. MXC_bSeBiao_CheckStop=0;
  1151. dwZipCnt = 0;
  1152. MXC_DC_bAlarmStop = 1;
  1153. MXC_DC_SingOneFlag = 0;
  1154. MXC_DC_cAutoStep = 0;
  1155. MXC_DC_bRunning = 0;
  1156. MXC_bSeBiao_Check=0;
  1157. }
  1158. break;
  1159. #if 0
  1160. //编码器定位
  1161. case 60:
  1162. if(dwEnRealPos>(MXC_SET_ZIPPER_LENGTH+MXC_PARAM_DAOKOU_LENGTH) && MXC_CRUKONGWEILENGTH==0)
  1163. {
  1164. MXC_DC_cMotorStep = 64;
  1165. MXC_CRUKONGWEILENGTH = MXC_PARAM_DAOKOU_LENGTH;
  1166. MXC_DC_cMotorDelay = dwTickCount + MXC_MOTOR_ALALRM_TIME;
  1167. }
  1168. else
  1169. {
  1170. MXC_DC_cMotorStep = 61;
  1171. MXC_DC_cMotorDelay = dwTickCount;
  1172. SetPos(X_AXIS, 0);
  1173. }
  1174. break;
  1175. case 61:
  1176. if(dwTickCount >= MXC_DC_cMotorDelay)
  1177. {
  1178. SetPos(X_AXIS, 0);
  1179. if(MXC_CRUKONGWEILENGTH==0)
  1180. {
  1181. zipper_length = MXC_SET_ZIPPER_LENGTH + (*revise_buff) + MXC_PARAM_DAOKOU_LENGTH - dwEnRealPos ;//- MXC_ENCODE_FENZHEN_Lenth/3;//-(MXC_ENCODE_FENZHEN_Lenth); //
  1182. MXC_CRUKONGWEILENGTH = MXC_PARAM_DAOKOU_LENGTH;
  1183. }
  1184. else if(MXC_DC_KongWei_Length-MXC_CRUKONGWEILENGTH>=MXC_PARAM_DAOKOU_LENGTH)
  1185. {
  1186. zipper_length=MXC_PARAM_DAOKOU_LENGTH;
  1187. MXC_CRUKONGWEILENGTH+=zipper_length;
  1188. }
  1189. else
  1190. {
  1191. zipper_length=MXC_DC_KongWei_Length-MXC_CRUKONGWEILENGTH;
  1192. MXC_CRUKONGWEILENGTH+=zipper_length;
  1193. }
  1194. if(zipper_length<1400)
  1195. {
  1196. if (zipper_length > MXC_DC_PARAM_LOWSPEED_LENGTH)
  1197. {
  1198. AxisMovePosAccDec(X_AXIS, MXC_DC_PARAM_SET_SPEED * 3 / 4 + 600, zipper_length, 1200, MXC_DC_PARAM_LOW_SPEED, MXC_DC_PARAM_SET_SPEED/300, MXC_DC_PARAM_SET_SPEED/300, PosToPulse(X_AXIS, MXC_DC_PARAM_LOWSPEED_LENGTH)); //1200 600
  1199. }
  1200. else
  1201. {
  1202. AxisMovePosAccDec(X_AXIS, MXC_DC_PARAM_LOW_SPEED, zipper_length, 1200,
  1203. MXC_DC_PARAM_LOW_SPEED, 50, 50, 0); //1200 600
  1204. }
  1205. }
  1206. else if(zipper_length<2400)
  1207. {
  1208. AxisMovePosAccDec(X_AXIS,MXC_DC_PARAM_SET_SPEED*7/8,zipper_length,1200,MXC_DC_PARAM_LOW_SPEED,MXC_DC_PARAM_SET_SPEED/300,MXC_DC_PARAM_SET_SPEED/300,PosToPulse(X_AXIS, MXC_DC_PARAM_LOWSPEED_LENGTH));//1200 600
  1209. }
  1210. else
  1211. {
  1212. AxisMovePosAccDec(X_AXIS,MXC_DC_PARAM_SET_SPEED,zipper_length,1200,MXC_DC_PARAM_LOW_SPEED,MXC_DC_PARAM_SET_SPEED/300,MXC_DC_PARAM_SET_SPEED/300,PosToPulse(X_AXIS, MXC_DC_PARAM_LOWSPEED_LENGTH));//1200 600
  1213. }
  1214. MXC_DC_cMotorDelay = dwTickCount + MXC_MOTOR_ALALRM_TIME;
  1215. MXC_DC_cMotorStep = 62;
  1216. }
  1217. break;
  1218. case 62:
  1219. if(!X_DRV)//||(dwEnRealPos>=dwXRealPos)&&(dwXRealPos>=MXC_PARAM_DAOKOU_LENGTH))
  1220. {
  1221. //AxisEgmStop(X_AXIS);
  1222. MXC_DC_cMotorStep = 63;
  1223. MXC_DC_cMotorDelay = dwTickCount+0;
  1224. }
  1225. else if(dwTickCount >= MXC_DC_cMotorDelay)
  1226. MXC_SetAlarmCode(MXC_LONG_TIME_NO_ZIPPER_ALARM);
  1227. break;
  1228. case 63:
  1229. if(dwTickCount >= MXC_DC_cMotorDelay)
  1230. {
  1231. // if(MXC_MOTOR_DATA_Num<=99)user_datas[420+MXC_MOTOR_DATA_Num] = dwEnRealPos;
  1232. if(dwEnRealPos<dwXRealPos)
  1233. {
  1234. zipper_length=(dwXRealPos-dwEnRealPos);
  1235. AxisMovePosAccDec(X_AXIS,800,zipper_length,800,800,10,10,0);
  1236. }
  1237. MXC_DC_cMotorStep = 64;
  1238. }
  1239. break;
  1240. case 64:
  1241. if(!X_DRV)
  1242. {
  1243. if(MXC_MOTOR_DATA_Num<=99)user_datas[200+MXC_MOTOR_DATA_Num] = dwEnRealPos;
  1244. MXC_DC_cMotorDelay = dwTickCount;
  1245. MXC_DC_cMotorStep = 0;
  1246. //SetEncodePos(ENCODE_X22X23, 0);
  1247. }
  1248. // else if(dwTickCount >= MXC_DC_cMotorDelay)
  1249. // MXC_SetAlarmCode(MXC_LONG_TIME_NO_ZIPPER_ALARM, MXC_ALARM_DC);
  1250. break;
  1251. case 65:
  1252. if(dwXRealPos<=zipper_length-500)//剩余长度小于5CM
  1253. {
  1254. AxisMovePosAccDec(X_AXIS,1000,300,600,600,20,20,0);
  1255. MXC_DC_cMotorStep = 66;
  1256. }
  1257. else
  1258. {
  1259. MXC_DC_cMotorStep = 62;
  1260. }
  1261. break;
  1262. case 66:
  1263. if(!X_DRV)
  1264. {
  1265. MXC_DC_cAutoStep=2;
  1266. MXC_DC_cMotorStep=0;
  1267. MXC_CRUKONGWEILENGTH=0;
  1268. }
  1269. break;
  1270. #endif
  1271. }
  1272. }
  1273. //下冲
  1274. void MXC_XiaChong(void)
  1275. {
  1276. switch(MXC_cXiaChongStep)
  1277. {
  1278. case 0:
  1279. break;
  1280. case 1:
  1281. MXC_cXiaChongStep = 2;
  1282. MXC_cRightFZStep = 1;//启动右分针
  1283. MXC_cLeftFZStep = 0;
  1284. break;
  1285. case 2:
  1286. if((MXC_cRightFZStep == 0) && (MXC_cLeftFZStep == 0) && MXC_RighttFenZhen_IN && MXC_LeftFenZhen_IN)
  1287. {
  1288. MXC_XC_ShaChe = 0;//打开刹车
  1289. if (MXC_DC_bRunning)
  1290. {
  1291. MXC_cXiaChongDelay = dwTickCount + MXC_PARAM_DELAY_XC;
  1292. }
  1293. MXC_cXiaChongStep = 3;
  1294. }
  1295. break;
  1296. case 3:
  1297. if(dwTickCount >= MXC_cXiaChongDelay)
  1298. {
  1299. MXC_cXiaChongStep = 4;
  1300. MXC_XiaChong_MOTOR = 1;
  1301. if(MXC_DC_bRunning) MXC_GouZhen_VAVLE = 1;
  1302. MXC_cXiaChongDelay = dwTickCount + MXC_XIACHONG_EEROR_TIME;
  1303. }
  1304. break;
  1305. case 4:
  1306. if(MXC_XiaChong_IN_UP)
  1307. {
  1308. SetEncodePos(ENCODE_X22X23, 0);
  1309. SetPos(X_AXIS, 0);
  1310. // if(MXC_MOTOR_DATA_Num<=99)user_datas[200+MXC_MOTOR_DATA_Num] = dwEnRealPos;
  1311. MXC_LeftFenZhen_VAVLE = 0;
  1312. MXC_RightFenZhen_VAVLE = 0;
  1313. MXC_cXiaChongStep = 5;
  1314. MXC_cShaCheStep = 1;
  1315. MXC_cXiaChongDelay = dwTickCount + MXC_XC_Stop_Delay;
  1316. }
  1317. else if(dwTickCount >= MXC_cXiaChongDelay)//感应异常
  1318. {
  1319. MXC_SetAlarmCode(MXC_XC_ALARM);
  1320. MXC_LeftFenZhen_VAVLE = 0;
  1321. MXC_RightFenZhen_VAVLE = 0;
  1322. MXC_cXiaChongStep = 0;
  1323. MXC_XiaChong_MOTOR = 0;
  1324. MXC_cShaCheStep = 1;
  1325. }
  1326. break;
  1327. case 5:
  1328. if(dwTickCount >= MXC_cXiaChongDelay)
  1329. {
  1330. // user_datas[200+MXC_MOTOR_DATA_Num] = dwEnRealPos;
  1331. MXC_MOTOR_DATA_Num++;
  1332. if(MXC_MOTOR_DATA_Num > 99)
  1333. MXC_MOTOR_DATA_Num = 0;
  1334. if(!MXC_DC_bRunning){
  1335. SetEncodePos(ENCODE_X22X23, 0);
  1336. SetPos(X_AXIS, 0);
  1337. }
  1338. MXC_XiaChong_MOTOR = 0;
  1339. MXC_cXiaChongStep = 0;
  1340. }
  1341. break;
  1342. }
  1343. }
  1344. void MXC_DC_ShaChe(void)
  1345. {
  1346. //刹车
  1347. switch(MXC_cShaCheStep)
  1348. {
  1349. case 1:
  1350. MXC_cShaCheStep = 2;
  1351. MXC_cShaCheDelay = dwTickCount + MXC_PARAM_ShaChe_Delay;
  1352. break;
  1353. case 2:
  1354. if(dwTickCount >= MXC_cShaCheDelay)
  1355. {
  1356. MXC_cShaCheStep = 3;
  1357. MXC_cShaCheDelay = dwTickCount + MXC_PARAM_ShaChe_TIME;
  1358. MXC_XC_ShaChe = 1;
  1359. }
  1360. break;
  1361. case 3:
  1362. if(dwTickCount >= MXC_cShaCheDelay)
  1363. {
  1364. MXC_XC_ShaChe = 0;
  1365. MXC_cShaCheStep = 0;
  1366. }
  1367. break;
  1368. }
  1369. }
  1370. void MXC_FenZhen(void)
  1371. {
  1372. switch (MXC_cRightFZStep)
  1373. {
  1374. case 0:
  1375. break;
  1376. case 1:
  1377. MXC_cRightFZ_Delay = MXC_RightFZ_Delay + dwTickCount;
  1378. MXC_cRightFZStep = 2;
  1379. break;
  1380. case 2:
  1381. if (dwTickCount >= MXC_cRightFZ_Delay)
  1382. {
  1383. MXC_cRightFZStep = 3;
  1384. MXC_RightFenZhen_VAVLE = 1; //右分针电磁阀
  1385. MXC_cRightFZ_Delay = dwTickCount + MXC_FENZHEN_EEROR_TIME;
  1386. }
  1387. break;
  1388. case 3:
  1389. if (!MXC_RightFenZhen_Origin_IN) //右分针原点离开
  1390. {
  1391. MXC_cRightFZ_Delay = dwTickCount + MXC_DC_RightFZ_AGAIN_TIME;
  1392. MXC_cRightFZStep = 4;
  1393. } //右分针不下去
  1394. else if (dwTickCount >= MXC_cRightFZ_Delay)
  1395. {
  1396. MXC_SetAlarmCode(MXC_RFZ_ORIGIN_ALARM);//警告暂停 分针下冲步骤都清零
  1397. MXC_RightFenZhen_VAVLE = 0;
  1398. }
  1399. break;
  1400. case 4:
  1401. if (MXC_RighttFenZhen_IN) //插针到位
  1402. {
  1403. MXC_ENcode_Cul = dwEnRealPos;
  1404. MXC_cRFengTimer = 0;
  1405. MXC_cRightFZStep = 0;
  1406. MXC_cLeftFZStep = 1; //左分针延时启动
  1407. }
  1408. else if (dwTickCount >= MXC_cRightFZ_Delay)
  1409. {
  1410. MXC_RightFenZhen_VAVLE = 0; //右分针
  1411. MXC_cRFengTimer++;
  1412. //当右分针分不到位时,左分针也要重新分针
  1413. MXC_LeftFenZhen_VAVLE = 0;
  1414. MXC_cRightFZStep = 0;
  1415. if (MXC_cRFengTimer < 4)//times 次数
  1416. {
  1417. MXC_cRightFZStep = 5;
  1418. MXC_cRightFZ_Delay = dwTickCount + MXC_FENZHEN_EEROR_TIME;
  1419. }
  1420. else
  1421. {
  1422. MXC_cRFengTimer = 0;
  1423. MXC_SetAlarmCode(MXC_RFZ_LIMIT_ALARM);
  1424. MXC_cRightFZStep = 0;
  1425. MXC_RightFenZhen_VAVLE = 0;
  1426. }
  1427. }
  1428. break;
  1429. //5-6重新下右分针
  1430. case 5:
  1431. if (MXC_RightFenZhen_Origin_IN) //退到位
  1432. {
  1433. MXC_cRightFZStep = 2;
  1434. }
  1435. else if (dwTickCount >= MXC_cRightFZ_Delay)
  1436. {
  1437. MXC_SetAlarmCode(MXC_RFZ_ORIGIN_ALARM);
  1438. MXC_RightFenZhen_VAVLE = 0;
  1439. }
  1440. break;
  1441. }
  1442. //左分针
  1443. switch (MXC_cLeftFZStep)
  1444. {
  1445. case 0:
  1446. break;
  1447. case 1:
  1448. MXC_cLeftFZ_Delay = MXC_LeftFZ_Delay + dwTickCount;
  1449. MXC_cLeftFZStep = 2;
  1450. break;
  1451. case 2:
  1452. if (dwTickCount >= MXC_cLeftFZ_Delay)
  1453. {
  1454. MXC_cLeftFZStep = 3;
  1455. MXC_LeftFenZhen_VAVLE = 1; //左分针电磁阀
  1456. MXC_cLeftFZ_Delay = dwTickCount + MXC_FENZHEN_EEROR_TIME;
  1457. }
  1458. break;
  1459. case 3: //离开左分针原点
  1460. if (!MXC_LeftFenZhen_Origin_IN) //左分针原点离开
  1461. {
  1462. MXC_cLeftFZ_Delay = dwTickCount + MXC_DC_LeftFZ_AGAIN_TIME;
  1463. MXC_cLeftFZStep = 4;
  1464. } //左分针不下去
  1465. else if (dwTickCount >= MXC_cLeftFZ_Delay)
  1466. {
  1467. MXC_SetAlarmCode(MXC_LFZ_ORIGIN_ALARM);
  1468. MXC_LeftFenZhen_VAVLE = 0;
  1469. }
  1470. break;
  1471. case 4:
  1472. if (MXC_LeftFenZhen_IN) //左插针到位
  1473. {
  1474. MXC_ENCODE_FENZHEN_Lenth = dwEnRealPos - MXC_ENcode_Cul;
  1475. MXC_cLFengTimer = 0;
  1476. MXC_cLeftFZStep = 0;
  1477. }
  1478. else if (dwTickCount >= MXC_cLeftFZ_Delay)
  1479. {
  1480. MXC_LeftFenZhen_VAVLE = 0; //左分针
  1481. MXC_cLFengTimer++;
  1482. if (MXC_cLFengTimer < 6)
  1483. {
  1484. MXC_cLeftFZStep = 5;
  1485. MXC_cLeftFZ_Delay = dwTickCount + MXC_FENZHEN_EEROR_TIME;
  1486. if ((MXC_cLFengTimer % 2) == 0)
  1487. {
  1488. MXC_RightFenZhen_VAVLE = 0;
  1489. MXC_cRightFZStep = 0;
  1490. }
  1491. }
  1492. else
  1493. {
  1494. MXC_cLFengTimer = 0;
  1495. MXC_SetAlarmCode(MXC_LFZ_LIMIT_ALARM);
  1496. MXC_cLeftFZStep = 0;
  1497. MXC_LeftFenZhen_VAVLE = 0;
  1498. }
  1499. }
  1500. break;
  1501. //5-6重新下左分针
  1502. case 5:
  1503. if (MXC_LeftFenZhen_Origin_IN) //退到位
  1504. {
  1505. MXC_cLeftFZStep = 6;
  1506. }
  1507. else if (dwTickCount >= MXC_cLeftFZ_Delay)
  1508. {
  1509. MXC_SetAlarmCode(MXC_LFZ_ORIGIN_ALARM);
  1510. MXC_cLeftFZStep = 0;
  1511. MXC_LeftFenZhen_VAVLE = 0;
  1512. }
  1513. break;
  1514. case 6:
  1515. if ((MXC_cLFengTimer % 2) == 0) //左边插两次都插不到,就退右边再同时插
  1516. {
  1517. if(MXC_RightFenZhen_Origin_IN)
  1518. {
  1519. MXC_cRightFZStep = 1;
  1520. MXC_cRFengTimer = 0;
  1521. MXC_cLeftFZStep = 0;
  1522. }
  1523. }
  1524. else
  1525. {
  1526. MXC_cLeftFZStep = 2;
  1527. }
  1528. break;
  1529. }
  1530. }
  1531. #endif