PROMOS fórum

FRED - grafické vývojové prostředí => FRED - platforma XCom => Téma založeno: libor 16.09.2011, 07:49:44



Název: Nefungují nulové vif a dif
Přispěvatel: libor 16.09.2011, 07:49:44
Na PL2 mám projekt s modulem M-Bus, který čte data z měřiče tepla. Mám nulové hodnoty vif a dif a na výstupech vidím data měřiče. Úplně stejně jsem to udělal na XCOM-21 a nefunguje to. Proč?

Dotaz zaslaný mailem (viz výzva (http://forum.elsaco.cz/index.php?topic=13.msg112#msg112)).


Název: Re: Nefungují nulové vif a dif
Přispěvatel: libor 16.09.2011, 07:53:05
Platorma PL2 (CCPU-02/03/21) a XCOM mají různé možnosti. U PL2 byla možnost zobrazit první data ve zprávě při ponechání nulových hodnot vif a dif, protože nikde není vidět odpověď měřiče.

Na XCOM je vidět odpověď měřiče (výstup out u modulů pro M-Bus komunikaci). Pokud si u zobrazovacího labelu nastavíte formát zobrazení hexadecimálně a počet bajtů nastavíte na 1, tak uvidíte celou odpověď. Z toho se dají jednoduše zjistit vif a dif dat, které měřič v odpovědi posílá.

Na přiloženém obrázku je vidět odpověď měřiče.

(připojené soubory vidí pouze registrovaní uživatelé (http://forum.elsaco.cz/index.php?action=register))


Název: Re: Nefungují nulové vif a dif
Přispěvatel: libor 16.09.2011, 08:20:04
Data začínají na 20. bajtu (počítáno od 1), jak je vidět na prvním obrázku.

Nejprve zpráva obsahuje dif - pokud je nahozen nejvyšší bit (0x80), tak se do výsledné podoby difu započítává další bajt (maximálně 4 po sobě jdoucí bajty). Dále zpráva pokračuje položkou vif - opět stejně jako u dif - pokud je nahozen nejvyšší bit (0x80), tak se do hodnoty vifu započítává další bajt (opět maximálně 4 po sobě jdoucí bajty).

Nejnižší 4 bity položky dif rozhodují o délce dat a o tom, jak budou data interpretována. možnosti jsou následující:
  • 1 - celé číslo o délce 1 bajt
  • 2 - celé číslo o délce 2 bajty
  • 3 - celé číslo o délce 3 bajty
  • 4 - celé číslo o délce 4 bajty
  • 5 - desetinné číslo o délce 4 bajty
  • 6 - celé číslo o délce 6 bajtů (XCOM uloží pouze poslední 4 bajty)
  • 7 - celé číslo o délce 8 bajtů (XCOM uloží pouze poslední 4 bajty)
  • 9 - BCD číslo o délce 1 bajt
  • 10 - BCD číslo o délce 2 bajty
  • 11 - BCD číslo o délce 3 bajty
  • 12 - BCD číslo o délce 4 bajty
  • 14 - BCD číslo o délce 4 bajty

Na druhém přiložené obrázku je vyznačena první dvojice dif (0x108C) a vif (0x06) - data jsou typu 12 (nejnižší 4 bity z dif = 0x108C je 0xC = 12), nebo-li BCD o délce 4 bajty, takže za dif a vif následují 4 bajty dat. Následně začíná dif další datové položky v odpovědi.

(připojené soubory vidí pouze registrovaní uživatelé (http://forum.elsaco.cz/index.php?action=register))