forkd

Dependencies:   mbed

Fork of LG2 by Dmitry Kovalev

Revision:
211:ac8251b067d2
Parent:
210:b02fa166315d
Child:
213:9953db9543d6
--- a/Command.c	Mon Apr 24 05:43:54 2017 +0000
+++ b/Command.c	Mon Jul 03 05:50:08 2017 +0000
@@ -16,12 +16,14 @@
 unsigned int OldCuruAngle;
 unsigned int OldCaunPlus=0;
 unsigned int OldCaunMin=0;
+unsigned int OutDeltaPS;
+int IntOutDeltaPS;
 int ttemp,temp5=1;
 int OLDDAC=0;
 int rr = 123;
 unsigned int pDestT; 
 GyroParam *Flash;
-
+//int q;
  ///////////////flah and boot///////////
 void GoBoot(void)
   {
@@ -121,14 +123,15 @@
  {  
     switch(Gyro.ModeOut) 
     {
-    case 1: if(Gyro.Rate1_Event ) 				CMD_Rate();  		 	  break;  
-    case 2: if(Gyro.Reper_Event )				CMD_Rate2(); 			  break;  
-    case 8: if(Gyro.Rate3_Event )				CMD_Rate3();			  break;      
-    case 3: if(Gyro.Event_500Hz ) 				CMD_Delta_PS();           break;   
-    case 4: if(Gyro.EXT_Latch   ) 				CMD_Delta_PS();           break;   
-    case 5: if(Gyro.Event_500Hz ) 				CMD_Delta_Bins();         break;   
-    case 6: if(Gyro.EXT_Latch   ) 			    CMD_B_Delta();            break;      	
-    case 7: if(Gyro.Event_500Hz ) 				CMD_B_Delta();            break;      	
+    case 1: if(Gyro.Rate1_Event ) 				CMD_Rate();  		 	  		break;  
+    case 2: if(Gyro.Reper_Event )				CMD_Rate2(); 			  		break;  
+    case 3: if(Gyro.Event_500Hz ) 				CMD_Delta_PS();           		break;   
+    case 4: if(Gyro.EXT_Latch   ) 				CMD_Delta_PS();          		break;   
+    case 5: if(Gyro.Event_500Hz ) 				CMD_Delta_Bins();         		break;   
+    case 6: if(Gyro.EXT_Latch   ) 			    CMD_B_Delta();            		break;      	
+    case 7: if(Gyro.Event_500Hz ) 				CMD_B_Delta();          		break;    
+    case 8: if(Gyro.Rate3_Event )				CMD_Rate3();			 		break;        	
+    case 9: if(Gyro.Reper_Event ){				CMD_Rate2(); Gyro.ModeOut=0;}	break;
     }
  }
  
@@ -174,8 +177,13 @@
  
    switch(NP) 
    {
-   				case  0: Gyro.My_Addres 	= GyroP.Str.My_Addres; 													break;  
-     			case  3: Spi.DAC_A 			= ((((int)(GyroP.Str.DAC_current_Work+ 0x7fff)&0xffff)+22544)*0.65); 	break;  
+   				case  0: Gyro.My_Addres 	= GyroP.Str.My_Addres; 													break;
+   				case  1: Gyro.HFO_ref		= /*GyroP.Str.HFO_ref>>1;*/(unsigned int)(GyroP.Str.HFO_ref)*0.82;		break;
+   				case  2: Gyro.HFO_Gain 		= 		GyroP.Str.HFO_Gain; 											break;
+     			case  3: if(Gyro.LG_Type)  Gyro.HFO_Max=((int)(GyroP.Str.DAC_current_Work*0.67)-2000);
+     					 else			   Spi.DAC_A = ((((int)(GyroP.Str.DAC_current_Work+ 0x7fff)&0xffff)+22544)*0.65); 	break;  
+     			
+     			case  4: if(Gyro.LG_Type)  Gyro.HFO_Min=((int)(GyroP.Str.DAC_current_Start*0.67)-2000);			    break; 
      			
      			case  7: Gyro.PLC_Phase	 	= GyroP.Str.PLC_Phase;     												break; 
      			case  8: Gyro.PLC_Gain		= GyroP.Str.PLC_Gain;     												break; 
@@ -215,6 +223,19 @@
      			 		 Out_G_photo(Gyro.Gain_Sin, Gyro.Gain_Cos); 
      			break;
      			case 60: Gyro.GLD_Serial 		= GyroP.Str.GLD_Serial;	   											break;
+     			
+     			
+     			case 10: Gyro.DownTreshold		=0x7fff+GyroP.Str.DownTreshold;  							     			break;
+     			case 11: Gyro.HighTreshold		=0x7fff+GyroP.Str.HighTreshold;  							    			break;
+     			case 9: Gyro.PLCDelay			= GyroP.Str.PLCDelay/10;  								     			break;
+     			/*case 105: Gyro.ResetLevelCool	= GyroP.Str.ResetLevelCool; 			     		   break;
+     			case 55: Gyro.ResetLevelHeat	= GyroP.Str.ResetLevelHeat;					    			break;*/
+     			case 39: Gyro.ResetLevelCool	= 0x7fff+GyroP.Str.ResetLevelCool; 			     		   break;
+     			case 31: Gyro.ResetLevelHeat	= 0x7fff+GyroP.Str.ResetLevelHeat;					    			break;														//27
+				 	
+					
+																		//105
+               
    }
      			
     NP=0; 	
@@ -311,37 +332,40 @@
   
     //F_ras  
      case 0:
-           Temp = Gyro.F_ras;
-           BuffTemp[5] = (Temp >> 8) & 0xff;
+           OutDeltaPS = Gyro.F_ras;
+           BuffTemp[5] = (OutDeltaPS >> 8) & 0xff;
      break;  
      
      case 1:
-           BuffTemp[5] = (Temp >> 0) & 0xff;
+           BuffTemp[5] = (OutDeltaPS >> 0) & 0xff;
      break; 
      
      
      //HFO
      case 2:
-     	   Temp2 = ((Spi.DAC_A/0.65)-22544)-0x7fff;   
-	       Temp1=  (int)Temp2;
+     	  /* Temp2 = ((Spi.DAC_A/0.65)-22544)-0x7fff;   
+	       Temp1=  (int)Temp2;*/
+	       
+	    if(Gyro.LG_Type) {OutDeltaPS =(int)(((Spi.DAC_A/0.6667)-30000)-0x7fff);}
+   	    else 	   	     {OutDeltaPS =(unsigned int)(0x7fff-Spi.ADC5)*0.79;}       
          //  Temp = Spi.DAC_A-0x7fff;
-           BuffTemp[5] = (Temp1 >> 8) & 0xff;
+           BuffTemp[5] = (OutDeltaPS >> 8) & 0xff;
      break;     
      
      case 3:
-           BuffTemp[5] = (Temp1 >> 0) & 0xff;
+           BuffTemp[5] = (OutDeltaPS >> 0) & 0xff;
      break;  
    
    
      
      //T_Vibro
      case 4:
-           Temp = (unsigned int)(7680000/(Gyro.Frq>>16)); 	
-           BuffTemp[5] = (Temp >> 8) & 0xff;
+           OutDeltaPS = (unsigned int)(7680000/(Gyro.Frq>>16)); 	
+           BuffTemp[5] = (OutDeltaPS >> 8) & 0xff;
      break;  
     
      case 5:
-           BuffTemp[5] = (Temp >> 0) & 0xff;
+           BuffTemp[5] = (OutDeltaPS >> 0) & 0xff;
      break; 
     
     
@@ -349,53 +373,53 @@
      //L_Vibro  
      case 6:
         //Temp = Gyro.L_vibro>>1;
-          Temp = Gyro.L_vibro;
-          BuffTemp[5]  =  (Temp >> 8) & 0xff;
+          OutDeltaPS = Gyro.L_vibro;
+          BuffTemp[5]  =  (OutDeltaPS >> 8) & 0xff;
  
      break;  
    
      case 7:
-          BuffTemp[5]  =  (Temp >> 0) & 0xff;
+          BuffTemp[5]  =  (OutDeltaPS >> 0) & 0xff;
      break;  
      
      
      
      //Напряжение на регуляторе периметра
      case 8:
-          Temp = (Spi.DAC_B - 0x7fff);
-          BuffTemp[5] =  (Temp >> 8) & 0xff;
+          OutDeltaPS = (Spi.DAC_B - 0x7fff);
+          BuffTemp[5] =  (OutDeltaPS >> 8) & 0xff;
   
      break;  
    
      case 9:
-          BuffTemp[5] =  (Temp >> 0) & 0xff;
+          BuffTemp[5] =  (OutDeltaPS >> 0) & 0xff;
      break;  
      
      
      
      //темпкратурный канал 0
      case 10:
-          Temp = 100;
-          BuffTemp[5] =  (Temp >> 8) & 0xff;
+          OutDeltaPS = 0;
+          BuffTemp[5] =  (OutDeltaPS >> 8) & 0xff;
 
      break;  
     
      case 11:
-         BuffTemp[5] =  (Temp >> 0) & 0xff;
+         BuffTemp[5] =  (OutDeltaPS >> 0) & 0xff;
      break;
      
        
        
      //f 
      case 12:
-        Temp =(unsigned int)(0x7fff-Spi.ADC5)*0.79;
+        OutDeltaPS =0;//(unsigned int)(0x7fff-Spi.ADC5)*0.79;
     //    Temp = Gyro.AD_Slow >> 16;
-        BuffTemp[5] = (Temp >> 8) & 0xff;
+        BuffTemp[5] = (OutDeltaPS >> 8) & 0xff;
    
      break;  
    
      case 13:
-        BuffTemp[5] = (Temp >> 0) & 0xff;
+        BuffTemp[5] = (OutDeltaPS >> 0) & 0xff;
      break; 
      
           
@@ -403,13 +427,13 @@
      //ток 1
      case 14:
       //Temp = Gyro.In1;
-        Temp1 = ((Gyro.In1>>1)*0.800875)-0x3e0b;
-        BuffTemp[5] = (Temp >> 8) & 0xff;//in1//2
+        IntOutDeltaPS = ((Gyro.In1>>1)*0.800875)-0x3e0b;
+        BuffTemp[5] = (IntOutDeltaPS >> 8) & 0xff;//in1//2
         
      break;  
     
      case 15:
-        BuffTemp[5] = (Temp >> 0) & 0xff;
+        BuffTemp[5] = (IntOutDeltaPS >> 0) & 0xff;
      break; 
      
       
@@ -417,37 +441,40 @@
      //ток 2
      case 16:
    //	Temp = Gyro.In2;
-     	Temp1 = ((Gyro.In2>>1)*0.800875)-0x3e0b;    
-     	BuffTemp[5] = (Temp >> 8) & 0xff;
+     	IntOutDeltaPS = ((Gyro.In2>>1)*0.800875)-0x3e0b;    
+     	BuffTemp[5] = (IntOutDeltaPS >> 8) & 0xff;
      break;  
      
      case 17:
-        BuffTemp[5] = (Temp >> 0) & 0xff;//in2//3      
+        BuffTemp[5] = (IntOutDeltaPS >> 0) & 0xff;//in2//3      
      break;  
      
      
      
      //разностный температурный канал Delta Temp
      case 18:
-        Temp = Gyro.DeltaT;
-        BuffTemp[5] = (Temp >> 8) & 0xff;//дельта
+        OutDeltaPS = 0;
+        OutDeltaPS = Gyro.DeltaT;
+        BuffTemp[5] = (OutDeltaPS >> 8) & 0xff;//дельта
      break;  
     
      case 19:
-        BuffTemp[5] = (Temp >> 0) & 0xff;
+        BuffTemp[5] = (OutDeltaPS >> 0) & 0xff;
      break; 
      
      
      
      //температурный канал 5
      case 20:
-        Temp = Gyro.Termo;//0xa4=164
-        BuffTemp[5] =(Temp >> 8) & 0xff;//температура
-    
+        OutDeltaPS = 0;
+        OutDeltaPS =  Gyro.TermLM;//Spi.ADC1;// //Gyro.Termo;//0xa4=164
+        BuffTemp[5] =(OutDeltaPS >> 8) & 0xff;//температура    
      break;       
      
      case 21:
-        BuffTemp[5] =(Temp >> 0) & 0xff;//ADC6   sesnsor 5
+        BuffTemp[5] =(OutDeltaPS >> 0) & 0xff;//ADC6   sesnsor 5
+    /*    sprintf((Time),"%d     %d   \r\n", Spi.ADC1, Spi.ADC5 );
+        WriteCon(Time);*/
      break; 
      } 
     Check(BuffTemp, CRC_N);
