📄 rem.c
字号:
;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 + -