123

Dependencies:   mbed

Fork of LG by igor Apu

Revision:
193:a0fe8bfc97e4
Parent:
192:d32c8cf7bcd9
Child:
194:8f3cb37a5541
diff -r d32c8cf7bcd9 -r a0fe8bfc97e4 Command.c
--- a/Command.c	Thu Sep 01 08:23:30 2016 +0000
+++ b/Command.c	Thu Sep 15 11:09:00 2016 +0000
@@ -72,13 +72,18 @@
  }
  ///////////////end flah and boot///////////
  void M_RateA(void)
- {
+ {  
+    /*Gyro.Delta500_Event=0;
+    Gyro.DeltaEXT_Event=0;*/
     switch(Gyro.ModeOut) {
-    case 1: if(Gyro.Rate1_Event    == 1) CMD_Rate();  		   break;  
-    case 2: if(Gyro.Rate2_Event    == 1) CMD_Rate2(); 		   break;    
-    case 3: if(Gyro.Delta500_Event == 1) CMD_Delta_500Hz();    break;   
-    case 4: if(Gyro.EXT_Latch      == 1) CMD_Delta_Ext();      break;       		   		
-    }
+    case 1: if(Gyro.Rate1_Event ) 				CMD_Rate();  		 	  break;  
+    case 2: if(Gyro.Reper_Event )				CMD_Rate2(); 			  break;    //Gyro.Reper_Event выставляется при переходе синуса из - в + 
+    case 3: if(Gyro.Delta500_Event ) 			CMD_Delta_PS();           break;   
+    case 4: if(Gyro.EXT_Latch ) 				CMD_Delta_PS();           break;   
+    case 5: if(Gyro.Delta_Bins_Event500 ) 		CMD_Delta_Bins();         break;   
+    case 6: if(Gyro.B_Delta_EventEXT ) 			CMD_B_Delta();            break;      	
+    case 7: if(Gyro.B_Delta_Event500 ) 			CMD_B_Delta();            break;      	
+ }
  }
  
 void CMD_M_Param_R(void)
@@ -120,7 +125,7 @@
 }
 void CMD_Maintenance(void)
 {
-  
+   
     Gyro.DropDelayGLD = DropDelayGLD_0;//задержка на выдачу 45 микросекунд для любого адреса ГЛД
     BuffTemp[0] =  Gyro.SOC_Out;
     BuffTemp[1] =  Gyro.My_Addres;
@@ -132,16 +137,52 @@
     WriteConN (BuffTemp,8);
    
 }
+void CMD_B_Delta(void)
+{ 	
+	Gyro.B_Delta_Event500=0;
+ 	Gyro.B_Delta_EventEXT=0;	
+ 	unsigned int Temp;
+	BuffTemp[ 0] = Gyro.SOC_Out;
+    BuffTemp[ 1] = Gyro.My_Addres;
+    
+    Temp = Gyro.CuruAngle;
+    Gyro.CuruAngle = 0;
+    BuffTemp[ 2] =(Temp >> 16) & 0xff;//младший байт разности счетчиков
+    BuffTemp[ 3] =(Temp >>  8) & 0xff;//младший байт разности счетчиков
+    BuffTemp[ 4] =(Temp >>  0) & 0xff;//младший байт разности счетчиков
+    BuffTemp[ 5] = 0x00000000;
+    Check(BuffTemp, 8);
+    WriteConN (BuffTemp,8);
+}
 
-void CMD_Delta_500Hz(void)
+void CMD_Delta_Bins(void)
+{
+	Gyro.Delta_Bins_Event500=0;
+	unsigned int Temp;
+	BuffTemp[ 0] = Gyro.SOC_Out;
+    BuffTemp[ 1] = Gyro.My_Addres;
+    
+    Temp = Gyro.CuruAngle;
+    Gyro.CuruAngle = 0;
+
+    BuffTemp[ 2] =(Temp >> 24) & 0xff;//старший байт разности счетчиков
+    BuffTemp[ 3] =(Temp >> 16) & 0xff;//младший байт разности счетчиков
+    BuffTemp[ 4] =(Temp >>  8) & 0xff;//младший байт разности счетчиков
+    BuffTemp[ 5] =(Temp >>  0) & 0xff;//младший байт разности счетчиков
+    BuffTemp[ 6] = 0x0000;
+    Check(BuffTemp, 9);
+    WriteConN (BuffTemp,9);
+}  
+void CMD_Delta_PS(void)
 {   
-
     Gyro.Delta500_Event=0;
+    Gyro.EXT_Latch=0;
+    
     unsigned int Temp;
 	BuffTemp[ 0] = Gyro.SOC_Out;
     BuffTemp[ 1] = Gyro.My_Addres;
     
-    Temp = Gyro.CuruAngle>>5;
+    Temp = Gyro.CuruAngle;
     Gyro.CuruAngle = 0;
 
     BuffTemp[ 2] =(Temp >> 8) & 0xff;//старший байт разности счетчиков
@@ -295,160 +336,10 @@
     else CountParam++;
     
 }
