Dmitry Kovalev / Mbed 2 deprecated LGstaandart

Dependencies:   mbed

Fork of LG2 by Dmitry Kovalev

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Command.c Source File

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