Dmitry Kovalev
/
LGstaandart
forkd
Fork of LG2 by
Diff: Command.c
- Revision:
- 209:224e7331a061
- Parent:
- 208:19150d2b528f
- Child:
- 210:b02fa166315d
diff -r 19150d2b528f -r 224e7331a061 Command.c --- a/Command.c Tue Feb 07 10:11:35 2017 +0000 +++ b/Command.c Thu Apr 13 14:14:45 2017 +0000 @@ -10,15 +10,18 @@ unsigned int Param2=0; unsigned int Param3=0; unsigned int Param4=0; -unsigned int Consol=123; +///unsigned int Consol=123; unsigned int TempParam=1; unsigned int CountParam=0; -int d8_anser=0,A=0,SA=0; -int ttemp; +unsigned int OldCuruAngle; +unsigned int OldCaunPlus=0; +unsigned int OldCaunMin=0; +int ttemp,temp5=1; int OLDDAC=0; int rr = 123; -unsigned int pDestT ; +unsigned int pDestT; GyroParam *Flash; + ///////////////flah and boot/////////// void GoBoot(void) { @@ -62,11 +65,11 @@ void EraseFlash(void) { rr = u32IAP_PrepareSectors(19, 21); - sprintf((Time)," dffddfd <%07d> ",rr); - WriteCon(Time); + /*sprintf((Time)," dffddfd <%07d> ",rr); + WriteCon(Time);*/ rr = u32IAP_EraseSectors(19, 21); - sprintf((Time)," dffddfd <%07d> ",rr); - WriteCon(Time); + /* sprintf((Time)," dffddfd <%07d> ",rr); + WriteCon(Time);*/ } void WriteFlash(void) @@ -116,9 +119,11 @@ ///////////////end flah and boot/////////// void M_RateA(void) { - switch(Gyro.ModeOut) { + switch(Gyro.ModeOut) + { case 1: if(Gyro.Rate1_Event ) CMD_Rate(); break; - case 2: if(Gyro.Reper_Event ) CMD_Rate2(); 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; @@ -135,15 +140,16 @@ NP = BuffTemp[3]; - + for (int i=0;i<8;i++) + {BuffTemp[i]=0;} BuffTemp[0] = Gyro.SOC_Out; BuffTemp[1] = Gyro.My_Addres; - sprintf((Time),"%d = %d \r\n",NP, GyroP.Array[NP]); - WriteCon(Time); + /* sprintf((Time),"%d = %d \r\n",NP, GyroP.Array[NP]); + WriteCon(Time);*/ Param = GyroP.Array[NP]; BuffTemp[2] =(GyroP.Array[NP] >> 8) & 0xff;//старший байт требуемого параметра BuffTemp[3] =(GyroP.Array[NP] >> 0) & 0xff;//младший байт требуемого параметра @@ -165,48 +171,48 @@ GyroP.Array[NP] = Param; flash=GyroP.Array[5]; - sprintf((Time),"%d\r\n",NP); - WriteCon(Time); + switch(NP) { - case 0: Gyro.My_Addres = GyroP.Str.My_Addres; break; - case 3: Spi.DAC_A = GyroP.Str.DAC_current_Work; break; - case 7: Gyro.PLC_Phase = GyroP.Str.PLC_Phase; break; - case 8: Gyro.PLC_Gain = GyroP.Str.PLC_Gain; break; - case 12: Gyro.FrqPhase = GyroP.Str.FrqPhase; break; - case 13: Gyro.FrqChengSpeed = GyroP.Str.FrqChengSpeed; break; + 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 14: Gyro.FrqHZ = GyroP.Str.FrqHZ; - Gyro.Frq = GyroP.Str.FrqHZ<<16; + case 7: Gyro.PLC_Phase = GyroP.Str.PLC_Phase; break; + case 8: Gyro.PLC_Gain = GyroP.Str.PLC_Gain; break; + case 12: Gyro.FrqPhase = GyroP.Str.FrqPhase; break; + case 13: Gyro.FrqChengSpeed = GyroP.Str.FrqChengSpeed; break; + + case 14: Gyro.FrqHZ = (7680000 / GyroP.Str.FrqHZ); + Gyro.Frq = (7680000 / GyroP.Str.FrqHZ)<<16; break; - case 15: Gyro.FrqHZmin = GyroP.Str.FrqHZmin<<16; break; - case 16: Gyro.FrqHZmax = GyroP.Str.FrqHZmax<<16; break; + case 15: Gyro.FrqHZmin = (7680000 / GyroP.Str.FrqHZmin)<<16; break; + case 16: Gyro.FrqHZmax = (7680000 / GyroP.Str.FrqHZmax)<<16; break; case 18: temp=((GyroP.Str.VB_Fdf_Hi<<16) | GyroP.Str.VB_Fdf_Lo); temp=temp/18.2; Gyro.AmpTarget=(unsigned int)(temp); break; - case 19: Gyro.AmpSpeed = GyroP.Str.AmpSpeed; break; - case 20: Gyro.AmpPerMin = GyroP.Str.AmpPerMin; break; - case 21: Gyro.AmpPerMax = GyroP.Str.AmpPerMax; break; + case 19: Gyro.AmpSpeed = GyroP.Str.AmpSpeed; break; + case 20: Gyro.AmpPerMin = GyroP.Str.AmpPerMin; break; + case 21: Gyro.AmpPerMax = GyroP.Str.AmpPerMax; break; case 22: Gyro.AmpPer = GyroP.Str.AmpPer; Gyro.Amp = GyroP.Str.AmpPer<<16; break; - case 23: Gyro.AmpMin = GyroP.Str.AmpMin; break; - case 24: Gyro.AmpTD = GyroP.Str.AmpTD; break; - case 25: Gyro.AmpPerDel = GyroP.Str.AmpPerDel; break; - case 34: Gyro.ModAmp = GyroP.Str.ModAmp; break; + case 23: Gyro.AmpMin = GyroP.Str.AmpMin; break; + case 24: Gyro.AmpTD = GyroP.Str.AmpTD; break; + case 25: Gyro.AmpPerDel = GyroP.Str.AmpPerDel; break; + case 34: Gyro.ModAmp = GyroP.Str.ModAmp; break; case 56: Gyro.Gain_Sin = GyroP.Str.Gain_Sin; Out_G_photo(Gyro.Gain_Sin, Gyro.Gain_Cos); break; case 57: Gyro.Gain_Cos = GyroP.Str.Gain_Cos; Out_G_photo(Gyro.Gain_Sin, Gyro.Gain_Cos); break; - case 60: Gyro.GLD_Serial = GyroP.Str.GLD_Serial; break; + case 60: Gyro.GLD_Serial = GyroP.Str.GLD_Serial; break; } NP=0; @@ -224,15 +230,24 @@ } void CMD_Maintenance(void) { - // Gyro.ModeOut=0; + Gyro.ModeOut=0; //Gyro.DropDelayGLD = DropDelayGLD_0;//задержка на выдачу 45 микросекунд для любого адреса ГЛД BuffTemp[0] = Gyro.SOC_Out; + BuffTemp[1] = Gyro.My_Addres; + BuffTemp[2] = Gyro.Firmware_Version; + /* sprintf((Time),"%d \r\n", Gyro.Firmware_Version); + WriteCon(Time);*/ BuffTemp[3] = Gyro.GLD_Serial; + BuffTemp[4]=0x00; + BuffTemp[5]=0x00; + Check(BuffTemp, 8); + /* sprintf((Time),"%d %d %d %d %d %d %d %d\r\n",BuffTemp[0], BuffTemp[1],BuffTemp[2],BuffTemp[3],BuffTemp[4],BuffTemp[5],BuffTemp[6],BuffTemp[7]); + WriteCon(Time);*/ WriteConN (BuffTemp,8); } @@ -252,7 +267,6 @@ BuffTemp[ 5] = 0x00000000; Check(BuffTemp, 8); WriteConN (BuffTemp,8); - } void CMD_Delta_Bins(void) @@ -273,15 +287,18 @@ WriteConN (BuffTemp,9); } void CMD_Delta_PS(void) -{ +{ int drob; Gyro.EXT_Latch=0; Gyro.Event_500Hz=0; unsigned int Temp; BuffTemp[ 0] = Gyro.SOC_Out; BuffTemp[ 1] = Gyro.My_Addres; - Temp = Gyro.CuruAngle; - Gyro.CuruAngle = 0; + Gyro.CuruAngle = Gyro.CuruAngle + OldCuruAngle; //(72 град/с) + + OldCuruAngle=Gyro.CuruAngle & 0x7; //сохраняем 5 бит для след измирений + Temp=Gyro.CuruAngle>>3; //приводим к форме вывода + Gyro.CuruAngle = 0; BuffTemp[ 2] =(Temp >> 8) & 0xff;//старший байт разности счетчиков BuffTemp[ 3] =(Temp >> 0) & 0xff;//младший байт разности счетчиков @@ -302,12 +319,11 @@ //HFO case 2: - Temp = 0;//HFO + Temp = Spi.DAC_A-0x7fff; BuffTemp[5] = (Temp >> 8) & 0xff; break; case 3: - Temp = 0;//HFO BuffTemp[5] = (Temp >> 0) & 0xff; break; @@ -315,7 +331,7 @@ //T_Vibro case 4: - Temp = (unsigned int)((7680000*16/(Gyro.Frq>>12))); + Temp = (unsigned int)((7675000*16/(Gyro.Frq>>12))); BuffTemp[5] = (Temp >> 8) & 0xff; break; @@ -327,7 +343,7 @@ //L_Vibro case 6: - Temp = (unsigned int)(((7680000*16/200) *Gyro.AmpPer /(Gyro.Frq>>12))); + Temp = Gyro.L_vibro>>1; BuffTemp[5] = (Temp >> 8) & 0xff; break; @@ -340,7 +356,7 @@ //Напряжение на регуляторе периметра case 8: - Temp = Spi.DAC_B /*- 0x7fff*/; + Temp = (Spi.DAC_B - 0x7fff); BuffTemp[5] = (Temp >> 8) & 0xff; break; @@ -436,47 +452,80 @@ void CMD_Rate2(void) { + unsigned int Temp; Gyro.Reper_Event=0; + BuffTemp[ 0] = Gyro.SOC_Out; BuffTemp[ 1] = Gyro.My_Addres; - BuffTemp[ 2] =(Gyro.CaunPlus >> 8) & 0xff;//старший байт счетчика +. - BuffTemp[ 3] =(Gyro.CaunPlus >> 0) & 0xff;//младший байт счетчика +. + Temp=Gyro.CaunPlusReper; + BuffTemp[ 2] =(Temp >> 8) & 0xff;//старший байт счетчика +. + BuffTemp[ 3] =(Temp >> 0) & 0xff;//младший байт счетчика +. - BuffTemp[ 4] =(Gyro.CaunMin >> 8) & 0xff;//старший байт счетчика -. - BuffTemp[ 5] =(Gyro.CaunMin >> 0) & 0xff;//младший байт счетчика -. + //сохраняем 5 бит для след измирений + + Temp= Gyro.CaunMinReper; + BuffTemp[ 4] =(Temp >> 8) & 0xff;//старший байт счетчика -. + BuffTemp[ 5] =(Temp >> 0) & 0xff;//младший байт счетчика -. Check(BuffTemp, 8); WriteConN (BuffTemp,8); } +void CMD_Rate3(void) +{ + Gyro.Rate3_Event=0; + BuffTemp[ 0] = Gyro.SOC_Out; + BuffTemp[ 1] = Gyro.My_Addres; + BuffTemp[ 2] = 0xcc;//старший байт счетчика +. + BuffTemp[ 3] = 0xcc;//младший байт счетчика +. + + BuffTemp[ 4] =0xBB;//старший байт счетчика -. + BuffTemp[ 5] =0xBB;//младший байт счетчика -. + + Check(BuffTemp, 8); + WriteConN (BuffTemp,8); +} + + void CMD_Rate(void) { Gyro.Rate1_Event=0; unsigned int Temp; int Temp1; - unsigned int OldCuruAngle; + float Temp2; BuffTemp[ 0] = Gyro.SOC_Out; //1 --старт данных BuffTemp[ 1] = Gyro.My_Addres; //2 --адрес отвечающего устройствва + 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/с) +*/ + //Temp=Gyro.CuruAngle; //(0,28/с) //8 байт + 4 байта от прошлых измерений - //Gyro.CuruAngle = Gyro.CuruAngle + OldCuruAngle; //(72 град/с) - /* OldCuruAngle=Gyro.CuruAngle & 0xff; //сохраняем 4 байта для след измирений - Temp=Gyro.CuruAngle>>8; */ //приводим к форме вывода - - /* //(9 град/с) + + 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; */ //приводим к форме вывода + Temp=Gyro.CuruAngle>>5; //приводим к форме вывода + /*sprintf((Time),"%d %d\r\n",Gyro.CuruAngle, Temp); + WriteCon(Time); */ + Gyro.CuruAngle = 0; BuffTemp[ 6] =(Temp >> 8) & 0xff;//старший байт разности счетчиков 7 --младший байт разности счетчиков BuffTemp[ 7] =(Temp >> 0) & 0xff;//младший байт разности счетчиков 8 --старший байт разности счетчиков @@ -486,34 +535,35 @@ BuffTemp[39] =(Temp >> 16) & 0xff;; //40 формат 22.10 BuffTemp[40] =(Temp >> 8) & 0xff;; //41 1бит знак BuffTemp[41] =(Temp >> 0) & 0xff;; //42 - - - - - + Temp = Gyro.F_ras; + //Gyro.F_ras=0; BuffTemp[ 8] = (Temp >> 8) & 0xff;//расщипление частота 9 --частота расщипления - BuffTemp[ 9] = (Temp >> 0) & 0xff;// 10 --частота расщипления + BuffTemp[ 9] = (Temp >> 0) & 0xff;// 10 --частота расщипления - Temp = 0xffff;//HFO - BuffTemp[10] = (Temp >> 8) & 0xff;//выход регулятора гвч; 11 --выход регулятора ГВЧ - BuffTemp[11] = (Temp >> 0) & 0xff; //12 --выход регулятора ГВЧ - - Temp =0xffff; + // ((temp*1.67)-0x5523); + 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; BuffTemp[12]=(Temp >> 8) & 0xff;//// HFO 13 --сигнал ошибки регулятора ГВЧ BuffTemp[13]=(Temp >> 0) & 0xff;//// 14 --сигнал ошибки регулятора ГВЧ - - - Temp = (unsigned int)((7675000*16/(Gyro.Frq>>12))); + + //Temp = (unsigned int)((7675000*16/(Gyro.Frq>>12))); + Temp = (unsigned int)(7675000/(Gyro.Frq>>16)); BuffTemp[14] = (Temp >> 8) & 0xff; //15 период вибропривода.(частота) T_Vibro BuffTemp[15] = (Temp >> 0) & 0xff; //16 период вибропривода. - Temp =0xff; - BuffTemp[16] = 0x00; //17 старший байт ФД регулятора периода вибропривода - BuffTemp[17] = 0x00; //18 - + Temp = Gyro.FrqPhaseEror<<2;//Spi.DAC_A-0x7fff; + BuffTemp[16] = (Temp >> 8) & 0xff; //17 старший байт ФД регулятора периода вибропривода + BuffTemp[17] = (Temp >> 0) & 0xff; + /*sprintf((Time),"%d %d\r\n",Gyro.FrqPhaseEror, Gyro.FrqPhaseEror<<2); + WriteCon(Time); */ //18 - Temp = Gyro.L_vibro>>1;//(unsigned int)(((7675000*16/200) * Gyro.AmpPer /(Gyro.Frq>>12))); + Temp =Gyro.L_vibro/*>>1*/;//(unsigned int)(((7675000*16/200) * Gyro.AmpPer /(Gyro.Frq>>12))); BuffTemp[18] = (Temp >> 8) & 0xff; //19 длительность импулься вибропривода(амплитуда) BuffTemp[19] = (Temp >> 0) & 0xff; //20 @@ -522,31 +572,34 @@ BuffTemp[20] = (Temp >> 8) & 0xff;//регулятор датчика угла поворота //21 старший байт регулятора датчика угла поворота BuffTemp[21] = (Temp >> 0) & 0xff; //22 - Temp = (Spi.DAC_B - 0x7fff); - BuffTemp[22] = (Temp >> 8) & 0xff; //23 Выход регулятора рабочего периметра - BuffTemp[23] = (Temp >> 0) & 0xff; //24 - - Temp =0x0; //Gyro.AD_Slow >> 16; + Temp1 =(Spi.DAC_B-0x7fff); + 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 ФД СРП BuffTemp[25] = (Temp >> 0) & 0xff;// //26 ФД СРП - - Temp = Gyro.AD_Slow >> 16; + + Temp =0;/* Gyro.AD_Slow >> 16*/; BuffTemp[26] = (Temp >> 8) & 0xff; //27 ADC 0 BuffTemp[27] = (Temp >> 0) & 0xff; //28 - Temp = Gyro.AD_Slow >> 16; + Temp =0; /*Gyro.AD_Slow >> 16*/; BuffTemp[28] = (Temp >> 8) & 0xff; //29 ADC 1 BuffTemp[29] = (Temp >> 0) & 0xff; //30 - Temp = (Gyro.In1 - 0x7fff); - BuffTemp[30] = (Temp >> 8) & 0xff;//in1//2 //31 ADC 2 - BuffTemp[31] = (Temp >> 0) & 0xff; //32 + Temp1 = ((Gyro.In1>>1)*0.800875)-0x3e0b; + BuffTemp[30] = (Temp1 >> 8) & 0xff;//in1//2 //31 ADC 2 + BuffTemp[31] = (Temp1 >> 0) & 0xff; //32 - Temp = (Gyro.In2 - 0x7fff); - BuffTemp[32] = (Temp >> 8) & 0xff; //33 ADC 3 - BuffTemp[33] = (Temp >> 0) & 0xff;//in2//3 //34 - - + Temp1 =((Gyro.In2>>1)*0.800875)-0x3e0b;// - 0x4FFF; + BuffTemp[32] = (Temp1 >> 8) & 0xff; //33 ADC 3 + BuffTemp[33] = (Temp1 >> 0) & 0xff;//in2//3 //34 + Temp = (Gyro.DeltaT); BuffTemp[34] = (Temp >> 8) & 0xff;//дельта //35 ADC 4 BuffTemp[35] = (Temp >> 0) & 0xff; //36 @@ -556,175 +609,179 @@ BuffTemp[36] =(Temp >> 8) & 0xff;//температура //37 ADC 5 BuffTemp[37] =(Temp >> 0) & 0xff;//ADC6 sesnsor 5 //38 - - Check(BuffTemp, 44); WriteConN (BuffTemp,44); + for(int i=0; i<45;i++) {BuffTemp[i]=0;} +} + +void CMD_M_Stymul() +{ + int temp,Consol=0,HFO,b4; + float Temp1; + temp=BuffTemp[3]; + + b4 = temp; + Consol = temp>>7; + HFO = temp&0x3;// // (номер (код) ЦАПа 0...3, HFO - 3dac, PLC - 0DAC + + temp = (((BuffTemp[4]<<8) | BuffTemp[5])&0xFFFF); + if(HFO) + { + Gyro.DacIn=temp; + Spi.DAC_A = (unsigned int)((temp+22544)*0.65); + } + else Spi.DAC_B = (unsigned int)temp; + sprintf((Time)," %d %d \r\n", Spi.DAC_B,temp); + WriteCon(Time); + + + /* + sprintf((Time),"%d %d %f \r\n", temp, Spi.DAC_A, (temp+10744)*0.79); + WriteCon(Time); + */ + + /*{ + DACF =(temp*K_DAC)+deltaDAC; + Spi.DAC_B =(unsigned int)(DACF) (unsigned int)(temp*K_DAC+deltaDAC); // K_DAC); + }*/ + if(Consol) + { + BuffTemp[0] = Gyro.SOC_Out; //DD + BuffTemp[1] = Gyro.My_Addres; //00 + BuffTemp[2] = Gyro.CMD_In; //D9 + BuffTemp[3] =0; + Check(BuffTemp, CRC_N); + WriteConN (BuffTemp,CRC_N); + } } + void CMD_M_vib() { - unsigned int temp1,temp2; + unsigned int temp1,temp2,anser; + // anser = BuffTemp[3]>>7; + + temp1 = (((BuffTemp[4]<<8) | BuffTemp[5])&0xFFFF); + Gyro.Frq = (122780000/temp1)<<12; + + temp2 = (((BuffTemp[6]<<8) | BuffTemp[7])&0xFFFF); + Gyro.AmpPer = ((((((Gyro.Frq>>12)*200)/16)*temp2)/7675000)/2); - temp1 =((BuffTemp[4]<<8) | BuffTemp[5]); - temp1=temp1&0xFFFF; - Gyro.Frq=(122780000/temp1)<<12; - - temp2 =((BuffTemp[6]<<8) | BuffTemp[7]); - temp2=temp2&0xFFFF; - - - Gyro.AmpPer=((((((Gyro.Frq>>12)*200)/16)*temp2)/7675000)/2); + // if(anser) + // { + BuffTemp[0] = Gyro.SOC_Out; + BuffTemp[1] = Gyro.My_Addres; + BuffTemp[2] = Gyro.CMD_In; + BuffTemp[3] = 0x0; + BuffTemp[4] = 0x0; + Check(BuffTemp, CRC_N); + WriteConN (BuffTemp,CRC_N); + // } } void CMD_M_Control_D8()///установка\сброс регистров управления { - unsigned int bit,Pa; - unsigned int SR,V,Bit_num; - SR=0; - V=0; - A=0; - Bit_num=0; + unsigned int bit=0,Pa=0; + unsigned int SR=0,V=0,Bit_num=0,A=0; + Pa = BuffTemp[3]; + SR = Pa >> 7; + V = (Pa>>5)&0x3; + A = (Pa>>4)&0x1; + Bit_num = Pa & 0xf; + switch (SR) + { + case 0: + switch (A) + { + case 0: + switch (Bit_num) + { + case 0x06: FrqOFF break; + case 0x05: AVibOFF break; + case 0x01: HFOOFF break; + case 0x03: PlcOFF break; + } + break; + case 1: + switch (Bit_num) + { + case 0x00: Gyro.RgConB &= ~(1<<0); break; + case 0x01: Gyro.RgConB &= ~(1<<1); break; + case 0x02: Gyro.RgConB &= ~(1<<2); break; + } + break; + } + + + break; + case 1: + switch (A) + { + case 0: + switch (Bit_num) + { + case 0x06: FrqON break; + case 0x05: AVibON break; + case 0x01: HFOON break; + case 0x03: PlcON break; + } + break; + case 1: + switch (Bit_num) + { + case 0x00: Gyro.RgConB |= (1<<0); break; + case 0x01: Gyro.RgConB |= (1<<1); break; + case 0x02: Gyro.RgConB |= (1<<2); break; + } + break; + } + break; + } BuffTemp[0] = Gyro.SOC_Out; //DD BuffTemp[1] = Gyro.My_Addres; //00 BuffTemp[2] = Gyro.CMD_In; //D8 - // Gyro.CMD_In = BuffTemp[2]; - Pa = BuffTemp[3]; - SR = Pa >> 0x7; - V = Pa >> 0x5; - V = V & 0x3; - A = Pa >> 0x4; - A = A & 0x1; - Bit_num = Pa & 0xf; - if(A) - { - if(SR) - { - switch (Bit_num) - { - case 0x00: Gyro.RgConB &= ~ 1<<0; break; - case 0x01: Gyro.RgConB &= ~ 1<<1; break; - case 0x02: Gyro.RgConB &= ~ 1<<2; break; - } - } - else - { - - switch (Bit_num) - { - - case 0x00: Gyro.RgConB = 0xfffe; break; - case 0x01: Gyro.RgConB |= 1<<1; break; - case 0x02: Gyro.RgConB |= 1<<2; break; - } - } - } - else - { - if(SR) - { - switch (Bit_num) - { - case 0x06: FrqON break; - case 0x05: AVibON break; - case 0x01: HFOON break; - case 0x03: PlcON break; - } - } - else - { - switch (Bit_num) - { - case 0x06: FrqOFF break; - case 0x05: AVibOFF break; - case 0x01: HFOOFF break; - case 0x03: PlcOFF break; - } - } - } + switch (A) + { + case 0: + BuffTemp[ 4] =(Gyro.RgConA >> 8) & 0xff; + BuffTemp[ 5] =(Gyro.RgConA >> 0) & 0xff; + break; + + case 1: + BuffTemp[ 4] =(Gyro.RgConB >> 8) & 0xff; + BuffTemp[ 5] =(Gyro.RgConB >> 0) & 0xff; + break; + } + Check(BuffTemp, CRC_N); + WriteConN (BuffTemp,CRC_N); +} -} -void D8_Answer() -{ - - - - BuffTemp[0] = Gyro.SOC_Out; //DD - - BuffTemp[1] = Gyro.My_Addres; //00 - - BuffTemp[2] = 0xD8; //D8 - - BuffTemp[3] =A<<4; - - if(A) - { - BuffTemp[ 4] =(Gyro.RgConB >> 8) & 0xff; - BuffTemp[ 5] =(Gyro.RgConB >> 0) & 0xff; - - } - else - { - BuffTemp[ 4] =(Gyro.RgConA >> 8) & 0xff; - BuffTemp[ 5] =(Gyro.RgConA >> 0) & 0xff; - } - Check(BuffTemp, CRC_N); - WriteConN (BuffTemp,CRC_N); - -} void CMD_M_Control_D9()///чтение регистров управления { - int bit,NReg; + int bit,NReg,param=0; BuffTemp[0] = Gyro.SOC_Out; //DD BuffTemp[1] = Gyro.My_Addres; //00 BuffTemp[2] = Gyro.CMD_In; //D9 - if ((Param1 & 0x10) == 0) { - BuffTemp[3]=0<<4; - BuffTemp[4] = (Gyro.RgConA>>8 )& 0xff; - BuffTemp[5] = Gyro.RgConA & 0xff; - } else { + param = BuffTemp[3]; + if (param) + { BuffTemp[3]=1<<4; BuffTemp[4] = (Gyro.RgConB>>8 ) & 0xff; BuffTemp[5] = Gyro.RgConB & 0xff; } + else + { + BuffTemp[3]=0<<4; + BuffTemp[4] = (Gyro.RgConA>>8 )& 0xff; + BuffTemp[5] = Gyro.RgConA & 0xff; + } Check(BuffTemp, CRC_N); WriteConN (BuffTemp,CRC_N); } // (номер (код) ЦАПа 0...3, старший байт требуемого ЦАПа, младший байт треб ЦАПа) -void CMD_M_Stymul_Answer() -{ SA=0; - BuffTemp[ 0] =0xdd; - BuffTemp[ 1] = 0x00; - BuffTemp[ 2] = 0x0A; - BuffTemp[ 3] =0; - Check(BuffTemp, CRC_N); - WriteConN (BuffTemp,CRC_N); -} -void CMD_M_Stymul() -{ - int temp; - int HFO; - int b4; - temp=BuffTemp[3]; - b4=temp; - Consol = temp>>7; - if(Consol)SA=1; - HFO = temp&0x3;// // (номер (код) ЦАПа 0...3, HFO - 3dac, PLC - 0DAC - temp =((BuffTemp[4]<<8) | BuffTemp[5]); - // temp=0; - temp=temp&0xFFFF; - - if(HFO) - { - Spi.DAC_A=(unsigned int)temp; - } - else{ - DACF =/*(*/temp/*K_DAC)+deltaDAC;*/; - Spi.DAC_B =(unsigned int)(DACF) /*(unsigned int)(temp*K_DAC+deltaDAC)*/; // K_DAC); - } - -} + + void GLDStartDischarg(void) { TimeDischarg=0; @@ -755,9 +812,27 @@ //Gyro.flagGph_W=3; Out_G_photo(BuffTemp[4],BuffTemp[5]); - + BuffTemp[0] = Gyro.SOC_Out; //DD + BuffTemp[1] = Gyro.My_Addres; //00 + BuffTemp[2] = Gyro.CMD_In; //D9 + BuffTemp[3] = 0; + Check(BuffTemp, CRC_N); + WriteConN (BuffTemp,CRC_N); } - +void DeviceMode() +{ + int TempMod=1; + BuffTemp[0] = Gyro.SOC_Out; //DD + BuffTemp[1] = Gyro.My_Addres; //00 + BuffTemp[2] = Gyro.CMD_In; //D9 + TempMod = BuffTemp[3] & 0xf; + Gyro.RgConMod = TempMod; + BuffTemp[3]=Gyro.RgConMod & 0xff; + BuffTemp[4]=0; + BuffTemp[5]=0; + Check(BuffTemp, CRC_N); + WriteConN (BuffTemp,CRC_N); +} unsigned int Check(char *c, unsigned int Count) { @@ -786,8 +861,6 @@ c[Count-2]=(CRC>>8)&0xFF; c[Count-1]=(CRC>>0)&0xFF; - - return temp; } @@ -802,14 +875,15 @@ case 0x0F: lengf=6; CRC_N=8; break; //Delta_Bins case 0xA0: lengf=6; CRC_N=8; break; //Delta_PS case 0xDD: lengf=6; CRC_N=44; break; //m_rate - case 0x0A: lengf=8; CRC_N=6; break; //m_stymul + case 0x0A: lengf=8; CRC_N=6; break; //m_stymul case 0xE9: lengf=6; CRC_N=8; break; //DeviceMode case 0xE8: lengf=6; CRC_N=8; break; //DeviceMode case 0xA5: lengf=6; CRC_N=8; break; //DeviceMode - case 0xD8: lengf=6; CRC_N=6; break; //m_control + case 0xD8: lengf=6; CRC_N=8; break; //m_control case 0xD9: lengf=6; CRC_N=8; break; //m_control - case 0xE4: lengf=8; break; //M_VIB_W - case 0xE6: lengf=8; break; //M_Gph_W + case 0xE4: lengf=8; CRC_N=6; break; //M_VIB_W + case 0xE6: lengf=8; CRC_N=6; break; //M_Gph_W + } return lengf; } @@ -821,17 +895,21 @@ // чтение данных из консоли if(CountBuFFIn==1) { // если есть первый байт - if (BuffTemp[0] != SOC_In) { + if (BuffTemp[0] != SOC_In) + { ReadCon1(BuffTemp); Gyro.RsErrLine += 0x100; - BuffTemp[99]=Gyro.RsErrLine; - } + //BuffTemp[99]=Gyro.RsErrLine; + ReadCon1(BuffTemp); + } } else if(CountBuFFIn==2) //если второй байт { // широковещаительный - if (BuffTemp[1] != Gyro.My_Addres /*|| BuffTemp[1] !=0x1f*/) { + if (BuffTemp[1] != Gyro.My_Addres /*|| BuffTemp[1] !=0x1f*/) + { ReadCon1(BuffTemp); Gyro.RsErrLine += 0x1; + ReadCon1(BuffTemp); } } else if(CountBuFFIn==3) // если третий байт @@ -867,26 +945,28 @@ { ReadCon1(BuffTemp); - if(SA)CMD_M_Stymul_Answer(); + //if(SA)CMD_M_Stymul_Answer(); // if(d8_anser)D8_Answer(); switch(Gyro.CMD_In) { - case 0x99: Gyro.ModeOut=0; CMD_Maintenance(); break; - case 0xD8: CMD_M_Control_D8(); D8_Answer(); break; + case 0x99: /*Gyro.ModeOut=0;*/CMD_Maintenance(); break; + case 0xD8: CMD_M_Control_D8(); break; case 0xE9: CMD_M_Param_R(); break; //чтение параметров case 0xE8: CMD_M_Param_W(); break; //запись параметра case 0xDA: GLDStartDischarg(); break; case 0xD9: CMD_M_Control_D9(); break; case 0x0A: CMD_M_Stymul(); break; - case 0xDD: TempParam=(BuffTemp[3]) & 0x9f; //Rate + case 0xDD: TempParam=(BuffTemp[3]) & 0x9f; //Rate switch(TempParam) { - case Rate1 : CMD_Rate(); break; + case Rate1 : CMD_Rate(); break; case Rate2 : CMD_Rate2(); break; + case Rate3 : CMD_Rate3(); break; case PRate1 : Gyro.ModeOut=1; break; case PRate2 : Gyro.ModeOut=2; break; + case PRate3 : Gyro.ModeOut=8; break; } break; //DropDelay(); выставка задержки для мультидропа сбрасывается в команде CMD_Maintenance() на () микросекунд; - case 0xA0: DropDelay(); TempParam=(BuffTemp[3]) & 0x90; //Delta_PS + case 0xA0: /*DropDelay();*/ TempParam=(BuffTemp[3]) & 0x90; //Delta_PS switch(TempParam) { case Delta_500 : CMD_Delta_PS(); break; case Delta_EXT : CMD_Delta_PS(); break; @@ -909,6 +989,7 @@ } break; case 0xE4: CMD_M_vib(); break; + case 0xA5: DeviceMode(); break; case 0xE6: Gph_W(); break; Gyro.RsErrLine = 0; } @@ -932,16 +1013,60 @@ /////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// + + + + + if (Time[0] == 'f') { // выдача технологическая + Gyro.ModAmp += 1; + sprintf((Time),"%d \r\n", Gyro.ModAmp); + WriteCon(Time); + } + if (Time[0] == 'd') { // выдача технологическая + Gyro.ModAmp -= 1; + sprintf((Time),"%d \r\n", Gyro.ModAmp); + WriteCon(Time); + } if (Time[0] == 'V') { // выдача технологическая - Spi.DAC_B += 200; - /* sprintf(Time,"%d\r\n", Spi.DAC_B); - WriteCon(Time);*/ - } + Spi.DAC_B += 1000; + } if (Time[0] == 'v') { // выдача технологическая - Spi.DAC_B -= 200; - /* sprintf(Time,"%d\r\n", Spi.DAC_B); - WriteCon(Time);*/ - } + Spi.DAC_B -= 1000; + } + if (Time[0] == 'C') { // выдача технологическая + Spi.DAC_B += 2000; + } + if (Time[0] == 'c') { // выдача технологическая + Spi.DAC_B -= 2000; + } + if (Time[0] == 'X') { // выдача технологическая + Spi.DAC_B += 3000; + } + if (Time[0] == 'x') { // выдача технологическая + Spi.DAC_B -= 3000; + } + if (Time[0] == 'p') { // выдача технологическая + PlcOFF //Gyro.RgConA&0x8=0; + Gyro.LogMod=1; + MODFlag=1; + Spi.DAC_B = 16000; + } + if (Time[0] == 'o') { // выдача технологическая + PlcON + Gyro.LogMod=0; + MODFlag=2; + Spi.DAC_B = 32000; + } + + + if (Time[0] == 'u') + { // выдача технологическая + MODFlag=0; //Mod vibro Hz + } + if (Time[0] == 'y') + { //Mod 250 Hz PLCRegul250(); + MODFlag=2; + } if (Time[0] == 'l') { // выдача технологическая Gyro.My_Addres = GyroP.Str.My_Addres; // Gyro.My_Addres = 0;