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

📄 comm.c

📁 温湿度变送器的下位机代码
💻 C
📖 第 1 页 / 共 2 页
字号:
            CnvtFlt();      
            unionFlt.Flt = envionment_variables.Max_humidity; 
            CnvtFlt(); 
            //发送温度零点
            unionFlt.Flt = envionment_variables.Zero_temperature; 
            CnvtFlt(); 
            //发送湿度零点
            unionFlt.Flt = envionment_variables.Zero_humidity; 
            CnvtFlt(); 
            
            //发送温度电流输出类型
            unionFlt.Flt = (float)envionment_variables.TC_CurrentType; 
            CnvtFlt(); 
            //发送湿度电流输出类型
            unionFlt.Flt = (float)envionment_variables.RH_CurrentType; 
            CnvtFlt(); 
            
      }      
      else if(ConfigRXBuffer[2] == 0xAA)//设置温湿度量程
      {
            ConfigTXBuffer[ucConfigTXCharCount++] = ConfigRXBuffer[2];
            //得到温度的 程
            GetNum = 4;
            GetFlt(GetNum); 
            envionment_variables.Mini_temperature = unionFlt.Flt;
            GetNum += 4;
            GetFlt(GetNum); 
            envionment_variables.Max_temperature = unionFlt.Flt;
            GetNum += 4;
            //得到湿度的量程
            GetFlt(GetNum); 
            envionment_variables.Mini_humidity = unionFlt.Flt;
            GetNum += 4;
            GetFlt(GetNum);  
            envionment_variables.Max_humidity = unionFlt.Flt; 
            GetNum += 4;
            //设置温度零点
            GetFlt(GetNum); 
            envionment_variables.Zero_temperature = unionFlt.Flt; 
            GetNum += 4;
            //设置湿度零点
            GetFlt(GetNum);
            envionment_variables.Zero_humidity = unionFlt.Flt; 
            GetNum += 4;
            
            //设置温度电流输出类型
            GetFlt(GetNum);
            envionment_variables.TC_CurrentType = (U8)unionFlt.Flt ; 
            GetNum += 4;
            GetFlt(GetNum);
            //发设置湿度电流输出类型
            envionment_variables.RH_CurrentType = (U8)unionFlt.Flt;                           
            
            //保存设置的值
            WriteSystemVar(1);
            
            ReadSystemVar(1);

      }                             
      MakeConfigParity();	
      StartConfigTX();
}

