Uart.c 75 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687
  1. #define __UART_DEF
  2. #include "ABIS_User.h"
  3. #include <stdarg.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. unsigned int gloublePrintLevel = VAN_LOG_NOTICE;
  7. /****************************************************************
  8. * 函数名: Van_Device_Printf
  9. * 创建时间: 2021/04/22
  10. * 创建人: 范义东
  11. * 函数说明:调试打印接口函数
  12. * 输入参数: dev 传 NULL 采用本地定义
  13. devNum 数码
  14. * 输出参数: *name
  15. * 返回值 : void
  16. ****************************************************************/
  17. void Van_Device_Printf(unsigned int printLevel, const char *cmd, ...)
  18. {
  19. char buf[128] = {};
  20. int buflen = 0;
  21. if (gloublePrintLevel >= printLevel)
  22. {
  23. va_list args; //定义一个va_list类型的变量,用来储存单个参数
  24. va_start(args, cmd); //使args指向可变参数的第一个参数
  25. vsprintf(buf, cmd, args); //必须用vprintf等带V的
  26. va_end(args); //结束可变参数的获取
  27. buflen = strlen((const char *)buf);
  28. for(unsigned int i=0; i<buflen; i++){
  29. g_ucU3TX_Data[i] = buf[i];
  30. }
  31. if(buflen==0)return;
  32. while(DMA2CONbits.CHEN);
  33. DMA2CNT=(buflen-1);
  34. DMA2CONbits.CHEN = 1;
  35. DMA2REQbits.FORCE = 1;
  36. }
  37. return;
  38. }
  39. /*******************************************************************************
  40. * 函数名称:InitUart1
  41. *******************************************************************************/
  42. void InitUart(void) {
  43. U1MODEbits.STSEL = 0;
  44. U1MODEbits.PDSEL = 0;
  45. U1MODEbits.BRGH = 0;
  46. U1MODEbits.ABAUD = 0;
  47. U1MODEbits.LPBACK = 0;
  48. // U1BRG = 31;
  49. U1BRG = 389;
  50. U1STAbits.UTXISEL0 = 1;
  51. U1STAbits.UTXISEL1 = 0;
  52. U1STAbits.URXISEL = 0;
  53. IEC0bits.U1TXIE = 0;
  54. IEC0bits.U1RXIE = 1;
  55. U1MODEbits.UARTEN = 1;
  56. U1STAbits.UTXEN = 1;
  57. IPC2bits.U1RXIP = 7;
  58. IPC3bits.U1TXIP = 7;
  59. }
  60. /*******************************************************************************
  61. * 函数名称:InitUart2
  62. *******************************************************************************/
  63. void InitUart2(void) {
  64. U2MODEbits.STSEL = 0;
  65. U2MODEbits.PDSEL = 0;
  66. U2MODEbits.BRGH = 0;
  67. U2MODEbits.ABAUD = 0;
  68. U2MODEbits.LPBACK = 0;
  69. // U1BRG = 31;
  70. U2BRG = 389;
  71. U2STAbits.UTXISEL0 = 1;
  72. U2STAbits.UTXISEL1 = 0;
  73. U2STAbits.URXISEL = 0;
  74. IEC1bits.U2TXIE = 0;
  75. IEC1bits.U2RXIE = 1;
  76. U2MODEbits.UARTEN = 1;
  77. U2STAbits.UTXEN = 1;
  78. IPC7bits.U2RXIP = 7;
  79. IPC7bits.U2TXIP = 7;
  80. }
  81. /*******************************************************************************
  82. * 函数名称:InitUart3
  83. *******************************************************************************/
  84. void InitUart3(void) {
  85. U3MODEbits.STSEL = 0;
  86. U3MODEbits.PDSEL = 0;
  87. U3MODEbits.BRGH = 0;
  88. U3MODEbits.ABAUD = 0;
  89. U3MODEbits.LPBACK = 0;
  90. // U1BRG = 31;
  91. U3BRG = 31;
  92. U3STAbits.UTXISEL0 = 1;
  93. U3STAbits.UTXISEL1 = 0;
  94. U3STAbits.URXISEL = 0;
  95. IEC5bits.U3TXIE = 0;
  96. IEC5bits.U3RXIE = 1;
  97. U3MODEbits.UARTEN = 1;
  98. U3STAbits.UTXEN = 1;
  99. IPC20bits.U3RXIP = 7;
  100. IPC20bits.U3TXIP = 7;
  101. }
  102. /*******************************************************************************
  103. * 函数名称:Uart1Send
  104. *******************************************************************************/
  105. void UART1SEND(char data)
  106. {
  107. U1TXREG = data;
  108. while(!IFS0bits.U1TXIF);
  109. IFS0bits.U1TXIF=0;
  110. }
  111. /*******************************************************************************
  112. * 函数名称:_U1RXInterrupt
  113. *******************************************************************************/
  114. void __attribute__((__interrupt__,no_auto_psv)) _U1RXInterrupt(void)
  115. {
  116. IFS0bits.U1RXIF = 0;
  117. g_ucU1RX_Data[g_uiUart1_No] = U1RXREG;
  118. if(g_BUSY1 == 1) return;
  119. if(g_ucHeaderFlag1 == 0){
  120. if(g_ucU1RX_Data[g_uiUart1_No] == FRAME_HEAD){
  121. g_ucHeaderFlag1 = 1;
  122. g_ucU1RX_Data[0] = FRAME_HEAD;
  123. g_uiUart1_No = 1;
  124. }else{
  125. g_BUSY1 = 0;
  126. }
  127. }else if(g_ucHeaderFlag1 == 1){
  128. g_uiUart1_No++;
  129. }
  130. if(g_uiUart1_No > (FRAME_LTHH_INDEX+1)){
  131. g_uiLth1 = g_ucU1RX_Data[FRAME_LTHH_INDEX];
  132. if(g_uiUart1_No == g_uiLth1){
  133. g_ulRSUM1 = Check(g_ucU1RX_Data,g_uiLth1-1);
  134. g_ucCRC1 = (unsigned char)g_ulRSUM1; //
  135. if(g_ucCRC1 == g_ucU1RX_Data[g_uiLth1-1]){
  136. g_ucCMD1 = g_ucU1RX_Data[FRAME_CMD_INDEX];
  137. g_ucUART1_flag = 1;
  138. g_ulRSUM1 = 0;
  139. g_uiUart1_No = 0;
  140. g_ucHeaderFlag1 = 0;
  141. g_BUSY1 = 1;
  142. }else{
  143. memset(g_ucU1RX_Data,0,g_uiLth1*sizeof(unsigned char));
  144. g_BUSY1 = 0;
  145. }
  146. }else if(g_uiUart1_No > g_uiLth1){
  147. g_uiUart1_No = 0;
  148. g_ucHeaderFlag1 = 0;
  149. g_BUSY1 = 0;
  150. }
  151. }
  152. // if(g_ucUART1_flag == 1)
  153. // {
  154. // Uart1_Ack();
  155. // }
  156. }
  157. /*******************************************************************************
  158. * 函数名称:_U2RXInterrupt
  159. *******************************************************************************/
  160. void __attribute__((__interrupt__,no_auto_psv)) _U2RXInterrupt(void)
  161. {
  162. IFS1bits.U2RXIF = 0;
  163. g_ucU1RX_Data[g_uiUart1_No] = U2RXREG;
  164. if(g_BUSY1 == 1) return;
  165. if(g_ucHeaderFlag1 == 0){
  166. if(g_ucU1RX_Data[g_uiUart1_No] == FRAME_HEAD){
  167. g_ucHeaderFlag1 = 1;
  168. g_ucU1RX_Data[0] = FRAME_HEAD;
  169. g_uiUart1_No = 1;
  170. }else{
  171. g_BUSY1 = 0;
  172. }
  173. }else if(g_ucHeaderFlag1 == 1){
  174. g_uiUart1_No++;
  175. }
  176. if(g_uiUart1_No > (FRAME_LTHH_INDEX+1)){
  177. g_uiLth1 = g_ucU1RX_Data[FRAME_LTHH_INDEX];
  178. if(g_uiUart1_No == g_uiLth1){
  179. g_ulRSUM1 = Check(g_ucU1RX_Data,g_uiLth1-1);
  180. g_ucCRC1 = (unsigned char)g_ulRSUM1;
  181. if(g_ucCRC1 == g_ucU1RX_Data[g_uiLth1-1]){
  182. g_ucCMD1 = g_ucU1RX_Data[FRAME_CMD_INDEX];
  183. g_ucUART1_flag = 1;
  184. g_ulRSUM1 = 0;
  185. g_uiUart1_No = 0;
  186. g_ucHeaderFlag1 = 0;
  187. g_BUSY1 = 1;
  188. }else{
  189. memset(g_ucU1RX_Data,0,g_uiLth1*sizeof(unsigned char));
  190. g_BUSY1 = 0;
  191. }
  192. }else if(g_uiUart1_No > g_uiLth1){
  193. g_uiUart1_No = 0;
  194. g_ucHeaderFlag1 = 0;
  195. g_BUSY1 = 0;
  196. }
  197. }
  198. }
  199. /*******************************************************************************
  200. * 函数名称:_U3RXInterrupt
  201. *******************************************************************************/
  202. void __attribute__((__interrupt__,no_auto_psv)) _U3RXInterrupt(void)
  203. {
  204. IFS5bits.U3RXIF = 0;
  205. g_ucU1RX_Data[g_uiUart1_No] = U3RXREG;
  206. if(g_BUSY1 == 1) return;
  207. if(g_ucHeaderFlag1 == 0){
  208. if(g_ucU1RX_Data[g_uiUart1_No] == FRAME_HEAD){
  209. g_ucHeaderFlag1 = 1;
  210. g_ucU1RX_Data[0] = FRAME_HEAD;
  211. g_uiUart1_No = 1;
  212. }else{
  213. g_BUSY1 = 0;
  214. }
  215. }else if(g_ucHeaderFlag1 == 1){
  216. g_uiUart1_No++;
  217. }
  218. if(g_uiUart1_No > (FRAME_LTHH_INDEX+1)){
  219. g_uiLth1 = g_ucU1RX_Data[FRAME_LTHH_INDEX];
  220. if(g_uiUart1_No == g_uiLth1){
  221. g_ulRSUM1 = Check(g_ucU1RX_Data,g_uiLth1-1);
  222. g_ucCRC1 = (unsigned char)g_ulRSUM1; //
  223. if(g_ucCRC1 == g_ucU1RX_Data[g_uiLth1-1]){
  224. g_ucCMD1 = g_ucU1RX_Data[FRAME_CMD_INDEX];
  225. g_ucUART1_flag = 1;
  226. g_ulRSUM1 = 0;
  227. g_uiUart1_No = 0;
  228. g_ucHeaderFlag1 = 0;
  229. g_BUSY1 = 1;
  230. }else{
  231. memset(g_ucU1RX_Data,0,g_uiLth1*sizeof(unsigned char));
  232. g_BUSY1 = 0;
  233. }
  234. }else if(g_uiUart1_No > g_uiLth1){
  235. g_uiUart1_No = 0;
  236. g_ucHeaderFlag1 = 0;
  237. g_BUSY1 = 0;
  238. }
  239. }
  240. }
  241. /*******************************************************************************
  242. * 函数名称:Check
  243. *******************************************************************************/
  244. unsigned int Check(unsigned char *p,unsigned char num)
  245. {
  246. unsigned char i=0;
  247. unsigned int uiCheckSum=0;
  248. for(i=0;i<num;i++){
  249. uiCheckSum += *p;
  250. p++;
  251. }
  252. return uiCheckSum;
  253. }
  254. /*******************************************************************************
  255. * 函数名称:RS1_Ack
  256. *******************************************************************************/
  257. void RS1_Ack(unsigned int sendnum)
  258. {
  259. unsigned int i;
  260. for(i=0;i<sendnum;i++){
  261. UART1SEND(g_ucU1TX_Data[i]);
  262. }
  263. memset(g_ucU1TX_Data,0,sendnum*sizeof(unsigned char));
  264. }
  265. /*******************************************************************************
  266. * 函数名称:Uart1_Ack
  267. *******************************************************************************/
  268. void Uart1_Ack(void)
  269. {
  270. unsigned int g_uiFrmLth;
  271. unsigned int i=0;
  272. unsigned int j=0;
  273. unsigned int n=0;
  274. unsigned long sum;
  275. unsigned char Flag_STATUS=0;
  276. unsigned char Sensor,ucPWMindex,ucCtrlMode;
  277. unsigned int ADC;
  278. long lMPPCtemp = 0;
  279. long lPWMstate=0;
  280. switch(g_ucCMD1){
  281. /***********************(0x01)****************************/
  282. case HELLO:
  283. g_uiFrmLth = 6;
  284. g_ucU1TX_Data[0] = FRAME_HEAD;
  285. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  286. g_ucU1TX_Data[2] = 0;
  287. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  288. g_ucU1TX_Data[4] = Flag_STATUS;
  289. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  290. // my_printf("ans %d \n\r",g_ucU1TX_Data[3]);
  291. // for(unsigned int i =0;i<g_ucU1TX_Data[3];i++){
  292. // unsigned int temp = g_ucU1TX_Data[i];
  293. // my_printf("%d ",temp);
  294. // }
  295. // my_printf("\n\r");
  296. while(DMA3CONbits.CHEN);
  297. DMA3CNT=(g_uiFrmLth-1);
  298. DMA3CONbits.CHEN = 1;
  299. DMA3REQbits.FORCE = 1;
  300. break;
  301. /*************************(0x02)***************************/
  302. case PCR_SYSRST:
  303. g_uiFrmLth = 6;
  304. g_ucU1TX_Data[0] = FRAME_HEAD;
  305. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  306. g_ucU1TX_Data[2] = 0;
  307. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  308. g_ucU1TX_Data[4] = Flag_STATUS;
  309. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  310. while(DMA3CONbits.CHEN);
  311. DMA3CNT=(g_uiFrmLth-1);
  312. DMA3CONbits.CHEN = 1;
  313. DMA3REQbits.FORCE = 1;
  314. break;
  315. /**********************(0x03)*****************************/
  316. case PCR_SELFTEST:
  317. g_uiFrmLth = 6;
  318. g_ucU1TX_Data[0] = FRAME_HEAD;
  319. g_ucU1TX_Data[1] = g_ucCMD1 | 0X80;
  320. g_ucU1TX_Data[2] = 0;
  321. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  322. g_ucU1TX_Data[4] = 0x00; //
  323. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  324. while(DMA3CONbits.CHEN);
  325. DMA3CNT=(g_uiFrmLth-1);
  326. DMA3CONbits.CHEN = 1;
  327. DMA3REQbits.FORCE = 1;
  328. break;
  329. /**************************(0x04)***************************/
  330. case PCR_DEV:
  331. g_uiFrmLth = 6;
  332. g_ucU1TX_Data[0] = FRAME_HEAD;
  333. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  334. g_ucU1TX_Data[2] = 0;
  335. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  336. g_ucU1TX_Data[4] = Flag_STATUS;
  337. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  338. while(DMA3CONbits.CHEN);
  339. DMA3CNT=(g_uiFrmLth-1);
  340. DMA3CONbits.CHEN = 1;
  341. DMA3REQbits.FORCE = 1;
  342. break;
  343. /*************************(0x05)**************************/
  344. case PCR_STATUS:
  345. g_uiFrmLth = 6;
  346. g_ucU1TX_Data[0] = FRAME_HEAD;
  347. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  348. g_ucU1TX_Data[2] = 0;
  349. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  350. g_ucU1TX_Data[4] = Flag_STATUS;
  351. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  352. while(DMA3CONbits.CHEN);
  353. DMA3CNT=(g_uiFrmLth-1);
  354. DMA3CONbits.CHEN = 1;
  355. DMA3REQbits.FORCE = 1;
  356. break;
  357. /*************************(0x06)**************************/
  358. case SET_Temperature:
  359. if(g_ucU1RX_Data[4] != 0xFF){
  360. ucCtrlMode = 0;
  361. ucCtrlMode = g_ucU1RX_Data[12];
  362. if(ucCtrlMode == 1){
  363. g_ucENABLE = 0;
  364. TempChn[0].cPeltierRun = TempChn[1].cPeltierRun = TempChn[2].cPeltierRun = 0;
  365. TempChn[3].cPeltierRun = 0;
  366. }else{
  367. g_ucENABLE = 1;
  368. Target_temp = g_ucU1RX_Data[4];
  369. Target_temp = (Target_temp<<8) + g_ucU1RX_Data[5];
  370. g_dTarget_temp = (double)Target_temp /100.0;
  371. if(g_dTarget_temp >= 130.0) g_dTarget_temp = 130.0;
  372. if(g_dTarget_temp < 0) g_dTarget_temp = 0;
  373. for (i = 0; i < 4; i++) {
  374. TempChn[i].cBlockTempAriv = 0;
  375. TempChn[i].cPeltierRun = 1;
  376. TempChn[i].fBlockTargetTemp = g_dTarget_temp;
  377. if (fabs(TempChn[i].fCurrentTemperature - g_dTarget_temp) >= 0.3){
  378. ScheduleOperate(i);
  379. }
  380. }
  381. }
  382. }else{
  383. for (i = 0; i < 4; i++) {
  384. TempChn[i].cPeltierRun = 0;
  385. }
  386. }
  387. g_uiFrmLth = 6;
  388. g_ucU1TX_Data[0] = FRAME_HEAD;
  389. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  390. g_ucU1TX_Data[2] = 0;
  391. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  392. g_ucU1TX_Data[4] = Flag_STATUS;
  393. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  394. while(DMA3CONbits.CHEN);
  395. DMA3CNT=(g_uiFrmLth-1);
  396. DMA3CONbits.CHEN = 1;
  397. DMA3REQbits.FORCE = 1;
  398. break;
  399. /***************************(0x78)**************************/
  400. case SET_ZLTemperature:
  401. if(g_ucU1RX_Data[4] != 0xFF){
  402. ucCtrlMode = 0;
  403. ucCtrlMode = g_ucU1RX_Data[12];
  404. if(ucCtrlMode == 1){
  405. g_ucENABLE = 0;
  406. TempChn[4].cPeltierRun = TempChn[5].cPeltierRun = 0;
  407. }else{
  408. g_ucENABLE = 1;
  409. Target_temp = g_ucU1RX_Data[4];
  410. Target_temp = (Target_temp<<8) + g_ucU1RX_Data[5];
  411. g_dTarget_temp = (double)Target_temp /100.0;
  412. if(g_dTarget_temp >= 130.0) g_dTarget_temp = 130.0;
  413. if(g_dTarget_temp < 0) g_dTarget_temp = 0;
  414. for (i = 4; i < 6; i++) {
  415. TempChn[i].cBlockTempAriv = 0;
  416. TempChn[i].cPeltierRun = 1;
  417. TempChn[i].fBlockTargetTemp = g_dTarget_temp;
  418. if (fabs(TempChn[i].fCurrentTemperature - g_dTarget_temp) >= 0.3){
  419. ScheduleOperate(i);
  420. }
  421. }
  422. }
  423. }else{
  424. for (i = 4; i < 6; i++) {
  425. TempChn[i].cPeltierRun = 0;
  426. }
  427. }
  428. g_uiFrmLth = 6;
  429. g_ucU1TX_Data[0] = FRAME_HEAD;
  430. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  431. g_ucU1TX_Data[2] = 0;
  432. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  433. g_ucU1TX_Data[4] = Flag_STATUS;
  434. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  435. while(DMA3CONbits.CHEN);
  436. DMA3CNT=(g_uiFrmLth-1);
  437. DMA3CONbits.CHEN = 1;
  438. DMA3REQbits.FORCE = 1;
  439. break;
  440. /****************************(0x07)*************************/
  441. case PCR_MOTOR:
  442. PCR_MOTOR1 = (g_ucU1RX_Data[4]&0xf0);
  443. PCR_MOTOR2 = g_ucU1RX_Data[4]&0x0f;
  444. if(PCR_MOTOR1 == 0x10 ){
  445. switch(PCR_MOTOR2){
  446. case 6:g_lPulse = g_ucU1RX_Data[5];
  447. g_lPulse = (g_lPulse<<8) + g_ucU1RX_Data[6];
  448. g_lPulse = g_lPulse * 2;
  449. ucMOTOR_DIR = g_ucU1RX_Data[7];
  450. uiSpeed = g_ucU1RX_Data[8];
  451. uiSpeed = (uiSpeed<<8) + g_ucU1RX_Data[9];
  452. MotorXMove(g_lPulse,ucMOTOR_DIR,uiSpeed);
  453. break;
  454. case 7:g_lPulse = g_ucU1RX_Data[5];
  455. g_lPulse = (g_lPulse<<8) + g_ucU1RX_Data[6];
  456. g_lPulse = g_lPulse * 2;
  457. ucMOTOR_DIR = g_ucU1RX_Data[7];
  458. uiSpeed = g_ucU1RX_Data[8];
  459. uiSpeed = (uiSpeed<<8) + g_ucU1RX_Data[9];
  460. MotorXMove(g_lPulse,ucMOTOR_DIR,uiSpeed);
  461. break;
  462. case 3:
  463. MotorXHome(g_tEE.uiXPulseHome,g_tEE.uiXSpeedHome,g_tEE.uiXSpeedLeave);
  464. HangHao=0;
  465. break;
  466. case 10:g_lPulse = g_ucU1RX_Data[5];
  467. g_lPulse = (g_lPulse << 8) + g_ucU1RX_Data[6];
  468. g_lPulse = g_lPulse * 2;
  469. uiSpeed = g_ucU1RX_Data[7];
  470. uiSpeed = (uiSpeed << 8) + g_ucU1RX_Data[8];
  471. MotorXMoveTo(g_lPulse, uiSpeed);
  472. break;
  473. case 5:
  474. g_lPulse = g_ucU1RX_Data[5];
  475. g_lPulse = (g_lPulse << 8) + g_ucU1RX_Data[6];
  476. g_lPulse = g_lPulse * 2;
  477. ucMOTOR_DIR = g_ucU1RX_Data[7];
  478. uiSpeed = g_ucU1RX_Data[8];
  479. uiSpeed = (uiSpeed << 8) + g_ucU1RX_Data[9];
  480. Alldata = 1;
  481. MotorXScan(g_lPulse, ucMOTOR_DIR, uiSpeed);
  482. MotorXMoveTo(0, uiSpeed);
  483. MotorXHome(g_tEE.uiXPulseHome,g_tEE.uiXSpeedHome,g_tEE.uiXSpeedLeave);
  484. // g_uiScanPulseX = 0;
  485. // Alldata = 0;
  486. // IEC1bits.INT2IE = 0;
  487. // //数据处理
  488. //
  489. // for(i=0;i<17;i++){
  490. // ulFAMAD_All = 0;
  491. // ulVICAD_All = 0;
  492. // ulROXAD_All = 0;
  493. // ulCY5AD_All = 0;
  494. // for(j=0;j<SUM1;j++){
  495. // ulFAMAD_All += FAMData[i][j];
  496. // ulVICAD_All += VICData[i][j];
  497. // ulROXAD_All += ROXData[i][j];
  498. // ulCY5AD_All += CY5Data[i][j];
  499. // }
  500. // g_fFAMAD_Max[i] = (float)(ulFAMAD_All/SUM1);
  501. // g_fVICAD_Max[i] = (float)(ulVICAD_All/SUM1);
  502. // g_fROXAD_Max[i] = (float)(ulROXAD_All/SUM1);
  503. // g_fCY5AD_Max[i] = (float)(ulCY5AD_All/SUM1);
  504. // }
  505. // g_fQCFAM_Current = g_fFAMAD_Max[8];
  506. // g_fQCVIC_Current = g_fVICAD_Max[8];
  507. // g_fQCROX_Current = g_fROXAD_Max[8];
  508. // g_fQCCY5_Current = g_fCY5AD_Max[8];
  509. for(i=0;i<17;i++){
  510. ulFAMAD_All = 0;
  511. ulVICAD_All = 0;
  512. ulROXAD_All = 0;
  513. ulCY5AD_All = 0;
  514. Bubble_Sort( &FAMData[i][15], 50);
  515. Bubble_Sort( &VICData[i][15], 50);
  516. Bubble_Sort( &ROXData[i][15], 50);
  517. Bubble_Sort( &CY5Data[i][15], 50);
  518. Bubble_Sort( &CY6Data[i][0], 50);
  519. Bubble_Sort(&_390Data[i][0], 50);
  520. for(j=18;j<(SUM1-18);j++){
  521. ulFAMAD_All += FAMData[i][j];
  522. ulVICAD_All += VICData[i][j];
  523. ulROXAD_All += ROXData[i][j];
  524. ulCY5AD_All += CY5Data[i][j];
  525. }
  526. g_fFAMAD_Max[i] = (float)(ulFAMAD_All/3);
  527. g_fVICAD_Max[i] = (float)(ulVICAD_All/3);
  528. g_fROXAD_Max[i] = (float)(ulROXAD_All/3);
  529. g_fCY5AD_Max[i] = (float)(ulCY5AD_All/3);
  530. }
  531. g_fQCFAM_Current = g_fFAMAD_Max[8];
  532. g_fQCVIC_Current = g_fVICAD_Max[8];
  533. g_fQCROX_Current = g_fROXAD_Max[8];
  534. g_fQCCY5_Current = g_fCY5AD_Max[8];
  535. MotorXMoveTo(0, uiSpeed);
  536. Alldata = 2;
  537. g_uiScanPulseX = 0;
  538. break;
  539. case 11:
  540. Alldata = 0;
  541. DglLedbuf = 0;
  542. FAMLED = 1;
  543. g_lPulse = g_ucU1RX_Data[5];
  544. g_lPulse = (g_lPulse<<8) + g_ucU1RX_Data[6];
  545. g_lPulse = g_lPulse * 2;
  546. ucMOTOR_DIR = g_ucU1RX_Data[7];
  547. uiSpeed = g_ucU1RX_Data[8];
  548. uiSpeed = (uiSpeed<<8) + g_ucU1RX_Data[9];
  549. MotorXScan(g_lPulse,ucMOTOR_DIR,uiSpeed);
  550. Alldata = 2;
  551. FAMLED = 0;
  552. break;
  553. case 12:
  554. DglLedbuf = 0;
  555. Alldata = 0;
  556. VICLED = 1;
  557. g_lPulse = g_ucU1RX_Data[5];
  558. g_lPulse = (g_lPulse<<8) + g_ucU1RX_Data[6];
  559. g_lPulse = g_lPulse * 2;
  560. ucMOTOR_DIR = g_ucU1RX_Data[7];
  561. uiSpeed = g_ucU1RX_Data[8];
  562. uiSpeed = (uiSpeed<<8) + g_ucU1RX_Data[9];
  563. MotorXScan(g_lPulse,ucMOTOR_DIR,uiSpeed);
  564. Alldata = 2;
  565. VICLED = 0;
  566. break;
  567. case 13:
  568. DglLedbuf = 0;
  569. Alldata = 0;
  570. ROXLED = 1;
  571. g_lPulse = g_ucU1RX_Data[5];
  572. g_lPulse = (g_lPulse<<8) + g_ucU1RX_Data[6];
  573. g_lPulse = g_lPulse * 6;
  574. ucMOTOR_DIR = g_ucU1RX_Data[7];
  575. uiSpeed = g_ucU1RX_Data[8];
  576. uiSpeed = (uiSpeed<<8) + g_ucU1RX_Data[9];
  577. MotorXScan(g_lPulse,ucMOTOR_DIR,uiSpeed);
  578. Alldata = 2;
  579. ROXLED = 0;
  580. break;
  581. case 14:
  582. DglLedbuf = 0;
  583. Alldata = 0;
  584. CY5LED = 1;
  585. g_lPulse = g_ucU1RX_Data[5];
  586. g_lPulse = (g_lPulse<<8) + g_ucU1RX_Data[6];
  587. g_lPulse = g_lPulse * 2;
  588. ucMOTOR_DIR = g_ucU1RX_Data[7];
  589. uiSpeed = g_ucU1RX_Data[8];
  590. uiSpeed = (uiSpeed<<8) + g_ucU1RX_Data[9];
  591. MotorXScan(g_lPulse,ucMOTOR_DIR,uiSpeed);
  592. Alldata = 2;
  593. CY5LED = 0;
  594. break;
  595. case 15:
  596. DglLedbuf = 0;
  597. Alldata = 0;
  598. CY6LED = 1;
  599. g_lPulse = g_ucU1RX_Data[5];
  600. g_lPulse = (g_lPulse<<8) + g_ucU1RX_Data[6];
  601. g_lPulse = g_lPulse * 2;
  602. ucMOTOR_DIR = g_ucU1RX_Data[7];
  603. uiSpeed = g_ucU1RX_Data[8];
  604. uiSpeed = (uiSpeed<<8) + g_ucU1RX_Data[9];
  605. MotorXScan(g_lPulse,ucMOTOR_DIR,uiSpeed);
  606. Alldata = 2;
  607. CY6LED = 0;
  608. break;
  609. case 9:
  610. DglLedbuf = 0;
  611. Alldata = 0;
  612. _390LED = 1;
  613. g_lPulse = g_ucU1RX_Data[5];
  614. g_lPulse = (g_lPulse<<8) + g_ucU1RX_Data[6];
  615. g_lPulse = g_lPulse * 2;
  616. ucMOTOR_DIR = g_ucU1RX_Data[7];
  617. uiSpeed = g_ucU1RX_Data[8];
  618. uiSpeed = (uiSpeed<<8) + g_ucU1RX_Data[9];
  619. MotorXScan(g_lPulse,ucMOTOR_DIR,uiSpeed);
  620. Alldata = 2;
  621. _390LED = 0;
  622. break;
  623. default:
  624. break;
  625. }
  626. }
  627. g_uiFrmLth = 6;
  628. g_ucU1TX_Data[0] = FRAME_HEAD;
  629. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  630. g_ucU1TX_Data[2] = 0x00;
  631. g_ucU1TX_Data[3] = g_uiFrmLth;
  632. g_ucU1TX_Data[4] = Flag_STATUS;
  633. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  634. while(DMA3CONbits.CHEN);
  635. DMA3CNT=(g_uiFrmLth-1);
  636. DMA3CONbits.CHEN = 1;
  637. DMA3REQbits.FORCE = 1;
  638. break;
  639. /**************************(0x08)*****************************/
  640. case PCR_LEDCTRL:
  641. switch(g_ucU1RX_Data[4]){
  642. case 1:
  643. CTRLLED1=(g_ucU1RX_Data[5]&0x01)? 1:0;
  644. CTRLLED2=(g_ucU1RX_Data[5]&0x02)? 1:0;
  645. CTRLLED3=(g_ucU1RX_Data[5]&0x04)? 1:0;
  646. CTRLLED4=(g_ucU1RX_Data[5]&0x08)? 1:0;
  647. CTRLLED5=(g_ucU1RX_Data[5]&0x10)? 1:0;
  648. CTRLLED6=(g_ucU1RX_Data[5]&0x20)? 1:0;
  649. break;
  650. case 2:
  651. DglLedbuf=g_ucU1RX_Data[5]&0x3f;
  652. break;
  653. default:
  654. break;
  655. }
  656. g_uiFrmLth = 6;
  657. g_ucU1TX_Data[0] = FRAME_HEAD;
  658. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  659. g_ucU1TX_Data[2] = 0;
  660. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  661. g_ucU1TX_Data[4] = Flag_STATUS;
  662. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  663. while(DMA3CONbits.CHEN);
  664. DMA3CNT=(g_uiFrmLth-1);
  665. DMA3CONbits.CHEN = 1;
  666. DMA3REQbits.FORCE = 1;
  667. break;
  668. /*********************(0x09)*************************/
  669. case PCR_RDTEMP:
  670. g_ucRealTemp_Chanel = g_ucU1RX_Data[4];
  671. switch(g_ucRealTemp_Chanel){
  672. case 0:
  673. // Real_temp[0] = (unsigned int)(TempChn[0].fCurrentTemperature*100.0);
  674. // g_ucRealTemp_Chanel = 0;
  675. break;
  676. case 1:Real_temp[0] = (unsigned int)(TempChn[0].fCurrentTemperature*100.0);
  677. g_ucRealTemp_Chanel = 0;
  678. break;
  679. case 2:Real_temp[1] = (unsigned int)(CAPReal_temp[0]*100.0);
  680. g_ucRealTemp_Chanel = 1;
  681. break;
  682. case 3:Real_temp[2] = (unsigned int)(CAPReal_temp[1]*100.0);
  683. g_ucRealTemp_Chanel = 2;
  684. break;
  685. case 4:Real_temp[3] = (unsigned int)(CAPReal_temp[0] * 100.0);
  686. g_ucRealTemp_Chanel = 3;
  687. break;
  688. case 5:Real_temp[4] = (unsigned int)(g_fFINReal_Temp*100.0);
  689. g_ucRealTemp_Chanel = 4;
  690. break;
  691. case 6:Real_temp[0] = (unsigned int)(TempChn[0].fCurrentTemperature*100.0);
  692. g_ucRealTemp_Chanel = 0;
  693. break;
  694. case 7:Real_temp[0] = (unsigned int)(TempChn[0].fCurrentTemperature*100.0);
  695. g_ucRealTemp_Chanel = 0;
  696. break;
  697. case 8:Real_temp[0] = (unsigned int)(TempChn[0].fCurrentTemperature*100.0);
  698. g_ucRealTemp_Chanel = 0;
  699. break;
  700. default :
  701. break;
  702. }
  703. g_uiFrmLth = 9;
  704. g_ucU1TX_Data[0] = FRAME_HEAD;
  705. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  706. g_ucU1TX_Data[2] = 0;
  707. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;//桢长
  708. g_ucU1TX_Data[4] = Real_temp[g_ucRealTemp_Chanel]>>8;
  709. g_ucU1TX_Data[5] = Real_temp[g_ucRealTemp_Chanel]&0x00ff;
  710. g_ucU1TX_Data[6] = TempChn[g_ucRealTemp_Chanel].cTubeTempAriv;
  711. g_ucU1TX_Data[7] = Flag_STATUS;//状态位
  712. g_ucU1TX_Data[8] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  713. while(DMA3CONbits.CHEN);
  714. DMA3CNT=(g_uiFrmLth-1);
  715. DMA3CONbits.CHEN = 1;
  716. DMA3REQbits.FORCE = 1;
  717. break;
  718. case PCR_RTPCREMP://0x10
  719. g_ucRealTemp_Chanel = g_ucU1RX_Data[4];
  720. g_ucRealTemp_Chanel = 0;
  721. Real_temp[0] = (unsigned int)(TempChn[0].fCurrentTemperature*100.0);
  722. // if((TempChn[0].cTubeTempAriv == 1)||(TempChn[1].cTubeTempAriv == 1)||(TempChn[2].cTubeTempAriv == 1)){
  723. // g_cTubeTempAriv = 1;
  724. // }else{
  725. // g_cTubeTempAriv = 0;
  726. // }
  727. g_uiFrmLth = 9;
  728. g_ucU1TX_Data[0] = FRAME_HEAD;
  729. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  730. g_ucU1TX_Data[2] = 0;
  731. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;//桢长
  732. g_ucU1TX_Data[4] = Real_temp[0]>>8;
  733. g_ucU1TX_Data[5] = Real_temp[0]&0x00ff;
  734. g_ucU1TX_Data[6] =TempChn[0].cTubeTempAriv;
  735. g_ucU1TX_Data[7] = Flag_STATUS; //状态位
  736. g_ucU1TX_Data[8] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  737. while(DMA3CONbits.CHEN);
  738. DMA3CNT=(g_uiFrmLth-1);
  739. DMA3CONbits.CHEN = 1;
  740. DMA3REQbits.FORCE = 1;
  741. break;
  742. /**********************(0x0A)************************/
  743. case PCR_SETCAP://0x0A
  744. CAPPower = g_ucU1RX_Data[4];
  745. CAPPower = (CAPPower<<8) + g_ucU1RX_Data[5];
  746. if(g_ucU1RX_Data[4] == 0xFF){
  747. CAPTarget_temp[0] = g_tEE.CAPTarget_temp[0];
  748. CAPTarget_temp[1] = g_tEE.CAPTarget_temp[1];
  749. }
  750. else {
  751. if(CAPPower < 13000){
  752. CAPTarget_temp[0] = CAPTarget_temp[1] = CAPPower/100;
  753. }else{
  754. }
  755. }
  756. g_uiFrmLth = 6;
  757. g_ucU1TX_Data[0] = FRAME_HEAD;
  758. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  759. g_ucU1TX_Data[2] = 0;
  760. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  761. g_ucU1TX_Data[4] = 0;
  762. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  763. while(DMA3CONbits.CHEN);
  764. DMA3CNT=(g_uiFrmLth-1);
  765. DMA3CONbits.CHEN = 1;
  766. DMA3REQbits.FORCE = 1;
  767. break;
  768. /********************(0x0c)***********************/
  769. case RD_PCRDATA://0x0C
  770. g_ucPCRDATA_Chanel=g_ucU1RX_Data[4];
  771. ucBuffer_Data[0]=((g_ucCMD1|0x80)<<8)+FRAME_HEAD;
  772. ucBuffer_Data[1]=(ZLENTH1<<8)+0;//帧长+CMDNO,
  773. g_ucU1RX_Data[3]=0;
  774. // for(i=0;i<20;i++){
  775. // lMPPCtemp += g_uiMPPCtemp[i];
  776. // }
  777. lMPPCtemp = AD_Get(0x0F);
  778. // if((MPPCALLtemp>60000)||((MPPCALLtemp<100)){
  779. // }
  780. HangHao=0;
  781. //FAM
  782. for(i=0;i<8;i++){
  783. g_fAD_Max[i] = g_fFAMAD_Max[i];
  784. }
  785. for(i=8;i<16;i++){
  786. g_fAD_Max[i] = g_fFAMAD_Max[i+1];
  787. }
  788. for (i = 0; i < 16; i++) {
  789. if (g_tEE.uiQCbuffer == 0) {
  790. g_fAD_Max[i] = g_fAD_Max[i];
  791. } else if (g_tEE.uiQCbuffer == 1) {
  792. if (g_fAD_Max[i] > g_tEE.FAM_MPPCB) {
  793. g_fAD_Max[i] = g_fAD_Max[i] - g_tEE.FAM_MPPCB;
  794. g_fAD_Max[i] = g_fAD_Max[i] / (g_fQCFAM_Current / g_fQCFAM);
  795. g_fAD_Max[i] = g_fAD_Max[i] + g_tEE.FAM_MPPCB;
  796. }else{
  797. g_fAD_Max[i] = g_fAD_Max[i] / (g_fQCFAM_Current / g_fQCFAM);
  798. }
  799. } else if (g_tEE.uiQCbuffer == 2) {
  800. if (g_fAD_Max[i] > g_tEE.FAM_MPPCB) {
  801. g_fAD_Max[i] = g_fAD_Max[i] - g_tEE.FAM_MPPCB;
  802. g_fAD_Max[i] = g_fAD_Max[i] / (g_tEE.FAM_MPPCTk1 * lMPPCtemp * lMPPCtemp + g_tEE.FAM_MPPCTk2 * lMPPCtemp + g_tEE.FAM_MPPCTb1); /*温度补偿*/
  803. g_fAD_Max[i] = g_fAD_Max[i] + g_tEE.FAM_MPPCB;
  804. }else{
  805. g_fAD_Max[i] = g_fAD_Max[i];
  806. }
  807. }else {
  808. }
  809. g_fAD_Max[i] = (g_tEE.fSFAMk[i] * g_fAD_Max[i] + g_tEE.sSFAMb[i]);
  810. if (g_fAD_Max[i] > 60000)g_fAD_Max[i] = 60000;
  811. if (g_fAD_Max[i] < 20)g_fAD_Max[i] = 20;
  812. uiAD_Max[i] = (unsigned int) g_fAD_Max[i];
  813. }
  814. for(GlobalNum1=0;GlobalNum1<16;GlobalNum1++){
  815. ucBuffer_Data[2+ GlobalNum1] = uiAD_Max[GlobalNum1];//帧
  816. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]>>8;
  817. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]&0xff;
  818. }
  819. for(i=0;i<8;i++){
  820. g_fAD_Max[i] = g_fCY5AD_Max[i];
  821. }
  822. for(i=8;i<16;i++){
  823. g_fAD_Max[i] = g_fCY5AD_Max[i+1];
  824. }
  825. for (i = 0; i < 16; i++) {
  826. if (g_tEE.uiQCbuffer == 0) {
  827. g_fAD_Max[i] = g_fAD_Max[i];
  828. }
  829. else if (g_tEE.uiQCbuffer == 1) {
  830. if (g_fAD_Max[i] > g_tEE.CY5_MPPCB) {
  831. g_fAD_Max[i] = g_fAD_Max[i] - g_tEE.CY5_MPPCB;
  832. g_fAD_Max[i] = g_fAD_Max[i] / (g_fQCCY5_Current / g_fQCCY5);
  833. g_fAD_Max[i] = g_fAD_Max[i] + g_tEE.CY5_MPPCB;
  834. }else{
  835. g_fAD_Max[i] = g_fAD_Max[i] / (g_fQCCY5_Current / g_fQCCY5);
  836. }
  837. }
  838. else if (g_tEE.uiQCbuffer == 2) {
  839. if (g_fAD_Max[i] > g_tEE.CY5_MPPCB) {
  840. g_fAD_Max[i] = g_fAD_Max[i] - g_tEE.CY5_MPPCB;
  841. g_fAD_Max[i] = g_fAD_Max[i] / (g_tEE.CY5_MPPCTk1 * lMPPCtemp * lMPPCtemp + g_tEE.CY5_MPPCTk2 * lMPPCtemp + g_tEE.CY5_MPPCTb1);
  842. g_fAD_Max[i] = g_fAD_Max[i] + g_tEE.CY5_MPPCB;
  843. }else{
  844. g_fAD_Max[i] = g_fAD_Max[i];
  845. }
  846. }
  847. else {
  848. }
  849. g_fAD_Max[i] = (g_tEE.fSCY5k[i] * g_fAD_Max[i] + g_tEE.sSCY5b[i]);
  850. if (g_fAD_Max[i] > 60000)g_fAD_Max[i] = 60000;
  851. if (g_fAD_Max[i] < 20)g_fAD_Max[i] = 20;
  852. uiAD_Max[i] = (unsigned int) g_fAD_Max[i];
  853. }
  854. for(GlobalNum1=16;GlobalNum1<32;GlobalNum1++){
  855. ucBuffer_Data[2+GlobalNum1]=uiAD_Max[GlobalNum1-16];//帧
  856. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]>>8;
  857. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]&0xff;
  858. }
  859. for(i=0;i<8;i++){
  860. g_fAD_Max[i] = g_fVICAD_Max[i];
  861. }
  862. for(i=8;i<16;i++){
  863. g_fAD_Max[i] = g_fVICAD_Max[i+1];
  864. }
  865. for (i = 0; i < 16; i++) {
  866. if (g_tEE.uiQCbuffer == 0) {
  867. g_fAD_Max[i] = g_fAD_Max[i];
  868. } else if (g_tEE.uiQCbuffer == 1) {
  869. if (g_fAD_Max[i] > g_tEE.VIC_MPPCB) {
  870. g_fAD_Max[i] = g_fAD_Max[i] - g_tEE.VIC_MPPCB;
  871. g_fAD_Max[i] = g_fAD_Max[i] / (g_fQCVIC_Current / g_fQCVIC);
  872. g_fAD_Max[i] = g_fAD_Max[i] + g_tEE.VIC_MPPCB;
  873. }else{
  874. g_fAD_Max[i] = g_fAD_Max[i] / (g_fQCVIC_Current / g_fQCVIC);
  875. }
  876. } else if (g_tEE.uiQCbuffer == 2) {
  877. if (g_fAD_Max[i] > g_tEE.VIC_MPPCB) {
  878. g_fAD_Max[i] = g_fAD_Max[i] - g_tEE.VIC_MPPCB;
  879. g_fAD_Max[i] = g_fAD_Max[i] / (g_tEE.VIC_MPPCTk1 * lMPPCtemp * lMPPCtemp + g_tEE.VIC_MPPCTk2 * lMPPCtemp + g_tEE.VIC_MPPCTb1);
  880. g_fAD_Max[i] = g_fAD_Max[i] + g_tEE.VIC_MPPCB;
  881. }else{
  882. g_fAD_Max[i] = g_fAD_Max[i];
  883. }
  884. }else {
  885. }
  886. g_fAD_Max[i] = (g_tEE.fSVICk[i] * g_fAD_Max[i] + g_tEE.sSVICb[i]);
  887. if (g_fAD_Max[i] > 60000)g_fAD_Max[i] = 60000;
  888. if (g_fAD_Max[i] < 20)g_fAD_Max[i] = 20;
  889. uiAD_Max[i] = (unsigned int) g_fAD_Max[i];
  890. }
  891. for(GlobalNum1=32;GlobalNum1<48;GlobalNum1++){
  892. ucBuffer_Data[2+GlobalNum1]=uiAD_Max[GlobalNum1-32];//帧
  893. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]>>8;
  894. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]&0xff;
  895. }
  896. for(i=0;i<8;i++){
  897. g_fAD_Max[i] = g_fROXAD_Max[i];
  898. }
  899. for(i=8;i<16;i++){//排序
  900. g_fAD_Max[i] = g_fROXAD_Max[i+1];
  901. }
  902. for (i = 0; i < 16; i++) {
  903. if (g_tEE.uiQCbuffer == 0) {
  904. g_fAD_Max[i] = g_fAD_Max[i];
  905. } else if (g_tEE.uiQCbuffer == 1) {
  906. if (g_fAD_Max[i] > g_tEE.ROX_MPPCB) {
  907. g_fAD_Max[i] = g_fAD_Max[i] - g_tEE.ROX_MPPCB;
  908. g_fAD_Max[i] = g_fAD_Max[i] / (g_fQCROX_Current / g_fQCROX);
  909. g_fAD_Max[i] = g_fAD_Max[i] + g_tEE.ROX_MPPCB;
  910. }else{
  911. g_fAD_Max[i] = g_fAD_Max[i] / (g_fQCROX_Current / g_fQCROX);
  912. }
  913. } else if (g_tEE.uiQCbuffer == 2) {
  914. if (g_fAD_Max[i] > g_tEE.ROX_MPPCB) {
  915. g_fAD_Max[i] = g_fAD_Max[i] - g_tEE.ROX_MPPCB;
  916. g_fAD_Max[i] = g_fAD_Max[i] / (g_tEE.ROX_MPPCTk1 * lMPPCtemp * lMPPCtemp + g_tEE.ROX_MPPCTk2 * lMPPCtemp + g_tEE.ROX_MPPCTb1);
  917. g_fAD_Max[i] = g_fAD_Max[i] + g_tEE.ROX_MPPCB;
  918. }else{
  919. g_fAD_Max[i] = g_fAD_Max[i];
  920. }
  921. }else {
  922. }
  923. g_fAD_Max[i] = (g_tEE.fSROXk[i] * g_fAD_Max[i] + g_tEE.sSROXb[i]);
  924. if (g_fAD_Max[i] > 60000)g_fAD_Max[i] = 60000;
  925. if (g_fAD_Max[i] < 20)g_fAD_Max[i] = 20;
  926. uiAD_Max[i] = (unsigned int) g_fAD_Max[i];
  927. }
  928. for(GlobalNum1=48;GlobalNum1<55;GlobalNum1++){
  929. ucBuffer_Data[2+GlobalNum1]=uiAD_Max[GlobalNum1-48];//帧
  930. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]>>8;
  931. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]&0xff;
  932. }
  933. if(g_ucMPPCtemp == 1){
  934. ucBuffer_Data[57] = (unsigned int)lMPPCtemp;
  935. g_ucU1RX_Data[3] += ucBuffer_Data[57]>>8;
  936. g_ucU1RX_Data[3] += ucBuffer_Data[57]&0xff;
  937. }else{
  938. ucBuffer_Data[57]=uiAD_Max[7];//帧
  939. g_ucU1RX_Data[3] += ucBuffer_Data[57]>>8;
  940. g_ucU1RX_Data[3] += ucBuffer_Data[57]&0xff;
  941. }
  942. for(GlobalNum1=56;GlobalNum1<64;GlobalNum1++){
  943. ucBuffer_Data[2+GlobalNum1]=uiAD_Max[GlobalNum1-48];//帧
  944. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]>>8;
  945. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]&0xff;
  946. }
  947. g_ucU1RX_Data[3] +=ucBuffer_Data[0]>>8;
  948. g_ucU1RX_Data[3] +=ucBuffer_Data[0]&0xff;
  949. g_ucU1RX_Data[3] +=ucBuffer_Data[1]>>8;
  950. g_ucU1RX_Data[3] +=ucBuffer_Data[1]&0xff;
  951. ucBuffer_Data[GlobalNum1+2]=g_ucU1RX_Data[3]<<8;
  952. memset( uiAD_Max,0,16*sizeof(unsigned int));
  953. while(DMA1CONbits.CHEN);
  954. DMA1CNT=(ucBuffer_Data[1]>>8)-1;
  955. DMA1CONbits.CHEN=1;
  956. DMA1REQbits.FORCE =1;
  957. break;
  958. /***********************0x0d)******************************/
  959. case PCR_PMT:
  960. MPPCPower = g_ucU1RX_Data[4];
  961. MPPCPower = (MPPCPower<<8) + g_ucU1RX_Data[5];
  962. Write_DAC(DA_FAM);
  963. Delay_ms(10);
  964. Write_DAC(DA_FAM);
  965. g_uiFrmLth = 6;
  966. g_ucU1TX_Data[0] = FRAME_HEAD;
  967. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  968. g_ucU1TX_Data[2] = 0;
  969. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  970. g_ucU1TX_Data[4] = Flag_STATUS; //状态位
  971. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  972. while(DMA3CONbits.CHEN);
  973. DMA3CNT=(g_uiFrmLth-1);
  974. DMA3CONbits.CHEN = 1;
  975. DMA3REQbits.FORCE = 1;
  976. break;
  977. /**********************(0x0f)***********************/
  978. case PCR_STALED:
  979. g_ucSTATE_RUN = g_ucU1RX_Data[4];
  980. if(g_ucSTATE_RUN == 2){
  981. CAPTarget_temp[0] = CAPTarget_temp[1] = g_tEE.CAPTemp_PCR;
  982. //
  983. // IEC1bits.INT2IE = 1;
  984. Alldata = 1;
  985. MotorXScan(g_tEE.uiXPulseScan * 2, 1, g_tEE.uiXSpeedScan);
  986. MotorXMoveTo(0, uiSpeed);
  987. MotorXHome(g_tEE.uiXPulseHome,g_tEE.uiXSpeedHome,g_tEE.uiXSpeedLeave);
  988. Alldata = 2;
  989. ulAD_Max = 0;
  990. Bubble_Sort( &FAMData[8][15], 50);
  991. for(j=18;j<(SUM1-18);j++){
  992. ulAD_Max += FAMData[8][j];
  993. }
  994. g_fQCFAM = (float)(ulAD_Max/3);
  995. if(g_fQCFAM<100)g_fQCFAM = 100;
  996. if(g_fQCFAM>60000)g_fQCFAM = 60000;
  997. ulAD_Max = 0;
  998. Bubble_Sort( &VICData[8][15], 50);
  999. for(j=18;j<(SUM1-18);j++){
  1000. ulAD_Max += VICData[8][j];
  1001. }
  1002. g_fQCVIC = (float)(ulAD_Max/3);
  1003. if(g_fQCVIC<100)g_fQCVIC = 100;
  1004. if(g_fQCVIC>60000)g_fQCVIC = 60000;
  1005. ulAD_Max = 0;
  1006. Bubble_Sort( &ROXData[8][15], 50);
  1007. for(j=18;j<(SUM1-18);j++){
  1008. ulAD_Max += ROXData[8][j];
  1009. }
  1010. g_fQCROX = (float)(ulAD_Max/3);
  1011. if(g_fQCROX<100)g_fQCROX = 100;
  1012. if(g_fQCROX>60000)g_fQCROX = 60000;
  1013. ulAD_Max = 0;
  1014. Bubble_Sort( &CY5Data[8][15], 50);
  1015. for(j=18;j<(SUM1-18);j++){
  1016. ulAD_Max += CY5Data[8][j];
  1017. }
  1018. g_fQCCY5 = (float)(ulAD_Max/3);
  1019. if(g_fQCCY5<100)g_fQCCY5 = 100;
  1020. if(g_fQCCY5>60000)g_fQCCY5 = 60000;
  1021. ulAD_Max = 0;
  1022. Bubble_Sort( &CY6Data[8][15], 50);
  1023. for(j=18;j<(SUM1-18);j++){
  1024. ulAD_Max += CY6Data[8][j];
  1025. }
  1026. g_fQCCY6 = (float)(ulAD_Max/3);
  1027. if(g_fQCCY6<100)g_fQCCY6 = 100;
  1028. if(g_fQCCY6>60000)g_fQCCY6 = 60000;
  1029. }
  1030. else if(g_ucSTATE_RUN == 1){
  1031. CAPTarget_temp[0] = g_tEE.CAPTarget_temp[0];
  1032. CAPTarget_temp[1] = g_tEE.CAPTarget_temp[1];
  1033. if(g_usEERadiatorOvertemp >= 60)g_usEERadiatorOvertemp = 60;
  1034. if(g_usEERadiatorOvertemp < 20)g_usEERadiatorOvertemp = 20;
  1035. for (i = 0; i < 2; i++) {
  1036. TempChn[i].fBlockTargetTemp = g_usEERadiatorOvertemp;
  1037. TempChn[i].cPeltierRun = 1;
  1038. ScheduleOperate(i);
  1039. }
  1040. }
  1041. g_uiFrmLth = 6;
  1042. g_ucU1TX_Data[0] = FRAME_HEAD;
  1043. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1044. g_ucU1TX_Data[2] = 0;
  1045. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1046. g_ucU1TX_Data[4] = Flag_STATUS; //状态位
  1047. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1048. while(DMA3CONbits.CHEN);
  1049. DMA3CNT=(g_uiFrmLth-1);
  1050. DMA3CONbits.CHEN = 1;
  1051. DMA3REQbits.FORCE = 1;
  1052. break;
  1053. /***************************(0x11)************************/
  1054. case READ_EEPROM:
  1055. uiEE_address = g_ucU1RX_Data[4];
  1056. uiEE_address = (uiEE_address << 8) + g_ucU1RX_Data[5];
  1057. uiEE_address = (uiEE_address << 8) + g_ucU1RX_Data[6];
  1058. GlobalTmp = g_ucU1RX_Data[7];
  1059. for(i=0;i<GlobalTmp;i++){
  1060. g_ucU1TX_Data[FRAME_LTHL_INDEX+i] = EE_read(uiEE_address+i);
  1061. }
  1062. g_uiFrmLth = GlobalTmp+6;
  1063. g_ucU1TX_Data[0] = FRAME_HEAD;
  1064. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1065. g_ucU1TX_Data[2] = 0;//地址
  1066. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1067. g_ucU1TX_Data[g_uiFrmLth-FRAME_STATE_INDEX-1] = Flag_STATUS;
  1068. g_ucU1TX_Data[g_uiFrmLth-FRAME_CRC_INDEX-1] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1069. while(DMA3CONbits.CHEN);
  1070. DMA3CNT=(g_uiFrmLth-1);
  1071. DMA3CONbits.CHEN = 1;
  1072. DMA3REQbits.FORCE = 1;
  1073. break;
  1074. /***************************(0x12)*************************/
  1075. case WRITE_EEPROM:
  1076. uiEE_address = g_ucU1RX_Data[4];
  1077. uiEE_address = (uiEE_address << 8) + g_ucU1RX_Data[5];
  1078. uiEE_address = (uiEE_address << 8) + g_ucU1RX_Data[6];
  1079. if((uiEE_address >= 0x20)&&(uiEE_address < 0x40)){
  1080. }else{
  1081. GlobalTmp = g_ucU1RX_Data[3]-8;
  1082. for(i=0;i<GlobalTmp;i++){
  1083. EE_write(uiEE_address+i,g_ucU1RX_Data[7+i]);
  1084. Delay_ms(10);
  1085. }
  1086. Read_Sys_EE(uiEE_address);
  1087. }
  1088. g_uiFrmLth = 6;
  1089. g_ucU1TX_Data[0] = FRAME_HEAD;
  1090. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1091. g_ucU1TX_Data[2] = 0;
  1092. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1093. g_ucU1TX_Data[4] = Flag_STATUS; //状态标志位
  1094. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1095. while(DMA3CONbits.CHEN);
  1096. DMA3CNT=(g_uiFrmLth-1);
  1097. DMA3CONbits.CHEN = 1;
  1098. DMA3REQbits.FORCE = 1;
  1099. break;
  1100. /**************************(0x15)**********************/
  1101. case PCR_RDSENSOR:
  1102. g_uiFrmLth = 7;
  1103. if(HOMEX==1)Sensor = 1;
  1104. else Sensor = 0;
  1105. g_ucU1TX_Data[0] = FRAME_HEAD;
  1106. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1107. g_ucU1TX_Data[2] = 0;
  1108. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1109. g_ucU1TX_Data[4] = Sensor;
  1110. g_ucU1TX_Data[5] = Flag_STATUS;
  1111. g_ucU1TX_Data[6] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1112. while(DMA3CONbits.CHEN);
  1113. DMA3CNT=(g_uiFrmLth-1);
  1114. DMA3CONbits.CHEN = 1;
  1115. DMA3REQbits.FORCE = 1;
  1116. /**************************(0x18)**********************/
  1117. case GET_MPPCAD:
  1118. memset( uiMppcADBuff,0,6*sizeof(unsigned int));
  1119. uiMppcADBuff[0] = AD_Get(0x09);
  1120. uiMppcADBuff[1] = AD_Get(0x0B);
  1121. uiMppcADBuff[2] = AD_Get(0x0A);
  1122. uiMppcADBuff[3] = AD_Get(0x0C);
  1123. uiMppcADBuff[6] = AD_Get(0x0F);
  1124. g_uiFrmLth = 20;
  1125. g_ucU1TX_Data[0] = FRAME_HEAD;
  1126. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1127. g_ucU1TX_Data[2] = 0;
  1128. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1129. g_ucU1TX_Data[4] = uiMppcADBuff[0] >> 8;
  1130. g_ucU1TX_Data[5] = (unsigned char) uiMppcADBuff[0];
  1131. g_ucU1TX_Data[6] = uiMppcADBuff[1] >> 8;
  1132. g_ucU1TX_Data[7] = (unsigned char) uiMppcADBuff[1];
  1133. g_ucU1TX_Data[8] = uiMppcADBuff[2] >> 8;
  1134. g_ucU1TX_Data[9] = (unsigned char) uiMppcADBuff[2];
  1135. g_ucU1TX_Data[10] = uiMppcADBuff[3] >> 8;
  1136. g_ucU1TX_Data[11] = (unsigned char) uiMppcADBuff[3];
  1137. g_ucU1TX_Data[12] = uiMppcADBuff[4] >> 8;
  1138. g_ucU1TX_Data[13] = (unsigned char) uiMppcADBuff[4];
  1139. g_ucU1TX_Data[14] = uiMppcADBuff[5] >> 8;
  1140. g_ucU1TX_Data[15] = (unsigned char) uiMppcADBuff[5];
  1141. g_ucU1TX_Data[16] = uiMppcADBuff[6] >> 8;
  1142. g_ucU1TX_Data[17] = (unsigned char) uiMppcADBuff[6];
  1143. g_ucU1TX_Data[18] = Flag_STATUS; //状态位
  1144. g_ucU1TX_Data[19] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1145. while(DMA3CONbits.CHEN);
  1146. DMA3CNT=(g_uiFrmLth-1);
  1147. DMA3CONbits.CHEN = 1;
  1148. DMA3REQbits.FORCE = 1;
  1149. break;
  1150. /*************************** (0x18)***********************/
  1151. case PCR_RDADC:
  1152. g_uiFrmLth = 24;
  1153. g_ucU1TX_Data[0] = FRAME_HEAD;
  1154. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1155. g_ucU1TX_Data[2] = 0;
  1156. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1157. g_ucU1TX_Data[4] = dTemperatureAD[0] >> 8;
  1158. g_ucU1TX_Data[5] = (unsigned char) dTemperatureAD[0];
  1159. g_ucU1TX_Data[6] = dTemperatureAD[1] >> 8;
  1160. g_ucU1TX_Data[7] = (unsigned char) dTemperatureAD[1];
  1161. g_ucU1TX_Data[8] = dTemperatureAD[2] >> 8;
  1162. g_ucU1TX_Data[9] = (unsigned char) dTemperatureAD[2];
  1163. g_ucU1TX_Data[10] = dTemperatureAD[3] >> 8;
  1164. g_ucU1TX_Data[11] = (unsigned char) dTemperatureAD[3];
  1165. g_ucU1TX_Data[12] = dTemperatureAD[4] >> 8;
  1166. g_ucU1TX_Data[13] = (unsigned char) dTemperatureAD[4];
  1167. g_ucU1TX_Data[14] = dTemperatureAD[5] >> 8;
  1168. g_ucU1TX_Data[15] = (unsigned char) dTemperatureAD[5];
  1169. g_ucU1TX_Data[16] = dTemperatureAD[6] >> 8;
  1170. g_ucU1TX_Data[17] = (unsigned char) dTemperatureAD[6];
  1171. g_ucU1TX_Data[18] = dTemperatureAD[7] >> 8;
  1172. g_ucU1TX_Data[19] = (unsigned char) dTemperatureAD[7];
  1173. g_ucU1TX_Data[20] = dTemperatureAD[8] >> 8;
  1174. g_ucU1TX_Data[21] = (unsigned char) dTemperatureAD[8];
  1175. g_ucU1TX_Data[22] = Flag_STATUS;
  1176. g_ucU1TX_Data[23] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1177. while(DMA3CONbits.CHEN);
  1178. DMA3CNT=(g_uiFrmLth-1);
  1179. DMA3CONbits.CHEN = 1;
  1180. DMA3REQbits.FORCE = 1;
  1181. break;
  1182. /***************************(0x18)***********************/
  1183. // case ADGET:
  1184. //
  1185. // ADC = AD_Get(g_ucU1RX_Data[4]);
  1186. //
  1187. // g_uiFrmLth = 8;
  1188. // g_ucU1TX_Data[0] = FRAME_HEAD;
  1189. // g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1190. // g_ucU1TX_Data[2] = 0;
  1191. // g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1192. // g_ucU1TX_Data[4] = AD_Get(g_ucU1RX_Data[4]) >> 8;
  1193. // g_ucU1TX_Data[5] = (unsigned char) AD_Get(g_ucU1RX_Data[4]);
  1194. // g_ucU1TX_Data[6] = Flag_STATUS; //状态位
  1195. // g_ucU1TX_Data[7] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1196. // while(DMA3CONbits.CHEN);
  1197. // DMA3CNT=(g_uiFrmLth-1);
  1198. // DMA3CONbits.CHEN = 1;
  1199. // DMA3REQbits.FORCE = 1;
  1200. // break;
  1201. /***************************(0x1C)***********************/
  1202. case PCR_FAN:
  1203. FanCount = g_ucU1RX_Data[4];
  1204. MPPCPower = g_ucU1RX_Data[5];
  1205. MPPCPower = (MPPCPower<<8) + g_ucU1RX_Data[6];
  1206. FANOC_Set(FanCount,MPPCPower);
  1207. g_uiFrmLth = 6;
  1208. g_ucU1TX_Data[0] = FRAME_HEAD;
  1209. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1210. g_ucU1TX_Data[2] = 0;
  1211. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1212. g_ucU1TX_Data[4] = Flag_STATUS; //状态位
  1213. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1214. while(DMA3CONbits.CHEN);
  1215. DMA3CNT=(g_uiFrmLth-1);
  1216. DMA3CONbits.CHEN = 1;
  1217. DMA3REQbits.FORCE = 1;
  1218. break;
  1219. /**************************(0x44)***********************/
  1220. case QC_Data:
  1221. g_uiFrmLth = 14;
  1222. g_ucU1TX_Data[0] = FRAME_HEAD;
  1223. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1224. g_ucU1TX_Data[2] = 0;
  1225. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1226. g_ucU1TX_Data[4] = (unsigned int)g_fQCFAM_Current >> 8;
  1227. g_ucU1TX_Data[5] = (unsigned char) g_fQCFAM_Current;
  1228. g_ucU1TX_Data[6] = (unsigned int)g_fQCVIC_Current >> 8;
  1229. g_ucU1TX_Data[7] = (unsigned char) g_fQCVIC_Current;
  1230. g_ucU1TX_Data[8] = (unsigned int)g_fQCROX_Current >> 8;
  1231. g_ucU1TX_Data[9] = (unsigned char) g_fQCROX_Current;
  1232. g_ucU1TX_Data[10] = (unsigned int)g_fQCCY5_Current >> 8;
  1233. g_ucU1TX_Data[11] = (unsigned char) g_fQCCY5_Current;
  1234. g_ucU1TX_Data[12] = Flag_STATUS; //状态位
  1235. g_ucU1TX_Data[13] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1236. while(DMA3CONbits.CHEN);
  1237. DMA3CNT=(g_uiFrmLth-1);
  1238. DMA3CONbits.CHEN = 1;
  1239. DMA3REQbits.FORCE = 1;
  1240. break;
  1241. /***************************(0x1E)*************************/
  1242. case PCR_IO:
  1243. g_uiFrmLth = 6;
  1244. if(g_ucU1RX_Data[4] == 255){
  1245. g_ucENABLE = 0;
  1246. }else if(g_ucU1RX_Data[4] == 254){
  1247. g_ucENABLE = 1;
  1248. }else{
  1249. SetIO(g_ucU1RX_Data[4],g_ucU1RX_Data[5]);
  1250. }
  1251. g_ucU1TX_Data[0] = FRAME_HEAD;
  1252. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1253. g_ucU1TX_Data[2] = 0;
  1254. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1255. g_ucU1TX_Data[4] = Flag_STATUS; //状态位
  1256. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1257. while(DMA3CONbits.CHEN);
  1258. DMA3CNT=(g_uiFrmLth-1);
  1259. DMA3CONbits.CHEN = 1;
  1260. DMA3REQbits.FORCE = 1;
  1261. if(g_ucU1RX_Data[4] == 253){
  1262. _RP97R = 0x01;
  1263. _U1RXR = 0x6D;
  1264. }
  1265. else if(g_ucU1RX_Data[4] == 252){
  1266. _RP97R = 0x01;
  1267. _U1RXR = 0x60;
  1268. }
  1269. else{}
  1270. break;
  1271. /*****************************(0xE0)***************************/
  1272. case GET_IO:
  1273. Get_IOstate = Get_IO(g_ucU1RX_Data[4]);
  1274. g_uiFrmLth = 7;
  1275. g_ucU1TX_Data[0] = FRAME_HEAD;
  1276. g_ucU1TX_Data[1] = g_ucCMD1 | 0X80;
  1277. g_ucU1TX_Data[2] = 0;
  1278. g_ucU1TX_Data[3] = g_uiFrmLth; //
  1279. g_ucU1TX_Data[4] = Get_IOstate; //获取的IO状态
  1280. g_ucU1TX_Data[5] = Flag_STATUS; //状态位
  1281. g_ucU1TX_Data[6] = (unsigned char) Check(g_ucU1TX_Data, g_uiFrmLth - 1);
  1282. while (DMA3CONbits.CHEN);
  1283. DMA3CNT = (g_uiFrmLth - 1);
  1284. DMA3CONbits.CHEN = 1;
  1285. DMA3REQbits.FORCE = 1;
  1286. break;
  1287. /************************** (0x31)*************************/
  1288. case SET_PWM:
  1289. ucPWMindex = g_ucU1RX_Data[4];
  1290. lPWMstate = g_ucU1RX_Data[5];
  1291. lPWMstate = (lPWMstate << 8) + g_ucU1RX_Data[6];
  1292. ucCtrlMode = g_ucU1RX_Data[7];
  1293. if (ucCtrlMode == 0) {
  1294. SetPWM(ucPWMindex, lPWMstate);
  1295. } else if (ucCtrlMode == 1) {
  1296. SetPWM(ucPWMindex, -lPWMstate);
  1297. } else {}
  1298. g_uiFrmLth = 6;
  1299. g_ucU1TX_Data[0] = FRAME_HEAD;
  1300. g_ucU1TX_Data[1] = g_ucCMD1 | 0X80;
  1301. g_ucU1TX_Data[2] = 0;
  1302. g_ucU1TX_Data[3] = g_uiFrmLth;
  1303. g_ucU1TX_Data[4] = 0x00; //状态位
  1304. g_ucU1TX_Data[5] = (unsigned char) Check(g_ucU1TX_Data, g_uiFrmLth - 1);
  1305. while(DMA3CONbits.CHEN);
  1306. DMA3CNT=(g_uiFrmLth-1);
  1307. DMA3CONbits.CHEN = 1;
  1308. DMA3REQbits.FORCE = 1;
  1309. break;
  1310. /**************************(0x32)***********************/
  1311. case GET_PWM:
  1312. g_uiFrmLth = 18;
  1313. g_ucU1TX_Data[0] = FRAME_HEAD;
  1314. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1315. g_ucU1TX_Data[2] = 0;
  1316. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1317. g_ucU1TX_Data[4] = g_uiGetPWM[0] >> 8;
  1318. g_ucU1TX_Data[5] = (unsigned char) g_uiGetPWM[0];
  1319. g_ucU1TX_Data[6] = g_uiGetPWM[1] >> 8;
  1320. g_ucU1TX_Data[7] = (unsigned char) g_uiGetPWM[1];
  1321. g_ucU1TX_Data[8] = g_uiGetPWM[2] >> 8;
  1322. g_ucU1TX_Data[9] = (unsigned char) g_uiGetPWM[2];
  1323. g_ucU1TX_Data[10] = g_uiGetPWM[3] >> 8;
  1324. g_ucU1TX_Data[11] = (unsigned char) g_uiGetPWM[3];
  1325. g_ucU1TX_Data[12] = g_uiGetPWM[4] >> 8;
  1326. g_ucU1TX_Data[13] = (unsigned char) g_uiGetPWM[4];
  1327. g_ucU1TX_Data[14] = g_uiGetPWM[5] >> 8;
  1328. g_ucU1TX_Data[15] = (unsigned char) g_uiGetPWM[5];
  1329. g_ucU1TX_Data[16] = Flag_STATUS; //状态位
  1330. g_ucU1TX_Data[17] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1331. while(DMA3CONbits.CHEN);
  1332. DMA3CNT=(g_uiFrmLth-1);
  1333. DMA3CONbits.CHEN = 1;
  1334. DMA3REQbits.FORCE = 1;
  1335. break;
  1336. /********************(0x25)**********************/
  1337. case PCR_TUBEMODE:
  1338. g_uiFrmLth = 6;
  1339. g_ucU1TX_Data[0] = FRAME_HEAD;
  1340. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1341. g_ucU1TX_Data[2] = 0;
  1342. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1343. g_ucU1TX_Data[4] = Flag_STATUS; //状态位
  1344. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1345. while(DMA3CONbits.CHEN);
  1346. DMA3CNT=(g_uiFrmLth-1);
  1347. DMA3CONbits.CHEN = 1;
  1348. DMA3REQbits.FORCE = 1;
  1349. break;
  1350. /**********************(0x26)***************************/
  1351. case PCR_INBOX:
  1352. g_uiFrmLth = 6;
  1353. g_ucU1TX_Data[0] = FRAME_HEAD;
  1354. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1355. g_ucU1TX_Data[2] = 0;
  1356. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1357. g_ucU1TX_Data[4] = 0; //状态位
  1358. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1359. while(DMA3CONbits.CHEN);
  1360. DMA3CNT=(g_uiFrmLth-1);
  1361. DMA3CONbits.CHEN = 1;
  1362. DMA3REQbits.FORCE = 1;
  1363. break;
  1364. /**********************(0x27)***************************/
  1365. case PCR_OUTBOX:
  1366. g_uiFrmLth = 6;
  1367. g_ucU1TX_Data[0] = FRAME_HEAD;
  1368. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1369. g_ucU1TX_Data[2] = 0;
  1370. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1371. g_ucU1TX_Data[4] = 0; //状态位
  1372. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1373. while(DMA3CONbits.CHEN);
  1374. DMA3CNT=(g_uiFrmLth-1);
  1375. DMA3CONbits.CHEN = 1;
  1376. DMA3REQbits.FORCE = 1;
  1377. break;
  1378. case PCR_TEMP://0x43
  1379. if((TempChn[0].cTubeTempAriv == 1)||(TempChn[1].cTubeTempAriv == 1)||(TempChn[2].cTubeTempAriv == 1)||(TempChn[3].cTubeTempAriv == 1)
  1380. ){
  1381. g_cTubeTempAriv = 1;
  1382. }else{
  1383. g_cTubeTempAriv = 0;
  1384. }
  1385. g_uiFrmLth = 23;
  1386. g_ucU1TX_Data[0] = FRAME_HEAD;
  1387. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1388. g_ucU1TX_Data[2] = 0;
  1389. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1390. g_ucU1TX_Data[4] = (unsigned int)(TempChn[0].fCurrentTemperature*100.0) >> 8;
  1391. g_ucU1TX_Data[5] = (unsigned char) (TempChn[0].fCurrentTemperature*100.0);
  1392. g_ucU1TX_Data[6] = (unsigned int)(TempChn[1].fCurrentTemperature*100.0) >> 8;
  1393. g_ucU1TX_Data[7] = (unsigned char) (TempChn[1].fCurrentTemperature*100.0);
  1394. g_ucU1TX_Data[8] = (unsigned int)(TempChn[2].fCurrentTemperature*100.0) >> 8;
  1395. g_ucU1TX_Data[9] = (unsigned char) (TempChn[2].fCurrentTemperature*100.0);
  1396. g_ucU1TX_Data[10] = (unsigned int)(TempChn[3].fCurrentTemperature*100.0) >> 8;
  1397. g_ucU1TX_Data[11] = (unsigned char) (TempChn[3].fCurrentTemperature*100.0);
  1398. g_ucU1TX_Data[12] = (unsigned int)(TempChn[4].fCurrentTemperature*100.0) >> 8;
  1399. g_ucU1TX_Data[13] = (unsigned char) (TempChn[4].fCurrentTemperature*100.0);
  1400. g_ucU1TX_Data[14] = (unsigned int)(TempChn[5].fCurrentTemperature*100.0) >> 8;
  1401. g_ucU1TX_Data[15] = (unsigned char) (TempChn[5].fCurrentTemperature*100.0);
  1402. g_ucU1TX_Data[16] = (unsigned int)(TempChn[5].fCurrentTemperature*100.0) >> 8;
  1403. g_ucU1TX_Data[17] = (unsigned char) (TempChn[5].fCurrentTemperature*100.0);
  1404. g_ucU1TX_Data[18] = (unsigned int)(TempChn[5].fCurrentTemperature*100.0) >> 8;
  1405. g_ucU1TX_Data[19] = (unsigned char) (TempChn[5].fCurrentTemperature*100.0);
  1406. g_ucU1TX_Data[20] = g_cTubeTempAriv;
  1407. g_ucU1TX_Data[21] = Flag_STATUS; //状态位
  1408. g_ucU1TX_Data[22] = (unsigned char) Check(g_ucU1TX_Data, g_uiFrmLth - 1);
  1409. while(DMA3CONbits.CHEN);
  1410. DMA3CNT=(g_uiFrmLth-1);
  1411. DMA3CONbits.CHEN = 1;
  1412. DMA3REQbits.FORCE = 1;
  1413. break;
  1414. /***************(0x28)*********************/
  1415. case PCR_STATEBIT://0x28
  1416. g_uiFrmLth = 8;
  1417. g_ucU1TX_Data[0] = FRAME_HEAD;
  1418. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1419. g_ucU1TX_Data[2] = 0;
  1420. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1421. g_ucU1TX_Data[4] = 0x00;
  1422. g_ucU1TX_Data[5] = 0x00;
  1423. g_ucU1TX_Data[6] = Flag_STATUS; //状态位
  1424. g_ucU1TX_Data[7] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1425. while(DMA3CONbits.CHEN);
  1426. DMA3CNT=(g_uiFrmLth-1);
  1427. DMA3CONbits.CHEN = 1;
  1428. DMA3REQbits.FORCE = 1;
  1429. break;
  1430. /*********************(0xFF)***********************/
  1431. case RD_PCRALLDATA:
  1432. ucBuffer_Data[0]=((g_ucCMD1|0x80)<<8)+FRAME_HEAD;
  1433. ucBuffer_Data[1]=(ZLENTH2<<8)+0;
  1434. g_ucU1RX_Data[3]=0;
  1435. BTvar.ucScanNum = 0;
  1436. if(g_ucU1RX_Data[4] == 1){
  1437. SampleTransNo = 0;
  1438. for(i = 0;i<6748;i++){
  1439. ucBuffer_Data[i+2] = ((ucBuffer_Data[i+2]<< 8) + (ucBuffer_Data[i+2]>> 8));
  1440. }
  1441. ucBuffer_Data[2] = 0;
  1442. for(GlobalNum1=0;GlobalNum1<(ZLENTH2/2-3);GlobalNum1++){
  1443. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]>>8;
  1444. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]&0xff;
  1445. }
  1446. }
  1447. else {
  1448. SampleTransNo ++;
  1449. for(GlobalNum1=0;GlobalNum1<(ZLENTH2/2-3);GlobalNum1++){
  1450. ucBuffer_Data[2+GlobalNum1]=ucBuffer_Data[SampleTransNo * (ZLENTH2/2-3)+GlobalNum1];//帧
  1451. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]>>8;
  1452. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]&0xff;
  1453. }
  1454. }
  1455. g_ucU1RX_Data[3] +=ucBuffer_Data[0]>>8;
  1456. g_ucU1RX_Data[3] +=ucBuffer_Data[0]&0xff;
  1457. g_ucU1RX_Data[3] +=ucBuffer_Data[1]>>8;
  1458. g_ucU1RX_Data[3] +=ucBuffer_Data[1]&0xff;
  1459. ucBuffer_Data[GlobalNum1+2]=(g_ucU1RX_Data[3]<<8);//低位先发送,错误
  1460. while(DMA1CONbits.CHEN);
  1461. DMA1CNT=(ucBuffer_Data[1]>>8)-1;
  1462. DMA1CONbits.CHEN = 1;
  1463. DMA1REQbits.FORCE = 1;
  1464. break;
  1465. /********************(0xFE)***********************/
  1466. case RD_ALLDATAMAX:
  1467. ucBuffer_Data[0]=((g_ucCMD1|0x80)<<8)+FRAME_HEAD;
  1468. ucBuffer_Data[1]=(ZLENTH2<<8)+0;
  1469. g_ucU1RX_Data[3]=0;
  1470. if(g_ucU1RX_Data[4] == 1){
  1471. SampleTransNo = 0;
  1472. n = 0;
  1473. if(g_ucU1RX_Data[5] == 1){
  1474. for(i = 0;i<17;i++){
  1475. for(j = 0;j<SUM1;j++){
  1476. Alldata_Max[n] = ((FAMData[i][j]<< 8) + (FAMData[i][j]>> 8));
  1477. n++;
  1478. }
  1479. }
  1480. }
  1481. else if(g_ucU1RX_Data[5] == 2){
  1482. for(i = 0;i<17;i++){
  1483. for(j = 0;j<SUM1;j++){
  1484. Alldata_Max[n] = ((VICData[i][j]<< 8) + (VICData[i][j]>> 8));
  1485. n++;
  1486. }
  1487. }
  1488. }
  1489. else if(g_ucU1RX_Data[5] == 3){
  1490. for(i = 0;i<17;i++){
  1491. for(j = 0;j<SUM1;j++){
  1492. Alldata_Max[n] = ((ROXData[i][j]<< 8) + (ROXData[i][j]>> 8));
  1493. n++;
  1494. }
  1495. }
  1496. }
  1497. else if(g_ucU1RX_Data[5] == 4){
  1498. for(i = 0;i<17;i++){
  1499. for(j = 0;j<SUM1;j++){
  1500. Alldata_Max[n] = ((CY5Data[i][j]<< 8) + (CY5Data[i][j]>> 8));
  1501. n++;
  1502. }
  1503. }
  1504. }
  1505. }
  1506. else SampleTransNo ++;
  1507. for(GlobalNum1=0;GlobalNum1<ZLENTH2/2-3;GlobalNum1++){
  1508. ucBuffer_Data[2+GlobalNum1]=Alldata_Max[SampleTransNo * (ZLENTH2/2-3)+GlobalNum1];//帧
  1509. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]>>8;
  1510. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]&0xff;
  1511. }
  1512. g_ucU1RX_Data[3] +=ucBuffer_Data[0]>>8;
  1513. g_ucU1RX_Data[3] +=ucBuffer_Data[0]&0xff;
  1514. g_ucU1RX_Data[3] +=ucBuffer_Data[1]>>8;
  1515. g_ucU1RX_Data[3] +=ucBuffer_Data[1]&0xff;
  1516. ucBuffer_Data[GlobalNum1+2]=(g_ucU1RX_Data[3]<<8);
  1517. while(DMA1CONbits.CHEN);
  1518. DMA1CNT=(ucBuffer_Data[1]>>8)-1;
  1519. DMA1CONbits.CHEN = 1;
  1520. DMA1REQbits.FORCE = 1;
  1521. break;
  1522. /****************(0x66)*********************/
  1523. case BT_Protocol://
  1524. BTvar.ucStepNum = g_ucU1RX_Data[5];
  1525. for (i = 0; i < BTvar.ucStepNum; i++) {
  1526. BTStep[i].Temp_Start = (g_ucU1RX_Data[i * 10 + 6] << 8) + g_ucU1RX_Data[i * 10 + 7];
  1527. BTStep[i].Temp_End = (g_ucU1RX_Data[i * 10 + 8] << 8) + g_ucU1RX_Data[i * 10 + 9];
  1528. BTStep[i].Duration = (g_ucU1RX_Data[i * 10 + 10] << 8) + g_ucU1RX_Data[i * 10 + 11];
  1529. BTStep[i].Cycle = g_ucU1RX_Data[i * 10 + 12];
  1530. if(BTStep[i].Cycle == 0)
  1531. BTStep[i].Mode = g_ucU1RX_Data[i * 10 + 13];
  1532. BTStep[i].Point = g_ucU1RX_Data[i * 10 + 14];
  1533. BTStep[i].Goto = g_ucU1RX_Data[i * 10 + 15];
  1534. }
  1535. BTvar.ucStartbuffer = 1;
  1536. BTvar.ucQCbuffer = 1;
  1537. g_uiFrmLth = 8;
  1538. g_ucU1TX_Data[0] = FRAME_HEAD;
  1539. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1540. g_ucU1TX_Data[2] = 0;
  1541. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1542. g_ucU1TX_Data[4] = 0x00;
  1543. g_ucU1TX_Data[5] = 0x00;
  1544. g_ucU1TX_Data[6] = Flag_STATUS; //状态位
  1545. g_ucU1TX_Data[7] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1546. while(DMA3CONbits.CHEN);
  1547. DMA3CNT=(g_uiFrmLth-1);
  1548. DMA3CONbits.CHEN = 1;
  1549. DMA3REQbits.FORCE = 1;
  1550. break;
  1551. default:
  1552. break;
  1553. }
  1554. g_ucUART1_flag = 0;
  1555. g_uiUart1_No = 0;
  1556. g_ucHeaderFlag1 = 0;
  1557. memset(g_ucU1RX_Data,0,g_uiLth1*sizeof(unsigned char));
  1558. g_BUSY1 = 0;
  1559. }