⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fdj_hb_p103.c.bak

📁 人机界面程序
💻 BAK
📖 第 1 页 / 共 5 页
字号:
    }
}
  

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++
//       接收处理
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++
void   Comm_RecvProcess(void)
{
  unsigned char temp,i;
  
  switch(comm_buf_flag->synchro)
    {
      case    0:
 
              while( comm_buf_flag->com_103->RecvSet != comm_buf_flag->com_103->RecvGet )
               {
                 if(comm_buf_flag->com_103->RecvBuf[comm_buf_flag->com_103->RecvGet]==0x10)
                   {
                      comm_buf_flag->synchro=1;
                      comm_buf_flag->Type = 0;
                      break;  
                   }
                 else if(comm_buf_flag->com_103->RecvBuf[comm_buf_flag->com_103->RecvGet]==0x68)
                   {
                      comm_buf_flag->synchro=1;
                      comm_buf_flag->Type = 1;
                      break;  
                   }
                 else
                   {
                      comm_buf_flag->com_103->RecvGet++;
	                  if(comm_buf_flag->com_103->RecvGet >= RECVNUM) comm_buf_flag->com_103->RecvGet = 0; 
                      continue;
                   }
                 }
               break;
       case   1:
   
              while( comm_buf_flag->com_103->RecvSet != comm_buf_flag->com_103->RecvGet )
                {
                   comm_buf_flag->RecvBuf[comm_buf_flag->ReceivePoint] = comm_buf_flag->com_103->RecvBuf[comm_buf_flag->com_103->RecvGet];
                   comm_buf_flag->ReceivePoint++;
	               comm_buf_flag->com_103->RecvGet++;
        	       if(comm_buf_flag->com_103->RecvGet >= RECVNUM) comm_buf_flag->com_103->RecvGet = 0; 
                   if(comm_buf_flag->Type == 0)
                     {
                        if(comm_buf_flag->ReceivePoint>=5)  
                         {
                            temp = comm_buf_flag->RecvBuf[1]+comm_buf_flag->RecvBuf[2];
                            
                   	    if ((comm_buf_flag->RecvBuf[2]==comm_buf_flag->DeviceAddr)||(comm_buf_flag->RecvBuf[2]==0xFF))
                   	       
                              {
                                 comm_buf_flag->FrameRecv = 0x15;
                                 comm_buf_flag->Type = 0xff;
                                 comm_buf_flag->synchro = 0; 
                                 comm_buf_flag->ReceivePoint = 0;
                               }
                            else
                               {
                                 comm_buf_flag->FrameRecv = 0;
                                 comm_buf_flag->Type = 0xff;
                                 comm_buf_flag->synchro = 0; 
                                 comm_buf_flag->ReceivePoint = 0;
                               }
                          
                           break;
                         }
                     }
                   else if(comm_buf_flag->Type == 1)
                     {
                       if((comm_buf_flag->ReceivePoint>=4))
                         {
                           if((comm_buf_flag->RecvBuf[0]!=0x68)||(comm_buf_flag->RecvBuf[3]!=0x68)||
                              (comm_buf_flag->RecvBuf[1]!=comm_buf_flag->RecvBuf[2]))
                              {
                                 comm_buf_flag->Type = 0xff;
                                 comm_buf_flag->synchro = 0; 
                                 comm_buf_flag->ReceivePoint = 0;
                                 break;
                              }
                           if(comm_buf_flag->ReceivePoint >= (comm_buf_flag->RecvBuf[1]+6))
                              {
                               temp = 0;
                               for(i=0;i< comm_buf_flag->RecvBuf[1];i++)
                                temp = temp + comm_buf_flag->RecvBuf[4+i];
                                
                   	       if (((comm_buf_flag->RecvBuf[5]==comm_buf_flag->DeviceAddr)||(comm_buf_flag->RecvBuf[5]==0xFF))
                                   &&(temp==(comm_buf_flag->RecvBuf[comm_buf_flag->RecvBuf[1]+4])))
                                 {
	                           comm_buf_flag->FrameRecv = 0x1A;
                                   comm_buf_flag->Type = 0xff;
                                   comm_buf_flag->synchro = 0; 
                                   comm_buf_flag->ReceivePoint = 0;
                                 }
                               else
                                 {
                                   comm_buf_flag->FrameRecv = 0x0;
                                   comm_buf_flag->Type = 0xff;
                                   comm_buf_flag->synchro = 0; 
                                   comm_buf_flag->ReceivePoint = 0;
                                 }
                                 break;
                              }
                         }
                     }
                   else
                     {
                        comm_buf_flag->Type = 0xff;
                        comm_buf_flag->synchro = 0; 
                        comm_buf_flag->ReceivePoint = 0;
                        break;
                     }
                 }
              break;   
      default :
              comm_buf_flag->Type = 0xff;
              comm_buf_flag->synchro = 0; 
              comm_buf_flag->ReceivePoint = 0;
              break;
    }
} 

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++
//     通信时间间隔计数
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++
void   CommDspTimeUpdate(void)
{
    comm_buf_flag->Timing++;
/*    comm_buf_flag->Timer_CallAll++;
    if( comm_buf_flag->Timer_CallAll >= 900000 )
      {
        comm_buf_flag->Flag_CallAll = 0x01;     //上电允许总召唤
        Order_Array.Order[ Order_Array.Set ] = 0x0100;
        Order_Array.Set = (Order_Array.Set+1)%10;
        comm_buf_flag->Timer_CallAll = 0;       //总召唤计时器回零
      }
 */  
    if( ComDsp_buf_flag.CommError!=0x11 )
     {
        comm_buf_flag->Timer_CheckTime++;
        if( comm_buf_flag->Timer_CheckTime >= 6000 ) //_CheckTime
         {
           comm_buf_flag->Flag_CheckTime = 0x01;     //置对时标志
           Order_Array.Order[ Order_Array.Set ] = 0x0200;
           Order_Array.Set = (Order_Array.Set+1)%10;

           comm_buf_flag->Timer_CheckTime = 0;       //计数器归零
         }
      }
    Command_Timer_Update();
                                              
}