void ProcessConfigCmd03()
{
       U8 GetNum;
      ucConfigTXCharCount = 0;
      ConfigTXBuffer[ucConfigTXCharCount++] = 0xFF;
      ConfigTXBuffer[ucConfigTXCharCount++] = 0x03;
      	
      if(ConfigRXBuffer[2] == 0x55) //恢复出厂设置
      {
            ConfigTXBuffer[ucConfigTXCharCount++] = 0x02;
             ReadFacSystemVar();
             WriteSystemVar(1);
            
            ConfigTXBuffer[ucConfigTXCharCount++] = ConfigRXBuffer[2];	
            //发送温度量程
            unionFlt.Flt = envionment_variables.Mini_temperature; 
            CnvtFlt();       
            unionFlt.Flt = envionment_variables.Max_temperature; 
            CnvtFlt();
            //发送湿度量程
            unionFlt.Flt = envionment_variables.Mini_humidity; 
            CnvtFlt();      
            unionFlt.Flt = envionment_variables.Max_humidity; 
            CnvtFlt(); 
            //发送温度零点
            unionFlt.Flt = envionment_variables.Zero_temperature; 
            CnvtFlt(); 
            //发送湿度零点
            unionFlt.Flt = envionment_variables.Zero_humidity; 
            CnvtFlt(); 
            
            //发送温度电流输出类型
            unionFlt.Flt = (float)envionment_variables.TC_CurrentType; 
            CnvtFlt(); 
            //发送湿度电流输出类型
            unionFlt.Flt = (float)envionment_variables.RH_CurrentType; 
            CnvtFlt(); 
        
      }
      else if(ConfigRXBuffer[2] == 0xAA)  //保存出厂设置
      {
            ConfigTXBuffer[ucConfigTXCharCount++] = 0x03;
            
            ConfigTXBuffer[ucConfigTXCharCount++] = ConfigRXBuffer[2];
            //得到温度的 程
            GetNum = 4;
            GetFlt(GetNum); 
            envionment_variables.Mini_temperature = unionFlt.Flt;
            GetNum += 4;
            GetFlt(GetNum); 
            envionment_variables.Max_temperature = unionFlt.Flt;
            GetNum += 4;
            //得到湿度的量程
            GetFlt(GetNum); 
            envionment_variables.Mini_humidity = unionFlt.Flt;
            GetNum += 4;
            GetFlt(GetNum);  
            envionment_variables.Max_humidity = unionFlt.Flt; 
            GetNum += 4;
            //设置温度零点
            GetFlt(GetNum); 
            envionment_variables.Zero_temperature = unionFlt.Flt; 
            GetNum += 4;
            //设置湿度零点
            GetFlt(GetNum);
            envionment_variables.Zero_humidity = unionFlt.Flt; 
            GetNum += 4;
            
            //设置温度电流输出类型
            GetFlt(GetNum);
            envionment_variables.TC_CurrentType = (U8)unionFlt.Flt ; 
            GetNum += 4;
            GetFlt(GetNum);
            //发设置湿度电流输出类型
            envionment_variables.RH_CurrentType = (U8)unionFlt.Flt;                
                        
             //保存设置的值
            WriteFacSystemVar();            
      }      
      MakeConfigParity();	
      StartConfigTX();
}
//用于电流修正
void ProcessConfigCmd04()
{
      U8 GetNum,Index;
      float TestCurrent;
      ucConfigTXCharCount = 0;
      ConfigTXBuffer[ucConfigTXCharCount++] = 0xFF;
      ConfigTXBuffer[ucConfigTXCharCount++] = 0x03;
      ConfigTXBuffer[ucConfigTXCharCount++] = 0x04;	
      	
      if(ConfigRXBuffer[3] == 0x55) //读取电流的 AD吗
      {
            ConfigTXBuffer[ucConfigTXCharCount++] = ConfigRXBuffer[3]; 
            //
            if((ConfigRXBuffer[2] >= 0x01) && (ConfigRXBuffer[2] <= 0x09))//温度电流标定
            {
                  unionFlt.Flt = envionment_variables.TCDATable[ConfigRXBuffer[2] - 1];                     
            }
            else if((ConfigRXBuffer[2] >= 0x0A ) && (ConfigRXBuffer[2] <= 0x11))//温度电流测试
            {
                  Index = ConfigRXBuffer[2] - 0x0A;
                  TestCurrent = envionment_variables.TCDATable[Index]  - envionment_variables.TCDATable[Index+1];
                  TestCurrent = TestCurrent/2;
                  TestCurrent =  envionment_variables.TCDATable[Index] - TestCurrent;
                  TBCCR2 = (int)TestCurrent;
            } 
            else if((ConfigRXBuffer[2] >= 0x21) && (ConfigRXBuffer[2] <= 0x29))//湿度电流标定
            {
                  unionFlt.Flt = envionment_variables.RHDATable[ConfigRXBuffer[2] - 0x21]; 
            }
            else if((ConfigRXBuffer[2] >= 0x2A ) && (ConfigRXBuffer[2] <= 0x31))//温度电流测试
            {
                  Index = ConfigRXBuffer[2] - 0x2A;
                  TestCurrent = envionment_variables.RHDATable[Index]  - envionment_variables.RHDATable[Index+1];
                  TestCurrent = TestCurrent/2;
                  TestCurrent =  envionment_variables.RHDATable[Index] - TestCurrent;
                  TBCCR1 = (int)TestCurrent;
            } 
                                    
            if((ConfigRXBuffer[2] >= 0x01) && (ConfigRXBuffer[2] <= 0x09))//温度电流标定
            {
                  envionment_variables.TCPWM_OUTNUM = (int)unionFlt.Flt; 
                  TBCCR2 = envionment_variables.TCPWM_OUTNUM;
            }
            else if((ConfigRXBuffer[2] >= 0x21) && (ConfigRXBuffer[2] <= 0x29))//湿度电流标定
            {
                  envionment_variables.RHPWM_OUTNUM = (int)unionFlt.Flt;
                   TBCCR1 = envionment_variables.RHPWM_OUTNUM;
            }
            else
            {
              
            }
                
      
            LoopFlag = 0; 
            CnvtFlt();
      }
      else if(ConfigRXBuffer[3] == 0xAA)        //标定电流AD
      {
            ConfigTXBuffer[ucConfigTXCharCount++] = ConfigRXBuffer[3];
            GetNum = 4;
            GetFlt(GetNum); 
            if((ConfigRXBuffer[2] >= 0x01) && (ConfigRXBuffer[2] <= 0x09))//温度电流标定
            {                  
                         envionment_variables.TCPWM_OUTNUM = (int)unionFlt.Flt; 
                         TBCCR2 = envionment_variables.TCPWM_OUTNUM;                                   
            }
            else if((ConfigRXBuffer[2] >= 0x21) && (ConfigRXBuffer[2] <= 0x29))//湿度电流标定
            {
                  envionment_variables.RHPWM_OUTNUM = (int)unionFlt.Flt;
                  TBCCR1 = envionment_variables.RHPWM_OUTNUM;
            }
            else
            {
              
            }
            LoopFlag = 0; 
           // TBCCR1 = envionment_variables.TCPWM_OUTNUM;                        
      }
      else if(ConfigRXBuffer[3] == 0x5A)        //保存标定的 电流AD吗
      {
            
            ConfigTXBuffer[ucConfigTXCharCount++] = ConfigRXBuffer[3];
            GetNum = 4;
            GetFlt(GetNum);             
            if((ConfigRXBuffer[2] >= 0x01) && (ConfigRXBuffer[2] <= 0x09))//温度电流标定
            {
                 // envionment_variables.TC_DA4mA = (int)unionFlt.Flt;   
                  //WriteEEPROM(TC_DA4mA_Addr, (unsigned char *)&envionment_variables.TC_DA4mA, 4);
                envionment_variables.TCDATable[ConfigRXBuffer[2] - 1] = (int)unionFlt.Flt; ;
                WriteEEPROM(TCDATable_Addr+(ConfigRXBuffer[2] - 1)*2, (unsigned char *)&envionment_variables.TCDATable[ConfigRXBuffer[2] - 1], 2);

            }           
            else if((ConfigRXBuffer[2] >= 0x21) && (ConfigRXBuffer[2] <= 0x29))//温度电流标定
            {
                envionment_variables.RHDATable[ConfigRXBuffer[2] - 0x21] = (int)unionFlt.Flt; ;
                WriteEEPROM(RHDATable_Addr+(ConfigRXBuffer[2] - 0x21)*2, (unsigned char *)&envionment_variables.RHDATable[ConfigRXBuffer[2] - 0x21], 2);

            }
            else
            {
              
            }
            //LoopFlag = 1;         //设置保存还在标定状态
            
      }
      else if(ConfigRXBuffer[3] == 0x5B) 
      {
            LoopFlag = 1; 
      }
      else if(ConfigRXBuffer[3] == 0x5C) 
      {
            //LoopFlag = 1; 
            envionment_variables.TC_DA4mA = 999;		
	  envionment_variables.TC_DA20mA = 254;
                    
            envionment_variables.RH_DA4mA = 999;		
	  envionment_variables.RH_DA20mA = 254;
                  
            WriteEEPROM(TC_DA4mA_Addr, (unsigned char *)&envionment_variables.TC_DA4mA, 4);
            WriteEEPROM(TC_DA20mA_Addr, (unsigned char *)&envionment_variables.TC_DA20mA, 4);
            WriteEEPROM(RH_DA4mA_Addr, (unsigned char *)&envionment_variables.RH_DA4mA, 4);
            WriteEEPROM(RH_DA20mA_Addr, (unsigned char *)&envionment_variables.RH_DA20mA, 4);                        
      }
      else if(ConfigRXBuffer[3] == 0x5F) 
      {
            if(ConfigRXBuffer[2] == 0x05)       // 温度电流测试
            {
                  TestCurrent = (envionment_variables.TC_DA4mA - envionment_variables.TC_DA20mA)/2;
                  TestCurrent =  envionment_variables.TC_DA4mA - TestCurrent;
                  TBCCR2 = (int)TestCurrent;
            }
            else if(ConfigRXBuffer[2] == 0x06) //湿度电流测试
            {
                  TestCurrent = (envionment_variables.RH_DA4mA - envionment_variables.RH_DA20mA)/2;
                  TestCurrent =  envionment_variables.RH_DA4mA - TestCurrent;
                  TBCCR1 = (int)TestCurrent;
            }
      }
      MakeConfigParity();	
      StartConfigTX();
}
//用于报警设置
void ProcessConfigCmd05()
{
      
}
void TaskConfig()
{
      if(g_Event & EVENT_CONFIG_MSGRCV)
      {
            ProcessConfigCmd[ConfigRXBuffer[1]]();
            g_Event &= ~EVENT_CONFIG_MSGRCV;                        
      }
}




/////////////////////////////////////

⌨️ 快捷键说明

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