FXWQueDuanJi_Kai.c 130 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650
  1. #include "global.h"
  2. #if FU_XIAO_WEI_MACHINE==1
  3. void Kai_QueDuan_AlarmProtect(void);
  4. void Kai_QueDuan_ManualAction(void);
  5. void Kai_QueDuan_AutoAction(void);
  6. void Kai_QueDuan_StepCheckStart(void);
  7. void Kai_QueDuan_XiaQue(void);
  8. void Kai_QueDuan_SecondXiaQue(void);
  9. void Kai_QueDuan_Motor(void);
  10. void Kai_QueDuan_YuanDianAction(void);
  11. void Kai_QueDuan_ExtiActionX31(void);
  12. void Kai_QueDuan_BingLian(void);
  13. void Kai_QueDuan_TuiLianAction(void);
  14. void Kai_StopCode(void);
  15. void Kai_Motor_SZ(unsigned char En);
  16. void Kai_QueDuan_CheckLength(void);
  17. void Kai_QueDuan_YMotor(void);
  18. void Kai_QueDuan_ZMotor(void);
  19. //夹子松带返回长链电机处
  20. void Kai_QueDuan_ReBack(void);
  21. short *KAI_QD_length_buffer;
  22. void KAI_QueDuan_ExtiActionX31(void)
  23. {
  24. // cCheckLianFlg = 1;
  25. }
  26. void KAI_QD_SetAlarmCode(unsigned alarm_code)
  27. {
  28. SetAlarmCode(KAI_QD_ALARM_ADDR,alarm_code);
  29. bAlarmStop = 1;
  30. }
  31. void Kai_StopCode(void)
  32. {
  33. switch(KAI_QD_StopStep)
  34. {
  35. case 1:
  36. KAI_QD_StopStep=2;
  37. if(X_DRV)
  38. {
  39. AxisChangeSpeedDirect(X_AXIS,GetCurSpeed(X_AXIS) * 2/3);
  40. AxisDecStop(X_AXIS);
  41. }
  42. if(Y_DRV)
  43. {
  44. AxisChangeSpeedDirect(Y_AXIS,GetCurSpeed(Y_AXIS) * 2/3);
  45. AxisDecStop(Y_AXIS);
  46. }
  47. break;
  48. case 2:
  49. if((!X_DRV || (dwXRealPos < 10)) && (!Y_DRV || (GetCurSpeed(Y_AXIS) < 3000)))
  50. {
  51. KAI_QD_StopCodeDelay=dwTickCount+350;
  52. KAI_QD_StopStep = 3;
  53. AxisEgmStop(X_AXIS);
  54. AxisEgmStop(Y_AXIS);
  55. }
  56. break;
  57. case 3:
  58. if(dwTickCount >= KAI_QD_StopCodeDelay)
  59. {
  60. if(!KAI_QD_cSTOPONE)
  61. {
  62. KAI_QD_StopStep=0;
  63. }
  64. else
  65. {
  66. KAI_QD_SetAlarmCode(KAI_QD_PARAM_ANQUANMEN_ALARM);
  67. KAI_QD_StopStep=0;
  68. KAI_QD_cSTOPONE=0;
  69. }
  70. AxisEgmStop(X_AXIS);
  71. AxisEgmStop(Y_AXIS);
  72. SetEn(X_AXIS, MOTOR_DISEN); //电机松轴
  73. SetEn(Y_AXIS, MOTOR_DISEN); //电机松轴
  74. }
  75. break;
  76. }
  77. }
  78. //电机松轴
  79. void Kai_Motor_SZ(unsigned char En)
  80. {
  81. #if 0
  82. if(En) //使能
  83. {
  84. if(KAI_QD_PARAM_MOTOR_SELECT)
  85. KAI_QD_SZ_OUT = 1; //伺服电机
  86. else
  87. KAI_QD_SZ_OUT = 0; //步进电机
  88. }
  89. else //松轴
  90. {
  91. if(KAI_QD_PARAM_MOTOR_SELECT)
  92. KAI_QD_SZ_OUT = 0; //伺服电机
  93. else
  94. KAI_QD_SZ_OUT = 1; //步进电机
  95. }
  96. #endif
  97. }
  98. void Kai_QueDuan_InitAction(void)
  99. {
  100. float KAI_QD_length_buff,pulse_buff;
  101. //X轴
  102. KAI_QD_length_buff = KAI_QD_PARAM_CYCLE_LENGTH;
  103. pulse_buff = KAI_QD_PARAM_CYCLE_PULSE;
  104. XGearRatio = pulse_buff/KAI_QD_length_buff;
  105. //Y轴长链压轮
  106. KAI_QD_length_buff = KAI_QD_PARAM_YMOTOR_CYCLE_LENGTH;
  107. pulse_buff = 2000;
  108. YGearRatio = pulse_buff/KAI_QD_length_buff;
  109. //Z轴丝杆
  110. KAI_QD_length_buff = KAI_QD_PARAM_ECMOTOR_CYCLE_LENGTH;
  111. pulse_buff = 2000;
  112. ZGearRatio = pulse_buff/KAI_QD_length_buff;
  113. SetEnReverse(X_AXIS, 0);
  114. SetEnReverse(Y_AXIS, 0);
  115. SetEnReverse(Z_AXIS, 0);
  116. SetDirReverse(X_AXIS, 0);
  117. SetDirReverse(Y_AXIS, 1);
  118. SetDirReverse(Z_AXIS, 1);
  119. SetPos(X_AXIS, 0); //启动位置设为0点
  120. SetPos(Y_AXIS, 0); //启动位置设为0点
  121. SetPos(Z_AXIS, 0); //启动位置设为0点
  122. SetEn(X_AXIS, MOTOR_DISEN);
  123. SetEn(Y_AXIS, MOTOR_DISEN);
  124. SetEn(Z_AXIS, MOTOR_EN);
  125. KAI_QD_TMSZ_OUT = 1;
  126. KAI_QD_ORIGIN_Over = 0;
  127. KAI_QD_ZMotorStep = 1; //回零点
  128. SetAlarmCode(KAI_QD_ALARM_ADDR,0);
  129. }
  130. void Kai_QueDuan_Action(void)
  131. {
  132. // InputPinConfig();
  133. Kai_QueDuan_AlarmProtect();
  134. Kai_QueDuan_Motor();
  135. Kai_QueDuan_YMotor();
  136. Kai_QueDuan_ZMotor();
  137. Kai_StopCode();
  138. Kai_QueDuan_XiaQue();
  139. Kai_QueDuan_ManualAction();
  140. Kai_QueDuan_TuiLianAction();
  141. Kai_QueDuan_BingLian();
  142. Kai_QueDuan_SecondXiaQue();
  143. Kai_QueDuan_AutoAction();
  144. Kai_QueDuan_CheckLength();
  145. Kai_QueDuan_ReBack();
  146. Kai_QueDuan_StepCheckStart(); // 调用脚踏开关检测程序
  147. //温度控制
  148. KAI_QD_KAI_WD_OUT = KAI_QD_CLTD_KAI_WD_IN && (!KAI_QD_PARAM_ECQ_DJ_SELECT || (!KAI_QD_PARAM_YCQ_DJ_SELECT && KAI_QD_PARAM_ECQ_MODE));
  149. KAI_QD_BI_WD_OUT = KAI_QD_CLTD_BI_WD_IN && (KAI_QD_PARAM_ECQ_DJ_SELECT || (KAI_QD_PARAM_YCQ_DJ_SELECT && KAI_QD_PARAM_ECQ_MODE));
  150. //运行
  151. // OutputPinConfig();
  152. }
  153. //手动动作
  154. void Kai_QueDuan_ManualAction(void)
  155. {
  156. #if 1
  157. if(KAI_QD_PARAM_TABLE_MODE)
  158. {
  159. KAI_QD_TABLE_VAVLE=0;
  160. }
  161. if(KAI_QD_PARAM_ECQ_MODE)
  162. {
  163. }
  164. if(KAI_QD_LDHXW_IN)
  165. {
  166. AxisEgmStop(X_AXIS);
  167. KAI_QD_SetAlarmCode(KAI_QD_LDHXW_ALARM);
  168. }
  169. if(bRunning == 0)
  170. {
  171. if(user_datas[KAI_QD_ALARM_ADDR] != 0)
  172. KAI_QD_ALR_STATE = 1;
  173. else
  174. KAI_QD_ALR_STATE = 0;
  175. KAI_QD_RUN_STATE = 0; //运行灯关
  176. KAI_QD_cGoLimitEn = 0;
  177. if(KAI_QD_bClearTotal) //切断计数清零
  178. {
  179. KAI_QD_bClearTotal = 0;
  180. ClrcToTal(KAI_QD_TOTAL_ADDR);
  181. }
  182. if(KAI_QD_bClearNowTotal)
  183. {
  184. KAI_QD_bClearNowTotal = 0;
  185. KAI_QD_PARAM_NOW_CNT = 0;
  186. }
  187. if(KAI_QD_bXiaQie)
  188. {
  189. KAI_QD_bXiaQie = 0;
  190. if((KAI_QD_XiaQieStep == 0) && !KAI_QD_TL_VAVLE)
  191. {
  192. KAI_QD_YD_VAVLE=1;
  193. KAI_QD_XiaQieStep = 1;
  194. }
  195. }
  196. if(KAI_QD_bQianDianDW)
  197. {
  198. KAI_QD_bQianDianDW = 0;
  199. if(KAI_QD_MotorStep == 0)
  200. {
  201. KAI_QD_MotorStep = 61;
  202. KAI_QD_cZipCnt = 0;
  203. SetEn(X_AXIS, MOTOR_EN); //电机锁轴
  204. KAI_QD_MotorDelay = dwTickCount + 150;
  205. }
  206. }
  207. if(KAI_QD_bTL)
  208. {
  209. KAI_QD_bTL = 0;
  210. if(KAI_QD_TL_VAVLE)
  211. {
  212. KAI_QD_TL_VAVLE = 0;
  213. }
  214. else if(!KAI_QD_GZ_VAVLE && !KAI_QD_SM_VAVLE)
  215. {
  216. KAI_QD_TL_VAVLE = ~KAI_QD_TL_VAVLE;
  217. }
  218. }
  219. if(KAI_QD_XiaQieStep == 0)
  220. {
  221. if(KAI_QD_PARAM_ECTMACHINE_MODE)
  222. {
  223. if(KAI_QD_ZMotorStep == 0)
  224. {
  225. if(KAI_QD_bFIRST_POS)
  226. {
  227. KAI_QD_bFIRST_POS = 0;
  228. KAI_QD_ZMotorStep = 10;
  229. }
  230. else if(KAI_QD_bSECOND_POS)
  231. {
  232. KAI_QD_bSECOND_POS = 0;
  233. KAI_QD_ZMotorStep = 20;
  234. }
  235. }
  236. }
  237. else
  238. {
  239. KAI_QD_bFIRST_POS = 0;
  240. KAI_QD_bSECOND_POS = 0;
  241. }
  242. }
  243. if(KAI_QD_bYD)
  244. {
  245. KAI_QD_bYD = 0;
  246. KAI_QD_YD_VAVLE = ~KAI_QD_YD_VAVLE;
  247. }
  248. if(KAI_QD_bGZ)
  249. {
  250. KAI_QD_bGZ = 0;
  251. KAI_QD_GZ_VAVLE = ~KAI_QD_GZ_VAVLE;
  252. }
  253. if(KAI_QD_bJD)
  254. {
  255. KAI_QD_bJD = 0;
  256. KAI_QD_JD_VAVLE = ~KAI_QD_JD_VAVLE;
  257. }
  258. if(KAI_QD_bXM)
  259. {
  260. KAI_QD_bXM = 0;
  261. if(KAI_QD_XM_VAVLE)
  262. {
  263. KAI_QD_XM_VAVLE = 0;
  264. }
  265. else
  266. {
  267. KAI_QD_XM_VAVLE = 1;
  268. }
  269. }
  270. if(KAI_QD_bKKD) //开口刀
  271. {
  272. KAI_QD_bKKD = 0;
  273. if(!KAI_QD_SM_VAVLE && !KAI_QD_SHANG_MU_LIMIT_IN)
  274. KAI_QD_KAI_XM_VAVLE =~KAI_QD_KAI_XM_VAVLE;
  275. }
  276. if(KAI_QD_bHBD) //花边刀
  277. {
  278. KAI_QD_bHBD = 0;
  279. if(!KAI_QD_SM_VAVLE && !KAI_QD_SHANG_MU_LIMIT_IN)
  280. KAI_QD_BI_XM_VAVLE = ~KAI_QD_BI_XM_VAVLE;
  281. }
  282. if(KAI_QD_bECT)
  283. {
  284. KAI_QD_bECT = 0;
  285. KAI_QD_ECT_VAVLE = ~KAI_QD_ECT_VAVLE;
  286. }
  287. if(KAI_QD_bDL)
  288. {
  289. KAI_QD_bDL = 0;
  290. // KAI_QD_DL_VAVLE = ~KAI_QD_DL_VAVLE;
  291. }
  292. if(KAI_QD_bCHUIQI)
  293. {
  294. KAI_QD_bCHUIQI = 0;
  295. KAI_QD_ECQ_CUIQI_VAVLE = 1;
  296. KAI_QD_CHUIQIDelay = dwTickCount+KAI_QD_PARAM_CHUIQI_TIME;
  297. }
  298. if(KAI_QD_bJL)
  299. {
  300. KAI_QD_bJL = 0;
  301. // KAI_QD_JIALIAN_VAVLE = ~KAI_QD_JIALIAN_VAVLE;
  302. }
  303. if(KAI_QD_bSM)
  304. {
  305. KAI_QD_bSM = 0;
  306. if(KAI_QD_SM_VAVLE)
  307. {
  308. KAI_QD_CS_OUT = 0;
  309. KAI_QD_SM_VAVLE = 0;
  310. }
  311. else if(!KAI_QD_TL_VAVLE)
  312. KAI_QD_SM_VAVLE = 1;
  313. }
  314. //推方块
  315. if(KAI_QD_bTFK)
  316. {
  317. KAI_QD_bTFK = 0;
  318. if(KAI_QD_TFK_VAVLE)
  319. {
  320. KAI_QD_YD_VAVLE=0;
  321. KAI_QD_TFK_VAVLE=0;
  322. }
  323. else
  324. {
  325. KAI_QD_YD_VAVLE=1;
  326. KAI_QD_TFK_VAVLE=1;
  327. }
  328. }
  329. if(KAI_QD_bSD)
  330. {
  331. KAI_QD_bSD = 0;
  332. KAI_QD_SD_VAVLE = ~KAI_QD_SD_VAVLE;
  333. }
  334. if(KAI_QD_bZY)
  335. {
  336. KAI_QD_bZY = 0;
  337. if(KAI_QD_SM_VAVLE && !KAI_QD_CS_OUT)
  338. KAI_QD_CS_OUT =1;
  339. else if(KAI_QD_CS_OUT)
  340. KAI_QD_CS_OUT=0;
  341. }
  342. if(KAI_QD_bDGLG)
  343. {
  344. KAI_QD_bDGLG = 0;
  345. KAI_QD_DGLG_VAVLE = ~KAI_QD_DGLG_VAVLE;
  346. }
  347. //台面电机
  348. if(KAI_QD_bTB)
  349. {
  350. KAI_QD_bTB = 0;
  351. KAI_QD_TABLE_VAVLE = ~KAI_QD_TABLE_VAVLE;
  352. KAI_QD_TMFZ_OUT = 0;
  353. KAI_QD_TMSZ_OUT = ~KAI_QD_TABLE_VAVLE;
  354. }
  355. //台面电机反转
  356. if(KAI_QD_bTBFZ)
  357. {
  358. KAI_QD_bTB = 0;
  359. KAI_QD_TABLE_VAVLE = 0;
  360. KAI_QD_TMFZ_OUT = ~KAI_QD_TMFZ_OUT;
  361. KAI_QD_TMSZ_OUT = ~KAI_QD_TMFZ_OUT;
  362. }
  363. if(KAI_QD_bTestCS)
  364. {
  365. KAI_QD_bTestCS = 0;
  366. KAI_QD_CS_OUT = 1;
  367. KAI_QD_CSDelay = dwTickCount + KAI_QD_PARAM_CS_TIME;
  368. }
  369. if(KAI_QD_bBL)//合链
  370. {
  371. KAI_QD_bBL = 0;
  372. KAI_QD_BL_VAVLE = ~KAI_QD_BL_VAVLE;
  373. }
  374. if(KAI_QD_bHL) //护链,双开用
  375. {
  376. KAI_QD_bHL = 0;
  377. // KAI_QD_HL_VAVLE = ~KAI_QD_HL_VAVLE;
  378. }
  379. if(KAI_QD_bYX)
  380. {
  381. KAI_QD_bYX = 0;
  382. // KAI_QD_YX_VAVLE = ~KAI_QD_YX_VAVLE;
  383. }
  384. /*
  385. if(KAI_QD_XiaQieStep == 0)
  386. {
  387. if(dwTickCount >= KAI_QD_CSDelay) KAI_QD_CS_OUT = 0;
  388. }
  389. */
  390. if(KAI_QD_bCLTD_JT) //长链拉带进退电磁阀Y20
  391. {
  392. KAI_QD_bCLTD_JT= 0;
  393. if(KAI_QD_CLTD_JT_VAVLE)
  394. KAI_QD_CLTD_JT_VAVLE = 0;
  395. else if(!KAI_QD_QIAN_LIMIT_IN)
  396. KAI_QD_CLTD_JT_VAVLE = 1;
  397. }
  398. if(KAI_QD_bCLTD_YL) //长链拉带压轮电磁阀Y21
  399. {
  400. KAI_QD_bCLTD_YL= 0;
  401. KAI_QD_CLTD_YL_VAVLE = ~KAI_QD_CLTD_YL_VAVLE;
  402. }
  403. //电机控制
  404. if(KAI_QD_bGoMotor)
  405. {
  406. if(!KAI_QD_QIAN_LIMIT_IN)
  407. {
  408. SetEn(X_AXIS, MOTOR_EN);//电机锁轴
  409. if(KAI_QD_PARAM_ECTMACHINE_MODE)
  410. {
  411. if(!KAI_QD_PARAM_ECTGY_MODE)
  412. {
  413. if(!KAI_QD_ZJL_ORIGIN_IN)SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_ZJLYW_ALARM); // KAI_QD_SetAlarmCode(KAI_QD_ZJLYW_ALARM);
  414. else if(!KAI_QD_YJL_ORIGIN_IN)SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_YJLYW_ALARM); // KAI_QD_SetAlarmCode(KAI_QD_YJLYW_ALARM);
  415. else if(!X_DRV)
  416. {
  417. // X轴 运行速度 启动速度 加速度 减速度
  418. AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_DIR_N,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_PARAM_GO_LOW_SPEED,10,12);
  419. }
  420. }
  421. else if(!X_DRV)
  422. {
  423. // X轴 运行速度 启动速度 加速度 减速度
  424. AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_DIR_N,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_PARAM_GO_LOW_SPEED,10,12);
  425. }
  426. }
  427. else if(!X_DRV)
  428. {
  429. // X轴 运行速度 启动速度 加速度 减速度
  430. AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_DIR_N,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_PARAM_GO_LOW_SPEED,10,12);
  431. }
  432. }
  433. else if(!X_DRV)
  434. {
  435. SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_QIAN_LIMIT_HAND_ALARM);
  436. }
  437. }
  438. if(KAI_QD_bBackMotor && !KAI_QD_LDHXW_IN) //后退限位已经取消
  439. {
  440. SetEn(X_AXIS, MOTOR_EN); //电机锁轴
  441. if(!X_DRV)
  442. // X轴 运行速度 启动速度 加速度 减速度
  443. AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_DIR_P,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_PARAM_GO_LOW_SPEED,10,12);
  444. }
  445. if(!KAI_QD_bGoMotor && !KAI_QD_bBackMotor && (KAI_QD_MotorStep == 0) && (KAI_QD_StopStep == 0))
  446. {
  447. if(X_DRV)AxisEgmStop(X_AXIS);
  448. }
  449. if(KAI_QD_QIAN_LIMIT_IN && (KAI_QD_MotorStep == 0) && !KAI_QD_bBackMotor &&(KAI_QD_AutoStep == 0))
  450. {
  451. if(X_DRV)
  452. {
  453. KAI_QD_bGoMotor = 0;
  454. AxisEgmStop(X_AXIS);
  455. }
  456. }
  457. if(KAI_QD_bCLTD_P)
  458. {
  459. SetEn(Y_AXIS, MOTOR_EN); //电机锁轴
  460. if(!Y_DRV)
  461. AxisContinueMoveAcc(Y_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_DIR_P,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_PARAM_GO_LOW_SPEED,10,12);
  462. }
  463. if(KAI_QD_bCLTD_N)
  464. {
  465. SetEn(Y_AXIS, MOTOR_EN); //电机锁轴
  466. if(!Y_DRV)
  467. AxisContinueMoveAcc(Y_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_DIR_N,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_PARAM_GO_LOW_SPEED,10,12);
  468. }
  469. if((KAI_QD_YMotorStep == 0) && !KAI_QD_bCLTD_P && !KAI_QD_bCLTD_N && (KAI_QD_StopStep == 0))
  470. {
  471. if(Y_DRV)AxisEgmStop(Y_AXIS);
  472. }
  473. }
  474. #endif
  475. }
  476. void Kai_QueDuan_AlarmProtect(void)
  477. {
  478. #if 1
  479. dwXRealPos = GetPos(X_AXIS);
  480. dwYRealPos = GetPos(Y_AXIS);
  481. dwZRealPos = GetPos(Z_AXIS);
  482. if(!bRunning)
  483. {
  484. ;
  485. }
  486. else
  487. {
  488. if(KAI_QD_PARAM_RUN_LENGTH < 5000)
  489. KAI_QD_PARAM_RUN_LENGTH= 5000;
  490. if((dwXRealPos > KAI_QD_PARAM_RUN_LENGTH) && (KAI_QD_cGoLimitEn != 0)) //第一条手动时不保护
  491. {
  492. KAI_QD_JD_VAVLE = 0;
  493. KAI_QD_StopStep=1;
  494. KAI_QD_SetAlarmCode(KAI_QD_BACK_ALARM);
  495. }
  496. }
  497. #endif
  498. }
  499. void Kai_QueDuan_AutoAction(void)
  500. {
  501. #if 1
  502. if(KAI_QD_cTABLETIME)
  503. {
  504. if(KAI_QD_cTABLETOTAL)
  505. {
  506. KAI_QD_cTABLETOTAL=0;
  507. if(KAI_QD_PARAM_LIAN_SELECT == 0)
  508. KAI_QD_TABLE_VAVLE = 1;
  509. KAI_QD_TableDelay=dwTickCount + 2000;
  510. }
  511. if(dwTickCount >= KAI_QD_TableDelay)
  512. {
  513. KAI_QD_TABLE_VAVLE = 0;
  514. KAI_QD_cTABLETIME = 0;
  515. }
  516. }
  517. if(bRunning)
  518. {//台面电机定时关掉
  519. if(!KAI_QD_cTABLETIME)
  520. {
  521. if(dwTickCount >= KAI_QD_TBDelay)
  522. KAI_QD_TABLE_VAVLE = 0;
  523. }
  524. switch(KAI_QD_AutoStep)
  525. {
  526. case 1:
  527. if((dwTickCount >= KAI_QD_AutoDelay) && ((KAI_QD_PARAM_ECTMACHINE_MODE == 0) || (KAI_QD_ORIGIN_Over && (KAI_QD_ZMotorStep == 0))))
  528. {
  529. if(KAI_QD_XiaQieStep==0)
  530. KAI_QD_AutoStep = 2;
  531. if(KAI_QD_MotorStep == 0 )
  532. {
  533. KAI_QD_MotorStep = 61; //前点定位
  534. KAI_QD_MotorDelay = dwTickCount;
  535. }
  536. KAI_QD_cGoLimitEn = 0;
  537. }
  538. break;
  539. case 2:
  540. if((KAI_QD_MotorStep == 0) && (!KAI_bTiaoShiMode || (KAI_QD_START_IN_UP)))
  541. {
  542. if(KAI_QD_PARAM_LIAN_SELECT == 0)
  543. KAI_QD_MotorStep = 30; //后拉拖带定位
  544. else
  545. KAI_QD_YMotorStep = 30; //长链
  546. KAI_QD_AutoStep = 3;
  547. KAI_QD_cGoLimitEn = 1;
  548. }
  549. break;
  550. case 3: //后面两步为延时反转步
  551. if(((KAI_QD_MotorStep == 0) && (KAI_QD_YMotorStep == 0)) && (!KAI_bTiaoShiMode || (KAI_QD_START_IN_UP)))
  552. {
  553. if(KAI_QD_SAFE_IN)
  554. {
  555. bStop = 1;
  556. }
  557. else
  558. {
  559. KAI_QD_XiaQueOver = 0;
  560. if(KAI_QD_XiaQieStep == 0)
  561. KAI_QD_XiaQieStep = 1;
  562. KAI_QD_AutoStep = 4;
  563. // KAI_QD_MotorStep = 390; //开口不用反转
  564. }
  565. }
  566. break;
  567. case 4:
  568. // 闭口
  569. if(((KAI_QD_XiaQieStep == 0) || KAI_QD_XiaQueOver))
  570. {
  571. KAI_QD_XiaQueOver = 0;
  572. //拉直要区分长链的短链(0短链,1 长链)
  573. if((KAI_QD_PARAM_LIAN_SELECT == 0) && (KAI_QD_PARAM_ECQ_MODE == 0))
  574. {
  575. if(KAI_QD_MotorStep == 0)
  576. {
  577. KAI_QD_MotorStep = 40; //切完后退
  578. }
  579. }
  580. KAI_QD_AutoStep = 5;
  581. }
  582. break;
  583. case 5:
  584. if((KAI_QD_MotorStep == 0)) //不管那种模式,说明松夹已经完成
  585. {
  586. if(KAI_QD_NQDJGNUNMBER==0)
  587. KAI_QD_AutoStep = 6;
  588. else if(KAI_QD_NQDJGNUNMBER==1)
  589. KAI_QD_SetAlarmCode(KAI_QD_LENGTH_LONG_ALARM);
  590. else if(KAI_QD_NQDJGNUNMBER==2)
  591. KAI_QD_SetAlarmCode(KAI_QD_LENGTH_SHORT_ALARM);
  592. }
  593. break;
  594. case 6:
  595. if(((KAI_QD_MotorStep == 0)) && (!KAI_bTiaoShiMode || (KAI_QD_START_IN_UP)))
  596. {
  597. KAI_QD_cZipCnt++;
  598. KAI_QD_PARAM_NOW_CNT++;
  599. KAI_QD_cTableCnt++;
  600. AddToTal(KAI_QD_TOTAL_ADDR);
  601. AddToTal(KAI_QD_WORKTOTAL_ADDR);
  602. CalProSP(KAI_QD_PROSPEED_ADDR);
  603. if(KAI_QD_cTableCnt >= KAI_QD_PARAM_TABLE_NUM)
  604. {
  605. KAI_QD_cTableCnt = 0;
  606. if(KAI_QD_PARAM_LIAN_SELECT == 0)
  607. KAI_QD_TABLE_VAVLE = 1;
  608. KAI_QD_TBDelay = dwTickCount + KAI_QD_PARAM_TB_TIME;
  609. }
  610. if(/*(GetTotal(KAI_QD_TOTAL_ADDR) >= KAI_QD_PARAM_SET_TOTAL) ||*/ SingOneFlg)
  611. {
  612. /*
  613. if((KAI_QD_PARAM_SET_TOTAL == 0) && !SingOneFlg)
  614. {
  615. KAI_QD_AutoDelay = dwTickCount + KAI_QD_PARAM_CYCLE_DELAY;
  616. KAI_QD_AutoStep = 1;
  617. }
  618. else
  619. */
  620. {
  621. bRunning = 0;
  622. KAI_QD_AutoStep = 0;
  623. SingOneFlg = 0;
  624. }
  625. // if(GetTotal(KAI_QD_TOTAL_ADDR) >= KAI_QD_PARAM_SET_TOTAL) KAI_QD_SetAlarmCode(KAI_QD_TOTAL_ALARM);
  626. }
  627. else
  628. {
  629. KAI_QD_AutoStep = 1;
  630. if((KAI_QD_PARAM_NOW_CNT >= KAI_QD_PARAM_ZHA_SHU) && (KAI_QD_PARAM_ZHA_SHU > 0))
  631. {
  632. KAI_QD_AutoDelay = dwTickCount + KAI_QD_PARAM_ZS_STOP_TIME;
  633. KAI_QD_PARAM_NOW_CNT = 0;
  634. KAI_QD_cTABLETIME = 1;
  635. KAI_QD_cTABLETOTAL= 1;
  636. if(KAI_QD_PARAM_ZS_STOP_TIME == 0)
  637. {
  638. bRunning = 0;
  639. KAI_QD_AutoStep = 0;
  640. SingOneFlg = 0;
  641. KAI_QD_cTABLETIME = 1;
  642. KAI_QD_cTABLETOTAL= 1;
  643. KAI_QD_SetAlarmCode(KAI_QD_TOTAL_ALARM);
  644. }
  645. }
  646. else
  647. {
  648. if(!X_DRV) //电机没有停止
  649. KAI_QD_AutoDelay = dwTickCount + KAI_QD_PARAM_CYCLE_DELAY;
  650. else
  651. KAI_QD_AutoDelay = dwTickCount;
  652. }
  653. }
  654. }
  655. break;
  656. }
  657. }
  658. #endif
  659. }
  660. void Kai_QueDuan_StepCheckStart(void)
  661. {
  662. #if 1
  663. // 启动
  664. if((KAI_QD_START_IN_UP) || bStart || KAI_QD_bSingle)
  665. {
  666. bStart = 0;
  667. if(!bRunning && (KAI_QD_AutoStep == 0) && KAI_QD_ORIGIN_Over&& (KAI_QD_XiaQieStep == 0))
  668. {
  669. if((KAI_QD_XIA_MU_LIMIT_IN) && !KAI_QD_PARAM_XM_ENABLE)KAI_QD_SetAlarmCode(KAI_QD_XM_DAOWEI);
  670. else if(KAI_QD_SM_VAVLE)KAI_QD_SetAlarmCode(KAI_QD_SM_ALARM);
  671. else
  672. {
  673. KAI_QD_RUN_STATE = 1; //运行灯开
  674. KAI_QD_TMSZ_OUT = 0; //台面电机锁轴
  675. KAI_QD_ALR_STATE = 0; //警告灯
  676. bRunning = 1;
  677. KAI_QD_AutoStep = 1;
  678. if(KAI_QD_bSingle)
  679. SingOneFlg= 1;
  680. KAI_QD_cZipCnt = 0;
  681. KAI_QD_cTuiFangKuaiCnt = 0;
  682. KAI_QD_cTABLETIME = 0;
  683. KAI_QD_cTABLETOTAL= 0;
  684. KAI_QD_NQDJGNUNMBER = 0;
  685. KAI_QD_CLTD_JT_VAVLE = 0;
  686. KAI_QD_CLTD_YL_VAVLE = 0;
  687. KAI_QD_ECT_VAVLE=1;
  688. KAI_QD_BL_VAVLE = 0; //并链关
  689. KAI_QD_DGLG_VAVLE = 0; //顶过链杆关
  690. SetAlarmCode(KAI_QD_ALARM_ADDR,0);
  691. SetEn(X_AXIS, MOTOR_EN); //电机锁轴
  692. SetEn(Y_AXIS, MOTOR_EN); //电机锁轴
  693. KAI_QD_AutoDelay = dwTickCount + 400;
  694. if((KAI_QD_PARAM_ECTMACHINE_MODE))
  695. {
  696. //切二次
  697. KAI_QD_ZMotorStep = 20; //移动到第二次切位置
  698. }
  699. /*
  700. if(KAI_QD_PARAM_ECTMACHINE_MODE)
  701. {
  702. if(KAI_QD_ECTD_ORIGIN_IN)
  703. KAI_QD_SetAlarmCode(KAI_QD_ECTDYW_ALARM);
  704. if(!KAI_QD_PARAM_ECTGY_MODE)
  705. {
  706. if(!KAI_QD_HL_ORIGIN)KAI_QD_SetAlarmCode(KAI_QD_DLYW_ALARM);
  707. else if(!KAI_QD_ZJL_ORIGIN_IN)
  708. KAI_QD_SetAlarmCode(KAI_QD_ZJLYW_ALARM);
  709. else if(!KAI_QD_YJL_ORIGIN_IN)
  710. KAI_QD_SetAlarmCode(KAI_QD_YJLYW_ALARM);
  711. }
  712. }
  713. */
  714. }
  715. }
  716. KAI_QD_bSingle = 0;
  717. }
  718. //停止
  719. if(KAI_QD_STOP_IN_UP || bStop)
  720. {
  721. bStop = 0;
  722. if(bRunning)
  723. {
  724. KAI_QD_AutoDelay = dwTickCount;
  725. KAI_QD_MotorDelay = dwTickCount;
  726. KAI_QD_YMotorDelay = dwTickCount;
  727. KAI_QD_XiaQieDelay = dwTickCount;
  728. KAI_QD_KaDaiDelay = dwTickCount;
  729. KAI_QD_CSDelay = dwTickCount;
  730. KAI_QD_TBDelay = dwTickCount;
  731. KAI_QD_TFKDelay = dwTickCount;
  732. KAI_QD_TLDelay = dwTickCount;
  733. dwTickCount = KAI_QD_TBDelay;
  734. KAI_QD_NQDJGNUNMBER = 0;
  735. KAI_QD_SecondXiaQueStep=0;
  736. KAI_QD_cTABLETIME = 0;
  737. KAI_QD_cTABLETOTAL= 0;
  738. SingOneFlg = 0;
  739. KAI_QD_JD_VAVLE = 0;
  740. KAI_QD_SM_VAVLE = 0;
  741. KAI_QD_XM_VAVLE = 0;
  742. KAI_QD_YD_VAVLE = 0;
  743. KAI_QD_TFK_VAVLE= 0;
  744. KAI_QD_TL_VAVLE = 0;
  745. // KAI_QD_HL_VAVLE = 0;
  746. KAI_QD_CS_OUT = 0;
  747. KAI_QD_XiaQieStep = 0;
  748. KAI_QD_MotorStep = 0;
  749. KAI_QD_YMotorStep = 0;
  750. KAI_QD_TuiLianStep = 0;
  751. KAI_QD_GZ_VAVLE = 0;
  752. KAI_QD_TABLE_VAVLE = 0;
  753. KAI_QD_TMFZ_OUT = 0;
  754. KAI_QD_TMSZ_OUT = 1;
  755. KAI_QD_DGLG_VAVLE = 0; //顶过链杆关
  756. if((KAI_QD_StopStep == 0) && (X_DRV || Y_DRV))
  757. KAI_QD_StopStep = 1;
  758. //AxisDecStop(X_AXIS);
  759. KAI_QD_BinLianStep = 0;
  760. KAI_QD_BL_VAVLE = 0;
  761. user_datas[121] = 0;
  762. user_datas[122] = 0;
  763. // KAI_QD_CLTD_JT_VAVLE = 0;
  764. KAI_QD_CLTD_YL_VAVLE = 0;
  765. KAI_QD_KAI_XM_VAVLE = 0; //开口下刀电磁阀
  766. KAI_QD_BI_XM_VAVLE = 0; //闭口下刀电磁阀
  767. SetAlarmCode(KAI_QD_ALARM_ADDR,0);
  768. // AxisEgmStop(Z_AXIS);
  769. }
  770. else
  771. {
  772. KAI_QD_AutoDelay = dwTickCount;
  773. KAI_QD_MotorDelay = dwTickCount;
  774. KAI_QD_XiaQieDelay = dwTickCount;
  775. KAI_QD_KaDaiDelay = dwTickCount;
  776. KAI_QD_CSDelay = dwTickCount;
  777. KAI_QD_TBDelay = dwTickCount;
  778. KAI_QD_TFKDelay = dwTickCount;
  779. KAI_QD_TLDelay = dwTickCount;
  780. dwTickCount = KAI_QD_TBDelay;
  781. KAI_QD_NQDJGNUNMBER = 0;
  782. SingOneFlg = 0;
  783. KAI_QD_JD_VAVLE = 0;
  784. KAI_QD_SM_VAVLE = 0;
  785. KAI_QD_XM_VAVLE = 0;
  786. KAI_QD_XM_VAVLE = 0;
  787. KAI_QD_YD_VAVLE = 0;
  788. KAI_QD_TFK_VAVLE= 0;
  789. if(!KAI_QD_PARAM_ECQ_MODE)
  790. KAI_QD_ECT_VAVLE=1;
  791. else
  792. KAI_QD_ECT_VAVLE=0;
  793. // KAI_QD_YX_VAVLE = 0;
  794. // KAI_QD_HL_VAVLE = 0;
  795. KAI_QD_TL_VAVLE = 0;
  796. KAI_QD_DGLG_VAVLE = 0; //顶过链杆关
  797. KAI_QD_GZ_VAVLE = 0;
  798. KAI_QD_SD_VAVLE=0;
  799. KAI_QD_CS_OUT = 0;
  800. KAI_QD_XiaQieStep = 0;
  801. KAI_QD_MotorStep = 0;
  802. KAI_QD_TuiLianStep = 0;
  803. KAI_QD_TABLE_VAVLE = 0;
  804. KAI_QD_cTABLETIME = 0;
  805. KAI_QD_TMFZ_OUT = 0;
  806. KAI_QD_TMSZ_OUT = 1;
  807. KAI_QD_cTABLETOTAL= 0;
  808. if((KAI_QD_StopStep == 0))
  809. {
  810. KAI_QD_cSTOPONE = 0;
  811. AxisEgmStop(X_AXIS);
  812. SetEn(X_AXIS, MOTOR_DISEN); //电机松轴
  813. AxisEgmStop(Y_AXIS);
  814. SetEn(Y_AXIS, MOTOR_DISEN); //电机松轴
  815. }
  816. KAI_QD_SecondXiaQueStep=0;
  817. KAI_QD_BinLianStep = 0;
  818. KAI_QD_BL_VAVLE = 0;
  819. KAI_QD_CLTD_JT_VAVLE = 0;
  820. KAI_QD_CLTD_YL_VAVLE = 0;
  821. SetAlarmCode(KAI_QD_ALARM_ADDR,0);
  822. // AxisEgmStop(Z_AXIS);
  823. KAI_QD_KAI_XM_VAVLE = 0; //开口下刀电磁阀
  824. KAI_QD_BI_XM_VAVLE = 0; //闭口下刀电磁阀
  825. if(KAI_QD_PARAM_ECTMACHINE_MODE) //二次切选择的话先移动到第一刀
  826. {
  827. if(KAI_QD_PARAM_ECQ_MODE)
  828. KAI_QD_ZMotorStep = 10;
  829. else
  830. KAI_QD_ZMotorStep = 20;
  831. }
  832. }
  833. bRunning = 0;
  834. KAI_QD_XiaQieStep = 0;
  835. KAI_QD_AutoStep = 0;
  836. KAI_QD_MotorStep = 0;
  837. KAI_QD_TuiLianStep = 0;
  838. // KAI_QD_ZMotorStep = 0;
  839. }
  840. if(bAlarmStop)
  841. {
  842. bAlarmStop = 0;
  843. KAI_QD_XiaQieStep = 0;
  844. KAI_QD_AutoStep = 0;
  845. KAI_QD_MotorStep = 0;
  846. KAI_QD_StopStep=0;
  847. KAI_QD_TuiLianStep = 0;
  848. KAI_QD_NQDJGNUNMBER = 0;
  849. KAI_QD_XiaQieStep = 0;
  850. KAI_QD_MotorStep = 0;
  851. KAI_QD_TuiLianStep = 0;
  852. KAI_QD_SecondXiaQueStep=0;
  853. KAI_QD_AutoDelay = dwTickCount;
  854. KAI_QD_MotorDelay = dwTickCount;
  855. KAI_QD_XiaQieDelay = dwTickCount;
  856. KAI_QD_KaDaiDelay = dwTickCount;
  857. KAI_QD_CSDelay = dwTickCount;
  858. KAI_QD_TBDelay = dwTickCount;
  859. KAI_QD_TFKDelay = dwTickCount;
  860. KAI_QD_TLDelay = dwTickCount;
  861. SingOneFlg = 0;
  862. bRunning = 0;
  863. KAI_QD_StopStep=1;
  864. // AxisEgmStop(X_AXIS);
  865. // AxisEgmStop(X_AXIS);
  866. dwTickCount = KAI_QD_TBDelay;
  867. KAI_QD_TABLE_VAVLE = 0;
  868. KAI_QD_JD_VAVLE=0;
  869. KAI_QD_GZ_VAVLE=0;
  870. }
  871. #endif
  872. }
  873. //记忆长度模式误差检测
  874. void Kai_QueDuan_CheckLength(void)
  875. {
  876. static long start_dist;
  877. #if 1
  878. switch(KAI_QD_CheckLengthStep)
  879. {
  880. case 0:break;
  881. case 1:
  882. start_dist = dwXRealPos;
  883. KAI_QD_dwWorkLength = 0;
  884. KAI_QD_CheckLengthStep = 2;
  885. break;
  886. case 2:
  887. if(KAI_QD_GUO_LIAN_IN_DW)
  888. {
  889. KAI_QD_dwWorkLength = dwXRealPos - start_dist;
  890. }
  891. break;
  892. }
  893. #endif
  894. }
  895. void Kai_QueDuan_BingLian(void)
  896. {
  897. #if 1
  898. static long bl_pos_buff;
  899. switch(KAI_QD_BinLianStep)
  900. {
  901. case 0:break;
  902. case 1:
  903. bl_pos_buff = dwXRealPos;
  904. KAI_QD_BinLianStep = 2;
  905. break;
  906. case 2:
  907. if((dwXRealPos - bl_pos_buff) >= KAI_QD_PARAM_DELAY_HL_LENGTH)
  908. {
  909. KAI_QD_BL_VAVLE = 1;
  910. KAI_QD_BinLianStep = 3;
  911. }
  912. break;
  913. case 3://有过链检测
  914. if(KAI_QD_GUO_LIAN_IN_DW || ((dwXRealPos - bl_pos_buff) >= (KAI_QD_PARAM_ZIPPER_LENGTH - KAI_QD_PARAM_HL_DELAY_BACK)))
  915. {
  916. KAI_QD_BL_VAVLE = 0;
  917. KAI_QD_BinLianStep = 0;
  918. }
  919. break;
  920. case 10:
  921. bl_pos_buff = dwXRealPos;
  922. KAI_QD_BinLianStep = 11;
  923. break;
  924. case 11:
  925. if((dwXRealPos - bl_pos_buff) >= KAI_QD_PARAM_DELAY_HL_LENGTH)
  926. {
  927. KAI_QD_BL_VAVLE = 1;
  928. KAI_QD_BinLianStep = 12;
  929. }
  930. break;
  931. case 12://有过链检测
  932. if(KAI_QD_GUO_LIAN_IN_DW)
  933. {
  934. KAI_QD_BL_VAVLE = 0;
  935. KAI_QD_BinLianStep = 0;
  936. }
  937. break;
  938. //这是长链模式的合链
  939. case 20:
  940. bl_pos_buff = dwXRealPos;
  941. KAI_QD_BinLianStep = 21;
  942. break;
  943. case 21:
  944. if((dwXRealPos - bl_pos_buff) >= KAI_QD_PARAM_DELAY_HL_LENGTH)
  945. {
  946. KAI_QD_BL_VAVLE = 1;
  947. KAI_QD_BinLianStep = 22;
  948. }
  949. break;
  950. case 22://有过链检测
  951. if((KAI_QD_GUO_LIAN_IN_DW && ((dwYRealPos + KAI_QD_PARAM_CL_JZ_TD_LENGTH) >= (KAI_QD_PARAM_ZIPPER_LENGTH - 1200))) || ((dwYRealPos + KAI_QD_PARAM_CL_JZ_TD_LENGTH + 300) >= (KAI_QD_PARAM_ZIPPER_LENGTH - KAI_QD_PARAM_HL_DELAY_BACK)))
  952. {
  953. KAI_QD_BL_VAVLE = 0;
  954. KAI_QD_BinLianStep = 0;
  955. }
  956. break;
  957. default:
  958. break;
  959. }
  960. #endif
  961. }
  962. //电机动作
  963. //作闭口专用程序,也有四种模式
  964. //不带过链感应长度输入电机长度 闭口有勾针到位 ,夹子电机
  965. void Kai_QueDuan_Motor(void)
  966. {
  967. static long KAI_QD_jz_buff;
  968. unsigned short ch,kk;
  969. #if 1
  970. user_datas[121] = dwXRealPos;
  971. user_datas[122] = dwYRealPos;
  972. user_datas[123] = dwZRealPos;
  973. user_datas[124] = KAI_QD_MotorStep;
  974. user_datas[125] = KAI_QD_ReBack_Step;//KAI_QD_YMotorStep;
  975. user_datas[126] = KAI_QD_XiaQieStep;
  976. user_datas[127] = KAI_QD_AutoStep;//KAI_QD_gou_zhen_buff;
  977. user_datas[128] = KAI_QD_SecondXiaQueStep;//;
  978. switch(KAI_QD_MotorStep)
  979. {
  980. case 30:
  981. switch(KAI_QD_PARAM_BACK_MODE) //开口分四种模式
  982. {
  983. case 0: //单数控模式
  984. KAI_QD_MotorStep = 310; //每种模式留20步
  985. KAI_QD_DGLG_VAVLE = 1; //顶过链杆关
  986. break;
  987. case 1://单感应模式
  988. KAI_QD_MotorStep = 330; //每种模式留20步
  989. break;
  990. case 2: //先感应后数控模式+检测
  991. KAI_QD_MotorStep = 350; //每种模式留20步
  992. break;
  993. default: //数控模式+过链检测长度
  994. KAI_QD_MotorStep = 370; //每种模式留20步
  995. break;
  996. }
  997. SetPos(X_AXIS, 0); //开始拖带处为0点
  998. KAI_QD_MotorDelay = dwTickCount + 0;
  999. KAI_QD_YD_VAVLE = 0;
  1000. //已经定位原点后好,定位到第一刀
  1001. if((KAI_QD_PARAM_ECTMACHINE_MODE) && KAI_QD_ORIGIN_Over)
  1002. {
  1003. //切二次
  1004. if(KAI_QD_PARAM_ECQ_MODE)
  1005. KAI_QD_ZMotorStep = 10; //移动到第一次切位置
  1006. else
  1007. KAI_QD_ZMotorStep = 20; //移动到第二次切位置
  1008. }
  1009. break;
  1010. //310步到315步为数控模式
  1011. case 310:
  1012. KAI_QD_MotorStep = 311;
  1013. if(KAI_QD_PARAM_BL_ENABLE)
  1014. KAI_QD_BinLianStep = 1; //并链起动
  1015. break;
  1016. case 311:
  1017. if(dwTickCount >= KAI_QD_MotorDelay)
  1018. {
  1019. KAI_QD_length_buffer = (short *)(&KAI_QD_PARAM_OFFSET_LENGTH);
  1020. if(KAI_QD_PARAM_ECQ_MODE)
  1021. KAI_QD_ECT_VAVLE=0;
  1022. //自动匹配减速时间
  1023. KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC+ KAI_QD_PARAM_BACK_SPEED/500;
  1024. //两段速度移动距离
  1025. AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_BACK_SPEED,KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer), KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,KAI_QD_PARAM_BACK_LOW_SPEED_LENGTH);
  1026. KAI_QD_MotorDelay = dwTickCount + MOTOR_ALARM_TIME;
  1027. KAI_QD_MotorStep = 312;
  1028. }
  1029. break;
  1030. case 312:
  1031. //电机走动后再退送链,减少起动拉链的阻力
  1032. if(dwXRealPos >= 50)
  1033. {
  1034. KAI_QD_TL_VAVLE = 0;
  1035. KAI_QD_TFK_VAVLE = 0;
  1036. KAI_QD_SD_VAVLE = 0;
  1037. }
  1038. //提前压带
  1039. if(dwXRealPos >((KAI_QD_PARAM_ZIPPER_LENGTH+ (*KAI_QD_length_buffer))-KAI_QD_PARAM_YDCNC_LENGTH))
  1040. {
  1041. KAI_QD_YD_VAVLE=1;
  1042. }
  1043. if(dwXRealPos >= (KAI_QD_PARAM_ZIPPER_LENGTH+(*KAI_QD_length_buffer) - KAI_QD_PARAM_SY_LENGTH))
  1044. {
  1045. if(KAI_QD_LTGY_IN_UP)
  1046. KAI_QD_SetAlarmCode(KAI_QD_LTWZYC_ALARM);
  1047. }
  1048. //勾针提前输出
  1049. if(!KAI_QD_GZ_VAVLE && ((dwXRealPos + KAI_QD_PARAM_GOUZHEN_LENGTH) >= (KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer))))
  1050. {
  1051. KAI_QD_GZ_VAVLE = 1;
  1052. if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器
  1053. {
  1054. if(KAI_QD_PARAM_ECQ_MODE) //二次切功能
  1055. {
  1056. //一次切刀选择
  1057. if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切
  1058. {
  1059. KAI_QD_KAI_XM_VAVLE = 1;
  1060. }
  1061. else //切刀选择闭口刀
  1062. {
  1063. KAI_QD_BI_XM_VAVLE = 1;
  1064. }
  1065. }
  1066. else
  1067. {
  1068. //一次切刀选择
  1069. if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切
  1070. {
  1071. KAI_QD_KAI_XM_VAVLE = 1;
  1072. }
  1073. else //切刀选择闭口刀
  1074. {
  1075. KAI_QD_BI_XM_VAVLE = 1;
  1076. }
  1077. }
  1078. }
  1079. else
  1080. {
  1081. if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动
  1082. KAI_QD_XM_VAVLE=1;
  1083. }
  1084. }
  1085. if((dwXRealPos) >= (KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer) - KAI_QD_PARAM_BACK_LOW_SPEED_LENGTH)) //- (*KAI_QD_length_buffer) - (KAI_QD_PARAM_BACK_LOW_SPEED_LENGTH + PulseToPos(X_AXIS,MV_Cal_Dec_pulse(KAI_QD_PARAM_BACK_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_DCC)))))
  1086. {
  1087. KAI_QD_MotorDelay = dwTickCount + 1500; //钩针未到位延时警告
  1088. KAI_QD_MotorStep = 313;
  1089. }
  1090. break;
  1091. case 313:
  1092. //数控提前上勾针
  1093. if((dwXRealPos + KAI_QD_PARAM_YDCNC_LENGTH) >= ((KAI_QD_PARAM_ZIPPER_LENGTH+ (*KAI_QD_length_buffer))))
  1094. {
  1095. KAI_QD_YD_VAVLE=1;
  1096. }
  1097. if((dwXRealPos + KAI_QD_PARAM_SY_LENGTH) >= (KAI_QD_PARAM_ZIPPER_LENGTH+(*KAI_QD_length_buffer)))
  1098. {
  1099. if(KAI_QD_LTGY_IN_UP)
  1100. KAI_QD_SetAlarmCode(KAI_QD_LTWZYC_ALARM);
  1101. }
  1102. //勾针提前输出
  1103. if(!KAI_QD_GZ_VAVLE && ((dwXRealPos + KAI_QD_PARAM_GOUZHEN_LENGTH) >= (KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer))))
  1104. {
  1105. KAI_QD_GZ_VAVLE = 1;
  1106. if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器
  1107. {
  1108. if(KAI_QD_PARAM_ECQ_MODE) //二次切功能
  1109. {
  1110. //一次切刀选择
  1111. if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切
  1112. {
  1113. KAI_QD_KAI_XM_VAVLE = 1;
  1114. }
  1115. else //切刀选择闭口刀
  1116. {
  1117. KAI_QD_BI_XM_VAVLE = 1;
  1118. }
  1119. }
  1120. else
  1121. {
  1122. //一次切刀选择
  1123. if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切
  1124. {
  1125. KAI_QD_KAI_XM_VAVLE = 1;
  1126. }
  1127. else //切刀选择闭口刀
  1128. {
  1129. KAI_QD_BI_XM_VAVLE = 1;
  1130. }
  1131. }
  1132. }
  1133. else
  1134. {
  1135. if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动
  1136. KAI_QD_XM_VAVLE=1;
  1137. }
  1138. }
  1139. if(KAI_QD_GOUZHEN_IN || !X_DRV)
  1140. {
  1141. AxisEgmStop(X_AXIS);
  1142. KAI_QD_MotorDelay = dwTickCount + 3;
  1143. KAI_QD_YD_VAVLE = 1;
  1144. KAI_QD_GZ_VAVLE = 1;
  1145. KAI_QD_MotorStep = 314;
  1146. KAI_QD_BL_VAVLE = 0; //停止时并链一定要打开
  1147. if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器
  1148. {
  1149. if(KAI_QD_PARAM_ECQ_MODE) //二次切功能
  1150. {
  1151. //一次切刀选择
  1152. if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切
  1153. {
  1154. KAI_QD_KAI_XM_VAVLE = 1;
  1155. }
  1156. else //切刀选择闭口刀
  1157. {
  1158. KAI_QD_BI_XM_VAVLE = 1;
  1159. }
  1160. }
  1161. else
  1162. {
  1163. //一次切刀选择
  1164. if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切
  1165. {
  1166. KAI_QD_KAI_XM_VAVLE = 1;
  1167. }
  1168. else //切刀选择闭口刀
  1169. {
  1170. KAI_QD_BI_XM_VAVLE = 1;
  1171. }
  1172. }
  1173. }
  1174. else
  1175. {
  1176. if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动
  1177. KAI_QD_XM_VAVLE=1;
  1178. }
  1179. }
  1180. break;
  1181. case 314:
  1182. if(!X_DRV && (dwTickCount >= KAI_QD_MotorDelay))
  1183. {
  1184. KAI_QD_MotorDelay = dwTickCount + VAVLE_ALARM_TIME;
  1185. KAI_QD_YD_VAVLE = 1;//压带
  1186. KAI_QD_SD_VAVLE=1;
  1187. KAI_QD_MotorStep = 315;
  1188. }
  1189. break;
  1190. case 315:
  1191. if(KAI_QD_cZipCnt == 0) //第一条把误差到正负9MM
  1192. {
  1193. ch = KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer)-90;
  1194. kk = KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer)+90;
  1195. }
  1196. else
  1197. {
  1198. if(KAI_QD_PARAM_BACK_MODE == 2) //纯数控模式
  1199. {
  1200. ch = KAI_QD_gou_zhen_buff - KAI_QD_PARAM_SKCDWC_LENGTH;
  1201. kk = KAI_QD_gou_zhen_buff + KAI_QD_PARAM_SKCDWC_LENGTH;
  1202. }
  1203. else
  1204. {
  1205. ch = KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer)-KAI_QD_PARAM_SKCDWC_LENGTH;
  1206. kk = KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer)+KAI_QD_PARAM_SKCDWC_LENGTH;
  1207. }
  1208. }
  1209. if(KAI_QD_PARAM_BACK_MODE == 2) //先感应后数控模式+检测 只能检测过链的位置
  1210. {
  1211. if(((KAI_QD_dwWorkLength) < (ch))) //拉链变短
  1212. {
  1213. SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_LENGTH_SHORT_ALARM);
  1214. if(dwTickCount >= KAI_QD_MotorDelay)
  1215. bAlarmStop = 1;
  1216. }
  1217. else if((KAI_QD_dwWorkLength > kk))//拉链变长//(KAI_QD_PARAM_ERROR_LENGTH - 200 + (*KAI_QD_length_buffer)+50)))
  1218. {
  1219. SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_LENGTH_LONG_ALARM);
  1220. if(dwTickCount >= KAI_QD_MotorDelay)
  1221. bAlarmStop = 1;
  1222. }
  1223. else
  1224. {
  1225. KAI_QD_MotorStep = 0;//390; //延时反转步
  1226. }
  1227. }
  1228. else
  1229. {
  1230. if(((dwXRealPos) < (ch))) //拉链变短
  1231. {
  1232. SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_LENGTH_SHORT_ALARM);
  1233. if(dwTickCount >= KAI_QD_MotorDelay)
  1234. bAlarmStop = 1;
  1235. }
  1236. else if((dwXRealPos > kk))//拉链变长//(KAI_QD_PARAM_ERROR_LENGTH - 200 + (*KAI_QD_length_buffer)+50)))
  1237. {
  1238. SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_LENGTH_LONG_ALARM);
  1239. if(dwTickCount >= KAI_QD_MotorDelay)
  1240. bAlarmStop = 1;
  1241. }
  1242. else
  1243. {
  1244. KAI_QD_MotorStep = 0;//390; //延时反转步
  1245. }
  1246. }
  1247. break;
  1248. //330步到349步单感应模式
  1249. case 330:
  1250. KAI_QD_MotorStep = 331;
  1251. user_datas[127] = 0;
  1252. break;
  1253. case 331:
  1254. if(dwTickCount >= KAI_QD_MotorDelay)
  1255. {
  1256. KAI_QD_length_buffer = (short *)(&KAI_QD_PARAM_OFFSET_LENGTH);
  1257. if(KAI_QD_PARAM_ECQ_MODE)
  1258. KAI_QD_ECT_VAVLE=0;
  1259. KAI_QD_MotorStep = 332;
  1260. if(KAI_QD_cZipCnt < 2)
  1261. {
  1262. if(KAI_QD_PARAM_BL_ENABLE)
  1263. KAI_QD_BinLianStep = 10; //并链起动
  1264. //第一条都是过链感应,后拉速度减半//原来KAI_QD_PARAM_CHECK_BACK_HSPEED/2
  1265. // X轴 运行速度 启动速度 加速度 减速度
  1266. AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_CHECK_BACK_LSPEED*9/5,KAI_QD_DIR_P,KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_LSPEED,15,20);
  1267. // 轴 第一段速度 第一段长度 第二段速度 第二段长度 方向
  1268. // AxisMoveTwoPos(X_AXIS,KAI_QD_PARAM_BACK_SPEED,KAI_QD_PARAM_ZIPPER_LENGTH + (*KAI_QD_length_buffer)-KAI_QD_PARAM_BACK_LOW_SPEED_LENGTH,KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED_LENGTH,KAI_QD_DIR_P);
  1269. }
  1270. else
  1271. {
  1272. KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC+ KAI_QD_PARAM_CHECK_BACK_HSPEED/500;
  1273. if(KAI_QD_PARAM_BL_ENABLE)
  1274. KAI_QD_BinLianStep = 1; //并链起动
  1275. //因为每条都是过链感应,所以直接运行检测模式后拉速度
  1276. // X轴 运行速度 启动速度 加速度 减速度
  1277. // AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_BACK_SPEED,KAI_QD_DIR_P,KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_LSPEED,KAI_QD_PARAM_ACC,80);
  1278. AxisMovePosAccDecNotStop(X_AXIS,KAI_QD_PARAM_CHECK_BACK_HSPEED,KAI_QD_PARAM_ZIPPER_LENGTH , KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_LSPEED*9/5,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,KAI_QD_PARAM_BACK_LOW_SPEED_LENGTH + 500);
  1279. }
  1280. }
  1281. break;
  1282. case 332:
  1283. //电机走动后再退送链,减少起动拉链的阻力
  1284. if(dwXRealPos >= 50)
  1285. {
  1286. KAI_QD_TL_VAVLE = 0;
  1287. KAI_QD_TFK_VAVLE = 0;
  1288. KAI_QD_SD_VAVLE = 0;
  1289. KAI_QD_MotorStep = 333; //到检测定位
  1290. }
  1291. break;
  1292. case 333:
  1293. if(KAI_QD_cZipCnt > 1) //第三条开始数控降速
  1294. {
  1295. if(dwXRealPos >= KAI_QD_PARAM_ZIPPER_LENGTH+(*KAI_QD_length_buffer)-KAI_QD_PARAM_SY_LENGTH)
  1296. {
  1297. if(KAI_QD_LTGY_IN_UP)
  1298. KAI_QD_SetAlarmCode(KAI_QD_LTWZYC_ALARM);
  1299. }
  1300. if(KAI_QD_GUO_LIAN_IN) //重新到空位上
  1301. {
  1302. KAI_QD_MotorStep = 334; //到检测定位
  1303. if(!KAI_QD_PARAM_LTJC_MODE) //有拉头模式
  1304. KAI_QD_MotorDelay = dwTickCount + KAI_QD_PARAM_FD_TIME;//KAI_QD_PARAM_DELAY_XM; 防抖时间
  1305. else//无拉头模式
  1306. KAI_QD_MotorDelay = dwTickCount + 3;//KAI_QD_PARAM_DELAY_XM;
  1307. }
  1308. }
  1309. else //第一条工作
  1310. {
  1311. KAI_QD_GZ_VAVLE = 0;
  1312. if(KAI_QD_GUO_LIAN_IN_UP)
  1313. {
  1314. //第一条,速度比较慢防拦时间可以不要
  1315. // if(!KAI_QD_PARAM_LTJC_MODE)
  1316. // KAI_QD_MotorDelay = dwTickCount + KAI_QD_PARAM_FD_TIME;//KAI_QD_PARAM_DELAY_XM;
  1317. // else
  1318. KAI_QD_MotorDelay = dwTickCount + 2;//KAI_QD_PARAM_DELAY_XM;
  1319. KAI_QD_MotorStep = 334;
  1320. }
  1321. }
  1322. break;
  1323. case 334: //此步为前两条运行
  1324. if(KAI_QD_cZipCnt>1)
  1325. {
  1326. if(dwXRealPos >= KAI_QD_PARAM_ZIPPER_LENGTH+(*KAI_QD_length_buffer)-KAI_QD_PARAM_SY_LENGTH)
  1327. {
  1328. if(KAI_QD_LTGY_IN_UP)
  1329. KAI_QD_SetAlarmCode(KAI_QD_LTWZYC_ALARM);
  1330. }
  1331. }
  1332. if(KAI_QD_GUO_LIAN_IN_DW)
  1333. {
  1334. KAI_QD_gou_zhen_buff = dwXRealPos;
  1335. }
  1336. if(dwTickCount >= KAI_QD_MotorDelay)
  1337. {
  1338. if(KAI_QD_GUO_LIAN_IN)
  1339. {
  1340. if(KAI_QD_cZipCnt < 2) //前面两条速度不高,可以立即降速
  1341. {
  1342. AxisChangeSpeedDirect(X_AXIS,KAI_QD_PARAM_CHECK_BACK_LSPEED * 6/5);
  1343. }
  1344. else//变速
  1345. {
  1346. if(!KAI_QD_PARAM_LTJC_MODE) //有拉头模式
  1347. {
  1348. KAI_QD_DCC_TIME_BL = 10+GetCurSpeed(X_AXIS)/500;
  1349. AxisContinueMoveChangeSpeed(X_AXIS,KAI_QD_PARAM_CHECK_BACK_LSPEED * 6/5,KAI_QD_PARAM_CHECK_BACK_LSPEED * 6/5,25,KAI_QD_DCC_TIME_BL);
  1350. }
  1351. else
  1352. {
  1353. AxisChangeSpeedDirect(X_AXIS,KAI_QD_PARAM_CHECK_BACK_LSPEED * 6/5);
  1354. }
  1355. }
  1356. KAI_QD_MotorStep = 335;
  1357. }
  1358. }
  1359. else
  1360. {
  1361. if(!KAI_QD_GUO_LIAN_IN)
  1362. {
  1363. KAI_QD_MotorStep = 333;
  1364. }
  1365. }
  1366. break;
  1367. case 335:
  1368. if(KAI_QD_GUO_LIAN_IN_DW) //下降沿,定位长度
  1369. {
  1370. KAI_QD_gou_zhen_buff = dwXRealPos;
  1371. KAI_QD_MotorStep = 336;
  1372. KAI_QD_DCC_TIME_BL = 15;//GetCurSpeed(X_AXIS)/500;
  1373. // AxisContinueMoveChangeSpeed(Y_AXIS,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,1000,25,15);
  1374. AxisContinueMoveChangeSpeed(X_AXIS,KAI_QD_PARAM_BACK_LOW_SPEED,1000,15,15);
  1375. // AxisMovePosAccDecNotStop(X_AXIS,GetCurSpeed(X_AXIS),KAI_QD_PARAM_MOTOR_DINWEI_LENGTH, GetCurSpeed(X_AXIS),KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,50);
  1376. }
  1377. if(KAI_QD_cZipCnt > 1) //第三条开始要长度误差
  1378. {
  1379. if(dwXRealPos >= (KAI_QD_length_buff + KAI_QD_PARAM_ERROR_LENGTH))
  1380. {
  1381. KAI_QD_SetAlarmCode(KAI_QD_LENGTH_LONG_ALARM);
  1382. }
  1383. if(dwXRealPos >= KAI_QD_PARAM_ZIPPER_LENGTH+(*KAI_QD_length_buffer)-KAI_QD_PARAM_SY_LENGTH)
  1384. {
  1385. if(KAI_QD_LTGY_IN_UP)
  1386. KAI_QD_SetAlarmCode(KAI_QD_LTWZYC_ALARM);
  1387. }
  1388. }
  1389. break;
  1390. case 336:
  1391. if(KAI_QD_cZipCnt>1)
  1392. {
  1393. if(dwXRealPos >= KAI_QD_PARAM_ZIPPER_LENGTH+(*KAI_QD_length_buffer)-KAI_QD_PARAM_SY_LENGTH)
  1394. {
  1395. if(KAI_QD_LTGY_IN_UP)
  1396. KAI_QD_SetAlarmCode(KAI_QD_LTWZYC_ALARM);
  1397. }
  1398. }
  1399. if(KAI_QD_GUO_LIAN_IN_DW)
  1400. {
  1401. KAI_QD_gou_zhen_buff = dwXRealPos;
  1402. }
  1403. //在空们都把延时清零
  1404. if(KAI_QD_GUO_LIAN_IN)
  1405. {
  1406. //在定位过程中又到空位,重新检测定位
  1407. KAI_QD_gou_zhen_buff = dwXRealPos;
  1408. KAI_QD_GZ_VAVLE = 0;
  1409. if(!KAI_QD_PARAM_XM_ENABLE)
  1410. KAI_QD_XM_VAVLE=0;
  1411. KAI_QD_KAI_XM_VAVLE = 0;
  1412. KAI_QD_BI_XM_VAVLE = 0;
  1413. AxisContinueMoveChangeSpeed(X_AXIS,(KAI_QD_PARAM_CHECK_BACK_LSPEED* 6/5),1000,15,15);
  1414. KAI_QD_MotorStep = 335;
  1415. break;
  1416. }
  1417. if((dwXRealPos >= (KAI_QD_gou_zhen_buff +KAI_QD_PARAM_GZ_DELAY)) && !KAI_QD_GUO_LIAN_IN)
  1418. {
  1419. KAI_QD_GZ_VAVLE = 1;
  1420. if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器
  1421. {
  1422. if(KAI_QD_PARAM_ECQ_MODE) //二次切功能
  1423. {
  1424. //一次切刀选择
  1425. if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切
  1426. {
  1427. KAI_QD_KAI_XM_VAVLE = 1;
  1428. }
  1429. else //切刀选择闭口刀
  1430. {
  1431. KAI_QD_BI_XM_VAVLE = 1;
  1432. }
  1433. }
  1434. else
  1435. {
  1436. //一次切刀选择
  1437. if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切
  1438. {
  1439. KAI_QD_KAI_XM_VAVLE = 1;
  1440. }
  1441. else //切刀选择闭口刀
  1442. {
  1443. KAI_QD_BI_XM_VAVLE = 1;
  1444. }
  1445. }
  1446. }
  1447. else
  1448. {
  1449. if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动
  1450. KAI_QD_XM_VAVLE=1;
  1451. }
  1452. }
  1453. //定位停止
  1454. if(((dwXRealPos - KAI_QD_gou_zhen_buff) >= KAI_QD_PARAM_MOTOR_DINWEI_LENGTH) && !KAI_QD_GUO_LIAN_IN)
  1455. {
  1456. AxisEgmStop(X_AXIS);
  1457. KAI_QD_MotorDelay = dwTickCount + VAVLE_ALARM_TIME;
  1458. KAI_QD_MotorStep = 337;
  1459. KAI_QD_GZ_VAVLE = 1;
  1460. KAI_QD_SD_VAVLE=1;
  1461. if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器
  1462. {
  1463. if(KAI_QD_PARAM_ECQ_MODE) //二次切功能
  1464. {
  1465. //一次切刀选择
  1466. if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切
  1467. {
  1468. KAI_QD_KAI_XM_VAVLE = 1;
  1469. }
  1470. else //切刀选择闭口刀
  1471. {
  1472. KAI_QD_BI_XM_VAVLE = 1;
  1473. }
  1474. }
  1475. else
  1476. {
  1477. //一次切刀选择
  1478. if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切
  1479. {
  1480. KAI_QD_KAI_XM_VAVLE = 1;
  1481. }
  1482. else //切刀选择闭口刀
  1483. {
  1484. KAI_QD_BI_XM_VAVLE = 1;
  1485. }
  1486. }
  1487. }
  1488. else
  1489. {
  1490. if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动
  1491. KAI_QD_XM_VAVLE=1;
  1492. }
  1493. }
  1494. break;
  1495. case 337:
  1496. if(KAI_QD_cZipCnt > 1) //长度检测
  1497. {
  1498. ch = KAI_QD_PARAM_ZIPPER_LENGTH;
  1499. user_datas[127] = ch;
  1500. if(((dwXRealPos + KAI_QD_PARAM_ERROR_LENGTH) < (ch)) && KAI_QD_PARAM_ERROR_LENGTH)
  1501. {
  1502. KAI_QD_NQDJGNUNMBER =1;
  1503. if(dwTickCount >= KAI_QD_MotorDelay)
  1504. bAlarmStop = 1;
  1505. }
  1506. else if((dwXRealPos > (ch + KAI_QD_PARAM_ERROR_LENGTH)) && KAI_QD_PARAM_ERROR_LENGTH)//(KAI_QD_PARAM_ERROR_LENGTH - 200 + (*KAI_QD_length_buffer)+50)))
  1507. {
  1508. KAI_QD_NQDJGNUNMBER = 2;
  1509. if(dwTickCount >= KAI_QD_MotorDelay)
  1510. bAlarmStop = 1;
  1511. }
  1512. else
  1513. {
  1514. KAI_QD_MotorStep = 338;
  1515. }
  1516. }
  1517. else
  1518. {
  1519. if(KAI_QD_cZipCnt == 1)
  1520. {
  1521. KAI_QD_length_buff = dwXRealPos;
  1522. SetData32bits(KAI_QD_PARAM_ZIPPER_LENGTH_ADDR,KAI_QD_length_buff); //测量记录长度
  1523. }
  1524. KAI_QD_MotorStep = 338;
  1525. }
  1526. break;
  1527. case 338:
  1528. KAI_QD_MotorStep = 0;//390;
  1529. // SetDir(X_AXIS, KAI_QD_DIR_N);
  1530. // if(dwTickCount >= KAI_QD_MotorDelay)
  1531. // {
  1532. // AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_BACK_LOW_SPEED,-KAI_QD_PARAM_FZ_LENGTH,3000,KAI_QD_PARAM_ACC,KAI_QD_PARAM_DCC);
  1533. // KAI_QD_MotorStep = 0;
  1534. // }
  1535. break;
  1536. //350步到369步先感应后数控
  1537. case 350:
  1538. KAI_QD_MotorStep = 351;
  1539. break;
  1540. case 351:
  1541. if(dwTickCount >= KAI_QD_MotorDelay)
  1542. {
  1543. if(KAI_QD_PARAM_ECQ_MODE)
  1544. KAI_QD_ECT_VAVLE=0;
  1545. KAI_QD_MotorStep = 352;
  1546. KAI_QD_CheckLengthStep = 0;
  1547. //第一,二条都是过链感应,测量长度
  1548. if(KAI_QD_cZipCnt < 2)
  1549. {
  1550. if(KAI_QD_PARAM_BL_ENABLE) //因为长度未知,只能通过过链退合链
  1551. KAI_QD_BinLianStep = 10; //并链起动
  1552. KAI_QD_DGLG_VAVLE = 0; //顶过链杆关
  1553. // X轴 运行速度 启动速度 加速度 减速度
  1554. AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_CHECK_BACK_LSPEED*9/5,KAI_QD_DIR_P,KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_LSPEED,15,20);
  1555. }
  1556. else
  1557. {
  1558. if(KAI_QD_PARAM_BL_ENABLE)
  1559. KAI_QD_BinLianStep = 1; //并链起动
  1560. // KAI_QD_DGLG_VAVLE = 1; //顶过链杆关
  1561. KAI_QD_CheckLengthStep = 1; //长度检测,第3条才有对比
  1562. //走数控方式,因第二条中已经测量出来拉链长度,可以直接按长度数控方式走
  1563. KAI_QD_MotorStep = 311;
  1564. }
  1565. }
  1566. break;
  1567. case 352:
  1568. //电机走动后再退送链,减少起动拉链的阻力
  1569. //电机走动后再退送链,减少起动拉链的阻力
  1570. if(dwXRealPos >= 50)
  1571. {
  1572. KAI_QD_TL_VAVLE = 0;
  1573. KAI_QD_TFK_VAVLE = 0;
  1574. KAI_QD_SD_VAVLE = 0;
  1575. KAI_QD_MotorStep = 353; //到检测定位
  1576. }
  1577. break;
  1578. case 353:
  1579. if(KAI_QD_GUO_LIAN_IN_DW) //重新到链上
  1580. {
  1581. AxisChangeSpeedDirect(X_AXIS,KAI_QD_PARAM_BACK_LOW_SPEED);
  1582. KAI_QD_gou_zhen_buff = dwXRealPos;
  1583. KAI_QD_MotorStep = 355; //到检测定位
  1584. }
  1585. //前两条都按最低速度工作
  1586. if(KAI_QD_GUO_LIAN_IN_UP) //空位上
  1587. {
  1588. if(!KAI_QD_PARAM_LTJC_MODE)
  1589. KAI_QD_MotorDelay = dwTickCount + KAI_QD_PARAM_FD_TIME;//KAI_QD_PARAM_DELAY_XM;
  1590. else
  1591. KAI_QD_MotorDelay = dwTickCount + 3;//KAI_QD_PARAM_DELAY_XM;
  1592. KAI_QD_MotorStep = 354;
  1593. }
  1594. break;
  1595. case 354:
  1596. if(KAI_QD_GUO_LIAN_IN_DW)
  1597. {
  1598. KAI_QD_gou_zhen_buff = dwXRealPos;
  1599. }
  1600. if(dwTickCount >= KAI_QD_MotorDelay)
  1601. {
  1602. if(KAI_QD_GUO_LIAN_IN)
  1603. {
  1604. AxisChangeSpeedDirect(X_AXIS,KAI_QD_PARAM_CHECK_BACK_LSPEED * 6/5);
  1605. KAI_QD_MotorStep = 355;
  1606. }
  1607. }
  1608. else
  1609. {
  1610. if(!KAI_QD_GUO_LIAN_IN)
  1611. {
  1612. KAI_QD_MotorStep = 353;
  1613. }
  1614. }
  1615. break;
  1616. case 355:
  1617. if(KAI_QD_GUO_LIAN_IN_DW) //下降沿,定位长度
  1618. {
  1619. KAI_QD_gou_zhen_buff = dwXRealPos;
  1620. KAI_QD_MotorStep = 356;
  1621. }
  1622. break;
  1623. case 356:
  1624. if(KAI_QD_GUO_LIAN_IN_DW) //下降沿,定位长度
  1625. {
  1626. KAI_QD_gou_zhen_buff = dwXRealPos;
  1627. }
  1628. //在空们都把延时清零
  1629. if(KAI_QD_GUO_LIAN_IN)
  1630. {
  1631. //在定位过程中又到空位,重新检测定位
  1632. KAI_QD_gou_zhen_buff = dwXRealPos;
  1633. KAI_QD_GZ_VAVLE = 0;
  1634. if(!KAI_QD_PARAM_XM_ENABLE)
  1635. KAI_QD_XM_VAVLE=0;
  1636. KAI_QD_KAI_XM_VAVLE = 0;
  1637. KAI_QD_BI_XM_VAVLE = 0;
  1638. AxisContinueMoveChangeSpeed(X_AXIS,(KAI_QD_PARAM_CHECK_BACK_LSPEED* 6/5),1000,15,15);
  1639. KAI_QD_MotorStep = 355;
  1640. break;
  1641. }
  1642. if((dwXRealPos >= (KAI_QD_gou_zhen_buff +KAI_QD_PARAM_GZ_DELAY)) && !KAI_QD_GUO_LIAN_IN)
  1643. {
  1644. KAI_QD_GZ_VAVLE = 1;
  1645. if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器
  1646. {
  1647. if(KAI_QD_PARAM_ECQ_MODE) //二次切功能
  1648. {
  1649. //一次切刀选择
  1650. if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切
  1651. {
  1652. KAI_QD_KAI_XM_VAVLE = 1;
  1653. }
  1654. else //切刀选择闭口刀
  1655. {
  1656. KAI_QD_BI_XM_VAVLE = 1;
  1657. }
  1658. }
  1659. else
  1660. {
  1661. //一次切刀选择
  1662. if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切
  1663. {
  1664. KAI_QD_KAI_XM_VAVLE = 1;
  1665. }
  1666. else //切刀选择闭口刀
  1667. {
  1668. KAI_QD_BI_XM_VAVLE = 1;
  1669. }
  1670. }
  1671. }
  1672. else
  1673. {
  1674. if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动
  1675. KAI_QD_XM_VAVLE=1;
  1676. }
  1677. }
  1678. //定位停止
  1679. if(((dwXRealPos - KAI_QD_gou_zhen_buff) >= KAI_QD_PARAM_MOTOR_DINWEI_LENGTH) && !KAI_QD_GUO_LIAN_IN)
  1680. {
  1681. AxisEgmStop(X_AXIS);
  1682. KAI_QD_MotorDelay = dwTickCount + VAVLE_ALARM_TIME;
  1683. KAI_QD_MotorStep = 357;
  1684. KAI_QD_GZ_VAVLE = 1;
  1685. KAI_QD_SD_VAVLE=1;
  1686. if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器
  1687. {
  1688. if(KAI_QD_PARAM_ECQ_MODE) //二次切功能
  1689. {
  1690. //一次切刀选择
  1691. if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切
  1692. {
  1693. KAI_QD_KAI_XM_VAVLE = 1;
  1694. }
  1695. else //切刀选择闭口刀
  1696. {
  1697. KAI_QD_BI_XM_VAVLE = 1;
  1698. }
  1699. }
  1700. else
  1701. {
  1702. //一次切刀选择
  1703. if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切
  1704. {
  1705. KAI_QD_KAI_XM_VAVLE = 1;
  1706. }
  1707. else //切刀选择闭口刀
  1708. {
  1709. KAI_QD_BI_XM_VAVLE = 1;
  1710. }
  1711. }
  1712. }
  1713. else
  1714. {
  1715. if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动
  1716. KAI_QD_XM_VAVLE=1;
  1717. }
  1718. }
  1719. break;
  1720. case 357:
  1721. if(KAI_QD_cZipCnt == 1)
  1722. {
  1723. KAI_QD_length_buff = dwXRealPos;
  1724. SetData32bits(KAI_QD_PARAM_ZIPPER_LENGTH_ADDR,KAI_QD_length_buff); //测量记录长度
  1725. }
  1726. KAI_QD_MotorStep = 358;
  1727. break;
  1728. case 358:
  1729. KAI_QD_MotorStep = 0; //延时反转步
  1730. // SetDir(X_AXIS, KAI_QD_DIR_N);
  1731. // AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_BACK_LOW_SPEED,-KAI_QD_PARAM_FZ_LENGTH,3000,KAI_QD_PARAM_ACC,KAI_QD_PARAM_DCC);
  1732. // KAI_QD_MotorStep = 0;
  1733. break;
  1734. //370步到389步为先感应后数控 无检测
  1735. case 370:
  1736. KAI_QD_MotorStep = 371;
  1737. break;
  1738. case 371:
  1739. if(dwTickCount >= KAI_QD_MotorDelay)
  1740. {
  1741. if(KAI_QD_PARAM_ECQ_MODE)
  1742. KAI_QD_ECT_VAVLE=0;
  1743. KAI_QD_MotorStep = 372;
  1744. //第一,二条都是过链感应,测量长度
  1745. if(KAI_QD_cZipCnt < 2)
  1746. {
  1747. if(KAI_QD_PARAM_BL_ENABLE) //因为长度未知,只能通过过链退合链
  1748. KAI_QD_BinLianStep = 10; //并链起动
  1749. KAI_QD_DGLG_VAVLE = 0; //顶过链杆关
  1750. // X轴 运行速度 启动速度 加速度 减速度
  1751. AxisContinueMoveAcc(X_AXIS,6000,KAI_QD_DIR_P,KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED,15,12);
  1752. }
  1753. else
  1754. {
  1755. if(KAI_QD_PARAM_BL_ENABLE)
  1756. KAI_QD_BinLianStep = 1; //并链起动
  1757. KAI_QD_DGLG_VAVLE = 1; //顶过链杆关
  1758. // KAI_QD_CheckLengthStep = 1; //长度检测,第3条才有对比
  1759. //走数控方式,因第二条中已经测量出来拉链长度,可以直接按长度数控方式走
  1760. KAI_QD_MotorStep = 311;
  1761. }
  1762. }
  1763. break;
  1764. case 372:
  1765. //电机走动后再退送链,减少起动拉链的阻力
  1766. //电机走动后再退送链,减少起动拉链的阻力
  1767. if(dwXRealPos >= 50)
  1768. {
  1769. KAI_QD_TL_VAVLE = 0;
  1770. KAI_QD_TFK_VAVLE = 0;
  1771. KAI_QD_SD_VAVLE = 0;
  1772. KAI_QD_MotorStep = 373; //到检测定位
  1773. }
  1774. break;
  1775. case 373:
  1776. if(KAI_QD_GUO_LIAN_IN_DW) //重新到链上
  1777. {
  1778. AxisChangeSpeedDirect(X_AXIS,KAI_QD_PARAM_BACK_LOW_SPEED);
  1779. KAI_QD_gou_zhen_buff = dwXRealPos;
  1780. KAI_QD_MotorStep = 376; //到检测定位
  1781. }
  1782. //前两条都按最低速度工作
  1783. if(KAI_QD_GUO_LIAN_IN_UP) //空位上
  1784. {
  1785. if(!KAI_QD_PARAM_LTJC_MODE)
  1786. KAI_QD_MotorDelay = dwTickCount + KAI_QD_PARAM_FD_TIME;//KAI_QD_PARAM_DELAY_XM;
  1787. else
  1788. KAI_QD_MotorDelay = dwTickCount + 3;//KAI_QD_PARAM_DELAY_XM;
  1789. KAI_QD_MotorStep = 374;
  1790. }
  1791. break;
  1792. case 374:
  1793. if(KAI_QD_GUO_LIAN_IN_DW)
  1794. {
  1795. KAI_QD_gou_zhen_buff = dwXRealPos;
  1796. }
  1797. if(dwTickCount >= KAI_QD_MotorDelay)
  1798. {
  1799. if(KAI_QD_GUO_LIAN_IN)
  1800. {
  1801. AxisChangeSpeedDirect(X_AXIS,KAI_QD_PARAM_CHECK_BACK_LSPEED * 6/5);
  1802. KAI_QD_MotorStep = 375;
  1803. }
  1804. }
  1805. else
  1806. {
  1807. if(!KAI_QD_GUO_LIAN_IN)
  1808. {
  1809. KAI_QD_MotorStep = 373;
  1810. }
  1811. }
  1812. break;
  1813. case 375:
  1814. if(KAI_QD_GUO_LIAN_IN_DW) //下降沿,定位长度
  1815. {
  1816. KAI_QD_gou_zhen_buff = dwXRealPos;
  1817. KAI_QD_MotorStep = 376;
  1818. }
  1819. break;
  1820. case 376:
  1821. if(KAI_QD_GUO_LIAN_IN_DW) //下降沿,定位长度
  1822. {
  1823. KAI_QD_gou_zhen_buff = dwXRealPos;
  1824. }
  1825. //在空们都把延时清零
  1826. if(KAI_QD_GUO_LIAN_IN)
  1827. {
  1828. //在定位过程中又到空位,重新检测定位
  1829. KAI_QD_gou_zhen_buff = dwXRealPos;
  1830. KAI_QD_GZ_VAVLE = 0;
  1831. if(!KAI_QD_PARAM_XM_ENABLE)
  1832. KAI_QD_XM_VAVLE=0;
  1833. KAI_QD_KAI_XM_VAVLE = 0;
  1834. KAI_QD_BI_XM_VAVLE = 0;
  1835. AxisContinueMoveChangeSpeed(X_AXIS,(KAI_QD_PARAM_CHECK_BACK_LSPEED* 6/5),1000,15,15);
  1836. KAI_QD_MotorStep = 375;
  1837. break;
  1838. }
  1839. if((dwXRealPos >= (KAI_QD_gou_zhen_buff +KAI_QD_PARAM_GZ_DELAY)) && !KAI_QD_GUO_LIAN_IN)
  1840. {
  1841. KAI_QD_GZ_VAVLE = 1;
  1842. if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器
  1843. {
  1844. if(KAI_QD_PARAM_ECQ_MODE) //二次切功能
  1845. {
  1846. //一次切刀选择
  1847. if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切
  1848. {
  1849. KAI_QD_KAI_XM_VAVLE = 1;
  1850. }
  1851. else //切刀选择闭口刀
  1852. {
  1853. KAI_QD_BI_XM_VAVLE = 1;
  1854. }
  1855. }
  1856. else
  1857. {
  1858. //一次切刀选择
  1859. if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切
  1860. {
  1861. KAI_QD_KAI_XM_VAVLE = 1;
  1862. }
  1863. else //切刀选择闭口刀
  1864. {
  1865. KAI_QD_BI_XM_VAVLE = 1;
  1866. }
  1867. }
  1868. }
  1869. else
  1870. {
  1871. if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动
  1872. KAI_QD_XM_VAVLE=1;
  1873. }
  1874. }
  1875. //定位停止
  1876. if(((dwXRealPos - KAI_QD_gou_zhen_buff) >= KAI_QD_PARAM_MOTOR_DINWEI_LENGTH) && !KAI_QD_GUO_LIAN_IN)
  1877. {
  1878. AxisEgmStop(X_AXIS);
  1879. KAI_QD_MotorDelay = dwTickCount + VAVLE_ALARM_TIME;
  1880. KAI_QD_MotorStep = 377;
  1881. KAI_QD_GZ_VAVLE = 1;
  1882. KAI_QD_SD_VAVLE=1;
  1883. if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器
  1884. {
  1885. if(KAI_QD_PARAM_ECQ_MODE) //二次切功能
  1886. {
  1887. //一次切刀选择
  1888. if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切
  1889. {
  1890. KAI_QD_KAI_XM_VAVLE = 1;
  1891. }
  1892. else //切刀选择闭口刀
  1893. {
  1894. KAI_QD_BI_XM_VAVLE = 1;
  1895. }
  1896. }
  1897. else
  1898. {
  1899. //一次切刀选择
  1900. if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切
  1901. {
  1902. KAI_QD_KAI_XM_VAVLE = 1;
  1903. }
  1904. else //切刀选择闭口刀
  1905. {
  1906. KAI_QD_BI_XM_VAVLE = 1;
  1907. }
  1908. }
  1909. }
  1910. else
  1911. {
  1912. if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动
  1913. KAI_QD_XM_VAVLE=1;
  1914. }
  1915. }
  1916. break;
  1917. case 377:
  1918. if(KAI_QD_cZipCnt == 1)
  1919. {
  1920. KAI_QD_length_buff = dwXRealPos;
  1921. SetData32bits(KAI_QD_PARAM_ZIPPER_LENGTH_ADDR,KAI_QD_length_buff); //测量记录长度
  1922. }
  1923. KAI_QD_MotorStep = 378;
  1924. break;
  1925. case 378:
  1926. KAI_QD_MotorStep = 0; //延时反转步
  1927. // SetDir(X_AXIS, KAI_QD_DIR_N);
  1928. // AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_BACK_LOW_SPEED,-KAI_QD_PARAM_FZ_LENGTH,3000,KAI_QD_PARAM_ACC,KAI_QD_PARAM_DCC);
  1929. // KAI_QD_MotorStep = 0;
  1930. break; //此两步为到位后反转步
  1931. case 390:
  1932. KAI_QD_MotorDelay = dwTickCount + 37;
  1933. KAI_QD_MotorStep = 391;
  1934. break;
  1935. case 391:
  1936. if(dwTickCount >= KAI_QD_MotorDelay)
  1937. {
  1938. AxisMovePosAccDec(X_AXIS,2200,-KAI_QD_PARAM_FZ_LENGTH,2200,2200,5,5,00);
  1939. KAI_QD_MotorStep = 0;
  1940. }
  1941. break;
  1942. case 40:
  1943. //切完延时后拉带松夹子
  1944. if(KAI_QD_PARAM_SJZ_LENGTH == 0)
  1945. {
  1946. KAI_QD_MotorDelay = dwTickCount + KAI_QD_PARAM_TDYS_DELAY;
  1947. KAI_QD_MotorStep = 43;
  1948. KAI_QD_JD_VAVLE = 0;
  1949. }
  1950. else
  1951. {
  1952. KAI_QD_jz_buff = dwXRealPos;
  1953. KAI_QD_MotorStep = 41;
  1954. }
  1955. break;
  1956. case 41:
  1957. if((KAI_QD_YMotorStep == 0) && (KAI_QD_ReBack_Step == 0)) //在夹子转换时不能退
  1958. KAI_QD_GZ_VAVLE=0;
  1959. AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_CUT_BACK_SPEED,KAI_QD_PARAM_SJZ_LENGTH + KAI_QD_PARAM_BACK_LENGTH,2000,2000,25,25,40);
  1960. KAI_QD_MotorStep = 42;
  1961. break;
  1962. case 42:
  1963. if(KAI_QD_PARAM_SJZ_LENGTH <= (dwXRealPos - KAI_QD_jz_buff))
  1964. KAI_QD_JD_VAVLE = 0;
  1965. if(!X_DRV)
  1966. {
  1967. KAI_QD_MotorStep = 0;
  1968. }
  1969. break;
  1970. case 43:
  1971. if(dwTickCount >= KAI_QD_MotorDelay)
  1972. {
  1973. if((KAI_QD_YMotorStep == 0) && (KAI_QD_ReBack_Step == 0)) //在夹子转换时不能退
  1974. KAI_QD_GZ_VAVLE=0; //延时退勾针有助于切断带丝情况
  1975. AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_CUT_BACK_SPEED,KAI_QD_PARAM_BACK_LENGTH,2500,2000,15,15,30);
  1976. KAI_QD_MotorStep = 44;
  1977. }
  1978. break;
  1979. case 44: // 切断完成后拉电机动作
  1980. if(!X_DRV)
  1981. {
  1982. KAI_QD_MotorStep = 0;
  1983. KAI_QD_MotorDelay = dwTickCount;
  1984. }
  1985. break;
  1986. case 61: // 前点定位数控模式
  1987. KAI_QD_BL_VAVLE = 0;//并链也要打开
  1988. if(dwTickCount >= KAI_QD_MotorDelay)
  1989. {
  1990. if(!KAI_QD_TL_VAVLE && KAI_QD_cZipCnt && (KAI_QD_TuiLianStep == 0)) //没送链情况下主动送链
  1991. {
  1992. if(!KAI_QD_SHANG_MU_LIMIT_IN)
  1993. {
  1994. KAI_QD_TuiLianStep = 1;
  1995. KAI_QD_MotorStep = 62;
  1996. }
  1997. }
  1998. else
  1999. KAI_QD_MotorStep = 62;
  2000. if(KAI_QD_PARAM_LIAN_SELECT)
  2001. {
  2002. KAI_QD_CLTD_JT_VAVLE = 0;
  2003. KAI_QD_CLTD_YL_VAVLE = 0;
  2004. }
  2005. KAI_QD_JD_VAVLE = 0;
  2006. }
  2007. break;
  2008. case 62:
  2009. if((dwTickCount >= KAI_QD_MotorDelay) &&((KAI_QD_PARAM_LIAN_SELECT == 0) || KAI_QD_CLTD_ORIGIN_IN))
  2010. {
  2011. if(KAI_QD_QIAN_LIMIT_IN)
  2012. {
  2013. //前点亮的情况下先后退离开信号后再前进定位 ,10公分
  2014. AxisMovePosAccDec(X_AXIS,3000,1000,2000,2000,10,10,30);
  2015. KAI_QD_MotorDelay = dwTickCount + 300;
  2016. }
  2017. KAI_QD_MotorStep = 63;
  2018. }
  2019. break;
  2020. case 63: //说明夹子已经离开原点
  2021. if(dwTickCount >= KAI_QD_MotorDelay)
  2022. {
  2023. if(!KAI_QD_QIAN_LIMIT_IN)// && !KAI_QD_SHANG_MU_LIMIT_IN)
  2024. {
  2025. KAI_QD_YD_VAVLE = 1;
  2026. //在自动情况下安全门
  2027. if(KAI_QD_ANQUANMEN_LIMIT_IN && bRunning)
  2028. {
  2029. if(dwTickCount >= KAI_QD_ANQUANMEN_Time)
  2030. {
  2031. KAI_QD_StopStep=1;
  2032. KAI_QD_cSTOPONE=1;
  2033. }
  2034. }
  2035. else
  2036. {
  2037. KAI_QD_ANQUANMEN_Time = dwTickCount + 100;
  2038. }
  2039. if(KAI_QD_cZipCnt > 0)
  2040. {
  2041. if(dwXRealPos > (KAI_QD_PARAM_GO_LOW_SPEED_LENGTH))
  2042. {
  2043. //自动匹配减速时间
  2044. KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC + KAI_QD_PARAM_GO_HIGH_SPEED/500;
  2045. AxisMovePosAccDecNotStop(X_AXIS,KAI_QD_PARAM_GO_HIGH_SPEED,-dwXRealPos,
  2046. KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,
  2047. KAI_QD_PARAM_GO_LOW_SPEED_LENGTH + KAI_QD_PARAM_GO_DW_LENGTH);
  2048. }
  2049. else
  2050. {
  2051. // X轴 运行速度 启动速度 加速度 减速度
  2052. AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_DIR_N,KAI_QD_PARAM_GO_LOW_SPEED/3,KAI_QD_PARAM_GO_LOW_SPEED,15,15);
  2053. // MoveAction_Const_AccDec(X_AXIS, KAI_QD_DIR_N,KAI_QD_PARAM_GO_LOW_SPEED_LENGTH,KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_ACC,KAI_QD_PARAM_DCC);
  2054. }
  2055. }
  2056. else
  2057. {
  2058. // X轴 运行速度 启动速度 加速度 减速度
  2059. AxisContinueMoveAcc(X_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,KAI_QD_DIR_N,KAI_QD_PARAM_GO_LOW_SPEED/3,KAI_QD_PARAM_GO_LOW_SPEED,15,15);
  2060. // MoveAction_Const_AccDec(X_AXIS, KAI_QD_DIR_N,KAI_QD_PARAM_FIRST_GO_HIGHSPEED,KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_ACC,KAI_QD_PARAM_DCC);//
  2061. }
  2062. KAI_QD_MotorDelay = dwTickCount + MOTOR_ALARM_TIME;
  2063. KAI_QD_MotorStep = 64;
  2064. KAI_QD_ReBack_Step = 0;
  2065. }
  2066. else //后走10公分都没有离开前信号的话,说明信号有故障
  2067. {
  2068. KAI_QD_SetAlarmCode(KAI_QD_QIAN_LIMIT_ALARM);
  2069. }
  2070. }
  2071. break;
  2072. case 64:
  2073. //在自动情况下安全门
  2074. if(KAI_QD_ANQUANMEN_LIMIT_IN && bRunning)
  2075. {
  2076. if(dwTickCount >= KAI_QD_ANQUANMEN_Time)
  2077. {
  2078. KAI_QD_StopStep=1;
  2079. KAI_QD_cSTOPONE=1;
  2080. }
  2081. }
  2082. else
  2083. {
  2084. KAI_QD_ANQUANMEN_Time = dwTickCount + 100;
  2085. }
  2086. if(KAI_QD_cZipCnt > 0)
  2087. {
  2088. if(KAI_QD_QIAN_LIMIT_IN) //前点限位
  2089. {
  2090. if(KAI_QD_PARAM_GO_DW_LENGTH)
  2091. {
  2092. SetPos(X_AXIS, KAI_QD_PARAM_GO_DW_LENGTH);
  2093. AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,-KAI_QD_PARAM_GO_DW_LENGTH,1200,1000,5,5,00);
  2094. }
  2095. else
  2096. AxisEgmStop(X_AXIS);
  2097. KAI_QD_MotorStep = 66;
  2098. }
  2099. if(dwXRealPos < -800) //小于8公分前感应异常
  2100. KAI_QD_SetAlarmCode(KAI_QD_QIAN_LIMIT_ALARM);
  2101. }
  2102. else
  2103. {
  2104. if(KAI_QD_QIAN_LIMIT_IN) //前点限位
  2105. {
  2106. if(KAI_QD_PARAM_GO_DW_LENGTH)
  2107. {
  2108. SetPos(X_AXIS, KAI_QD_PARAM_GO_DW_LENGTH);
  2109. AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_GO_LOW_SPEED,-KAI_QD_PARAM_GO_DW_LENGTH,1200,1000,5,5,00);
  2110. }
  2111. else
  2112. AxisEgmStop(X_AXIS);
  2113. KAI_QD_MotorStep = 66;
  2114. }
  2115. //第一次不知道当前位置,只能按轨道长度限位
  2116. if(dwXRealPos < -(KAI_QD_PARAM_RUN_LENGTH+800))
  2117. KAI_QD_SetAlarmCode(KAI_QD_QIAN_LIMIT_ALARM);
  2118. }
  2119. break;
  2120. case 66:
  2121. if(!X_DRV || (dwXRealPos <= 0))
  2122. {
  2123. SetPos(X_AXIS, 0);
  2124. AxisEgmStop(X_AXIS);
  2125. KAI_QD_MotorDelay = dwTickCount + 5;
  2126. KAI_QD_MotorStep = 67;
  2127. }
  2128. break;
  2129. case 67: //等推链完成后,
  2130. if((dwTickCount >= KAI_QD_MotorDelay) && (KAI_QD_TuiLianStep == 0))
  2131. {
  2132. if(bRunning)
  2133. {
  2134. KAI_QD_JD_VAVLE = 1; //夹带
  2135. if(KAI_QD_PARAM_JZGY_MODE)
  2136. {
  2137. if(KAI_QD_JDQXW_IN)
  2138. KAI_QD_MotorDelay = dwTickCount + KAI_QD_PARAM_DELAY_BACK;
  2139. KAI_QD_MotorStep = 68;
  2140. }
  2141. else
  2142. {
  2143. KAI_QD_MotorDelay = dwTickCount + KAI_QD_PARAM_DELAY_BACK;
  2144. KAI_QD_MotorStep = 68;
  2145. }
  2146. }
  2147. else
  2148. KAI_QD_MotorStep = 68;
  2149. }
  2150. break;
  2151. case 68:
  2152. if(dwTickCount >= KAI_QD_MotorDelay)
  2153. {
  2154. KAI_QD_YD_VAVLE = 0;
  2155. KAI_QD_MotorStep = 0;
  2156. KAI_QD_MotorDelay = dwTickCount;
  2157. }
  2158. break;
  2159. }
  2160. #endif
  2161. }
  2162. //夹子松带返回长链电机处,只有拉链长度大于一定长度才启用 ,也为切断后拉出拉链用
  2163. //辅助Y轴电机动作用
  2164. void Kai_QueDuan_ReBack(void)
  2165. {
  2166. switch(KAI_QD_ReBack_Step)
  2167. {
  2168. case 1:
  2169. if(KAI_QD_PARAM_LIAN_SELECT)
  2170. {
  2171. if(dwYRealPos >= 2500) //到20公分位置启动松带
  2172. {
  2173. KAI_QD_ReBack_Step = 2;
  2174. KAI_QD_MotorStep = 40; //夹子松开
  2175. }
  2176. }
  2177. else //短链有二次切情况下才先回到原位
  2178. {
  2179. if(dwXRealPos >= 1000) //到20公分位置启动松带
  2180. {
  2181. KAI_QD_ReBack_Step = 2;
  2182. KAI_QD_MotorStep = 40; //夹子松开
  2183. }
  2184. }
  2185. break;
  2186. case 2:
  2187. if(KAI_QD_MotorStep == 0)
  2188. {
  2189. KAI_QD_ReBack_Step = 3;
  2190. KAI_QD_ReBackDelay = dwTickCount + 40;
  2191. }
  2192. break;
  2193. case 3:
  2194. if(dwTickCount >= KAI_QD_ReBackDelay)
  2195. {
  2196. KAI_QD_ReBack_Step = 4;
  2197. //自动匹配减速时间
  2198. KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC+ KAI_QD_PARAM_GO_HIGH_SPEED/500;
  2199. if(KAI_QD_PARAM_LIAN_SELECT)
  2200. {
  2201. //因为是长链模式,夹子走回到压轮前位置
  2202. AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_GO_HIGH_SPEED,-(dwXRealPos-KAI_QD_PARAM_JZ_STOP_POS),
  2203. KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_GO_LOW_SPEED/3,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,
  2204. 100);
  2205. }
  2206. else
  2207. {
  2208. //因为是短链模式,有二次切夹子走回到前点6公分位置
  2209. AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_GO_HIGH_SPEED,-(dwXRealPos-600),
  2210. KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_GO_LOW_SPEED/3,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,
  2211. 100);
  2212. }
  2213. }
  2214. break;
  2215. case 4:
  2216. if(!X_DRV)
  2217. {
  2218. KAI_QD_ReBack_Step = 0;
  2219. }
  2220. break;
  2221. //切断后长链电机拉带出去
  2222. case 10:
  2223. //长链切断后由长链电机
  2224. AxisMovePosAccDec(Y_AXIS,KAI_QD_PARAM_BACK_SPEED*2/3,2000,
  2225. KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_GO_LOW_SPEED/3,30,30, 260);
  2226. KAI_QD_YPOS_buff = dwYRealPos;
  2227. KAI_QD_ReBack_Step = 11;
  2228. break;
  2229. case 11:
  2230. if(dwYRealPos >= (KAI_QD_YPOS_buff + 1000))
  2231. {
  2232. KAI_QD_ReBack_Step = 12;
  2233. KAI_QD_CLTD_YL_VAVLE = 0;
  2234. if(KAI_QD_JD_VAVLE && (KAI_QD_MotorStep == 0)) //夹子没有张开的话,说明拉链比较短
  2235. KAI_QD_MotorStep = 40; //夹子松开
  2236. }
  2237. break;
  2238. case 12:
  2239. if((!Y_DRV || KAI_QD_CLTD_YL_ORIGIN_IN))
  2240. {
  2241. KAI_QD_CLTD_JT_VAVLE = 0; //长链电机进退电磁
  2242. KAI_QD_ReBack_Step = 2;
  2243. }
  2244. break;
  2245. }
  2246. }
  2247. //
  2248. //Y电机动作
  2249. //长链轮子电机
  2250. //不带过链感应长度输入电机长度 闭口有勾针到位 ,夹子电机
  2251. void Kai_QueDuan_YMotor(void)
  2252. {
  2253. unsigned short ch,kk;
  2254. #if 1
  2255. switch(KAI_QD_YMotorStep)
  2256. {
  2257. case 30:
  2258. // switch(KAI_QD_PARAM_BACK_MODE) //开口分四种模式
  2259. // {
  2260. // case 0: //单数控模式
  2261. KAI_QD_YMotorStep = 310; //每种模式留20步
  2262. SetPos(X_AXIS, 0); //开始拖带处为0点
  2263. SetPos(Y_AXIS, 0); //开始拖带处为0点
  2264. KAI_QD_YMotorDelay = dwTickCount + 0;
  2265. KAI_QD_YD_VAVLE = 0;
  2266. break;
  2267. //310步到315步为数控模式
  2268. case 310:
  2269. KAI_QD_YMotorStep = 311;
  2270. if(KAI_QD_PARAM_BL_ENABLE)
  2271. KAI_QD_BinLianStep = 20; //并链起动
  2272. break;
  2273. case 311:
  2274. if(dwTickCount >= KAI_QD_YMotorDelay)
  2275. {
  2276. KAI_QD_length_buffer =(short *)( &KAI_QD_PARAM_OFFSET_LENGTH);
  2277. if(KAI_QD_PARAM_ECQ_MODE)
  2278. KAI_QD_ECT_VAVLE=0;
  2279. //自动匹配减速时间
  2280. KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC+ KAI_QD_PARAM_BACK_SPEED/500;
  2281. //因为是长链模式,夹走到转换位置
  2282. AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_BACK_SPEED,KAI_QD_PARAM_CL_JZ_TD_LENGTH, KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,KAI_QD_PARAM_BACK_LOW_SPEED_LENGTH);
  2283. KAI_QD_YMotorDelay = dwTickCount + MOTOR_ALARM_TIME;
  2284. if(!KAI_QD_CLTD_JT_VAVLE)
  2285. KAI_QD_CLTD_YL_VAVLE = 0;
  2286. KAI_QD_YMotorStep = 312;
  2287. }
  2288. break;
  2289. case 312:
  2290. //电机走动后再退送链,减少起动拉链的阻力
  2291. if(dwXRealPos >= 150)
  2292. {
  2293. KAI_QD_TL_VAVLE = 0;
  2294. KAI_QD_TFK_VAVLE = 0;
  2295. }
  2296. //电机到达夹子和压轮错开点
  2297. if(dwXRealPos >= KAI_QD_PARAM_JZ_STOP_POS)
  2298. {
  2299. KAI_QD_CLTD_JT_VAVLE = 1;
  2300. }
  2301. //剩下三公分开始压轮
  2302. if(((dwXRealPos + 300) >= KAI_QD_PARAM_CL_JZ_TD_LENGTH) && KAI_QD_CLTD_JT_VAVLE && KAI_QD_CLTD_LIMIT_IN && !KAI_QD_CLTD_YL_VAVLE)
  2303. {
  2304. KAI_QD_CLTD_YL_VAVLE = 1;
  2305. KAI_QD_YMotorDelay = dwTickCount + KAI_QD_PARAM_YL_TIME;
  2306. }
  2307. //
  2308. if(!KAI_QD_CLTD_YL_VAVLE || KAI_QD_CLTD_YL_ORIGIN_IN)
  2309. KAI_QD_YMotorDelay = dwTickCount + KAI_QD_PARAM_YL_TIME;
  2310. //夹子电机已停止,压轮电机进到位,压轮时间到
  2311. if((!X_DRV && KAI_QD_CLTD_LIMIT_IN && !KAI_QD_CLTD_ORIGIN_IN && !KAI_QD_CLTD_YL_ORIGIN_IN && (dwTickCount >= KAI_QD_YMotorDelay) && KAI_QD_CLTD_YL_VAVLE)
  2312. && (!KAI_bTiaoShiMode || (KAI_QD_START_IN_UP)))
  2313. {
  2314. //要
  2315. if(KAI_QD_PARAM_ZIPPER_LENGTH >= (KAI_QD_PARAM_CL_JZ_TD_LENGTH+ 3000))
  2316. {
  2317. KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC+ KAI_QD_PARAM_CHECK_BACK_CL_HSPEED/500;
  2318. //因为是长链模式,夹走到转换位置//
  2319. AxisMovePosAccDecNotStop(Y_AXIS,KAI_QD_PARAM_CHECK_BACK_CL_HSPEED,(KAI_QD_PARAM_ZIPPER_LENGTH - KAI_QD_PARAM_CL_JZ_TD_LENGTH - 3000),
  2320. KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,60);
  2321. }
  2322. else if(KAI_QD_PARAM_ZIPPER_LENGTH > KAI_QD_PARAM_CL_JZ_TD_LENGTH)
  2323. {
  2324. KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC+ KAI_QD_PARAM_CHECK_BACK_CL_SPEED/500;
  2325. //因为是长链模式,夹走到转换位置//
  2326. AxisMovePosAccDecNotStop(Y_AXIS,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,KAI_QD_PARAM_ZIPPER_LENGTH - KAI_QD_PARAM_CL_JZ_TD_LENGTH,
  2327. KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,60);
  2328. }
  2329. else
  2330. {
  2331. if(KAI_QD_PARAM_LTJC_MODE == 0) //有拉头
  2332. {
  2333. AxisContinueMoveAcc(Y_AXIS,KAI_QD_PARAM_CHECK_BACK_CL_SPEED*8/5,KAI_QD_DIR_P,KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_LSPEED,35,30);
  2334. }
  2335. else //没有拉头
  2336. {
  2337. //因为是长链模式,夹走到转换位置//
  2338. AxisContinueMoveAcc(Y_AXIS,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,KAI_QD_DIR_P,KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_LSPEED,25,30);
  2339. }
  2340. }
  2341. KAI_QD_YMotorStep = 313;
  2342. //拉链长度大于此长度后才提前自动返回
  2343. if(KAI_QD_PARAM_ZIPPER_LENGTH > KAI_QD_PARAM_AUTO_REBACK_LENGTH)
  2344. KAI_QD_ReBack_Step = 1;
  2345. }
  2346. break;
  2347. case 313:
  2348. if(KAI_QD_PARAM_ZIPPER_LENGTH < (KAI_QD_PARAM_CL_JZ_TD_LENGTH))
  2349. {
  2350. //有拉头,没有拉头情况下拉带速度本来就比较慢
  2351. if(KAI_QD_GUO_LIAN_IN_UP && (KAI_QD_PARAM_LTJC_MODE == 0))
  2352. {
  2353. AxisContinueMoveChangeSpeed(Y_AXIS,(KAI_QD_PARAM_CHECK_BACK_CL_SPEED),1000,15,15);
  2354. }
  2355. if(KAI_QD_GUO_LIAN_IN_DW)
  2356. {
  2357. KAI_QD_gou_zhen_buff = dwYRealPos;
  2358. KAI_QD_YMotorStep = 314;
  2359. KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC+ GetCurSpeed(X_AXIS)/500;
  2360. AxisMovePosAccDec(Y_AXIS,GetCurSpeed(Y_AXIS),KAI_QD_PARAM_MOTOR_DINWEI_LENGTH, GetCurSpeed(Y_AXIS),KAI_QD_PARAM_BACK_LOW_SPEED/3,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,80);
  2361. }
  2362. }
  2363. else
  2364. {
  2365. if(KAI_QD_GUO_LIAN_IN_DW && ((dwYRealPos + KAI_QD_PARAM_CL_JZ_TD_LENGTH + 1500) >= KAI_QD_PARAM_ZIPPER_LENGTH ))
  2366. {
  2367. KAI_QD_gou_zhen_buff = dwYRealPos;
  2368. KAI_QD_YMotorStep = 314;
  2369. KAI_QD_DCC_TIME_BL = KAI_QD_PARAM_DCC+ GetCurSpeed(X_AXIS)/500;
  2370. AxisMovePosAccDec(Y_AXIS,GetCurSpeed(Y_AXIS),KAI_QD_PARAM_MOTOR_DINWEI_LENGTH, GetCurSpeed(Y_AXIS),KAI_QD_PARAM_BACK_LOW_SPEED/3,KAI_QD_PARAM_ACC,KAI_QD_DCC_TIME_BL,80);
  2371. }
  2372. }
  2373. break;
  2374. case 314: //
  2375. if(!KAI_QD_GZ_VAVLE && ((dwYRealPos) >= (KAI_QD_gou_zhen_buff + KAI_QD_PARAM_GZ_DELAY)))
  2376. {
  2377. KAI_QD_GZ_VAVLE = 1;
  2378. }
  2379. //实为滤波用,定位到之前又到空位的话重新检测
  2380. if(KAI_QD_GUO_LIAN_IN_UP)
  2381. {
  2382. KAI_QD_YMotorStep = 313;
  2383. // KAI_QD_GZ_VAVLE = 0;
  2384. if(Y_DRV)
  2385. AxisContinueMoveChangeSpeed(Y_AXIS,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,1000,25,15);
  2386. else
  2387. AxisMovePosAccDecNotStop(Y_AXIS,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,3000,
  2388. KAI_QD_PARAM_START_SPEED,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,KAI_QD_PARAM_ACC,30,60);
  2389. }
  2390. else if(!Y_DRV) //定位完成
  2391. {
  2392. KAI_QD_YMotorStep = 0;
  2393. if(KAI_QD_cZipCnt == 0)
  2394. {
  2395. KAI_QD_length_buff = dwYRealPos + KAI_QD_PARAM_CL_JZ_TD_LENGTH;
  2396. SetData32bits(KAI_QD_PARAM_ZIPPER_LENGTH_ADDR,KAI_QD_length_buff); //测量记录长度
  2397. }
  2398. //比较拉链长度 警告
  2399. }
  2400. break;
  2401. case 315:
  2402. if(dwTickCount >= KAI_QD_YMotorDelay)
  2403. {
  2404. KAI_QD_YMotorStep = 317;
  2405. }
  2406. //实为滤波用,定位到之前又到空位的话重新检测
  2407. if(KAI_QD_GUO_LIAN_IN_UP)
  2408. {
  2409. KAI_QD_YMotorStep = 314;
  2410. KAI_QD_GZ_VAVLE = 0;
  2411. AxisContinueMoveChangeSpeed(X_AXIS,KAI_QD_PARAM_CHECK_BACK_CL_SPEED,GetCurSpeed(X_AXIS),25,15);
  2412. }
  2413. else if(!Y_DRV) //定位完成
  2414. {
  2415. KAI_QD_YMotorStep = 316;
  2416. }
  2417. break;
  2418. case 316:
  2419. if(KAI_QD_PARAM_BACK_MODE == 2) //纯数控模式
  2420. {
  2421. ch = KAI_QD_gou_zhen_buff + KAI_QD_PARAM_CL_JZ_TD_LENGTH - KAI_QD_PARAM_SKCDWC_LENGTH;
  2422. kk = KAI_QD_gou_zhen_buff + KAI_QD_PARAM_CL_JZ_TD_LENGTH+ KAI_QD_PARAM_SKCDWC_LENGTH;
  2423. }
  2424. if(KAI_QD_PARAM_BACK_MODE == 2) //先感应后数控模式+检测 只能检测过链的位置
  2425. {
  2426. if(((KAI_QD_dwWorkLength) < (ch))) //拉链变短
  2427. {
  2428. SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_LENGTH_SHORT_ALARM);
  2429. if(dwTickCount >= KAI_QD_YMotorDelay)
  2430. bAlarmStop = 1;
  2431. }
  2432. else if((KAI_QD_dwWorkLength > kk))//拉链变长//(KAI_QD_PARAM_ERROR_LENGTH - 200 + (*KAI_QD_length_buffer)+50)))
  2433. {
  2434. SetAlarmCode(KAI_QD_ALARM_ADDR,KAI_QD_LENGTH_LONG_ALARM);
  2435. if(dwTickCount >= KAI_QD_YMotorDelay)
  2436. bAlarmStop = 1;
  2437. }
  2438. else
  2439. {
  2440. KAI_QD_YMotorStep = 0;//390; //延时反转步
  2441. }
  2442. }
  2443. break;
  2444. }
  2445. #endif
  2446. }
  2447. //Z电机动作
  2448. //切刀位置电机
  2449. //主要是回零,定位刀的位置
  2450. //1步开始为回零点
  2451. void Kai_QueDuan_ZMotor(void)
  2452. {
  2453. if(KAI_QD_PARAM_ECTMACHINE_MODE)
  2454. {
  2455. switch(KAI_QD_ZMotorStep)
  2456. {
  2457. case 1:
  2458. KAI_QD_ZMotorStep = 4;
  2459. if(KAI_QD_ECTD_ORIGIN_IN)
  2460. {
  2461. AxisContinueMoveAcc(Z_AXIS,KAI_QD_PARAM_ECQ_MOTOR_SPEED,KAI_QD_DIR_P,2000,2000,25,15);
  2462. KAI_QD_ZMotorStep = 2;
  2463. }
  2464. else
  2465. {
  2466. AxisContinueMoveAcc(Z_AXIS,KAI_QD_PARAM_ECQ_MOTOR_SPEED,KAI_QD_DIR_N,2000,2000,25,15);
  2467. }
  2468. break;
  2469. case 2:
  2470. if(!KAI_QD_ECTD_ORIGIN_IN)
  2471. {
  2472. AxisMovePosAccDec(Z_AXIS,3000,30,2000,2000,10,10,30);
  2473. KAI_QD_ZMotorStep = 3;
  2474. }
  2475. else if(dwZRealPos >= 400) // 大于4CM 后都没离开说明信号异常 警告
  2476. {
  2477. KAI_QD_SetAlarmCode(KAI_QD_Z_ORIGIN_IN_ALARM);
  2478. KAI_QD_ZMotorStep = 0;
  2479. }
  2480. break;
  2481. case 3:
  2482. if(!Z_DRV)
  2483. {
  2484. KAI_QD_ZMotorStep = 7;
  2485. AxisEgmStop(Z_AXIS);
  2486. KAI_QD_ZMotorDelay = dwTickCount + 5;
  2487. }
  2488. break;
  2489. case 4:
  2490. if(KAI_QD_ECTD_ORIGIN_IN)
  2491. {
  2492. AxisEgmStop(Z_AXIS);
  2493. KAI_QD_ZMotorStep = 5;
  2494. SetPos(Z_AXIS, 0); //开始拖带处为0点
  2495. KAI_QD_ZMotorDelay = dwTickCount + 5;
  2496. }
  2497. else if(dwZRealPos <= -1300) // 大于4CM 后都没离开说明信号异常 警告
  2498. {
  2499. KAI_QD_SetAlarmCode(KAI_QD_Z_ORIGIN_IN_ALARM);
  2500. KAI_QD_ZMotorStep = 0;
  2501. }
  2502. break;
  2503. case 5:
  2504. if(dwTickCount >= KAI_QD_ZMotorDelay)
  2505. {
  2506. if(1)
  2507. {
  2508. AxisContinueMoveAcc(Z_AXIS,4000,KAI_QD_DIR_P,2000,2000,25,25);
  2509. KAI_QD_ZMotorStep = 2;
  2510. }
  2511. }
  2512. break;
  2513. case 7:
  2514. if(dwTickCount >= KAI_QD_ZMotorDelay)
  2515. {
  2516. if(1)
  2517. {
  2518. AxisContinueMoveAcc(Z_AXIS,2000,KAI_QD_DIR_N,2000,2000,25,15);
  2519. KAI_QD_ZMotorStep = 8;
  2520. }
  2521. }
  2522. break;
  2523. case 8:
  2524. if(KAI_QD_ECTD_ORIGIN_IN)
  2525. {
  2526. KAI_QD_ORIGIN_Over = 1;
  2527. AxisEgmStop(Z_AXIS);
  2528. KAI_QD_ZMotorStep = 9;
  2529. SetPos(Z_AXIS, 0); //开始拖带处为0点
  2530. KAI_QD_ZMotorDelay = dwTickCount + 0;
  2531. }
  2532. else if(dwZRealPos <= -300) // 大于4CM 后都没离开说明信号异常 警告
  2533. {
  2534. KAI_QD_SetAlarmCode(KAI_QD_Z_ORIGIN_IN_ALARM);
  2535. KAI_QD_ZMotorStep = 0;
  2536. AxisEgmStop(Z_AXIS);
  2537. }
  2538. break;
  2539. case 9:
  2540. if(dwTickCount >= KAI_QD_ZMotorDelay)
  2541. {
  2542. if(KAI_QD_PARAM_ECQ_MODE) //二次切选择的话先移动到第一刀
  2543. KAI_QD_ZMotorStep = 10;
  2544. else
  2545. KAI_QD_ZMotorStep = 20;
  2546. }
  2547. break;
  2548. //到达一次切位置
  2549. case 10:
  2550. KAI_QD_ZMotorDelay = dwTickCount + 20;
  2551. KAI_QD_ZMotorStep = 11;
  2552. break;
  2553. case 11:
  2554. if(dwTickCount >= KAI_QD_ZMotorDelay)
  2555. {
  2556. if(KAI_QD_PARAM_LLDK_LENGTH < 200)
  2557. KAI_QD_PARAM_LLDK_LENGTH = 200;
  2558. //一次切刀选择
  2559. if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切
  2560. {
  2561. //预留的位置不能超出一字刀位置
  2562. if((KAI_QD_PARAM_YZD_POS + KAI_QD_PARAM_FIRST_POS) >= KAI_QD_PARAM_LLDK_LENGTH)
  2563. {
  2564. AxisMovePosAccDec(Z_AXIS,KAI_QD_PARAM_ECQ_MOTOR_SPEED,((KAI_QD_PARAM_YZD_POS + KAI_QD_PARAM_FIRST_POS) - KAI_QD_PARAM_LLDK_LENGTH) - dwZRealPos,2000,2000,30,30,10);
  2565. KAI_QD_ZMotorStep = 12;
  2566. }
  2567. else //超出位置警告
  2568. {
  2569. KAI_QD_ZMotorStep = 0;
  2570. KAI_QD_SetAlarmCode(KAI_QD_Z_POS_OVER_ALARM);
  2571. }
  2572. }
  2573. else
  2574. {
  2575. //预留的位置不能超出位置
  2576. if((KAI_QD_PARAM_HBD_POS + KAI_QD_PARAM_FIRST_POS) >= KAI_QD_PARAM_LLDK_LENGTH)
  2577. {
  2578. AxisMovePosAccDec(Z_AXIS,KAI_QD_PARAM_ECQ_MOTOR_SPEED,((KAI_QD_PARAM_HBD_POS + KAI_QD_PARAM_FIRST_POS) - KAI_QD_PARAM_LLDK_LENGTH) - dwZRealPos,2000,2000,30,35,10);
  2579. KAI_QD_ZMotorStep = 12;
  2580. }
  2581. else //超出位置警告
  2582. {
  2583. KAI_QD_ZMotorStep = 0;
  2584. KAI_QD_SetAlarmCode(KAI_QD_Z_POS_OVER_ALARM);
  2585. }
  2586. }
  2587. }
  2588. break;
  2589. case 12:
  2590. if(!Z_DRV)
  2591. {
  2592. KAI_QD_ZMotorStep = 0;
  2593. KAI_QD_CUR_QDSelect = 0;
  2594. }
  2595. break;
  2596. //到达二次切位置
  2597. case 20:
  2598. KAI_QD_ZMotorDelay = dwTickCount + 20;
  2599. KAI_QD_ZMotorStep = 21;
  2600. break;
  2601. case 21:
  2602. if(dwTickCount >= KAI_QD_ZMotorDelay)
  2603. {
  2604. if(KAI_QD_PARAM_LLDK_LENGTH < 200)
  2605. KAI_QD_PARAM_LLDK_LENGTH = 200;
  2606. //二次切刀选择
  2607. if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切
  2608. AxisMovePosAccDec(Z_AXIS,KAI_QD_PARAM_ECQ_MOTOR_SPEED,(KAI_QD_PARAM_YZD_POS) - KAI_QD_PARAM_SECOND_POS- dwZRealPos,2000,2000,30,35,10);
  2609. else
  2610. AxisMovePosAccDec(Z_AXIS,KAI_QD_PARAM_ECQ_MOTOR_SPEED,(KAI_QD_PARAM_HBD_POS) - KAI_QD_PARAM_SECOND_POS - dwZRealPos,2000,2000,30,35,10);
  2611. KAI_QD_ZMotorStep = 22;
  2612. KAI_QD_CUR_QDSelect = 1;
  2613. }
  2614. break;
  2615. case 22:
  2616. if(!Z_DRV)
  2617. {
  2618. KAI_QD_ZMotorStep = 0;
  2619. }
  2620. break;
  2621. }
  2622. }
  2623. else
  2624. {
  2625. KAI_QD_ZMotorStep = 0;
  2626. KAI_QD_ORIGIN_Over = 1;
  2627. }
  2628. }
  2629. void Kai_QueDuan_TuiLianAction(void)
  2630. {
  2631. #if 1
  2632. if((KAI_QD_PARAM_XM_ENABLE == 0) && (KAI_QD_PARAM_ECTMACHINE_MODE == 0))
  2633. {
  2634. KAI_QD_TuiLianStep = 0;
  2635. }
  2636. else
  2637. {
  2638. switch(KAI_QD_TuiLianStep)
  2639. {
  2640. case 1:
  2641. KAI_QD_TuiLianStep = 2;
  2642. break;
  2643. case 2:
  2644. KAI_QD_TLDelay = dwTickCount + KAI_QD_PARAM_YD_DELAY;
  2645. KAI_QD_TuiLianStep = 3;
  2646. break;
  2647. case 3:
  2648. if(dwTickCount >= KAI_QD_TLDelay)
  2649. {
  2650. if(!KAI_QD_SM_VAVLE && !KAI_QD_SHANG_MU_LIMIT_IN )
  2651. {
  2652. KAI_QD_TL_VAVLE = 1;
  2653. // KAI_QD_TFK_VAVLE = 1;
  2654. if(!bRunning)KAI_QD_TFK_VAVLE = 1;
  2655. KAI_QD_TLDelay = dwTickCount + KAI_QD_PARAM_TL_DELAY;
  2656. KAI_QD_TuiLianStep = 4;
  2657. }
  2658. }
  2659. break;
  2660. case 4:
  2661. if(dwTickCount >= KAI_QD_TLDelay)
  2662. {
  2663. KAI_QD_TuiLianStep = 0;
  2664. }
  2665. break;
  2666. case 10:
  2667. KAI_QD_TuiLianStep = 11;
  2668. break;
  2669. case 11:
  2670. if(!Y_DRV)
  2671. {
  2672. KAI_QD_TuiLianStep = 0;
  2673. }
  2674. break;
  2675. }
  2676. }
  2677. #endif
  2678. }
  2679. #if 0
  2680. //闭口专用
  2681. void Kai_QueDuan_XiaQue(void)
  2682. {
  2683. switch(KAI_QD_XiaQieStep)
  2684. {
  2685. case 0:
  2686. break;
  2687. case 1:
  2688. if(!bRunning)
  2689. {
  2690. KAI_QD_GZ_VAVLE = 1; //勾针
  2691. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_CUT_DELAY;
  2692. // KAI_QD_XiaQieStep = 100;
  2693. KAI_QD_XiaQieStep = 2;
  2694. KAI_QD_XiaQieDelay = dwTickCount + 30;
  2695. }
  2696. else
  2697. {
  2698. KAI_QD_YD_VAVLE = 1;
  2699. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_CUT_DELAY;
  2700. KAI_QD_XiaQieStep = 2;
  2701. }
  2702. break;
  2703. case 2:
  2704. if((dwTickCount >= KAI_QD_XiaQieDelay ) && KAI_QD_GOUZHEN_IN)
  2705. {
  2706. KAI_QD_YD_VAVLE = 1;
  2707. KAI_QD_XiaQieStep = 3;
  2708. KAI_QD_XiaQieDelay = dwTickCount;
  2709. }
  2710. break;
  2711. case 3:
  2712. if(dwTickCount >= KAI_QD_XiaQieDelay)
  2713. {
  2714. if((KAI_QD_PARAM_TIAOSHI_MODE && KAI_QD_bTS) || (KAI_QD_PARAM_TIAOSHI_MODE == 0))
  2715. {
  2716. KAI_QD_SM_VAVLE = 1;
  2717. if(!KAI_QD_PARAM_XM_ENABLE)
  2718. KAI_QD_XM_VAVLE = 1;
  2719. KAI_QD_XiaQieDelay = dwTickCount + VAVLE_ALARM_TIME;
  2720. KAI_QD_XiaQieStep = 4;
  2721. }
  2722. }
  2723. break;
  2724. case 4:
  2725. if(KAI_QD_SHANG_MU_LIMIT_IN && (KAI_QD_XIA_MU_LIMIT_IN || KAI_QD_PARAM_XM_ENABLE))
  2726. {
  2727. if(!KAI_QD_PARAM_CS_MODE) //气切
  2728. {
  2729. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_DELAYBACK_SM; //
  2730. KAI_QD_XiaQieStep = 5;
  2731. }
  2732. else
  2733. {
  2734. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_DELAY_CS; //
  2735. KAI_QD_XiaQieStep = 10;
  2736. } //
  2737. }
  2738. else if(dwTickCount >= KAI_QD_XiaQieDelay)
  2739. {
  2740. if(!KAI_QD_SHANG_MU_LIMIT_IN)
  2741. KAI_QD_SetAlarmCode(KAI_QD_SM_DAOWEI);
  2742. else
  2743. KAI_QD_SetAlarmCode(KAI_QD_XM_DAOWEI);
  2744. }
  2745. break;
  2746. case 5:
  2747. if(dwTickCount >= KAI_QD_XiaQieDelay)
  2748. {
  2749. // KAI_QD_DL_VAVLE=0;
  2750. // KAI_QD_JIALIAN_VAVLE=0;
  2751. KAI_QD_GZ_VAVLE = 0;
  2752. KAI_QD_SM_VAVLE = 0;
  2753. if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动
  2754. KAI_QD_XM_VAVLE = 0;
  2755. if(KAI_QD_PARAM_ECQ_MODE)
  2756. {
  2757. KAI_QD_XiaQieStep = 20;
  2758. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_YSECT_DELAY;
  2759. }
  2760. else
  2761. {
  2762. KAI_QD_XiaQieStep = 6;
  2763. KAI_QD_XiaQieDelay = dwTickCount + VAVLE_ALARM_TIME; //
  2764. }
  2765. }
  2766. break;
  2767. case 6:
  2768. if(!KAI_QD_SHANG_MU_LIMIT_IN && (!KAI_QD_XIA_MU_LIMIT_IN || KAI_QD_PARAM_XM_ENABLE)) //下模不动就不用判断
  2769. {
  2770. if(!KAI_QD_PARAM_LDHTGZ_MODE || !bRunning)
  2771. KAI_QD_GZ_VAVLE = 0;
  2772. if(KAI_QD_TuiLianStep == 0)
  2773. KAI_QD_TuiLianStep = 1;
  2774. if(!bRunning)
  2775. KAI_QD_JD_VAVLE = 0;
  2776. KAI_QD_XiaQieStep = 0;
  2777. }
  2778. else if(dwTickCount >= KAI_QD_XiaQieDelay)
  2779. {
  2780. KAI_QD_SetAlarmCode(KAI_QD_SM_YUANWEI);
  2781. }
  2782. break;
  2783. //10~11步为超声
  2784. case 10:
  2785. if(dwTickCount >= KAI_QD_XiaQieDelay)
  2786. {
  2787. if(KAI_QD_PARAM_CS_ENABLE)KAI_QD_CS_OUT = 1;
  2788. // KAI_QD_DL_VAVLE=0;
  2789. // KAI_QD_JIALIAN_VAVLE=0;
  2790. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_CS_TIME; //
  2791. KAI_QD_XiaQieStep = 11;
  2792. }
  2793. break;
  2794. case 11:
  2795. if(dwTickCount >= KAI_QD_XiaQieDelay)
  2796. {
  2797. KAI_QD_CS_OUT = 0;
  2798. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_CS_COLD_TIME; //
  2799. KAI_QD_XiaQieStep = 5;
  2800. }
  2801. break;
  2802. case 20:
  2803. if(dwTickCount >= KAI_QD_XiaQieDelay)
  2804. {
  2805. KAI_QD_ECT_VAVLE=1;
  2806. KAI_QD_XiaQieStep = 21;
  2807. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_ECTL_TIME;
  2808. }
  2809. break;
  2810. case 21:
  2811. if(dwTickCount >= KAI_QD_XiaQieDelay)
  2812. {
  2813. if(!KAI_QD_ECTD_ORIGIN_IN)
  2814. {
  2815. KAI_QD_SecondXiaQueStep=1;
  2816. KAI_QD_XiaQieStep = 22;
  2817. KAI_QD_ErrorDelay=dwTickCount + VAVLE_ALARM_TIME;
  2818. }
  2819. else
  2820. {
  2821. KAI_QD_SetAlarmCode(KAI_QD_ECTDYW_ALARM);
  2822. }
  2823. }
  2824. break;
  2825. case 22:
  2826. if(KAI_QD_SecondXiaQueStep==0)
  2827. {
  2828. KAI_QD_SM_VAVLE = 0;
  2829. KAI_QD_CHUIQI_VAVLE=1;
  2830. KAI_QD_CHUIQIDelay=dwTickCount+KAI_QD_PARAM_CHUIQI_TIME;
  2831. if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动
  2832. KAI_QD_XM_VAVLE=0;
  2833. KAI_QD_TFK_VAVLE = 0;
  2834. KAI_QD_XiaQieStep = 6;
  2835. KAI_QD_XiaQieDelay = dwTickCount + VAVLE_ALARM_TIME;
  2836. }
  2837. break;
  2838. }
  2839. if(KAI_QD_CHUIQI_VAVLE)
  2840. {
  2841. if(dwTickCount>=KAI_QD_CHUIQIDelay)
  2842. {
  2843. KAI_QD_CHUIQI_VAVLE=0;
  2844. }
  2845. }
  2846. }
  2847. #endif
  2848. //开口用
  2849. void Kai_QueDuan_XiaQue(void)
  2850. {
  2851. switch(KAI_QD_XiaQieStep)
  2852. {
  2853. case 0:
  2854. break;
  2855. case 1:
  2856. KAI_QD_XiaQieStep = 2;
  2857. if(!KAI_QD_TFK_VAVLE && !KAI_QD_TFK_LIMIT_IN && KAI_QD_GZ_VAVLE)
  2858. {
  2859. if(KAI_QD_GOUZHEN_IN)
  2860. KAI_QD_SetAlarmCode(KAI_QD_GZ_ALARM);
  2861. }
  2862. break;
  2863. case 2:
  2864. if(!KAI_QD_TFK_VAVLE && !KAI_QD_TFK_LIMIT_IN && KAI_QD_GZ_VAVLE)
  2865. {
  2866. if(KAI_QD_GOUZHEN_IN)
  2867. KAI_QD_SetAlarmCode(KAI_QD_GZ_ALARM);
  2868. }
  2869. KAI_QD_XiaQieDelay = dwTickCount + VAVLE_ALARM_TIME;
  2870. KAI_QD_XiaQieStep = 3;
  2871. break;
  2872. case 3:
  2873. if(!KAI_QD_TFK_VAVLE && !KAI_QD_TFK_LIMIT_IN && KAI_QD_GZ_VAVLE)
  2874. {
  2875. if(KAI_QD_GOUZHEN_IN)
  2876. KAI_QD_SetAlarmCode(KAI_QD_GZ_ALARM);
  2877. }
  2878. if(1)
  2879. {
  2880. // if(KAI_QD_START_IN_UP)
  2881. {
  2882. KAI_QD_XiaQieDelay = dwTickCount + 0;//QD_PARAM_GZ_DELAY;
  2883. KAI_QD_XiaQieStep = 4;
  2884. }
  2885. }
  2886. else if(dwTickCount >= KAI_QD_XiaQieDelay)
  2887. {
  2888. KAI_QD_SetAlarmCode(KAI_QD_XM_DAOWEI);
  2889. }
  2890. break;
  2891. case 4:
  2892. if(!KAI_QD_TFK_VAVLE && !KAI_QD_TFK_LIMIT_IN && KAI_QD_GZ_VAVLE)
  2893. {
  2894. if(KAI_QD_GOUZHEN_IN)
  2895. KAI_QD_SetAlarmCode(KAI_QD_GZ_ALARM);
  2896. }
  2897. // if(KAI_QD_GZ_VAVLE) //勾针已经有输出就不需要延时
  2898. // {
  2899. // KAI_QD_XiaQieDelay = dwTickCount + 0;
  2900. // }
  2901. // else
  2902. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_TFK_DELAY;
  2903. KAI_QD_GZ_VAVLE = 1;
  2904. KAI_QD_cTuiFangKuaiCnt=0;
  2905. KAI_QD_XiaQieStep = 5;
  2906. break;
  2907. case 5:
  2908. if(!KAI_QD_TFK_VAVLE && !KAI_QD_TFK_LIMIT_IN && KAI_QD_GZ_VAVLE)
  2909. {
  2910. if(KAI_QD_GOUZHEN_IN)
  2911. KAI_QD_SetAlarmCode(KAI_QD_GZ_ALARM);
  2912. }
  2913. if(((dwTickCount >= KAI_QD_XiaQieDelay)))
  2914. {
  2915. KAI_QD_TFK_VAVLE = 1;
  2916. KAI_QD_XiaQieDelay = dwTickCount + VAVLE_ALARM_TIME;
  2917. KAI_QD_XiaQieStep = 6;
  2918. }
  2919. break;
  2920. case 6:
  2921. if(1)
  2922. {
  2923. KAI_QD_XiaQieStep = 7;
  2924. KAI_QD_XiaQieDelay = dwTickCount + 1200;
  2925. }
  2926. else if(dwTickCount >= KAI_QD_XiaQieDelay)
  2927. {
  2928. KAI_QD_SetAlarmCode(KAI_QD_XM_DAOWEI);
  2929. }
  2930. break;
  2931. case 7:
  2932. if(KAI_QD_GOUZHEN_IN && KAI_QD_TFK_LIMIT_IN)
  2933. {
  2934. KAI_QD_cTuiFangKuaiCnt = 0;
  2935. KAI_QD_TFKDelay = dwTickCount + 200;
  2936. KAI_QD_YD_VAVLE = 1;
  2937. //拉直要区分长链的短链(0短链,1 长链)
  2938. if(KAI_QD_PARAM_LIAN_SELECT)
  2939. {
  2940. //拉直由长链电机拉
  2941. if(KAI_QD_PARAM_ECQ_MODE && KAI_QD_PARAM_ECTMACHINE_MODE) //有二次切
  2942. {
  2943. AxisMovePosAccDec(Y_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_LDMS_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50);
  2944. }
  2945. else //一次切, 当夹子还没有放开时, 等切断完成后才松夹子返回
  2946. {
  2947. AxisMovePosAccDec(Y_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_DANQIEGY_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50);
  2948. }
  2949. }
  2950. else //链短链
  2951. { //由夹子电机拉直
  2952. if((KAI_QD_PARAM_BACK_MODE==2) || (KAI_QD_PARAM_BACK_MODE==3))
  2953. {
  2954. if(KAI_QD_PARAM_ECQ_MODE && KAI_QD_PARAM_ECTMACHINE_MODE)
  2955. {
  2956. if(KAI_QD_cZipCnt>1)
  2957. AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_MATOR_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50);
  2958. else
  2959. AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_LDMS_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50);
  2960. }
  2961. else
  2962. {
  2963. if(KAI_QD_cZipCnt>1)
  2964. AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_DANQIECNC_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50);
  2965. // AxisMovePosAccDec(X_AXIS,KAI_QDPARAM_LZ_SPPED,KAI_QDPARAM_DANQIECNC_LENGTH,50,8,50);
  2966. else
  2967. AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_DANQIEGY_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50);
  2968. // AxisMovePosAccDec(X_AXIS,KAI_QDPARAM_LZ_SPPED,KAI_QD_PARAM_DANQIEGY_LENGTH ,50,8,50);
  2969. }
  2970. }
  2971. else
  2972. {
  2973. if(KAI_QD_PARAM_ECQ_MODE && KAI_QD_PARAM_ECTMACHINE_MODE)
  2974. {
  2975. //数控
  2976. if(KAI_QD_PARAM_BACK_MODE==0)
  2977. AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_MATOR_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50);
  2978. // AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED,KAI_QD_PARAM_MATOR_LENGTH ,50,8,50);
  2979. //感应
  2980. else if(KAI_QD_PARAM_BACK_MODE==1)
  2981. AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_LDMS_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50);
  2982. // AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED,KAI_QD_PARAM_LDMS_LENGTH ,50,8,50);
  2983. }
  2984. else
  2985. {
  2986. //数控模式
  2987. if(KAI_QD_PARAM_BACK_MODE == 0)
  2988. AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_DANQIECNC_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50);
  2989. // AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED,KAI_QD_PARAM_DANQIECNC_LENGTH ,50,8,50);
  2990. //感应模式
  2991. else if(KAI_QD_PARAM_BACK_MODE == 1)
  2992. AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED, KAI_QD_PARAM_DANQIECNC_LENGTH, KAI_QD_PARAM_BACK_LOW_SPEED,KAI_QD_PARAM_BACK_LOW_SPEED/2,20,20,50);
  2993. // AxisMovePosAccDec(X_AXIS,KAI_QD_PARAM_LZ_SPPED,KAI_QD_PARAM_DANQIEGY_LENGTH ,50,8,50);
  2994. }
  2995. }
  2996. }
  2997. if(!KAI_QD_QIAN_LIMIT_IN)
  2998. {
  2999. //二次切
  3000. if(KAI_QD_PARAM_ECQ_MODE && KAI_QD_PARAM_ECTMACHINE_MODE)
  3001. {
  3002. if(bRunning)
  3003. {
  3004. KAI_QD_XiaQieDelay = dwTickCount+KAI_QD_PARAM_DL_DELAY;
  3005. KAI_QD_XiaQieStep = 102;
  3006. }
  3007. else
  3008. {
  3009. KAI_QD_XiaQieStep = 8;
  3010. KAI_QD_XiaQieDelay = dwTickCount + 200;
  3011. }
  3012. }
  3013. else //普通一次切
  3014. {
  3015. if(!bRunning)
  3016. KAI_QD_XiaQieDelay = dwTickCount + 200;
  3017. else
  3018. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_CUT_DELAY;
  3019. KAI_QD_XiaQieStep = 8;
  3020. }
  3021. }
  3022. else
  3023. KAI_QD_SetAlarmCode(KAI_QD_QIAN_LIMIT_ALARM);
  3024. }
  3025. else if((dwTickCount >= KAI_QD_XiaQieDelay))
  3026. {
  3027. if( KAI_QD_cTuiFangKuaiCnt < KAI_QD_PARAM_TFK_NUMBER)
  3028. {
  3029. KAI_QD_TFK_VAVLE = 0;
  3030. KAI_QD_YD_VAVLE = 0;
  3031. KAI_QD_cTuiFangKuaiCnt++;
  3032. KAI_QD_XiaQieDelay = dwTickCount + 30;
  3033. KAI_QD_XiaQieStep = 99;
  3034. }
  3035. else
  3036. KAI_QD_SetAlarmCode(KAI_QD_GZ_ALARM);
  3037. }
  3038. break;
  3039. case 99:
  3040. if(dwTickCount >= KAI_QD_XiaQieDelay)
  3041. {
  3042. KAI_QD_TFK_VAVLE = 0;
  3043. KAI_QD_XiaQieDelay = dwTickCount + 500;
  3044. KAI_QD_XiaQieStep = 100;
  3045. }
  3046. break;
  3047. //重推方块
  3048. case 100:
  3049. if(dwTickCount >= KAI_QD_XiaQieDelay)
  3050. {
  3051. KAI_QD_TFK_VAVLE = 1;
  3052. KAI_QD_XiaQieDelay = dwTickCount + 500;
  3053. KAI_QD_XiaQieStep = 6;
  3054. }
  3055. break;
  3056. //2次切
  3057. case 102:
  3058. if(dwTickCount >= KAI_QD_XiaQieDelay)
  3059. {
  3060. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_JLD_DELAY;
  3061. KAI_QD_XiaQieStep = 103;
  3062. }
  3063. break;
  3064. case 103:
  3065. if(dwTickCount >= KAI_QD_XiaQieDelay )
  3066. {
  3067. // AxisEgmStop(X_AXIS);
  3068. KAI_QD_ECQ_JIALIAN_VAVLE=1;
  3069. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_TJL_DELAY;
  3070. KAI_QD_XiaQieStep = 104;
  3071. }
  3072. break;
  3073. case 104:
  3074. if(dwTickCount >= KAI_QD_XiaQieDelay)
  3075. {
  3076. // AxisMovePosAccDec(X_AXIS,KAI_QDPARAM_BACK_LOW_SPEED,-KAI_QDPARAM_FZ_LENGTH,3000,KAI_QDPARAM_ACC,KAI_QDPARAM_DCC);
  3077. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_ECQYSQD_DELAY;
  3078. KAI_QD_XiaQieStep = 8;
  3079. KAI_QD_TFKDelay = dwTickCount + 200;
  3080. }
  3081. break;
  3082. case 8://上下模同时输出
  3083. if((dwTickCount >= KAI_QD_XiaQieDelay) && !KAI_QD_TL_VAVLE && ((!X_DRV && !Y_DRV) || (!KAI_QD_PARAM_ECQ_MODE && (KAI_QD_PARAM_LIAN_SELECT== 0))))
  3084. {
  3085. if(KAI_QD_TFK_LIMIT_IN)
  3086. {
  3087. if(!KAI_bTiaoShiMode || (KAI_QD_START_IN_UP))
  3088. {
  3089. if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器
  3090. {
  3091. KAI_QD_KAI_XM_VAVLE = 0;
  3092. KAI_QD_BI_XM_VAVLE = 0;
  3093. if(!KAI_QD_CUR_QDSelect)//在一次切位置
  3094. {
  3095. //一次切刀选择
  3096. if(KAI_QD_PARAM_YCQ_DJ_SELECT == 0) //切刀选择开口切
  3097. {
  3098. KAI_QD_KAI_XM_VAVLE = 1;
  3099. }
  3100. else //二次切刀
  3101. {
  3102. KAI_QD_BI_XM_VAVLE = 1;
  3103. }
  3104. }
  3105. else
  3106. {
  3107. //二次切刀选择
  3108. if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切
  3109. {
  3110. KAI_QD_KAI_XM_VAVLE = 1;
  3111. }
  3112. else
  3113. {
  3114. KAI_QD_BI_XM_VAVLE = 1;
  3115. }
  3116. }
  3117. if(KAI_QD_XIA_MU_LIMIT_IN || KAI_QD_KK_XM_LIMIT_IN)
  3118. {
  3119. KAI_QD_SM_VAVLE = 1;
  3120. KAI_QD_XiaQieStep = 9;
  3121. KAI_QD_XiaQieDelay = dwTickCount + VAVLE_ALARM_TIME;
  3122. //开口只有长链才需要反转一点
  3123. if(KAI_QD_PARAM_LIAN_SELECT)
  3124. AxisMovePosAccDec(Y_AXIS,2200,-KAI_QD_PARAM_FZ_LENGTH,2200,2200,5,5,00);
  3125. }
  3126. }
  3127. else
  3128. {
  3129. if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动
  3130. KAI_QD_XM_VAVLE=1;
  3131. KAI_QD_XiaQieDelay = dwTickCount + VAVLE_ALARM_TIME;
  3132. KAI_QD_XiaQieStep = 9;
  3133. //开口只有长链才需要反转一点
  3134. if(KAI_QD_PARAM_LIAN_SELECT)
  3135. AxisMovePosAccDec(Y_AXIS,2200,-KAI_QD_PARAM_FZ_LENGTH,2200,2200,5,5,00);
  3136. }
  3137. }
  3138. }
  3139. else if(dwTickCount >= KAI_QD_TFKDelay)//推方块到位信号异常
  3140. {
  3141. KAI_QD_SetAlarmCode(KAI_QD_TFK_LIMIT_IN_ALARM);
  3142. }
  3143. }
  3144. break;
  3145. case 9://上下模到位,调试模下的话,等按下一步按键 下模不动
  3146. if(KAI_QD_SHANG_MU_LIMIT_IN && (KAI_QD_PARAM_XM_ENABLE || KAI_QD_XIA_MU_LIMIT_IN || KAI_QD_KK_XM_LIMIT_IN))
  3147. {
  3148. if(!KAI_QD_PARAM_CS_MODE) //无超声配置
  3149. {
  3150. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_DELAYBACK_SM;
  3151. KAI_QD_XiaQieStep = 12;
  3152. }
  3153. else
  3154. {
  3155. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_DELAY_CS; //
  3156. KAI_QD_XiaQieStep = 10;
  3157. }
  3158. }
  3159. else if(dwTickCount >= KAI_QD_XiaQieDelay)
  3160. {
  3161. if(!KAI_QD_SHANG_MU_LIMIT_IN)
  3162. KAI_QD_SetAlarmCode(KAI_QD_SM_DAOWEI);
  3163. else
  3164. KAI_QD_SetAlarmCode(KAI_QD_XM_DAOWEI);
  3165. }
  3166. break;
  3167. case 10://延时超声
  3168. if(dwTickCount >= KAI_QD_XiaQieDelay)
  3169. {
  3170. KAI_QD_CS_OUT = 1;
  3171. KAI_QD_ECQ_JIALIAN_VAVLE=0;
  3172. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_CS_TIME; //
  3173. KAI_QD_XiaQieStep = 11;
  3174. }
  3175. break;
  3176. case 11:
  3177. //超声时间
  3178. if(dwTickCount >= KAI_QD_XiaQieDelay)
  3179. {
  3180. KAI_QD_CS_OUT = 0;
  3181. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_CS_COLD_TIME; //
  3182. KAI_QD_XiaQieStep = 12;
  3183. }
  3184. break;
  3185. case 12:
  3186. //固化时间
  3187. if(dwTickCount >= KAI_QD_XiaQieDelay)
  3188. {
  3189. // KAI_QDDL_VAVLE=0;
  3190. KAI_QD_ECQ_JIALIAN_VAVLE = 0;
  3191. KAI_QD_SM_VAVLE = 0;
  3192. if(KAI_QD_PARAM_ECTMACHINE_MODE != 0) //二次切机器
  3193. {
  3194. }
  3195. else
  3196. {
  3197. KAI_QD_XiaQueOver = 1;
  3198. if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动
  3199. KAI_QD_XM_VAVLE=0;
  3200. }
  3201. if(!KAI_bTiaoShiMode || (KAI_QD_START_IN_UP))
  3202. {
  3203. if(KAI_QD_PARAM_ECQ_MODE && KAI_QD_PARAM_ECTMACHINE_MODE)
  3204. {
  3205. KAI_QD_XiaQieStep = 20; //二次切
  3206. if(bRunning)
  3207. KAI_QD_ReBack_Step = 1;
  3208. }
  3209. else
  3210. {
  3211. KAI_QD_XiaQieStep = 13;
  3212. KAI_QD_TFK_VAVLE = 0;
  3213. KAI_QD_YD_VAVLE = 0;
  3214. KAI_QD_XiaQieDelay = dwTickCount + 3;
  3215. }
  3216. }
  3217. //长链模式下长链电机,由压链电机拖带出来
  3218. if(KAI_QD_PARAM_LIAN_SELECT)
  3219. {
  3220. KAI_QD_ReBack_Step = 10;
  3221. }
  3222. }//
  3223. break;
  3224. case 13:
  3225. if((dwTickCount >= KAI_QD_XiaQieDelay))
  3226. {
  3227. if(!KAI_QD_PARAM_LDHTGZ_MODE || !bRunning || KAI_QD_PARAM_ECQ_MODE)
  3228. KAI_QD_GZ_VAVLE = 0;
  3229. // KAI_QDCHUIQI_VAVLE=0;
  3230. KAI_QD_XiaQieStep = 14;
  3231. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_TTFK_TIME;
  3232. }
  3233. break;
  3234. case 14:
  3235. if(dwTickCount >= KAI_QD_XiaQieDelay)
  3236. {
  3237. KAI_QD_TFK_VAVLE = 1;
  3238. KAI_QD_YD_VAVLE = 1;
  3239. }
  3240. if(!KAI_QD_SHANG_MU_LIMIT_IN)
  3241. {
  3242. //启动推链(送链)
  3243. if((KAI_QD_TuiLianStep == 0) && !KAI_QD_TL_VAVLE)
  3244. KAI_QD_TuiLianStep = 1;
  3245. }
  3246. if((!KAI_QD_SHANG_MU_LIMIT_IN && !KAI_QD_XIA_MU_LIMIT_IN && KAI_QD_TFK_VAVLE))
  3247. {
  3248. KAI_QD_XiaQieStep = 0;
  3249. // KAI_QDCHUIQI_VAVLE=0;
  3250. }
  3251. else if(dwTickCount >= (KAI_QD_XiaQieDelay+3000))
  3252. {
  3253. // KAI_QD_SetAlarmCode(KAI_QD_SM_YUANWEI);
  3254. }
  3255. break;
  3256. //二次切动作
  3257. case 20:
  3258. if((!KAI_QD_SHANG_MU_LIMIT_IN) && (!KAI_bTiaoShiMode || (KAI_QD_START_IN_UP)))
  3259. {
  3260. //二次切延时送带
  3261. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_YSECT_DELAY;
  3262. KAI_QD_XiaQieStep = 21;
  3263. KAI_QD_KAI_XM_VAVLE = 0; //开口下刀电磁阀
  3264. KAI_QD_BI_XM_VAVLE = 0; //闭口下刀电磁阀
  3265. //二次切刀选择
  3266. if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切
  3267. {
  3268. KAI_QD_KAI_XM_VAVLE = 1;
  3269. }
  3270. else
  3271. {
  3272. KAI_QD_BI_XM_VAVLE = 1;
  3273. }
  3274. }
  3275. break;
  3276. case 21:
  3277. if(dwTickCount >= KAI_QD_XiaQieDelay)
  3278. {
  3279. KAI_QD_ZMotorStep = 20; //电机移动到二次切位置
  3280. KAI_QD_XiaQieStep = 22;
  3281. KAI_QD_XiaQieDelay = dwTickCount + KAI_QD_PARAM_ECTL_TIME;
  3282. }
  3283. break;
  3284. case 22:
  3285. if(((KAI_QD_ZMotorStep == 0) && (!Z_DRV) && (!KAI_bTiaoShiMode || (KAI_QD_START_IN_UP))))
  3286. {
  3287. KAI_QD_SecondXiaQueStep = 1;
  3288. KAI_QD_XiaQieStep = 23;
  3289. KAI_QD_ErrorDelay = dwTickCount + VAVLE_ALARM_TIME;
  3290. }
  3291. break;
  3292. case 23:
  3293. if(KAI_QD_SecondXiaQueStep == 0)
  3294. {
  3295. KAI_QD_SM_VAVLE = 0;
  3296. if(KAI_QD_PARAM_XM_ENABLE == 0) //配置下模动
  3297. KAI_QD_XM_VAVLE=0;
  3298. KAI_QD_TFK_VAVLE = 0;
  3299. KAI_QD_XiaQieDelay = dwTickCount + 2;
  3300. KAI_QD_XiaQieStep = 13;
  3301. KAI_QD_CuiQiStep = 1;
  3302. }
  3303. break;
  3304. }
  3305. switch(KAI_QD_CuiQiStep)
  3306. {
  3307. case 1:
  3308. if(KAI_QD_XIA_MU_LIMIT_IN && KAI_QD_KK_XM_LIMIT_IN)
  3309. {
  3310. KAI_QD_CHUIQIDelay = dwTickCount + 0;
  3311. KAI_QD_CuiQiStep = 2;
  3312. KAI_QD_KAI_XM_VAVLE = 0; //开口下刀电磁阀
  3313. KAI_QD_BI_XM_VAVLE = 0; //闭口下刀电磁阀
  3314. }
  3315. break;
  3316. case 2:
  3317. if(!KAI_QD_XIA_MU_LIMIT_IN && !KAI_QD_KK_XM_LIMIT_IN)
  3318. {
  3319. KAI_QD_CHUIQIDelay = dwTickCount + 100;
  3320. KAI_QD_CuiQiStep = 3;
  3321. }
  3322. break;
  3323. case 3:
  3324. if(dwTickCount >= KAI_QD_CHUIQIDelay)
  3325. {
  3326. KAI_QD_CuiQiStep = 0;
  3327. KAI_QD_ECQ_CUIQI_VAVLE = 1;
  3328. KAI_QD_CHUIQIDelay= dwTickCount+KAI_QD_PARAM_CHUIQI_TIME;
  3329. }
  3330. break;
  3331. }
  3332. if(KAI_QD_ECQ_CUIQI_VAVLE && (dwTickCount >= KAI_QD_CHUIQIDelay))
  3333. {
  3334. KAI_QD_ECQ_CUIQI_VAVLE= 0;
  3335. }
  3336. }
  3337. //第二刀下切步骤
  3338. void Kai_QueDuan_SecondXiaQue(void)
  3339. {
  3340. #if 1
  3341. if(KAI_QD_PARAM_ECQ_MODE)
  3342. {
  3343. switch(KAI_QD_SecondXiaQueStep)
  3344. {
  3345. case 0:
  3346. break;
  3347. case 1://上下模同时输出
  3348. if((dwTickCount >= KAI_QD_SecondXQDelay) && !KAI_QD_TL_VAVLE && KAI_QD_XIA_MU_LIMIT_IN || KAI_QD_KK_XM_LIMIT_IN)
  3349. {
  3350. KAI_QD_SM_VAVLE = 1;
  3351. KAI_QD_KAI_XM_VAVLE = 0;
  3352. KAI_QD_BI_XM_VAVLE = 0;
  3353. //二次切刀选择
  3354. if(KAI_QD_PARAM_ECQ_DJ_SELECT == 0) //切刀选择开口切
  3355. {
  3356. KAI_QD_KAI_XM_VAVLE = 1;
  3357. }
  3358. else
  3359. {
  3360. KAI_QD_BI_XM_VAVLE = 1;
  3361. }
  3362. KAI_QD_SecondXQDelay = dwTickCount + VAVLE_ALARM_TIME;
  3363. KAI_QD_SecondXiaQueStep = 2;
  3364. }
  3365. else if(dwTickCount >= KAI_QD_ErrorDelay)
  3366. {
  3367. KAI_QD_SetAlarmCode(KAI_QD_GZ_ALARM);
  3368. }
  3369. break;
  3370. case 2://上下模到位,调试模下的话,等按下一步按键 下模不动
  3371. if(KAI_QD_SHANG_MU_LIMIT_IN && (KAI_QD_PARAM_XM_ENABLE|| KAI_QD_XIA_MU_LIMIT_IN || KAI_QD_KK_XM_LIMIT_IN))
  3372. {
  3373. if(!KAI_QD_PARAM_CS_MODE) //无超声配置
  3374. {
  3375. KAI_QD_SecondXQDelay = dwTickCount + KAI_QD_PARAM_DELAYBACK_SM;
  3376. KAI_QD_SecondXiaQueStep = 4;
  3377. }
  3378. else
  3379. {
  3380. KAI_QD_SecondXQDelay = dwTickCount + KAI_QD_PARAM_DELAY_CS; //
  3381. KAI_QD_SecondXiaQueStep = 3;
  3382. }
  3383. }
  3384. else if(dwTickCount >= KAI_QD_SecondXQDelay)
  3385. {
  3386. if(!KAI_QD_SHANG_MU_LIMIT_IN)KAI_QD_SetAlarmCode(KAI_QD_SM_DAOWEI);
  3387. else KAI_QD_SetAlarmCode(KAI_QD_XM_DAOWEI);
  3388. }
  3389. break;
  3390. case 3:
  3391. if(dwTickCount >= KAI_QD_SecondXQDelay)
  3392. {
  3393. KAI_QD_CS_OUT = 1;
  3394. KAI_QD_SecondXQDelay = dwTickCount + KAI_QD_PARAM_CS_TIME; //
  3395. KAI_QD_SecondXiaQueStep = 4;
  3396. }
  3397. break;
  3398. case 4:
  3399. if(dwTickCount >= KAI_QD_SecondXQDelay)
  3400. {
  3401. KAI_QD_CS_OUT = 0;
  3402. KAI_QD_SM_VAVLE = 0;
  3403. KAI_QD_BI_XM_VAVLE = 1; //闭口下刀电磁阀
  3404. if(!KAI_QD_SHANG_MU_LIMIT_IN)
  3405. {
  3406. KAI_QD_SecondXiaQueStep = 0;
  3407. }
  3408. }
  3409. break;
  3410. }
  3411. }
  3412. #endif
  3413. }
  3414. #endif