1 Naposledy upravil: pep9k (2024-11-05 12:47:06)

Téma: Získání hodnot z teplotních čidel: problém se zápornými hodnotami

Dobrý den,
mám SDS-MICRO a včera jsem aktualizoval firmware. Nicméně problém, který budu popisovat byl stejný i u předchozího firmware. Při kontrole aktuálnosti firmwaru dostávám zprávu:
Váš firmware je aktuální.
Zařízení: SDS MICRO LM
Verze použitého firmware: 1.7.2022
Nejnovější dostupný vydaný (stable) firmware: 1.7.2022


Naměřené teploty zobrazuji na User Web Page (http://192.168.1.251/user.htm), kterou jsem upravil na základě nějakého příkladu z vaší podpory. Problém není přímo s User Web Page, nicméně uvnitř user.htm pomocí javascriptového http requestu načítám hodnoty teplot ze zařízení. Následující ukázka není přesnou kopií použitého kódu, ale "vyzobávám" z něj jen podstatné věci:

reqTemp=false;
if(window.XMLHttpRequest){
     reqTemp=new XMLHttpRequest();
}
else if (window.ActiveXObject){
     reqTemp=new ActiveXObject("Microsoft.XMLHTTP");
}
if (reqTemp){
     reqTemp.open("GET", "get_ram[292]?rn=16&rand="+Math.random(), true);
     reqTemp.onreadystatechange = reqTempComplete;
     reqTemp.send(null);
}

function reqTempComplete(){
  if(reqTemp.readyState == 4){
    if(reqTemp.status == 200){
      if (reqTemp.responseText!='') {
        var rE=reqTemp.responseText.split("|");
        var rE=reqTempXML.responseText.split("|");
   ...

Takže http requestem získám řetězec 16ti hodnot a ty pak splituju do pole a dále v kódu každou hodnotu dělím 100 ... to je vše v pořádku. Pro simulaci získaných hodnot mohu přímo do adresní řádky prohlížeče vepsat následující URL:

192.168.1.251/get_ram[292]?rn=16

Strukturu parametrů requestu chápu tak, že požaduji vypsání 16ti hodnot z RAM paměti od indexu 292. Je to tak?

A v prohlížeči pak vidím získané hodnoty:

6868|3975|2950|3250|2800|2631|5325|2818|2600|5125|5537|2350|6300|3675|768|687

PROBLÉM je, že takto získané hodnoty (citované v předchozím rámečku) neobsahují záporné hodnoty. Pokud je na některém z čidel záporná hodnota (menší než 0), tak na příslušném místě responseTextu je poslední naměřená nezáporná hodnota.

Včera jsem toto chování simuloval obložením jednoho čidla chladícími vložkami z mrazáku smile Myslel jsem si, že mám nějakou chybu v javascriptu User Web Page, ale pak jsem si to ověřil přímo v browseru zadáním výše zmíněné URL. Problém jsem vyřešil tak, že naměřené hodnoty získávám http requestem z jiné URL:

192.168.1.251/temp.xml

a na této URL správně dostávám XML se správnými (i zápornými) hodnotami.

Nicméně mě napadlo, že byste o tomto problému chtěli vědět. Předpokládám, že se to dá opravit ve firmwaru ... ale tím si nejsem jistý. Pro upřesnění dodávám, že pracuji jako webový programátor (PHP, SQL, HTML, JAVASCRIPT, CSS). Podle toho můžete formulovat odpověď.

Závěrem mi dovolte poděkovat vám za vaší práci a podporu. Pomocí vaší technologie měřím teploty v topném systému našeho domu a také spotřebu elektřiny. Získané hodnoty mi pomohli významně optimalizovat provoz topného systému i spotřebu elektřiny v domácnosti. Výborná práce!

2

Re: Získání hodnot z teplotních čidel: problém se zápornými hodnotami

Ještě dodávám, že popisované zařízení SDS-MICRO mám umístěné na nezateplené půdě, kde teploty víceméně kopírují venkovní teploty. Takže v zimě tam může být -10°C a v létě 40°C. Mohli tyto mezní teploty způsobit nějaký hardwareový problém? Zařízení ale po všech stránkách pracuje správně: ve webové administraci v sekci "Čidla Teploty" jsem správně viděl i záporné hodnoty teplot.

3

Re: Získání hodnot z teplotních čidel: problém se zápornými hodnotami

Co zapisujete ve vašem SDS-C programu, do obsahu ram[292] (a dalších ram[] pozic) ?

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

4

Re: Získání hodnot z teplotních čidel: problém se zápornými hodnotami

Nedošlo mi, že do ram zapisuju v SDS-C programu - moje chyba.

Našel jsem na disku soubor zobrazeni_teplot_a_posilani_dat_na_eportal.c a ten mám pravděpodobně uložený v zařízení. Nicméně jsem jej uploadoval z nějakého příkladu (pravděpodobně z vašich příkladů) již před léty a nejsem si jistý, jestli je to přesně ten program, který mám v zařízení. Prosím, lze nějak ze zařízení stáhnout aktuální SDS-C program?

Ve výše zmíněném souboru jsem našel funkci nactitemp, která podle mě zapisuje do diskutovaných pozic ram:

nactitemp
{
 _sys=310;
 _ram=292;
 label nactitemp_1:
 if (sys[_sys]>0 && sys[_sys]<20000) {
  ram[_ram]=sys[_sys];
  _pom=_ram+16;
  if (ram[_ram]<ram[_pom]){
   ram[_pom]=ram[_ram];
  }
  _pom=_ram+32;
  if (ram[_ram]>ram[_pom]){
   ram[_pom]=ram[_ram];
  }
 }
 _sys++;
 _ram++;
 if (_sys<326) goto nactitemp_1;
}

Teď už tuším, že problém bude na 4.tém řádku těla funkce:

 if (sys[_sys]>0 && sys[_sys]<20000) {

Myslíte, že postačí odebrat podmínku sys[_sys]>0 ?
Ale důležitá je pro mně otázka z prvího odstavce, jestli můžu nějak stáhnout aktuální SDS-C program ze zařízení. Nejsem si totiž jistý, že citovaný program zobrazeni_teplot_a_posilani_dat_na_eportal.c (který mám uložený na disku) je shodný s programem v zařízení. S programováním v C mám jen základní zkušenosti smile

Děkuji za odpověď.

5

Re: Získání hodnot z teplotních čidel: problém se zápornými hodnotami

Pokud umíte Javascript, tak pro vás C nebude určitě až takový problém, naopak by to snad i mělo být snazší na pochopení a úpravy.
Ano, přesně ta jedna podmínka v tom IF bude ta příčina. Netuším proč tam je, nevím ani, kdo ten program psal, takže zde moc neporadím, ale - přesně v tomto řádku bych sám úpravu provedl.
A doplnil druhý typ testu, a to na hodnotu 85 st.C., což je speciální hodnota určená výrobce čidel DS18B20, kterou čidlo hlásí, pokud je v poruše (ano, pak nejde rozeznat, zda-li je tam zrovna právě 85 st.C. nebo porucha, ale s tím už se nedá nic dělat, takto to navrhli a vyrábějí, ale zase tak moc to nevadí - dá se to snadno programově ošetřit, např. podle historického trendu).

Do SDS se nahrává přeložený program, tedy binární vykonávaný kód, ze kterého zpětně nelze přímo sestavit původní text C programu.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

6

Re: Získání hodnot z teplotních čidel: problém se zápornými hodnotami

Mnohokrát díky za cenné rady, zkusím to upravit a případně se ještě ozvu.

7

Re: Získání hodnot z teplotních čidel: problém se zápornými hodnotami

A není možné si nějak stáhnout a zazálohovat ten binární kód programu ze zařízení? Jde mi o to, abych měl zálohu, ke které se mohu vrátit, pokud by něco nefungovalo. Díky.

8

Re: Získání hodnot z teplotních čidel: problém se zápornými hodnotami

Pro zálohu slouží zdrojový soubor *.c ve kterém je program napsaný. Ze zařízení to vytáhnout nelze - jak už bylo napsáno.