-void CMD_Delta_Ext(void)
-{   
-    unsigned int Temp;
-    Gyro.EXT_Latch=0;
-	BuffTemp[ 0] = Gyro.SOC_Out;
-    BuffTemp[ 1] = Gyro.My_Addres;
-    Temp = Gyro.CuruAngle>>5;
-    Gyro.CuruAngle = 0;
-
-    BuffTemp[ 2] =(Temp >> 8) & 0xff;//старший байт разности счетчиков
-    BuffTemp[ 3] =(Temp >> 0) & 0xff;//младший байт разности счетчиков
-    
-    BuffTemp[ 4] = CountParam;
-    switch(CountParam) {      
-    //F_ras  
-     case 0:
-           Temp = Gyro.F_ras;
-           BuffTemp[5] = (Temp >> 8) & 0xff;
-     break;  
-     
-     case 1:
-           BuffTemp[5] = (Temp >> 0) & 0xff;
-     break; 
-    
-    
-     
-     //HFO
-     case 2:
-           Temp = 0;//HFO
-           BuffTemp[5] = (Temp >> 8) & 0xff;
-     break;     
-     
-     case 3:
-           Temp = 0;//HFO
-           BuffTemp[5] = (Temp >> 0) & 0xff;
-     break;  
-   
-   
-     
-     //T_Vibro
-     case 4:
-           Temp = (unsigned int)((7680000*16/(Gyro.Frq>>12))); 
-           BuffTemp[5] = (Temp >> 8) & 0xff;
-     break;  
-    
-     case 5:
-           BuffTemp[5] = (Temp >> 0) & 0xff;
-     break; 
-    
-    
-     
-     //L_Vibro  
-     case 6:
-          Temp = (unsigned int)(((7680000*16/200) *Gyro.AmpPer /(Gyro.Frq>>12))); 
-          BuffTemp[5]  =  (Temp >> 8) & 0xff;
-     break;  
-   
-     case 7:
-          BuffTemp[5]  =  (Temp >> 0) & 0xff;
-     break;  
-     
-     
-     
-     //Напряжение на регуляторе периметра
-     case 8:
-          Temp = Spi.DAC_B /*- 0x7fff*/;
-          BuffTemp[5] =  (Temp >> 8) & 0xff;
-     break;  
-   
-     case 9:
-          BuffTemp[5] =  (Temp >> 0) & 0xff;
-     break;  
-     
-     
-     
-     //темпкратурный канал 0
-     case 10:
-          Temp = 100;
-          BuffTemp[5] =  (Temp >> 8) & 0xff;
-     break;  
-    
-     case 11:
-         BuffTemp[5] =  (Temp >> 0) & 0xff;
-     break;
-     
-       
-       
-     //темпкратурный канал 1 
-     case 12:
-        Temp = Gyro.AD_Slow >> 16;
-        BuffTemp[5] = (Temp >> 8) & 0xff;
-     break;  
-   
-     case 13:
-        BuffTemp[5] = (Temp >> 0) & 0xff;
-     break; 
-     
-          
-      
-     //ток 1
-     case 14:
-        Temp = Gyro.In1;
-        BuffTemp[5] = (Temp >> 8) & 0xff;//in1//2
-     break;  
-    
-     case 15:
-        BuffTemp[5] = (Temp >> 0) & 0xff;
-     break; 
-     
-      
-      
-     //ток 2
-     case 16:
-        Temp = Gyro.In2;
-        BuffTemp[5] = (Temp >> 8) & 0xff;
-     break;  
-     
-     case 17:
-        BuffTemp[5] = (Temp >> 0) & 0xff;//in2//3      
-     break;  
-     
-     
-     
-     //разностный температурный канал Delta Temp
-     case 18:
-        Temp = Gyro.DeltaT;
-        BuffTemp[5] = (Temp >> 8) & 0xff;//дельта
-     break;  
-    
-     case 19:
-        BuffTemp[5] = (Temp >> 0) & 0xff;
-     break; 
-     
-     
-     
-     //температурный канал 5
-     case 20:
-        Temp = Gyro.Termo;//0xa4=164
-        BuffTemp[5] =(Temp >> 8) & 0xff;//температура
-     break;       
-     
-     case 21:
-        BuffTemp[5] =(Temp >> 0) & 0xff;//ADC6   sesnsor 5
-     break; 
-     } 
-    Check(BuffTemp, CRC_N);
-    WriteConN (BuffTemp,CRC_N);  
-    CountParam++;
-    if(CountParam>21)CountParam=0;//зацикливания буфера от 0 до 21
-}
 
 void CMD_Rate2(void)
 {
-	Gyro.Rate2_Event=0;
+	Gyro.Reper_Event=0;
     BuffTemp[ 0] = Gyro.SOC_Out;
     BuffTemp[ 1] = Gyro.My_Addres;
 
@@ -484,16 +375,15 @@
  
 Temp=Gyro.CuruAngle;												//(0,28/с)
  
-               //    8 байт       + 4 байта от прошлых измерений
- /* Gyro.CuruAngle = Gyro.CuruAngle + OldCuruAngle; 								//(72 град/с)
-  OldCuruAngle=Gyro.CuruAngle & 0xff;											//сохраняем 4 байта для след измирений
-  Temp=Gyro.CuruAngle>>8; 	*/													//приводим к форме вывода 
- 															
+ //8 байт       + 4 байта от прошлых измерений
+ // Gyro.CuruAngle = Gyro.CuruAngle + OldCuruAngle; 								//(72 град/с)
+/*  OldCuruAngle=Gyro.CuruAngle & 0xff;											//сохраняем 4 байта для след измирений
+  Temp=Gyro.CuruAngle>>8; 		*/											//приводим к форме вывода 
+ 	/*														
  																				//(9 град/с)
-/*OldCuruAngle=Gyro.CuruAngle & 0x1f;											//сохраняем 5 бит для след измирений 
-  Temp=Gyro.CuruAngle>>5; */                                                    //приводим к форме вывода
+OldCuruAngle=Gyro.CuruAngle & 0x1f;											//сохраняем 5 бит для след измирений 
+  Temp=Gyro.CuruAngle>>5; */                                                  //приводим к форме вывода
   Gyro.CuruAngle = 0;
-
     BuffTemp[ 6] =(Temp >> 8) & 0xff;//старший байт разности счетчиков
     BuffTemp[ 7] =(Temp >> 0) & 0xff;//младший байт разности счетчиков
 
@@ -759,18 +649,31 @@
     unsigned int lengf;
     lengf = 1;
     switch(Gyro.CMD_In) {
-        case 0x99://Gyrotainance
-            
+        case 0x99://Mintainance
             lengf=6;
             CRC_N=8;
             break;
 
+        case 0xB0://Delta_Bins
+            lengf=6;
+            CRC_N=9;
+            break;
+
+       case 0xA0://Delta_PS
+            lengf=6;
+            CRC_N=8;
+            break;
+            
+        case 0xDD://m_rate
+            lengf=6;
+            CRC_N=44;
+            break;
+
         case 0x0A: //m_stymul
             lengf=8;
             break;
 
         case 0xE9://DeviceMode
-
             lengf=6;
             CRC_N=8;
             break;
@@ -785,29 +688,11 @@
             lengf=6;
             CRC_N=8;
             break;
-            
-        case 0xDD://m_rate
-            lengf=6;
-            CRC_N=44;
-            break;
-      
-         
-        case 0xA0://Delta_PS
-            lengf=6;
-            CRC_N=8;
-            break;
-            
-            
-        case 0xB0://DeviceMode
-
-            lengf=6;
-            CRC_N=8;
-            break;
-
+                 
         case 0xD8://m_control
 
             lengf=6;
-            CRC_N=8;
+            CRC_N=6;
             break;
 
         case 0xD9://m_control
@@ -884,21 +769,12 @@
      {
       ReadCon1(BuffTemp); 
       switch(Gyro.CMD_In) {
-             Rate_Flag=0;
+             
                 case 0x99:
                     Gyro.ModeOut=0;
                     CMD_Maintenance(); 
                 break;
-               
-                case 0xA0:
-                  DropDelay();//выставка задержки для мультидропа сбрасывается в команде CMD_Maintenance() на 45 микросекунд; 
-                  TempParam=(BuffTemp[3]) & 0x90; 
-                  if      (TempParam==Delta_500)       {CMD_Delta_500Hz();}
-                  else if (TempParam==Delta_EXT)       {CMD_Delta_Ext();  }
-                  else if (TempParam==PDelta_500)      { Gyro.ModeOut=3; Gyro.Delta500_Event=0; /*WriteCon("Delta500");*/ }
-                  else if (TempParam==PDelta_EXT)      { Gyro.ModeOut=4; Gyro.DeltaEXT_Event=0;/* WriteCon("deltaEXT"); */}
-                break;
-               
+                             
                 case 0xD8:
                     CMD_M_Control_D8();
                 break;
@@ -931,7 +807,7 @@
                           Gyro.BackLight = StartBackLight << ShiftStart3;
                           break;
                           }
-             break;
+                break;
             
                 case 0xD9:
                     CMD_M_Control_D9();
@@ -941,14 +817,44 @@
                     CMD_M_Stymul();
                 break;
                
-                case 0xDD:
-                    
-	                TempParam=(BuffTemp[3]) & 0x9f; 
-	                if      (TempParam == Rate1)        { CMD_Rate(); 		     	                    WriteCon("Rate11");}
-	                else if (TempParam == Rate2)        { CMD_Rate2(); 		                            WriteCon("Rate21");}
-	                else if (TempParam == PRate1)       { Gyro.ModeOut=1; Gyro.Rate1_Event=0;	        WriteCon("Rate12");}
-	                else if (TempParam == PRate2)       { Gyro.ModeOut=2; Gyro.Rate2_Event=0;		    WriteCon("Rate22");}
+                case 0xDD: //Rate
+                  TempParam=(BuffTemp[3]) & 0x9f; 
+                  switch(TempParam) {
+  				  case  Rate1  :  CMD_Rate(); 			 	    				break;  
+				  case  Rate2  :  CMD_Rate2();             						break;
+				  case  PRate1 :  Gyro.ModeOut=1; Gyro.Rate1_Event=0; 	    	break;  
+				  case  PRate2 :  Gyro.ModeOut=2; Gyro.Reper_Event=0;			break;  
+				 }
                 break; 
+         
+               case 0xA0:  //Delta_PS
+                  DropDelay();//выставка задержки для мультидропа сбрасывается в команде CMD_Maintenance() на () микросекунд; 
+                  TempParam=(BuffTemp[3]) & 0x90; 
+                  switch(TempParam) {
+  				  case  Delta_500  :  CMD_Delta_PS();		 	    			break;  
+				  case  Delta_EXT  :  CMD_Delta_PS();              				break;
+				  case  PDelta_500 :  Gyro.ModeOut=3; 		 	    			break;  
+				  case  PDelta_EXT :  Gyro.ModeOut=4;              				break;
+				 }
+			   break;
+              
+               case 0xB0://Delta_Bins
+                  DropDelay();//выставка задержки для мультидропа сбрасывается в команде CMD_Maintenance() на () микросекунд; 
+                  switch(TempParam) {
+  				  case  PDelta_Bins:  Gyro.ModeOut=5; 		 	    			break;  
+				  case  Delta_Bins :  CMD_Delta_Bins();             			break;
+				 }
+               break;
+  
+               case 0x0F://B_Delta
+                  TempParam = (((BuffTemp[3])>>4) & 0x9); 
+                  switch(TempParam) {
+  				  case  PB_Delta_EXT: Gyro.ModeOut=6; 		 	  				break;  
+				  case  PB_Delta_INT: Gyro.ModeOut=7;             				break;
+				  case  B_Delta_EXT:  CMD_B_Delta();		      				break;   
+    			  case  B_Delta_INT:  CMD_B_Delta();              				break;   		
+    			}
+               break;
               
                 case 0xE4:
                     CMD_M_vib();
@@ -961,6 +867,27 @@
           }
      }
 }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 void TechLog(void)
 {
  if (ReadCon (Time)) {
@@ -969,7 +896,10 @@
 //////////////////////Выбор FlashMod///////////////////////////
 ////////////////////////////////////////////////////////////////
 
-            if (Time[0] == 'B') {Gyro.FlashMod=1;}  
+            if (Time[0] == 'B') 
+            {
+                sprintf((Time),"<%015d>\r\n", Gyro.tempdelta);
+                WriteCon(Time);}  
             if (Time[0] == 'W') {Gyro.FlashMod=2;}
             if (Time[0] == 'R') {Gyro.FlashMod=3;}
 ///////////////////////////////////////////////////////////////
@@ -1017,6 +947,10 @@
             if (Time[0] == '4') {		// выдача технологическая
                 sprintf(Time,"\r\n");
                 WriteCon(Time);
+                for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%07d> ",    Buff_8Point[i]);
+                WriteCon(Time);
+                sprintf(Time,"\r\n");
+                WriteCon(Time);
                 for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%07d> ",    Buff_16PointD[i]);
                 WriteCon(Time);
                 sprintf(Time,"\r\n");
@@ -1031,21 +965,62 @@
                 WriteCon(Time);
                 for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%07d> ",    Buff_Restored_sin[i]);
                 WriteCon(Time);
-                sprintf(Time,"\r\n");
+                sprintf(Time,"\r\n\r\n\r\n");
                 WriteCon(Time);
-                sprintf(Time,"\r\n");
-                WriteCon(Time);
+             }
+            if (Time[0] == 'z'){		// выдача технологичес6кая
+              
                 sprintf(Time,"\r\n");
                 WriteCon(Time);
-            }
-            if (Time[0] == 'z'){		// выдача технологичес6кая
-                sprintf(Time,"\r\n");
-                WriteCon(Time);
-                for (int i = 0; i < 32; i++ ) 
+              
+                  for (int i = 0; i < 32; i++ ) 
+                  { 
+                  ttemp+=(Buff_Restored_sin[i]);
+                  }
+                  sprintf((Time)," %d ",ttemp);
+                  WriteCon(Time);
+                 
+                  for (int i = 0; i < 32; i++ ) 
+                  { 
+                  ttemp += Buff_64Point[i];
+                  }
+                  sprintf((Time)," %d ",ttemp);
+                  WriteCon(Time);
+                 
+                  for (int i = 0; i < 32; i++ ) 
+                  { 
+                  ttemp += Buff_32Point[i];
+                  }
+                  sprintf((Time)," %d ",ttemp);
+                  WriteCon(Time);
+                 
+                  for (int i = 0; i < 32; i++ ) 
                   { 
-                  ttemp=(Buff_Restored_sin[i]);
-                  if (ttemp > 0) WriteCon("1"); else WriteCon("0");
+                  ttemp += Buff_16Point[i];
+                  }
+                  sprintf((Time)," %d ",ttemp);
+                  WriteCon(Time);
+                 
+                  for (int i = 0; i < 32; i++ ) 
+                  { 
+                  ttemp += Buff_16PointD[i];
                   }
+                  sprintf((Time)," %d ",ttemp);
+                  WriteCon(Time);
+               
+                  for (int i = 0; i < 32; i++ ) 
+                  { 
+                  ttemp += Buff_8Point[i];
+                  }
+                  sprintf((Time)," %d ",ttemp);
+                  WriteCon(Time);
+                 
+                  for (int i = 0; i < 32; i++ ) 
+                  { 
+                  ttemp += Buff_1Point[i];
+                  }
+                  sprintf((Time)," %d ",ttemp);
+                  WriteCon(Time);
             }
              if (Time[0] == '6') {		// выдача технологическая
                 sprintf(Time,"\r\n");
@@ -1065,12 +1040,12 @@
                 for (int i = 0; i < 32; i++ )sprintf((Time)," <%07d> ",Gyro.Frq);
                 WriteCon(Time);
              }
-             if (Time[0] == 'p') {		// выдача технологическая
+             /*if (Time[0] == 'p') {		// выдача технологическая
                 sprintf(Time,"\r\n");
                 WriteCon(Time);
                 for (int i = 0; i < 32; i++ )sprintf((Time)," <%07d> ",Gyro.MaxAmp);
                 WriteCon(Time);
-             }
+             }*/
               if (Time[0] == 'x') {		// выдача технологическая
                 sprintf(Time,"\r\n");
                 WriteCon(Time);
@@ -1094,7 +1069,9 @@
             if (Time[0] == 'y')   Gyro.flag=1;           //включит передачу
             if (Time[0] == 'u')   Gyro.flag=0;  //LPC_TIM1->MR0+1000  вносим помеху        
             if (Time[0] == 'i')   Gyro.flag=2; //LPC_TIM1->MR0       убираем помеху  
-            if (Time[0] == 'o')   Gyro.LogHZ=0;           //Отключить передачу
+            if (Time[0] == 'o')   Gyro.flag=3;           //Отключить передачу
+            if (Time[0] == 'p')   Gyro.LogHZ = 1;           //Отключить передачу
+            if (Time[0] == 'l')   Gyro.LogHZ = 0;           //Отключить передачу
        ////////////////////////////////////////////////////////////////////////////////////     
                       /*Запись лога регулировки периметра*/
             if (Time[0] == 'g')  {Gyro.LogPLC=1; Gyro.PLC_Lern=0;}          //включит передачу