Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of LG2 by
Command.c
00001 #include "stdlib.h" 00002 //#include "math.h" 00003 #include "LPC17xx.h" 00004 #include "Global.h" 00005 int tempNH,tempNL; 00006 unsigned int Rate_Flag; 00007 unsigned int CountBuFFIn; 00008 unsigned int N=0,CRC_N; 00009 unsigned int Rate_7=0; 00010 int iRate_7=0; 00011 unsigned int Param1=0; 00012 unsigned int Param2=0; 00013 unsigned int Param3=0; 00014 unsigned int Param4=0; 00015 ///unsigned int Consol=123; 00016 unsigned int TempParam=1; 00017 unsigned int CountParam=0; 00018 unsigned int OldCuruAngle; 00019 unsigned int OldCaunPlus=0; 00020 unsigned int OldCaunMin=0; 00021 unsigned int OutDeltaPS; 00022 int IntOutDeltaPS; 00023 int ttemp,temp5=1; 00024 int OLDDAC=0; 00025 int rr = 123; 00026 unsigned int pDestT; 00027 GyroParam *Flash; 00028 //int q; 00029 ///////////////flah and boot/////////// 00030 void GoBoot(void) 00031 { 00032 /* Prepare Sectors to be flashed */ 00033 NVIC_DisableIRQ(TIMER1_IRQn ); 00034 NVIC_DisableIRQ(TIMER2_IRQn ); 00035 NVIC_DisableIRQ(TIMER3_IRQn ); 00036 NVIC_DisableIRQ(EINT3_IRQn ); 00037 SystemInitDef(); 00038 vIAP_ReinvokeISP(); 00039 } 00040 00041 void DropDelay(void) 00042 { 00043 Gyro.DropDelayGLD = DropDelayGLD_0; 00044 switch(Gyro.My_Addres) { 00045 case 1: Gyro.DropDelayGLD = DropDelayGLD_1; break; 00046 case 2: Gyro.DropDelayGLD = DropDelayGLD_2; break; 00047 case 3: Gyro.DropDelayGLD = DropDelayGLD_3; break; 00048 } 00049 00050 } 00051 /* 00052 void WriteFlash(void) 00053 { 00054 00055 SystemInitDef(); 00056 WriteCon("\r\n Start Prepare Sectors"); 00057 if(u32IAP_PrepareSectors(5, 5) == IAP_STA_CMD_SUCCESS) 00058 { 00059 WriteCon("\r\nPrepare Sectors OK"); 00060 WriteCon("\r\n Start Erase"); 00061 u32IAP_EraseSectors(IMG_START_SECTOR, IMG_END_SECTOR); 00062 WriteCon("\r\n AND Erase"); 00063 } 00064 else WriteCon("\r\nPrepare Sectors ERROR "); 00065 SystemInit1(); 00066 Gyro.FlashMod = 0; 00067 } 00068 */ 00069 void EraseFlash(void) 00070 { 00071 rr = u32IAP_PrepareSectors(19, 21); 00072 /*sprintf((Time)," dffddfd <%07d> ",rr); 00073 WriteCon(Time);*/ 00074 rr = u32IAP_EraseSectors(19, 21); 00075 /* sprintf((Time)," dffddfd <%07d> ",rr); 00076 WriteCon(Time);*/ 00077 } 00078 00079 void WriteFlash(void) 00080 00081 { 00082 Gyro.FlashMod = 0; 00083 00084 //SystemInitDef(); 00085 NVIC_DisableIRQ(TIMER1_IRQn ); 00086 NVIC_DisableIRQ(TIMER2_IRQn ); 00087 NVIC_DisableIRQ(TIMER3_IRQn ); 00088 NVIC_DisableIRQ(EINT3_IRQn ); 00089 00090 // unsigned int start_address = (unsigned int) & GyroP; 00091 rr = u32IAP_PrepareSectors(19, 21); 00092 rr = u32IAP_EraseSectors (19, 21); 00093 rr = u32IAP_PrepareSectors(19, 21); 00094 rr = u32IAP_CopyRAMToFlash(0x030000, &GyroP , 1024); 00095 // SystemInit1(); // Инициализация контроллера: установка тактовых частот 00096 //SystemCoreClockUpdate1(); // расчет тактовой частоты процессора перед инициализацией UART - 103MHz 00097 00098 NVIC_EnableIRQ(TIMER1_IRQn ); 00099 NVIC_EnableIRQ(TIMER2_IRQn ); 00100 NVIC_EnableIRQ(TIMER3_IRQn ); 00101 NVIC_EnableIRQ(EINT3_IRQn ); 00102 //SystemCoreClockUpdate1(); 00103 00104 } 00105 void ReadFlash ( void) 00106 { 00107 NVIC_DisableIRQ(TIMER1_IRQn ); 00108 NVIC_DisableIRQ(TIMER2_IRQn ); 00109 NVIC_DisableIRQ(TIMER3_IRQn ); 00110 NVIC_DisableIRQ(EINT3_IRQn ); 00111 Gyro.FlashMod = 0; 00112 WriteCon("\r\n Pirivet Flash"); 00113 00114 pDestT= (unsigned int) (0x030000); 00115 Flash = (GyroParam*) pDestT; 00116 GyroP = *(Flash); 00117 00118 NVIC_EnableIRQ(TIMER1_IRQn ); 00119 NVIC_EnableIRQ(TIMER2_IRQn ); 00120 NVIC_EnableIRQ(TIMER3_IRQn ); 00121 NVIC_EnableIRQ(EINT3_IRQn ); 00122 } 00123 ///////////////end flah and boot/////////// 00124 00125 void M_RateA(void) 00126 { 00127 00128 if(Gyro.ModeOut==3) 00129 { 00130 if (Gyro.Device_Mode) Gyro.ModeOut=4; 00131 } 00132 00133 switch(Gyro.ModeOut) 00134 { 00135 case 1: if(Gyro.Rate1_Event ) CMD_Rate(); break; 00136 case 2: if(Gyro.Reper_Event ) CMD_Rate2(); break; 00137 case 3: if(Gyro.Event_500Hz ) CMD_Delta_PS(); break; 00138 case 4: if(Gyro.EXT_Latch ) CMD_Delta_PS(); Gyro.EXT_Latch=0; break; 00139 case 5: if(Gyro.Event_500Hz ) CMD_Delta_Bins(); break; 00140 case 6: if(Gyro.EXT_Latch ) CMD_B_Delta(); Gyro.EXT_Latch=0; break; 00141 case 7: if(Gyro.Event_500Hz ) CMD_B_Delta(); break; 00142 case 8: if(Gyro.Rate3_Event ) CMD_Rate3(); break; 00143 case 9: if(Gyro.Reper_Event ){ CMD_Rate2(); Gyro.ModeOut=0;} break; 00144 case 10: CMD_Rate7();Gyro.ModeOut=0;break;//if(Gyro.EvenRate7 ){ CMD_Rate7(); Gyro.EvenRate7=0;} break; 00145 case 11: if(Gyro.EvenRate5K ){ M_Rate5K(); Gyro.EvenRate5K--;} break; 00146 } 00147 } 00148 00149 void BuffClear(void) 00150 { 00151 for(int q=0; q<60; q++) 00152 { 00153 BuffTemp[q]=0; 00154 } 00155 } 00156 00157 00158 00159 00160 00161 00162 void CMD_Rate7(void) 00163 { 00164 //Buff_Restored_Mod[CountV31] BuffADC_znak[q] 00165 // (CountV64)&0x3f]*Gyro.ModAmp туды 00166 //BuffADC_64Point[ (CountFaza + Gyro.PLC_Phase) & 0x3f] 00167 BuffClear(); 00168 00169 unsigned int Temp; 00170 int ADC_Worm[70]; 00171 int Temp1; 00172 float Temp2; 00173 static unsigned int t=0; 00174 00175 BuffTemp[0] = Gyro.SOC_Out; 00176 BuffTemp[1] = Gyro.My_Addres; 00177 MinWorms=BuffADC_10v_F[10]; 00178 MaxWorms=BuffADC_10v_F[10]; 00179 for(int q=0; q<64; q++) 00180 { 00181 if(MinWorms > BuffADC_10v_F[q]) MinWorms = (BuffADC_10v_F[q]); 00182 if(MaxWorms < BuffADC_10v_F[q]) MaxWorms = (BuffADC_10v_F[q]); 00183 } 00184 AmpWorms = (MaxWorms-MinWorms)>>1; 00185 00186 for(int q=0; q<64; q++) 00187 { 00188 ADC_Worm[q] = (BuffADC_10v_F[q] - (MinWorms+AmpWorms));// от -128 до 128 00189 } 00190 00191 for(int q=32; q<64; q++) 00192 { 00193 ADC_Worm[q] = ADC_Worm[q] * (-1); 00194 } 00195 00196 for(int q=0; q<64; q++) 00197 { 00198 ADC_Worm[q] = ADC_Worm[q] + AmpWorms+1; 00199 Temp = (ADC_Worm[q])>>9; 00200 BuffTemp[q+2] = (Temp) & 0xff;//младший байт разности счетчиков 00201 } 00202 00203 00204 00205 iRate_7 = ((Spi.DAC_B-0x7fff)&0xffff); 00206 BuffTemp[66]=(iRate_7 >> 8) & 0xff;//младший байт разности счетчиков 00207 BuffTemp[67]=(iRate_7 >> 0) & 0xff;//младший байт разности счетчиков; 00208 00209 Rate_7 = Gyro.PLC_Eror_count>>3; 00210 BuffTemp[68]=(Rate_7 >> 8) & 0xff;//младший байт разности счетчиков 00211 BuffTemp[69]=(Rate_7 >> 0) & 0xff;//младший байт разности счетчиков; 00212 00213 Gyro.PLC_Eror_count=0; 00214 00215 switch(Gyro.LG_Type) 00216 { 00217 case 1: iRate_7 = 0xffff-Spi.DAC_A; break; 00218 00219 case 0: Temp2 = (Spi.DAC_A*1.538) - 0xd80f; 00220 iRate_7 = (int)Temp2; 00221 break; 00222 } 00223 Rate_7 = (unsigned int)(iRate_7&0xffff); 00224 BuffTemp[70]= (iRate_7 >> 8) & 0xff;//младший байт разности счетчиков 00225 BuffTemp[71]= (iRate_7 >> 0) & 0xff;//младший байт разности счетчиков; 00226 00227 Check(BuffTemp,74); 00228 WriteConN (BuffTemp,74); 00229 } 00230 00231 00232 00233 void CMD_M_Param_R(void) 00234 { 00235 00236 00237 unsigned int NP=0; 00238 unsigned int Param; 00239 00240 00241 NP = BuffTemp[3]; 00242 00243 for (int i=0;i<8;i++) 00244 {BuffTemp[i]=0;} 00245 00246 00247 BuffTemp[0] = Gyro.SOC_Out; 00248 BuffTemp[1] = Gyro.My_Addres; 00249 00250 00251 /* sprintf((Time),"%d = %d \r\n",NP, GyroP.Array[NP]); 00252 WriteCon(Time);*/ 00253 Param = GyroP.Array[NP]; 00254 BuffTemp[2] =(GyroP.Array[NP] >> 8) & 0xff;//старший байт требуемого параметра 00255 BuffTemp[3] =(GyroP.Array[NP] >> 0) & 0xff;//младший байт требуемого параметра 00256 00257 Check(BuffTemp, 6); 00258 WriteConN (BuffTemp,6); 00259 /*sprintf((Time),"READ Param = <%07d> GyroP.Array[NP] = <%07d> NP= <%07d> Gyro.CaunPlus+Gyro.CaunMin-5000 <%07d> \r\n",Param, GyroP.Array[NP], NP, GyroP.Str.PLC_Lern); 00260 WriteCon(Time);*/ 00261 NP=0; 00262 } 00263 void CMD_M_Param_W(void) 00264 { 00265 unsigned int NP=0; 00266 unsigned int Param,temp,flash; 00267 00268 NP = BuffTemp[3]; 00269 Param = (BuffTemp[4]<<8); 00270 Param |= BuffTemp[5]; 00271 00272 GyroP.Array[NP] = Param; 00273 flash=GyroP.Array[115]; 00274 00275 switch(NP) 00276 { 00277 //case 0: Gyro.My_Addres = GyroP.Str.My_Addres; break; 00278 case 1: Gyro.HFO_ref = (unsigned int)(GyroP.Str.HFO_ref) ; break; 00279 case 2: Gyro.HFO_Gain = GyroP.Str.HFO_Gain; break; 00280 case 3: if(Gyro.LG_Type) Gyro.HFO_Max=0xffff-GyroP.Str.DAC_current_Work; //((int)(GyroP.Str.DAC_current_Work*0.67)-2000); 00281 else Spi.DAC_A = ((((int)(GyroP.Str.DAC_current_Work+ 0x7fff)&0xffff)+22544)*0.65); break; 00282 00283 case 4: if(Gyro.LG_Type) Gyro.HFO_Min=0xffff-GyroP.Str.DAC_current_Start; break; //((int)(GyroP.Str.DAC_current_Start*0.67)-2000); break; 00284 00285 case 5: Gyro.TimeToJump = GyroP.Str.TimeToJump; break; 00286 case 6: Gyro.JumpDelta = GyroP.Str.JumpDelta; break; 00287 00288 case 7: Gyro.PLC_Phase = GyroP.Str.PLC_Phase; break; 00289 case 8: Gyro.PLC_Gain = GyroP.Str.PLC_Gain; break; 00290 case 12: Gyro.FrqPhase = GyroP.Str.FrqPhase; break; 00291 case 13: Gyro.FrqChengSpeed = GyroP.Str.FrqChengSpeed; break; 00292 00293 case 14: Gyro.FrqHZ = (7680000 / GyroP.Str.FrqHZ); 00294 Gyro.Frq = (7680000 / GyroP.Str.FrqHZ)<<16; 00295 break; 00296 00297 case 15: Gyro.FrqHZmin = (7680000 / GyroP.Str.FrqHZmin)<<16; break; 00298 case 16: Gyro.FrqHZmax = (7680000 / GyroP.Str.FrqHZmax)<<16; break; 00299 00300 case 18: temp=((GyroP.Str.VB_Fdf_Hi<<16) | GyroP.Str.VB_Fdf_Lo); 00301 00302 temp=temp*20; 00303 Gyro.AmpTarget=(unsigned int)(temp); 00304 break; 00305 00306 case 19: Gyro.AmpSpeed = GyroP.Str.AmpSpeed; break; 00307 case 20: Gyro.AmpPerMin = GyroP.Str.AmpPerMin; break; 00308 case 21: Gyro.AmpPerMax = GyroP.Str.AmpPerMax; break; 00309 00310 case 22: Gyro.AmpPer = GyroP.Str.AmpPer; 00311 Gyro.Amp = GyroP.Str.AmpPer<<16; 00312 break; 00313 00314 case 23: Gyro.AmpMin = GyroP.Str.AmpMin; break; 00315 case 24: Gyro.AmpTD = GyroP.Str.AmpTD; break; 00316 case 25: Gyro.AmpPerDel = GyroP.Str.AmpPerDel; break; 00317 case 33: Gyro.ShiftMod = GyroP.Str.ShiftMod; break; 00318 case 34: Gyro.ModAmp = GyroP.Str.ModAmp; break; 00319 case 56: Gyro.Gain_Sin = GyroP.Str.Gain_Sin; 00320 Out_G_photo(Gyro.Gain_Sin, Gyro.Gain_Cos); 00321 break; 00322 case 57: Gyro.Gain_Cos = GyroP.Str.Gain_Cos; 00323 Out_G_photo(Gyro.Gain_Sin, Gyro.Gain_Cos); 00324 break; 00325 case 60: Gyro.GLD_Serial = GyroP.Str.GLD_Serial; break; 00326 00327 00328 case 10: Gyro.DownTreshold = (unsigned int)((GyroP.Str.DownTreshold-0x7fff)&0xffff); break; 00329 case 11: Gyro.HighTreshold = (unsigned int)((GyroP.Str.HighTreshold-0x7fff)&0xffff); break; 00330 00331 case 9: Gyro.PLCDelay = GyroP.Str.PLCDelay; break; 00332 00333 case 105:Gyro.ResetLevelCool = (unsigned int)((GyroP.Str.ResetLevelCool-0x7fff)&0xffff); break; 00334 case 55: Gyro.ResetLevelHeat = (unsigned int)((GyroP.Str.ResetLevelHeat-0x7fff)&0xffff); break; 00335 00336 00337 00338 00339 //27 00340 00341 /// Gyro.PLCDelay = GyroP.Str.PLCDelay; 00342 //105 00343 00344 /* 00345 case 39: Gyro.ResetLevelCool = 0x7fff+GyroP.Str.ResetLevelCool; break; 00346 case 31: Gyro.ResetLevelHeat = 0x7fff+GyroP.Str.ResetLevelHeat; break; */ //27 00347 00348 00349 //105 00350 00351 } 00352 00353 NP=0; 00354 00355 BuffTemp[0] = Gyro.SOC_Out; 00356 BuffTemp[1] = Gyro.My_Addres; 00357 BuffTemp[2] = Gyro.CMD_In; 00358 BuffTemp[3] =0; //(//GyroP.Array[NP]>> 8) & 0xff;//старший байт требуемого параметра 00359 00360 Check(BuffTemp, 6); 00361 WriteConN (BuffTemp,6); 00362 if(flash){GyroP.Array[115]=0; flash=0; WriteFlash(); ReadFlash ();} 00363 00364 00365 } 00366 void CMD_Maintenance(void) 00367 { 00368 unsigned int Temp; 00369 Gyro.ModeOut = 0; 00370 Gyro.Device_Mode = 0; 00371 for(int q=0; q<64; q++) 00372 { 00373 BuffTemp[q]=0; 00374 } 00375 //Gyro.DropDelayGLD = DropDelayGLD_0;//задержка на выдачу 45 микросекунд для любого адреса ГЛД 00376 BuffTemp[0] = Gyro.SOC_Out; 00377 BuffTemp[1] = Gyro.My_Addres; 00378 00379 Temp = 0xfff; //Gyro.Firmware_Version; 00380 BuffTemp[2] = (Temp >> 0) & 0xff; 00381 BuffTemp[3] = (Temp >> 8) & 0xff; 00382 00383 Temp = Gyro.GLD_Serial; 00384 BuffTemp[4]=(Temp >> 0) & 0xff; 00385 BuffTemp[5]=(Temp >> 8) & 0xff; 00386 00387 Check(BuffTemp, 8); 00388 WriteConN (BuffTemp,8); 00389 00390 } 00391 void CMD_B_Delta(void) 00392 { 00393 Gyro.Event_500Hz=0; 00394 Gyro.EXT_Latch=0; 00395 unsigned int Temp; 00396 BuffTemp[ 0] = Gyro.SOC_Out; 00397 BuffTemp[ 1] = Gyro.My_Addres; 00398 00399 Temp = Gyro.CuruAngle; 00400 Gyro.CuruAngle = 0; 00401 BuffTemp[ 2] =(Temp >> 16) & 0xff;//младший байт разности счетчиков 00402 BuffTemp[ 3] =(Temp >> 8) & 0xff;//младший байт разности счетчиков 00403 BuffTemp[ 4] =(Temp >> 0) & 0xff;//младший байт разности счетчиков 00404 BuffTemp[ 5] = 0x00000000; 00405 Check(BuffTemp, 8); 00406 WriteConN (BuffTemp,8); 00407 } 00408 00409 void CMD_Delta_Bins(void) 00410 { Gyro.Event_500Hz=0; 00411 unsigned int Temp; 00412 BuffTemp[ 0] = Gyro.SOC_Out; 00413 BuffTemp[ 1] = Gyro.My_Addres; 00414 00415 Temp = Gyro.CuruAngle; 00416 Gyro.CuruAngle = 0; 00417 00418 BuffTemp[ 2] =(Temp >> 24) & 0xff;//старший байт разности счетчиков 00419 BuffTemp[ 3] =(Temp >> 16) & 0xff;//младший байт разности счетчиков 00420 BuffTemp[ 4] =(Temp >> 8) & 0xff;//младший байт разности счетчиков 00421 BuffTemp[ 5] =(Temp >> 0) & 0xff;//младший байт разности счетчиков 00422 BuffTemp[ 6] = 0x0000; 00423 Check(BuffTemp, 9); 00424 WriteConN (BuffTemp,9); 00425 } 00426 void CMD_Delta_PS(void) 00427 { int drob,Temp1; 00428 float Temp2=0; 00429 Gyro.EXT_Latch=0; 00430 Gyro.Event_500Hz=0; 00431 unsigned int Temp; 00432 00433 00434 00435 BuffTemp[ 0] = Gyro.SOC_Out; 00436 BuffTemp[ 1] = Gyro.My_Addres; 00437 00438 Gyro.CuruAngle = Gyro.CuruAngle + OldCuruAngle; //(72 град/с) 00439 00440 OldCuruAngle=Gyro.CuruAngle & 0xf; //сохраняем 3 бит для след измирений 00441 Temp=Gyro.CuruAngle>>4; 00442 //приводим к форме вывода 00443 Gyro.CuruAngle = 0; 00444 //Temp=200; 00445 BuffTemp[ 2] =(Temp >> 8) & 0xff;//старший байт разности счетчиков 00446 BuffTemp[ 3] =(Temp >> 0) & 0xff;//младший байт разности счетчиков 00447 00448 BuffTemp[ 4] = CountParam; 00449 switch(CountParam) { 00450 00451 //F_ras 00452 case 0: 00453 OutDeltaPS = Gyro.F_ras; 00454 BuffTemp[5] = (OutDeltaPS >> 8) & 0xff; 00455 break; 00456 00457 case 1: 00458 BuffTemp[5] = (OutDeltaPS >> 0) & 0xff; 00459 break; 00460 00461 00462 //HFO 00463 case 2: 00464 00465 OutDeltaPS = 0xffff - Spi.DAC_A; 00466 BuffTemp[5] = (OutDeltaPS >> 8) & 0xff; 00467 break; 00468 00469 case 3: 00470 BuffTemp[5] = (OutDeltaPS >> 0) & 0xff; 00471 break; 00472 00473 00474 00475 //T_Vibro 00476 case 4: 00477 OutDeltaPS = (unsigned int)(7680000/(Gyro.Frq>>16)); 00478 BuffTemp[5] = (OutDeltaPS >> 8) & 0xff; 00479 break; 00480 00481 case 5: 00482 BuffTemp[5] = (OutDeltaPS >> 0) & 0xff; 00483 break; 00484 00485 00486 00487 //L_Vibro 00488 case 6: 00489 //Temp = Gyro.L_vibro>>1; 00490 OutDeltaPS = Gyro.L_vibro; 00491 BuffTemp[5] = (OutDeltaPS >> 8) & 0xff; 00492 00493 break; 00494 00495 case 7: 00496 BuffTemp[5] = (OutDeltaPS >> 0) & 0xff; 00497 break; 00498 00499 00500 00501 //Напряжение на регуляторе периметра 00502 case 8: 00503 OutDeltaPS = ((Spi.DAC_B-0x7fff)&0xffff); 00504 BuffTemp[5] = (OutDeltaPS >> 8) & 0xff; 00505 00506 break; 00507 00508 case 9: 00509 BuffTemp[5] = (OutDeltaPS >> 0) & 0xff; 00510 break; 00511 00512 00513 00514 //темпкратурный канал 0 00515 case 10: 00516 OutDeltaPS = 0; 00517 BuffTemp[5] = (OutDeltaPS >> 8) & 0xff; 00518 00519 break; 00520 00521 case 11: 00522 BuffTemp[5] = (OutDeltaPS >> 0) & 0xff; 00523 break; 00524 00525 00526 00527 //f 00528 case 12: 00529 OutDeltaPS =0;//(unsigned int)(0x7fff-Spi.ADC5)*0.79; 00530 // Temp = Gyro.AD_Slow >> 16; 00531 BuffTemp[5] = (OutDeltaPS >> 8) & 0xff; 00532 00533 break; 00534 00535 case 13: 00536 BuffTemp[5] = (OutDeltaPS >> 0) & 0xff; 00537 break; 00538 00539 00540 00541 //ток 1 00542 case 14: 00543 //Temp = Gyro.In1; 00544 IntOutDeltaPS = 0;//((Gyro.In1>>1)*0.800875)-0x3e0b; 00545 BuffTemp[5] = (IntOutDeltaPS >> 8) & 0xff;//in1//2 00546 00547 break; 00548 00549 case 15: 00550 BuffTemp[5] = (IntOutDeltaPS >> 0) & 0xff; 00551 break; 00552 00553 00554 00555 //ток 2 00556 case 16: 00557 // Temp = Gyro.In2; 00558 IntOutDeltaPS =0;// ((Gyro.In2>>1)*0.800875)-0x3e0b; 00559 BuffTemp[5] = (IntOutDeltaPS >> 8) & 0xff; 00560 break; 00561 00562 case 17: 00563 BuffTemp[5] = (IntOutDeltaPS >> 0) & 0xff;//in2//3 00564 break; 00565 00566 00567 00568 //разностный температурный канал Delta Temp 00569 case 18: 00570 OutDeltaPS = 0; 00571 OutDeltaPS = Gyro.DeltaT; 00572 BuffTemp[5] = (OutDeltaPS >> 8) & 0xff;//дельта 00573 break; 00574 00575 case 19: 00576 BuffTemp[5] = (OutDeltaPS >> 0) & 0xff; 00577 break; 00578 00579 00580 00581 //температурный канал 5 00582 case 20: 00583 OutDeltaPS = 0; 00584 OutDeltaPS = Gyro.Termo; 00585 BuffTemp[5] =(OutDeltaPS >> 8) & 0xff;//температура 00586 break; 00587 00588 case 21: 00589 BuffTemp[5] =(OutDeltaPS >> 0) & 0xff;//ADC6 sesnsor 5 00590 /* sprintf((Time),"%d %d \r\n", Spi.ADC1, Spi.ADC5 ); 00591 WriteCon(Time);*/ 00592 break; 00593 } 00594 Check(BuffTemp, CRC_N); 00595 WriteConN (BuffTemp,CRC_N); 00596 00597 00598 if(CountParam>20)CountParam=0;//зацикливания буфера от 0 до 21 00599 else CountParam++; 00600 00601 } 00602 00603 00604 void M_Rate5K(void) 00605 { 00606 00607 unsigned int Temp; 00608 //Temp=Gyro.CuruAngle; //приводим к форме вывода 00609 BuffTemp[ 3] =(Gyro.CuruAngle >> 8) & 0xff;//старший байт разности счетчиков 7 --младший байт разности счетчиков 00610 BuffTemp[ 2] =(Gyro.CuruAngle >> 0) & 0xff;//младший байт разности счетчиков 8 --старший байт разности счетчиков 00611 Gyro.CuruAngle=0; 00612 00613 00614 Temp = ((Spi.DAC_B-0x7fff)&0xffff); 00615 BuffTemp[5] = (Spi.DAC_B >> 8) & 0xff; //23 Выход регулятора рабочего периметра 00616 BuffTemp[4] = (Spi.DAC_B >> 0) & 0xff; 00617 00618 00619 Temp = 0xffff - Spi.DAC_A; 00620 BuffTemp[7] =(Temp >> 8) & 0xff;//выход регулятора гвч; 11 --выход регулятора ГВЧ 00621 BuffTemp[6] =(Temp >> 0) & 0xff; 00622 00623 /* sprintf((Time),"%d %d %d\r\n",Gyro.CuruAngle,(Spi.DAC_B-0x7fff),Temp); 00624 WriteCon(Time);*/ 00625 00626 //Check(BuffTemp, 7); 00627 WriteConN (BuffTemp,8); 00628 Gyro.EvenRate5K++; 00629 } 00630 00631 00632 void CMD_Rate(void) 00633 { 00634 Gyro.Rate1_Event=0; 00635 unsigned int Temp; 00636 int Temp1; 00637 float Temp2; 00638 00639 BuffTemp[ 0] = Gyro.SOC_Out; //1 --старт данных 00640 BuffTemp[ 1] = Gyro.My_Addres; //2 --адрес отвечающего устройствва 00641 00642 BuffTemp[ 2] =( Gyro.CaunPlusReper >> 8) & 0xff;//старший байт счетчика +. 3 --сарший байт счентчика + 00643 BuffTemp[ 3] =( Gyro.CaunPlusReper >> 0) & 0xff;//младший байт счетчика +. 4 --младший байт счетчика + 00644 00645 BuffTemp[ 4] =( Gyro.CaunMinReper >> 8) & 0xff;//старший байт счетчика -. 5 --сарший байт счентчика - 00646 BuffTemp[ 5] =( Gyro.CaunMinReper >> 0) & 0xff;//младший байт счетчика -. 6 --младший байт счетчика - 00647 00648 00649 Gyro.CuruAngle = Gyro.CuruAngle + OldCuruAngle; //(72 град/с) 00650 OldCuruAngle=Gyro.CuruAngle & 0x3f; //сохраняем 5 бит для след измирений 00651 Temp=Gyro.CuruAngle>>6; //приводим к форме вывода 00652 00653 00654 Gyro.CuruAngle = 0; 00655 BuffTemp[ 6] =(Temp >> 8) & 0xff;//старший байт разности счетчиков 7 --младший байт разности счетчиков 00656 BuffTemp[ 7] =(Temp >> 0) & 0xff;//младший байт разности счетчиков 8 --старший байт разности счетчиков 00657 00658 00659 BuffTemp[38] =(Temp >> 24) & 0xff;; //39 приращение угла 00660 BuffTemp[39] =(Temp >> 16) & 0xff;; //40 формат 22.10 00661 BuffTemp[40] =(Temp >> 8) & 0xff;; //41 1бит знак 00662 BuffTemp[41] =(Temp >> 0) & 0xff;; //42 00663 00664 Temp = Gyro.F_ras; 00665 //Gyro.F_ras=0; 00666 BuffTemp[ 8] = (Temp >> 8) & 0xff;//расщипление частота 9 --частота расщипления 00667 BuffTemp[ 9] = (Temp >> 0) & 0xff;// 10 --частота расщипления 00668 00669 //(unsigned int)((Gyro.DacIn+30000)*0.6667); 00670 Temp1 = 0xffff - Spi.DAC_A; 00671 BuffTemp[10] = (Temp1 >> 8) & 0xff;//выход регулятора гвч; 11 --выход регулятора ГВЧ 00672 BuffTemp[11] = (Temp1 >> 0) & 0xff; //12 --выход регулятора ГВЧ 00673 00674 00675 /* 00676 if(Gyro.LG_Type) Temp =(int)(tempDeltaRegul); 00677 else Temp =(unsigned int)((0x7fff-Spi.ADC5)*0.79)<<1;*/ 00678 00679 Temp =(int)(tempDeltaRegul); //для призмы 00680 tempDeltaRegul=0; 00681 BuffTemp[12]=(Temp >> 8) & 0xff;//// HFO 13 --сигнал ошибки регулятора ГВЧ 00682 BuffTemp[13]=(Temp >> 0) & 0xff;//// 14 --сигнал ошибки регулятора ГВЧ 00683 00684 //Temp = (unsigned int)((7675000*16/(Gyro.Frq>>12))); 00685 Temp = Gyro.Frq>>12;//(unsigned int)(7680000/(Gyro.Frq>>16)); 00686 BuffTemp[14] = (Temp >> 8) & 0xff; //15 период вибропривода.(частота) T_Vibro 00687 BuffTemp[15] = (Temp >> 0) & 0xff; //16 период вибропривода. 00688 00689 Temp = Gyro.FrqPhaseEror<<2;//Spi.DAC_A-0x7fff; 00690 BuffTemp[16] = (Temp >> 8) & 0xff; //17 старший байт ФД регулятора периода вибропривода 00691 BuffTemp[17] = (Temp >> 0) & 0xff; 00692 /*sprintf((Time),"%d %d\r\n",Gyro.FrqPhaseEror, Gyro.FrqPhaseEror<<2); 00693 WriteCon(Time); */ //18 00694 00695 Temp = Gyro.AmpPer/*>>1*/;//(unsigned int)(((7675000*16/200) * Gyro.AmpPer /(Gyro.Frq>>12))); 00696 BuffTemp[18] = (Temp >> 8) & 0xff; //19 длительность импулься вибропривода(амплитуда) 00697 BuffTemp[19] = (Temp >> 0) & 0xff; //20 00698 00699 00700 Temp = 0x0;//Gyro.L_vibro<<2; 00701 BuffTemp[20] = (Temp >> 8) & 0xff;//регулятор датчика угла поворота //21 старший байт регулятора датчика угла поворота 00702 BuffTemp[21] = (Temp >> 0) & 0xff; //22 00703 00704 Temp1 =((Spi.DAC_B-0x7fff)&0xffff);///(3300+(0x7fff+(Spi.DAC_B*1.083))); 00705 BuffTemp[22] = (Temp1 >> 8) & 0xff; //23 Выход регулятора рабочего периметра 00706 BuffTemp[23] = (Temp1 >> 0) & 0xff; 00707 //24 00708 00709 Temp = PLC_EROR; 00710 PLC_EROR=0; 00711 00712 BuffTemp[24] = (Temp >> 8) & 0xff;// //25 ФД СРП 00713 BuffTemp[25] = (Temp >> 0) & 0xff;// //26 ФД СРП 00714 00715 Temp =0;/* Gyro.AD_Slow >> 16*/; 00716 BuffTemp[26] = (Temp >> 8) & 0xff; //27 ADC 0 00717 BuffTemp[27] = (Temp >> 0) & 0xff; //28 00718 00719 Temp =0; /*Gyro.AD_Slow >> 16*/; 00720 BuffTemp[28] = (Temp >> 8) & 0xff; //29 ADC 1 00721 BuffTemp[29] = (Temp >> 0) & 0xff; //30 00722 00723 Temp1 = 0;//((Gyro.In1>>1)*0.800875)-0x3e0b; 00724 BuffTemp[30] = (Temp1 >> 8) & 0xff;//in1//2 //31 ADC 2 00725 BuffTemp[31] = (Temp1 >> 0) & 0xff; //32 00726 00727 Temp1 =0;//((Gyro.In2>>1)*0.800875)-0x3e0b;// - 0x4FFF; 00728 BuffTemp[32] = (Temp1 >> 8) & 0xff; //33 ADC 3 00729 BuffTemp[33] = (Temp1 >> 0) & 0xff;//in2//3 //34 00730 00731 Temp = (Gyro.DeltaT); 00732 BuffTemp[34] = (Temp >> 8) & 0xff;//дельта //35 ADC 4 00733 BuffTemp[35] = (Temp >> 0) & 0xff; //36 00734 // Temp = 000; 00735 00736 Temp = Gyro.Termo; 00737 BuffTemp[36] =(Temp >> 8) & 0xff;//температура //37 ADC 5 00738 BuffTemp[37] =(Temp >> 0) & 0xff;//ADC6 sesnsor 5 //38 00739 00740 Check(BuffTemp, 44); 00741 WriteConN (BuffTemp,44); 00742 for(int i=0; i<45;i++) {BuffTemp[i]=0;} 00743 } 00744 00745 void CMD_Rate2(void) 00746 { 00747 unsigned int Temp; 00748 //float y = 52646.45 00749 Gyro.Reper_Event=0; 00750 for(int q=0; q<64; q++) 00751 { 00752 BuffTemp[q]=0; 00753 } 00754 BuffTemp[ 0] = Gyro.SOC_Out; 00755 BuffTemp[ 1] = Gyro.My_Addres; 00756 00757 Temp=Gyro.CaunPlusReper; 00758 00759 BuffTemp[ 2] =(Temp >> 8) & 0xff;//старший байт счетчика +. 00760 BuffTemp[ 3] =(Temp >> 0) & 0xff;//младший байт счетчика +. 00761 //сохраняем 5 бит для след измирений 00762 00763 Temp= Gyro.CaunMinReper; 00764 00765 BuffTemp[ 4] =(Temp >> 8) & 0xff;//старший байт счетчика -. 00766 BuffTemp[ 5] =(Temp >> 0) & 0xff;//младший байт счетчика -. 00767 00768 00769 Check(BuffTemp, 8); 00770 WriteConN (BuffTemp,8); 00771 } 00772 00773 void CMD_Rate3(void) 00774 { 00775 Gyro.Rate3_Event=0; 00776 BuffTemp[ 0] = Gyro.SOC_Out; 00777 BuffTemp[ 1] = Gyro.My_Addres; 00778 BuffTemp[ 2] = 0xcc;//старший байт счетчика +. 00779 BuffTemp[ 3] = 0xcc;//младший байт счетчика +. 00780 00781 BuffTemp[ 4] =0xBB;//старший байт счетчика -. 00782 BuffTemp[ 5] =0xBB;//младший байт счетчика -. 00783 00784 Check(BuffTemp, 8); 00785 WriteConN (BuffTemp,8); 00786 } 00787 00788 void CMD_M_Stymul() 00789 { 00790 int temp,Consol=0,HFO,b4; 00791 float Temp1; 00792 temp=BuffTemp[3]; 00793 00794 b4 = temp; 00795 Consol = temp>>7; 00796 HFO = temp&0x3;// // (номер (код) ЦАПа 0...3, HFO - 3dac, PLC - 0DAC 00797 00798 temp = (((BuffTemp[4]<<8) | BuffTemp[5])&0xFFFF); 00799 if(HFO) 00800 { 00801 Gyro.DacIn=temp; 00802 if(Gyro.LG_Type==1) Spi.DAC_A = 0xffff-Gyro.DacIn; //((unsigned int)((Gyro.DacIn+0x7011)*0.6667)); 00803 else Spi.DAC_A = (unsigned int)(0xffff-Gyro.DacIn); //Spi.DAC_A = ((unsigned int)((Gyro.DacIn+23200)*0.64)); 00804 } 00805 00806 else Spi.DAC_B = (unsigned int)((temp-0x7fff)&0xffff); 00807 /*sprintf((Time),"%d %d \r\n", Spi.DAC_B, temp); 00808 WriteCon(Time); */ 00809 for(int q=0; q<64; q++) 00810 { 00811 BuffTemp[q]=0; 00812 } 00813 BuffTemp[0] = Gyro.SOC_Out; //DD 00814 BuffTemp[1] = Gyro.My_Addres; //00 00815 BuffTemp[2] = Gyro.CMD_In; //D9 00816 BuffTemp[3] =0; 00817 Check(BuffTemp, CRC_N); 00818 WriteConN (BuffTemp,CRC_N); 00819 } 00820 00821 void CMD_M_vib() 00822 { 00823 unsigned int temp1,temp2,anser; 00824 temp1 = (((BuffTemp[4]<<8) | BuffTemp[5])&0xFFFF); 00825 Gyro.Frq = (temp1<<12); 00826 // Gyro.Frq = (122780000/temp1)<<12; 00827 00828 F_vib= (unsigned int)(825600000 / temp1); 00829 temp2 = (((BuffTemp[6]<<8) | BuffTemp[7])&0xFFFF); 00830 00831 sprintf((Time),"%d %d \r\n",temp1, temp2); 00832 WriteCon(Time); 00833 Gyro.AmpPer = temp2; 00834 Gyro.Amp = (Gyro.AmpPer<<17)/100; 00835 /* Gyro.AmpPer = ((((((Gyro.Frq>>12)*200)/16)*temp2)/7680000)/2); 00836 Gyro.Amp = (Gyro.AmpPer)<<17;*/ 00837 00838 BuffTemp[0] = Gyro.SOC_Out; 00839 BuffTemp[1] = Gyro.My_Addres; 00840 BuffTemp[2] = Gyro.CMD_In; 00841 BuffTemp[3] = 0x0; 00842 BuffTemp[4] = 0x0; 00843 Check(BuffTemp, CRC_N); 00844 WriteConN (BuffTemp,CRC_N); 00845 } 00846 void CMD_M_Control_D8()///установка\сброс регистров управления 00847 { 00848 unsigned int bit=0,Pa=0; 00849 unsigned int SR=0,V=0,Bit_num=0,A=0; 00850 Pa = BuffTemp[3]; 00851 SR = Pa >> 7; 00852 V = (Pa>>5)&0x3; 00853 A = (Pa>>4)&0x1; 00854 Bit_num = Pa & 0xf; 00855 00856 switch (SR) 00857 { 00858 case 0: 00859 switch (A) 00860 { 00861 case 0: 00862 switch (Bit_num) 00863 { 00864 case 0x06: FrqOFF break; 00865 case 0x05: AVibOFF break; 00866 case 0x01: HFOOFF break; 00867 case 0x03: PlcOFF break; 00868 case 0x02: Gyro.RgConA &= ~(1<<2); break; 00869 } 00870 break; 00871 case 1: 00872 switch (Bit_num) 00873 { 00874 case 0x00: Gyro.RgConB &= ~(1<<0); break; 00875 case 0x01: Gyro.RgConB &= ~(1<<1); break; 00876 case 0x02: Gyro.RgConB &= ~(1<<2); break; 00877 } 00878 break; 00879 } 00880 00881 00882 break; 00883 case 1: 00884 switch (A) 00885 { 00886 case 0: 00887 switch (Bit_num) 00888 { 00889 case 0x06: FrqON break; 00890 case 0x05: AVibON break; 00891 case 0x01: HFOON break; 00892 case 0x03: PlcON break; 00893 case 0x02: Gyro.RgConA |= (1<<2); break; 00894 } 00895 break; 00896 case 1: 00897 switch (Bit_num) 00898 { 00899 case 0x00: Gyro.RgConB |= (1<<0); break; 00900 case 0x01: Gyro.RgConB |= (1<<1); break; 00901 case 0x02: Gyro.RgConB |= (1<<2); break; 00902 } 00903 break; 00904 } 00905 break; 00906 } 00907 BuffTemp[0] = Gyro.SOC_Out; //DD 00908 BuffTemp[1] = Gyro.My_Addres; //00 00909 BuffTemp[2] = Gyro.CMD_In; //D8 00910 switch (A) 00911 { 00912 case 0: 00913 BuffTemp[ 4] =(Gyro.RgConA >> 8) & 0xff; 00914 BuffTemp[ 5] =(Gyro.RgConA >> 0) & 0xff; 00915 break; 00916 00917 case 1: 00918 BuffTemp[ 4] =(Gyro.RgConB >> 8) & 0xff; 00919 BuffTemp[ 5] =(Gyro.RgConB >> 0) & 0xff; 00920 break; 00921 } 00922 Check(BuffTemp, CRC_N); 00923 WriteConN (BuffTemp,CRC_N); 00924 } 00925 00926 void CMD_M_Control_D9()///чтение регистров управления 00927 { 00928 int bit,NReg,param=0; 00929 BuffTemp[0] = Gyro.SOC_Out; //DD 00930 BuffTemp[1] = Gyro.My_Addres; //00 00931 BuffTemp[2] = Gyro.CMD_In; //D9 00932 param = BuffTemp[3]; 00933 if (param) 00934 { 00935 BuffTemp[3]=1<<4; 00936 BuffTemp[4] = (Gyro.RgConB>>8 ) & 0xff; 00937 BuffTemp[5] = Gyro.RgConB & 0xff; 00938 } 00939 else 00940 { 00941 BuffTemp[3]=0<<4; 00942 BuffTemp[4] = (Gyro.RgConA>>8 )& 0xff; 00943 BuffTemp[5] = Gyro.RgConA & 0xff; 00944 } 00945 Check(BuffTemp, CRC_N); 00946 WriteConN (BuffTemp,CRC_N); 00947 } 00948 // (номер (код) ЦАПа 0...3, старший байт требуемого ЦАПа, младший байт треб ЦАПа) 00949 00950 00951 00952 void GLDStartDischarg(void) 00953 { TimeDischarg=0; 00954 Try=0; 00955 switch(Gyro.My_Addres) 00956 {//смещение поджига и подсветки в зависимости от адреса ГЛД 00957 case 0: 00958 Gyro.Discharg = StartDischarg << ShiftStart0; 00959 Gyro.BackLight = StartBackLight << ShiftStart0; 00960 break; 00961 case 1: 00962 Gyro.Discharg = StartDischarg << ShiftStart1; 00963 Gyro.BackLight = StartBackLight << ShiftStart1; 00964 break; 00965 case 2: 00966 Gyro.Discharg = StartDischarg << ShiftStart2; 00967 Gyro.BackLight = StartBackLight << ShiftStart2; 00968 break; 00969 case 3: 00970 Gyro.Discharg = StartDischarg << ShiftStart3; 00971 Gyro.BackLight = StartBackLight << ShiftStart3; 00972 break; 00973 } 00974 } 00975 00976 void Gph_W() 00977 { 00978 //Gyro.flagGph_W=3; 00979 00980 Out_G_photo(BuffTemp[4],BuffTemp[5]); 00981 BuffTemp[0] = Gyro.SOC_Out; //DD 00982 BuffTemp[1] = Gyro.My_Addres; //00 00983 BuffTemp[2] = Gyro.CMD_In; //D9 00984 BuffTemp[3] = 0; 00985 Check(BuffTemp, CRC_N); 00986 WriteConN (BuffTemp,CRC_N); 00987 } 00988 void DeviceMode() 00989 { 00990 int TempMod=1; 00991 BuffTemp[0] = Gyro.SOC_Out; //DD 00992 BuffTemp[1] = Gyro.My_Addres; //00 00993 BuffTemp[2] = Gyro.CMD_In; //D9 00994 TempMod = BuffTemp[3] & 0xf; 00995 Gyro.Device_Mode = TempMod; 00996 00997 sprintf((Time)," Comand - DeviceMode(); Gyro.Device_Mode = %d Gyro.ModeOut = %d\r\n",Gyro.Device_Mode,Gyro.ModeOut); 00998 WriteCon(Time); 00999 /* 01000 sprintf((Time),"%d\r\n",Gyro.Device_Mode); 01001 WriteCon(Time);*/ 01002 BuffTemp[3]=Gyro.Device_Mode & 0xff; 01003 BuffTemp[4]=0; 01004 BuffTemp[5]=0; 01005 Check(BuffTemp, CRC_N); 01006 WriteConN (BuffTemp,CRC_N); 01007 } 01008 01009 unsigned int Check(char *c, unsigned int Count) 01010 { 01011 int i=1; 01012 unsigned int temp,CRC; 01013 01014 01015 temp=1; 01016 CRC=0; 01017 01018 01019 for(; i<Count-2; i++) { 01020 CRC+=c[i]; 01021 } 01022 01023 if(c[Count-2]!=((CRC>>8)&0xFF)) { 01024 temp=0; 01025 Gyro.RsErrLine = (Gyro.RsErrLine)&=0x2; 01026 } 01027 01028 if(c[Count-1]!=((CRC>>0)&0xFF)) { 01029 temp=0; 01030 // Gyro.RsErrLine= (Gyro.RsErrLine)=0x2; 01031 } 01032 01033 c[Count-2]=(CRC>>8)&0xFF; 01034 c[Count-1]=(CRC>>0)&0xFF; 01035 01036 return temp; 01037 } 01038 01039 int Getlengf(void) 01040 { 01041 unsigned int lengf; 01042 lengf = 1; 01043 switch(Gyro.CMD_In) 01044 { 01045 case 0x99: lengf=6; CRC_N=8; break; //Mintainance 01046 case 0xB0: lengf=6; CRC_N=9; break; //Delta_Bins 01047 case 0x0F: lengf=6; CRC_N=8; break; //Delta_Bins 01048 case 0xA0: lengf=6; CRC_N=8; break; //Delta_PS 01049 case 0xDD: lengf=6; CRC_N=44; break; //m_rate 01050 case 0x0A: lengf=8; CRC_N=6; break; //m_stymul 01051 case 0xE9: lengf=6; CRC_N=8; break; //DeviceMode 01052 case 0xE8: lengf=6; CRC_N=8; break; //DeviceMode 01053 case 0xA5: lengf=6; CRC_N=8; break; //DeviceMode 01054 case 0xD8: lengf=6; CRC_N=8; break; //m_control 01055 case 0xD9: lengf=6; CRC_N=8; break; //m_control 01056 case 0xE4: lengf=8; CRC_N=6; break; //M_VIB_W 01057 case 0xE6: lengf=8; CRC_N=6; break; //M_Gph_W 01058 01059 } return lengf; 01060 } 01061 01062 void Read_CMD(void) 01063 { 01064 01065 Gyro.RsErrLine = (Gyro.RsErrLine)& 0xffff;//для сброса ошибки 01066 CountBuFFIn=ReadChekCon1(BuffTemp); 01067 // чтение данных из консоли 01068 if(CountBuFFIn==1) { 01069 // если есть первый байт 01070 if (BuffTemp[0] != SOC_In) 01071 { 01072 ReadCon1(BuffTemp); 01073 Gyro.RsErrLine += 0x100; 01074 //BuffTemp[99]=Gyro.RsErrLine; 01075 ReadCon1(BuffTemp); 01076 } 01077 } 01078 else if(CountBuFFIn==2) //если второй байт 01079 { // широковещаительный 01080 if (BuffTemp[1] != Gyro.My_Addres /*|| BuffTemp[1] !=0x1f*/) 01081 { 01082 ReadCon1(BuffTemp); 01083 Gyro.RsErrLine += 0x1; 01084 ReadCon1(BuffTemp); 01085 } 01086 } 01087 else if(CountBuFFIn==3) // если третий байт 01088 { 01089 Gyro.CMD_In=BuffTemp[2]; 01090 N=Getlengf(); 01091 } 01092 else if(CountBuFFIn==4 && (N==6)) 01093 { // N - длина посылки аскглд(для записи параметров). определяется по коду команды в Getlengf(); 01094 Param1=BuffTemp[3]; 01095 } 01096 else if((CountBuFFIn==5)&&(N==7)) 01097 { 01098 Param1=BuffTemp[3]; 01099 Param2=BuffTemp[4]; 01100 01101 } 01102 else if((CountBuFFIn==6)&&(N==8)) 01103 { 01104 Param1=BuffTemp[3]; 01105 Param2=BuffTemp[4]; 01106 Param3=BuffTemp[5]; 01107 } 01108 else if((CountBuFFIn==8)&&(N==10)) 01109 { 01110 Param1=BuffTemp[4]; 01111 Param2=BuffTemp[5]; 01112 Param3=BuffTemp[6]; 01113 Param4=BuffTemp[7]; 01114 } 01115 01116 else if(CountBuFFIn > (N-1)) 01117 { 01118 ReadCon1(BuffTemp); 01119 01120 //if(SA)CMD_M_Stymul_Answer(); 01121 // if(d8_anser)D8_Answer(); 01122 01123 switch(Gyro.CMD_In) { 01124 // case 0xA5: DeviceMode() ; break; 01125 case 0x99: /*Gyro.ModeOut=0;*/CMD_Maintenance(); break; 01126 case 0xD8: CMD_M_Control_D8(); break; 01127 case 0xE9: CMD_M_Param_R(); break; //чтение параметров 01128 case 0xE8: CMD_M_Param_W(); break; //запись параметра 01129 case 0xDA: GLDStartDischarg(); break; 01130 case 0xD9: CMD_M_Control_D9(); break; 01131 case 0x0A: CMD_M_Stymul(); break; 01132 case 0xDD: TempParam=(BuffTemp[3]) & 0x9f; //Rate 01133 switch(TempParam) { 01134 case Rate1 : CMD_Rate(); break; 01135 //case Rate2 : Gyro.ModeOut=9; break; 01136 case Rate3 : CMD_Rate3(); break; 01137 case PRate1 : Gyro.ModeOut=1; break; 01138 case PRate2 : Gyro.ModeOut=2; break; 01139 case PRate3 : Gyro.ModeOut=8; break; 01140 case Rate7 : CMD_Rate7(); break; 01141 case PRate7 : Gyro.ModeOut=10; break; 01142 case Rate5K : M_Rate5K(); break; 01143 case PRate5K: 01144 if(Gyro.ModeOut){} 01145 else Gyro.ModeOut=11; 01146 break; 01147 01148 } 01149 break; //DropDelay(); выставка задержки для мультидропа сбрасывается в команде CMD_Maintenance() на () микросекунд; 01150 01151 case 0xA0: /*DropDelay();*/ 01152 // TempParam=(BuffTemp[3]) & 0x80; //Delta_PS 01153 01154 switch(Gyro.Device_Mode) 01155 { 01156 case 0: Gyro.ModeOut=3; Gyro.Event_500Hz=0; break; 01157 case 4: Gyro.ModeOut=4; break; 01158 } 01159 sprintf((Time)," Comand - B_Delta_PS(); Gyro.Device_Mode = %d Gyro.ModeOut = %d\r\n", Gyro.Device_Mode, Gyro.ModeOut); 01160 WriteCon(Time); 01161 break; 01162 01163 case 0xB0: DropDelay(); TempParam = TempParam=(BuffTemp[3]>>7); //Delta_Bins 01164 switch(TempParam) { 01165 case PDelta_Bins: Gyro.ModeOut=5; Gyro.Event_500Hz=0; break; 01166 case Delta_Bins : CMD_Delta_Bins(); break; 01167 } 01168 break; 01169 case 0x0F: DropDelay(); TempParam = (((BuffTemp[3])>>4) & 0x9); //B_Delta 01170 switch(TempParam) { 01171 case PB_Delta_EXT: Gyro.ModeOut=6; break; 01172 case PB_Delta_INT: Gyro.ModeOut=7; Gyro.Event_500Hz=0; break; 01173 case B_Delta_EXT: CMD_B_Delta(); break; 01174 case B_Delta_INT: CMD_B_Delta(); break; 01175 } 01176 break; 01177 case 0xE4: CMD_M_vib(); break; 01178 case 0xA5: DeviceMode(); break; 01179 case 0xE6: Gph_W(); break; 01180 Gyro.RsErrLine = 0; 01181 } 01182 } 01183 } 01184 01185 01186 void TechLog(void) 01187 { 01188 unsigned int temp=0; 01189 if (ReadCon (Time)) 01190 { 01191 int a=0; 01192 01193 01194 01195 01196 if (Time[0] == 'y') 01197 { //Mod 250 Hz PLCRegul250(); 01198 if( Gyro.Debag) Gyro.Debag=0; 01199 else Gyro.Debag=1; 01200 } 01201 if (Time[0] == 'u') 01202 { //Mod 250 Hz PLCRegul250(); 01203 if( Gyro.Debag2) Gyro.Debag2=0; 01204 else Gyro.Debag2=1; 01205 } 01206 if (Time[0] == 'C') Spi.DAC_A+=32; 01207 if (Time[0] == 'c') Spi.DAC_A-=32; 01208 01209 if (Time[0] == 'k') PLC_ERR_DAC_F = 0; 01210 01211 if (Time[0] == 'V') Spi.DAC_A+=160; 01212 if (Time[0] == 'v') Spi.DAC_A-=160; 01213 01214 if (Time[0] == 'X') Spi.DAC_B+=2000; 01215 if (Time[0] == 'x') Spi.DAC_B-=2000; 01216 ///////////////////////////////////////////////////////////////// 01217 //////////////////////////////////////////////////////////////// 01218 //////////////////////Выбор FlashMod/////////////////////////// 01219 //////////////////////////////////////////////////////////////// 01220 /* 01221 if (Time[0] == 'B') Gyro.FlashMod=1; 01222 if (Time[0] == 'R') {Gyro.FlashMod=3;} 01223 if (Time[0] == 'E') {Gyro.FlashMod=4;} 01224 /////////////////////////////////////////////////////////////// 01225 /////////////////////////////////////////////////////////////// 01226 //////////////////////////////////////////////////////////////// 01227 01228 01229 01230 01231 if (Time[0] == 'f') { // выдача технологическая 01232 Gyro.ModAmp += 1; 01233 sprintf((Time),"%d \r\n", Gyro.ModAmp); 01234 WriteCon(Time); 01235 } 01236 if (Time[0] == 'd') { // выдача технологическая 01237 Gyro.ModAmp -= 1; 01238 sprintf((Time),"%d \r\n", Gyro.ModAmp); 01239 WriteCon(Time); 01240 } 01241 if (Time[0] == 'V') { // выдача технологическая 01242 F_vib += 1; 01243 LPC_MCPWM->LIM1 = F_vib; 01244 LPC_MCPWM->LIM2 = F_vib; 01245 sprintf((Time),"%d \r\n", F_vib); 01246 WriteCon(Time); 01247 } 01248 if (Time[0] == 'v') { // выдача технологическая 01249 F_vib -= 1; 01250 LPC_MCPWM->LIM1 = F_vib; 01251 LPC_MCPWM->LIM2 = F_vib; 01252 01253 } 01254 01255 01256 01257 01258 01259 01260 01261 if (Time[0] == 'p') { // выдача технологическая 01262 // PlcOFF //Gyro.RgConA&0x8=0; 01263 01264 if(Gyro.LogMod) Gyro.LogMod=0; 01265 else Gyro.LogMod=5; 01266 // MODFlag=1; 01267 // Spi.DAC_B = 32767; 01268 } 01269 if (Time[0] == 'o') { // выдача технологическая 01270 if(TypeMod==0)TypeMod=5; 01271 else TypeMod=0; 01272 01273 // Spi.DAC_B = 32000; 01274 } 01275 if (Time[0] == 'h') 01276 { // выдача технологическая 01277 for(int q=0; q<64; q++) 01278 { 01279 sprintf((Time),"%i \r\n",(BuffADC_znak[q])); 01280 WriteCon(Time); 01281 } 01282 01283 } 01284 01285 01286 if (Time[0] == 'b') 01287 { // выдача технологическая 01288 sprintf((Time),"10000 \r\n"); 01289 WriteCon(Time); 01290 for(int q=0; q<64; q++) 01291 { 01292 01293 if(((CountV255+q)&0xff)==0) 01294 { 01295 sprintf((Time),"12000 \r\n"); 01296 WriteCon(Time); 01297 } 01298 else 01299 { 01300 sprintf((Time),"%d \r\n", BuffADC_1Point[(CountV64+q)&0xff] ); 01301 WriteCon(Time); 01302 } 01303 01304 01305 } 01306 } 01307 01308 if (Time[0] == 'n') 01309 { // выдача технологическая 01310 for(int q=0; q<64; q++) 01311 { 01312 sprintf((Time),"%d ", Buff_OUT[q]); 01313 WriteCon(Time); 01314 sprintf((Time),"%d \r\n",ModArraySin[(q+Gyro.PLC_Phase)&0x3f]); 01315 WriteCon(Time); 01316 01317 } 01318 Spi.DAC_B+=500; 01319 } 01320 if (Time[0] == 'm') 01321 { // выдача технологическая 01322 for(int q=0; q<64; q++) 01323 { 01324 sprintf((Time),"%d \r\n", BuffADC_64Point[q] ); 01325 WriteCon(Time); 01326 } 01327 } 01328 01329 01330 01331 01332 01333 01334 01335 01336 if (Time[0] == 'u') 01337 { // выдача технологическая 01338 Gyro.ShowMod2=1; //Mod vibro Hz 01339 } 01340 if (Time[0] == 'U') 01341 { // выдача технологическая 01342 Gyro.ShowMod2=0; //Mod vibro Hz 01343 } 01344 01345 01346 if (Time[0] == 'f') 01347 { // выдача технологическая 01348 Gyro.CuruAngleLog = 0; //Mod vibro Hz 01349 } 01350 if (Time[0] == 'd') 01351 { // выдача технологическая 01352 Gyro.CuruAngleLog = 1; //Mod vibro Hz 01353 } 01354 if (Time[0] == 'l') 01355 { // выдача технологическая 01356 Gyro.My_Addres = GyroP.Str.My_Addres; // Gyro.My_Addres = 0; 01357 Gyro.GLD_Serial = GyroP.Str.GLD_Serial; 01358 Gyro.FrqHZ = GyroP.Str.FrqHZ; 01359 Gyro.Frq = GyroP.Str.FrqHZ<<16; 01360 Gyro.FrqHZmin = GyroP.Str.FrqHZmin<<16; 01361 Gyro.FrqHZmax = GyroP.Str.FrqHZmax<<16; 01362 Gyro.FrqChengSpeed = GyroP.Str.FrqChengSpeed; 01363 Gyro.PLC_Gain = GyroP.Str.PLC_Gain; 01364 Gyro.PLC_Phase = GyroP.Str.PLC_Phase; 01365 Gyro.ModAmp = GyroP.Str.ModAmp; 01366 Gyro.FrqPhase = GyroP.Str.FrqPhase; 01367 Gyro.AmpPer = GyroP.Str.AmpPer; 01368 Gyro.Amp = GyroP.Str.AmpPer<<16; 01369 Gyro.AmpSpeed = GyroP.Str.AmpSpeed; 01370 Gyro.AmpPerDel = GyroP.Str.AmpPerDel; 01371 temp=((GyroP.Str.VB_Fdf_Hi<<16) | GyroP.Str.VB_Fdf_Lo); 01372 temp=temp/18.2; 01373 Gyro.AmpTarget=(unsigned int)(temp); 01374 Gyro.AmpPerMin = GyroP.Str.AmpPerMin; 01375 Gyro.AmpPerMax = GyroP.Str.AmpPerMax; 01376 Gyro.AmpMin = GyroP.Str.AmpMin; 01377 Gyro.AmpTD = GyroP.Str.AmpTD; 01378 Spi.DAC_A = GyroP.Str.DAC_current_Work; 01379 Gyro.Gain_Sin = GyroP.Str.Gain_Sin; 01380 Gyro.Gain_Cos = GyroP.Str.Gain_Cos; 01381 Out_G_photo(Gyro.Gain_Sin, Gyro.Gain_Cos); 01382 } 01383 */ 01384 01385 } 01386 } 01387 01388
Generated on Thu Jul 14 2022 02:34:42 by
 1.7.2
 1.7.2 
    