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

📄 rem.c

📁 空调控制程序
💻 C
📖 第 1 页 / 共 3 页
字号:
;08 室内机制热膨胀阀常开步数
;09 室内机制热补偿温度    4     -10      10 +128
-----------------------------------------------------------------------------*/
/* 设定参数处理 */
void LcSetData(void)
{
    SWTime = BkgLampSET;      /* 键延时与背光开时间相同 */
    SetBuzCntr(BuzShortLong); /* 一短一长 */
    if (LcBufAdr[1] == 99){   /* 参数序号(1-99) */
      if (LcBufAdr[3] == 0x0AA){
        AckTm = 0;            /* 解除锁定 */
        SetBuzCntr(BuzCntrShort);
      }
    } else if (AckTm < 180){
      AckTm = 0;             /* 清除计数, 允许修改 */
      switch(LcBufAdr[1]){   /* 1-9 为有效输入 */
#ifdef EnSTYLE5
        case 1:              /* 01 室内机通讯地址  1 1 30 */
          if ((LcBufAdr[3] >= WJ_NJNoMIN) && (LcBufAdr[3] <= WJ_NJNoMAX)){
            ClrRsErr((u8)((WJ_NJNo & WJNOMASK)|LcBufAdr[3]));
            SetBuzCntr(BuzCntrShort);
          }
          break;
        case 2:              /* 02 室外机通讯地址  0 0  7 */
          if (LcBufAdr[3] <= WJ_WJNoMAX){
            ClrRsErr((u8)((WJ_NJNo & NJNOMASK)|(u8)(LcBufAdr[3] << 5)));
            SetBuzCntr(BuzCntrShort);
          }
          break;
#endif
        case 3:              /* 03 室内机功率 5 1 255 单位:500w */
          if ((!ValBit(RunMode,fSysOn)) && (LcBufAdr[3] != 0)){
            PowerConst = LcBufAdr[3];     /* 关机时才允许修改功率*/
            ClrBit(Errorflg,fSysPowErr);  /* 1: 室内机总功率过大 */
            SetBuzCntr(BuzCntrShort);
          }
          break;
        case 4:              /* 04 室内机功能设置  0 0  7 */
          if ((LcBufAdr[3] & ~SYSCONMASK) == 0){
            SysConfig = (u8)((SysConfig & ~SYSCONMASK)|LcBufAdr[3]);
            SetBuzCntr(BuzCntrShort);
          }
          break;
#ifdef EnSTYLE5
        case 5:              /* 05 制冷调阀零点  1 -10  10 */
          if ((LcBufAdr[3] >= 118) && (LcBufAdr[3] <= 138)){
            SetOnCool = LcBufAdr[3];
            SetBuzCntr(BuzCntrShort);
          }
          break;
        case 6:              /* 06 制热调阀零点  -1 -10 10 */
          if ((LcBufAdr[3] >= 118) && (LcBufAdr[3] <= 138)){
            SetOnHeat = LcBufAdr[3];
            SetBuzCntr(BuzCntrShort);
          }
          break;
        case 7:              /* 07 膨胀阀非调节温差  1 0 10 */
          if (LcBufAdr[3] <= 10){
            SetUnacc = LcBufAdr[3];
            SetBuzCntr(BuzCntrShort);
          }
          break;
        case 8:              /* 08 室内机制热膨胀阀常开步数 */
          if (LcBufAdr[3] >= 40){
            SetOn = LcBufAdr[3];
            SetBuzCntr(BuzCntrShort);
          }
          break;
#endif
#ifdef  ChigoXG1
        case 9:              /* 09 制热温度补偿 4 -10 10 */
#ifndef ChigoXG1Set
          if ((LcBufAdr[3] >= 118) && (LcBufAdr[3] <= 138)){
            SetOffset = LcBufAdr[3];
            SetBuzCntr(BuzCntrShort);
          }
#endif
          break;
#endif
        default:
          break;
      }
    }
}