@@ -471,30 +498,15 @@
 
     BuffTemp[ 2] =(  Gyro.CaunPlusReper   >> 8) & 0xff;//старший байт счетчика +.		3 --сарший байт счентчика +
     BuffTemp[ 3] =(  Gyro.CaunPlusReper   >> 0) & 0xff;//младший байт счетчика +.		4 --младший байт счетчика +
-   // Gyro.CaunPlusRate=0;
-/*
-    BuffTemp[ 2] =(Gyro.CaunPlus >> 8) & 0xff;//старший байт счетчика +.		3 --сарший байт счентчика +
-    BuffTemp[ 3] =(Gyro.CaunPlus >> 0) & 0xff;//младший байт счетчика +.		4 --младший байт счетчика +
- */
+ 
     BuffTemp[ 4] =(	  Gyro.CaunMinReper  >> 8) & 0xff;//старший байт счетчика -.			5 --сарший байт счентчика -
     BuffTemp[ 5] =(	  Gyro.CaunMinReper  >> 0) & 0xff;//младший байт счетчика -.			6 --младший байт счетчика -
-  //  Gyro.CaunMinRate=0;
-/*
-    BuffTemp[ 4] =(Gyro.CaunMin >> 8) & 0xff;//старший байт счетчика -.			5 --сарший байт счентчика -
-    BuffTemp[ 5] =(Gyro.CaunMin >> 0) & 0xff;//младший байт счетчика -.			6 --младший байт счетчика -
-*/
-    //Temp=Gyro.CuruAngle;														//(0,28/с)
-    	//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;                                            	//приводим к форме вывода
-		
-	/*sprintf((Time),"%d   %d\r\n",Gyro.CuruAngle, Temp);
-    WriteCon(Time);		*/
+		Temp=Gyro.CuruAngle>>5;                                          	//приводим к форме вывода
+
     
     Gyro.CuruAngle = 0;
     BuffTemp[ 6] =(Temp >> 8) & 0xff;//старший байт разности счетчиков			7 --младший байт разности счетчиков
