GLMXC_NiLong_StepJi - 副本.c 53 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491
  1. #include "global.h"
  2. #if CHANG_SHENG_GEI_LI_MACHINE
  3. void MXC_NiLongXiuCiJiCheckStart(void);
  4. void MXC_ShaChe_Output(void);
  5. void MXC_NiLongXiuCiJi_Motor(void);
  6. void MXC_NiLongXiuCiJi_XiaC(void);
  7. void MXC_Start_FenZ(void);
  8. void MXC_NiLongXiuCiJi_FenZhengProc(void);
  9. void MXC_ChuiQiProc(void);
  10. void MXC_JiaoDao(void);
  11. void MXC_ManualAction(void);
  12. void MXC_AutoAction(void);
  13. void MXC_NiLongXiuCiJi_GouZhenProc(void);
  14. unsigned char cLFengTimer,cRFengTimer,cGuZhangStop = 0;
  15. unsigned long cShaCheTime,cLaLianLine,cGouZhenTime;
  16. unsigned char cChuiQiStep = 0,cGouZhenResetOK;
  17. unsigned short cBudaiCheckDelay = 0;
  18. unsigned char bHandWork,bPulseTatol_EN,bFirst,cInt1_OK,cStopFlag,cOneTimes,cKey_Time;
  19. long cSetEncode,cTotal,cDinWeiTime,cAddSetPulseNum,cEncodePulse,cWorkPulseNum,dwRealPosY;
  20. unsigned long cZipperLength[2];
  21. unsigned char cCheckLengthOk=0,cDaoJu_Flag=0;
  22. unsigned char STOP_IN_FLAG,STOP_IN_FLAG_OLD,STOP_FILTER;
  23. unsigned char MXC_SingOneFlag = 0;
  24. unsigned char MXC_KD_Flag = 0,KD_GO_ON_FLAG = 0;
  25. long MXC_KD_pos = 0,save_pos_buff = 0;
  26. //故障报警
  27. void MXC_SetAlarmCode(unsigned alarm_code)
  28. {
  29. SetAlarmCode(MXC_ALARM_ADDR,alarm_code);
  30. MXC_bAlarmStop = 1;
  31. }
  32. //高速输入X31/X17外部色标信号中断
  33. void MXC_ExtiActionX31(void)
  34. {
  35. if(cSeBiaoEn && !cSeBiaoOk)
  36. {
  37. cSeBiaoOk = 1;
  38. cSeBiaoEn = 0;
  39. if(X_DRV)SetRemainLength(X_AXIS, MXC_PARAM_SEBIAO_DW_LENGTH,MXC_PARAM_SB_OFFSET_SPEED);
  40. }
  41. }
  42. void MXC_ExtiActionX20(void)
  43. {
  44. }
  45. void MXC_InitAction(void)
  46. {
  47. float length_buff,pulse_buff;
  48. CalFreqTab_X_Free(25);
  49. length_buff = MXC_PARAM_DAILUN_LENGTH;
  50. pulse_buff = 2000;
  51. XGearRatio = pulse_buff/length_buff;
  52. length_buff = MXC_PARAM_DAILUN_LENGTH;// 勾针电机一圈周长;
  53. pulse_buff = 2000; // 勾针电机细分
  54. YGearRatio = pulse_buff/length_buff;
  55. MXC_XC_SongZhou = MXC_XC_SERVER_DISEN;
  56. MXC_TuoDaiSongZhou = MXC_SERVER_DISEN;
  57. // MXC_XIA_ZHI_ENABLE = 0;
  58. if(MXC_XIA_ZHI_ENABLE)
  59. MXC_XiaZhi_MOTOR = 1;
  60. else
  61. MXC_XiaZhi_MOTOR = 0;
  62. STOP_IN_FLAG = STOP_IN;
  63. STOP_IN_FLAG_OLD = STOP_IN_FLAG;
  64. }
  65. void MXC_NiLongXiuCiJiAction(void)
  66. {
  67. MXC_NiLongXiuCiJiCheckStart(); //启动
  68. MXC_NiLongXiuCiJi_FenZhengProc(); //左右分针
  69. MXC_NiLongXiuCiJi_XiaC(); //下冲
  70. MXC_ChuiQiProc();
  71. MXC_NiLongXiuCiJi_Motor(); //拖带控制
  72. MXC_JiaoDao();
  73. MXC_ManualAction();
  74. MXC_AutoAction();
  75. MXC_NiLongXiuCiJi_GouZhenProc();
  76. }
  77. void MXC_ManualAction(void)
  78. {
  79. long i;
  80. //清总产量
  81. if(MXC_bClear) //清总产量
  82. {
  83. MXC_bClear = 0;
  84. ClrcToTal(MXC_TOTAL_ADDR);
  85. MXC_bSaveWorkData = 1;
  86. }
  87. //当长度改变时,生产总量自动清零
  88. if(MXC_bChangeLength)
  89. {
  90. MXC_bChangeLength = 0;
  91. MXC_bClear = 1;
  92. }
  93. //加10
  94. if(MXC_bAddLength)
  95. {
  96. MXC_bAddLength = 0;
  97. i = MXC_SET_REVISE_ZIPPER_LENGTH;
  98. i += 10;
  99. SetData32bits(MXC_ZIPPER_LENGTH_ADDR,i);
  100. }
  101. //减10
  102. if(MXC_bDecLength)
  103. {
  104. MXC_bDecLength = 0;
  105. i = MXC_SET_REVISE_ZIPPER_LENGTH;
  106. i -= 10;
  107. SetData32bits(MXC_ZIPPER_LENGTH_ADDR,i);
  108. }
  109. //工作方式选择(数控定寸和勾针定寸) 
  110. if(MXC_bSetDCMode)
  111. {
  112. MXC_bSetDCMode = 0;
  113. if(!MXC_bRunning)
  114. {
  115. MXC_DC_MODE++;
  116. if(MXC_DC_MODE > 2)MXC_DC_MODE = 0;
  117. if(MXC_DC_MODE != 0)
  118. {
  119. MXC_GouZhen_VAVLE = 1;
  120. MXC_XIA_ZHI_ENABLE = 0;
  121. MXC_XiaZhi_MOTOR = 0;
  122. }
  123. }
  124. }
  125. //勾针方式选择(活动勾针和固定勾针) 
  126. if(MXC_bChangeGouZhenMode)
  127. {
  128. MXC_bChangeGouZhenMode = 0;
  129. if(!MXC_bRunning)
  130. {
  131. // MXC_GOU_ZHEN_MODE++;
  132. // if(MXC_GOU_ZHEN_MODE > 1)MXC_GOU_ZHEN_MODE = 0;
  133. }
  134. }
  135. //下止工作选择) 
  136. if(MXC_bChangeXiaZhiMode)
  137. {
  138. MXC_bChangeXiaZhiMode = 0;
  139. if(!MXC_bRunning)
  140. {
  141. MXC_XIA_ZHI_ENABLE++;
  142. if(MXC_XIA_ZHI_ENABLE > 2)MXC_XIA_ZHI_ENABLE = 0;
  143. if(MXC_XIA_ZHI_ENABLE)
  144. MXC_XiaZhi_MOTOR = 1;
  145. else
  146. MXC_XiaZhi_MOTOR = 0;
  147. }
  148. }
  149. if(MXC_bJiaoDao)
  150. {
  151. MXC_cJiaoDaoStep = 1;
  152. MXC_bJiaoDao = 0;
  153. }
  154. if(MXC_bChuiQi)
  155. {
  156. MXC_bChuiQi = 0;
  157. if(MXC_cChuiQiStep == 0)MXC_cChuiQiStep = 1;
  158. }
  159. if((MXC_bRunning) == 0) ////手动
  160. {
  161. if(MXC_ManXiaChong_UP || MXC_bXiaChong)
  162. {
  163. MXC_bXiaChong = 0;
  164. if(MXC_cXiaChongStep == 0)MXC_cXiaChongStep = 1;
  165. }
  166. if(MXC_cXiaChongStep == 0)
  167. {
  168. if(MXC_bLeftFenZhen)
  169. {
  170. MXC_bLeftFenZhen = 0;
  171. MXC_LeftFenZhen_VAVLE = ~MXC_LeftFenZhen_VAVLE;
  172. }
  173. if(MXC_bRightFenZhen)
  174. {
  175. MXC_bRightFenZhen = 0;
  176. MXC_RightFenZhen_VAVLE= ~MXC_RightFenZhen_VAVLE;
  177. }
  178. //点动下冲
  179. if((MXC_bDotXiaChong))
  180. {
  181. MXC_bDotXiaChong = 0;
  182. if(MXC_LeftFenZhen_IN && MXC_RighttFenZhen_IN)
  183. {
  184. if(MXC_XiaChongMotorMode == 0)
  185. {
  186. if(MXC_cXiaChongStep == 0)MXC_cXiaChongStep = 20;
  187. }
  188. else
  189. {
  190. if(MXC_cXiaChongStep == 0)MXC_cXiaChongStep = 40;
  191. }
  192. }
  193. else
  194. {
  195. MXC_SetAlarmCode(MXC_XIA_CHONG_ALARM); //下冲条件不满足
  196. }
  197. }
  198. if(MXC_bGouZhen)
  199. {
  200. // MXC_bGouZhen = 0;
  201. if((MXC_GOU_ZHEN_MODE == 0))//普通勾针(活动)过链
  202. {
  203. MXC_cGouZhenTime = dwTickCount + 300;
  204. MXC_GouZhen_VAVLE = 1;
  205. }
  206. }
  207. }
  208. if(MXC_DC_MODE != 0) //伺服定寸
  209. {
  210. MXC_GuDingGouZhen = 1;
  211. MXC_GouZhen_VAVLE = 1;
  212. }
  213. else if((MXC_GOU_ZHEN_MODE == 0) )//普通勾针(活动)过链
  214. {
  215. if(dwTickCount >= MXC_cGouZhenTime) MXC_GouZhen_VAVLE = 0;
  216. }
  217. if(MXC_bChuDai)
  218. {
  219. MXC_ChuDai_VAVLE = 1;
  220. }
  221. else
  222. {
  223. MXC_ChuDai_VAVLE = 0;
  224. }
  225. if(MXC_GouZhenforward)
  226. {
  227. MXC_GouzhenMotor_DR = MXC_GZ_DIR_P;
  228. if(!Y_DRV)AxisContinueMoveAcc(Y_AXIS,MXC_GouzhenSpeed_Hand_SPEED,MXC_GZ_DIR_P,MXC_PARAM_START_SPEED,MXC_PARAM_ACC_SPEED,MXC_PARAM_DEC_SPEED);
  229. }
  230. if(MXC_GouZhenback)
  231. {
  232. MXC_GouzhenMotor_DR = MXC_GZ_DIR_N;
  233. if(!Y_DRV)AxisContinueMoveAcc(Y_AXIS,MXC_GouzhenSpeed_Hand_SPEED,MXC_GZ_DIR_N,MXC_PARAM_START_SPEED,MXC_PARAM_ACC_SPEED,MXC_PARAM_DEC_SPEED);
  234. }
  235. if((MXC_cGouZhenDWStep == 0) && !MXC_GouZhenforward && !MXC_GouZhenback)
  236. {
  237. if(Y_DRV)AxisDecStop(Y_AXIS);
  238. }
  239. }
  240. //下止下冲电磁铁
  241. if((MXC_XiaZhi_VAVLE != 0) && (dwTickCount >= MXC_cXiaZhiDelay))
  242. {
  243. MXC_XiaZhi_VAVLE = 0;
  244. }
  245. }
  246. void MXC_AutoAction(void)
  247. {
  248. // DISPLAY_DATA0 = MXC_cAutoStep;
  249. DISPLAY_DATA1 = MXC_cMotorStep;
  250. DISPLAY_DATA2 = MXC_cLeftFenZhenStep;
  251. DISPLAY_DATA3 = MXC_cRightFenZhenStep;
  252. DISPLAY_DATA4 = MXC_cXiaChongStep;
  253. DISPLAY_DATA5 = dwRealPos;
  254. if(MXC_bRunning)
  255. {
  256. if((!MXC_Zipper_IN))
  257. MXC_ChuDai_VAVLE = 0;
  258. else
  259. MXC_ChuDai_VAVLE = 1;
  260. if((MXC_DC_MODE == 0) && (MXC_GOU_ZHEN_MODE == 0))
  261. {
  262. if(MXC_GouZhen_IN_UP)MXC_cGouZhenTime = 1;
  263. }
  264. else
  265. MXC_cGouZhenTime = 1;
  266. switch(MXC_cAutoStep)
  267. {
  268. case 0:
  269. break;
  270. case 1:
  271. if(dwTickCount >= MXC_cAutoDelay)
  272. {
  273. if(MXC_TuoDaiSongZhou == MXC_SERVER_DISEN)
  274. {
  275. MXC_TuoDaiSongZhou = MXC_SERVER_EN;
  276. MXC_cAutoDelay = dwTickCount + 200; //先锁轴
  277. }
  278. else
  279. MXC_cAutoDelay = dwTickCount;
  280. MXC_cAutoStep = 2;
  281. }
  282. break;
  283. case 2:
  284. //左右分针要退到位,过链到位要离开
  285. if(!MXC_GouZhen_IN && MXC_LeftFenZhen_Origin_IN && MXC_RightFenZhen_Origin_IN && !MXC_LeftFenZhen_IN && !MXC_RighttFenZhen_IN && (dwTickCount >= MXC_cAutoDelay))
  286. {
  287. MXC_cAutoStep = 3;
  288. MXC_cMotorStep = 1; //启动拖带
  289. }
  290. break;
  291. case 3:
  292. //拖带已经完成
  293. if(MXC_cMotorStep == 0)
  294. {
  295. if(SingOneFlg)
  296. {
  297. dwZipCnt = 0;
  298. SingOneFlg = 0;
  299. MXC_cAutoStep = 0;
  300. MXC_bRunning = 0;
  301. }
  302. else
  303. {
  304. MXC_cAutoStep = 4;
  305. }
  306. }
  307. break;
  308. case 4:
  309. MXC_cAutoStep = 5;
  310. break;
  311. case 5:
  312. //左右分针都已完成
  313. if((MXC_cLeftFenZhenStep == 0) && (MXC_cRightFenZhenStep == 0) && (MXC_cXiaChongStep == 0))
  314. {
  315. MXC_cXiaChongStep = 1; //下冲电机启动
  316. MXC_cAutoStep = 6;
  317. }
  318. break;
  319. case 6: //下冲已完成
  320. if(((MXC_cXiaChongStep == 0) || (MXC_cXiaChongStep >= 5)) && !MXC_XiaZhi_VAVLE)
  321. {
  322. dwZipCnt++;
  323. AddToTal(MXC_TOTAL_ADDR); //计数增加和保存
  324. CalProSP(MXC_PROSPEED_ADDR);
  325. MXC_cAutoStep = 7;
  326. }
  327. break;
  328. case 7:
  329. if(MXC_LeftFenZhen_Origin_IN && MXC_RightFenZhen_Origin_IN && !MXC_LeftFenZhen_IN && !MXC_RighttFenZhen_IN)
  330. {
  331. if(GetTotal(MXC_TOTAL_ADDR) >= MXC_SET_TOTAL)MXC_SetAlarmCode(MXC_TOTAL_ALARM);
  332. MXC_cAutoStep = 8;
  333. }
  334. break;
  335. case 8:
  336. MXC_cAutoDelay = dwTickCount + MXC_PARAM_MOTOR_DELAY;
  337. if(MXC_SingOneFlag)
  338. {
  339. dwZipCnt = 0;
  340. MXC_SingOneFlag = 0;
  341. MXC_cAutoStep = 0;
  342. MXC_bRunning = 0;
  343. }
  344. MXC_cAutoStep = 1;
  345. break;
  346. }
  347. }
  348. }
  349. // 检测是否踏了脚踏开关
  350. void MXC_NiLongXiuCiJiCheckStart(void)
  351. {
  352. // 停止键 不能在工作,手动,停止过程中
  353. if((MXC_bRunning == 0) && (START_IN_UP || MXC_bStart || MXC_bNext))
  354. {
  355. if(!MXC_LeftFenZhen_Origin_IN)MXC_SetAlarmCode(MXC_START_LFZ_ORIGIN_ALARM); //没拉链
  356. else if(GetTotal(MXC_TOTAL_ADDR) >= MXC_SET_TOTAL)MXC_SetAlarmCode(MXC_TOTAL_ALARM);
  357. else if(!MXC_RightFenZhen_Origin_IN)MXC_SetAlarmCode(MXC_START_RFZ_ORIGIN_ALARM);
  358. else if(!MXC_Zipper_IN)MXC_SetAlarmCode(MXC_START_NO_ZIPPER_ALARM);
  359. else if((MXC_PARAM_SEBIAO_DW_LENGTH > MXC_SET_ZIPPER_LENGTH) && (MXC_DC_MODE==2))MXC_SetAlarmCode(MXC_SEBIAO_ZIPPER_LENGTH_ALARM);
  360. else if(MXC_KaDai_IN)MXC_SetAlarmCode(MXC_KA_DAI_ALARM);
  361. else
  362. {
  363. if(MXC_bNext)
  364. {
  365. SingOneFlg = 1;
  366. MXC_bNext = 0;
  367. }
  368. MXC_bRunning = 1;
  369. MXC_cAutoStep = 1;
  370. cGouZhenTime = 1;
  371. cCheckLengthOk = 0;
  372. cZipperLength[0] = 0;
  373. cZipperLength[1] = 0;
  374. dwZipCnt = 0;
  375. }
  376. MXC_bStart = 0;
  377. }
  378. //卡带感应
  379. if(MXC_KaDai_IN && (dwTickCount >= MXC_cKaDaiDelay))
  380. {
  381. if(MXC_DC_MODE == 1)
  382. {
  383. if(X_DRV && MXC_bRunning && (MXC_cMotorStep == 20))
  384. {
  385. MXC_KD_Flag = 1;
  386. KD_GO_ON_FLAG = 1;
  387. }
  388. }
  389. MXC_SetAlarmCode(MXC_KA_DAI_ALARM);
  390. MXC_cKaDaiDelay = dwTickCount + 2200;
  391. }
  392. if(MXC_KD_Flag)
  393. {
  394. if(!X_DRV)
  395. {
  396. MXC_KD_pos = dwRealPos - save_pos_buff;
  397. MXC_KD_Flag = 0;
  398. }
  399. }
  400. if(MXC_KaDai_IN_UP)
  401. {
  402. if(MXC_cChuiQiStep == 0)MXC_cChuiQiStep = 1;
  403. }
  404. //停止
  405. STOP_IN_FLAG_OLD = STOP_IN_FLAG;
  406. if(STOP_IN)
  407. {
  408. if(STOP_FILTER < 50)
  409. {
  410. STOP_FILTER++;
  411. }
  412. else
  413. STOP_IN_FLAG = 1;
  414. }
  415. else if(STOP_FILTER > 25)
  416. {
  417. STOP_FILTER--;
  418. }
  419. else
  420. STOP_IN_FLAG = 0;
  421. if(MXC_bStop)
  422. {
  423. MXC_bStop = 0;
  424. if(MXC_bRunning)MXC_SingOneFlag = 1;
  425. }
  426. if(((STOP_IN_FLAG && !STOP_IN_FLAG_OLD)))
  427. {
  428. MXC_bStop = 0;
  429. if(MXC_bRunning)
  430. {
  431. if(MXC_cXiaChongStep==0)
  432. {
  433. if(MXC_cChuiQiStep == 0)MXC_cChuiQiStep = 1;
  434. if(!MXC_XiaChong_MOTOR)MXC_XC_SongZhou = MXC_XC_SERVER_EN;
  435. }
  436. MXC_bRunning = 0;
  437. cStopFlag = 0;
  438. MXC_cAutoStep = 0;
  439. MXC_cMotorStep = 0;
  440. MXC_cDCPStep = 0;
  441. AxisDecStop(X_AXIS);
  442. MXC_cJiaoDaoStep = 0;
  443. SingOneFlg = 0;
  444. MXC_SingOneFlag = 0;
  445. MXC_KD_Flag = 0;
  446. KD_GO_ON_FLAG = 0;
  447. }
  448. else
  449. {
  450. MXC_bRunning = 0;
  451. cStopFlag = 0;
  452. MXC_cAutoStep = 0;
  453. MXC_cMotorStep = 0;
  454. MXC_cXiaChongStep = 0;
  455. MXC_cLeftFenZhenStep = 0;
  456. MXC_cRightFenZhenStep = 0;
  457. MXC_cJiaoDaoStep = 0;
  458. MXC_cDCPStep = 0;
  459. MXC_XiaZhi_VAVLE = 0;
  460. MXC_LeftFenZhen_VAVLE = 0;
  461. MXC_RightFenZhen_VAVLE = 0;
  462. MXC_XiaChong_MOTOR = 0;
  463. MXC_ChaoSheng = 0;
  464. MXC_JiaoDao_OUT = 0;
  465. MXC_ChuDai_VAVLE = 0;
  466. MXC_GuDingGouZhen = 0;
  467. SingOneFlg = 0;
  468. MXC_SingOneFlag = 0;
  469. MXC_KD_Flag = 0;
  470. KD_GO_ON_FLAG = 0;
  471. if(MXC_XiaChongMotorMode)
  472. MXC_XC_SongZhou = MXC_XC_SERVER_EN;
  473. else
  474. MXC_XC_ShaChe = MXC_SC_DISEN;
  475. if((MXC_cChuiQiStep == 0) &&(MXC_cXiaChongStep==0))MXC_cChuiQiStep = 1;
  476. AxisDecStop(X_AXIS);
  477. SetAlarmCode(MXC_ALARM_ADDR,MXC_NO_ALARM);
  478. }
  479. }
  480. if(!MXC_bRunning && (MXC_cMotorStep==0) && (MXC_cXiaChongStep == 0))
  481. {
  482. if(!X_DRV)MXC_TuoDaiSongZhou = MXC_SERVER_DISEN;
  483. }
  484. if(MXC_bAlarmStop)
  485. {
  486. MXC_bAlarmStop = 0;
  487. MXC_bRunning = 0;
  488. MXC_cAutoStep = 0;
  489. MXC_cMotorStep = 0;
  490. MXC_cLeftFenZhenStep = 0;
  491. MXC_cRightFenZhenStep = 0;
  492. MXC_cDCPStep = 0;
  493. MXC_LeftFenZhen_VAVLE = 0;
  494. MXC_RightFenZhen_VAVLE = 0;
  495. MXC_SingOneFlag = 0;
  496. AxisDecStop(X_AXIS);
  497. if((GetAlarmCode(MXC_ALARM_ADDR) == MXC_XIA_CHONG_ALARM) || (GetAlarmCode(MXC_ALARM_ADDR) == MXC_XC_ALARM) || (GetAlarmCode(MXC_ALARM_ADDR) == MXC_FEN_ZHEN_ALARM))
  498. {
  499. MXC_cXiaChongStep = 0;
  500. MXC_XiaChong_MOTOR = 0;
  501. }
  502. }
  503. }
  504. void MXC_JiaoDao(void)
  505. {
  506. if(MXC_cJiaoDaoStep == 1)
  507. {
  508. MXC_cChuiQiDelay = dwTickCount + 500;
  509. MXC_JiaoDao_OUT = 1;
  510. MXC_cJiaoDaoStep = 2;
  511. }
  512. else if((MXC_cJiaoDaoStep == 2) && (dwTickCount >= MXC_cChuiQiDelay))
  513. {
  514. MXC_JiaoDao_OUT = 0;
  515. MXC_cJiaoDaoStep = 0;
  516. }
  517. }
  518. void MXC_ChuiQiProc(void)
  519. {
  520. //吹气
  521. if(MXC_XiaChong_IN_UP)
  522. {
  523. if(MXC_cChuiQiStep == 0)MXC_cChuiQiStep = 1;
  524. }
  525. switch (MXC_cDCPStep)
  526. {
  527. case 0:
  528. break;
  529. case 1:
  530. MXC_cDCPStep = 2;
  531. MXC_cDaoJuCheckDelay = dwTickCount + ERRORTIME;
  532. break;
  533. case 2:
  534. if(MXC_DingChuPian_IN_DW)
  535. {
  536. MXC_cDCPStep = 0;
  537. }
  538. else if(dwTickCount >= MXC_cDaoJuCheckDelay)MXC_SetAlarmCode(MXC_DAO_JU_ALARM);
  539. break;
  540. }
  541. switch(MXC_cChuiQiStep)
  542. {
  543. case 1:
  544. MXC_cChuiQiStep = 2;
  545. if(MXC_bRunning)MXC_cChuiQiDelay = dwTickCount+MXC_PARAM_DELAY_CHUIQI_TIME;
  546. break;
  547. case 2:
  548. if(dwTickCount >= MXC_cChuiQiDelay)
  549. {
  550. MXC_cChuiQiDelay = dwTickCount + MXC_PARAM_CHUIQI_TIME;
  551. MXC_ChuiQi_VAVLE = 1;//
  552. MXC_cDCPStep = 1;
  553. MXC_cChuiQiStep = 3;
  554. }
  555. break;
  556. case 3:
  557. if(dwTickCount >= MXC_cChuiQiDelay)
  558. {
  559. MXC_ChuiQi_VAVLE = 0;//
  560. MXC_cChuiQiStep = 0;
  561. }
  562. break;
  563. }
  564. }
  565. void MXC_ShaChe_Output(void)
  566. {
  567. //启动吹气
  568. cShaCheTime = dwTickCount + (unsigned long)120;
  569. if(MXC_XiaChongMotorMode == 0)MXC_XC_SongZhou = MXC_XC_SERVER_DISEN;
  570. }
  571. void MXC_Output_XiaCi(void)//下止输出
  572. {
  573. if(MXC_XIA_ZHI_ENABLE) //下止选择
  574. {
  575. //下止输出
  576. MXC_cXiaZhiDelay = dwTickCount + MXC_PARAM_XIAZHI_TIME;
  577. MXC_XiaZhi_VAVLE = 1;
  578. }
  579. }
  580. //关下止动作
  581. void MXC_Close_XiaCi(void)
  582. {
  583. /*
  584. if((MXC_XiaMode != 0))//普通下止
  585. {
  586. if(MXC_GuoLian_IN_UP || MXC_FenDai_IN_UP)
  587. MXC_FenDai_VAVLE = 1;
  588. if(MXC_bRunning)
  589. {
  590. if(MXC_GuoLian_IN_UP && MXC_XiaZhi_VAVLE)
  591. {
  592. MXC_cXiaZhiDelay = dwTickCount + 10 * MXC_PARAM_XIAZHI_DELAY_TIME;
  593. }
  594. if(MXC_GuoLian_IN && MXC_XiaZhi_VAVLE)
  595. {
  596. if(!MXC_ChaoSheng && (dwTickCount >= MXC_cXiaZhiDelay))
  597. {
  598. MXC_ChaoSheng = 1;
  599. MXC_cXiaZhiDelay = dwTickCount + (unsigned long)10 * MXC_PARAM_CHAOSHENG_TIME;
  600. }
  601. if(MXC_ChaoSheng && (dwTickCount >= MXC_cXiaZhiDelay))
  602. {
  603. MXC_FenDai_VAVLE = 0; //分带输出
  604. MXC_ChaoSheng = 0; //超声输出
  605. MXC_XiaZhi_VAVLE = 0; //下止阀
  606. }
  607. }
  608. }
  609. }
  610. else
  611. {
  612. */
  613. //下止下冲电磁铁
  614. if((MXC_XiaZhi_VAVLE != 0) && (dwTickCount >= MXC_cXiaZhiDelay))
  615. {
  616. MXC_XiaZhi_VAVLE = 0;
  617. }
  618. // }
  619. }
  620. unsigned char ComPareLength(void)
  621. {
  622. if((cZipperLength[0] != 0) && (cZipperLength[1] != 0))
  623. {
  624. if(cZipperLength[0] > cZipperLength[1])
  625. {
  626. if((cZipperLength[0] - cZipperLength[1]) > 200)
  627. {
  628. return 0;
  629. }
  630. else
  631. return 1;
  632. }
  633. else
  634. {
  635. if((cZipperLength[1] - cZipperLength[0]) > 200)
  636. {
  637. return 0;
  638. }
  639. else
  640. return 1;
  641. }
  642. }
  643. else
  644. return 0;
  645. }
  646. void MXC_NiLongXiuCiJi_Motor(void)
  647. {
  648. static long save_buff,gou_zhen_buff,zipper_length_buff;
  649. static unsigned long zipper_length;
  650. short *revise_buff;
  651. DISPLAY_DATA6 = zipper_length;
  652. if(MXC_bRunning)
  653. {
  654. if(MXC_Zipper_IN)
  655. {
  656. MXC_cBudaiCheckDelay = dwTickCount + MXC_PARAM_MOTOR_ALARM_TIME;
  657. }
  658. else if(dwTickCount >= MXC_cBudaiCheckDelay) //没布带了
  659. {
  660. MXC_SetAlarmCode(MXC_NO_ZIPPER_ALARM); //没拉链
  661. }
  662. }
  663. dwRealPos = GetPos(X_AXIS);
  664. dwRealPosY = GetPos(Y_AXIS);
  665. switch(MXC_cMotorStep)
  666. {
  667. case 0:
  668. break;
  669. // 过链 左分针退位 左到位
  670. case 1: if(MXC_LeftFenZhen_Origin_IN && (!MXC_LeftFenZhen_IN) && MXC_RightFenZhen_Origin_IN && (!MXC_RighttFenZhen_IN))
  671. {
  672. save_buff = dwRealPos;
  673. revise_buff = &user_datas[17];
  674. save_pos_buff = dwRealPos;
  675. if(MXC_DC_MODE == 0) //钩针定寸
  676. {
  677. if(MXC_DEC_MODE) //数控模式
  678. {
  679. if(MXC_PARAM_AUTO_CHECK_MODE)
  680. {
  681. if(cCheckLengthOk)
  682. {
  683. MoveAction_Const_AccDec(X_AXIS,MXC_DIR_P,MXC_PARAM_SET_SPEED,MXC_PARAM_START_SPEED,MXC_PARAM_ACC_SPEED,MXC_PARAM_DEC_SPEED);
  684. }
  685. else
  686. {
  687. if(cCheckLengthOk == 0)
  688. {
  689. cZipperLength[0] = cZipperLength[1];
  690. cZipperLength[1] = zipper_length_buff - dwRealPos;
  691. zipper_length_buff = dwRealPos;
  692. if(ComPareLength())
  693. {
  694. cCheckLengthOk = 1;
  695. }
  696. }
  697. if(cCheckLengthOk)zipper_length = cZipperLength[1] + (*revise_buff);
  698. MoveAction_Const_AccDec(X_AXIS,MXC_DIR_P,MXC_PARAM_FIRST_SPEED,MXC_PARAM_START_SPEED,MXC_PARAM_ACC_SPEED,MXC_PARAM_DEC_SPEED);
  699. }
  700. }
  701. else
  702. {
  703. zipper_length = MXC_SET_ZIPPER_LENGTH + (*revise_buff) + MXC_PARAM_DAOKOU_LENGTH;
  704. if(dwZipCnt==0) MoveAction_Const_AccDec(X_AXIS,MXC_DIR_P,MXC_PARAM_FIRST_SPEED,MXC_PARAM_START_SPEED,MXC_PARAM_ACC_SPEED,MXC_PARAM_DEC_SPEED);
  705. else
  706. MoveAction_Const_AccDec(X_AXIS,MXC_DIR_P,MXC_PARAM_SET_SPEED,MXC_PARAM_START_SPEED,MXC_PARAM_ACC_SPEED,MXC_PARAM_DEC_SPEED);
  707. }
  708. }
  709. else // 感应方式
  710. {
  711. AxisContinueMove(X_AXIS,MXC_PARAM_SET_SPEED,MXC_DIR_P);
  712. }
  713. MXC_cMotorStep = 2;
  714. }
  715. else if(MXC_DC_MODE == 1) //电机定寸
  716. {
  717. if(KD_GO_ON_FLAG)
  718. {
  719. if(MXC_KD_pos > (MXC_SET_ZIPPER_LENGTH + (*revise_buff) + MXC_PARAM_DAOKOU_LENGTH))
  720. zipper_length = MXC_SET_ZIPPER_LENGTH + (*revise_buff) + MXC_PARAM_DAOKOU_LENGTH;
  721. else
  722. zipper_length = MXC_SET_ZIPPER_LENGTH + (*revise_buff) + MXC_PARAM_DAOKOU_LENGTH - MXC_KD_pos;
  723. KD_GO_ON_FLAG = 0;
  724. }
  725. else
  726. zipper_length = MXC_SET_ZIPPER_LENGTH + (*revise_buff) + MXC_PARAM_DAOKOU_LENGTH;
  727. MXC_cMotorStep = 20;
  728. MXC_GouZhen_VAVLE = 1; //定位(活动勾针)电磁阀
  729. MXC_GuDingGouZhen = 1; //定位(活动勾针)电磁阀
  730. AxisMovePosAccDec(X_AXIS,MXC_PARAM_SET_SPEED,zipper_length,MXC_PARAM_START_SPEED,MXC_PARAM_ACC_SPEED,MXC_PARAM_DEC_SPEED);
  731. }
  732. else //色标定寸
  733. {
  734. zipper_length = MXC_SET_ZIPPER_LENGTH + (*revise_buff);
  735. if((dwZipCnt==0)||SingOneFlg)MoveAction_Const_AccDec(X_AXIS,MXC_DIR_P,MXC_PARAM_SB_LOW_SPEED,MXC_PARAM_START_SPEED,MXC_PARAM_ACC_SPEED,MXC_PARAM_DEC_SPEED);
  736. else MoveAction_Const_AccDec(X_AXIS,MXC_DIR_P,MXC_PARAM_SB_HIGH_SPEED,MXC_PARAM_START_SPEED,MXC_PARAM_ACC_SPEED,MXC_PARAM_DEC_SPEED);
  737. cSeBiaoOk = 0;
  738. cSeBiaoEn = 0;
  739. MXC_cMotorStep = 50;
  740. }
  741. MXC_cGouZhenTime = dwTickCount + MXC_PARAM_GZ_DELAY;
  742. MXC_cMotorDelay = dwTickCount + MXC_MOTOR_ALALRM_TIME;
  743. }
  744. break;
  745. // step2-5 活动勾针定寸
  746. case 2:
  747. if((dwTickCount >= MXC_cGouZhenTime)&&(MXC_PARAM_GZ_RESET_MODE==0))MXC_GouZhen_VAVLE = 0;
  748. if(MXC_DEC_MODE) // 数控方式
  749. {
  750. if(MXC_PARAM_AUTO_CHECK_MODE)
  751. {
  752. if(cCheckLengthOk)
  753. {
  754. if(((save_buff - dwRealPos) >= (zipper_length - MXC_PARAM_GZ_LENGTH))&&MXC_PARAM_GZ_RESET_MODE)MXC_GouZhen_VAVLE = 0;
  755. if((save_buff - dwRealPos) >= (zipper_length - MXC_PARAM_LOWSPEED_LENGTH-(zipper_length/20)))
  756. {
  757. AxisChangeSpeed(X_AXIS,MXC_PARAM_LOW_SPEED);
  758. MXC_cMotorStep = 3;
  759. }
  760. }
  761. else
  762. {
  763. if(MXC_GouZhen_IN)
  764. {
  765. MXC_GouZhen_VAVLE = 0;
  766. MXC_cMotorStep = 4;
  767. AxisEgmStop(X_AXIS);
  768. }
  769. else
  770. {
  771. if(dwTickCount >= MXC_cGouZhenTime)MXC_GouZhen_VAVLE = 0;
  772. MXC_cMotorStep = 3;
  773. }
  774. }
  775. }
  776. else
  777. {
  778. if(dwZipCnt==0)
  779. {
  780. if(MXC_GouZhen_IN)
  781. {
  782. MXC_GouZhen_VAVLE = 0;
  783. MXC_cMotorStep = 4;
  784. AxisEgmStop(X_AXIS);
  785. }
  786. else
  787. {
  788. if(dwTickCount >= MXC_cGouZhenTime)MXC_GouZhen_VAVLE = 0;
  789. MXC_cMotorStep = 3;
  790. }
  791. }
  792. else
  793. {
  794. if(((save_buff - dwRealPos) >= (zipper_length - MXC_PARAM_GZ_LENGTH))&&MXC_PARAM_GZ_RESET_MODE)MXC_GouZhen_VAVLE = 0;
  795. if((save_buff -dwRealPos) >= (zipper_length - MXC_PARAM_LOWSPEED_LENGTH-(zipper_length/20)))
  796. {
  797. AxisChangeSpeed(X_AXIS,MXC_PARAM_LOW_SPEED);
  798. MXC_cMotorStep = 3;
  799. }
  800. else if(MXC_GouZhen_IN)
  801. {
  802. MXC_GouZhen_VAVLE = 0;
  803. MXC_cMotorStep = 4;
  804. AxisEgmStop(X_AXIS);
  805. }
  806. }
  807. }
  808. }
  809. else // 感应方式
  810. {
  811. if(MXC_Dec_IN_DW)
  812. {
  813. AxisChangeSpeed(X_AXIS,MXC_PARAM_LOW_SPEED);
  814. MXC_cGouZhenTime = dwTickCount + MXC_PARAM_GZ_DELAY;
  815. MXC_cMotorStep = 3;
  816. }
  817. }
  818. if(dwTickCount >= MXC_cMotorDelay)MXC_SetAlarmCode(MXC_LONG_TIME_NO_ZIPPER_ALARM);
  819. break;
  820. case 3:
  821. if((dwTickCount >= MXC_cGouZhenTime)&&(MXC_PARAM_GZ_RESET_MODE==0))MXC_GouZhen_VAVLE = 0;
  822. if(MXC_DEC_MODE) // 数控方式
  823. {
  824. if(MXC_PARAM_AUTO_CHECK_MODE)
  825. {
  826. if(((save_buff - dwRealPos) >= (zipper_length - MXC_PARAM_GZ_LENGTH))&&MXC_PARAM_GZ_RESET_MODE &&cCheckLengthOk)MXC_GouZhen_VAVLE = 0;
  827. }
  828. else
  829. {
  830. if(((save_buff - dwRealPos) >= (zipper_length - MXC_PARAM_GZ_LENGTH))&&MXC_PARAM_GZ_RESET_MODE)MXC_GouZhen_VAVLE = 0;
  831. }
  832. if(MXC_GouZhen_IN)
  833. {
  834. MXC_GouZhen_VAVLE = 0;
  835. MXC_cMotorStep = 4;
  836. AxisEgmStop(X_AXIS);
  837. }
  838. }
  839. else // 感应方式
  840. {
  841. MXC_cMotorStep = 4;
  842. }
  843. if(dwTickCount >= MXC_cMotorDelay)MXC_SetAlarmCode(MXC_LONG_TIME_NO_ZIPPER_ALARM);
  844. break;
  845. case 4:
  846. if((dwTickCount >= MXC_cGouZhenTime)&&(MXC_PARAM_GZ_RESET_MODE==0))MXC_GouZhen_VAVLE = 0;
  847. if(MXC_DEC_MODE) // 数控方式
  848. {
  849. if(!X_DRV)
  850. {
  851. MXC_cMotorStep = 0;
  852. }
  853. }
  854. else // 感应方式
  855. {
  856. if(MXC_GouZhen_IN)
  857. {
  858. MXC_cMotorStep = 5;
  859. AxisEgmStop(X_AXIS);
  860. }
  861. }
  862. if(dwTickCount >= MXC_cMotorDelay)MXC_SetAlarmCode(MXC_LONG_TIME_NO_ZIPPER_ALARM);
  863. break;
  864. case 5:
  865. if(MXC_DEC_MODE) // 数控方式
  866. {
  867. }
  868. else // 感应方式
  869. {
  870. if(!X_DRV)
  871. {
  872. MXC_cMotorStep = 0;
  873. }
  874. }
  875. if(dwTickCount >= MXC_cMotorDelay)MXC_SetAlarmCode(MXC_LONG_TIME_NO_ZIPPER_ALARM);
  876. break;
  877. /*
  878. case 11://以下为固定勾针方式
  879. if(MXC_XiaMode == 0) //0 普通下止 1 超声下止 当超声下时勾针
  880. {
  881. if(dwTickCount >= MXC_cAutoDelay)MXC_GuDingGouZhen = 0;
  882. if(!MXC_GuoLian_IN)
  883. {
  884. AxisChangeSpeed(X_AXIS,MXC_PARAM_LOW_SPEED);
  885. MXC_cMotorStep = 12;
  886. MXC_cAutoDelay = dwTickCount + (unsigned long)1500; //延时检测
  887. }
  888. }
  889. else
  890. {
  891. if(MXC_GuoLianCheckMode)
  892. {
  893. if(!MXC_GuoLian_IN)
  894. {
  895. AxisChangeSpeed(X_AXIS,MXC_PARAM_LOW_SPEED);
  896. MXC_cMotorStep = 12;
  897. MXC_cAutoDelay = dwTickCount + (unsigned long)user_datas[12]; //延时检测
  898. }
  899. }
  900. else
  901. {
  902. if(MXC_GuoLian_IN)
  903. {
  904. AxisChangeSpeed(X_AXIS,MXC_PARAM_LOW_SPEED);
  905. MXC_cMotorStep = 12;
  906. MXC_cAutoDelay = dwTickCount + (unsigned long)user_datas[12]; //延时检测
  907. }
  908. }
  909. }
  910. break;
  911. case 12:
  912. if(dwTickCount >= MXC_cAutoDelay)
  913. {
  914. if(MXC_GuDingGouZhen)
  915. {
  916. MXC_GuDingGouZhen = 0;
  917. MXC_cAutoDelay = dwTickCount + (unsigned long)1500; //延时检测
  918. }
  919. else if(!MXC_GuDingGouZhen)
  920. {
  921. // MXC_SetAlarmCode(MXC_GU_DING_GOUZHEN_ALARM);
  922. }
  923. }
  924. if(MXC_XiaMode == 0) //0 普通下止 1 超声下止 当超声下时勾针
  925. {
  926. if(MXC_GuoLian_IN)
  927. {
  928. MXC_GuDingGouZhen = 0;
  929. MXC_cMotorStep = 13;
  930. MXC_cAutoDelay = dwTickCount + (unsigned long)user_datas[10]; //延时停电机
  931. }
  932. }
  933. else
  934. {
  935. if(MXC_GuoLianCheckMode)
  936. {
  937. if(MXC_GuoLian_IN_UP)
  938. {
  939. MXC_GuDingGouZhen = 0;
  940. MXC_cMotorStep = 13;
  941. MXC_cAutoDelay = dwTickCount + (unsigned long)user_datas[10]; //延时停电机
  942. }
  943. }
  944. else
  945. {
  946. if(MXC_GuoLian_IN_DW)
  947. {
  948. MXC_GuDingGouZhen = 0;
  949. MXC_cMotorStep = 13;
  950. MXC_cAutoDelay = dwTickCount + (unsigned long)user_datas[10]; //延时停电机
  951. }
  952. }
  953. }
  954. break;
  955. case 13:
  956. if((dwTickCount >= MXC_cAutoDelay))
  957. {
  958. if(MXC_XiaMode == 0) //0 普通下止 1 超声下止 当超声下时勾针
  959. {
  960. AxisEgmStop(X_AXIS);
  961. if(MXC_GuoLian_IN)
  962. {
  963. MXC_cMotorStep = 0;
  964. MXC_LIHE_VAVLE = 0;
  965. }
  966. }
  967. else
  968. {
  969. if(MXC_GuoLianCheckMode)
  970. {
  971. if(MXC_GuoLian_IN)
  972. {
  973. MXC_cMotorStep = 0;
  974. AxisEgmStop(X_AXIS);
  975. MXC_LIHE_VAVLE = 0;
  976. }
  977. }
  978. else
  979. {
  980. if(!MXC_GuoLian_IN)
  981. {
  982. MXC_cMotorStep = 0;
  983. AxisEgmStop(X_AXIS);
  984. MXC_LIHE_VAVLE = 0;
  985. }
  986. }
  987. }
  988. }
  989. break;
  990. */
  991. //伺服定寸
  992. case 20:
  993. if(!X_DRV)MXC_cMotorStep = 0;
  994. else if(dwTickCount >= MXC_cMotorDelay)MXC_SetAlarmCode(MXC_LONG_TIME_NO_ZIPPER_ALARM);
  995. break;
  996. case 50:
  997. if(dwZipCnt==0)
  998. {
  999. cSeBiaoOk = 0;
  1000. cSeBiaoEn = 1;
  1001. MXC_cMotorStep = 51;
  1002. }
  1003. else
  1004. {
  1005. if((save_buff - dwRealPos + MXC_PARAM_LOWSPEED_LENGTH) >= (zipper_length -MXC_PARAM_SEBIAO_DW_LENGTH)) AxisChangeSpeed(X_AXIS,MXC_PARAM_LOW_SPEED);
  1006. if((save_buff - dwRealPos + MXC_PARAM_SEBIAO_TQ_LENGTH) >= (zipper_length - MXC_PARAM_SEBIAO_DW_LENGTH))
  1007. {
  1008. cSeBiaoOk = 0;
  1009. cSeBiaoEn = 1;
  1010. MXC_cMotorStep = 51;
  1011. }
  1012. else if((save_buff - dwRealPos) > (zipper_length + MXC_ERROR_LENGTH))MXC_SetAlarmCode(MXC_NO_SEBIAO_ALARM);
  1013. }
  1014. break;
  1015. case 51:
  1016. if(dwZipCnt!=0)
  1017. {
  1018. if((save_buff - dwRealPos) >= (zipper_length - MXC_PARAM_LOWSPEED_LENGTH)) AxisChangeSpeed(X_AXIS,MXC_PARAM_LOW_SPEED);
  1019. if((save_buff - dwRealPos) > (zipper_length + MXC_ERROR_LENGTH))MXC_SetAlarmCode(MXC_NO_SEBIAO_ALARM);
  1020. }
  1021. if(!X_DRV)
  1022. {
  1023. if(dwZipCnt!=0)
  1024. {
  1025. if((save_buff - dwRealPos) < (zipper_length - MXC_ERROR_LENGTH))MXC_SetAlarmCode(MXC_NO_SEBIAO_ALARM);
  1026. }
  1027. MXC_cMotorStep = 0;
  1028. }
  1029. else if(dwTickCount >= MXC_cMotorDelay)MXC_SetAlarmCode(MXC_NO_SEBIAO_ALARM);
  1030. break;
  1031. }
  1032. }
  1033. //下冲
  1034. void MXC_NiLongXiuCiJi_XiaC(void)
  1035. {
  1036. switch(MXC_cXiaChongStep)
  1037. {
  1038. case 0:
  1039. return;
  1040. break;
  1041. case 1:
  1042. {
  1043. if((MXC_XIA_ZHI_ENABLE == 2) && MXC_bRunning)
  1044. {
  1045. MXC_cXiaChongStep = 7;
  1046. MXC_GouZhen_VAVLE = 1;
  1047. MXC_cGouZhenTime = dwTickCount + 300;
  1048. MXC_cXiaChongDelay = dwTickCount + MXC_PARAM_DELAY_XC;
  1049. }
  1050. else
  1051. {
  1052. MXC_cRightFenZhenStep = 1;
  1053. MXC_cLeftFenZhenStep = 0;
  1054. cRFengTimer = 0;
  1055. cLFengTimer = 0;
  1056. MXC_cXiaChongStep = 2;
  1057. }
  1058. }
  1059. break;
  1060. case 2:
  1061. if((MXC_cRightFenZhenStep==0) && (MXC_cLeftFenZhenStep==0))
  1062. {
  1063. if(MXC_XiaChongMotorMode)
  1064. MXC_XC_SongZhou = MXC_XC_SERVER_EN;
  1065. else
  1066. MXC_XC_ShaChe = MXC_SC_DISEN;
  1067. MXC_XC_SongZhou = MXC_XC_SERVER_DISEN; //刹车打开
  1068. if(MXC_bRunning)
  1069. {
  1070. MXC_cXiaChongDelay = dwTickCount + MXC_PARAM_DELAY_XC;
  1071. }
  1072. MXC_cXiaChongStep = 3;
  1073. }
  1074. break;
  1075. case 3:
  1076. if(dwTickCount >= MXC_cXiaChongDelay)
  1077. {
  1078. MXC_cXiaChongStep = 4;
  1079. MXC_XiaChong_MOTOR = 1; //下冲电机
  1080. if(MXC_bRunning)MXC_Output_XiaCi();//下止输出
  1081. MXC_cXiaChongDelay = dwTickCount + (unsigned long)ERRORTIME; //下冲最长时间
  1082. if(MXC_XiaChongMotorMode == 1)
  1083. {
  1084. AxisMoveTwoPos(Y_AXIS,MXC_XiaChongSpeed,2000,MXC_XiaChongLowSpeed,9999999,0);
  1085. }
  1086. }
  1087. break;
  1088. case 4: //碰到右大微动,延时停
  1089. if(MXC_XiaChong_IN_UP)
  1090. {
  1091. MXC_cXiaChongDelay = dwTickCount + MXC_PARAM_XC_DELAY;
  1092. MXC_cXiaChongStep = 5;
  1093. MXC_LeftFenZhen_VAVLE = 0; //退左分针
  1094. MXC_RightFenZhen_VAVLE = 0; //退右分针
  1095. MXC_GouZhen_VAVLE = 1;
  1096. MXC_cGouZhenTime = dwTickCount + 300;
  1097. }
  1098. else if(dwTickCount >= MXC_cXiaChongDelay) //自动停机
  1099. {
  1100. MXC_cXiaChongStep = 0;
  1101. // MXC_ShaChe_Output();////刹车
  1102. MXC_XiaChong_MOTOR = 0;// //下冲电机
  1103. MXC_SetAlarmCode(MXC_XC_ALARM);
  1104. MXC_LeftFenZhen_VAVLE = 0; //退左分针
  1105. MXC_RightFenZhen_VAVLE = 0; //退右分针
  1106. AxisEgmStop(Y_AXIS);
  1107. }
  1108. break;
  1109. case 5:
  1110. if(dwTickCount >= MXC_cXiaChongDelay)
  1111. {
  1112. AxisEgmStop(Y_AXIS);
  1113. MXC_XiaChong_MOTOR = 0; //延时刹车
  1114. if(MXC_PARAM_SC_MODE)
  1115. {
  1116. MXC_cXiaChongStep = 0;
  1117. }
  1118. else
  1119. {
  1120. MXC_cXiaChongStep = 6;
  1121. }
  1122. // MXC_cXiaChongDelay = dwTickCount + MXC_PARAM_SC_DELAY;
  1123. }
  1124. break;
  1125. case 6:
  1126. // if((dwTickCount >= MXC_cXiaChongDelay))
  1127. {
  1128. MXC_cXiaChongStep = 7;
  1129. MXC_cXiaChongDelay = dwTickCount + MXC_PARAM_SC_DELAY;
  1130. // MXC_ShaChe_Output();
  1131. }
  1132. break;
  1133. case 7:
  1134. if((dwTickCount >= MXC_cXiaChongDelay)&& !MXC_XiaZhi_VAVLE)
  1135. {
  1136. MXC_cXiaChongStep = 0;
  1137. if(MXC_bRunning)MXC_Output_XiaCi();//下止输出
  1138. MXC_cXiaChongDelay = dwTickCount;
  1139. MXC_XC_SongZhou = MXC_XC_SERVER_EN;
  1140. }
  1141. break;
  1142. case 20: // 点动普通下冲动作
  1143. MXC_XC_SongZhou = MXC_XC_SERVER_DISEN;
  1144. MXC_cXiaChongDelay = dwTickCount + 50;
  1145. MXC_cXiaChongStep = 21;
  1146. break;
  1147. case 21:
  1148. if((dwTickCount >= MXC_cXiaChongDelay))
  1149. {
  1150. MXC_XiaChong_MOTOR = 1;
  1151. MXC_cXiaChongDelay = dwTickCount + 50;
  1152. MXC_cXiaChongStep = 22;
  1153. }
  1154. break;
  1155. case 22:
  1156. if((dwTickCount >= MXC_cXiaChongDelay))
  1157. {
  1158. MXC_XiaChong_MOTOR = 0;
  1159. MXC_XC_SongZhou = MXC_XC_SERVER_DISEN;
  1160. if(MXC_XiaChongMotorMode)
  1161. MXC_cXiaChongStep = 0;
  1162. else
  1163. {
  1164. MXC_cXiaChongDelay = dwTickCount + 150;
  1165. MXC_cXiaChongStep = 23;
  1166. }
  1167. }
  1168. break;
  1169. case 23:
  1170. if((dwTickCount >= MXC_cXiaChongDelay))
  1171. {
  1172. MXC_XC_SongZhou = MXC_XC_SERVER_EN;
  1173. MXC_cXiaChongStep = 0;
  1174. }
  1175. break;
  1176. case 40: // 点动电机下冲动作
  1177. MXC_XC_SongZhou = MXC_XC_SERVER_DISEN;
  1178. MXC_cXiaChongDelay = dwTickCount + 50;
  1179. MXC_cXiaChongStep = 41;
  1180. break;
  1181. case 41:
  1182. if(!Y_DRV)AxisMovePos(Y_AXIS,20,10);
  1183. MXC_cXiaChongStep = 42;
  1184. break;
  1185. case 42:
  1186. if(!Y_DRV)
  1187. {
  1188. MXC_cXiaChongStep = 0;
  1189. }
  1190. break;
  1191. }
  1192. }
  1193. //分针
  1194. void MXC_NiLongXiuCiJi_FenZhengProc(void)
  1195. {
  1196. if(MXC_FenZSelect==0)
  1197. {
  1198. MXC_cLeftFenZhenStep = 0;
  1199. MXC_cRightFenZhenStep = 0;
  1200. }
  1201. //右分针
  1202. switch(MXC_cRightFenZhenStep)
  1203. {
  1204. case 0:
  1205. break;
  1206. case 1:
  1207. MXC_cFenZhenRightDelay = MXC_PARAM_R_FZ_DELAY+dwTickCount;
  1208. MXC_cRightFenZhenStep = 2;
  1209. break;
  1210. case 2:
  1211. if(dwTickCount >= MXC_cFenZhenRightDelay)
  1212. {
  1213. MXC_cRightFenZhenStep = 3;
  1214. MXC_RightFenZhen_VAVLE = 1;//右分针电磁阀
  1215. MXC_cFenZhenRightDelay = dwTickCount + FenZhengErrorTime;
  1216. }
  1217. break;
  1218. case 3: //碰到右大微动,延时停
  1219. if(!MXC_RightFenZhen_Origin_IN) //右分针原点离开
  1220. {
  1221. MXC_cFenZhenRightDelay = dwTickCount + FenZhengErrorTime;
  1222. MXC_cRightFenZhenStep = 4;
  1223. }//右分针不下去
  1224. else if(dwTickCount >= MXC_cFenZhenRightDelay)
  1225. {
  1226. MXC_SetAlarmCode(MXC_FEN_ZHEN_ALARM);
  1227. }
  1228. break;
  1229. case 4:
  1230. if(MXC_RighttFenZhen_IN) //插针到位
  1231. {
  1232. MXC_cRightFenZhenStep = 0;
  1233. MXC_cLeftFenZhenStep = 1; //左分针延时启动
  1234. }
  1235. else if(dwTickCount >= MXC_cFenZhenRightDelay)
  1236. {
  1237. MXC_RightFenZhen_VAVLE = 0;//右分针
  1238. cRFengTimer++;
  1239. //当右分针分不到位时,左分针也要重新分针
  1240. MXC_LeftFenZhen_VAVLE = 0;
  1241. MXC_cRightFenZhenStep = 0;
  1242. if(cRFengTimer < 4)
  1243. {
  1244. MXC_cRightFenZhenStep = 5;
  1245. MXC_cFenZhenRightDelay = dwTickCount + FenZhengErrorTime;
  1246. }
  1247. else
  1248. {
  1249. MXC_SetAlarmCode(MXC_FEN_ZHEN_ALARM);
  1250. }
  1251. }
  1252. break;
  1253. case 5:
  1254. if(MXC_RightFenZhen_Origin_IN) //退到位
  1255. {
  1256. MXC_cRightFenZhenStep = 6;
  1257. }
  1258. else if(dwTickCount >= MXC_cFenZhenRightDelay)
  1259. {
  1260. MXC_SetAlarmCode(MXC_FEN_ZHEN_ALARM);
  1261. }
  1262. break;
  1263. case 6:
  1264. {
  1265. MXC_cRightFenZhenStep = 1;
  1266. }
  1267. break;
  1268. }
  1269. //左分针
  1270. switch(MXC_cLeftFenZhenStep)
  1271. {
  1272. case 0:
  1273. break;
  1274. case 1:
  1275. MXC_cFenZhenLeftDelay = MXC_PARAM_L_FZ_DELAY+dwTickCount;
  1276. MXC_cLeftFenZhenStep = 2;
  1277. break;
  1278. case 2:
  1279. if(dwTickCount >= MXC_cFenZhenLeftDelay)
  1280. {
  1281. MXC_cLeftFenZhenStep = 3;
  1282. MXC_LeftFenZhen_VAVLE = 1; //左分针电磁阀
  1283. MXC_cFenZhenLeftDelay = dwTickCount + FenZhengErrorTime;
  1284. }
  1285. break;
  1286. case 3: //离开左分针原点
  1287. if(!MXC_LeftFenZhen_Origin_IN) //左分针原点离开
  1288. {
  1289. MXC_cFenZhenLeftDelay = dwTickCount + FenZhengErrorTime;
  1290. MXC_cLeftFenZhenStep = 4;
  1291. }//左分针不下去
  1292. else if(dwTickCount >= MXC_cFenZhenLeftDelay)
  1293. {
  1294. MXC_SetAlarmCode(MXC_FEN_ZHEN_ALARM);
  1295. }
  1296. break;
  1297. case 4:
  1298. if(MXC_LeftFenZhen_IN) //插针到位
  1299. MXC_cLeftFenZhenStep = 0;
  1300. else if(dwTickCount >= MXC_cFenZhenLeftDelay)
  1301. {
  1302. MXC_LeftFenZhen_VAVLE = 0;//左分针
  1303. cLFengTimer++;
  1304. if(cLFengTimer < 6)
  1305. {
  1306. MXC_cLeftFenZhenStep = 5;
  1307. MXC_cFenZhenLeftDelay = dwTickCount + FenZhengErrorTime;
  1308. if((cLFengTimer%2) == 0)
  1309. {
  1310. MXC_RightFenZhen_VAVLE = 0;
  1311. MXC_cRightFenZhenStep = 0;
  1312. }
  1313. }
  1314. else
  1315. {
  1316. MXC_SetAlarmCode(MXC_FEN_ZHEN_ALARM);
  1317. }
  1318. }
  1319. break;
  1320. case 5:
  1321. if(MXC_LeftFenZhen_Origin_IN) //退到位
  1322. {
  1323. MXC_cLeftFenZhenStep = 6;
  1324. }
  1325. else if(dwTickCount >= MXC_cFenZhenLeftDelay)
  1326. {
  1327. MXC_SetAlarmCode(MXC_FEN_ZHEN_ALARM);
  1328. }
  1329. break;
  1330. case 6:
  1331. if((cLFengTimer%2) == 0) //左边插两次都插不到,就退右边再同时插
  1332. {
  1333. MXC_cRightFenZhenStep = 1;
  1334. cRFengTimer = 0;
  1335. MXC_cLeftFenZhenStep = 0;
  1336. }
  1337. else
  1338. {
  1339. MXC_cLeftFenZhenStep = 1;
  1340. }
  1341. break;
  1342. }
  1343. }
  1344. //勾针复位定位动作
  1345. void MXC_NiLongXiuCiJi_GouZhenProc(void)
  1346. {
  1347. if(MXC_GouZhenlocation)
  1348. {
  1349. MXC_GouZhenlocation = 0;
  1350. MXC_cGouZhenDWStep = 1;
  1351. }
  1352. switch(MXC_cGouZhenDWStep)
  1353. {
  1354. case 1:
  1355. if(!Y_DRV)AxisContinueMoveAcc(Y_AXIS,MXC_GouzhenSpeed_Auto_SPEED,MXC_GZ_DIR_P,MXC_PARAM_START_SPEED,MXC_PARAM_ACC_SPEED,MXC_PARAM_DEC_SPEED);
  1356. MXC_cGouZhenDWStep = 1;
  1357. break;
  1358. case 2:
  1359. if(MXC_GouZhenforward_IN)
  1360. {
  1361. MXC_cGouZhenDWStep = 2;
  1362. AxisDecStop(Y_AXIS);
  1363. }
  1364. break;
  1365. case 3:
  1366. if(!Y_DRV)
  1367. {
  1368. AxisContinueMoveAcc(Y_AXIS,MXC_GouzhenSpeed_Auto_SPEED,MXC_GZ_DIR_N,MXC_PARAM_START_SPEED,MXC_PARAM_ACC_SPEED,MXC_PARAM_DEC_SPEED);
  1369. MXC_cGouZhenDWStep = 4;
  1370. }
  1371. break;
  1372. case 4:
  1373. if(!MXC_GouZhenforward_IN)
  1374. {
  1375. MXC_cGouZhenDWStep = 5;
  1376. AxisDecStop(Y_AXIS);
  1377. }
  1378. break;
  1379. case 5:
  1380. if(!Y_DRV)
  1381. {
  1382. AxisMovePos(Y_AXIS,MXC_GouzhenSpeed_Auto_SPEED,MXC_SET_ZIPPER_LENGTH);
  1383. MXC_cGouZhenDWStep = 6;
  1384. }
  1385. break;
  1386. case 6:
  1387. if(!Y_DRV)MXC_cGouZhenDWStep = 0;
  1388. break;
  1389. }
  1390. }
  1391. #endif