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

📄 rscom.c

📁 一个很好的完整的空调控制器程序
💻 C
📖 第 1 页 / 共 3 页
字号:
{
  if (WJ_NJNo != wjnj){
     WJ_NJNo = wjnj;              /* 地址改变,则清除地址冲突标志 */
     ClrBit(Errorflg,fRsAddrErr); /* 1:内机地址冲突 */
     ClrBit(Errorflg,fSComErr);   /* 1:外机通信故障 */
     ScAddrErrCnt = 0;
     ScMonCnt = 0;
  }
}

u8 Get_NJR(u8 i, u8 jcmd)
{
   u8 j;
   switch(i){
     case 20:
#ifdef EnSWING
       j = (u8)(((FanStatus & 0x03) << 4)|       /* 设定风速 */
                ((FDoorUnit & SWINGMASK) << 6)); /* 扫风方式 */
#else
       j = (u8)((FanStatus & 0x03) << 4);        /* 设定风速 */
#endif
       /* 室内机故障停机 */
       if ((Errorflg|Errorflg2) != 0) j |= 0x08;
       /* 室内机模式 */
       if (ValBit(RunMode,fSysOn)){
         SetBit(Sysflag,fModeflag);
         j |= (u8)((RunMode & MODEMASK)|(ValBit(Sysflag,fContinue)? 4 : 0));
       }
       return j;
       break;
     case 21:   /* 内机功率(On 500W) */
       if (ValBit(Sysflag1,fReqPowCHK)){   /* 1: 请求功率检测 */
         SetBit(Sysflag1,fRoPowCHK);
       }
//	   return (u8)(((ValBit(RunMode,fSysOn) && ValBit(Sysflag2,fRequest))||
//	                ValBit(Sysflag,fPower))? PowerConst : 0);
	   return (u8)((ValBit(Sysflag,fPower) || (jcmd != 1))? PowerConst : 0);
       break;
     case 22:   /* 内机故障标志2 */
       return Errorflg2;
       break;
     case 23:
       return Sysflag;
       break;
     case 24:
       return Sysflag1;
       break;
     case 25:
       return Sysflag2;
       break;
     case 26:
       //return MyPc2;
       break;
     case 27:
       //return MyPc;
       break;
     case 28:
//       return PumpErrFlg;
//       break;
     case 29:
       return RunMode;
       break;
     case 30:   /* 内机故障标志 */
       return Errorflg;
       break;
     case 31:   /* 室内温度 */
       if (ValBit(Errorflg,fAmbientErr)){
         return 0x80;
       } else if (jcmd == 1){
         /* 强制运行时,修改设定温度,不处理补偿温度 */
         if (!ValBit(Sysflag,fContinue)){
		   if (ValBit(RunMode,fSysOn) && ValBit(Sysflag2,fRequest)){
		     if ((RunMode & MODEMASK) == MODEHEAT){
		       return (u8)(SetupTp - 0x81);   /* Tr = Ts - 1 */
		     } else if (((RunMode & MODEMASK) == MODECOOL)||
		                ((RunMode & MODEMASK) == MODEDRY)){
		       return (u8)(SetupTp - 0x7F);   /* Tr = Ts + 1 */
		     }
#ifdef ChigoXG1
		   } else {
             if ((RunMode & MODEMASK) == MODEHEAT){
#ifdef ChigoXG1Set
               return (u8)(AmbientTp - ChigoXG1Set);
#else
               return (u8)(AmbientTp - SetOffset);
#endif
             }
#endif
           }
         } else if ((((RunMode & MODEMASK) == MODECOOL) ||
                     ((RunMode & MODEMASK) == MODEDRY)) &&
                    (AmbientTp < 0x85)){
           return 0x05 ;
         }
       }
       return (u8)(AmbientTp - 0x80);
       break;
     case 32:   /* 中点温度 */
       return (u8)(ValBit(Errorflg,fTubeMidErr)? 0x80: TubeMidTp - 0x80);
       break;
     case 33:   /* 入口(细管)温度 */
       return (u8)(ValBit(Errorflg,fTubeInErr)? 0x80: TubeInTp - 0x80);
       break;
     case 34:   /* 出口(粗管)温度 */
       return (u8)(ValBit(Errorflg,fTubeOutErr)? 0x80: TubeOutTp - 0x80);
       break;
     case 35:   /* 设定温度 */
       /* 强制运行时,修改设定温度,不处理补偿温度 */
       if (ValBit(Sysflag,fContinue) && (jcmd == 1)){
         if ((RunMode & MODEMASK) == MODEHEAT){         /* Ts = Tr + 5 */
           return (u8)((AmbientTp > 0x7B) ? (AmbientTp + 0x85) : 0);
         } else if (((RunMode & MODEMASK) == MODECOOL)||
                    ((RunMode & MODEMASK) == MODEDRY)){ /* Ts = Tr - 5 */
           return (u8)((AmbientTp > 0x85) ? (AmbientTp + 0x7B) : 0);
         }
       }
       return (u8)(SetupTp - 0x80);
       break;
     case 36:   /* 制冷调阀零点 */
       return (u8)(SetOnCool - 0x80);
       break;
     case 37:   /* 制热调阀零点 */
       return (u8)(SetOnHeat - 0x80);
       break;
     case 38:   /* 非调节温度 */
       return SetUnacc;
       break;
     case 39:   /* 制热膨胀阀常开开度 */
       return SetOn;
       break;
     case 40:   /* 室内机膨胀阀类型 0:1 三花(逆时针开阀),1:20 华鹭(顺时针开阀)*/
       return (u8)(ValBit(SysConfig,fPZFClockWise)? 20: 1);
       break;
#ifdef NJTYPEID
     case 41:   /* 室内机类型 */
       return NJTYPEID;
       break;
#endif
     //case 42:   /* 内机温度传感器类型 0: 3470B */
     //  return 0;
     //  break;
     case 43:   /* 内机程序版本号 V2.00 */
       return 200;
       break;
     case 44:   /* 室内机膨胀阀当前开度(Lo,Hi:2字节) */
       return CurVal_Lo;
       break;
     case 45:
       return CurVal_Hi;
       break;
     case 46:   /* 室内机膨胀阀设定开度(Lo,Hi:2字节) */
       return SetupVal_Lo;
       break;
     case 47:
       return SetupVal_Hi;
       break;
     case 48:   /* 内机选择项 */
       return SysConfig;
       break;
#ifdef ChigoXG1
     case 49:   /* 制热温度补偿 */
#ifdef ChigoXG1Set
       return (u8)(ChigoXG1Set - 0x80);
#else
       return (u8)(SetOffset - 0x80);
#endif
       break;
#endif
     case 50:   /* 内机模式 */
       SetBit(Sysflag,fModeflag);
       if (ValBit(RunMode,fSysOnOff)){
         if (ValBit(Sysflag2,fMAuto) ||
            ((RunMode & MODEMASK) == MODEAUTO)){
           return 0x01;   /* 自动 */
         } else if ((RunMode & MODEMASK) == MODEHEAT){
           if (ValBit(Sysflag,fContinue)) return 0x06;
           return 0x05;   /* 制热 */
         } else if ((RunMode & MODEMASK) == MODECOOL){
           if (ValBit(Sysflag,fContinue)) return 0x07;
           return 0x02;   /* 制冷 */
         } else {
           return (u8)(RunMode & MODEMASK); /* 除湿/通风 */
         }
       //} else {
       //  return 0x00;   /* 关机 */
       }
       break;
     case 51:   /* 内机风速 00: Auto/01: L/ 02: M/03: H */
       return FanStatus;
       break;
#ifdef EnSWING
     case 52:   /* 扫风状态 */
       return FDoorUnit;
       break;
#endif
     case 53:   /* 内机ID(包括外机) */
       return WJ_NJNo;
       break;
   }
   return 0x00;  /* 不支持的项,都返回 0x00 */
}