@@ -511,14 +523,21 @@
     BuffTemp[ 8] = (Temp >> 8) & 0xff;//расщипление частота						9  --частота расщипления
     BuffTemp[ 9] = (Temp >> 0) & 0xff;//	    								10 --частота расщипления
     
-   // ((temp*1.67)-0x5523);
+  //(unsigned int)((Gyro.DacIn+30000)*0.6667);
+    if(Gyro.LG_Type) {Temp1 =(int)(((Spi.DAC_A/0.6667)-30000)-0x7fff);}
+    else 				
+    {
 	Temp2 = ((Spi.DAC_A/0.65)-22544)-0x7fff;   
 	Temp1=  (int)Temp2;
+	}
 	//Temp1=Gyro.DacIn/*-0x7fff*/;
     BuffTemp[10] = (Temp1 >> 8) & 0xff;//выход регулятора гвч;					11 --выход регулятора ГВЧ
     BuffTemp[11] = (Temp1 >> 0) & 0xff;										  //12 --выход регулятора ГВЧ
    
-    Temp =(unsigned int)(0x7fff-Spi.ADC5)*0.79;
+   
+   
+    if(Gyro.LG_Type) Temp =(int)(DeltaRegul<<2);
+    else    		 Temp =(unsigned int)(0x7fff-Spi.ADC5)*0.79;
     BuffTemp[12]=(Temp >> 8) & 0xff;//// HFO									13 --сигнал ошибки регулятора ГВЧ
     BuffTemp[13]=(Temp >> 0) & 0xff;////										14 --сигнал ошибки регулятора ГВЧ
   