//---------------------------------------------------------------------
//        遥控命令解析
//---------------------------------------------------------------------
void   YK_Command_Style(unsigned int Addr,unsigned int Style,unsigned int Seq)
{
    Output_Test_YK.YkDataNo1 = Addr;
    if(Style == 0x11)   //合
      {
         if(Seq == 0x55)         Output_Test_YK.YkCommand = 0x82; //预合
         else if(Seq == 0xAA)    Output_Test_YK.YkCommand = 0x02; //合执行
         else if(Seq == 0xcc)    Output_Test_YK.YkCommand = 0xC2; //合命令撤销
         else                    Output_Test_YK.YkCommand = 0x00; //未知
      }
    else if(Style == 0x22)   //分
      {
         if(Seq == 0x55)         Output_Test_YK.YkCommand = 0x81; //预分
         else if(Seq == 0xAA)    Output_Test_YK.YkCommand = 0x01; //分执行
         else if(Seq == 0xcc)    Output_Test_YK.YkCommand = 0xC1; //分命令撤销
         else                    Output_Test_YK.YkCommand = 0x00; //未知
      }

}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++
//        通信命令处理
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++

int   MMI_DSP_Instruction(unsigned int Command,unsigned int per1,unsigned int per2)
{
   int Res;
   
   Res = 1;
   switch( Command )
    {
     	case  0x0000:  //复位CU/FCB
                   Order_Array.Order[ Order_Array.Set ] = 0x0000;
                   Order_Array.Set = (Order_Array.Set+1)%10;
     	           break;
     	case  0x0100:  //总召唤
                   Order_Array.Order[ Order_Array.Set ] = 0x0100;
                   Order_Array.Set = (Order_Array.Set+1)%10;
     	           break;
     	case  0x0200:  //对时
                   Order_Array.Order[ Order_Array.Set ] = 0x0200;
                   Order_Array.Set = (Order_Array.Set+1)%10;
     	           break;
     	case  0x0210:  //修改时间
                   Order_Array.Order[ Order_Array.Set ] = 0x0210;
                   Order_Array.Set = (Order_Array.Set+1)%10;
                   command_statue.Check_Time_Flag = 0xAA;
                   command_statue.Check_Time_Count = 0;
     	           break;
     	case  0x0500:  //读系统参数
                   Order_Array.Order[ Order_Array.Set ] = 0x0500;
                   Order_Array.Set = (Order_Array.Set+1)%10;
                   command_statue.Config_Operation_Flag = 0xaa;
                   command_statue.Config_Operation_Count = 0;
     	           break;
        case  0x0600:   //读定值
                   comm_buf_flag->DzAreaNo = per1 + 0x17;
                   Order_Array.Order[ Order_Array.Set ] = 0x0600;
                   Order_Array.Set = (Order_Array.Set+1)%10;
                   command_statue.Setting_Operation_Flag = 0xaa;
                   command_statue.Setting_Operation_Count = 0;
                   break;
        case  0x0700:   //自动调整通道系数
                   Channel_Ration_Flag.Command = per1&0xff;
                   Order_Array.Order[ Order_Array.Set ] = 0x0700;
                   Order_Array.Set = (Order_Array.Set+1)%10;
                   command_statue.Channel_Ration_Flag = 0xaa;
                   command_statue.Channel_Ration_Count = 0x00;
                   break;
        case  0x0800:   //定值预修改
                   comm_buf_flag->DzSelect = 0x00;
                   comm_buf_flag->DzAreaNo = per1+0x17;
                   Order_Array.Order[ Order_Array.Set ] = 0x0800;
                   Order_Array.Set = (Order_Array.Set+1)%10;
                   command_statue.Setting_Operation_Flag = 0xaa;
                   command_statue.Setting_Operation_Count = 0;
                   break;
        case  0x0900:   //定值修改执行
                   if(comm_buf_flag->DzSelect == 0x11)
                    {
                      comm_buf_flag->DzAreaNo = per1+0x17;
                      Order_Array.Order[ Order_Array.Set ] = 0x0900;
                      Order_Array.Set = (Order_Array.Set+1)%10;

                      command_statue.Setting_Operation_Flag = 0xaa;
                      command_statue.Setting_Operation_Count = 0;
                    }
                   else
                    Res = 0;
                   break;
        case  0x0a00:   //定值区号切换选择
                   Setting_Switch.DzSelect = 0x00;
                   Setting_Switch.DzCommand = 0x82;
                   Setting_Switch.DzTarget = per1+0x17;
                   Order_Array.Order[ Order_Array.Set ] = 0x0a00;
                   Order_Array.Set = (Order_Array.Set+1)%10;
                   command_statue.Setting_Operation_Flag = 0xaa;
                   command_statue.Setting_Operation_Count = 0;
                   break;
        case  0x0a01:   //定值区号切换执行
                   if(Setting_Switch.DzSelect == 0x11)
                     {
                        Setting_Switch.DzCommand = 0x02;
                        Setting_Switch.DzTarget = per1+0x17;
                        Order_Array.Order[ Order_Array.Set ] = 0x0a00;
                        Order_Array.Set = (Order_Array.Set+1)%10;

                        command_statue.Setting_Operation_Flag = 0xaa;
                        command_statue.Setting_Operation_Count = 0;
                     }
                   else
                     Res = 0;
                   break;
        case  0x0a02:   //定值区号切换撤销
                   if(Setting_Switch.DzSelect == 0x11)
                     {
                       Setting_Switch.DzCommand = 0xc2;
                       Setting_Switch.DzTarget = per1+0x17;
                       Order_Array.Order[ Order_Array.Set ] = 0x0a00;
                       Order_Array.Set = (Order_Array.Set+1)%10;

                       command_statue.Setting_Operation_Flag = 0xaa;
                       command_statue.Setting_Operation_Count = 0;
                     }
                   else
                     Res = 0;
                   break;
        case  0x0b00:   //定值区复制选择
                   Setting_Copy.DzSelect = 0x00;
                   Setting_Copy.DzSource = per2+0x17;
                   Setting_Copy.DzTarget = per1+0x17;
                   Setting_Copy.DzCommand = 0x82;
                   Order_Array.Order[ Order_Array.Set ] = 0x0b00;
                   Order_Array.Set = (Order_Array.Set+1)%10;
                   command_statue.Setting_Operation_Flag = 0xaa;
                   command_statue.Setting_Operation_Count = 0;
                   break;
        case  0x0b01:   //定值区复制执行
                   if(Setting_Copy.DzSelect == 0x11)
                     {
                       Setting_Copy.DzSource = per2+0x17;
                       Setting_Copy.DzTarget = per1+0x17;
                       Setting_Copy.DzCommand = 0x02;
                       Order_Array.Order[ Order_Array.Set ] = 0x0b00;
                       Order_Array.Set = (Order_Array.Set+1)%10;

                       command_statue.Setting_Operation_Flag = 0xaa;
                       command_statue.Setting_Operation_Count = 0;
                     }
                   else
                     Res = 0;
                   break;
        case  0x0b02:   //定值区复制撤销
                   if(Setting_Copy.DzSelect == 0x11)
                     {
                       Setting_Copy.DzSource = per2+0x17;
                       Setting_Copy.DzTarget = per1+0x17;
                       Setting_Copy.DzCommand = 0xc2;
                       Order_Array.Order[ Order_Array.Set ] = 0x0b00;
                       Order_Array.Set = (Order_Array.Set+1)%10;

                       command_statue.Setting_Operation_Flag = 0xaa;
                       command_statue.Setting_Operation_Count = 0;
                     }
                   else
                     Res = 0;
                   break;
        case  0x0c00:   //系统配置修改选择
                   Order_Array.Order[ Order_Array.Set ] = 0x0c00;
                   Order_Array.Set = (Order_Array.Set+1)%10;
                   command_statue.Config_Operation_Flag = 0xaa;
                   command_statue.Config_Operation_Count = 0;
                   break;
        case  0x0d00:   //系统配置修改执行
                   Order_Array.Order[ Order_Array.Set ] = 0x0d00;
                   Order_Array.Set = (Order_Array.Set+1)%10;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -