bool SearchDefHouIndex2(uint wLimit) { tiAlt = tiDig; dwTmp = DateToHouIndex(); tiAlt = tiCurr; dwBuffC = DateToHouIndex(); if (dwTmp > dwBuffC) return(0); if (dwBuffC - dwTmp > wHOURS) return(0); if (dwTmpPrev == 0) { dwTmpPrev = dwTmp; } else { if (dwTmp > dwTmpPrev) return(0); if (dwTmpPrev - dwTmp > wLimit) return(0); dwTmpPrev = dwTmp; } iwDigHou = (wHOURS+iwHardHou-(dwBuffC-dwTmp)) % wHOURS; return(1); }
bool SearchDefHouIndex(time tiExt) { ulong dwExt = DateToHouIndex(tiExt); ulong dwInt = DateToHouIndex(tiCurr); if (dwExt > dwInt) return(0); ulong dw = dwInt - dwExt; if (dw > wHOURS) return(0); iwDigHou = (wHOURS+iwHardHou-dw) % wHOURS; return(1); }
void QueryHeaderS(void) { HideCurrTime(1); ulong dw = DateToHouIndex(tiDigPrev); dw -= wBaseCurr; tiDig = HouIndexToDate(dw); InitPush(0); PushChar(0xC0); PushChar(0x48); PushAddressS(); PushChar(0xD5); PushChar(0x01); PushChar(0x34); PushChar(ToBCD(tiDig.bDay)); PushChar(ToBCD(tiDig.bMonth)); PushChar(ToBCD(tiDig.bYear)); PushChar(tiDig.bHour*2 + tiDig.bMinute/30); PushChar(4); QueryS(100+23, 20); }
void QueryHeaderQ(void) { HideCurrTime(1); ulong dw = DateToHouIndex(tiDigPrev); dw -= wBaseCurr; tiDig = HouIndexToDate(dw); szHi[10] = 'A' + ibLineQ; QueryHeaderQ_22(ibLineQ); }
void QueryHeaderU_Plc(void) { HideCurrTime(1); ulong dw = DateToHouIndex(tiDigPrev); dw -= wBaseCurr; tiDig = HouIndexToDate(dw); szHi[10] = 'A' + ibMinor; ibMinorMax = 2; QueryHeaderU_Plc_Inner(); }
bool ReadDataU_Plc(void) { uchar i; for (i=0; i<bPlcUSize; i++) { ulong dw = DateToHouIndex(tiDigPrev); dw += (bPlcUSize-1); dw -= (wBaseCurr + i); tiDig = HouIndexToDate(dw); if (ReadDataU_Plc_Inner(bPlcUSize-1-i) == 0) return(0); } wBaseCurr += bPlcUSize; if (wBaseCurr > wHOURS) return(0); return(1); }
void OutImpCanHouExt(void) { InitPushPtr(); uint wSize = 0; uint iwHhr = bInBuff6*0x100 + bInBuff7; if (enGlobal == GLB_PROGRAM) Result(bRES_NEEDWORK); else if (iwHhr >= wHOURS) Result(bRES_BADADDRESS); else { uchar i; for (i=0; i<bInBuff8; i++) { ulong dw = DateToHouIndex(tiCurr); dw -= iwHhr; time ti = HouIndexToDate(dw); wSize += PushTime(ti); if (LoadImpHouFree((wHOURS+iwHardHou-iwHhr) % wHOURS) == false) { Result(bRES_BADFLASH); return; } uchar c; for (c=0; c<bCANALS; c++) { if (iwHhr >= wHOURS) PushIntBig(0); else PushIntBig( mpwImpHouCan[ PrevSoftHou() ][ c ] ); wSize += sizeof(uint); } iwHhr++; } OutptrOutBuff(wSize); } }
bool ReadHeaderS(void) { uchar i; for (i=0; i<4; i++) { ulong dw = DateToHouIndex(tiDigPrev); dw += 4-1; dw -= (wBaseCurr + i); tiDig = HouIndexToDate(dw); if (dw < dwValueS) if (ReadDataS(4-1-i) == 0) return(0); } wBaseCurr += 4; if (wBaseCurr > wHOURS) return(0); return(1); }
bool ReadDataQ(void) { uchar j; sprintf(szLo," %02u %02u.%02u.%02u", tiDig.bHour, tiDig.bDay,tiDig.bMonth,tiDig.bYear); if (SearchDefHouIndex(tiDig) == 0) return(1); if ((tiDig.bDay == tiCurr.bDay) && (tiDig.bMonth == tiCurr.bMonth) && (tiDig.bYear == tiCurr.bYear)) j = 47-(tiCurr.bHour*2+tiCurr.bMinute/30); else j = 0; uchar h; for (h=j; h<48; h++) { ResetWatchdog(); MakeDataQ(47-h); MakeSpecial(tiDig); if (MakeStopHou(0) == 0) return(0); ulong dw = DateToHouIndex(tiDigPrev); dw -= wBaseCurr; tiDig = HouIndexToDate(dw); iwDigHou = (wHOURS+iwDigHou-1)%wHOURS; } return(1); }
bool ReadHeaderBNew(uchar ibBlock, bool fDelay) { HideCurrTime(1); InitPop((uint)(1+(16-ibBlock)*15)); PopChar(); tiDig.bHour = FromBCD(PopChar()); // врем¤/дата часового блока tiDig.bMinute = FromBCD(PopChar()); tiDig.bDay = FromBCD(PopChar()); tiDig.bMonth = FromBCD(PopChar()); tiDig.bYear = FromBCD(PopChar()); if ((tiDig.bHour == 0) && // обрабатываем пустой блок (tiDig.bMinute == 0) && (tiDig.bDay == 0) && (tiDig.bMonth == 0) && (tiDig.bYear == 0)) { if (++iwMajor > GetMaxShutdown()) return(0); sprintf(szLo," выключено: %-4u ",iwMajor); if (fDelay == 1) DelayOff(); if (iwDigHou != 0) { iwDigHou = (wHOURS+iwDigHou-1)%wHOURS; ShowProgressDigHou(); return(MakeStopHou(0)); } else return(1); } if ((tiDig.bDay == tiSummer.bDay) && (tiDig.bMonth == tiSummer.bMonth)) { if ((tiDig.bHour == 3) && (tiDig.bMinute == 0)) { tiDig.bHour = 2; tiDig.bMinute = 0; } } sprintf(szLo," %02u %02u.%02u.%02u", tiDig.bHour, tiDig.bDay,tiDig.bMonth,tiDig.bYear); if ((tiDig.bMinute % 30) != 0) // обрабатываем неполный получасовой блок { tiDig.bMinute = (tiDig.bMinute / 30)*30; if (SearchDefHouIndex(tiDig) == 0) { szLo[4] = '?'; if (fDelay == 1) DelayOff(); return(1); } iwDigHou = (wHOURS+iwDigHou+1)%wHOURS; } else if (SearchDefHouIndex(tiDig) == 0) { szLo[4] = '?'; if (fDelay == 1) DelayOff(); return(1); } iwMajor = 0; // обнул¤ем счЄтчик после получени¤ правильных данных iwDigHou = (wHOURS+iwDigHou-1)%wHOURS; // врем¤ записи должно соответсвовать началу получасового блока ulong dw = DateToHouIndex(tiCurr); dw -= (wHOURS + iwHardHou - iwDigHou) % wHOURS; time ti = HouIndexToDate(dw); ShowProgressDigHou(); if (fDelay == 1) DelayOff(); PopChar(); uchar i; for (i=0; i<4; i++) { uint w = PopChar(); w += PopChar()*0x100; if (w == 0xFFFF) w = 0; mpwChannels[i] = w; } MakeSpecial(ti); return(MakeStopHou(0)); }