@@ -546,9 +565,7 @@
     BuffTemp[22] =  (Temp1 >> 8) & 0xff;											//23 Выход регулятора рабочего периметра
     BuffTemp[23] =  (Temp1 >> 0) & 0xff;	
     										//24
-   /* sprintf((Time),"%d \r\n",Temp1);
-    WriteCon(Time);	*/
-    
+
     Temp = Gyro.PLC_Eror_count>>4; //Gyro.AD_Slow >> 16; 
     Gyro.PLC_Eror_count = 0;
     BuffTemp[24] = (Temp >> 8) & 0xff;//                                        //25 ФД СРП
@@ -591,18 +608,18 @@
 
     BuffTemp[ 0] = Gyro.SOC_Out;
     BuffTemp[ 1] = Gyro.My_Addres;
-
-
-	Temp=Gyro.CaunPlusReper;           
+    
+Temp=Gyro.CaunPlusReper;         
+ 
 	BuffTemp[ 2] =(Temp >> 8) & 0xff;//старший байт счетчика +.
     BuffTemp[ 3] =(Temp >> 0) & 0xff;//младший байт счетчика +.
- 
-							//сохраняем 5 бит для след измирений 
+					//сохраняем 5 бит для след измирений 
 
- 	Temp= Gyro.CaunMinReper;
+Temp= Gyro.CaunMinReper;
+
     BuffTemp[ 4] =(Temp >> 8) & 0xff;//старший байт счетчика -.
     BuffTemp[ 5] =(Temp >> 0) & 0xff;//младший байт счетчика -.
-  
+
     Check(BuffTemp, 8);
     WriteConN (BuffTemp,8);
 }
@@ -636,13 +653,14 @@
     if(HFO) 
     {
     	Gyro.DacIn=temp;
-    	Spi.DAC_A = (unsigned int)((temp+22544)*0.65);
+    	if(Gyro.LG_Type==1) Spi.DAC_A = (unsigned int)((Gyro.DacIn+30000)*0.6667);
+    	else Spi.DAC_A = (unsigned int)((temp));
     }
     else	Spi.DAC_B = (unsigned int)temp;
     
-    sprintf((Time)," %d  %d \r\n", Spi.DAC_B,temp);
+/*    sprintf((Time)," %d 	 %d \r\n", Spi.DAC_A,Gyro.DacIn);
     WriteCon(Time);	
-
+*/
     
 	/*
       sprintf((Time),"%d     %d     %f     \r\n", temp,   Spi.DAC_A,    (temp+10744)*0.79);
@@ -968,10 +986,10 @@
       case 0xDD:  TempParam=(BuffTemp[3]) & 0x9f; 							    //Rate
                   switch(TempParam) {
   				  case  Rate1  :  CMD_Rate(); 	   								break;  
-				  case  Rate2  :  CMD_Rate2();  								break;
+				  case  Rate2  :  Gyro.ModeOut=9; 									break;
 				  case  Rate3  :  CMD_Rate3();             						break;
 				  case  PRate1 :  Gyro.ModeOut=1;	    						break;  
-				  case  PRate2 :  Gyro.ModeOut=2;  								break;  
+				  case  PRate2 : Gyro.ModeOut=2;            					break;  
 				  case  PRate3 :  Gyro.ModeOut=8;								break;  
 				 }
       break;      //DropDelay(); выставка задержки для мультидропа сбрасывается в команде CMD_Maintenance() на () микросекунд; 
@@ -1026,56 +1044,89 @@
 
 
 
-            if (Time[0] == 'f') {		// выдача технологическая
+          /*  if (Time[0] == 'f') {		// выдача технологическая
                Gyro.ModAmp += 1;
             sprintf((Time),"%d \r\n",  Gyro.ModAmp);
     		WriteCon(Time);
-            }
-            if (Time[0] == 'd') {		// выдача технологическая
+            }*/
+           /* if (Time[0] == 'd') {		// выдача технологическая
                Gyro.ModAmp -= 1;
                sprintf((Time),"%d \r\n",  Gyro.ModAmp);
     		   WriteCon(Time);
-            }
+            }*/
              if (Time[0] == 'V') {		// выдача технологическая
-                Spi.DAC_B += 1000;
-            }
+                Gyro.Debag += 10;
+                        }
              if (Time[0] == 'v') {		// выдача технологическая
-                Spi.DAC_B -= 1000;
+                Gyro.Debag -= 10;
+               
              }       
              if (Time[0] == 'C') {		// выдача технологическая
-                Spi.DAC_B += 2000;
+                Gyro.Debag += 1000;
+        
             }
              if (Time[0] == 'c') {		// выдача технологическая
-                Spi.DAC_B -= 2000;
+                Gyro.Debag -= 1000;
+
              }  
              if (Time[0] == 'X') {		// выдача технологическая
-                Spi.DAC_B += 3000;
+                Spi.DAC_A += 3000;
+                sprintf((Time),"%d \r\n",  Spi.DAC_A);
+    		    WriteCon(Time);
             }
              if (Time[0] == 'x') {		// выдача технологическая
-                Spi.DAC_B -= 3000;
+                Spi.DAC_A -= 3000;
+                sprintf((Time),"%d \r\n",  Spi.DAC_A);
+    		    WriteCon(Time);
              } 
              if (Time[0] == 'p') {		// выдача технологическая
                PlcOFF //Gyro.RgConA&0x8=0;
                Gyro.LogMod=1;
-               MODFlag=1;
-               Spi.DAC_B = 16000;
+              // MODFlag=1;
+               Spi.DAC_B = 65535;
             }
              if (Time[0] == 'o') {		// выдача технологическая
                PlcON
-               Gyro.LogMod=0;
+              // Gyro.LogMod=0;
                MODFlag=2;
-               Spi.DAC_B = 32000;
+            //   Spi.DAC_B = 32000;
              } 
