www.pudn.com > DDS485.rar > addparse.c


#include  
#include  
#include  
 
//------------------------------ *** - 命令解析 - *** ------------------------------// 
void AvailabilityAddParse(void) 
{ 
    unsigned char i; 
    NullityFg=0;  
    switch(InceptBuf[8]) 
    { 
         case 0x01 : 
                    DataSaveSt=0; 
                    switch(InceptBuf[11]) 
                    { 
                         case 0x90: 
                                    switch(InceptBuf[10]) 
                                    { 
                                        case 0x10:  //读当前有功总电量 --- 指令通过 68 00 00 00 00 00 00 68 01 02 43 C3 D9 16                                                  
                                                    //HwTxd=0; 
                                                    CmdPick(0,0,ShowDataBuf,4); 
                                                    DataSend();                                                     
                                        break; 
                                        case 0x1F:  //读当前有功总电量 --- 指令通过 68 00 00 00 00 00 00 68 01 02 43 C3 D9 16                                                  
                                                    //HwTxd=0; 
                                                    CmdPick(0,0,ShowDataBuf,4); 
                                                    DataSend();                                                     
                                        break; 
                                        default: 
                                                    NullityFg=1; 
                                                    DataSend();                
                                        break; 
                                    } 
                         case 0xC0: 
                                    switch(InceptBuf[10]) 
                                    {      
                                        case 0x30:  //读电表脉冲常数 --- 指令通过 
                                                    //68 00 00 00 00 00 00 68 01 02 63 c3 29 16 
                                                    CmdPick(0xa0,0x05,0,3); 
                                                    DataSend(); 
                                        break;   
                                        case 0x32:  //读电表地址 
                                                    //68 AA AA AA AA AA AA 68 01 02 65 c3 27 16 --- 指令通过 
                                                    CmdPick(0,0,MeterAdd,6); 
                                                    //CmdPick(0xa0,0x10,0,6); 
                                                    DataSend();                                                  
                                        break; 
                                        default: 
                                                    NullityFg=1; 
                                                    DataSend(); 
                                        break; 
                                    } 
                         break; 
                         default: 
                                 NullityFg=1; 
                                 DataSend();                  
                         break; 
                          
                    } 
         break; 
         case 0x04:  
                    if(cmdwr)      
                    {  
                         DataSaveSt=1; 
                         switch(InceptBuf[11]) 
                         { 
                              case  0xc0:  
                                          switch(InceptBuf[10]) 
                                          { 
                                                case  0x32: ////更改表通讯地址  --- 指令通过 
                                                            //68 00 00 00 00 00 00 68 04 0C 65 F3 34 89 67 45 34 33 33 33 33 33 D4 16 
                                                            //IicMByteWrite(0xa0,0x10,&InceptBuf[16],6); 
                                                            RamCopy(MeterAdd,&InceptBuf[16],6); 
                                                            CmdSave(0xa0,0x10,16,6); 
                                                            //IicMByteRead(0xa0,0x10,MeterAdd,6); 
                                                break; 
                                                default: 
                                                            NullityFg=1; 
                                                            DataSend(); 
                                                break; 
                                                 
                                          } 
                              break; 
                              case  0xc1:  
                                          switch(InceptBuf[10]) 
                                          { 
                                                case  0x19: //底数设置 
                                                            //68 00 00 00 00 00 00 68 04 0A 4C F4 34 89 67 45 33 33 33 33 53 16           
                                                            CmdSave(0xa0,0x00,16,4); 
                                                            //RamCopy(iicEData,&InceptBuf[16],4); 
                                                            //IicMByteWrite(0xa0,0x00,&InceptBuf[16],4); 
                                                            for(i=0;i<4;i++) 
                                                            { 
                                                                iicEData[i]=rbyteiic(0xa0,i); 
                                                                EData[i]=BcdToHex(iicEData[i]); 
                                                            } 
                                                            inpulse=0; 
                                                            LedFull(); 
                                                break;  
                                                case  0x11: //初始化 
                                                            //68 00 00 00 00 00 00 68 04 06 44 F4 34 89 67 45 7B 16  
                                                            for(i=0;i<5;i++) 
                                                            { 
                                                                 wbyteiic(0xa0,i,0x00); 
                                                            } 
                                                             for(i=10;i<16;i++) 
                                                             { 
                                                                 wbyteiic(0xa0,i,0x00); 
                                                             } 
                                                             wbyteiic(0xa0,0x20,0x56); 
                                                             wbyteiic(0xa0,0x21,0x34); 
                                                             wbyteiic(0xa0,0x22,0x12); 
                                                             wbyteiic(0xa0,0x05,0x16); 
                                                             wbyteiic(0xa0,0x06,0x00); 
                                                             InceptBuf[9]=0x02; 
                                                             DataSend(); 
                                                             LedFull(); 
                                                break; 
                                                default: 
                                                            NullityFg=1; 
                                                            DataSend();             
                                                break;               
                                          } 
                              break; 
                              default: 
                                      NullityFg=1; 
                                      DataSend(); 
                              break; 
                         }  
                    }  
                    else 
                    { 
                        NullityFg=1; 
                        InceptBuf[9]=0x01; 
                        InceptBuf[10]=0x00; 
                        InceptBuf[10]=InceptBuf[10]|0x01; 
                        DataSend(); 
                    } 
         break; 
         case 0x0f:   
                   if(cmdwr)    
                   {    
                         DataSaveSt=1; 
                         AdBit=1; 
                         //修改编程密码  --- 指令通过 
      				  	 //68 01 00 00 00 00 00 68 0F 08 34 89 67 45 34 89 67 45 BA 16 
                         if(InceptBuf[14]==0x01|InceptBuf[14]==0x00) 
      					 { 
      				  	  	  Answer=1; 
      				  	  	  CmdSave(0xa0,0x20,15,3); 
      				  	  	  Answer=0; 
      					 } 
      		             else 
                         { 
                                  NullityFg=1; 
                                  DataSend(); 
                         } 
                   } 
                   else 
                   { 
                        NullityFg=1; 
                        InceptBuf[9]=0x01; 
                        InceptBuf[10]=0x00; 
                        InceptBuf[10]=InceptBuf[10]|0x01; 
                        DataSend(); 
                   } 
         break; 
         default: 
                     NullityFg=1; 
                     DataSend(); 
         break; 
 
    }  
 
} 
void BroadcastAddParse(void) 
{    
    AdBit=1; 
    switch(InceptBuf[8]) 
    { 
        case 0x01: //广播读地址  --- 指令通过 
                   //68 99 99 99 99 99 99 68 01 02 65 F3 C1 16 
                   if(InceptBuf[10]==0x32) 
                   { 
                        if(InceptBuf[11]==0xc0) 
                        { 
                            CmdPick(0,0,MeterAdd,6); 
                        } 
                   } 
                  DataSend(); 
        break; 
        default: 
                     NullityFg=1; 
                     DataSend(); 
        break; 
    } 
}