/*
   Dim i As Byte
   Dim j As Byte
   Dim R4 As Byte
   Dim R5 As Byte

   R4 = 0       ' H
   R5 = 0       ' L

   For j = 1 To 3 + (ss(3) And &HF)
      i = ss(j) Xor R5
      R5 = R4 Xor sstl(i)
      R4 = ssth(i)
   Next j

   ss(j) = R5 Mod 256
   ss(j + 1) = R4 Mod 256
*/

#if 0
BOOLEAN CRCchk (u8 f, u8 *ss)
{
   u8 i,j,k;
   u8 R4,R5;

   u8 *p;

   R4 = 0;       /* H */
   R5 = 0;       /* L */
   p = ss;

   k = (u8)((ss[2] & 0x0F) + 3);
   for(j=0; j<k; j++){
     i =  (u8)(*p++^R5);
     R5 = (u8)(sstl[i]^R4);
     R4 = ssth[i];
   }

   if (f == CRC_CHECK){
     if ((*p++ == R5) && (*p == R4)) return TRUE;
   } else {
     *p++ = R5;
     *p = R4;
   }
   return FALSE;
}
#endif

/*
   Dim i As Integer, ir As Integer
   Dim j As Integer
   Dim k As Integer

   Dim R4 As Long

   R4 = 0
   For j = 1 To (ss(3) And &HF) + 3
      i = ss(j)
      For k = 0 To 7
         ir = (i Mod 2) Xor (R4 And 1&)
         R4 = (R4 \ 2) Xor (&HA001& * ir)
         i = i \ 2
      Next k
   Next j

   ss(l + 1) = R4 Mod 256
   ss(l + 2) = (R4 \ 256) Mod 256
*/
//#if 0
BOOLEAN CRCchk(u8 f, u8 *ss)
{
   u8 i,j,k,l;
   u16 R4;
   u8 *p;

   R4 = 0;
   p = ss;

   l = (u8)((ss[2] & 0x0F) + 3);
   for(j=0; j<l; j++){
     i = *p++;
     for(k=0; k<8; k++){
       if (((i^(u8)R4) & 0x01) == 0){
         R4 >>= 1;
       } else {
         R4 = (u16)((R4>>1)^0x0A001);
       }
       i >>= 1;
     }
   }

   if (f == CRC_CHECK){
     if ((*p++ == (u8)R4) && (*p == (u8)(R4>>8))) return TRUE;
   } else {
     *p++ = (u8)R4;
     *p = (u8)(R4>>8);
   }
   return FALSE;
}
//#endif
#endif

/*** (c) 2005  佛山菱电 **************************** END OF FILE *************/

⌨️ 快捷键说明

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