/* 线控器或遥控器数据处理------------------------------------------------------
;按388遥控器的遥控码格式及内容来发送
;
;ramRMT1  (D7-D4)+17=设温  0=连续
;          D3=1  开        0  关
;         (D2-D0)=000自动  001制冷 010除湿  011通风  100制热
;
;ramRMT2  (D7-D5)=000自动  x01高风 x10中风  x11低风  100大功率 101经济
;         (D4,D3)=00自然风 01摆风  10固定风
;         (D1,D0)=00无     01睡眠  10定时   11定时+睡眠
;
;ramRMT3  睡眠分高位
;ramRMT4  高4位睡眠分低位,低4位,定时分高位
;ramRMT5  定时分低位
-----------------------------------------------------------------------------*/
void LcGetData(void)
{
#ifdef EnSCOM
     LcMonCnt = 0;                 /* 与线控器通信故障计时 */
     ClrBit(Errorflg,fLComErr);    /* 1:与线控器通信故障  */
     if (++LcInitCnt > 5) ClrBit(Sysflag,fSysInit);
     if (!ValBit(Sysflag1,f1XK_YK)){   /* 1: XK */
#endif
       FanTmSet = BkgLampSET;
       TimeTmSet= BkgLampSET;
       SWTime = BkgLampSET;      /* 键延时与背光开时间相同 */
       SetBuzCntr(BuzCntrShort);
#ifdef EnSCOM
     }
     if (!ValBit(Sysflag1,f1XK_YK) ||   /* 1: XK */
         (!ValBit(Sysflag,fSysInit))){  /* 如果是初始化,不处理 */
#endif
       if ((LcBufAdr[0] & 0x0F0) != 0) {
         ClrBit(Sysflag,fContinue);
         SetupTp = (u8)(((LcBufAdr[0] & 0x0F0) >> 4) + 0x91);
       } else {
         SetBit(Sysflag,fContinue);
         //SetupTp = 0x98;            /* 连续运行时设定温度为24 */
       }

       /* 开关机,模式 */
       if (ValBit(LcBufAdr[0],3)){  /* T1.3 开关状态 - 1:开机*/
         TurnSysOn();
       } else {
         TurnSysOff();
#ifdef EnSCOM
         if (!ValBit(Sysflag1,f1XK_YK))   /* 1: XK */
#endif
           SWTime = 0;      /* 立即关显示 */
       }
       SetMode((u8)(LcRxMod_Tab[LcBufAdr[0] & 0x07]));

       /* 设定风速 */
       SetFanStatus((u8)LcRxFan_Tab[(LcBufAdr[1] >> 5)]);

#ifdef EnSWING
       /* 风摆状态: 00:自然风/01:扫风/10:固定风 */
       SetFDoorUnit((u8)((LcBufAdr[1] >> 3) & 0x03));
#if (NJTYPE == 0)||(NJTYPE == 1)||(NJTYPE == 2)||(NJTYPE == 3)||(NJTYPE == 4)
       if ((FDoorUnit >= SWINGFIXED)              /* 10/11: 固定风 */
            && ValBit(RunMode,fSysOn)             /* 1: 开机 */
            && ValBit(FanStatus,fFanCtrlBit)) {   /* 1: 内风机运行标志 */
         BjSave.w_form = BjStep.w_form;           /* 记忆风门位置 */
       }
#endif
#endif
       /* 睡眠时间 */
       if (ValBit(LcBufAdr[1],0)){
         /* 设定睡眠功能, 已经设定了睡眠,不再重复设定 */
         if (!ValBit(SlpTmFlag,fSleep)){
           SetBit(SlpTmFlag,fSleep);
           SleepUnit = 0x78;
         }
         SetBit(SlpTmFlag,fTimeOff);
         TurnOff = (u16)(LcBufAdr[2] << 4) + ((LcBufAdr[3] & 0x0f0) >> 4);
       } else {
         /* 清除睡眠时间 */
         ClrBit(SlpTmFlag,fSleep);
         ClrBit(SlpTmFlag,fTimeOff);
       }

       /* 定时开 */
       if (ValBit(LcBufAdr[1],1)){
         SetBit(SlpTmFlag,fTime);
         TurnOn = (u16)(((LcBufAdr[3] & 0x0F) << 8) + LcBufAdr[4]);
       } else {
         ClrBit(SlpTmFlag, fTime);
       }
#ifdef EnSCOM
     }
     /* 1: 线控器,0:遥控器 , 如果是线控器,准备发送数据*/
     if (ValBit(Sysflag1,f1XK_YK)) LcComTx_Sub();
#endif
}

