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

    Pomoc s Modbus mapou Energy meter QI Power

    Mervis
    4
    18
    2675
    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

      Jsem tu opět.
      Pokouším se sestavit modbus mapu pro měřící transformátor QI-POWER-485.
      Zařízení mám připojené, komunikace funguje.
      Problém jsou adresy. Bohužel Italové nechtějí komunikovat a v jejich mapě mě pár info chybí.
      Mám již nastaveny elměry od Erniky, tam jede vše v pohodě.
      Může mě někdo pomoci? Jde mě o spodní pravou část v nastavení jednotlivé adresy,m jak se dělají posuny od té první v grupě. Pokoušel jsem se náhodně něco trefit (hledal jsem napětí či frekvenci, abych to dle toho celé pak posunul), ale zatím za dva dny ani ťuk.
      Link na mapu je zde http://www.qeed.it/wp-content/uploads/2014/05/QI-POWER-REGISTER-MAP-05132014.pdf

      Děkuju

      1 Reply Last reply Reply Quote 0
      • J
        jiri.zejbrdlich last edited by

        Zkus tohle 40073 a 40074 je logická adresa napětí ve voltech...fyzická adresa bude 72 a 73. Číst funkcí 0x3 - Read Multiple Registers

        B 1 Reply Last reply Reply Quote 0
        • B
          Beny44 @jiri.zejbrdlich last edited by

          @jiri-zejbrdlich No já jsem na elmeru od Erniky to dělal tak, že jsem si založil skupinu, zadal počáteční adresu (po převodu z hex na dec) a nastavil počet prvků.
          Následně jsem přidával datové body u kterých jsem nastavil délku MultiByte (většinou 4) a Ofsset (podle rozdílu mezi adresou skupiny a adresou bodu). Vždycky to takto šlo.
          Píšeš o logické a fyzické adrese - tedy mám dát do skupiny logickou či fyzickou?
          Funkci Read Multiple Registers v rozbalovači nemám - viz. screen.

          A děkuji.

          0_1547321797369_Read_Holding.jpg

          1 Reply Last reply Reply Quote 0
          • J
            jiri.zejbrdlich last edited by

            Zajímavé to je od logické adresy(číslování pro odlišení - číst můžeš několika funkcemi, takto se to rozliší, proto logická adresa) 40073-napětí, nastav si počáteční adresu(fyzická-skutečný registr a počítáno od nuly) na 72 a začni si funkcí F03 vyčítat napětí, proud výkon atd.

            B 1 Reply Last reply Reply Quote 0
            • B
              Beny44 @jiri.zejbrdlich last edited by

              @jiri-zejbrdlich Stále mám číselné nesmysly.
              Nastavil jsem počáteční adresu skupiny na 72, počet prvků 50. Vlastnosti datového bodu mám typ ST dint (zkouším i jiné - tady vidím možný problém proč to nejde). V parametrech datového bodu mám délku 4 a offset 0 (pro napětí).

              1 Reply Last reply Reply Quote 0
              • J
                jiri.zejbrdlich last edited by jiri.zejbrdlich

                Hodnoty jsou dle manuálu posílány jako real...

                1 Reply Last reply Reply Quote 0
                • T
                  TomasKnot last edited by

                  V případě potřeby lze také nastavit bytové pořadí, v případě jinak-endianového kódování které používají některé vzácnější zařízení.

                  1 Reply Last reply Reply Quote 0
                  • B
                    Beny44 last edited by

                    Děkuji za info.
                    real jsem měl také nastaven, ale i tak se nedařilo. Jsem již ve spojení s panem Kudláčkem a budu mu dnes posílat celý projekt a možná že i popřípadě jedno trafo ma odzkoušení.

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

                      Dobrý den @beny44,
                      projekt jsem dostal, ale vyžaduje si ucelenější odpověď, kterou Vám připravím zítra.

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

                        @beny44

                        Díval jsem se na Váš projekt a začal bych trochu ze široka.

                        1) Zjistit, jak je to skutečně s adresováním
                        Adresování v Modbusu není jednoduché. Existují pojmy jako adresa registru/coilu a číslo registru/coilu. Adresy registrů začínají od 0, kdežto čísla registrů začínají od 1. Tedy registr na adrese 72 je má číslo 73.
                        Výrobce zařízení nebo SW si pak vybírá, jestli v bude používat pro označování registrů adresy, nebo čísla, případně obojí. Pro detailní informací o adresování doporučuji přečíst tento tutorial: https://www.csimn.com/CSI_pages/Modbus101.html

                        Mervis používá čísla registrů/coilů v desítkové soustavě. Tedy Starting Element v nastavení skupiny je číslo prvního registru/coilu, od kterého se budou data do skupiny načítat.

                        Dle modbusové mapy Vašeho elektroměru (http://www.qeed.it/wp-content/uploads/2015/08/QI-POWER-485-Register-Map-082015.pdf) má první registr adresu 40001. Z výše uvedené stránky jste se mohl dočíst, že označování registrů od 40000 a výše znamená, že daný registr je Holding Register a tedy je potřeba využít příslušné Modbusové funkce pro jeho vyčítání.
                        Adresy ale typicky začínají od 0, tedy správně by adresa 1. registru měla být 40000. Je tedy dost dobře možné, že to co Qeed ve své dokumentaci nazývá adresou je ve skutečnosti číslo registru. A je také více než pravděpodobné, že nemusíte vyčítat registr číslo 40001 ale jenom 1... Tak komplikovaný je celý Modbus a je tedy potřeba se na jednoduchých a jednoznačných datech zorientovat.

                        Jednoduchá data jsou ta, které jsou pouze v jednom registru. Např. hodnota "V RMS" (400073) je složitá - obsahuje číslo s pohyblivou řádkou a je roztažena přes několik registrů. Hodnota Delay (40003) sice obsahuje celé číslo, ale jeho výchozí hodnota je 1, tedy stejná jako předchozí a následující registr. Pokud se omylem trefíte s adresou do vedlejšího registru, pak to z jeho hodnoty nemusíte okamžitě poznat.

                        Z dané mapy je na testování vhodný registr "DC Filter" (40007), který by měl obsahovat hodnotu 10. Předchozí registr "Parity" by měl obsahovat hodnotu 1 a následující registr "Flag Measurement" hodnotu 16 (0x10 je zápis v šestnáckové soustavě, tedy 16 v desítkové).

                        Začněte tedy tak, že vytvoříte v Modbusovém zařízení skupinu pro vyčítání Holding Registerů (F03). Počáteční element je to, co nám následně řekne, jak to s adresováním v tomto konkrétním případě vlastně je. Z předchozího rozboru začneme zkoušet několik hodnot:

                        7 - Předpokládáme, že 40007 je ve skutečnosti registr číslo 7
                        8 - Předpokládáme, že 40007 je opravdu adresa, tedy registr číslo 8
                        40007 - Předpokládáme, že 40007 je ve skutečnosti registr číslo 40007
                        40008 - Předpokládáme, že 40007 je opravdu adresa a tedy registr číslo 40008

                        Můj soukromý typ je, že Starting element = 7 by mohl zafungovat. Takto by mělo vypadat nastavení skupiny:

                        0_1547733153682_bd3d2e3f-600d-49c7-b30d-d943cdd0682f-image.png

                        Do této skupiny vytvořte Datapoint, který převede první dva byty do datového typu INT:

                        0_1547733208069_cdeeb21d-ed13-4c11-bc55-ee1dd4ff73d2-image.png

                        A s tímto nastavením zkuste vyčíst hodnotu 10. Pokud se nepodaří, změňte Starting Element u skupiny na další hodnotu ze seznamu, dokud nenarazíte na fungující variantu.

                        Zde bych zatím skončil, dokud nezjistíte, jak to s adresováním je. Poté bychom se podívali na vyčítání více čísel s pohyblivou čárkou a jak ji případně transformovat.

                        S pozdravem,
                        Martin Kudláček

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

                          @martin-kudláček
                          Odzkoušeno na všech hodnotách od začátku mapy. Je to tedy tak, že se začíná od 1. Hodnoty jsou následovné a správné.
                          Machine ID QI power 485 - hodnota 7
                          Firmware version - 34
                          Modbus adress - 1
                          Delay - 1
                          Baudrate - 9600 - 3
                          Parity - NO - 0
                          DC filter - 5 (není 10 jak jste říkal - ikdyž default tak je dle manualu)

                          Tady info o zařízení se ukazuje dobře. Zkoušel jsem i 73 a dále, ale tam se hodnoty mění na obě strany i za mínus znamínko. To bude tou pohyblivou čárkou.0_1547746155308_Qeeed.jpg

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

                            @martin-kudláček Aby nedošlo k špatnému pochopení - 40001 mám nastaveno 1.

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

                              Dobrý den @beny44,
                              zkuste pro vyčítání Vrms vyrobit tuto skupinu:

                              0_1547818668980_eb442f86-787c-45bf-a9d2-ddefa067eca9-image.png

                              A k ní tento datapoint:

                              0_1547818705694_b3b9f637-9ae7-4f22-829a-b5de6016ad1f-image.png

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

                                @martin-kudláček Bohužel toto nejde, hodnoty lítají s použitím real od mínusových hodnot po hodnoty s E na konci. V screenu označené jako DC _filter. Zkoušel jsem i jiné ST, ale i tak jsem hodnotu, kterou jsem hledal nenašel Pokoušel jsem se najít frekvenci. Samozřejmě s jiným počátečním bodem skupiny. 0_1547822531998_DC-Filter.jpg

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

                                  @beny44 Typ REAL je určitě správně, ten tam nechte. Zkuste ještě změnit pořadí MultiByte Parseru:

                                  0_1547823632592_468d77aa-bc64-437c-a4f3-c147e22602d5-image.png

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

                                    @martin-kudláček Perfektní! Tedy pořadí bylo jiné. Děkuji za radu. Sestavím mapu potřebných hodnot a popřípadě transformuji nějaké desetinné čárky, to už dám. Ještě jednou děkuji.
                                    Já se stejně asi ještě ozvu, budu připojovat přes Modbus TCP měnič od SolarEdge (ten bude server). Doufám, že po zadání IP, portu se všechny proměné načtou.

                                    https://www.solaredge.com/sites/default/files/sunspec-implementation-technical-note.pdf

                                    0_1547824034583_Frekvence.jpg

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

                                      @beny44 Ona o tom prohození, resp. pořadí prvků je zmínka v dokumentaci: "Float (LSW First)". To znamená, že datový typ je float - tedy 32bitové číslo s plovoucí desetinnou čárkou, které se v Mervisu používá pod názvem "real". Jelikož je to 32bitů, tak jsou potřeba dva registry. A jelikož specifikace Modbusu nezná pojem datový typ, tak je na výrobci zařízení, jak data "nalije" do 16ti bitových registrů. Zde je to jednoduché - 32bitů přesně sedí na dva registry, takže je rozdělili na dva tzv. wordy (word = 16 bitů). Ty poloviny se označují jako LSW - least significant word, tedy nižší polovina 32bitů a MSW - most significant word, tedy vyšší polovina 32bitů. A poznámkou uvedli, že nižší polovina je v registru 73 a vyšší je v registru 74. Data naparsovaná do skupiny jsou ale v opačném pořadí, tedy je potřeba využít funkci přehazování bajtů.

                                      Modbus je jednoduchý tím, že dává velkou volnost v implementaci. Ale vybere si daň na složitosti při nastavování...

                                      Letmo jsem proběhl dokumentaci ale vypadá to, že zařízení jsou opět Modbus Slave a je možno k nim přistupovat jak přes RS485 tak přes TCP. Nic to ale nemění na tom, že opět budete muset vytvořit obecné modbus zařízení a v něm nakonfigurovat mapu registrů.

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

                                        @martin-kudláček Ano zmínka v manuálu o tom byla, já sám sem si říkal, že by to mohlo být prohozené, ale nikde jsem nenašel, jak má to pořádí být zaspané v Mervisu :-(
                                        A pokud jde o SolarEdge, nemyslím si že máte pravdu.
                                        Modbus TCP je označená měnič, jako server - na straně 7, kde se píše, že server čeká dvě minuty na odezvu klienta a pak se vypne.
                                        U 485 je možnost dvou konektorů, kdy je jeden master a druhý sleve. Já budu mít na 485 pověšený elměr od SolarEdge, tak bych chtěl využít Modbus TCP k vyčítání hodnot z měniče do Axona.

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