• Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search

    Vyčítání dat z Axon Modbus server - datové typy

    Mervis
    2
    3
    613
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      Beny44 last edited by Beny44

      Dobrý den,

      řídím Axonem FVE - přetoky do bojleru a vyčítám s ním data z jednotlivých elměrů a měniče.
      Mám jej i jako Modbus server na posílání dat do své databáze - přes Weintek cMT-SVR-100. Data v typu uint se zobrazují všude dobře - velikost údajů ve vždy menší než typ uint 65536.
      Potřebuji ale zobrazit číslo větší, řekněme 105000. Hrál jsem si s všemy datovými typy, ale vždy je číslo jiné než ve skutečnosti. Zajímavé je, že v mein v ladění se vždy číslo ukazuje dobře. Myslel jsem si, že je chyba na straně klienta, ale připojil jsem se na Axona Mudbu scanerem a hodnota byla stejná, jako na straně klienta, tedy jiá než ve skutečnosti.
      Přikládám scren, typ na výstupu je dint, stejně jako u proměné na serveru.
      Díky za možné rady.

      Vysvětlení:
      tři hodnoty typu uint sčítám a následně potřebuji toto číslo odečíst od 160000. Určitě budou chyby v těch jednotlivých převodech. Tady na screenu mě zůstal real, ale teď jsem jej nahradil a stále je číslo na výstupu jiné.

      0_1554880609910_dint.jpg

      Martin Kudláček 2 Replies Last reply Reply Quote 0
      • Martin Kudláček
        Martin Kudláček @Beny44 last edited by

        Dobrý den @beny44,
        Modbus nedefinuje datové typy, takže je na obou stranách - slavu a masteru - aby se dohodli, v jakém formátu si data pomocí 16ti bitových registrů budou vyměňovat. Pro celočíselné hodnoty > 65535, nebo pro čísla s desetinnou čárkou je potřeba využít více registrů. Je tedy potřeba zajistit, aby se např. 32bitová hodnota rozdělila na dvě 16ti bitové a na druhé straně se zase správně složila. Ale správný systém neexistuje a jednotlivý výrobci si to řeší po svém. Někdy je nižší word uložený v nižším registru a vyšší ve vyšším, někdy je to naopak a někdy se prohazují i jednotlivé byty. Zkuste pořadí wordů, pokud máte možnost, na masteru přehodit. V EasyBuilderu pro displeje Weintek se to dělá v dialogu nastavení Modbus zařízení:

        0_1555310288245_1d06c15d-d896-4ba7-9b89-4c7b921a2be0-image.png

        1 Reply Last reply Reply Quote 0
        • Martin Kudláček
          Martin Kudláček @Beny44 last edited by

          A ještě dovětek @beny44. Pokud přidáváte do Modbus server zařízení proměnné, které jsou větší jak 16 bitů, musíte jim ručně udělat místo na dva registry:

          0_1555314353324_ad20c98b-fcf9-427b-b793-8bea2546f76b-image.png

          cislo16bit zabírá pouze jeden registr, proto cislo32bit může být na registru č. 2.
          cislo32bit_2 musí být až na registru č. 4, protože předchozí cislo32bit si zabere registry 2 a 3.
          cislo16bit_2 musí být až na registru č. 5, protože předchozí cislo32bit_2 si zabere registry 4 a 5.

          S pozdravm,
          Martin Kudláček

          1 Reply Last reply Reply Quote 0
          • First post
            Last post