BRUCE_DaZheJi.c 91 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004
  1. #include "global.h"
  2. #if BRUCE_MACHINE== 1
  3. unsigned long ReSetOrigin(unsigned short axis);//返回原点
  4. void RetSetSyStem(void);//系统上电复位
  5. void StartReady(void);//启动准备
  6. void MovePos(unsigned short axis);//移动距离
  7. void BRUCE_CountData(unsigned short alr);
  8. void BRUCE_DaZheJiAction(void);
  9. void DaZheJi_InitAction(void);
  10. void BRUCE_DaZheJiCheckStart(void);
  11. void BRUCE_DaZheJi_Motor(void);
  12. void BRUCE_DaZheJi_ManualAction(void);
  13. void BRUCE_DaZhe_AutoAction(void);
  14. void BRUCE_DaZheJi_CheckAlarm(void);
  15. unsigned long KK_ReSetOrigin(unsigned short axis);
  16. void KK_MovePos(unsigned short axis);//移动距离
  17. void KK_BRUCE_CountData(unsigned short alr);
  18. void KK_BRUCE_DaZheJi_ManualAction(void);
  19. void KK_BRUCE_DaZhe_AutoAction(void);
  20. void KK_BRUCE_DaZheJiCheckStart(void);
  21. void KK_StartReady(void);
  22. void KK_BRUCE_DaZheJi_CheckAlarm(void);
  23. void KK_FUWEI(void);
  24. void AutoCHUIQI(void);
  25. unsigned long cZipperLength[2];
  26. long dwRealPosX,dwRealPosY;
  27. unsigned long runcount,Chuiqidelay,Kaijidelay;
  28. unsigned short Autochuiqi,Kaijichongzhi=1;
  29. unsigned char XMoto_Flag = 0, YMoto_Flag = 0;
  30. #define SycleRunMode M24
  31. short *len_buf;
  32. short *offset_len;
  33. //故障报警
  34. void DAZHE_SetAlarmCode(unsigned alarm_code)
  35. {
  36. }
  37. //高速输入X31/X17外部色标信号中断
  38. void DAZHE_ExtiActionX31(void)
  39. {
  40. }
  41. void MXC_ExtiActionX20(void)
  42. {
  43. }
  44. //故障报警
  45. void DZ_SetAlarmCode(unsigned alarm_code)
  46. {
  47. SetAlarmCode(DZ_ALARM_ADDR,alarm_code);
  48. }
  49. //复位原点动作
  50. unsigned long ReSetOrigin(unsigned short axis)
  51. {
  52. switch(axis)
  53. {
  54. case X_AXIS: //褶宽电机
  55. switch(XRunResetOStep)
  56. {
  57. case 1:
  58. Y02 = 0; //方向返回
  59. if(!X02)
  60. {
  61. XRunResetOStep = 2;
  62. ReSetXDelay = dwTickCount + 5000;
  63. Y02 = 0;
  64. if(!X_DRV)
  65. {
  66. // X轴 运行速度 启动速度 加速度 减速度
  67. AxisContinueMoveAcc(X_AXIS,XMOTOR_HANDRUN_SPEED,DIR_N,XMOTOR_HANDRUN_SPEED/3,15,15);
  68. }
  69. }
  70. else //已经在原点,先退出
  71. {
  72. XRunResetOStep = 10;
  73. return 0;
  74. }
  75. break;
  76. case 2:
  77. if(X02)
  78. {
  79. AxisEgmStop(X_AXIS);
  80. XRunResetOStep = 0;
  81. return 1;
  82. }
  83. else if(dwTickCount >= ReSetXDelay) //多长时间没回到位警告
  84. {
  85. DZ_SetAlarmCode(ALARM_ZheKuan_YuanWei);
  86. XRunResetOStep=0;
  87. bDZRunning = 0;
  88. AutoRunStep = 0;
  89. return 0;
  90. }
  91. break;
  92. case 10:
  93. XRunResetOStep = 11;
  94. ReSetXDelay = dwTickCount + 5000;
  95. Y02 = 1; //控制方向
  96. // X轴 运行速度 启动速度 加速度 减速度
  97. AxisContinueMoveAcc(X_AXIS,XMOTOR_HANDRUN_SPEED,DIR_P,XMOTOR_HANDRUN_SPEED/3,15,15);
  98. break;
  99. case 11:
  100. if(!X02)
  101. {
  102. XRunResetOStep = 12;
  103. ReSetXDelay = dwTickCount + 50;
  104. }
  105. break;
  106. case 12:
  107. if(dwTickCount >= ReSetXDelay)
  108. {
  109. AxisEgmStop(X_AXIS);
  110. XRunResetOStep = 1;
  111. }
  112. break;
  113. }
  114. break;
  115. case Y_AXIS://褶距电机
  116. switch(YRunResetOStep)
  117. {
  118. case 1:
  119. Y03 = 0; //方向返回
  120. if(!X03)
  121. {
  122. ReSetYDelay = dwTickCount + 5000;
  123. YRunResetOStep = 2;
  124. Y03 = 0;
  125. if(!Y_DRV)
  126. {
  127. // Y轴 运行速度 启动速度 加速度 减速度
  128. AxisContinueMoveAcc(Y_AXIS,YMOTOR_HANDRUN_SPEED,DIR_N,YMOTOR_HANDRUN_SPEED/3,15,15);
  129. }
  130. }
  131. else
  132. {
  133. YRunResetOStep = 0;
  134. return 1;
  135. }
  136. break;
  137. case 2:
  138. if(X03)
  139. {
  140. AxisEgmStop(Y_AXIS);
  141. YRunResetOStep = 0;
  142. return 1;
  143. }
  144. else if(dwTickCount >= ReSetYDelay) //多长时间没回到位警告
  145. {
  146. DZ_SetAlarmCode(ALARM_ZheJu_YuanWei);
  147. YRunResetOStep=0;
  148. bDZRunning = 0;
  149. AutoRunStep = 0;
  150. return 0;
  151. }
  152. break;
  153. }
  154. break;
  155. }
  156. }
  157. //移动距离
  158. void MovePos(unsigned short axis)
  159. {
  160. switch(axis)
  161. {
  162. case X_AXIS: //褶宽电机
  163. if(!X_DRV)
  164. XRunMovePosStep = 0;
  165. break;
  166. case Y_AXIS: //褶距电机
  167. if(!Y_DRV)
  168. YRunMovePosStep = 0;
  169. break;
  170. }
  171. }
  172. //褶宽电机动作
  173. //基准褶宽位置D57 基准实际褶宽D59 大概褶宽D13
  174. void ZheKuan_MotorActoin(long Pos)
  175. { unsigned long ch,k;
  176. switch(ZheKuan_MotorRunStep)
  177. {
  178. case 1: //算出褶宽绝对位置
  179. ZheKuan_MotorRunStep = 2;
  180. if(user_datas[13] > user_datas[59])
  181. {
  182. ch =user_datas[57] + user_datas[13]- user_datas[59];
  183. k = ch;
  184. }
  185. else
  186. ch =user_datas[57] -(user_datas[59]- user_datas[13]);
  187. if(dwRealPosX < ch)
  188. {
  189. Y02 = 1; //控制方向
  190. axis_cw(axis_x);
  191. }
  192. else
  193. {
  194. Y02 = 0;
  195. axis_ccw(axis_x);
  196. }
  197. AxisMovePoint(X_AXIS,XMOTOR_HANDRUN_SPEED,ch);
  198. break;
  199. case 2:
  200. if(!X_DRV)
  201. ZheKuan_MotorRunStep = 0;
  202. break;
  203. }
  204. }
  205. //自动吹气
  206. void AutoCHUIQI(void)
  207. {
  208. if(M37 && !M38)
  209. {
  210. switch(Autochuiqi)
  211. {
  212. case 1:
  213. if(Y15)
  214. {
  215. Autochuiqi=2;
  216. Chuiqidelay=dwTickCount+user_datas[128]; //吹气延时
  217. }
  218. break;
  219. case 2:
  220. if(dwTickCount >= Chuiqidelay)
  221. {
  222. Y06=1;
  223. Chuiqidelay=dwTickCount+user_datas[179]; //吹气时间
  224. Autochuiqi=3;
  225. }
  226. break;
  227. case 3:
  228. if(dwTickCount >= Chuiqidelay)
  229. {
  230. Y06=0;
  231. }
  232. break;
  233. }
  234. }
  235. }
  236. //开机原点重置
  237. void KK_FUWEI(void)
  238. {
  239. switch(Kaijichongzhi)
  240. {
  241. case 1:
  242. if(X02)
  243. {
  244. Y02=1;
  245. axis_ccw(axis_x);
  246. AxisMovePoint(X_AXIS,MOTOR_ORIGIN_LOW_SPEED,50);
  247. Kaijidelay=dwTickCount+1000;
  248. Kaijichongzhi=3;
  249. }
  250. Kaijichongzhi=3;
  251. case 2:
  252. if(X03)
  253. {
  254. Y03=1;
  255. axis_ccw(axis_y);
  256. AxisMovePoint(Y_AXIS,MOTOR_ORIGIN_LOW_SPEED,50);
  257. Kaijidelay=dwTickCount+1000;
  258. Kaijichongzhi=3;
  259. }
  260. break;
  261. case 3:
  262. if(dwTickCount >= Kaijidelay)
  263. {
  264. XRunResetOStep = 1;
  265. XRunResetOStep = 1;
  266. }
  267. break;
  268. }
  269. }
  270. //基准参数动作
  271. /*
  272. D0 窗户宽度
  273. D1 窗户宽度
  274. D2 布料宽度
  275. D3 布料宽度
  276. D4 褶子个数
  277. D5 补偿量
  278. D6 打褶方式
  279. D7 窗帘款式(0 单开,1 双开)
  280. D8 预加宽度
  281. D9 帘边宽度
  282. D10 预计单片成品宽度
  283. D11 预计单片成品宽度
  284. D12 褶距
  285. D13 大概褶宽
  286. D14 褶子用料
  287. D15 起头尺寸
  288. D43 褶宽与褶深的距离差
  289. D44 褶距计算基准数值
  290. D55
  291. D56 花样打褶选择
  292. */
  293. void BRUCE_CountData(unsigned short alr) //是否警告输出
  294. {
  295. unsigned long ch,k;
  296. short kk;
  297. //花样打褶选择
  298. if(user_datas[56] == 0) //常规打褶
  299. {
  300. ch = (user_datas[0] | (user_datas[1] << 16)); //窗户宽度
  301. //单开双开选择
  302. if(user_datas[7] == 1)//双开
  303. {
  304. ch /=2;
  305. }
  306. ch += user_datas[8]; //预加宽度
  307. user_datas[10] = ch&0xffff;
  308. user_datas[11] = (ch>>16)&0xffff;
  309. //计算褶数
  310. if(user_datas[55] == 1) //自动算褶数
  311. {//预加宽度除以褶距计算基准数值
  312. user_datas[4] = ch/user_datas[44];
  313. user_datas[4] += 1;
  314. }
  315. //计算褶距
  316. k = ch*10/(user_datas[4] - 1);
  317. user_datas[12] = k;
  318. if(alr)
  319. {
  320. if(user_datas[12]<user_datas[48]*10)
  321. {
  322. DZ_SetAlarmCode(ALARM_ZheJu_Size_Limit);
  323. }
  324. if(user_datas[12]>user_datas[47]*10)
  325. {
  326. DZ_SetAlarmCode(ALARM_ZheJu_Size_Biger);
  327. }
  328. }
  329. //计算褶子用料
  330. k = (user_datas[2] | (user_datas[3] << 16)); //布料宽度
  331. //(布料宽度-2*帘边宽度-成品宽度)除以褶数,一位小数点
  332. if(k > (2*user_datas[9] + ch)) //布料不能小于窗户
  333. {
  334. user_datas[14] = ((k - 2*user_datas[9] -ch) * 10)/user_datas[4];
  335. // user_datas[14] = k;
  336. //计算褶子大概宽度
  337. if(user_datas[6]==0)
  338. {
  339. k = ((user_datas[14]+(user_datas[6] * 20 *user_datas[43]))/(user_datas[6]+1) - (user_datas[5]-1) * 15)/2 + 3;
  340. }
  341. else if(user_datas[6]==1)
  342. {
  343. k = ((user_datas[14]+(user_datas[6] * 20 *user_datas[43]))/(user_datas[6]+1) - (user_datas[5]-1) * 15)/2 + 13;
  344. }
  345. else if(user_datas[6]==2)
  346. {
  347. k = ((user_datas[14]+(user_datas[6] * 20 *user_datas[43]))/(user_datas[6]+1) - (user_datas[5]-1) * 15)/2 + 41;
  348. }
  349. user_datas[13] = k;
  350. //褶宽大小超出范围,最宽最小
  351. if(alr)
  352. {
  353. if(user_datas[13]<user_datas[46]*10)
  354. {
  355. DZ_SetAlarmCode(ALARM_ZheKuan_Size_Limit);
  356. }
  357. if(user_datas[13]>user_datas[45]*10)
  358. {
  359. DZ_SetAlarmCode(ALARM_ZheKuan_Size_Biger);
  360. }
  361. }
  362. //褶宽电机位置动作
  363. kk = user_datas[13]- user_datas[59];
  364. user_datas[72] = user_datas[57] + kk;
  365. //电机位置超出最长位置警告
  366. if(alr)
  367. {
  368. if(user_datas[72] > user_datas[67])
  369. DZ_SetAlarmCode(ALARM_ZheKuan_LimitWei);
  370. }
  371. //算褶距电机位置
  372. if(user_datas[12] > user_datas[63])
  373. {
  374. ch = user_datas[12]- user_datas[63]; //实际比基准宽
  375. k = user_datas[61] - ch;
  376. }
  377. else
  378. {
  379. ch = user_datas[63]- user_datas[12];
  380. k = user_datas[61] + ch;
  381. }
  382. user_datas[73] = k- kk + 15;
  383. //电机位置超出最长位置警告
  384. if(alr)
  385. {
  386. if(user_datas[73] > user_datas[68])
  387. DZ_SetAlarmCode(ALARM_ZheJu_LimitWei);
  388. }
  389. //计算起头尺寸,注意小数点差别 褶子用料-帘边宽度-褶刀厚度/2(6.0MM)
  390. k = ((user_datas[14]+(user_datas[6] * 20 *user_datas[43]))/(user_datas[6]+1) -(10 *user_datas[43])+ (10*user_datas[9])-60)/10;
  391. //k = (user_datas[14]/2 + (10*user_datas[9])-60)/10;
  392. user_datas[15] = k;
  393. }
  394. else if(alr) //警告布料不足
  395. {
  396. //输出警告
  397. DZ_SetAlarmCode(ALARM_Size_Limit);
  398. }
  399. }
  400. else //花样打褶 褶距和褶宽不用算,直接输入的,
  401. //窗宽和布宽直接无效,要算出褶子用料
  402. {
  403. if(alr)
  404. {
  405. if(user_datas[12]<user_datas[48]*10)
  406. {
  407. DZ_SetAlarmCode(ALARM_ZheJu_Size_Limit);
  408. }
  409. if(user_datas[12]>user_datas[47]*10)
  410. {
  411. DZ_SetAlarmCode(ALARM_ZheJu_Size_Biger);
  412. }
  413. }
  414. //褶宽大小超出范围,最宽最小
  415. if(alr)
  416. {
  417. if(user_datas[13]<user_datas[46]*10)
  418. {
  419. DZ_SetAlarmCode(ALARM_ZheKuan_Size_Limit);
  420. }
  421. if(user_datas[13]>user_datas[45]*10)
  422. {
  423. DZ_SetAlarmCode(ALARM_ZheKuan_Size_Biger);
  424. }
  425. }
  426. //计算褶子用料
  427. k = (user_datas[13] - 13)*2 + (user_datas[5]-1) * 15-10 *user_datas[43];
  428. user_datas[14] = k * 2;
  429. //褶宽电机位置动作
  430. kk = user_datas[13]- user_datas[59];
  431. user_datas[72] = user_datas[57] + kk;
  432. //电机位置超出最长位置警告
  433. if(alr)
  434. {
  435. if(user_datas[72] > user_datas[67])
  436. DZ_SetAlarmCode(ALARM_ZheKuan_LimitWei);
  437. }
  438. //算褶距电机位置
  439. if(user_datas[12] > user_datas[63])
  440. {
  441. ch = user_datas[12]- user_datas[63]; //实际比基准宽
  442. k = user_datas[61] - ch;
  443. }
  444. else
  445. {
  446. ch = user_datas[63]- user_datas[12];
  447. k = user_datas[61] + ch;
  448. }
  449. user_datas[73] = k- kk + 15;
  450. //电机位置超出最长位置警告
  451. if(alr)
  452. {
  453. if(user_datas[73] > user_datas[68])
  454. DZ_SetAlarmCode(ALARM_ZheJu_LimitWei);
  455. }
  456. }
  457. }
  458. void DaZheJi_InitAction(void)
  459. {
  460. float length_buff,pulse_buff;
  461. DZ_SetAlarmCode(0);
  462. length_buff = user_datas[19]*10; //褶宽丝杆镙距
  463. if(user_datas[18])
  464. pulse_buff = user_datas[18];
  465. else
  466. pulse_buff = 10000;
  467. XGearRatio = pulse_buff/length_buff; //电子齿轮比
  468. length_buff = user_datas[64]*10; //褶距丝杆镙距
  469. YGearRatio = pulse_buff/length_buff;
  470. //运行次数
  471. runcount=(user_datas[74] | (user_datas[75] << 16));
  472. //上电回位
  473. XRunResetOStep = 1;//褶宽电机回原点
  474. YRunResetOStep = 1;//褶距电机回原点启动
  475. //基准参数没设定的情况下要配默认值
  476. // if(user_datas[57] <= 500) ||
  477. // ReSetSysTemStep = 1;
  478. if(user_datas[178]==101)
  479. {
  480. bDZStart = 1;
  481. }
  482. else if(user_datas[178]==102)
  483. {
  484. user_datas[44]=150;//杆数计算基准
  485. bDZStart = 1;
  486. }
  487. }
  488. void BRUCE_DaZheJiAction(void)
  489. {
  490. if(user_datas[178]==101)
  491. {
  492. user_datas[121] = bDZRunning;
  493. user_datas[122] = AutoRunStep;
  494. user_datas[123] = XRunResetOStep;
  495. user_datas[124] = YRunResetOStep;
  496. user_datas[125] = XRunMovePosStep;
  497. user_datas[126] = YRunMovePosStep;
  498. user_datas[127] = StartReadyStep;
  499. // user_datas[128] = bDZJiaoZhunState;
  500. BRUCE_CountData(0); //尺寸不用警告
  501. BRUCE_DaZheJiCheckStart(); //启动
  502. ReSetOrigin(X_AXIS); //褶宽电机回原点
  503. ReSetOrigin(Y_AXIS); //褶距电机回原点
  504. MovePos(X_AXIS);//褶宽电机移动距离
  505. MovePos(Y_AXIS);//褶距电机移动距离
  506. StartReady();
  507. if(!M39)//锁机标志
  508. {
  509. BRUCE_DaZheJi_ManualAction();
  510. BRUCE_DaZhe_AutoAction();
  511. AutoCHUIQI();
  512. }
  513. BRUCE_DaZheJi_CheckAlarm();
  514. runcount=(user_datas[74] | (user_datas[75] << 16));
  515. }
  516. else if(user_datas[178]==102) // 电机移位
  517. {
  518. user_datas[121] = bDZRunning;
  519. user_datas[122] = AutoRunStep;
  520. user_datas[123] = XRunResetOStep;
  521. user_datas[124] = YRunResetOStep;
  522. user_datas[125] = XRunMovePosStep;
  523. user_datas[126] = YRunMovePosStep;
  524. user_datas[127] = StartReadyStep;
  525. // user_datas[128] = bDZJiaoZhunState;
  526. KK_BRUCE_CountData(0); //尺寸不用警告
  527. KK_BRUCE_DaZheJiCheckStart (); //启动
  528. KK_ReSetOrigin(X_AXIS); //褶宽电机回原点
  529. KK_ReSetOrigin(Y_AXIS); //褶距电机回原点
  530. KK_MovePos(X_AXIS);//褶宽电机移动距离
  531. KK_MovePos(Y_AXIS);//褶距电机移动距离
  532. KK_StartReady();
  533. KK_FUWEI();
  534. if(!M39)//锁机标志
  535. {
  536. KK_BRUCE_DaZheJi_ManualAction();
  537. KK_BRUCE_DaZhe_AutoAction();
  538. AutoCHUIQI();
  539. }
  540. KK_BRUCE_DaZheJi_CheckAlarm();
  541. runcount=(user_datas[74] | (user_datas[75] << 16));
  542. }
  543. }
  544. void BRUCE_DaZheJi_ManualAction(void)
  545. {
  546. unsigned long ch,k;
  547. long i;
  548. static unsigned char save_flg = 0,XMoto_Flag = 0, YMoto_Flag = 0,
  549. XMotoRun_Flag = 0, YMotoRun_Flag = 0;
  550. if(X02)SetPos(X_AXIS, 0);//回到原位
  551. if(X03)SetPos(Y_AXIS, 0);//回到原位
  552. dwRealPosX = GetPos(X_AXIS);
  553. user_datas[50] = dwRealPosX & 0xffff;
  554. user_datas[51] = (dwRealPosX >> 16) & 0xffff;
  555. dwRealPosY = GetPos(Y_AXIS);
  556. user_datas[52] = dwRealPosY & 0xffff;
  557. user_datas[53] = (dwRealPosY >> 16) & 0xffff;
  558. M40 = bDZRunning;
  559. if(X15_UP)
  560. bDZStart = 0;
  561. //压脚也可由缝纫机控制
  562. Y11 = Y13;
  563. if((!bDZRunning)) ////手动
  564. {
  565. if(!X15)
  566. {
  567. //压脚压住和其它信号都回原位才能回到加工位
  568. if((X00_UP||M20||M23) && !X17 && !Y07 && X06 && !Y04 && !Y05 && !X_DRV
  569. // 移动限位 定位针原位
  570. && !X13 && X12 && X14)
  571. {
  572. BRUCE_CountData(1); //尺寸警告
  573. if(GetAlarmCode(DZ_ALARM_ADDR)==0)
  574. {
  575. StartReadyStep = 1; //回到加工位
  576. M20 = 0;
  577. M21 = 1;
  578. M23 = 0;
  579. }
  580. }
  581. }
  582. else if(!bDZStart) //退出加工状态下
  583. {
  584. //压脚压住和其它信号都回原位才能回到加工位
  585. if(X00_UP || M20 || M23) //M20是准备按钮,M23循环工作的测试按钮
  586. {
  587. // if(M20)
  588. // M21 = !M21;
  589. BRUCE_CountData(1); //尺寸警告
  590. //要另一条件褶距电机也要到位
  591. if((((dwRealPosX == user_datas[72]) && (dwRealPosY == user_datas[73])) || bDZJiaoZhunState)
  592. && Y07 &&Y13 &&
  593. X17 && X06 && X13 && !X12 && X14 && !X_DRV && !Y_DRV )
  594. {
  595. if(GetAlarmCode(DZ_ALARM_ADDR)==0) //如果有警告不能启动
  596. {
  597. M21 = 1;
  598. if(!M20)
  599. {
  600. AutoRunStep = 1;
  601. bDZRunning = 1;
  602. }
  603. if(M23)
  604. {
  605. SycleRunMode=1;
  606. M23=0;
  607. }
  608. }
  609. }
  610. else if(StartReadyStep == 0)
  611. {
  612. BRUCE_CountData(1); //尺寸警告
  613. if(GetAlarmCode(DZ_ALARM_ADDR)==0) //如果有警告不能启动
  614. {
  615. StartReadyStep = 20;
  616. // if(!M20)
  617. M21 = 1;
  618. }
  619. }
  620. // M20 = 1;
  621. }
  622. if(!(X00_UP || M20 || M23) && (StartReadyStep == 0) && !X_DRV && !Y_DRV && M21)
  623. {
  624. if(dwTickCount>AutoResetDelay+(user_datas[36]*60000))
  625. {
  626. StartReadyStep = 40;
  627. //M21 = 0;
  628. }
  629. }
  630. else
  631. {
  632. AutoResetDelay= dwTickCount;
  633. }
  634. if(M27 && (StartReadyStep == 0) && !X_DRV && !Y_DRV && M21)
  635. {
  636. M27=0;
  637. StartReadyStep = 40;
  638. }
  639. }
  640. if(M20)
  641. {
  642. M20 = 0;
  643. }
  644. //停机复位
  645. if(M22)
  646. {
  647. M22=0;
  648. StartReadyStep=30;
  649. }
  650. //手动吹气
  651. if(M38 && M37==0)
  652. {
  653. Y06=!Y06;
  654. M38=0;
  655. }
  656. //1#褶皱电磁阀
  657. if(M00)
  658. {
  659. M00 = 0;
  660. if(Y13 && X17)
  661. {
  662. Y04 = !Y04;
  663. }
  664. else
  665. {
  666. DZ_SetAlarmCode(ALARM_ZheZhou_Out_Limit); //压脚要抬起
  667. }
  668. }
  669. //2#褶皱电磁阀
  670. if(M01)
  671. {
  672. M01 = 0;
  673. if(Y13 && X17)
  674. {
  675. Y05 = !Y05;
  676. }
  677. else
  678. {
  679. DZ_SetAlarmCode(ALARM_ZheZhou_Out_Limit); //压脚要抬起
  680. }
  681. }
  682. //移动气缸
  683. if(M02)
  684. {
  685. M02 = 0;
  686. if(X15 && Y13 && X17)
  687. {
  688. // Y06 = !Y06;
  689. Y07 = !Y07;
  690. if(!Y07 && !Y05)
  691. {
  692. if(user_datas[72] > (user_datas[13] + 80))
  693. {
  694. ch = user_datas[72]- user_datas[13] - 80;
  695. if(dwRealPosX > ch)
  696. {
  697. Y02 = 0;
  698. XRunResetOStep = 1;
  699. }
  700. }
  701. }
  702. }
  703. else
  704. {
  705. DZ_SetAlarmCode(ALARM_YuWei_Out_Limit); //压脚要抬起
  706. }
  707. }
  708. //定位针
  709. if(M03)
  710. {
  711. M03 = 0;
  712. if(Y10)
  713. Y10 = 0;
  714. else if((Y07 && !Y04 && !Y05) || !Y07)
  715. {
  716. Y10 = 1;
  717. }
  718. else
  719. {
  720. DZ_SetAlarmCode(ALARM_DinWei_Out_Limit); //定位针
  721. }
  722. }
  723. //压脚气缸
  724. if(M04)
  725. {
  726. M04 = 0;
  727. if(!Y04 && !Y05 && !Y07 &&
  728. (dwRealPosX <= (user_datas[72] - user_datas[13] -80)) ) //要加上褶宽电机位置限制
  729. {
  730. Y13 = !Y13;
  731. }
  732. else //压脚输出条件
  733. {
  734. DZ_SetAlarmCode(ALARM_YaJiao_Out_Limit); //定位针
  735. }
  736. }
  737. //褶宽电机
  738. if((XRunResetOStep == 0) && (XRunMovePosStep == 0) && (StartReadyStep == 0))
  739. {
  740. if(M05)
  741. {
  742. Y02 = 1; //控制方向
  743. if(dwRealPosX >= user_datas[67])
  744. {
  745. M05 = 0;
  746. AxisEgmStop(X_AXIS);
  747. XMoto_Flag = 0;
  748. }
  749. else if(XMoto_Flag == 0)
  750. {
  751. XMoto_Flag = 1;
  752. // X轴 运行速度 启动速度 加速度 减速度
  753. AxisContinueMoveAcc(X_AXIS,XMOTOR_HANDRUN_SPEED,DIR_P,XMOTOR_HANDRUN_SPEED/3,15,15);
  754. }
  755. }
  756. else if(M06)
  757. {
  758. Y02 = 0; //控制方向
  759. if(X02) //回到原点要停止
  760. {
  761. M06 = 0;
  762. AxisEgmStop(X_AXIS);
  763. XMoto_Flag = 0;
  764. }
  765. else if(XMoto_Flag == 0)
  766. {
  767. XMoto_Flag = 1;
  768. // X轴 运行速度 启动速度 加速度 减速度
  769. AxisContinueMoveAcc(X_AXIS,XMOTOR_HANDRUN_SPEED,DIR_N,XMOTOR_HANDRUN_SPEED/3,15,15);
  770. }
  771. }
  772. else
  773. {
  774. AxisDecStop(X_AXIS);
  775. XMoto_Flag = 0;
  776. }
  777. }
  778. //褶距电机
  779. if((YRunResetOStep == 0) && (YRunMovePosStep == 0) && (StartReadyStep == 0))
  780. {
  781. if(M07)
  782. {
  783. Y03 = 1; //控制方向
  784. if(dwRealPosY >= user_datas[68])
  785. {
  786. M07 = 0;
  787. AxisEgmStop(Y_AXIS);
  788. YMoto_Flag = 0;
  789. }
  790. else if(YMoto_Flag == 0)
  791. {
  792. YMoto_Flag = 1;
  793. // Y轴 运行速度 启动速度 加速度 减速度
  794. AxisContinueMoveAcc(Y_AXIS,YMOTOR_HANDRUN_SPEED,DIR_P,YMOTOR_HANDRUN_SPEED/3,15,15);
  795. }
  796. }
  797. else if(M08)
  798. {
  799. Y03 = 0; //控制方向
  800. if(X03)
  801. {
  802. M08 = 0;
  803. AxisEgmStop(Y_AXIS);
  804. }
  805. else if(YMoto_Flag == 0)
  806. {
  807. YMoto_Flag = 1;
  808. // Y轴 运行速度 启动速度 加速度 减速度
  809. AxisContinueMoveAcc(Y_AXIS,YMOTOR_HANDRUN_SPEED,DIR_N,YMOTOR_HANDRUN_SPEED/3,15,15);
  810. }
  811. }
  812. else
  813. {
  814. AxisDecStop(Y_AXIS);
  815. YMoto_Flag = 0;
  816. }
  817. }
  818. if(M14)
  819. {
  820. M14 = 0;
  821. XRunResetOStep = 1; //两个轴回原点
  822. }
  823. if(M15)
  824. {
  825. M15 = 0;
  826. YRunResetOStep = 1;//两个轴回原点
  827. }
  828. //M16 M17为测试位置用
  829. if(M16)
  830. {
  831. M16 = 0;
  832. if(dwRealPosX < user_datas[70])
  833. {
  834. Y02 = 1; //控制方向
  835. axis_cw(axis_x);
  836. }
  837. else
  838. {
  839. Y02 = 0;
  840. axis_ccw(axis_x);
  841. }
  842. XRunMovePosStep = 1;
  843. AxisMovePoint(X_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[70]);
  844. // AxisMovePosAccDec(X_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[70],XMOTOR_HANDRUN_SPEED/5,80,80 );
  845. }
  846. if(M17)
  847. {
  848. M17 = 0;
  849. if(dwRealPosY < user_datas[71])
  850. {
  851. Y03 = 1; //控制方向
  852. axis_cw(axis_y);
  853. }
  854. else
  855. {
  856. Y03 = 0;
  857. axis_ccw(axis_y);
  858. }
  859. YRunMovePosStep = 1;
  860. AxisMovePoint(Y_AXIS,YMOTOR_HANDRUN_SPEED,user_datas[71]);
  861. // AxisMovePosAccDec(Y_AXIS,YMOTOR_HANDRUN_SPEED,user_datas[71],YMOTOR_HANDRUN_SPEED/5,80,80);
  862. }
  863. if(M09)
  864. {
  865. M09 = 0;
  866. //压脚回到原位并已抬起
  867. if(!Y04 && !Y05 && !Y10
  868. && X17 && Y13&& X14 && X15)
  869. {
  870. // Y06 = 1;
  871. Y07 = 1;
  872. bDZJiaoZhunState = 1;
  873. // bDZRunning = 1;
  874. // AutoRunStep = 2;
  875. //褶宽电机
  876. XRunMovePosStep = 1;
  877. if(dwRealPosX < user_datas[57])
  878. {
  879. Y02 = 1; //控制方向
  880. axis_cw(axis_x);
  881. }
  882. else
  883. {
  884. Y02 = 0;
  885. axis_ccw(axis_x);
  886. }
  887. AxisMovePoint(X_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[57]);
  888. //褶距电机
  889. YRunMovePosStep = 1;
  890. if(dwRealPosY < user_datas[61])
  891. {
  892. Y03 = 1; //控制方向
  893. axis_cw(axis_y);
  894. }
  895. else
  896. {
  897. Y03 = 0;
  898. axis_ccw(axis_y);
  899. }
  900. AxisMovePoint(Y_AXIS,YMOTOR_HANDRUN_SPEED,user_datas[61]);
  901. }
  902. else
  903. {
  904. DZ_SetAlarmCode(ALARM_Start_Limit);//起动条件
  905. }
  906. }
  907. if(M11)
  908. {
  909. M10 = 0;
  910. bDZJiaoZhunState = 0;
  911. bDZRunning = 0;
  912. StartReadyStep = 4; //变为正常加工位
  913. }
  914. }
  915. //停止循环运行模式
  916. if(SycleRunMode)
  917. {
  918. if(M23)
  919. {
  920. SycleRunMode=0;
  921. M23=0;
  922. }
  923. }
  924. }
  925. void BRUCE_DaZhe_AutoAction(void)
  926. {
  927. unsigned short ch;
  928. if(bDZRunning && (GetAlarmCode(DZ_ALARM_ADDR)==0))
  929. {
  930. switch(AutoRunStep)
  931. {
  932. case 1://褶宽电机,褶距电机定位
  933. if(user_datas[6]==0)
  934. {
  935. AutoRunStep = 50;
  936. }
  937. else
  938. {
  939. AutoRunStep = 2;
  940. }
  941. break;
  942. case 2: //两个电机已经定位结束,等待脚踏
  943. if((!X_DRV) && (!Y_DRV))
  944. {
  945. Y05 = 1;
  946. AutoRunStep = 3;
  947. AutoRunDelay = dwTickCount + 1500; //褶皱输出到位时间警告
  948. }
  949. break;
  950. case 3:
  951. if(!X06 && X07)
  952. {
  953. AutoRunDelay = dwTickCount + user_datas[38]; //送料延时
  954. AutoRunStep = 4;
  955. }
  956. else if(dwTickCount >= AutoRunDelay)
  957. {
  958. DZ_SetAlarmCode(ALARM_ZheZhou_DaoWei); //褶皱输出不到位
  959. Y05 = 0;
  960. bDZRunning = 0;
  961. AutoRunStep = 0;
  962. }
  963. break;
  964. case 50:
  965. if(!X06 && X07)
  966. {
  967. AutoRunDelay = dwTickCount + user_datas[38]; //送料延时
  968. AutoRunStep = 4;
  969. }
  970. case 4:
  971. if(dwTickCount >= AutoRunDelay)
  972. {
  973. // if(M25)//为测试断点用
  974. // {
  975. M25 = 0;
  976. // Y06 = 0;
  977. Y07 = 0;
  978. AutoRunStep = 5;
  979. AutoRunDelay = dwTickCount + 1500; //移位回到位时间警告
  980. // }
  981. }
  982. break;
  983. case 5:
  984. //移位回到原点
  985. if(!X13 && X12)
  986. {
  987. // if(M25)//为测试断点用
  988. // {
  989. M25 = 0;
  990. AutoRunStep = 6;
  991. AutoRunDelay = dwTickCount + user_datas[39]; //定位针延时下降
  992. // }
  993. }
  994. else if(dwTickCount >= AutoRunDelay)
  995. {
  996. DZ_SetAlarmCode(ALARM_ZheZhou_DaoWei); //褶皱输出不到位
  997. bDZRunning = 0;
  998. AutoRunStep = 0;
  999. XRunResetOStep = 1; //褶宽回原点
  1000. }
  1001. break;
  1002. case 6:
  1003. if(dwTickCount >= AutoRunDelay)
  1004. {
  1005. // // if(M25)//为测试断点用
  1006. // // {
  1007. M25 = 0;
  1008. Y10 = 1;
  1009. AutoRunStep = 7;
  1010. AutoRunDelay = dwTickCount + 1500; //定位针离开原点时间警告
  1011. // // }
  1012. }
  1013. break;
  1014. case 7:
  1015. if(!X14)//定位针离开
  1016. {
  1017. AutoRunDelay = dwTickCount + user_datas[66];
  1018. AutoRunStep = 8;
  1019. }
  1020. else if(dwTickCount >= AutoRunDelay) //定位针没法离开
  1021. {
  1022. DZ_SetAlarmCode(ALARM_FenZhen_YuanWei); //定位针没法离开
  1023. Y10 = 0;
  1024. bDZRunning = 0;
  1025. AutoRunStep = 0;
  1026. }
  1027. break;
  1028. case 8:
  1029. if(dwTickCount >= AutoRunDelay)
  1030. {
  1031. Y05 = 0; // 褶皱气缸退
  1032. AutoRunStep = 9;
  1033. Y02 = 0; //控制方向
  1034. axis_ccw(axis_x);
  1035. // XRunMovePosStep = 1;
  1036. //电机离开
  1037. //两段速度移动距离,先快速回来只剩80MM时变为慢速
  1038. if(dwRealPosX > 120)
  1039. AxisMoveTwoPos(X_AXIS,XMOTOR_AUTORUN_SPEED,(dwRealPosX - 120),XMOTOR_HANDRUN_SPEED,150,DIR_N);
  1040. XRunResetOStep = 1; //褶宽回原点
  1041. AutoRunDelay = dwTickCount + 1500;
  1042. }
  1043. break;
  1044. case 9:
  1045. if(X06 && !X07) //褶皱气缸回到位
  1046. {
  1047. if(1)
  1048. {
  1049. M25 = 0;
  1050. if(dwRealPosX <= (user_datas[72] - user_datas[13] -80)) //褶宽电机已经离开
  1051. {
  1052. Y13 = 0; //关闭时压下
  1053. AutoRunStep = 10;
  1054. AutoRunDelay = dwTickCount + 700;
  1055. }
  1056. }
  1057. }
  1058. else if(dwTickCount >= AutoRunDelay) //褶皱气缸回原位异常
  1059. {
  1060. DZ_SetAlarmCode(ALARM_ZheZhou_YuanWei);
  1061. bDZRunning = 0;
  1062. AutoRunStep = 0;
  1063. }
  1064. break;
  1065. case 10:
  1066. if(!X17) //压脚到位
  1067. {
  1068. AutoRunStep = 11;
  1069. AutoRunDelay = dwTickCount + user_datas[40]; //定位针延时上升
  1070. }
  1071. else if(dwTickCount >= AutoRunDelay) //压脚到位异常
  1072. {
  1073. DZ_SetAlarmCode(ALARM_YaJiao_YuanWei);
  1074. bDZRunning = 0;
  1075. AutoRunStep = 0;
  1076. }
  1077. break;
  1078. case 11:
  1079. if(dwTickCount >= AutoRunDelay) //延时退定位针
  1080. {
  1081. AutoRunStep = 12;
  1082. Y10 = 0;
  1083. AutoRunDelay = dwTickCount + 700;
  1084. }
  1085. break;
  1086. case 12:
  1087. if(X14) //定位针原位
  1088. {
  1089. AutoRunStep = 13;
  1090. AutoRunDelay = dwTickCount + user_datas[41]; //延时启动加工
  1091. }
  1092. else if(dwTickCount >= AutoRunDelay) //定位针回原位异常
  1093. {
  1094. DZ_SetAlarmCode(ALARM_FenZhen_Left); //定位针没法离开
  1095. Y10 = 0;
  1096. bDZRunning = 0;
  1097. AutoRunStep = 0;
  1098. }
  1099. break;
  1100. case 13:
  1101. if(dwTickCount >= AutoRunDelay)
  1102. {
  1103. // if(M25)
  1104. // {
  1105. M25 = 0;
  1106. AutoRunStep = 14;
  1107. Y15 = 1;
  1108. Autochuiqi=1;
  1109. AutoRunDelay = dwTickCount + 40; //延时启动加工
  1110. // }
  1111. }
  1112. break;
  1113. case 14:
  1114. if(dwTickCount >= AutoRunDelay)
  1115. {
  1116. AutoRunStep = 15;
  1117. Y15 = 0;
  1118. }
  1119. break;
  1120. case 15:
  1121. if(X15_UP) //加工结束后
  1122. {
  1123. AutoRunStep = 16;
  1124. AutoRunDelay = dwTickCount + 60;
  1125. }
  1126. break;
  1127. case 16:
  1128. if(dwTickCount >= AutoRunDelay)
  1129. {
  1130. AutoRunStep = 17;
  1131. Y13 = 1; //
  1132. AutoRunDelay = dwTickCount + 700;
  1133. }
  1134. break;
  1135. case 17:
  1136. if(X17) //压脚上升到位
  1137. {
  1138. if(XRunResetOStep== 0)
  1139. {
  1140. // Y06 = 1; //移位退出
  1141. Y07 = 1;
  1142. AutoRunStep = 18;
  1143. //电机回到褶宽处
  1144. StartReadyStep = 4;
  1145. AutoRunDelay = dwTickCount + 1500;
  1146. }
  1147. }
  1148. else if(dwTickCount >= AutoRunDelay) //压脚原位异常
  1149. {
  1150. DZ_SetAlarmCode(ALARM_YaJiao_YuanWei); //压脚原位
  1151. bDZRunning = 0;
  1152. AutoRunStep = 0;
  1153. }
  1154. break;
  1155. case 18:
  1156. if(X13 && !X12)
  1157. {
  1158. if(!X_DRV && (StartReadyStep == 0))
  1159. {
  1160. if(SycleRunMode)
  1161. {
  1162. AutoRunStep = 19;
  1163. AutoRunDelay = dwTickCount + 1500;
  1164. }
  1165. else
  1166. {
  1167. bDZRunning = 0;
  1168. AutoRunStep = 0;
  1169. }
  1170. runcount++;
  1171. user_datas[74] = runcount&0xffff;
  1172. user_datas[75] = (runcount>>16)&0xffff;
  1173. }
  1174. }
  1175. break;
  1176. case 19:
  1177. if(dwTickCount >= AutoRunDelay)
  1178. {
  1179. bDZRunning = 1;
  1180. AutoRunStep = 1;
  1181. }
  1182. break;
  1183. }
  1184. }
  1185. }
  1186. // 检测是否踏了脚踏开关
  1187. void BRUCE_DaZheJiCheckStart(void)
  1188. {
  1189. unsigned short ch;
  1190. //停止
  1191. if(X11_UP || M26)
  1192. {
  1193. M26 = 0;
  1194. AxisEgmStop(X_AXIS);
  1195. AxisEgmStop(Y_AXIS);
  1196. bDZRunning = 0;
  1197. bDZJiaoZhunState = 0;
  1198. AutoRunStep = 0;
  1199. XRunResetOStep = 0;
  1200. XRunMovePosStep = 0;
  1201. YRunResetOStep = 0;
  1202. YRunMovePosStep = 0;
  1203. StartReadyStep = 0;
  1204. }
  1205. }
  1206. //基准
  1207. void DaZheJi_JiZhun(void)
  1208. {
  1209. static long save_buff,gou_zhen_buff,zipper_length_buff;
  1210. static unsigned long zipper_length;
  1211. short *revise_buff;
  1212. }
  1213. // SetAlarmCode(MXC_ALARM_ADDR,0); //警告清零
  1214. //基准参数没设定的情况下要配默认值
  1215. //压脚回到原位并已抬起
  1216. // if(!Y04 && !Y05 && !Y10 && !Y06 && !Y07 && X12
  1217. // && X14 && X15)
  1218. // {
  1219. // Y13 = 1;
  1220. // }
  1221. //系统上电复位
  1222. void RetSetSyStem(void)
  1223. {
  1224. switch(ReSetSysTemStep)
  1225. {
  1226. case 1:
  1227. //上电回位
  1228. XRunResetOStep = 1;//褶宽电机回原点
  1229. YRunResetOStep = 1;//褶距电机回原点启动
  1230. ReSetSysTemStep = 2;
  1231. break;
  1232. case 2:
  1233. if(!X_DRV && !Y_DRV && (AutoRunStep == 0))
  1234. {
  1235. if(X15) //
  1236. {
  1237. ReSetSysTemStep = 2;
  1238. }
  1239. else
  1240. {
  1241. Y04 = 0;
  1242. Y05 = 0;
  1243. // Y06 = 0;
  1244. Y07 = 0;
  1245. Y10 = 0;
  1246. ReSetSysTemStep = 2;
  1247. }
  1248. }
  1249. break;
  1250. case 3:
  1251. break;
  1252. }
  1253. }
  1254. //启动准备
  1255. void StartReady(void)
  1256. {
  1257. unsigned short ch;
  1258. switch(StartReadyStep)
  1259. {
  1260. case 1:
  1261. Y15 = 1;
  1262. cDelayTime4 = dwTickCount + 50;
  1263. StartReadyStep = 2;
  1264. break;
  1265. case 2:
  1266. if((dwTickCount >= cDelayTime4))
  1267. {
  1268. Y15 = 0;
  1269. StartReadyStep = 3;
  1270. }
  1271. break;
  1272. case 3:
  1273. if(X15_UP) //机台回到准备就绪点
  1274. {
  1275. Y13 = 1; //压脚抬起
  1276. StartReadyStep = 4;
  1277. }
  1278. break;
  1279. case 4:
  1280. if(X17)
  1281. {
  1282. StartReadyStep = 5;
  1283. //褶宽电机位置动作
  1284. if(dwRealPosX < user_datas[72])
  1285. {
  1286. Y02 = 1; //控制方向
  1287. AXIS_SET_DIR(axis_x,DIR_P);
  1288. }
  1289. else
  1290. {
  1291. Y02 = 0;
  1292. AXIS_SET_DIR(axis_x,DIR_N);
  1293. }
  1294. if(dwRealPosY < user_datas[73])
  1295. {
  1296. Y03 = 1; //控制方向
  1297. AXIS_SET_DIR(axis_y,DIR_P);
  1298. }
  1299. else
  1300. {
  1301. Y03 = 0;
  1302. AXIS_SET_DIR(axis_y,DIR_N);
  1303. }
  1304. if(bDZJiaoZhunState)
  1305. {
  1306. AxisMovePoint(X_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[57]);
  1307. AxisMovePoint(Y_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[61]);
  1308. }
  1309. else
  1310. {
  1311. if(dwRealPosX != user_datas[72])
  1312. AxisMovePoint(X_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[72]); //褶宽电机回到加工位
  1313. if((dwRealPosY != user_datas[73]) || (dwRealPosY == 0))
  1314. AxisMovePoint(Y_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[73]); //褶距电机回到加工位
  1315. }
  1316. // Y06 = 1;
  1317. Y07 = 1;
  1318. }
  1319. break;
  1320. case 5:
  1321. if(!X_DRV && !Y_DRV)
  1322. {
  1323. StartReadyStep = 0;
  1324. }
  1325. break;
  1326. //系统复位
  1327. // if(!X17 && !Y07 && X06 && !Y04 && !Y05 && !X_DRV
  1328. // 移动限位 定位针原位
  1329. // && !X13 && X12 && X14)
  1330. case 20:
  1331. if(X15)
  1332. {
  1333. Y13 = 1;
  1334. }
  1335. if(X17)
  1336. {
  1337. StartReadyStep = 21;
  1338. Y04 = 0;
  1339. Y05 = 0;
  1340. // Y06 = 1;
  1341. Y07 = 1;
  1342. Y10 = 0;
  1343. }
  1344. break;
  1345. case 21:
  1346. if(X17)
  1347. {
  1348. StartReadyStep = 22;
  1349. //褶宽电机位置动作
  1350. if(dwRealPosX < user_datas[72])
  1351. {
  1352. Y02 = 1; //控制方向
  1353. AXIS_SET_DIR(axis_x,DIR_P);
  1354. }
  1355. else
  1356. {
  1357. Y02 = 0;
  1358. AXIS_SET_DIR(axis_x,DIR_N);
  1359. }
  1360. if(dwRealPosY < user_datas[73])
  1361. {
  1362. Y03 = 1; //控制方向
  1363. AXIS_SET_DIR(axis_y,DIR_P);
  1364. }
  1365. else
  1366. {
  1367. Y03 = 0;
  1368. AXIS_SET_DIR(axis_y,DIR_N);
  1369. }
  1370. if(bDZJiaoZhunState)
  1371. {
  1372. AxisMovePoint(X_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[57]);
  1373. AxisMovePoint(Y_AXIS,YMOTOR_HANDRUN_SPEED,user_datas[61]);
  1374. }
  1375. else
  1376. {
  1377. if(dwRealPosX != user_datas[72])
  1378. {
  1379. AxisMovePoint(X_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[72]); //褶宽电机回到加工位
  1380. }
  1381. // if(!bDZRunning)
  1382. AxisMovePoint(Y_AXIS,YMOTOR_HANDRUN_SPEED,user_datas[73]); //褶距电机回到加工位
  1383. }
  1384. }
  1385. break;
  1386. case 22:
  1387. if(!X_DRV && !Y_DRV)
  1388. {
  1389. StartReadyStep = 0;
  1390. // AutoRunStep = 1;
  1391. // bDZRunning = 1;
  1392. }
  1393. break;
  1394. case 30://关机动作流程
  1395. ShutDownDelay = dwTickCount + 10000;//强制关机时间
  1396. StartReadyStep = 31;
  1397. break;
  1398. case 31://关机动作流程
  1399. if(!X13 && X12)
  1400. {
  1401. StartReadyStep = 32;
  1402. XRunResetOStep = 1;
  1403. ShutDownDelay = dwTickCount + 10000;//强制关机时间
  1404. }
  1405. else
  1406. {
  1407. if(X15 && Y13 && X17)//移动气缸归位条件满足
  1408. {
  1409. // Y06 = 0;
  1410. Y07 = 0;
  1411. if(!Y07 && !Y05)
  1412. {
  1413. if(user_datas[72] > (user_datas[13] + 80))
  1414. {
  1415. ch = user_datas[72]- user_datas[13] - 80;
  1416. if(dwRealPosX > ch)
  1417. {
  1418. Y02 = 0;
  1419. XRunResetOStep = 1;
  1420. }
  1421. }
  1422. }
  1423. StartReadyStep = 32;
  1424. ShutDownDelay = dwTickCount + 10000;//强制关机时间
  1425. }
  1426. else
  1427. {
  1428. DZ_SetAlarmCode(ALARM_YuWei_Out_Limit); //压脚要抬起
  1429. if(dwTickCount >= ShutDownDelay)
  1430. {
  1431. StartReadyStep = 33;//强制关机
  1432. }
  1433. }
  1434. }
  1435. break;
  1436. case 32:
  1437. if(!X13 && X12 && (XRunResetOStep == 0))//移动气缸原点
  1438. {
  1439. M21=0;//停机状态显示
  1440. ShutDownDelay = dwTickCount + 2000;
  1441. StartReadyStep = 33;
  1442. }
  1443. else if(dwTickCount >= ShutDownDelay)
  1444. {
  1445. StartReadyStep = 33;//强制关机
  1446. }
  1447. break;
  1448. case 33:
  1449. if(dwTickCount >= ShutDownDelay)
  1450. {
  1451. Y12=1;//断电
  1452. StartReadyStep=0;
  1453. }
  1454. break;
  1455. case 40://离机复位
  1456. if(!X13 && X12)
  1457. {
  1458. StartReadyStep = 41;
  1459. XRunResetOStep = 1;
  1460. }
  1461. else
  1462. {
  1463. if(X15 && Y13 && X17)//移动气缸归位条件满足
  1464. {
  1465. // Y06 = 0;
  1466. Y07 = 0;
  1467. if(!Y07 && !Y05)
  1468. {
  1469. if(user_datas[72] > (user_datas[13] + 80))
  1470. {
  1471. ch = user_datas[72]- user_datas[13] - 80;
  1472. if(dwRealPosX > ch)
  1473. {
  1474. Y02 = 0;
  1475. XRunResetOStep = 1;
  1476. }
  1477. }
  1478. }
  1479. StartReadyStep = 41;
  1480. }
  1481. else
  1482. {
  1483. DZ_SetAlarmCode(ALARM_YuWei_Out_Limit); //压脚要抬起
  1484. }
  1485. }
  1486. break;
  1487. case 41:
  1488. if(!X13 && X12 && (XRunResetOStep == 0))//移动气缸原点
  1489. {
  1490. Y13=0;//压脚压下
  1491. StartReadyStep = 42;
  1492. }
  1493. break;
  1494. case 42:
  1495. if(!X17)//压脚压下到位
  1496. {
  1497. M21=0;//停机状态显示
  1498. StartReadyStep = 0;
  1499. }
  1500. break;
  1501. }
  1502. }
  1503. //故障报警
  1504. void BRUCE_DaZheJi_CheckAlarm(void)
  1505. {
  1506. static unsigned long alarmdelay1,alarmdelay2,alarmdelay3,alarmdelay4,alarmdelay5,alarmdelay6;
  1507. //褶皱传感器原点故障
  1508. if((Y05 && X06)||(!Y05 && !X06))
  1509. {
  1510. if(dwTickCount > alarmdelay1 + 2000)
  1511. {
  1512. DZ_SetAlarmCode(ALARM_ZheZhou_CGQ_YuanDian);
  1513. }
  1514. }
  1515. else
  1516. {
  1517. alarmdelay1=dwTickCount;
  1518. }
  1519. //褶皱传感器到位故障
  1520. if((Y05 && !X07)||(!Y05 && X07))
  1521. {
  1522. if(dwTickCount > alarmdelay2 + 2000)
  1523. {
  1524. DZ_SetAlarmCode(ALARM_ZheZhou_CGQ_Daowei);
  1525. }
  1526. }
  1527. else
  1528. {
  1529. alarmdelay2=dwTickCount;
  1530. }
  1531. //移位传感器原点故障
  1532. if((Y07 && X12)||(!Y07 && !X12))
  1533. {
  1534. if(dwTickCount > alarmdelay3 + 2000)
  1535. {
  1536. DZ_SetAlarmCode(ALARM_YiWei_CGQ_YuanDian);
  1537. }
  1538. }
  1539. else
  1540. {
  1541. alarmdelay3=dwTickCount;
  1542. }
  1543. //移位传感器到位故障
  1544. if((Y07 && !X13)||(!Y07 && X13))
  1545. {
  1546. if(dwTickCount > alarmdelay4 + 2000)
  1547. {
  1548. DZ_SetAlarmCode(ALARM_YiWei_CGQ_Daowei);
  1549. }
  1550. }
  1551. else
  1552. {
  1553. alarmdelay4=dwTickCount;
  1554. }
  1555. //定位针传感器故障
  1556. if((Y10 && X14)||(!Y10 && !X14))
  1557. {
  1558. if(dwTickCount > alarmdelay5 + 2000)
  1559. {
  1560. DZ_SetAlarmCode(ALARM_DingWeiZhen_CGQ);
  1561. }
  1562. }
  1563. else
  1564. {
  1565. alarmdelay5=dwTickCount;
  1566. }
  1567. //压脚传感器故障
  1568. if((Y13 && !X17)||(!Y13 && X17))
  1569. {
  1570. if(dwTickCount > alarmdelay6 + 2000)
  1571. {
  1572. DZ_SetAlarmCode(ALARM_YaJiao_CGQ);
  1573. }
  1574. }
  1575. else
  1576. {
  1577. alarmdelay6=dwTickCount;
  1578. }
  1579. }
  1580. void KK_BRUCE_CountData(unsigned short alr) //是否警告输出
  1581. {
  1582. unsigned long ch,k;
  1583. short kk;
  1584. unsigned short zz;
  1585. //花样打褶选择
  1586. if(user_datas[56] == 0) //常规打褶
  1587. {
  1588. //补偿量
  1589. if(user_datas[77]==0)
  1590. user_datas[5]=user_datas[102];
  1591. else if(user_datas[77]==1)
  1592. user_datas[5]=user_datas[103];
  1593. if(user_datas[77]==2)
  1594. user_datas[5]=user_datas[104];
  1595. ch = (user_datas[0] | (user_datas[1] << 16)); //窗户宽度
  1596. //单开双开选择
  1597. if(user_datas[7] == 1)//双开
  1598. {
  1599. ch /=2;
  1600. }
  1601. ch += user_datas[8]; //预加宽度
  1602. user_datas[10] = ch&0xffff;
  1603. user_datas[11] = (ch>>16)&0xffff;
  1604. //计算褶数
  1605. if(!M32) //自动算褶数
  1606. {//预加宽度除以褶距计算基准数值
  1607. user_datas[4] = ch/user_datas[44];
  1608. user_datas[4] += 1;
  1609. }
  1610. //计算褶距
  1611. k = ch*10/(user_datas[4] - 1);
  1612. user_datas[12] = k;
  1613. if(alr)
  1614. {
  1615. if(user_datas[12]<user_datas[48]*10)
  1616. {
  1617. DZ_SetAlarmCode(ALARM_ZheJu_Size_Limit);
  1618. }
  1619. if(user_datas[12]>user_datas[47]*10)
  1620. {
  1621. DZ_SetAlarmCode(ALARM_ZheJu_Size_Biger);
  1622. }
  1623. }
  1624. //计算褶子用料
  1625. k = (user_datas[2] | (user_datas[3] << 16)); //布料宽度
  1626. //(布料宽度-2*帘边宽度-成品宽度)除以褶数,一位小数点
  1627. if(k > (2*user_datas[9] + ch)) //布料不能小于窗户
  1628. {
  1629. user_datas[14] = ((k - 2*user_datas[9] -ch) * 10)/user_datas[4];
  1630. zz = user_datas[14];//褶子用料保存中间变量
  1631. //计算褶子大概宽度
  1632. if(user_datas[6]==1)//1个褶
  1633. {
  1634. k = (((user_datas[14]+((user_datas[6]-1) * 20 *user_datas[43]))/user_datas[6]) - (user_datas[5]-1) * 15)/2 + 3;
  1635. }
  1636. else if(user_datas[6]==2)//2个褶
  1637. {
  1638. k = (((user_datas[14]+((user_datas[6]-1) * 20 *user_datas[43]))/user_datas[6]) - (user_datas[5]-1) * 15)/2 + 13;//13
  1639. }
  1640. else if(user_datas[6]==3)//3个褶
  1641. {
  1642. k = (((user_datas[14]+((user_datas[6]-1) * 20 *user_datas[43]))/user_datas[6]) - (user_datas[5]-1) * 15)/2 + 41;
  1643. }
  1644. else//默认2个褶
  1645. {
  1646. user_datas[6]=2;
  1647. k = (((user_datas[14]+((user_datas[6]-1) * 20 *user_datas[43]))/user_datas[6]) - (user_datas[5]-1) * 15)/2 + 13;//13
  1648. }
  1649. if(!M31)//使用自动计算得到的褶宽
  1650. {
  1651. user_datas[13] = k;
  1652. }
  1653. else
  1654. {
  1655. //使用输入的褶宽,需要重新计算褶子用料,褶距
  1656. if(user_datas[6]==1)
  1657. {
  1658. k=(((user_datas[13]-3)*2) + ((user_datas[5]-1) * 15))*user_datas[6]-((user_datas[6]-1) * 20 *user_datas[43]);
  1659. }
  1660. else if(user_datas[6]==2)
  1661. {
  1662. k=(((user_datas[13]-13)*2) + ((user_datas[5]-1) * 15))*user_datas[6]-((user_datas[6]-1) * 20 *user_datas[43]);
  1663. }
  1664. else if(user_datas[6]==3)
  1665. {
  1666. k=(((user_datas[13]-41)*2) + ((user_datas[5]-1) * 15))*user_datas[6]-((user_datas[6]-1) * 20 *user_datas[43]);
  1667. }
  1668. else
  1669. {
  1670. user_datas[6]=2;
  1671. k=(((user_datas[13]-13)*2) + ((user_datas[5]-1) * 15))*user_datas[6]-((user_datas[6]-1) * 20 *user_datas[43]);
  1672. }
  1673. //得到褶子用料
  1674. user_datas[14]=k;
  1675. //自动计算的褶子数
  1676. user_datas[4] = ch/user_datas[44];
  1677. user_datas[4] += 1;
  1678. //输入深度对应的褶子用料大于自动计算的褶子用料
  1679. if(k>zz)
  1680. {
  1681. kk=(k-zz)*user_datas[4];//多用的褶子用料
  1682. user_datas[4] = user_datas[4] - (kk/k);//减掉多用的褶子用料对应的褶数,得到最终褶数
  1683. }
  1684. else//输入深度对应的褶子用料小于自动计算的褶子用料
  1685. {
  1686. kk=(zz-k)*user_datas[4];
  1687. user_datas[4] = user_datas[4] + (kk/k);
  1688. }
  1689. //计算褶距
  1690. k = (user_datas[2] | (user_datas[3] << 16)); //布料宽度
  1691. k=(((k - 2*user_datas[9]) * 10)-(user_datas[4]*user_datas[14]))/(user_datas[4]-1);
  1692. user_datas[12] = k;
  1693. }
  1694. if(M28)//加深度补偿有效,使用输入的user_datas[78]当褶宽
  1695. {
  1696. }
  1697. else//加深度补偿无效,使用计算得到的user_datas[13]当褶宽
  1698. {
  1699. user_datas[78] = user_datas[13];
  1700. }
  1701. //褶宽大小超出范围,最宽最小
  1702. if(alr)
  1703. {
  1704. if(user_datas[78]<user_datas[46]*10)
  1705. {
  1706. DZ_SetAlarmCode(ALARM_ZheKuan_Size_Limit);
  1707. }
  1708. if(user_datas[78]>user_datas[45]*10)
  1709. {
  1710. DZ_SetAlarmCode(ALARM_ZheKuan_Size_Biger);
  1711. }
  1712. }
  1713. //褶宽电机位置动作
  1714. kk = user_datas[78];
  1715. user_datas[72] = user_datas[57] + kk;
  1716. //电机位置超出最长位置警告
  1717. if(alr)
  1718. {
  1719. if(user_datas[72] > user_datas[67])
  1720. DZ_SetAlarmCode(ALARM_ZheKuan_LimitWei);
  1721. }
  1722. //算褶距电机位置
  1723. kk = user_datas[78]-user_datas[82];//褶宽(深度)跟基准杆距对应深度的差
  1724. user_datas[73] = user_datas[61]-kk-user_datas[12];//基准-褶宽(深度)跟基准杆距对应深度的差-褶距
  1725. //电机位置超出最长位置警告
  1726. if(alr)
  1727. {
  1728. if(user_datas[73] > user_datas[68])
  1729. DZ_SetAlarmCode(ALARM_ZheJu_LimitWei);
  1730. }
  1731. //计算起头尺寸,注意小数点差别 褶子用料-帘边宽度-褶刀厚度/2(6.0MM)
  1732. k = ((user_datas[14]+((user_datas[6]-1) * 20 *user_datas[43]))/user_datas[6] -(10 *user_datas[43])+ (10*user_datas[9])-60)/10;
  1733. //k = (user_datas[14]/2 + (10*user_datas[9])-60)/10;
  1734. user_datas[15] = k;
  1735. //计算后1杆
  1736. user_datas[79]=(user_datas[9]*10)+user_datas[14]+user_datas[12];
  1737. //计算后2杆
  1738. user_datas[80]=user_datas[79]+user_datas[14]+user_datas[12];
  1739. //计算后3杆
  1740. user_datas[81]=user_datas[80]+user_datas[14]+user_datas[12];
  1741. }
  1742. else if(alr) //警告布料不足
  1743. {
  1744. //输出警告
  1745. DZ_SetAlarmCode(ALARM_Size_Limit);
  1746. }
  1747. }
  1748. else //花样打褶 褶距和褶宽不用算,直接输入的,
  1749. //窗宽和布宽直接无效,要算出褶子用料
  1750. {
  1751. if(alr)
  1752. {
  1753. if(user_datas[12]<user_datas[48]*10)
  1754. {
  1755. DZ_SetAlarmCode(ALARM_ZheJu_Size_Limit);
  1756. }
  1757. if(user_datas[12]>user_datas[47]*10)
  1758. {
  1759. DZ_SetAlarmCode(ALARM_ZheJu_Size_Biger);
  1760. }
  1761. }
  1762. //褶宽大小超出范围,最宽最小
  1763. if(alr)
  1764. {
  1765. if(user_datas[13]<user_datas[46]*10)
  1766. {
  1767. DZ_SetAlarmCode(ALARM_ZheKuan_Size_Limit);
  1768. }
  1769. if(user_datas[13]>user_datas[45]*10)
  1770. {
  1771. DZ_SetAlarmCode(ALARM_ZheKuan_Size_Biger);
  1772. }
  1773. }
  1774. //计算褶子用料
  1775. k = (user_datas[13] - 13)*2 + (user_datas[5]-1) * 15-10 *user_datas[43];
  1776. user_datas[14] = k * 2;
  1777. //褶宽电机位置动作
  1778. kk = user_datas[78];
  1779. user_datas[72] = user_datas[57] + kk;
  1780. //电机位置超出最长位置警告
  1781. if(alr)
  1782. {
  1783. if(user_datas[72] > user_datas[67])
  1784. DZ_SetAlarmCode(ALARM_ZheKuan_LimitWei);
  1785. }
  1786. //算褶距电机位置
  1787. user_datas[73] = user_datas[61]+user_datas[82]-user_datas[12];
  1788. //电机位置超出最长位置警告
  1789. if(alr)
  1790. {
  1791. if(user_datas[73] > user_datas[68])
  1792. DZ_SetAlarmCode(ALARM_ZheJu_LimitWei);
  1793. }
  1794. }
  1795. }
  1796. // 检测是否踏了脚踏开关
  1797. void KK_BRUCE_DaZheJiCheckStart(void)
  1798. {
  1799. unsigned short ch;
  1800. //停止
  1801. if(X11_UP || M26)
  1802. {
  1803. M26 = 0;
  1804. AxisEgmStop(X_AXIS);
  1805. AxisEgmStop(Y_AXIS);
  1806. bDZRunning = 0;
  1807. bDZJiaoZhunState = 0;
  1808. AutoRunStep = 0;
  1809. XRunResetOStep = 0;
  1810. XRunMovePosStep = 0;
  1811. YRunResetOStep = 0;
  1812. YRunMovePosStep = 0;
  1813. StartReadyStep = 0;
  1814. }
  1815. }
  1816. //复位原点动作
  1817. unsigned long KK_ReSetOrigin(unsigned short axis)
  1818. {
  1819. switch(axis)
  1820. {
  1821. case X_AXIS: //褶宽电机
  1822. switch(XRunResetOStep)
  1823. {
  1824. case 1:
  1825. Y02 = 0; //方向返回
  1826. if(!X02)
  1827. {
  1828. XRunResetOStep = 2;
  1829. ReSetXDelay = dwTickCount + 5000;
  1830. Y02 = 0;
  1831. if(!X_DRV)
  1832. {
  1833. // X轴 运行速度 启动速度 加速度 减速度
  1834. AxisContinueMoveAcc(X_AXIS,MOTOR_ORIGIN_LOW_SPEED,DIR_N,MOTOR_ORIGIN_LOW_SPEED/3,15,15);
  1835. }
  1836. }
  1837. else
  1838. {
  1839. XRunResetOStep = 0;
  1840. return 1;
  1841. }
  1842. break;
  1843. case 2:
  1844. if(X02)
  1845. {
  1846. AxisEgmStop(X_AXIS);
  1847. XRunResetOStep = 0;
  1848. return 1;
  1849. }
  1850. else if(dwTickCount >= ReSetXDelay) //多长时间没回到位警告
  1851. {
  1852. DZ_SetAlarmCode(ALARM_ZheKuan_YuanWei);
  1853. XRunResetOStep = 0;
  1854. }
  1855. break;
  1856. }
  1857. break;
  1858. case Y_AXIS://褶距电机
  1859. switch(YRunResetOStep)
  1860. {
  1861. case 1:
  1862. Y03 = 0; //方向返回
  1863. if(!X03)
  1864. {
  1865. ReSetYDelay = dwTickCount + 5000;
  1866. YRunResetOStep = 2;
  1867. Y03 = 0;
  1868. if(!Y_DRV)
  1869. {
  1870. // Y轴 运行速度 启动速度 加速度 减速度
  1871. AxisContinueMoveAcc(Y_AXIS,MOTOR_ORIGIN_LOW_SPEED,DIR_N,MOTOR_ORIGIN_LOW_SPEED/2,15,15);
  1872. }
  1873. }
  1874. else
  1875. {
  1876. YRunResetOStep = 0;
  1877. return 1;
  1878. }
  1879. break;
  1880. case 2:
  1881. if(X03)
  1882. {
  1883. AxisEgmStop(Y_AXIS);
  1884. YRunResetOStep = 0;
  1885. return 1;
  1886. }
  1887. else if(dwTickCount >= ReSetYDelay) //多长时间没回到位警告
  1888. {
  1889. DZ_SetAlarmCode(ALARM_ZheJu_YuanWei);
  1890. YRunResetOStep = 0;
  1891. }
  1892. break;
  1893. }
  1894. break;
  1895. }
  1896. }
  1897. //移动距离
  1898. void KK_MovePos(unsigned short axis)
  1899. {
  1900. switch(axis)
  1901. {
  1902. case X_AXIS: //褶宽电机
  1903. if(!X_DRV)
  1904. {
  1905. XRunMovePosStep = 0;
  1906. XMoto_Flag=0;
  1907. }
  1908. break;
  1909. case Y_AXIS: //褶距电机
  1910. if(!Y_DRV)
  1911. {
  1912. YRunMovePosStep = 0;
  1913. YMoto_Flag=0;
  1914. }
  1915. break;
  1916. }
  1917. }
  1918. //启动准备
  1919. void KK_StartReady(void)
  1920. {
  1921. unsigned short ch;
  1922. switch(StartReadyStep)
  1923. {
  1924. case 1:
  1925. Y15 = 1;
  1926. cDelayTime4 = dwTickCount + 50;
  1927. StartReadyStep = 2;
  1928. break;
  1929. case 2:
  1930. if((dwTickCount >= cDelayTime4))
  1931. {
  1932. Y15 = 0;
  1933. StartReadyStep = 3;
  1934. }
  1935. break;
  1936. case 3:
  1937. if(X15_UP) //机台回到准备就绪点
  1938. {
  1939. Y13 = 1; //压脚抬起
  1940. StartReadyStep = 4;
  1941. cDelayTime4 = dwTickCount + 500;
  1942. }
  1943. break;
  1944. case 4:
  1945. if(dwTickCount >= cDelayTime4)
  1946. {
  1947. StartReadyStep = 5;
  1948. //褶宽电机位置动作
  1949. if(dwRealPosX <= 0)
  1950. {
  1951. Y02 = 1; //控制方向
  1952. AXIS_SET_DIR(axis_x,DIR_P);
  1953. }
  1954. else
  1955. {
  1956. Y02 = 0;
  1957. AXIS_SET_DIR(axis_x,DIR_N);
  1958. }
  1959. if(dwRealPosY < (user_datas[73]-user_datas[72]))
  1960. {
  1961. Y03 = 1; //控制方向
  1962. AXIS_SET_DIR(axis_y,DIR_P);
  1963. }
  1964. else
  1965. {
  1966. Y03 = 0;
  1967. AXIS_SET_DIR(axis_y,DIR_N);
  1968. }
  1969. if(bDZJiaoZhunState)
  1970. {
  1971. AxisMovePoint(X_AXIS,MOTOR_ORIGIN_LOW_SPEED,user_datas[57]);
  1972. AxisMovePoint(Y_AXIS,MOTOR_ORIGIN_LOW_SPEED,user_datas[61]);
  1973. }
  1974. else
  1975. {
  1976. if(dwRealPosX != 0)
  1977. XRunResetOStep=1;
  1978. //AxisMovePoint(X_AXIS,XMOTOR_HANDRUN_SPEED,0); //褶宽电机回到加工位
  1979. if(dwRealPosY != (user_datas[73]-user_datas[72]))
  1980. AxisMovePoint(Y_AXIS,MOTOR_RETURN_SPEED,(user_datas[73]-user_datas[72])); //褶距电机回到加工位
  1981. }
  1982. //Y06 = 1;
  1983. //Y07 = 1;
  1984. }
  1985. break;
  1986. case 5:
  1987. if(!X_DRV && !Y_DRV)
  1988. {
  1989. StartReadyStep = 0;
  1990. }
  1991. break;
  1992. //系统复位
  1993. // if(!X17 && !Y07 && X06 && !Y04 && !Y05 && !X_DRV
  1994. // 移动限位 定位针原位
  1995. // && !X13 && X12 && X14)
  1996. case 20:
  1997. if(X15)
  1998. {
  1999. Y13 = 1;
  2000. cDelayTime4 = dwTickCount + 500;
  2001. StartReadyStep = 201;
  2002. }
  2003. break;
  2004. case 201:
  2005. if(dwTickCount >= cDelayTime4)
  2006. {
  2007. StartReadyStep = 21;
  2008. Y04 = 0;
  2009. Y05 = 0;
  2010. //Y06 = 1;
  2011. //Y07 = 1;
  2012. }
  2013. break;
  2014. case 21:
  2015. if(1)
  2016. {
  2017. StartReadyStep = 22;
  2018. //褶宽电机位置动作
  2019. if(dwRealPosX <= 0)
  2020. {
  2021. Y02 = 1; //控制方向
  2022. AXIS_SET_DIR(axis_x,DIR_P);
  2023. }
  2024. else
  2025. {
  2026. Y02 = 0;
  2027. AXIS_SET_DIR(axis_x,DIR_N);
  2028. }
  2029. if(dwRealPosY < (user_datas[73]-user_datas[72]))
  2030. {
  2031. Y03 = 1; //控制方向
  2032. AXIS_SET_DIR(axis_y,DIR_P);
  2033. }
  2034. else
  2035. {
  2036. Y03 = 0;
  2037. AXIS_SET_DIR(axis_y,DIR_N);
  2038. }
  2039. if(bDZJiaoZhunState)
  2040. {
  2041. AxisMovePoint(X_AXIS,MOTOR_ORIGIN_LOW_SPEED,user_datas[57]);
  2042. AxisMovePoint(Y_AXIS,MOTOR_ORIGIN_LOW_SPEED,user_datas[61]);
  2043. }
  2044. else
  2045. {
  2046. if(dwRealPosX != 0)
  2047. XRunResetOStep=1;
  2048. //AxisMovePoint(X_AXIS,XMOTOR_HANDRUN_SPEED,0); //褶宽电机回到加工位
  2049. if(dwRealPosY != (user_datas[73]-user_datas[72]))
  2050. AxisMovePoint(Y_AXIS,MOTOR_ORIGIN_LOW_SPEED,(user_datas[73]-user_datas[72])); //褶距电机回到加工位
  2051. }
  2052. }
  2053. break;
  2054. case 22:
  2055. if(!X_DRV && !Y_DRV)
  2056. {
  2057. StartReadyStep = 0;
  2058. // AutoRunStep = 1;
  2059. // bDZRunning = 1;
  2060. }
  2061. break;
  2062. case 30://关机动作流程
  2063. if(X15 && Y13)//移动气缸归位条件满足
  2064. {
  2065. //Y06 = 0;
  2066. //Y07 = 0;
  2067. /* if(!Y06 && !Y05)
  2068. {
  2069. if(user_datas[72] > (user_datas[13] + 80))
  2070. {
  2071. ch = user_datas[72]- user_datas[13] - 80;
  2072. if(dwRealPosX > ch)
  2073. {
  2074. Y02 = 0;
  2075. XRunResetOStep = 1;
  2076. }
  2077. }
  2078. }*/
  2079. XRunResetOStep = 1;
  2080. //YRunResetOStep = 1;
  2081. Y05=0;
  2082. StartReadyStep = 31;
  2083. }
  2084. else
  2085. {
  2086. DZ_SetAlarmCode(ALARM_YuWei_Out_Limit); //压脚要抬起
  2087. }
  2088. break;
  2089. case 31:
  2090. if((YRunResetOStep == 0)&& (XRunResetOStep == 0))//移动气缸原点
  2091. {
  2092. M21=0;//停机状态显示
  2093. M28=0;//清深度补偿
  2094. ShutDownDelay = dwTickCount + 2000;
  2095. StartReadyStep = 32;
  2096. }
  2097. break;
  2098. case 32:
  2099. if(dwTickCount >= ShutDownDelay)
  2100. {
  2101. //Y14=1;//断电
  2102. //Y12=1;//断电
  2103. StartReadyStep=0;
  2104. }
  2105. break;
  2106. case 40://离机复位
  2107. if(X15 && Y13)//移动气缸归位条件满足
  2108. {
  2109. /* Y06 = 0;
  2110. Y07 = 0;
  2111. if(!Y06 && !Y05)
  2112. {
  2113. if(user_datas[72] > (user_datas[13] + 80))
  2114. {
  2115. ch = user_datas[72]- user_datas[13] - 80;
  2116. if(dwRealPosX > ch)
  2117. {
  2118. Y02 = 0;
  2119. XRunResetOStep = 1;
  2120. }
  2121. }
  2122. }*/
  2123. XRunResetOStep = 1;
  2124. //YRunResetOStep = 1;
  2125. Y05=0;
  2126. StartReadyStep = 41;
  2127. }
  2128. else
  2129. {
  2130. DZ_SetAlarmCode(ALARM_YuWei_Out_Limit); //压脚要抬起
  2131. }
  2132. break;
  2133. case 41:
  2134. if((YRunResetOStep == 0)&& (XRunResetOStep == 0))//移动气缸原点
  2135. {
  2136. Y13=0;//压脚压下
  2137. StartReadyStep = 42;
  2138. }
  2139. break;
  2140. case 42:
  2141. if(!Y13)//压脚压下到位
  2142. {
  2143. M21=0;//停机状态显示
  2144. M28=0;//清深度补偿
  2145. StartReadyStep = 0;
  2146. }
  2147. break;
  2148. }
  2149. }
  2150. void KK_BRUCE_DaZheJi_ManualAction(void)
  2151. {
  2152. unsigned long ch,k;
  2153. long i;
  2154. static unsigned char save_flg = 0,
  2155. XMotoRun_Flag = 0, YMotoRun_Flag = 0;
  2156. if(X02)SetPos(X_AXIS, 0);//回到原位
  2157. if(X03)SetPos(Y_AXIS, 0);//回到原位
  2158. dwRealPosX = GetPos(X_AXIS);
  2159. user_datas[50] = dwRealPosX & 0xffff;
  2160. user_datas[51] = (dwRealPosX >> 16) & 0xffff;
  2161. dwRealPosY = GetPos(Y_AXIS);
  2162. user_datas[52] = dwRealPosY & 0xffff;
  2163. user_datas[53] = (dwRealPosY >> 16) & 0xffff;
  2164. M40 = bDZRunning;
  2165. if(X15_UP)
  2166. bDZStart = 0;
  2167. //压脚也可由缝纫机控制
  2168. //Y11 = Y13;
  2169. if((!bDZRunning)) ////手动
  2170. {
  2171. if(!X15)
  2172. {
  2173. //压脚压住和其它信号都回原位才能回到加工位
  2174. if((X00_UP||M20||M23) && !Y13 /*&& !Y07*/ && X06 && !Y04 && !Y05 && !X_DRV
  2175. // 移动限位 定位针原位
  2176. /*&& !X13 && X12*/ && X14 )
  2177. {
  2178. KK_BRUCE_CountData(1); //尺寸警告
  2179. if(GetAlarmCode(DZ_ALARM_ADDR)==0)
  2180. {
  2181. StartReadyStep = 1; //回到加工位
  2182. M20 = 0;
  2183. M21 = 1;
  2184. M23 = 0;
  2185. }
  2186. }
  2187. }
  2188. else if(!bDZStart) //退出加工状态下
  2189. {
  2190. //压脚压住和其它信号都回原位才能回到加工位
  2191. if(X00_UP || M20 || M23) //M20是准备按钮,M23循环工作的测试按钮
  2192. {
  2193. // if(M20)
  2194. // M21 = !M21;
  2195. KK_BRUCE_CountData(1); //尺寸警告
  2196. //要另一条件褶距电机也要到位
  2197. if((((dwRealPosX == 0) && (dwRealPosY == (user_datas[73]-user_datas[72]))) || bDZJiaoZhunState)
  2198. /*&& Y07*/ && Y13 && X06 /*&& X13 && !X12*/ && X14 && !X_DRV && !Y_DRV )
  2199. {
  2200. if(GetAlarmCode(DZ_ALARM_ADDR)==0) //如果有警告不能启动
  2201. {
  2202. M21 = 1;
  2203. if(!M20)
  2204. {
  2205. AutoRunStep = 1;
  2206. bDZRunning = 1;
  2207. }
  2208. if(M23)
  2209. {
  2210. SycleRunMode=1;
  2211. M23=0;
  2212. }
  2213. }
  2214. }
  2215. else if(StartReadyStep == 0)
  2216. {
  2217. KK_BRUCE_CountData(1); //尺寸警告
  2218. if(GetAlarmCode(DZ_ALARM_ADDR)==0) //如果有警告不能启动
  2219. {
  2220. StartReadyStep = 20;
  2221. // if(!M20)
  2222. M21 = 1;
  2223. }
  2224. }
  2225. // M20 = 1;
  2226. }
  2227. //离机判断,超时动作
  2228. if(!(X00_UP || M20 || M23) && (StartReadyStep == 0) && !X_DRV && !Y_DRV && M21)
  2229. {
  2230. if(dwTickCount>AutoResetDelay+(user_datas[36]*60000))
  2231. {
  2232. StartReadyStep = 40;
  2233. M21 = 0;
  2234. M28=0;//清深度补偿
  2235. }
  2236. }
  2237. else
  2238. {
  2239. AutoResetDelay= dwTickCount;
  2240. }
  2241. //换缝纫图复位
  2242. if(M27 && (StartReadyStep == 0) && !X_DRV && !Y_DRV && M21)
  2243. {
  2244. M27=0;
  2245. M28=0;//清深度补偿
  2246. StartReadyStep = 40;
  2247. }
  2248. }
  2249. if(M20)
  2250. {
  2251. M20 = 0;
  2252. }
  2253. //停机
  2254. if(M22)
  2255. {
  2256. M22=0;
  2257. StartReadyStep=30;
  2258. M28=0;//清深度补偿
  2259. }
  2260. //复位
  2261. if(M29)
  2262. {
  2263. M22=0;
  2264. StartReadyStep = 4;
  2265. M28=0;//清深度补偿
  2266. }
  2267. //手动吹气
  2268. if(M38 && M37==0)
  2269. {
  2270. Y06=!Y06;
  2271. M38=0;
  2272. }
  2273. //1#褶皱电磁阀
  2274. if(M00)
  2275. {
  2276. M00 = 0;
  2277. if(Y13)
  2278. {
  2279. Y04 = !Y04;
  2280. }
  2281. else
  2282. {
  2283. DZ_SetAlarmCode(ALARM_ZheZhou_Out_Limit); //压脚要抬起
  2284. }
  2285. }
  2286. //2#褶皱电磁阀
  2287. if(M01)
  2288. {
  2289. M01 = 0;
  2290. if(Y13)
  2291. {
  2292. Y05 = !Y05;
  2293. }
  2294. else
  2295. {
  2296. DZ_SetAlarmCode(ALARM_ZheZhou_Out_Limit); //压脚要抬起
  2297. }
  2298. }
  2299. //移动气缸
  2300. /* if(M02)
  2301. {
  2302. M02 = 0;
  2303. if(X15 && Y13 && X17)
  2304. {
  2305. Y06 = !Y06;
  2306. Y07 = Y06;
  2307. if(!Y06 && !Y05)
  2308. {
  2309. if(user_datas[72] > (user_datas[13] + 80))
  2310. {
  2311. ch = user_datas[72]- user_datas[13] - 80;
  2312. if(dwRealPosX > ch)
  2313. {
  2314. Y02 = 0;
  2315. XRunResetOStep = 1;
  2316. }
  2317. }
  2318. }
  2319. }
  2320. else
  2321. {
  2322. DZ_SetAlarmCode(ALARM_YuWei_Out_Limit); //压脚要抬起
  2323. }
  2324. }*/
  2325. //定位针
  2326. if(M03)
  2327. {
  2328. M03 = 0;
  2329. if(Y10)
  2330. Y10 = 0;
  2331. else if(!Y04 && !Y05 && (dwRealPosX <= 0))
  2332. {
  2333. Y10 = 1;
  2334. }
  2335. else
  2336. {
  2337. DZ_SetAlarmCode(ALARM_DinWei_Out_Limit); //定位针
  2338. }
  2339. }
  2340. //压脚气缸
  2341. if(M04)
  2342. {
  2343. M04 = 0;
  2344. if(!Y04 && !Y05 /*&& !Y07*/ &&
  2345. (dwRealPosX <= 0)) //要加上褶宽电机位置限制
  2346. {
  2347. Y13 = !Y13;
  2348. }
  2349. else //压脚输出条件
  2350. {
  2351. DZ_SetAlarmCode(ALARM_YaJiao_Out_Limit); //定位针
  2352. }
  2353. }
  2354. //褶宽电机
  2355. if((XRunResetOStep == 0) && (XRunMovePosStep == 0) && (StartReadyStep == 0))
  2356. {
  2357. if(M05)
  2358. {
  2359. Y02 = 1; //控制方向
  2360. if(dwRealPosX >= user_datas[67])
  2361. {
  2362. M05 = 0;
  2363. AxisEgmStop(X_AXIS);
  2364. XMoto_Flag = 0;
  2365. }
  2366. else if(XMoto_Flag == 0)
  2367. {
  2368. XMoto_Flag = 1;
  2369. // X轴 运行速度 启动速度 加速度 减速度
  2370. AxisContinueMoveAcc(X_AXIS,XMOTOR_HANDRUN_SPEED,DIR_P,XMOTOR_HANDRUN_SPEED/3,15,15);
  2371. }
  2372. }
  2373. else if(M06)
  2374. {
  2375. Y02 = 0; //控制方向
  2376. if(X02) //回到原点要停止
  2377. {
  2378. M06 = 0;
  2379. AxisEgmStop(X_AXIS);
  2380. XMoto_Flag = 0;
  2381. }
  2382. else if(XMoto_Flag == 0)
  2383. {
  2384. XMoto_Flag = 1;
  2385. // X轴 运行速度 启动速度 加速度 减速度
  2386. AxisContinueMoveAcc(X_AXIS,XMOTOR_HANDRUN_SPEED,DIR_N,XMOTOR_HANDRUN_SPEED/3,15,15);
  2387. }
  2388. }
  2389. else
  2390. {
  2391. AxisDecStop(X_AXIS);
  2392. XMoto_Flag = 0;
  2393. }
  2394. }
  2395. //褶距电机
  2396. if((YRunResetOStep == 0) && (YRunMovePosStep == 0) && (StartReadyStep == 0))
  2397. {
  2398. if(M07)
  2399. {
  2400. Y03 = 1; //控制方向
  2401. if(dwRealPosY >= user_datas[68])
  2402. {
  2403. M07 = 0;
  2404. AxisEgmStop(Y_AXIS);
  2405. YMoto_Flag = 0;
  2406. }
  2407. else if(YMoto_Flag == 0)
  2408. {
  2409. YMoto_Flag = 1;
  2410. // Y轴 运行速度 启动速度 加速度 减速度
  2411. AxisContinueMoveAcc(Y_AXIS,YMOTOR_HANDRUN_SPEED,DIR_P,YMOTOR_HANDRUN_SPEED/3,15,15);
  2412. }
  2413. }
  2414. else if(M08)
  2415. {
  2416. Y03 = 0; //控制方向
  2417. if(X03)
  2418. {
  2419. M08 = 0;
  2420. AxisEgmStop(Y_AXIS);
  2421. }
  2422. else if(YMoto_Flag == 0)
  2423. {
  2424. YMoto_Flag = 1;
  2425. // Y轴 运行速度 启动速度 加速度 减速度
  2426. AxisContinueMoveAcc(Y_AXIS,YMOTOR_HANDRUN_SPEED,DIR_N,YMOTOR_HANDRUN_SPEED/3,15,15);
  2427. }
  2428. }
  2429. else
  2430. {
  2431. AxisDecStop(Y_AXIS);
  2432. YMoto_Flag = 0;
  2433. }
  2434. }
  2435. if(M14)
  2436. {
  2437. M14 = 0;
  2438. XRunResetOStep = 1; //两个轴回原点
  2439. }
  2440. if(M15)
  2441. {
  2442. M15 = 0;
  2443. YRunResetOStep = 1;//两个轴回原点
  2444. }
  2445. //M16 M17为测试位置用
  2446. if(M16)
  2447. {
  2448. M16 = 0;
  2449. if(dwRealPosX < user_datas[70])
  2450. {
  2451. Y02 = 1; //控制方向
  2452. axis_cw(axis_x);
  2453. }
  2454. else
  2455. {
  2456. Y02 = 0;
  2457. axis_ccw(axis_x);
  2458. }
  2459. XRunMovePosStep = 1;
  2460. AxisMovePoint(X_AXIS,MOTOR_ORIGIN_LOW_SPEED,user_datas[70]);
  2461. // AxisMovePosAccDec(X_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[70],XMOTOR_HANDRUN_SPEED/5,80,80 );
  2462. }
  2463. if(M17)
  2464. {
  2465. M17 = 0;
  2466. if(dwRealPosY < user_datas[71])
  2467. {
  2468. Y03 = 1; //控制方向
  2469. axis_cw(axis_y);
  2470. }
  2471. else
  2472. {
  2473. Y03 = 0;
  2474. axis_ccw(axis_y);
  2475. }
  2476. YRunMovePosStep = 1;
  2477. AxisMovePoint(Y_AXIS,MOTOR_ORIGIN_LOW_SPEED,user_datas[71]);
  2478. // AxisMovePosAccDec(Y_AXIS,YMOTOR_HANDRUN_SPEED,user_datas[71],YMOTOR_HANDRUN_SPEED/5,80,80);
  2479. }
  2480. if(M09)
  2481. {
  2482. M09 = 0;
  2483. //压脚回到原位并已抬起
  2484. if(!Y04 && !Y05 && !Y10
  2485. && Y13&& X14 && X15)
  2486. {
  2487. //Y06 = 1;
  2488. //Y07 = 1;
  2489. bDZJiaoZhunState = 1;
  2490. // bDZRunning = 1;
  2491. // AutoRunStep = 2;
  2492. //褶宽电机
  2493. XRunMovePosStep = 1;
  2494. if(dwRealPosX < user_datas[57])
  2495. {
  2496. Y02 = 1; //控制方向
  2497. axis_cw(axis_x);
  2498. }
  2499. else
  2500. {
  2501. Y02 = 0;
  2502. axis_ccw(axis_x);
  2503. }
  2504. AxisMovePoint(X_AXIS,MOTOR_ORIGIN_LOW_SPEED,user_datas[57]);
  2505. //褶距电机
  2506. YRunMovePosStep = 1;
  2507. if(dwRealPosY < user_datas[61])
  2508. {
  2509. Y03 = 1; //控制方向
  2510. axis_cw(axis_y);
  2511. }
  2512. else
  2513. {
  2514. Y03 = 0;
  2515. axis_ccw(axis_y);
  2516. }
  2517. AxisMovePoint(Y_AXIS,YMOTOR_HANDRUN_SPEED,user_datas[61]);
  2518. }
  2519. else
  2520. {
  2521. DZ_SetAlarmCode(ALARM_Start_Limit);//起动条件
  2522. }
  2523. }
  2524. if(M11)
  2525. {
  2526. M10 = 0;
  2527. bDZJiaoZhunState = 0;
  2528. bDZRunning = 0;
  2529. StartReadyStep = 4; //变为正常加工位
  2530. }
  2531. }
  2532. //停止循环运行模式
  2533. if(SycleRunMode)
  2534. {
  2535. if(M23)
  2536. {
  2537. SycleRunMode=0;
  2538. M23=0;
  2539. }
  2540. }
  2541. }
  2542. void KK_BRUCE_DaZhe_AutoAction(void)
  2543. {
  2544. unsigned short ch;
  2545. if(bDZRunning)
  2546. {
  2547. switch(AutoRunStep)
  2548. {
  2549. case 1://褶宽电机,褶距电机定位
  2550. AutoRunStep = 2;
  2551. break;
  2552. case 2: //两个电机已经定位结束,等待脚踏
  2553. if((!X_DRV) && (!Y_DRV))
  2554. {
  2555. Y02=1;//控制方向
  2556. Y03=1;//控制方向
  2557. if(dwRealPosX != user_datas[72]+user_datas[92])
  2558. AxisMovePoint(X_AXIS,XMOTOR_AUTORUN_SPEED,user_datas[72]+user_datas[92]); //褶宽电机回到加工位
  2559. if(user_datas[99]==0)//杆距开
  2560. {
  2561. if(dwRealPosY != user_datas[73]+user_datas[93])
  2562. AxisMovePoint(Y_AXIS,XMOTOR_AUTORUN_SPEED,user_datas[73]+user_datas[93]); //褶距电机回到加工位
  2563. }
  2564. if(user_datas[6]==1)//一个褶,不用动褶皱气缸
  2565. {
  2566. AutoRunStep = 5;
  2567. }
  2568. else
  2569. {
  2570. AutoRunStep = 3;
  2571. AutoRunDelay = dwTickCount + user_datas[38];//延时褶皱
  2572. }
  2573. }
  2574. break;
  2575. case 3:
  2576. if(dwTickCount >= AutoRunDelay)
  2577. {
  2578. Y05 = 1;
  2579. AutoRunDelay = dwTickCount + 1500;
  2580. AutoRunStep = 4;
  2581. }
  2582. break;
  2583. case 4:
  2584. if(!X06 && X07 &&(!X_DRV) && (!Y_DRV))
  2585. {
  2586. AutoRunStep = 5;
  2587. }
  2588. else if(dwTickCount >= AutoRunDelay)
  2589. {
  2590. DZ_SetAlarmCode(ALARM_ZheZhou_DaoWei); //褶皱输出不到位
  2591. Y05 = 0;
  2592. bDZRunning = 0;
  2593. AutoRunStep = 0;
  2594. }
  2595. break;
  2596. case 5:
  2597. //电机到位
  2598. if((dwRealPosX == user_datas[72]+user_datas[92])&& ((dwRealPosY == user_datas[73]+user_datas[93]) || user_datas[99]==1) &&(!X_DRV) && (!Y_DRV))
  2599. {
  2600. // if(M25)//为测试断点用
  2601. // {
  2602. M25 = 0;
  2603. AutoRunStep = 6;
  2604. AutoRunDelay = dwTickCount + user_datas[39]; //定位针延时下降
  2605. // }
  2606. }
  2607. break;
  2608. case 6:
  2609. if(dwTickCount >= AutoRunDelay)
  2610. {
  2611. // // if(M25)//为测试断点用
  2612. // // {
  2613. M25 = 0;
  2614. Y10 = 1;
  2615. AutoRunStep = 7;
  2616. AutoRunDelay = dwTickCount + 1500; //定位针离开原点时间警告
  2617. // // }
  2618. }
  2619. break;
  2620. case 7:
  2621. if(!X14)//定位针离开
  2622. {
  2623. AutoRunDelay = dwTickCount + user_datas[66];
  2624. AutoRunStep = 8;
  2625. }
  2626. else if(dwTickCount >= AutoRunDelay) //定位针没法离开
  2627. {
  2628. DZ_SetAlarmCode(ALARM_FenZhen_YuanWei); //定位针没法离开
  2629. Y10 = 0;
  2630. bDZRunning = 0;
  2631. AutoRunStep = 0;
  2632. }
  2633. break;
  2634. case 8:
  2635. if(dwTickCount >= AutoRunDelay)
  2636. {
  2637. Y05 = 0; // 褶皱气缸退
  2638. AutoRunStep = 9;
  2639. Y02 = 0; //控制方向
  2640. axis_ccw(axis_x);
  2641. if(dwRealPosX > 120)
  2642. {
  2643. AxisMoveTwoPos(X_AXIS,MOTOR_RETURN_SPEED,(dwRealPosX - 120),MOTOR_ORIGIN_LOW_SPEED,150,DIR_N);
  2644. XRunResetOStep = 1;//褶宽回原点
  2645. AutoRunDelay = dwTickCount + 1500;
  2646. if(user_datas[98]==0 && user_datas[99]==0 )//杆距前退,杆距开
  2647. {
  2648. Y03=0;//控制方向
  2649. AxisMovePoint(Y_AXIS,MOTOR_RETURN_SPEED,user_datas[73]-user_datas[72]);
  2650. }
  2651. }
  2652. //XRunResetOStep=1;
  2653. // XRunMovePosStep = 1;
  2654. //电机离开
  2655. //AxisMovePoint(X_AXIS,MOTOR_RETURN_SPEED,user_datas[94]);
  2656. }
  2657. break;
  2658. case 9:
  2659. if(X06 && !X07) //褶皱气缸回到位
  2660. {
  2661. if(1)
  2662. {
  2663. M25 = 0;
  2664. if(dwRealPosX <= user_datas[72]+user_datas[92]-user_datas[13]-user_datas[95]) //褶宽电机已经离开
  2665. {
  2666. Y13 = 0; //关闭时压下
  2667. AutoRunStep = 10;
  2668. AutoRunDelay = dwTickCount + user_datas[101];
  2669. }
  2670. }
  2671. }
  2672. else if(dwTickCount >= AutoRunDelay) //褶皱气缸回原位异常
  2673. {
  2674. DZ_SetAlarmCode(ALARM_ZheZhou_YuanWei);
  2675. bDZRunning = 0;
  2676. AutoRunStep = 0;
  2677. }
  2678. break;
  2679. case 10:
  2680. if(dwTickCount >= AutoRunDelay) //压脚到位
  2681. {
  2682. AutoRunStep = 11;
  2683. AutoRunDelay = dwTickCount + user_datas[40]; //定位针延时上升
  2684. }
  2685. /* else if(dwTickCount >= AutoRunDelay) //压脚到位异常
  2686. {
  2687. DZ_SetAlarmCode(ALARM_YaJiao_YuanWei);
  2688. bDZRunning = 0;
  2689. AutoRunStep = 0;
  2690. }*/
  2691. break;
  2692. case 11:
  2693. if(dwTickCount >= AutoRunDelay) //延时退定位针
  2694. {
  2695. AutoRunStep = 12;
  2696. Y10 = 0;
  2697. AutoRunDelay = dwTickCount + 700;
  2698. }
  2699. break;
  2700. case 12:
  2701. if(X14) //定位针原位
  2702. {
  2703. AutoRunStep = 13;
  2704. AutoRunDelay = dwTickCount + user_datas[41]; //延时启动加工
  2705. }
  2706. else if(dwTickCount >= AutoRunDelay) //定位针回原位异常
  2707. {
  2708. DZ_SetAlarmCode(ALARM_FenZhen_Left); //定位针没法离开
  2709. Y10 = 0;
  2710. bDZRunning = 0;
  2711. AutoRunStep = 0;
  2712. }
  2713. break;
  2714. case 13:
  2715. if(dwTickCount >= AutoRunDelay)
  2716. {
  2717. // if(M25)
  2718. // {
  2719. M25 = 0;
  2720. AutoRunStep = 14;
  2721. Autochuiqi=1;
  2722. Y15 = 1;
  2723. AutoRunDelay = dwTickCount + 40; //延时启动加工
  2724. // }
  2725. }
  2726. break;
  2727. case 14:
  2728. if(dwTickCount >= AutoRunDelay)
  2729. {
  2730. AutoRunStep = 15;
  2731. Y15 = 0;
  2732. }
  2733. break;
  2734. case 15:
  2735. if(X15_UP) //加工结束后
  2736. {
  2737. AutoRunStep = 16;
  2738. AutoRunDelay = dwTickCount + 60;
  2739. }
  2740. break;
  2741. case 16:
  2742. if(dwTickCount >= AutoRunDelay)
  2743. {
  2744. AutoRunStep = 17;
  2745. Y13 = 1; //
  2746. AutoRunDelay = dwTickCount + user_datas[101];
  2747. }
  2748. break;
  2749. case 17:
  2750. if(dwTickCount >= AutoRunDelay) //压脚上升到位
  2751. {
  2752. if(XRunResetOStep== 0)
  2753. {
  2754. //Y06 = 1; //移位退出
  2755. //Y07 = 1;
  2756. AutoRunStep = 18;
  2757. //电机回到褶宽处
  2758. StartReadyStep = 4;
  2759. AutoRunDelay = dwTickCount + 1500;
  2760. }
  2761. }
  2762. /* else if(dwTickCount >= AutoRunDelay) //压脚原位异常
  2763. {
  2764. DZ_SetAlarmCode(ALARM_YaJiao_YuanWei); //压脚原位
  2765. bDZRunning = 0;
  2766. AutoRunStep = 0;
  2767. }*/
  2768. break;
  2769. case 18:
  2770. if((dwRealPosX == 0)&& (dwRealPosY == (user_datas[73]-user_datas[72])) && !Y_DRV && !X_DRV && (StartReadyStep == 0))
  2771. {
  2772. if(SycleRunMode)
  2773. {
  2774. AutoRunStep = 19;
  2775. AutoRunDelay = dwTickCount + 1500;
  2776. }
  2777. else
  2778. {
  2779. bDZRunning = 0;
  2780. AutoRunStep = 0;
  2781. }
  2782. runcount++;
  2783. M28=0;//清深度补偿
  2784. user_datas[74] = runcount&0xffff;
  2785. user_datas[75] = (runcount>>16)&0xffff;
  2786. }
  2787. break;
  2788. case 19:
  2789. if(dwTickCount >= AutoRunDelay)
  2790. {
  2791. bDZRunning = 1;
  2792. AutoRunStep = 1;
  2793. }
  2794. break;
  2795. }
  2796. }
  2797. }
  2798. //故障报警
  2799. void KK_BRUCE_DaZheJi_CheckAlarm(void)
  2800. {
  2801. static unsigned long alarmdelay1,alarmdelay2,alarmdelay3,alarmdelay4,alarmdelay5,alarmdelay6;
  2802. //褶皱传感器原点故障
  2803. if((Y05 && X06)||(!Y05 && !X06))
  2804. {
  2805. if(dwTickCount > alarmdelay1 + 2000)
  2806. {
  2807. DZ_SetAlarmCode(ALARM_ZheZhou_CGQ_YuanDian);
  2808. }
  2809. }
  2810. else
  2811. {
  2812. alarmdelay1=dwTickCount;
  2813. }
  2814. //褶皱传感器到位故障
  2815. if((Y05 && !X07)||(!Y05 && X07))
  2816. {
  2817. if(dwTickCount > alarmdelay2 + 2000)
  2818. {
  2819. DZ_SetAlarmCode(ALARM_ZheZhou_CGQ_Daowei);
  2820. }
  2821. }
  2822. else
  2823. {
  2824. alarmdelay2=dwTickCount;
  2825. }
  2826. //移位传感器原点故障
  2827. /* if((Y07 && X12)||(!Y07 && !X12))
  2828. {
  2829. if(dwTickCount > alarmdelay3 + 2000)
  2830. {
  2831. DZ_SetAlarmCode(ALARM_YiWei_CGQ_YuanDian);
  2832. }
  2833. }
  2834. else
  2835. {
  2836. alarmdelay3=dwTickCount;
  2837. }
  2838. //移位传感器到位故障
  2839. if((Y07 && !X13)||(!Y07 && X13))
  2840. {
  2841. if(dwTickCount > alarmdelay4 + 2000)
  2842. {
  2843. DZ_SetAlarmCode(ALARM_YiWei_CGQ_Daowei);
  2844. }
  2845. }
  2846. else
  2847. {
  2848. alarmdelay4=dwTickCount;
  2849. }
  2850. */
  2851. //定位针传感器故障
  2852. if((Y10 && X14)||(!Y10 && !X14))
  2853. {
  2854. if(dwTickCount > alarmdelay5 + 2000)
  2855. {
  2856. DZ_SetAlarmCode(ALARM_DingWeiZhen_CGQ);
  2857. }
  2858. }
  2859. else
  2860. {
  2861. alarmdelay5=dwTickCount;
  2862. }
  2863. //压脚传感器故障
  2864. /* if((Y13 && !X17)||(!Y13 && X17))
  2865. {
  2866. if(dwTickCount > alarmdelay6 + 2000)
  2867. {
  2868. DZ_SetAlarmCode(ALARM_YaJiao_CGQ);
  2869. }
  2870. }
  2871. else
  2872. {
  2873. alarmdelay6=dwTickCount;
  2874. }*/
  2875. }
  2876. #endif