#ifdef EnSCOM
void LcComTx_Sub(void)
{
   if (ValBit(Sysflag,fSysInit)){ /* 1:系统初始化 */
/*-----------------------------------------------------------------------------
;室内机发给线控器的内容(线控器主发):
;第1字节:起始码正码7A
;第2字节:起始码反码85
;第3字节:室内机设定风速正码
;D7 D6 D5 D4 设定风速  D1 D0   风摆状态 D3 D2 实际风速
; 0  0  0  0  自动风    0  0    自然风   0  0  停
; 0  0  0  1  高风      0  1    扫风     0  1  低风
; 0  0  1  0  中风      1  0    固定风   1  0  中风
; 0  0  1  1  低风                       1  1  高风
; 0  1  0  0  大功率
; 0  1  0  1  经济运转
;
;第4字节:室内机设定风速反码;
;第5字节:室内机模式正码;
; D7 D6 D5 D4  设定温度     D3 开关状态  D2 D1 D0  模式
;              自动 非自动
; 0  0  0  0        CONT    0  关机      0  0  0  自动
; 0  0  0  1   -6   18℃    1  开机      0  0  1  制冷
; 0  0  1  0   -5   19℃                 0  1  0  除湿
;     …                                 0  1  1  通风
; 0  1  1  1    0   24℃                 1  0  0  制热
;     …
; 1  1  0  1   +6   30℃
;
;第6字节:室内机模式反码;
;第7字节:室内温度正码;
;第8字节:室内温度反码;
-----------------------------------------------------------------------------*/
     LcBufAdr[0] =  0x7A;  /* 标志 ID */

     /* 室内机风机状态 */
     LcBufAdr[2] = (u8)(((FanStatus & 0x30) >> 2)
                        |LcComTx_IFan[FanStatus & FANMASK_S]);
#ifdef EnSWING
     /* 风摆状态 */
     LcBufAdr[2] |= (u8)(FDoorUnit & SWINGMASK);
#endif

     LcBufAdr[4] = LcComTx_IMod[RunMode & MODEMASK];
     if (!ValBit(Sysflag,fContinue)){
       LcBufAdr[4] |= (u8)((SetupTp - 0x91) << 4) ;
     }
     if (ValBit(RunMode,fSysOn)) LcBufAdr[4] |= 0x08; /* 开机标志 */
   } else {
/*-----------------------------------------------------------------------------
;室内机发给线控器的内容(线控器主发):
;  第1字节:起始码正码A5
;  第2字节:起始码反码5A
;  第3字节:室内机状态正码
;    D3D2:室内机实际风速;
;      00 停风 / 01 高风 / 10 中风 / 11 低风
;    D0:除霜标志位;
;    D1:等待状态标志位;
;    D4:防冷风(如带中央线控器,则为总控标志位);
;    D6D5:总控模式
;      00 关机 / 01 制冷 / 10 制热 / 11 保留
;    D7:
;  第4字节:室内机状态反码;
;  第5字节:室外机及室内机故障正码;
;  第6字节:室外机及室内机故障反码;
;  第7字节:室温正码;
;  第8字节:室温反码;
-----------------------------------------------------------------------------*/
     LcBufAdr[0] =  0x0A5;
     LcBufAdr[2] =  0x00;
     if (ValBit(OutDevStu[0],fOutDeforst)){ /* 1: 化霜时 */
       SetBit(LcBufAdr[2],0);
     }

     if ((!ValBit(RunMode,fSysOn))||            /* 关机时,置位允许标志 */
        ValBit(OutDevStu[0],fRunEnable)||       /* 1:外机工作允许标志 */
        ((u8)(RunMode & MODEMASK) == MODEFAN)){ /* 通风模式 */
       SetBit(LcBufAdr[2],1);
     }

     /* 制热防冷风 */
     if ((RunMode == (u8)(MODEHEAT|(1<<fSysOn)|(1<<fSysOnOff))) &&
         (ValBit(Sysflag2,fProtColdFan)||ValBit(Sysflag2,fProtColdLow))){
       SetBit(LcBufAdr[2],4);
     }

     /* 实际风速 */
     if (ValBit(FanStatus,fFanCtrlBit)){  /* 1:内风机运行标志 */
        /* 00/01/10/11 -> 00/11/10/01 */
        LcBufAdr[2] |=  (u8)((0x10 - ((FanStatus & 0x30)>>2)) & 0x0C);
     }

     //if (ValBit(OutDevStu[0],fOutSideRxOk)){  /* 1:室内机与外机通信故障 */
     //   SetBit(Errorflg,fSComErr);
     //}

     LcBufAdr[4] = ErrNo();
   }

   LcBufAdr[6] = AmbientTp;

   /* 计算反码 */
   LcBufAdr[7] = (u8)(255 - LcBufAdr[6]);
   LcBufAdr[5] = (u8)(255 - LcBufAdr[4]);
   LcBufAdr[3] = (u8)(255 - LcBufAdr[2]);
   LcBufAdr[1] = (u8)(255 - LcBufAdr[0]);

   ReadyToSend();
}