-             
+            if (Time[0] == 'm') 
+            {		// выдача технологическая
+           /*   for(q=0; q<32; q++)
+            {
+               sprintf((Time),"%d  ", Buff_1Point[q]);
+    		   WriteCon(Time);
+            }
+             sprintf((Time),"\r\n");
+    		 WriteCon(Time);
+            for(q=0; q<32; q++)
+            {
+               sprintf((Time),"%d  ", Buff_Restored_sin [q]);
+    		   WriteCon(Time);
+            }*/
+             sprintf((Time),"\r\n");
+    		 WriteCon(Time);
+             } 
               
                 if (Time[0] == 'u') 
                 	{		// выдача технологическая
                		MODFlag=0;  //Mod vibro Hz 
-                  	}   
+                  	}  
+           
+                  
                 if (Time[0] == 'y') 
                 	{			//Mod 250 Hz 		PLCRegul250();
                		MODFlag=2;
                   	}
+                if (Time[0] == 'f') 
+                	{		// выдача технологическая
+               		 Gyro.CuruAngleLog = 0;  //Mod vibro Hz 
+                  	}  
+                if (Time[0] == 'd') 
+                	{		// выдача технологическая
+               		 Gyro.CuruAngleLog = 1;  //Mod vibro Hz 
+                  	}  
                 if (Time[0] == 'l') 
                 {		// выдача технологическая
                 Gyro.My_Addres			= GyroP.Str.My_Addres; 								 //  Gyro.My_Addres			= 0;