1

Téma: Problém se zpracováním záporné hodnoty

Dobrý den,
využívám vzorový program pro odesílání dat na server a zároveň odeslání e-mailu při překročení dané teploty. Vše funguje korektně, ale z nějakého důvodu má program problém se zpracováním záporné hodnoty teploty. Na server odešle teplotu v pořádku, ale při zpracování pro mail neustále odesílá že je teplota 0 stupňů celsia (v realitě je -23 stupňů).
Děkuji

2

Re: Problém se zpracováním záporné hodnoty

Jaký máte modul? Jaké je prihl. jméno na portál?

3

Re: Problém se zpracováním záporné hodnoty

Mám SDS mini Light. Jak jsem psal. Na portál "merenidat.cz" se údaje odesílají korektně. Nefunguje zpracování záporné hodnoty pro část programu, která kontroluje meze a odesílá emaily. Nevím jestli může být problém v dělní 100 aktuální hodnoty. Nemohu to vyzkoušet jelikož SDS nemám u sebe. A než pojedu na opravu tak bych rád zjistil po čem jít.
Děkuji

4 Naposledy upravil: soami (2021-12-15 23:26:57)

Re: Problém se zpracováním záporné hodnoty

Tak sem dejte kód toho výpočtu pro mail. Pokud je teplota mezi -0.99 a +0.99 a dělíte 100, tak bude odeslaná 0, protože SDS vše za desetinnou čárkou ořízne.
Teď vidím, že píšete -23. Takže problém ve výpočtu bude jiný. Je třeba ten zápis podmínky a mailu vidět.

5

Re: Problém se zpracováním záporné hodnoty

setparam
{
// sys[140-7]
_sys=140;
_ramd=330;
_ramh=340;

label setparam_1:
_pom=sys[_sys]/1000;
if (_pom<200) {
  ram[_ramh]=_pom-100;
  ram[_ramh]=-1*ram[_ramh];
} else {
  ram[_ramh]=_pom-200;
}
_pom=sys[_sys] % 1000;
if (_pom<200) {
  ram[_ramd]=_pom-100;
  ram[_ramd]=-1*ram[_ramd];
} else {
  ram[_ramd]=_pom-200;
}
_sys++;
_ramd++;
_ramh++;
if (_sys<148) goto setparam_1;
}

savetopm
{
_pom=0;
_memo=100;
_web=140;

label savetopm_1:
if (sys[_memo]!=sys[_web]) {
  sys[_memo]=sys[_web];
  echo('Hodnota ', sys[_web], ' ulozena do permanentni pameti');
  _pom=1;
}
_memo++;
_web++;
if (_memo<108) goto savetopm_1;
if (_pom==1) setparam();  //nastaveni parametru z web promennych
}

nactitemp
{
_sys=310;
_ram=300;
label nactitemp_1:
if (sys[_sys]>0 && sys[_sys]<20000) {
  ram[_ram]=sys[_sys];
  _pom=_ram+10;
  if (ram[_ram]<ram[_pom]){
   ram[_pom]=ram[_ram];
  }
  _pom=_ram+20;
  if (ram[_ram]>ram[_pom]){
   ram[_pom]=ram[_ram];
  }
}
_sys++;
_ram++;
if (_sys<318) goto nactitemp_1;
}

kontrtemp
{
_ram=300;
_ramd=330;
_ramh=340;
_rame=350;
label kontrtemp_1:

_pom=_ram-299+390;
_tep=ram[_ram]/100;  //akt.teplota ve stupnich
if (_tep<ram[_ramd] && ram[_rame]<sys[3]){
  echo('Teplota cidla ', sys[_pom],' (',_tep,' st.C)', ' je nizsi nez nastavena (', ram[_ramd], ' st.C)');
  smtp_send('xxxxxx@', 'SDS panel teplot', 'Teplota cidla ', sys[_pom],' (',_tep,' st.C)', ' je nizsi nez nastavena (', ram[_ramd], ' st.C)');
  ram[_rame]=sys[3]+8640000;  //az za 24h se odesle dalsi email pokud se teplota nevrati
}
if (_tep>ram[_ramh] && ram[_rame]<sys[3]){
  echo('Teplota cidla ', sys[_pom],' (',_tep,' st.C)', ' je vyssi nez nastavena (', ram[_ramh], ' st.C)');
  smtp_send('xxxxxx@', 'SDS panel teplot', 'Teplota cidla ', sys[_pom],' (',_tep,' st.C)', ' je vyssi nez nastavena (', ram[_ramh], ' st.C)');
  ram[_rame]=sys[3]+8640000;  //az za 24h se odesle dalsi email pokud se teplota nevrati
}
if (_tep>ram[_ramd] && _tep<ram[_ramh]){
  _pom=_tmo*100;
  ram[_rame]=sys[3]+_pom;  //timeout
}

_ram++;
_ramd++;
_ramh++;
_rame++;
if (_ram<308) goto kontrtemp_1;

6

Re: Problém se zpracováním záporné hodnoty

Jen tak v rychlosti... problém bude asi v řádku if (sys[_sys]>0 && sys[_sys]<20000). Tedy do ram se zapíše jen plusova hodnota. Ten kód chce pro záporné hodnoty upravit.

7

Re: Problém se zpracováním záporné hodnoty

Děkuji, toho jsem se nevšiml. Upravím a vyzkouším.