void ReadyToSend(void)
{
  OCR2 += (u8)(0x0FF);                    /* 间隔时间 4.096mS */
  ClrBit(pLCTx,pbLCTx);                   /* 准备发送 */
  LcFlag = (u8)((1<<fLcTx)|(1<<fLcTxLo)); /* 清除所有标志 */
}

void GetScomCon(void)  /* 五型线控器 */
{
  SetBit(Sysflag1,f1XK_YK);

  LcMonCnt = 0;               /* 与线控器通信故障计时 */
  ClrBit(Errorflg,fLComErr);  /* 1:与线控器通信故障  */

  LcBitCnt = (u8)(LcBufAdr[1] & 0x0F);
  if (LcBitCnt-- != 0){   /* 长度为0 */
    switch(LcBufAdr[1] & 0x70){
      case 0x10:          /* 发送参数 */
        if (!ValBit(Sysflag,fSysInit)){ /* 1:系统初始化标志 */
          if (LcBufAdr[2] == 0x01){
            LcSt0Cnt = 71;
          } else {
            LcSt0Cnt = LcBufAdr[2];
          }
          LcByteCnt = &LcBufAdr[3];
          while (LcBitCnt-- != 0){
            switch (LcSt0Cnt++){
              case 71:      /* 模式 & 风速 & 摆风 */
                SetFanStatus((u8)((*LcByteCnt >> 4) & 0x03));
                SetFDoorUnit((u8)((*LcByteCnt >> 6) & 0x03));
                *LcByteCnt &= MODEMASK;
                if (*LcByteCnt == 0x05){      /* 自动 */
                  SetBit(RunMode,fSysOnOff);
                  SetMode(MODEAUTO);
                } else if (*LcByteCnt == 0){  /* 关机 */
                  TurnSysOff();
                } else {    /* 制热/制冷/除湿/通风 */
                  SetBit(RunMode,fSysOnOff);
                  SetMode(*LcByteCnt);
                }
                break;

              case 72:      /* 设定温度 */
                if ((*LcByteCnt >= SetupTpMIN) && (*LcByteCnt <= SetupTpMAX))
                  SetupTp = *LcByteCnt;
                break;
#if 0
              case 74:      /* 模式 */
                *LcByteCnt &= MODEMASK;
                if (*LcByteCnt == 0x01){      /* 自动 */
                  SetBit(RunMode,fSysOnOff);
                  SetMode(MODEAUTO);
                } else if (*LcByteCnt == 0){  /* 关机 */
                  TurnSysOff();
                } else {                      /* 制热/制冷/除湿/通风 */
                  if (*LcByteCnt == 0x05) *LcByteCnt = MODEHEAT; /* 制热 */
                  SetBit(RunMode,fSysOnOff);
                  SetMode(*LcByteCnt);
                }
                break;

              case 75:      /* 风速 */
                SetFanStatus((u8)(*LcByteCnt & 0x03));
                break;

              case 76:      /* 摆风 */
                SetFDoorUnit((u8)(*LcByteCnt & 0x03));
                break;
#endif
              default:
                break;
            }
            LcByteCnt++;    /* 下一项 */
          }
        }
        ReWriting(LcInitCnt++);
        break;

      case 0x20:   /* 读参数 */
        if (ValBit(LcBufAdr[1],7)){  /* 1: 应答 */
          ReWriting(LcInitCnt++);
        } else {                     /* 0: 非应答 */
          LcByteCnt = &LcBufAdr[3];
          if ((LcBufAdr[2] <= 3) && (LcBufAdr[2] >= 1)){   /* G1-G3 */
            LcSt0Cnt = (u8)((LcBufAdr[2] + 1) * 10);
            LcBufAdr[1] = (u8)((LcBufAdr[1] & 0x0F0) | 0x8B);
            LcBitCnt = 10;
          } else {
            if ((LcBufAdr[2] > 47) || (LcBufAdr[2] < 20))  /* I20-I46 */
              LcBufAdr[2] = 20;
            LcSt0Cnt = LcBufAdr[2];    /* 参数代码 */
            LcBufAdr[1] = (u8)((LcBufAdr[1] & 0x0F0) | 0x82);
            LcBitCnt = 1;
          }
          while (LcBitCnt-- != 0){
            *LcByteCnt++ = GetNjItem(LcSt0Cnt++);  /* 参数 */
          }
        }
        break;

      case 0x30:
        if (ValBit(LcBufAdr[1],7)){    /* 应答 FF(NAK)/FE(ACK)*/
          //if ((LcBufAdr[2] == 0x0FE)||
          //    (LcBufAdr[2] == 0x0FE))
            ++LcInitCnt;
          ReWriting(LcInitCnt);
        } else {
          if (SetNjItem(LcBufAdr[2],LcBufAdr[3])){
            LcBufAdr[2] = 0x0FE;    /* ACK */
          } else{
            LcBufAdr[2] = 0x0FF;    /* NAK */
          }
          LcBufAdr[1] = 0x0B1;
        }
        break;
    }

    /* 计算累加和 */
    AddSum(TRUE);

    /* 准备发送 */
    ReadyToSend();
  }
}

void ReWriting(u8 iNo)
{
  if (!ValBit(Sysflag,fSysInit) || (iNo > 3)){
    ClrBit(Sysflag,fSysInit);
    LcBufAdr[1] = 0x1B;
    if (!ValBit(iNo,0)){
      LcBufAdr[2] = 0x01;  /* G1 */
      LcSt0Cnt = 20;
    } else {
      LcBufAdr[2] = 0x02;  /* G2 */
      LcSt0Cnt = 30;
    }
    for (LcBitCnt = 3; LcBitCnt < 13; LcBitCnt++)

⌨️ 快捷键说明

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