BRUCE_DaZheJi.c 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492
  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 cZipperLength[2];
  16. long dwRealPosX,dwRealPosY;
  17. unsigned long runcount;
  18. #define SycleRunMode M24
  19. short *len_buf;
  20. short *offset_len;
  21. //故障报警
  22. void DAZHE_SetAlarmCode(unsigned alarm_code)
  23. {
  24. }
  25. //高速输入X31/X17外部色标信号中断
  26. void DAZHE_ExtiActionX31(void)
  27. {
  28. }
  29. void MXC_ExtiActionX20(void)
  30. {
  31. }
  32. //故障报警
  33. void DZ_SetAlarmCode(unsigned alarm_code)
  34. {
  35. SetAlarmCode(DZ_ALARM_ADDR,alarm_code);
  36. }
  37. //复位原点动作
  38. unsigned long ReSetOrigin(unsigned short axis)
  39. {
  40. switch(axis)
  41. {
  42. case X_AXIS: //褶宽电机
  43. switch(XRunResetOStep)
  44. {
  45. case 1:
  46. Y02 = 0; //方向返回
  47. if(!X02)
  48. {
  49. XRunResetOStep = 2;
  50. ReSetXDelay = dwTickCount + 5000;
  51. Y02 = 0;
  52. if(!X_DRV)
  53. {
  54. // X轴 运行速度 启动速度 加速度 减速度
  55. AxisContinueMoveAcc(X_AXIS,XMOTOR_HANDRUN_SPEED,DIR_N,XMOTOR_HANDRUN_SPEED/3,15,15);
  56. }
  57. }
  58. else
  59. {
  60. XRunResetOStep = 0;
  61. return 1;
  62. }
  63. break;
  64. case 2:
  65. if(X02)
  66. {
  67. AxisEgmStop(X_AXIS);
  68. XRunResetOStep = 0;
  69. return 1;
  70. }
  71. else if(dwTickCount >= ReSetXDelay) //多长时间没回到位警告
  72. {
  73. DZ_SetAlarmCode(ALARM_ZheKuan_YuanWei);
  74. }
  75. break;
  76. }
  77. break;
  78. case Y_AXIS://褶距电机
  79. switch(YRunResetOStep)
  80. {
  81. case 1:
  82. Y03 = 0; //方向返回
  83. if(!X03)
  84. {
  85. ReSetYDelay = dwTickCount + 5000;
  86. YRunResetOStep = 2;
  87. Y03 = 0;
  88. if(!Y_DRV)
  89. {
  90. // Y轴 运行速度 启动速度 加速度 减速度
  91. AxisContinueMoveAcc(Y_AXIS,YMOTOR_HANDRUN_SPEED,DIR_N,YMOTOR_HANDRUN_SPEED/2,15,15);
  92. }
  93. }
  94. else
  95. {
  96. YRunResetOStep = 0;
  97. return 1;
  98. }
  99. break;
  100. case 2:
  101. if(X03)
  102. {
  103. AxisEgmStop(Y_AXIS);
  104. YRunResetOStep = 0;
  105. return 1;
  106. }
  107. else if(dwTickCount >= ReSetYDelay) //多长时间没回到位警告
  108. {
  109. DZ_SetAlarmCode(ALARM_ZheJu_YuanWei);
  110. }
  111. break;
  112. }
  113. break;
  114. }
  115. }
  116. //移动距离
  117. void MovePos(unsigned short axis)
  118. {
  119. switch(axis)
  120. {
  121. case X_AXIS: //褶宽电机
  122. if(!X_DRV)
  123. XRunMovePosStep = 0;
  124. break;
  125. case Y_AXIS: //褶距电机
  126. if(!Y_DRV)
  127. YRunMovePosStep = 0;
  128. break;
  129. }
  130. }
  131. //褶宽电机动作
  132. //基准褶宽位置D57 基准实际褶宽D59 大概褶宽D13
  133. void ZheKuan_MotorActoin(long Pos)
  134. { unsigned long ch,k;
  135. switch(ZheKuan_MotorRunStep)
  136. {
  137. case 1: //算出褶宽绝对位置
  138. ZheKuan_MotorRunStep = 2;
  139. if(user_datas[13] > user_datas[59])
  140. {
  141. ch =user_datas[57] + user_datas[13]- user_datas[59];
  142. k = ch;
  143. }
  144. else
  145. ch =user_datas[57] -(user_datas[59]- user_datas[13]);
  146. if(dwRealPosX < ch)
  147. {
  148. Y02 = 1; //控制方向
  149. axis_cw(axis_x);
  150. }
  151. else
  152. {
  153. Y02 = 0;
  154. axis_ccw(axis_x);
  155. }
  156. AxisMovePoint(X_AXIS,XMOTOR_HANDRUN_SPEED,ch);
  157. break;
  158. case 2:
  159. if(!X_DRV)
  160. ZheKuan_MotorRunStep = 0;
  161. break;
  162. }
  163. }
  164. //基准参数动作
  165. /*
  166. D0 窗户宽度
  167. D1 窗户宽度
  168. D2 布料宽度
  169. D3 布料宽度
  170. D4 褶子个数
  171. D5 补偿量
  172. D6 打褶方式
  173. D7 窗帘款式(0 单开,1 双开)
  174. D8 预加宽度
  175. D9 帘边宽度
  176. D10 预计单片成品宽度
  177. D11 预计单片成品宽度
  178. D12 褶距
  179. D13 大概褶宽
  180. D14 褶子用料
  181. D15 起头尺寸
  182. D43 褶宽与褶深的距离差
  183. D44 褶距计算基准数值
  184. D55
  185. D56 花样打褶选择
  186. */
  187. void BRUCE_CountData(unsigned short alr) //是否警告输出
  188. {
  189. unsigned long ch,k;
  190. short kk;
  191. //花样打褶选择
  192. if(user_datas[56] == 0) //常规打褶
  193. {
  194. ch = (user_datas[0] | (user_datas[1] << 16)); //窗户宽度
  195. //单开双开选择
  196. if(user_datas[7] == 1)//双开
  197. {
  198. ch /=2;
  199. }
  200. ch += user_datas[8]; //预加宽度
  201. user_datas[10] = ch&0xffff;
  202. user_datas[11] = (ch>>16)&0xffff;
  203. //计算褶数
  204. if(user_datas[55] == 1) //自动算褶数
  205. {//预加宽度除以褶距计算基准数值
  206. user_datas[4] = ch/user_datas[44];
  207. user_datas[4] += 1;
  208. }
  209. //计算褶距
  210. k = ch*10/(user_datas[4] - 1);
  211. user_datas[12] = k;
  212. if(alr)
  213. {
  214. if(user_datas[12]<user_datas[48]*10)
  215. {
  216. DZ_SetAlarmCode(ALARM_ZheJu_Size_Limit);
  217. }
  218. if(user_datas[12]>user_datas[47]*10)
  219. {
  220. DZ_SetAlarmCode(ALARM_ZheJu_Size_Biger);
  221. }
  222. }
  223. //计算褶子用料
  224. k = (user_datas[2] | (user_datas[3] << 16)); //布料宽度
  225. //(布料宽度-2*帘边宽度-成品宽度)除以褶数,一位小数点
  226. if(k > (2*user_datas[9] + ch)) //布料不能小于窗户
  227. {
  228. user_datas[14] = ((k - 2*user_datas[9] -ch) * 10)/user_datas[4];
  229. // user_datas[14] = k;
  230. //计算褶子大概宽度
  231. if(user_datas[6]==0)
  232. {
  233. k = ((user_datas[14]+(user_datas[6] * 20 *user_datas[43]))/(user_datas[6]+1) - (user_datas[5]-1) * 15)/2 + 3;
  234. }
  235. else if(user_datas[6]==1)
  236. {
  237. k = ((user_datas[14]+(user_datas[6] * 20 *user_datas[43]))/(user_datas[6]+1) - (user_datas[5]-1) * 15)/2 + 13;
  238. }
  239. else if(user_datas[6]==2)
  240. {
  241. k = ((user_datas[14]+(user_datas[6] * 20 *user_datas[43]))/(user_datas[6]+1) - (user_datas[5]-1) * 15)/2 + 41;
  242. }
  243. user_datas[13] = k;
  244. //褶宽大小超出范围,最宽最小
  245. if(alr)
  246. {
  247. if(user_datas[13]<user_datas[46]*10)
  248. {
  249. DZ_SetAlarmCode(ALARM_ZheKuan_Size_Limit);
  250. }
  251. if(user_datas[13]>user_datas[45]*10)
  252. {
  253. DZ_SetAlarmCode(ALARM_ZheKuan_Size_Biger);
  254. }
  255. }
  256. //褶宽电机位置动作
  257. kk = user_datas[13]- user_datas[59];
  258. user_datas[72] = user_datas[57] + kk;
  259. //电机位置超出最长位置警告
  260. if(alr)
  261. {
  262. if(user_datas[72] > user_datas[67])
  263. DZ_SetAlarmCode(ALARM_ZheKuan_LimitWei);
  264. }
  265. //算褶距电机位置
  266. if(user_datas[12] > user_datas[63])
  267. {
  268. ch = user_datas[12]- user_datas[63]; //实际比基准宽
  269. k = user_datas[61] - ch;
  270. }
  271. else
  272. {
  273. ch = user_datas[63]- user_datas[12];
  274. k = user_datas[61] + ch;
  275. }
  276. user_datas[73] = k- kk + 15;
  277. //电机位置超出最长位置警告
  278. if(alr)
  279. {
  280. if(user_datas[73] > user_datas[68])
  281. DZ_SetAlarmCode(ALARM_ZheJu_LimitWei);
  282. }
  283. //计算起头尺寸,注意小数点差别 褶子用料-帘边宽度-褶刀厚度/2(6.0MM)
  284. 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;
  285. //k = (user_datas[14]/2 + (10*user_datas[9])-60)/10;
  286. user_datas[15] = k;
  287. }
  288. else if(alr) //警告布料不足
  289. {
  290. //输出警告
  291. DZ_SetAlarmCode(ALARM_Size_Limit);
  292. }
  293. }
  294. else //花样打褶 褶距和褶宽不用算,直接输入的,
  295. //窗宽和布宽直接无效,要算出褶子用料
  296. {
  297. if(alr)
  298. {
  299. if(user_datas[12]<user_datas[48]*10)
  300. {
  301. DZ_SetAlarmCode(ALARM_ZheJu_Size_Limit);
  302. }
  303. if(user_datas[12]>user_datas[47]*10)
  304. {
  305. DZ_SetAlarmCode(ALARM_ZheJu_Size_Biger);
  306. }
  307. }
  308. //褶宽大小超出范围,最宽最小
  309. if(alr)
  310. {
  311. if(user_datas[13]<user_datas[46]*10)
  312. {
  313. DZ_SetAlarmCode(ALARM_ZheKuan_Size_Limit);
  314. }
  315. if(user_datas[13]>user_datas[45]*10)
  316. {
  317. DZ_SetAlarmCode(ALARM_ZheKuan_Size_Biger);
  318. }
  319. }
  320. //计算褶子用料
  321. k = (user_datas[13] - 13)*2 + (user_datas[5]-1) * 15-10 *user_datas[43];
  322. user_datas[14] = k * 2;
  323. //褶宽电机位置动作
  324. kk = user_datas[13]- user_datas[59];
  325. user_datas[72] = user_datas[57] + kk;
  326. //电机位置超出最长位置警告
  327. if(alr)
  328. {
  329. if(user_datas[72] > user_datas[67])
  330. DZ_SetAlarmCode(ALARM_ZheKuan_LimitWei);
  331. }
  332. //算褶距电机位置
  333. if(user_datas[12] > user_datas[63])
  334. {
  335. ch = user_datas[12]- user_datas[63]; //实际比基准宽
  336. k = user_datas[61] - ch;
  337. }
  338. else
  339. {
  340. ch = user_datas[63]- user_datas[12];
  341. k = user_datas[61] + ch;
  342. }
  343. user_datas[73] = k- kk + 15;
  344. //电机位置超出最长位置警告
  345. if(alr)
  346. {
  347. if(user_datas[73] > user_datas[68])
  348. DZ_SetAlarmCode(ALARM_ZheJu_LimitWei);
  349. }
  350. }
  351. }
  352. void DaZheJi_InitAction(void)
  353. {
  354. float length_buff,pulse_buff;
  355. length_buff = user_datas[19]*10; //褶宽丝杆镙距
  356. if(user_datas[18])
  357. pulse_buff = user_datas[18];
  358. else
  359. pulse_buff = 10000;
  360. XGearRatio = pulse_buff/length_buff; //电子齿轮比
  361. length_buff = user_datas[64]*10; //褶距丝杆镙距
  362. YGearRatio = pulse_buff/length_buff;
  363. //运行次数
  364. runcount=(user_datas[74] | (user_datas[75] << 16));
  365. //上电回位
  366. //XRunResetOStep = 1;//褶宽电机回原点
  367. //YRunResetOStep = 1;//褶距电机回原点启动
  368. //基准参数没设定的情况下要配默认值
  369. // if(user_datas[57] <= 500) ||
  370. // ReSetSysTemStep = 1;
  371. bDZStart = 1;
  372. }
  373. void BRUCE_DaZheJiAction(void)
  374. {
  375. user_datas[121] = bDZRunning;
  376. user_datas[122] = AutoRunStep;
  377. user_datas[123] = XRunResetOStep;
  378. user_datas[124] = YRunResetOStep;
  379. user_datas[125] = XRunMovePosStep;
  380. user_datas[126] = YRunMovePosStep;
  381. user_datas[127] = StartReadyStep;
  382. // user_datas[128] = bDZJiaoZhunState;
  383. BRUCE_CountData(0); //尺寸不用警告
  384. BRUCE_DaZheJiCheckStart(); //启动
  385. //ReSetOrigin(X_AXIS); //褶宽电机回原点
  386. //ReSetOrigin(Y_AXIS); //褶距电机回原点
  387. MovePos(X_AXIS);//褶宽电机移动距离
  388. MovePos(Y_AXIS);//褶距电机移动距离
  389. StartReady();
  390. if(!M39)//锁机标志
  391. {
  392. BRUCE_DaZheJi_ManualAction();
  393. BRUCE_DaZhe_AutoAction();
  394. }
  395. //BRUCE_DaZheJi_CheckAlarm();
  396. runcount=(user_datas[74] | (user_datas[75] << 16));
  397. }
  398. void BRUCE_DaZheJi_ManualAction(void)
  399. {
  400. unsigned long ch,k;
  401. long i;
  402. static unsigned char save_flg = 0,XMoto_Flag = 0, YMoto_Flag = 0,
  403. XMotoRun_Flag = 0, YMotoRun_Flag = 0;
  404. if(X02)SetPos(X_AXIS, 0);//回到原位
  405. if(X03)SetPos(Y_AXIS, 0);//回到原位
  406. dwRealPosX = GetPos(X_AXIS);
  407. user_datas[50] = dwRealPosX & 0xffff;
  408. user_datas[51] = (dwRealPosX >> 16) & 0xffff;
  409. dwRealPosY = GetPos(Y_AXIS);
  410. user_datas[52] = dwRealPosY & 0xffff;
  411. user_datas[53] = (dwRealPosY >> 16) & 0xffff;
  412. M40 = bDZRunning;
  413. if(X15_UP)
  414. bDZStart = 0;
  415. //压脚也可由缝纫机控制
  416. Y11 = Y13;
  417. if((!bDZRunning)) ////手动
  418. {
  419. if(!X15)
  420. {
  421. //压脚压住和其它信号都回原位才能回到加工位
  422. if((X00_UP||M20||M23) && !X17 && !Y07 && X06 && !Y04 && !Y05 && !X_DRV
  423. // 移动限位 定位针原位
  424. && !X13 && X12 && X14)
  425. {
  426. BRUCE_CountData(1); //尺寸警告
  427. if(GetAlarmCode(DZ_ALARM_ADDR)==0)
  428. {
  429. StartReadyStep = 1; //回到加工位
  430. M20 = 0;
  431. M21 = 1;
  432. M23 = 0;
  433. }
  434. }
  435. }
  436. else if(!bDZStart) //退出加工状态下
  437. {
  438. //压脚压住和其它信号都回原位才能回到加工位
  439. if(X00_UP || M20 || M23) //M20是准备按钮,M23循环工作的测试按钮
  440. {
  441. // if(M20)
  442. // M21 = !M21;
  443. BRUCE_CountData(1); //尺寸警告
  444. //要另一条件褶距电机也要到位
  445. if((((dwRealPosX == user_datas[72]) && (dwRealPosY == user_datas[73])) || bDZJiaoZhunState)
  446. && Y07 &&Y13 &&
  447. X17 && X06 && X13 && !X12 && X14 && !X_DRV && !Y_DRV )
  448. {
  449. if(GetAlarmCode(DZ_ALARM_ADDR)==0) //如果有警告不能启动
  450. {
  451. M21 = 1;
  452. if(!M20)
  453. {
  454. AutoRunStep = 1;
  455. bDZRunning = 1;
  456. }
  457. if(M23)
  458. {
  459. SycleRunMode=1;
  460. M23=0;
  461. }
  462. }
  463. }
  464. else if(StartReadyStep == 0)
  465. {
  466. BRUCE_CountData(1); //尺寸警告
  467. if(GetAlarmCode(DZ_ALARM_ADDR)==0) //如果有警告不能启动
  468. {
  469. //StartReadyStep = 20;
  470. // if(!M20)
  471. M21 = 1;
  472. }
  473. }
  474. // M20 = 1;
  475. }
  476. if(!(X00_UP || M20 || M23) && (StartReadyStep == 0) && !X_DRV && !Y_DRV && M21)
  477. {
  478. if(dwTickCount>AutoResetDelay+(user_datas[36]*60000))
  479. {
  480. StartReadyStep = 40;
  481. //M21 = 0;
  482. }
  483. }
  484. else
  485. {
  486. AutoResetDelay= dwTickCount;
  487. }
  488. if(M27 && (StartReadyStep == 0) && !X_DRV && !Y_DRV && M21)
  489. {
  490. M27=0;
  491. StartReadyStep = 40;
  492. }
  493. }
  494. if(M20)
  495. {
  496. M20 = 0;
  497. }
  498. //停机复位
  499. if(M22)
  500. {
  501. M22=0;
  502. StartReadyStep=30;
  503. }
  504. //1#褶皱电磁阀
  505. if(M00)
  506. {
  507. M00 = 0;
  508. if(Y13 && X17)
  509. {
  510. Y04 = !Y04;
  511. }
  512. else
  513. {
  514. DZ_SetAlarmCode(ALARM_ZheZhou_Out_Limit); //压脚要抬起
  515. }
  516. }
  517. //2#褶皱电磁阀
  518. if(M01)
  519. {
  520. M01 = 0;
  521. if(Y13 && X17)
  522. {
  523. Y05 = !Y05;
  524. }
  525. else
  526. {
  527. DZ_SetAlarmCode(ALARM_ZheZhou_Out_Limit); //压脚要抬起
  528. }
  529. }
  530. //移动气缸
  531. if(M02)
  532. {
  533. M02 = 0;
  534. if(X15 && Y13 && X17)
  535. {
  536. Y06 = !Y06;
  537. Y07 = Y06;
  538. if(!Y06 && !Y05)
  539. {
  540. if(user_datas[72] > (user_datas[13] + 80))
  541. {
  542. ch = user_datas[72]- user_datas[13] - 80;
  543. if(dwRealPosX > ch)
  544. {
  545. Y02 = 0;
  546. XRunResetOStep = 1;
  547. }
  548. }
  549. }
  550. }
  551. else
  552. {
  553. DZ_SetAlarmCode(ALARM_YuWei_Out_Limit); //压脚要抬起
  554. }
  555. }
  556. //定位针
  557. if(M03)
  558. {
  559. M03 = 0;
  560. if(Y10)
  561. Y10 = 0;
  562. else if((Y07 && !Y04 && !Y05) || !Y07)
  563. {
  564. Y10 = 1;
  565. }
  566. else
  567. {
  568. DZ_SetAlarmCode(ALARM_DinWei_Out_Limit); //定位针
  569. }
  570. }
  571. //压脚气缸
  572. if(M04)
  573. {
  574. M04 = 0;
  575. if(!Y04 && !Y05 && !Y07 &&
  576. (dwRealPosX <= (user_datas[72] - user_datas[13] -80)) ) //要加上褶宽电机位置限制
  577. {
  578. Y13 = !Y13;
  579. }
  580. else //压脚输出条件
  581. {
  582. DZ_SetAlarmCode(ALARM_YaJiao_Out_Limit); //定位针
  583. }
  584. }
  585. /* if(M05)
  586. {
  587. M05=0;
  588. //AxisMovePoint(X_AXIS,2,2000);
  589. AxisMoveTwoPos(X_AXIS,2,2000,1,1000,DIR_N);
  590. }
  591. if(M06)
  592. {
  593. M06=0;
  594. //AxisMovePoint(X_AXIS,10,0);
  595. //AxisMoveTwoPos(X_AXIS,2,4000,20,4000,DIR_N);
  596. }*/
  597. //褶宽电机
  598. //if((XRunResetOStep == 0) && (XRunMovePosStep == 0) && (StartReadyStep == 0))
  599. {
  600. if(M05)
  601. {
  602. Y02 = 1; //控制方向
  603. if(dwRealPosX >= user_datas[67])
  604. {
  605. M05 = 0;
  606. AxisEgmStop(X_AXIS);
  607. XMoto_Flag = 0;
  608. }
  609. else if(XMoto_Flag == 0)
  610. {
  611. XMoto_Flag = 1;
  612. // X轴 运行速度 启动速度 加速度 减速度
  613. AxisContinueMoveAcc(X_AXIS,XMOTOR_HANDRUN_SPEED,DIR_P,XMOTOR_HANDRUN_SPEED/3,15,15);
  614. }
  615. }
  616. else if(M06)
  617. {
  618. Y02 = 0; //控制方向
  619. if(X02) //回到原点要停止
  620. {
  621. M06 = 0;
  622. AxisEgmStop(X_AXIS);
  623. XMoto_Flag = 0;
  624. }
  625. else if(XMoto_Flag == 0)
  626. {
  627. XMoto_Flag = 1;
  628. // X轴 运行速度 启动速度 加速度 减速度
  629. AxisContinueMoveAcc(X_AXIS,XMOTOR_HANDRUN_SPEED,DIR_N,XMOTOR_HANDRUN_SPEED/3,15,15);
  630. }
  631. }
  632. else
  633. {
  634. AxisDecStop(X_AXIS);
  635. XMoto_Flag = 0;
  636. }
  637. }
  638. //褶距电机
  639. //if((YRunResetOStep == 0) && (YRunMovePosStep == 0) && (StartReadyStep == 0))
  640. {
  641. if(M07)
  642. {
  643. Y03 = 1; //控制方向
  644. if(dwRealPosY >= user_datas[68])
  645. {
  646. M07 = 0;
  647. AxisEgmStop(Y_AXIS);
  648. YMoto_Flag = 0;
  649. }
  650. else if(YMoto_Flag == 0)
  651. {
  652. YMoto_Flag = 1;
  653. // Y轴 运行速度 启动速度 加速度 减速度
  654. AxisContinueMoveAcc(Y_AXIS,YMOTOR_HANDRUN_SPEED,DIR_P,YMOTOR_HANDRUN_SPEED/3,15,15);
  655. }
  656. }
  657. else if(M08)
  658. {
  659. Y03 = 0; //控制方向
  660. if(X03)
  661. {
  662. M08 = 0;
  663. AxisEgmStop(Y_AXIS);
  664. }
  665. else if(YMoto_Flag == 0)
  666. {
  667. YMoto_Flag = 1;
  668. // Y轴 运行速度 启动速度 加速度 减速度
  669. AxisContinueMoveAcc(Y_AXIS,YMOTOR_HANDRUN_SPEED,DIR_N,YMOTOR_HANDRUN_SPEED/3,15,15);
  670. }
  671. }
  672. else
  673. {
  674. AxisDecStop(Y_AXIS);
  675. YMoto_Flag = 0;
  676. }
  677. }
  678. if(M14)
  679. {
  680. M14 = 0;
  681. XRunResetOStep = 1; //两个轴回原点
  682. }
  683. if(M15)
  684. {
  685. M15 = 0;
  686. YRunResetOStep = 1;//两个轴回原点
  687. }
  688. //M16 M17为测试位置用
  689. if(M16)
  690. {
  691. M16 = 0;
  692. if(dwRealPosX < user_datas[70])
  693. {
  694. Y02 = 1; //控制方向
  695. axis_cw(axis_x);
  696. }
  697. else
  698. {
  699. Y02 = 0;
  700. axis_ccw(axis_x);
  701. }
  702. XRunMovePosStep = 1;
  703. AxisMovePoint(X_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[70]);
  704. // AxisMovePosAccDec(X_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[70],XMOTOR_HANDRUN_SPEED/5,80,80 );
  705. }
  706. if(M17)
  707. {
  708. M17 = 0;
  709. if(dwRealPosY < user_datas[71])
  710. {
  711. Y03 = 1; //控制方向
  712. axis_cw(axis_y);
  713. }
  714. else
  715. {
  716. Y03 = 0;
  717. axis_ccw(axis_y);
  718. }
  719. YRunMovePosStep = 1;
  720. AxisMovePoint(Y_AXIS,YMOTOR_HANDRUN_SPEED,user_datas[71]);
  721. // AxisMovePosAccDec(Y_AXIS,YMOTOR_HANDRUN_SPEED,user_datas[71],YMOTOR_HANDRUN_SPEED/5,80,80);
  722. }
  723. if(M09)
  724. {
  725. M09 = 0;
  726. //压脚回到原位并已抬起
  727. if(!Y04 && !Y05 && !Y10
  728. && X17 && Y13&& X14 && X15)
  729. {
  730. Y06 = 1;
  731. Y07 = 1;
  732. bDZJiaoZhunState = 1;
  733. // bDZRunning = 1;
  734. // AutoRunStep = 2;
  735. //褶宽电机
  736. XRunMovePosStep = 1;
  737. if(dwRealPosX < user_datas[57])
  738. {
  739. Y02 = 1; //控制方向
  740. axis_cw(axis_x);
  741. }
  742. else
  743. {
  744. Y02 = 0;
  745. axis_ccw(axis_x);
  746. }
  747. AxisMovePoint(X_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[57]);
  748. //褶距电机
  749. YRunMovePosStep = 1;
  750. if(dwRealPosY < user_datas[61])
  751. {
  752. Y03 = 1; //控制方向
  753. axis_cw(axis_y);
  754. }
  755. else
  756. {
  757. Y03 = 0;
  758. axis_ccw(axis_y);
  759. }
  760. AxisMovePoint(Y_AXIS,YMOTOR_HANDRUN_SPEED,user_datas[61]);
  761. }
  762. else
  763. {
  764. DZ_SetAlarmCode(ALARM_Start_Limit);//起动条件
  765. }
  766. }
  767. if(M11)
  768. {
  769. M10 = 0;
  770. bDZJiaoZhunState = 0;
  771. bDZRunning = 0;
  772. StartReadyStep = 4; //变为正常加工位
  773. }
  774. }
  775. //停止循环运行模式
  776. if(SycleRunMode)
  777. {
  778. if(M23)
  779. {
  780. SycleRunMode=0;
  781. M23=0;
  782. }
  783. }
  784. }
  785. void BRUCE_DaZhe_AutoAction(void)
  786. {
  787. unsigned short ch;
  788. if(bDZRunning)
  789. {
  790. switch(AutoRunStep)
  791. {
  792. case 1://褶宽电机,褶距电机定位
  793. AutoRunStep = 2;
  794. break;
  795. case 2: //两个电机已经定位结束,等待脚踏
  796. if((!X_DRV) && (!Y_DRV))
  797. {
  798. Y05 = 1;
  799. AutoRunStep = 3;
  800. AutoRunDelay = dwTickCount + 1500; //褶皱输出到位时间警告
  801. }
  802. break;
  803. case 3:
  804. if(!X06 && X07)
  805. {
  806. AutoRunDelay = dwTickCount + user_datas[38]; //送料延时
  807. AutoRunStep = 4;
  808. }
  809. else if(dwTickCount >= AutoRunDelay)
  810. {
  811. DZ_SetAlarmCode(ALARM_ZheZhou_DaoWei); //褶皱输出不到位
  812. Y05 = 0;
  813. bDZRunning = 0;
  814. AutoRunStep = 0;
  815. }
  816. break;
  817. case 4:
  818. if(dwTickCount >= AutoRunDelay)
  819. {
  820. // if(M25)//为测试断点用
  821. // {
  822. M25 = 0;
  823. Y06 = 0;
  824. Y07 = 0;
  825. AutoRunStep = 5;
  826. AutoRunDelay = dwTickCount + 1500; //移位回到位时间警告
  827. // }
  828. }
  829. break;
  830. case 5:
  831. //移位回到原点
  832. if(!X13 && X12)
  833. {
  834. // if(M25)//为测试断点用
  835. // {
  836. M25 = 0;
  837. AutoRunStep = 6;
  838. AutoRunDelay = dwTickCount + user_datas[39]; //定位针延时下降
  839. // }
  840. }
  841. else if(dwTickCount >= AutoRunDelay)
  842. {
  843. DZ_SetAlarmCode(ALARM_ZheZhou_DaoWei); //褶皱输出不到位
  844. bDZRunning = 0;
  845. AutoRunStep = 0;
  846. XRunResetOStep = 1; //褶宽回原点
  847. }
  848. break;
  849. case 6:
  850. if(dwTickCount >= AutoRunDelay)
  851. {
  852. // // if(M25)//为测试断点用
  853. // // {
  854. M25 = 0;
  855. Y10 = 1;
  856. AutoRunStep = 7;
  857. AutoRunDelay = dwTickCount + 1500; //定位针离开原点时间警告
  858. // // }
  859. }
  860. break;
  861. case 7:
  862. if(!X14)//定位针离开
  863. {
  864. AutoRunDelay = dwTickCount + user_datas[66];
  865. AutoRunStep = 8;
  866. }
  867. else if(dwTickCount >= AutoRunDelay) //定位针没法离开
  868. {
  869. DZ_SetAlarmCode(ALARM_FenZhen_YuanWei); //定位针没法离开
  870. Y10 = 0;
  871. bDZRunning = 0;
  872. AutoRunStep = 0;
  873. }
  874. break;
  875. case 8:
  876. if(dwTickCount >= AutoRunDelay)
  877. {
  878. Y05 = 0; // 褶皱气缸退
  879. AutoRunStep = 9;
  880. Y02 = 0; //控制方向
  881. axis_ccw(axis_x);
  882. // XRunMovePosStep = 1;
  883. //电机离开
  884. //两段速度移动距离,先快速回来只剩80MM时变为慢速
  885. if(dwRealPosX > 120)
  886. AxisMoveTwoPos(X_AXIS,XMOTOR_AUTORUN_SPEED,(dwRealPosX - 120),XMOTOR_HANDRUN_SPEED,150,DIR_N);
  887. XRunResetOStep = 1; //褶宽回原点
  888. AutoRunDelay = dwTickCount + 1500;
  889. }
  890. break;
  891. case 9:
  892. if(X06 && !X07) //褶皱气缸回到位
  893. {
  894. if(1)
  895. {
  896. M25 = 0;
  897. if(dwRealPosX <= (user_datas[72] - user_datas[13] -80)) //褶宽电机已经离开
  898. {
  899. Y13 = 0; //关闭时压下
  900. AutoRunStep = 10;
  901. AutoRunDelay = dwTickCount + 700;
  902. }
  903. }
  904. }
  905. else if(dwTickCount >= AutoRunDelay) //褶皱气缸回原位异常
  906. {
  907. DZ_SetAlarmCode(ALARM_ZheZhou_YuanWei);
  908. bDZRunning = 0;
  909. AutoRunStep = 0;
  910. }
  911. break;
  912. case 10:
  913. if(!X17) //压脚到位
  914. {
  915. AutoRunStep = 11;
  916. AutoRunDelay = dwTickCount + user_datas[40]; //定位针延时上升
  917. }
  918. else if(dwTickCount >= AutoRunDelay) //压脚到位异常
  919. {
  920. DZ_SetAlarmCode(ALARM_YaJiao_YuanWei);
  921. bDZRunning = 0;
  922. AutoRunStep = 0;
  923. }
  924. break;
  925. case 11:
  926. if(dwTickCount >= AutoRunDelay) //延时退定位针
  927. {
  928. AutoRunStep = 12;
  929. Y10 = 0;
  930. AutoRunDelay = dwTickCount + 700;
  931. }
  932. break;
  933. case 12:
  934. if(X14) //定位针原位
  935. {
  936. AutoRunStep = 13;
  937. AutoRunDelay = dwTickCount + user_datas[41]; //延时启动加工
  938. }
  939. else if(dwTickCount >= AutoRunDelay) //定位针回原位异常
  940. {
  941. DZ_SetAlarmCode(ALARM_FenZhen_Left); //定位针没法离开
  942. Y10 = 0;
  943. bDZRunning = 0;
  944. AutoRunStep = 0;
  945. }
  946. break;
  947. case 13:
  948. if(dwTickCount >= AutoRunDelay)
  949. {
  950. // if(M25)
  951. // {
  952. M25 = 0;
  953. AutoRunStep = 14;
  954. Y12 = 1;
  955. AutoRunDelay = dwTickCount + 40; //延时启动加工
  956. // }
  957. }
  958. break;
  959. case 14:
  960. if(dwTickCount >= AutoRunDelay)
  961. {
  962. AutoRunStep = 15;
  963. Y12 = 0;
  964. }
  965. break;
  966. case 15:
  967. if(X15_UP) //加工结束后
  968. {
  969. AutoRunStep = 16;
  970. AutoRunDelay = dwTickCount + 60;
  971. }
  972. break;
  973. case 16:
  974. if(dwTickCount >= AutoRunDelay)
  975. {
  976. AutoRunStep = 17;
  977. Y13 = 1; //
  978. AutoRunDelay = dwTickCount + 700;
  979. }
  980. break;
  981. case 17:
  982. if(X17) //压脚上升到位
  983. {
  984. if(XRunResetOStep== 0)
  985. {
  986. Y06 = 1; //移位退出
  987. Y07 = 1;
  988. AutoRunStep = 18;
  989. //电机回到褶宽处
  990. StartReadyStep = 4;
  991. AutoRunDelay = dwTickCount + 1500;
  992. }
  993. }
  994. else if(dwTickCount >= AutoRunDelay) //压脚原位异常
  995. {
  996. DZ_SetAlarmCode(ALARM_YaJiao_YuanWei); //压脚原位
  997. bDZRunning = 0;
  998. AutoRunStep = 0;
  999. }
  1000. break;
  1001. case 18:
  1002. if(X13 && !X12)
  1003. {
  1004. if(!X_DRV && (StartReadyStep == 0))
  1005. {
  1006. if(SycleRunMode)
  1007. {
  1008. AutoRunStep = 19;
  1009. AutoRunDelay = dwTickCount + 1500;
  1010. }
  1011. else
  1012. {
  1013. bDZRunning = 0;
  1014. AutoRunStep = 0;
  1015. }
  1016. runcount++;
  1017. user_datas[74] = runcount&0xffff;
  1018. user_datas[75] = (runcount>>16)&0xffff;
  1019. }
  1020. }
  1021. else if(dwTickCount >= AutoRunDelay)
  1022. {
  1023. DZ_SetAlarmCode(ALARM_YuWei_DaoWei); //移位输出不到位
  1024. }
  1025. break;
  1026. case 19:
  1027. if(dwTickCount >= AutoRunDelay)
  1028. {
  1029. bDZRunning = 1;
  1030. AutoRunStep = 1;
  1031. }
  1032. break;
  1033. }
  1034. }
  1035. }
  1036. // 检测是否踏了脚踏开关
  1037. void BRUCE_DaZheJiCheckStart(void)
  1038. {
  1039. unsigned short ch;
  1040. //停止
  1041. if(X11_UP || M26)
  1042. {
  1043. M26 = 0;
  1044. AxisEgmStop(X_AXIS);
  1045. AxisEgmStop(Y_AXIS);
  1046. bDZRunning = 0;
  1047. bDZJiaoZhunState = 0;
  1048. AutoRunStep = 0;
  1049. XRunResetOStep = 0;
  1050. XRunMovePosStep = 0;
  1051. YRunResetOStep = 0;
  1052. YRunMovePosStep = 0;
  1053. StartReadyStep = 0;
  1054. }
  1055. }
  1056. unsigned char ComPareLength(void)
  1057. {
  1058. }
  1059. //基准
  1060. void DaZheJi_JiZhun(void)
  1061. {
  1062. static long save_buff,gou_zhen_buff,zipper_length_buff;
  1063. static unsigned long zipper_length;
  1064. short *revise_buff;
  1065. }
  1066. // SetAlarmCode(MXC_ALARM_ADDR,0); //警告清零
  1067. //基准参数没设定的情况下要配默认值
  1068. //压脚回到原位并已抬起
  1069. // if(!Y04 && !Y05 && !Y10 && !Y06 && !Y07 && X12
  1070. // && X14 && X15)
  1071. // {
  1072. // Y13 = 1;
  1073. // }
  1074. //系统上电复位
  1075. void RetSetSyStem(void)
  1076. {
  1077. switch(ReSetSysTemStep)
  1078. {
  1079. case 1:
  1080. //上电回位
  1081. XRunResetOStep = 1;//褶宽电机回原点
  1082. YRunResetOStep = 1;//褶距电机回原点启动
  1083. ReSetSysTemStep = 2;
  1084. break;
  1085. case 2:
  1086. if(!X_DRV && !Y_DRV && (AutoRunStep == 0))
  1087. {
  1088. if(X15) //
  1089. {
  1090. ReSetSysTemStep = 2;
  1091. }
  1092. else
  1093. {
  1094. Y04 = 0;
  1095. Y05 = 0;
  1096. Y06 = 0;
  1097. Y07 = 0;
  1098. Y10 = 0;
  1099. ReSetSysTemStep = 2;
  1100. }
  1101. }
  1102. break;
  1103. case 3:
  1104. break;
  1105. }
  1106. }
  1107. //启动准备
  1108. void StartReady(void)
  1109. {
  1110. unsigned short ch;
  1111. switch(StartReadyStep)
  1112. {
  1113. case 1:
  1114. Y12 = 1;
  1115. cDelayTime4 = dwTickCount + 50;
  1116. StartReadyStep = 2;
  1117. break;
  1118. case 2:
  1119. if((dwTickCount >= cDelayTime4))
  1120. {
  1121. Y12 = 0;
  1122. StartReadyStep = 3;
  1123. }
  1124. break;
  1125. case 3:
  1126. if(X15_UP) //机台回到准备就绪点
  1127. {
  1128. Y13 = 1; //压脚抬起
  1129. StartReadyStep = 4;
  1130. }
  1131. break;
  1132. case 4:
  1133. if(X17)
  1134. {
  1135. StartReadyStep = 5;
  1136. //褶宽电机位置动作
  1137. if(dwRealPosX < user_datas[72])
  1138. {
  1139. Y02 = 1; //控制方向
  1140. AXIS_SET_DIR(axis_x,DIR_P);
  1141. }
  1142. else
  1143. {
  1144. Y02 = 0;
  1145. AXIS_SET_DIR(axis_x,DIR_N);
  1146. }
  1147. if(dwRealPosY < user_datas[73])
  1148. {
  1149. Y03 = 1; //控制方向
  1150. AXIS_SET_DIR(axis_y,DIR_P);
  1151. }
  1152. else
  1153. {
  1154. Y03 = 0;
  1155. AXIS_SET_DIR(axis_y,DIR_N);
  1156. }
  1157. if(bDZJiaoZhunState)
  1158. {
  1159. AxisMovePoint(X_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[57]);
  1160. AxisMovePoint(Y_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[61]);
  1161. }
  1162. else
  1163. {
  1164. if(dwRealPosX != user_datas[72])
  1165. AxisMovePoint(X_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[72]); //褶宽电机回到加工位
  1166. if((dwRealPosY != user_datas[73]) || (dwRealPosY == 0))
  1167. AxisMovePoint(Y_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[73]); //褶距电机回到加工位
  1168. }
  1169. Y06 = 1;
  1170. Y07 = 1;
  1171. }
  1172. break;
  1173. case 5:
  1174. if(!X_DRV && !Y_DRV)
  1175. {
  1176. StartReadyStep = 0;
  1177. }
  1178. break;
  1179. //系统复位
  1180. // if(!X17 && !Y07 && X06 && !Y04 && !Y05 && !X_DRV
  1181. // 移动限位 定位针原位
  1182. // && !X13 && X12 && X14)
  1183. case 20:
  1184. if(X15)
  1185. {
  1186. Y13 = 1;
  1187. }
  1188. if(X17)
  1189. {
  1190. StartReadyStep = 21;
  1191. Y04 = 0;
  1192. Y05 = 0;
  1193. Y06 = 1;
  1194. Y07 = 1;
  1195. }
  1196. break;
  1197. case 21:
  1198. if(X17)
  1199. {
  1200. StartReadyStep = 22;
  1201. //褶宽电机位置动作
  1202. if(dwRealPosX < user_datas[72])
  1203. {
  1204. Y02 = 1; //控制方向
  1205. AXIS_SET_DIR(axis_x,DIR_P);
  1206. }
  1207. else
  1208. {
  1209. Y02 = 0;
  1210. AXIS_SET_DIR(axis_x,DIR_N);
  1211. }
  1212. if(dwRealPosY < user_datas[73])
  1213. {
  1214. Y03 = 1; //控制方向
  1215. AXIS_SET_DIR(axis_y,DIR_P);
  1216. }
  1217. else
  1218. {
  1219. Y03 = 0;
  1220. AXIS_SET_DIR(axis_y,DIR_N);
  1221. }
  1222. if(bDZJiaoZhunState)
  1223. {
  1224. AxisMovePoint(X_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[57]);
  1225. AxisMovePoint(Y_AXIS,YMOTOR_HANDRUN_SPEED,user_datas[61]);
  1226. }
  1227. else
  1228. {
  1229. if(dwRealPosX != user_datas[72])
  1230. {
  1231. AxisMovePoint(X_AXIS,XMOTOR_HANDRUN_SPEED,user_datas[72]); //褶宽电机回到加工位
  1232. }
  1233. // if(!bDZRunning)
  1234. AxisMovePoint(Y_AXIS,YMOTOR_HANDRUN_SPEED,user_datas[73]); //褶距电机回到加工位
  1235. }
  1236. }
  1237. break;
  1238. case 22:
  1239. if(!X_DRV && !Y_DRV)
  1240. {
  1241. StartReadyStep = 0;
  1242. // AutoRunStep = 1;
  1243. // bDZRunning = 1;
  1244. }
  1245. break;
  1246. case 30://关机动作流程
  1247. if(!X13 && X12)
  1248. {
  1249. StartReadyStep = 31;
  1250. XRunResetOStep = 1;
  1251. }
  1252. else
  1253. {
  1254. if(X15 && Y13 && X17)//移动气缸归位条件满足
  1255. {
  1256. Y06 = 0;
  1257. Y07 = 0;
  1258. if(!Y06 && !Y05)
  1259. {
  1260. if(user_datas[72] > (user_datas[13] + 80))
  1261. {
  1262. ch = user_datas[72]- user_datas[13] - 80;
  1263. if(dwRealPosX > ch)
  1264. {
  1265. Y02 = 0;
  1266. XRunResetOStep = 1;
  1267. }
  1268. }
  1269. }
  1270. StartReadyStep = 31;
  1271. }
  1272. else
  1273. {
  1274. DZ_SetAlarmCode(ALARM_YuWei_Out_Limit); //压脚要抬起
  1275. }
  1276. }
  1277. break;
  1278. case 31:
  1279. if(!X13 && X12 && (XRunResetOStep == 0))//移动气缸原点
  1280. {
  1281. M21=0;//停机状态显示
  1282. ShutDownDelay = dwTickCount + 2000;
  1283. StartReadyStep = 32;
  1284. }
  1285. break;
  1286. case 32:
  1287. if(dwTickCount >= ShutDownDelay)
  1288. {
  1289. Y14=1;//断电
  1290. Y15=1;//断电
  1291. StartReadyStep=0;
  1292. }
  1293. break;
  1294. case 40://离机复位
  1295. if(!X13 && X12)
  1296. {
  1297. StartReadyStep = 41;
  1298. XRunResetOStep = 1;
  1299. }
  1300. else
  1301. {
  1302. if(X15 && Y13 && X17)//移动气缸归位条件满足
  1303. {
  1304. Y06 = 0;
  1305. Y07 = 0;
  1306. if(!Y06 && !Y05)
  1307. {
  1308. if(user_datas[72] > (user_datas[13] + 80))
  1309. {
  1310. ch = user_datas[72]- user_datas[13] - 80;
  1311. if(dwRealPosX > ch)
  1312. {
  1313. Y02 = 0;
  1314. XRunResetOStep = 1;
  1315. }
  1316. }
  1317. }
  1318. StartReadyStep = 41;
  1319. }
  1320. else
  1321. {
  1322. DZ_SetAlarmCode(ALARM_YuWei_Out_Limit); //压脚要抬起
  1323. }
  1324. }
  1325. break;
  1326. case 41:
  1327. if(!X13 && X12 && (XRunResetOStep == 0))//移动气缸原点
  1328. {
  1329. Y13=0;//压脚压下
  1330. StartReadyStep = 42;
  1331. }
  1332. break;
  1333. case 42:
  1334. if(!X17)//压脚压下到位
  1335. {
  1336. M21=0;//停机状态显示
  1337. StartReadyStep = 0;
  1338. }
  1339. break;
  1340. }
  1341. }
  1342. //故障报警
  1343. void BRUCE_DaZheJi_CheckAlarm(void)
  1344. {
  1345. static unsigned long alarmdelay1,alarmdelay2,alarmdelay3,alarmdelay4,alarmdelay5,alarmdelay6;
  1346. //褶皱传感器原点故障
  1347. if((Y05 && X06)||(!Y05 && !X06))
  1348. {
  1349. if(dwTickCount > alarmdelay1 + 2000)
  1350. {
  1351. DZ_SetAlarmCode(ALARM_ZheZhou_CGQ_YuanDian);
  1352. }
  1353. }
  1354. else
  1355. {
  1356. alarmdelay1=dwTickCount;
  1357. }
  1358. //褶皱传感器到位故障
  1359. if((Y05 && !X07)||(!Y05 && X07))
  1360. {
  1361. if(dwTickCount > alarmdelay2 + 2000)
  1362. {
  1363. DZ_SetAlarmCode(ALARM_ZheZhou_CGQ_Daowei);
  1364. }
  1365. }
  1366. else
  1367. {
  1368. alarmdelay2=dwTickCount;
  1369. }
  1370. //移位传感器原点故障
  1371. if((Y07 && X12)||(!Y07 && !X12))
  1372. {
  1373. if(dwTickCount > alarmdelay3 + 2000)
  1374. {
  1375. DZ_SetAlarmCode(ALARM_YiWei_CGQ_YuanDian);
  1376. }
  1377. }
  1378. else
  1379. {
  1380. alarmdelay3=dwTickCount;
  1381. }
  1382. //移位传感器到位故障
  1383. if((Y07 && !X13)||(!Y07 && X13))
  1384. {
  1385. if(dwTickCount > alarmdelay4 + 2000)
  1386. {
  1387. DZ_SetAlarmCode(ALARM_YiWei_CGQ_Daowei);
  1388. }
  1389. }
  1390. else
  1391. {
  1392. alarmdelay4=dwTickCount;
  1393. }
  1394. //定位针传感器故障
  1395. if((Y10 && X14)||(!Y10 && !X14))
  1396. {
  1397. if(dwTickCount > alarmdelay5 + 2000)
  1398. {
  1399. DZ_SetAlarmCode(ALARM_DingWeiZhen_CGQ);
  1400. }
  1401. }
  1402. else
  1403. {
  1404. alarmdelay5=dwTickCount;
  1405. }
  1406. //压脚传感器故障
  1407. if((Y13 && !X17)||(!Y13 && X17))
  1408. {
  1409. if(dwTickCount > alarmdelay6 + 2000)
  1410. {
  1411. DZ_SetAlarmCode(ALARM_YaJiao_CGQ);
  1412. }
  1413. }
  1414. else
  1415. {
  1416. alarmdelay6=dwTickCount;
  1417. }
  1418. }
  1419. #endif