CsTieBuAction_GZXY.c 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191
  1. #include "XT11033.h"
  2. #include "sfr_r82d.h"
  3. extern char ReadTimeData(unsigned short ReadMode);
  4. /**************************************
  5. ** 函数名称:
  6. ** 函数功能:
  7. 新款超声贴布机
  8. ** 输入输出说明:
  9. 输入:
  10. //输入说明
  11. //X000 起动
  12. //X001 停止
  13. //X002 手动钩针
  14. //X003 手动分胶
  15. //X004 手动合模
  16. //X005 手动送胶
  17. //X006 手动超声
  18. //X007 自动位 (有屏的情况下为温控)
  19. //X010 上超
  20. //X011 过链接近开关
  21. //X012 前导板(分胶)前磁感
  22. //X013 前导板(分胶)后磁感
  23. //X014 下冲到位
  24. //X015 新款勾针复位,老款合模到位
  25. //X016 送胶到位磁感
  26. //X017 退胶到位磁感
  27. //X020 拖带到位
  28. //X021 缺胶信号
  29. //输出说明
  30. //Y000 离合器 (也控制方向,1往前,0往后)
  31. //Y001 勾针阀
  32. //Y002 导板阀(分胶)
  33. //Y003 下冲气缸
  34. //Y004 送胶阀
  35. //Y005 新款(压带阀)老款下模(发振部分)
  36. //Y006 吹气(昌盛 吹气,鑫业 夹胶)
  37. //Y007 计数
  38. //Y010    音波
  39. //Y011 拖带电机(继电器)
  40. D+ 接驱动器的(MF+或EN+)信号
  41. D- 接驱动器的(MF-或EN-)信号
  42. P+ 接驱动器的(PULSE+)信号
  43. P- 接驱动器的(PULSE-)信号
  44. P00 延时超声
  45. P01 延时上勾针
  46. P02   送胶到位延时返回
  47. P03 压带输出
  48. P04 延时分胶
  49. P05 延时停离合(打孔型时二次定位)
  50. P06 超声时间
  51. P07 固化时间
  52. P08 吹气时间
  53. P09 送胶时间(滚轮方式并且没有送胶前信号)
  54. P10 电机起动速度
  55. P11 电机加速度
  56. P12 最高速度
  57. P13   空位速度
  58. P14   送胶方式 0 气缸,1 滚轮
  59. P15 下模下模方式 0 下模活动,1下模不动
  60. P16 退勾针方式  0 先超声后下勾针,1 先下勾针后超声
  61. P17 双勾针选择 0 双勾针(新款)   1 单勾针
  62. P18 二次拖带选择 0 普通拖带  1 二次拖带() 
  63. P19 滚轮送胶时到位信号是否有 0 有前限位 1 没前限位
  64. P20 拖带电机定位后是否反转(步进型有效) 0 不反转 1 反转
  65. P21 是否有导板阀(分胶阀)(0,有分胶阀,1没分胶阀)
  66. P22 反转速度
  67. P24   拖带自动停机时间(防坏压轮胶)
  68. P25   送胶完成后延时二次拖带
  69. P26 打孔型时一次定位时间
  70. P27 电机反转脉冲
  71. P28 温度到达超声时减少的时间(有屏状态才有效)
  72. P29 自动测长度时自动允许拉带长度偏差(设0 无效)
  73. P30 冷却时间
  74. P63 当用编码器时的编码使能,位0最上一个有效,位1中间一个有效,位2下面一个有效
  75. P64 超声时间参数方式选择,0老款拔码,1编码,2内部按键设(或通信设定)
  76. P65   接线方式(0 昌盛, 1 鑫业, 2 盈兴)
  77. P66   拔码时间顺序(0 正常, 1 最后一组为超声时间)
  78. ***************************************/
  79. #define ChangSheng 0 //昌盛代码
  80. #define XinYe 1 //鑫业代码
  81. #define YinXin 2 //鑫业代码
  82. #define SongJiaoMode cDataArea[14] //送胶方式
  83. #define XiaMoMode cDataArea[15] //下模方式
  84. #define TuiGZMode cDataArea[16] //退勾针方式
  85. #define SGZSelect cDataArea[17] //双勾针选择
  86. #define TWOTDSelect cDataArea[18] //二次拖带选择
  87. #define SongJiaoDaoWei cDataArea[19] //送胶时到位信号
  88. #define DianJiFanZ cDataArea[20] //电机是否反转
  89. #define FengJiaoSelect cDataArea[21] //是否有分胶阀
  90. #define CJSelect cDataArea[65] //厂家配置
  91. #define BMSeq cDataArea[66] //拔码时间顺序
  92. //警告
  93. #define NoZip_W 1 //没拉链警告
  94. #define TuiGZ_W 2 //退勾针不到位警告
  95. #define GZDaoWei_W 3 //勾针不到位警告
  96. #define SongJiao_W 4 //送胶不到位
  97. #define TuiJiao_W 5 //退胶不到位
  98. #define TuiFenJiao_W 6 //退分胶不到位
  99. #define NoJiao_W 7 //胶已用完
  100. #define ZipperLengPRO_W 8 //拉链长度保护
  101. #define FengJiao_W 9 //分胶不到
  102. #define HeMoDW_W 10 //合模不到
  103. #define Start_NOK 11
  104. void CSTB_SongJiao_CS(void);
  105. void CSTB_Auto_Con_CS(void);
  106. void CSTB_HeMo_CS_CS(void);
  107. void Hand_Action(void);
  108. void Auto_Run(void);
  109. void CSTieBu_Step_HMIJi(void)
  110. {
  111. unsigned short ch,j;
  112. WorkFreqTab[0] = 16059 *2;
  113. WorkFreqTab[1] = 14059 *2;
  114. for(ch = 0;ch < 80;ch++)
  115. {
  116. WorkFreqTab[ch + 2] = FreqTab[ch];
  117. }
  118. if(CJSelect == XinYe)//鑫业的Y06为夹胶
  119. {
  120. if(X17)
  121. SETQ06;
  122. }
  123. SETDR(); //步进电机松
  124. while(1)
  125. {
  126. cDataArea[121] = cStepMByte;
  127. cDataArea[122] = cStepMByte1;
  128. cDataArea[123] = cStepMByte2;
  129. cDataArea[124] = cStepMByte3;
  130. cDataArea[125] = cStepMByte4;
  131. cDataArea[126] = cStepMByte5;
  132. RunState();
  133. WriteOutput();
  134. Feed_dog();
  135. BlinkRunLED();
  136. ReadInput();
  137. CheckKey();
  138. if(cHMI_Test == 0)
  139. {
  140. if(!Y10 && (tstart0_trdstr == 0))
  141. {
  142. if(ReadTimeData(cDataArea[64]))
  143. {
  144. cDataArea[5] = cDataArea[60];
  145. if(BMSeq == 1)
  146. {
  147. cDataArea[6] = cDataArea[62];
  148. cDataArea[7] = cDataArea[61];
  149. }
  150. else
  151. {
  152. cDataArea[6] = cDataArea[61];
  153. cDataArea[7] = cDataArea[62];
  154. }
  155. }
  156. }
  157. }
  158. CheckReceData();
  159. CSTB_HeMo_CS_CS(); //合模超声动作
  160. CSTB_SongJiao_CS(); //送胶动作
  161. CSTB_Auto_Con_CS(); //电机拖带动作
  162. if((b10ms) != 0)
  163. {
  164. if(cCountTime > 0)
  165. {
  166. cCountTime--;
  167. if(cCountTime == 0)
  168. CLRQ07;
  169. }
  170. }
  171. if(M15) //M15 故障确定
  172. {
  173. M15 = 1;//cMidleCoil[0] &= ~(1<<15); //M13,M15
  174. cDataArea[100] = 0;
  175. cDataArea[75] = 1;
  176. cDelayTime7 = dwTickCount + (unsigned long)1010;
  177. }
  178. if(M01) //清产量
  179. {
  180. if(dwTickCount >= cDelayTime8)
  181. {
  182. M01 = 0;//cMidleCoil[0] &= ~(1<<1);
  183. ClrcToTal();
  184. }
  185. }
  186. else
  187. {
  188. cDelayTime8 = dwTickCount + (unsigned long)120*10;
  189. }
  190. //设定音波参数使能
  191. if(M05)
  192. {
  193. if(dwTickCount >= cDelayTime9)
  194. {
  195. M05 = 0;//cMidleCoil[0] &= ~(1<<5); //M5
  196. M06 = 1;//cMidleCoil[0] |= (1<<6); //M6
  197. cDelayTime10 = dwTickCount + (unsigned long)5000;
  198. }
  199. }
  200. else
  201. cDelayTime9 = dwTickCount + (unsigned long)1300;
  202. if(M06 && (dwTickCount >= cDelayTime10))
  203. {
  204. M06 = 0;//cMidleCoil[0] &= ~(1<<6); //M6
  205. }
  206. if(CJSelect == ChangSheng)
  207. {
  208. if(Y06 && (dwTickCount >= cDelayTime6))
  209. {
  210. CLRQ06;
  211. }
  212. }
  213. else if(CJSelect == XinYe)
  214. {
  215. if(Y11 && (dwTickCount >= cDelayTime6))
  216. {
  217. CLRQ11;
  218. }
  219. }
  220. //停止
  221. if(X01 || (X07_DW && (cHMI_Test == 0)) || bStop || M14)
  222. {
  223. if(X01)
  224. {
  225. // cMidleCoil[1] = 0;
  226. // cDataArea[100] = 0;
  227. // cDataArea[101] = 0;
  228. }
  229. M19 = 0;
  230. M14 = 0;
  231. M15 = 0;//cMidleCoil[0] &= ~0x8000;
  232. M02 = 0;//
  233. cOutVal[1].byte = 0;
  234. cOutVal[0].byte &= 0xc0; //Y07,Y06 不能关
  235. cStepMByte = 0;
  236. cStepMByte1 = 0;
  237. cStepMByte2 = 0;
  238. cStepMByte3 = 0;
  239. cStepMByte4 = 0;
  240. bRunning = 0;
  241. StopPWM();
  242. bStop = 0;
  243. SETDR(); //步进电机松
  244. if(cHMI_Test == 0)
  245. cCountTime = 5;
  246. else //冷却时间
  247. {
  248. cCountTime = cDataArea[30] * 100 + 2;
  249. }
  250. cOneTimes = 0;
  251. }
  252. if((X00_UP || M00 || M16) && !X01)
  253. {
  254. M00 = 0;//cMidleCoil[0] &= ~(1<<0);
  255. //分胶 送胶 分胶前 分胶后 送胶到位 退胶到位 双勾针方式时勾针要退到位       单勾针方式
  256. if((!Y02) && (!Y04) && (!X12) && (X13 || FengJiaoSelect) && (((!X16) && X17) || (SongJiaoMode == 1)) && (((SGZSelect == 0) && X15 && !X20) || (SGZSelect == 1))
  257. && ((X07 && (cHMI_Test == 0)) || cHMI_Test) && !bRunning && (!Y01 || (TWOTDSelect == 0) || SongJiaoMode))
  258. {
  259. bRunning = 1;
  260. cStepMByte = 1;
  261. M02 = 1;//cMidleCoil[0] |= (1<<2);
  262. cDataArea[100] = 0;
  263. cOneTimes = 0;
  264. cCountTime = 0;
  265. if(M16)
  266. {
  267. cOneTimes = 1;
  268. M17 = 1;
  269. M02 = 0;
  270. }
  271. if(cHMI_Test == 1)
  272. SETQ07; //计数器输出
  273. else
  274. CLRQ07;
  275. }
  276. else if(!bRunning)
  277. {
  278. cDataArea[75] = ActionPage;
  279. cDataArea[100] = Start_NOK;
  280. bStop = 1;
  281. }
  282. M16 = 0;
  283. M00 = 0;
  284. }
  285. //手动模式
  286. if(((!X07 && (cHMI_Test == 0)) ||cHMI_Test) && !bRunning && !X01)
  287. {
  288. if(X07_DW && (cHMI_Test == 0))
  289. {
  290. CLRQ00;
  291. CLRQ01;
  292. CLRQ02;
  293. CLRQ03;
  294. CLRQ04;
  295. CLRQ05;
  296. if(CJSelect == XinYe)//鑫业的Y06为夹胶
  297. {
  298. if(X17 && !Y04)
  299. SETQ06;
  300. }
  301. else
  302. CLRQ06;
  303. CLRQ10;
  304. bRunning = 0;
  305. cStepMByte1 = 0;
  306. cStepMByte2 = 0;
  307. cStepMByte3 = 0;
  308. cStepMByte4 = 0;
  309. }
  310. Hand_Action();
  311. }
  312. else if(bRunning)
  313. {
  314. Auto_Run();
  315. }
  316. else if((X07_UP && (cHMI_Test == 0))|| X01)
  317. {
  318. CLRQ00;
  319. CLRQ01;
  320. CLRQ02;
  321. CLRQ03;
  322. CLRQ04;
  323. CLRQ05;
  324. if(CJSelect == XinYe)//鑫业的Y06为夹胶
  325. {
  326. if(X17)
  327. SETQ06;
  328. }
  329. else
  330. CLRQ06;
  331. CLRQ10;
  332. bRunning = 0;
  333. }
  334. if(CJSelect != XinYe)
  335. {
  336. if(Y10)
  337. SETQ11;
  338. else
  339. CLRQ11;
  340. }
  341. /* if((cHMI_Test == 0) && (cDataArea[100] != 0))
  342. {
  343. if(cDataArea[75] == 6) //输入
  344. cDataArea[100] += 48;
  345. else if(cDataArea[75] == 7) //输出
  346. cDataArea[100] += 32;
  347. }
  348. */
  349. }
  350. }
  351. void StartCuiQi(void)
  352. {
  353. if(CJSelect == ChangSheng)//鑫业的Y06为夹胶不能输出
  354. SETQ06; //吹气
  355. else if(CJSelect == XinYe)
  356. SETQ11;
  357. cDelayTime6 = dwTickCount + (unsigned long)10 * cDataArea[8];
  358. }
  359. //电机控制
  360. void CSTB_Auto_Con_CS(void)
  361. {
  362. switch(cStepMByte2)
  363. {
  364. case 0:
  365. CLRQ00;
  366. StopPWM();
  367. break;
  368. case 1: //离合器起动
  369. cStepMByte2 = 2;
  370. SETQ00; //离合器输出
  371. if(cDataArea[90] == 55)
  372. cDelayTime3 = dwTickCount + (unsigned long)300;
  373. //步进启动
  374. cSPAdd = cDataArea[11]; //加速度
  375. cSPDec = 2; //减速度
  376. cStepSet = cDataArea[12]; //最高速度
  377. cStepNum = cDataArea[10]; //起动速度
  378. cLowSpeadLimit = cDataArea[13]; //空位速度
  379. cPulseStepCount = 0;
  380. cStepMode = 1;
  381. cErrorTime2 = dwTickCount + (unsigned long)100*cDataArea[24];
  382. if(!X11)
  383. {
  384. cStepNum = cLowSpeadLimit;
  385. }
  386. StartPWM(cStepNum);
  387. break;
  388. case 2: //过链接近下降沿
  389. if((!X11) || ((cDataArea[90] == 55) && (dwTickCount >= cDelayTime3)))
  390. {
  391. cStepMByte2 = 3;
  392. if(cDataArea[90] == 55)
  393. cDelayTime3 = dwTickCount + (unsigned long)200;
  394. else
  395. cDelayTime3 = dwTickCount + (unsigned long)5
  396. ;
  397. cErrorTime2 = dwTickCount + (unsigned long)ERRORTIME;
  398. cStepMode = 2; //电机减速
  399. }
  400. else if((dwTickCount>=cErrorTime2) && (cDataArea[24] != 0))
  401. {
  402. cDataArea[75] = ActionPage;
  403. cDataArea[100] = NoZip_W; //检查过链接近开关或没有拉链
  404. M15 = 0;//cMidleCoil[0] &= ~(1<<15); //M15
  405. bStop = 1;
  406. }
  407. else if((cDataArea[29] > 5) && (cEncodePulse >= (cSetEncode + cDataArea[29] * 10)) && (cTest1 > 1))
  408. {
  409. cDataArea[75] = ActionPage;
  410. cDataArea[100] = ZipperLengPRO_W; //检查过链接近开关或没有拉链
  411. M15 = 0;//cMidleCoil[0] &= ~(1<<15); //M15
  412. bStop = 1;
  413. }
  414. break;
  415. case 3:
  416. //过链接近上升沿 //拖带到
  417. if(((X11_UP) || !Y00 || (cDataArea[90] == 55)) && (dwTickCount >= cDelayTime3))
  418. {
  419. if(TWOTDSelect == 0) //普通拖带
  420. {
  421. cStepMode = 2; //电机减速
  422. cStepMByte2 = 4;
  423. cErrorTime2 = dwTickCount + (unsigned long)500;
  424. cDelayTime3 = dwTickCount + (unsigned long)cDataArea[5];
  425. cDelayTime4 = dwTickCount + (unsigned long)cDataArea[1]; // 延时上勾针
  426. }
  427. else
  428. {
  429. cDelayTime3 = dwTickCount + (unsigned long)cDataArea[26];
  430. cStepMByte2 = 40;
  431. }
  432. }
  433. else if(dwTickCount >= cErrorTime2) //拖带警告
  434. {
  435. //cMidleCoil[5] |= (1<<0); //记录
  436. cDataArea[75] = ActionPage;
  437. cDataArea[100] = NoZip_W; //检查过链接近开关或没有拉链
  438. M15 = 0;//cMidleCoil[0] &= ~(1<<15); //M15
  439. bStop = 1;
  440. }
  441. break;
  442. case 40:
  443. if(dwTickCount >= cDelayTime3)
  444. {
  445. CLRQ00; //离合停
  446. StopPWM(); //步进电机停
  447. // if(X16) //送胶到位后就可以上勾针
  448. // SETQ01; //上勾针
  449. if(cStepMByte1 == 0) //送胶完成
  450. {
  451. SETQ01; //上勾针
  452. cDelayTime3 = dwTickCount + (unsigned long)10 * cDataArea[25];
  453. cStepMByte2 = 41;
  454. }
  455. }
  456. break;
  457. case 41:
  458. if(dwTickCount >= cDelayTime3)
  459. {
  460. cStepMByte2 = 4;
  461. cErrorTime2 = dwTickCount + (unsigned long)500;
  462. cDelayTime3 = dwTickCount + (unsigned long)cDataArea[5];
  463. StartPWM(cStepNum);
  464. SETQ00; //离合开
  465. }
  466. break;
  467. case 4:
  468. //要加延时上勾针
  469. if(dwTickCount >= cDelayTime4)
  470. SETQ01; //上勾针
  471. if(((dwTickCount >= cDelayTime3) && (SGZSelect != 0)) || (X20 ||(cDataArea[90] == 55))) //到位或延时停时间到
  472. {
  473. SETQ01; //上勾针
  474. CLRQ00; //离合停
  475. StopPWM(); //步进电机停
  476. if(SGZSelect == 0) //双勾针
  477. {
  478. cStepMByte2 = 5;
  479. cDelayTime3 = dwTickCount + (unsigned long)1; //延时压带
  480. }
  481. else //单勾针
  482. {
  483. cStepMByte2 = 0;
  484. //SETDR(); //步进电机松
  485. }
  486. }
  487. else if((dwTickCount >= cErrorTime2) && (SGZSelect == 0)) //拖带警告
  488. {
  489. cDataArea[75] = ActionPage;
  490. cDataArea[100] = GZDaoWei_W; //检查过链接近开关或没有拉链
  491. M15 = 0;//cMidleCoil[0] &= ~(1<<15); //M15
  492. bStop = 1;
  493. }
  494. break;
  495. case 5:
  496. if(dwTickCount >= cDelayTime3)
  497. {
  498. cStepMByte2 = 6;
  499. SETQ05;
  500. cDelayTime3 = dwTickCount + (unsigned long)10 * cDataArea[3]; //压带输出延时退勾针
  501. }
  502. break;
  503. case 6:
  504. if(dwTickCount >= cDelayTime3) //压带输出延时退勾针
  505. {
  506. CLRQ01; //勾针退
  507. cStepMByte2 = 7; //拖带完成
  508. SETDR(); //步进电机松
  509. cErrorTime2 = dwTickCount + (unsigned long)ERRORTIME;
  510. }
  511. break;
  512. case 7:
  513. if(X15) //勾针退到位
  514. {
  515. cStepMByte2 = 0;
  516. }
  517. else if(dwTickCount >= cErrorTime2)
  518. {
  519. cDataArea[75] = ActionPage;
  520. cDataArea[100] = TuiGZ_W; //勾针退不到位警告
  521. M15 = 0;//cMidleCoil[0] &= ~(1<<15); //M15
  522. }
  523. break;
  524. case 20: //到位后反转一点
  525. CLRDR();
  526. cEncodePulse = 0;
  527. cDataArea[121] = 0;
  528. cStepMByte2 = 21;
  529. cDelayTime3 = dwTickCount + (unsigned long)40;
  530. if(DianJiFanZ == 0)
  531. cStepMByte2 = 0;
  532. break;
  533. case 21:
  534. if(dwTickCount >= cDelayTime3)
  535. {
  536. cStepMByte2 = 22;
  537. cWorkPulseNum = cDataArea[27];
  538. // cDelayTime3 = dwTickCount + (unsigned long)10 * 5;
  539. cStepMode = 4;
  540. cDataArea[99] = 2;
  541. cLowSpeadLimit = cDataArea[22]; //空位速度
  542. cStepNum = cLowSpeadLimit;
  543. if(cWorkPulseNum != 0)
  544. {
  545. cDataArea[99] = 1;
  546. StartPWM(cStepNum);
  547. cPulseStepDEC = cWorkPulseNum;
  548. }
  549. }
  550. break;
  551. case 22:
  552. if(cWorkPulseNum == 0)
  553. {
  554. cStepMByte2 = 0;
  555. StopPWM(); //步进电机停
  556. // SETDR(); //步进电机松
  557. }
  558. break;
  559. }
  560. }
  561. //送胶动作
  562. void CSTB_SongJiao_CS(void)
  563. {
  564. switch(cStepMByte1)
  565. {
  566. case 0:
  567. break;
  568. case 1: //动作开始,延时分胶
  569. cStepMByte1 = 2;
  570. cDelayTime2 = dwTickCount + (unsigned long)10 * cDataArea[4]; //分胶延时输出
  571. break;
  572. case 2:
  573. if((dwTickCount >= cDelayTime2) || !X11)
  574. {
  575. cStepMByte1 = 3;
  576. SETQ02; //分胶阀
  577. if(CJSelect == XinYe)//鑫业的Y06为夹胶
  578. SETQ06;
  579. cDelayTime2 = dwTickCount + (unsigned long)10 * 6; //分胶延时输出
  580. cErrorTime = dwTickCount + (unsigned long)10 * 70; //分胶延时输出
  581. }
  582. break;
  583. case 3:
  584. if(X11_UP || (cDataArea[90] == 55) || ((!bRunning || (Y01 && cOneTimes)) && (dwTickCount >= cDelayTime2))) //过链上到链上的时候送胶开始
  585. {
  586. cStepMByte1 = 4;
  587. }
  588. break;
  589. case 4:
  590. //单勾针方式上升开始送胶 双勾针方式电机完成后才能送 分胶到位
  591. if(((SGZSelect == 1) || (cStepMByte2 == 0)) && (dwTickCount >= cDelayTime2))
  592. {
  593. if(X12 && Y02 && (!Y01 || (TWOTDSelect == 0) || SongJiaoMode)) //分胶到位
  594. {
  595. cStepMByte1 = 5;
  596. SETQ04;
  597. cErrorTime1 = dwTickCount + (unsigned long)ERRORTIME;
  598. cDelayTime2 = dwTickCount + (unsigned long)10 * cDataArea[9];
  599. }
  600. }
  601. if(!X12 && (dwTickCount >= cErrorTime))
  602. {
  603. cDataArea[75] = ActionPage;
  604. cDataArea[100] = FengJiao_W; //送胶不到位警告
  605. M15 = 0;//cMidleCoil[0] &= ~(1<<15); //M15
  606. bStop = 1;
  607. }
  608. break;
  609. case 5:
  610. if(X16_UP || ((SongJiaoMode == 1) && (SongJiaoDaoWei == 1) && (dwTickCount >= cDelayTime2)))
  611. {
  612. // cDelayTime2 = dwTickCount + (unsigned long)10 * cDataArea[2];
  613. if(bRunning || M19) //在工作状态
  614. {
  615. cStepMByte1 = 6;
  616. cDelayTime2 = dwTickCount + (unsigned long)15;
  617. }
  618. else
  619. cStepMByte1 = 0;
  620. }
  621. else if(dwTickCount >= cErrorTime1)
  622. {
  623. cDataArea[75] = ActionPage;
  624. cDataArea[100] = SongJiao_W; //送胶不到位警告
  625. M15 = 0;//cMidleCoil[0] &= ~(1<<15); //M15
  626. bStop = 1;
  627. }
  628. if(X21 && bRunning)
  629. {
  630. cDataArea[75] = ActionPage;
  631. cDataArea[100] = NoJiao_W; //没胶警告
  632. M15 = 0;//cMidleCoil[0] &= ~(1<<15); //M15
  633. // bStop = 1;
  634. cOneTimes = 1;
  635. }
  636. break;
  637. case 6:
  638. if((dwTickCount >= cDelayTime2))//(cStepMByte2 == 0) || (TWOTDSelect == 1)) //普通拖带
  639. {
  640. cStepMByte1 = 7;
  641. CLRQ02;//关分胶
  642. if(CJSelect == XinYe)//鑫业的Y06为夹胶
  643. {
  644. CLRQ06;
  645. cDelayTime2 = dwTickCount + (unsigned long)45;
  646. }
  647. cErrorTime1 = dwTickCount + (unsigned long)ERRORTIME;
  648. }
  649. break;
  650. case 7:
  651. if((CJSelect == XinYe) && X12)//鑫业的Y06为夹胶
  652. {
  653. cDelayTime2 = dwTickCount + (unsigned long)35;
  654. }
  655. if(/*(X13 || FengJiaoSelect) && */!X12 && (dwTickCount >= cDelayTime2))
  656. {
  657. cStepMByte1 = 8;
  658. if((SongJiaoMode == 0) || (!bRunning)) //气缸送胶先退,滚轮送胶先不退或是触摸屏手动退送胶
  659. CLRQ04;
  660. cErrorTime1 = dwTickCount + (unsigned long)ERRORTIME;
  661. }
  662. else if(dwTickCount >= cErrorTime1)
  663. {
  664. cDataArea[75] = ActionPage;
  665. cDataArea[100] = TuiFenJiao_W; //退分胶不到位警告
  666. bStop = 1;
  667. }
  668. break;
  669. case 8:
  670. //送胶模式 0 气缸 1 滚轮(没后接近)/感应前点离开
  671. if(((SongJiaoMode == 1) || (!X16 && X17)))
  672. {
  673. cStepMByte1 = 0;
  674. M19 = 0;
  675. }
  676. else if(dwTickCount >= cErrorTime1)
  677. {
  678. cDataArea[75] = ActionPage;
  679. cDataArea[100] = TuiJiao_W; //退送胶不到位警告
  680. bStop = 1;
  681. }
  682. break;
  683. }
  684. }
  685. //合模超声动作
  686. void CSTB_HeMo_CS_CS(void)
  687. {
  688. switch(cStepMByte3)
  689. {
  690. case 0:
  691. break;
  692. case 1:
  693. //分胶 送胶 滚轮模式不退 分胶前 分胶后 送胶到位 退胶胶到位 滚轮方式 //单勾针方式
  694. if((!Y02) && ((!Y04) || (SongJiaoMode == 1)) && (!X12) && (X13 || FengJiaoSelect) && (((!X16) && X17) || (SongJiaoMode == 1)) && (X15 || (SGZSelect != 0)))
  695. {
  696. SETQ03; // 下冲
  697. //下模方式 0 下模活动,1 下模不动
  698. if((XiaMoMode == 0) && (SGZSelect != 0))//单勾针方式
  699. {
  700. SETQ05;
  701. }
  702. cStepMByte3 = 2;
  703. cErrorTime3 = dwTickCount + (unsigned long)ERRORTIME;
  704. }
  705. else if(!bRunning)
  706. cStepMByte3 = 0;
  707. break;
  708. case 2:
  709. //上模下到位 单勾针方式X15才接到下模上到位 或下模不动
  710. if(X14 && ((X15 && (SGZSelect != 0)) || (XiaMoMode != 0)))
  711. {
  712. cDelayTime5 = dwTickCount + (unsigned long)10 * cDataArea[0]; //延时超声
  713. cStepMByte3 = 3;
  714. if(TuiGZMode == 1) //0 先超声后下勾针,1 先下勾针后超声
  715. CLRQ01;
  716. }
  717. else if((dwTickCount >= cErrorTime3) && !X14) //合模不到位
  718. {
  719. cDataArea[75] = ActionPage;
  720. cDataArea[100] = HeMoDW_W; //退送胶不到位警告
  721. bStop = 1;
  722. }
  723. break;
  724. case 3:
  725. if(dwTickCount >= cDelayTime5)
  726. {
  727. if((cDataArea[90] != 55))
  728. {
  729. M09 = 0;
  730. SETQ10; //超声开
  731. SETQ11;
  732. if(cDataArea[6] > 150)
  733. cDelayTime5 = dwTickCount + (unsigned long)10 * 150; //超声时间
  734. else
  735. {
  736. if(X07 && (cHMI_Test) && (cDataArea[28] < cDataArea[6]))
  737. cDelayTime5 = dwTickCount + (unsigned long)10 * (cDataArea[6] - cDataArea[28]); //超声时间
  738. else
  739. cDelayTime5 = dwTickCount + (unsigned long)10 * cDataArea[6]; //超声时间
  740. }
  741. CLRQ04; //滚轮方式退送胶
  742. }
  743. else
  744. {
  745. cDelayTime5 = dwTickCount + (unsigned long)30;
  746. }
  747. cStepMByte3 = 4;
  748. }
  749. break;
  750. case 4:
  751. if(dwTickCount >= cDelayTime5)
  752. {
  753. cStepMByte3 = 5;
  754. CLRQ10;
  755. CLRQ11;
  756. StartCuiQi(); //启动吹气
  757. cDelayTime5 = dwTickCount + (unsigned long)5 * cDataArea[7]; //固化时间一半
  758. }
  759. break;
  760. case 5:
  761. if(dwTickCount >= cDelayTime5)
  762. {
  763. cStepMByte3 = 6;
  764. CLRQ01; //勾针下
  765. cDelayTime5 = dwTickCount + (unsigned long)5 * cDataArea[7]; //固化时间一半
  766. }
  767. break;
  768. case 6:
  769. if(dwTickCount >= cDelayTime5)
  770. {
  771. CLRQ03; //上模关
  772. CLRQ05; //下模或压带关
  773. cStepMByte3 = 0;
  774. cDelayTime5 = dwTickCount + (unsigned long)10 * 35;
  775. }
  776. break;
  777. }
  778. }
  779. void Hand_Action(void)
  780. {
  781. unsigned char ch;
  782. //手动勾针,屏单独控制
  783. if(M04)
  784. {
  785. M04 = 0;//cMidleCoil[0] &= ~(1<<4); //M4
  786. if(Y01)
  787. CLRQ01;
  788. else if((TWOTDSelect == 0) || SongJiaoMode || !Y04)
  789. SETQ01;
  790. }
  791. //手动勾针
  792. if(X02)
  793. {// 送胶前  单勾针方式     滚轮送胶方式
  794. if(X02_UP && (!X16 || (SGZSelect == 1) || (SongJiaoMode == 1)))
  795. {
  796. SETQ01;
  797. }
  798. // 双勾针选择0 双勾针(新款) 1 单勾针
  799. if((SGZSelect == 0)) //没触摸屏时自动压带
  800. {
  801. //勾针到位
  802. if(Y01 && X20 && !Y05)
  803. {
  804. SETQ05;
  805. cDelayTime2 = dwTickCount + (unsigned long)10 * cDataArea[3]; //压带输出时间
  806. }
  807. if(Y05 && (dwTickCount >= cDelayTime2))
  808. {
  809. CLRQ01;
  810. }
  811. }
  812. }
  813. else if(X02_DW)
  814. {
  815. CLRQ01;
  816. if((SGZSelect == 0) && X02_DW)//没触摸屏时自动退压带
  817. CLRQ05;
  818. }
  819. //压带,在双勾针方式时有效
  820. if(M03)
  821. {
  822. M03 = 0;//cMidleCoil[0] &= ~(1<<3); //M3
  823. //双勾针方式      下模不动
  824. if((SGZSelect == 0) && (XiaMoMode == 1))
  825. {
  826. if(Y05)
  827. CLRQ05;
  828. else
  829. SETQ05;
  830. }
  831. }
  832. //手动前导板(分胶)
  833. //改动06.12.27 合模或双勾针 合模到位 上模 下模下到位 手动超声
  834. if((X03_UP || M13) && ((!Y05 &&(!X15) && (SGZSelect == 1)) || ((SGZSelect == 0) && X15 && !X20)) &&
  835. (!Y03) && (!X14) && (!X06))
  836. {
  837. M13 = 0;//cMidleCoil[0] &= ~(1<<13); //M13
  838. if(Y02 && !X03)
  839. CLRQ02;
  840. else
  841. SETQ02;
  842. }
  843. else if(X03_DW)
  844. CLRQ02;
  845. //手动送胶 当单勾针时下模信号不能有 当为双勾针时要勾针退到位(X15是复用)
  846. if(Y04 && X16_UP)
  847. {
  848. //CLRQ06;
  849. }
  850. // 合模或双勾针 合模到位
  851. if((X05 || M07) && ((!Y05 &&(!X15) && (SGZSelect == 1)) || ((SGZSelect == 0) && X15 && !X20))
  852. //上模 下模下到位 手动超声
  853. && (!Y03) && (!X14) && (!X06) && (!Y04 || X05_UP))
  854. {
  855. if(CJSelect == XinYe)//鑫业的Y06为夹胶
  856. {
  857. if(!Y01 || (TWOTDSelect == 0) || SongJiaoMode)
  858. {
  859. if(X05_UP || (!Y06 && M07))
  860. {
  861. SETQ06;
  862. cDelayTime1 = dwTickCount + (unsigned long)70;
  863. }
  864. else if(Y06 && (dwTickCount >= cDelayTime1))
  865. {
  866. SETQ04;
  867. M07 = 0;//cMidleCoil[0] &= ~(1<<7); //M7
  868. }
  869. }
  870. else
  871. M07 = 0;
  872. }
  873. else if(CJSelect == ChangSheng)//鑫业的Y06为夹胶
  874. {//手动送胶 普通拖带   二次拖带时勾针不能有输出
  875. if((X05_UP || M07) && ((TWOTDSelect == 0) || ((TWOTDSelect == 1) && !Y01)))
  876. {
  877. SETQ04;
  878. M07 = 0;//cMidleCoil[0] &= ~(1<<7); //M7
  879. }
  880. }
  881. }
  882. else if(!X05)
  883. {
  884. if(CJSelect == XinYe)//鑫业的Y06为夹胶
  885. {
  886. if(X05_DW || M07)
  887. {
  888. M07 = 0;//cMidleCoil[0] &= ~(1<<7); //M7
  889. CLRQ06;
  890. cDelayTime1 = dwTickCount + (unsigned long)120;
  891. }
  892. else if(!Y06 && (dwTickCount >= cDelayTime1))
  893. {
  894. CLRQ04;
  895. }
  896. if(!Y04 && X17_UP)
  897. {
  898. SETQ06;
  899. }
  900. }
  901. else if(CJSelect == ChangSheng)//鑫业的Y06为夹胶
  902. {
  903. if(X05_DW || M07)
  904. {
  905. CLRQ04;
  906. M07 = 0;//cMidleCoil[0] &= ~(1<<7); //M7
  907. }
  908. }
  909. }
  910. //手动合模
  911. //手动下冲 分胶后 分胶前 送胶到位 退胶到位 或滚轮送胶
  912. if((X04 || M08) && (X13 || FengJiaoSelect) && (!X12) && (((!X16) && X17) || (SongJiaoMode == 1))
  913. //超声输出
  914. && (!Y10))
  915. {
  916. if(M08 && Y03 && !X04)
  917. {
  918. CLRQ03;
  919. if(((SGZSelect == 0) && (XiaMoMode == 1)) || (XiaMoMode == 0))
  920. {
  921. CLRQ05;
  922. }
  923. }
  924. //合模输出
  925. else if((X04_UP || M08) && !Y03 &&((SGZSelect == 0) && X15 && !X20) || (SGZSelect == 1))
  926. {
  927. SETQ03;
  928. if(XiaMoMode == 0) //下模活动方式
  929. SETQ05;
  930. }
  931. M08 = 0;//cMidleCoil[0] &= ~(1<<8); //M8
  932. }
  933. else if(X04_DW)
  934. {
  935. CLRQ03;
  936. if(((SGZSelect == 0) && (XiaMoMode == 1)) || (XiaMoMode == 0))
  937. {
  938. CLRQ05;
  939. }
  940. }
  941. if(X14_UP) //合模到位
  942. {
  943. if(CJSelect != XinYe)
  944. StartCuiQi(); //启动吹气
  945. }
  946. //手动超声
  947. // 分胶 送胶 分胶前 分胶后 送胶到位 退胶到位 送胶为滚轮方式
  948. if((X06 || ((M09 || M10) && !X06_DW)) && (!Y02) && (!Y04) && (!X12) && (X13 || FengJiaoSelect) && (((!X16) && X17) || (SongJiaoMode == 1)) && (dwTickCount >= cDelayTime5))
  949. {// 上超
  950. if((((SGZSelect == 0) && X15 && !X20) || (SGZSelect == 1)) && (!X10) && !M12 )
  951. {
  952. if(XiaMoMode == 1) //下模不动
  953. {
  954. if(X14)//已经合模
  955. {
  956. if((X06_UP || M09) && (cStepMByte3 == 0))
  957. {
  958. cStepMByte3 = 3; //直接发超声(按设定时间)
  959. // M09 = 0;//cMidleCoil[0] &= ~(1<<9); //M9
  960. M10 = 1;//cMidleCoil[0] |= (1<<10); //M10
  961. }
  962. }
  963. else
  964. {
  965. if((X06_UP || M09) && !M10)
  966. {
  967. M10 = 1;//cMidleCoil[0] |= (1<<10); //M10
  968. SETQ10; //发超声
  969. cDelayTime5 = dwTickCount + (unsigned long)10 * cDataArea[6]; //限长时间2秒
  970. }
  971. else if(((!M09 && !X06) || (dwTickCount >= cDelayTime5)) && Y10)
  972. {
  973. M09 = 0;//cMidleCoil[0] &= ~(1<<9); //M9
  974. M10 = 0;
  975. CLRQ10;
  976. StartCuiQi();
  977. }
  978. }
  979. }
  980. else if(SGZSelect == 1)//下模活动,勾针为单勾针
  981. {
  982. if((X06_UP || M09) && !M10)
  983. {
  984. M09 = 1;M10 = 1;//cMidleCoil[0] |= ((1<<10) | (1<<9)) ; //M10
  985. SETQ05; //先下模升上去
  986. if(X15) //先合模的情况下直接发超声
  987. {
  988. SETQ10; //发超声
  989. cDelayTime5 = dwTickCount + (unsigned long)10 * 200; //限长时间2秒
  990. }
  991. }
  992. if(Y05 && X15_UP)
  993. {
  994. SETQ10; //发超声
  995. cDelayTime5 = dwTickCount + (unsigned long)10 * 200; //限长时间2秒
  996. }
  997. if((!M09 || (dwTickCount >= cDelayTime5)) && Y10)
  998. {
  999. M09 = 0;//cMidleCoil[0] &= ~(1<<9); //M9
  1000. CLRQ10;
  1001. cStepMByte3 = 4;
  1002. }
  1003. }
  1004. //手动超声完成
  1005. if(!M09 && !Y10 && !X06)
  1006. {
  1007. M10 = 0;//cMidleCoil[0] &= ~(1<<10); //M10
  1008. cStepMByte3 = 0;
  1009. cDataArea[128] = 0;
  1010. if(XiaMoMode == 0) //下模活动
  1011. {
  1012. CLRQ05;
  1013. }
  1014. }
  1015. }
  1016. else
  1017. M09 = 0;//cMidleCoil[0] &= ~(1<<9); //M9
  1018. }
  1019. else if(X06_DW)
  1020. {
  1021. M10 = 0;//cMidleCoil[0] &= ~(1<<10); //M10
  1022. M09 = 0;//cMidleCoil[0] &= ~(1<<9); //M9
  1023. CLRQ10;
  1024. cStepMByte3 = 0;
  1025. cDelayTime5 = dwTickCount + (unsigned long)10 * 30;
  1026. if(XiaMoMode == 0) //下模活动
  1027. {
  1028. CLRQ05;
  1029. }
  1030. }
  1031. //手动 上超
  1032. // 分胶 分胶前 分胶后 送胶 送胶到位 退胶到位 手动超声
  1033. if((X10_UP || M11) && !M12 && (!Y02) && (!X12) && (X13 || FengJiaoSelect) && (((!Y04) && (!X16) && X17) || (SongJiaoMode == 1))&& (!X06) && (dwTickCount >= cDelayTime5))
  1034. {
  1035. if(((SGZSelect == 0) && X15 && !X20) || (SGZSelect == 1))
  1036. {
  1037. M12 = 1;//cMidleCoil[0] |= (1<<12); //M12
  1038. cStepMByte3 = 1; //整个合模超声过程
  1039. if(CJSelect == XinYe)//鑫业的Y06为夹胶
  1040. SETQ06;
  1041. }
  1042. M11 = 0;//cMidleCoil[0] &= ~(1<<11); //M11
  1043. }
  1044. else if(X10_DW || (M12 && ((cStepMByte3 == 0) || M11)))
  1045. {
  1046. M11 = 0;//cMidleCoil[0] &= ~(1<<11); //M11
  1047. M12 = 0;//cMidleCoil[0] &= ~(1<<12); //M12
  1048. CLRQ03; //上模关
  1049. CLRQ10; //超声关
  1050. if((SGZSelect == 1) && (XiaMoMode == 0)) //下模活动
  1051. CLRQ05; //下模或压带关
  1052. cStepMByte3 = 0;
  1053. cDelayTime5 = dwTickCount + (unsigned long)10 * 30;
  1054. }
  1055. //自动送胶动作
  1056. if(M18)
  1057. {
  1058. M18 = 0;
  1059. if(!Y03 && !X14 && !Y05 && (XiaMoMode == 1) && !Y04 && (!Y01 || (TWOTDSelect == 0) || SongJiaoMode))
  1060. {
  1061. M19 = 1;
  1062. cStepMByte1 = 1; //分胶送开始
  1063. }
  1064. }
  1065. }
  1066. void Auto_Run(void)
  1067. {
  1068. switch(cStepMByte)
  1069. {
  1070. case 0:
  1071. break;
  1072. case 1:
  1073. cStepMByte = 2;
  1074. CLRDR();
  1075. // CLRQ01; //勾针先下去
  1076. cDelayTime1 = dwTickCount + (unsigned long)200; //先锁轴
  1077. cTest1 = 0;
  1078. cSetEncode = 0;
  1079. break;
  1080. case 2: //第一条时
  1081. if(dwTickCount >= cDelayTime1)
  1082. {
  1083. cStepMByte = 3;
  1084. cStepMByte1 = 1; //分胶送开始
  1085. cEncodePulse = 0;
  1086. if(!Y01)
  1087. cStepMByte2 = 1; //拖带电机开始
  1088. }
  1089. break;
  1090. case 3:
  1091. // 送胶完成
  1092. if((cStepMByte1 == 0) && (cStepMByte2 == 0))
  1093. {
  1094. cStepMByte = 4;
  1095. if(cTest1 == 1)
  1096. cSetEncode = cEncodePulse;
  1097. if(DianJiFanZ == 1)
  1098. cStepMByte2 = 20; //拖带电机反转一点
  1099. else
  1100. SETDR();
  1101. }
  1102. break;
  1103. case 4:
  1104. //分胶 分胶前 分胶后 送胶 送胶到位 退胶到位 滚轮方式  双勾针方式时勾针要退到位       单勾针方式
  1105. if((!Y02) && (!X12) && (X13 || FengJiaoSelect) && (((!Y04) &&(!X16) && X17) || (SongJiaoMode == 1))&& (((SGZSelect == 0) && X15 && !X20) || (SGZSelect == 1)))
  1106. {
  1107. if(cStepMByte2 == 0)
  1108. {
  1109. cStepMByte = 5;
  1110. cStepMByte3 = 1;
  1111. if(CJSelect == XinYe)//鑫业的Y06为夹胶
  1112. SETQ06;
  1113. if(cHMI_Test == 0)
  1114. SETQ07; //计数器输出
  1115. }
  1116. }
  1117. break;
  1118. case 5:
  1119. if(cStepMByte3 == 0)
  1120. {
  1121. cStepMByte = 6;
  1122. CLRQ01;
  1123. if(cOneTimes == 1)
  1124. {
  1125. SETDR();
  1126. bStop = 1;
  1127. }
  1128. else
  1129. {
  1130. CLRDR();
  1131. CalProSP(); //计算生产速度
  1132. }
  1133. AddAndSavecToTal(); //产量加1保存
  1134. }
  1135. break;
  1136. case 6:
  1137. if(!X14 && (((SGZSelect == 0) && X15 && !X20) || ((XiaMoMode == 0) && !X15) || ((XiaMoMode == 1) && (SGZSelect == 1)))) //上模离开
  1138. {
  1139. cStepMByte = 7;
  1140. cDelayTime1 = dwTickCount + (unsigned long)30; //先锁轴
  1141. }
  1142. break;
  1143. case 7:
  1144. if(dwTickCount >= cDelayTime1)
  1145. {
  1146. cStepMByte = 2;
  1147. cTest1++;
  1148. if(cTest1 > 2)
  1149. cTest1 = 3;
  1150. if(cHMI_Test == 0)
  1151. CLRQ07;
  1152. }
  1153. break;
  1154. }
  1155. }