Modbus
Některá zařízení, např. měřiče (meters) nebo nabíječky (chargers), se připojují a adresují pomocí protokolu Modbus.
Konfigurace meter obsahuje typ fyzického připojení (rozhraní), volitelné technické parametry rozhraní, použitý protokol Modbus, jedinečné Modbus ID zařízení na sběrnici a číslo a typ registru, který se má číst nebo zapisovat.
Je důležité vědět, že existují tři různé protokoly Modbus: Modbus RTU, Modbus ASCII a Modbus TCP. Technicky je lze přenášet přes různé typy rozhraní. Klasickou variantou je Modbus RTU přes sériové rozhraní sběrnice RS485, které používá většina měřičů a některé nabíječky. Zařízení s nativním síťovým rozhraním (Ethernet/Wi-Fi) se naproti tomu obvykle adresují protokolem Modbus TCP.
Pokud je potřeba sériové zařízení Modbus připojit přes převodník rozhraní po síti (Ethernet/Wi-Fi/PowerLAN), vytvoří se spojení s protokolem Modbus RTU přes TCP/IP. Protokol Modbus RTU se přitom přenáší po síti přímo (tj. je tunelován). I když je způsob přenosu (TCP/IP) stejný, protokol není totožný s Modbus TCP. Je zásadní rozlišovat mezi protokolem a způsobem přenosu. Modbus RTU přes TCP je něco jiného než Modbus TCP!
Pokud používáte převodník rozhraní, nastavuje se sériová sběrnice pouze na převodníku. Nastavení v evcc se pak týká jen spojení mezi evcc a převodníkem.
Fyzické připojení
Sekce “Fyzické připojení”Sériové připojení (RS485)
Sekce “Sériové připojení (RS485)”Pokud je zařízení připojeno přímo přes adaptér RS485 (Modbus RTU), musí být device a sériové komunikační parametry baudrate a comset zadány podle konfigurace zařízení. Najdete je v návodu k obsluze, v datovém listu nebo v nastavení zařízení.
Například:
source: modbusid: 1device: /dev/ttyUSB0baudrate: 38400comset: "8E1"Přímé síťové připojení
Sekce “Přímé síťové připojení”Pokud je zařízení připojeno přímo přes nativní síťové připojení (Modbus TCP), musí být zadáno uri ve tvaru HOSTNAME:PORT nebo IP:PORT:
Například:
source: modbusid: 1uri: 192.168.0.11:502Sériové zařízení přes síťové připojení (s převodníkem rozhraní)
Sekce “Sériové zařízení přes síťové připojení (s převodníkem rozhraní)”Pokud je sériové zařízení připojeno přes transparentní převodník RS485-IP (bez překladu protokolu), je nutné pomocí rtu: true přepnout protokol na Modbus RTU přes TCP/IP.
Například:
source: modbusid: 1uri: 192.168.0.10:502rtu: true # Modbus RTU přes TCPPředdefinovaná zařízení
Sekce “Předdefinovaná zařízení”Předdefinované modely zařízení (model) odpovídají modelům z MBMD:
ABB ABB A/B-Series meters DDM DDM18SD DZG DZG Metering GmbH DVH4013 meters IEM3000 Schneider Electric iEM3000 series INEPRO Inepro Metering Pro 380 JANITZA Janitza meters MPM Bernecker Engineering MPM3PM meters ORNO1P ORNO WE-514 & WE-515 ORNO1P504 ORNO WE-504 ORNO3P ORNO WE-516 & WE-517 SBC Saia Burgess Controls ALE3 meters SDM Eastron SDM630/120/72DMv2 SDM220 Eastron SDM220 SDM230 Eastron SDM230 SDM72 Eastron SDM72 SEMTR SolarEdge SE-MTR-3YKaždý model, který se od těchto liší, se považuje za typ zařízení SunSpec.
Pomocí value určíte hodnotu, která se má ze zařízení číst. Všechny podporované hodnoty jsou předdefinované v MBMD.
U střídače nebo měřiče kompatibilního se SunSpec se čtené hodnoty zadávají ve formátu model:[block:]point podle definice SunSpec. Například DC výkon na druhém stringu třífázového solárního střídače (odpovídá SunSpec Model 103) se čte takto: value: 103:2:W.
Model zařízení model a Modbus ID id jsou vždy povinné:
Například:
source: modbus---model: sdmvalue: Powerscale: -1 # desetinný koeficient, kterým se násobí výsledek, např. pro převod kW na WInvertování hodnot
Sekce “Invertování hodnot”U měřičů MBMD lze naměřené hodnoty invertovat tak, že před název aliasu přidáte - (znaménko minus).
To se hodí, když se měřiče používají v různých konfiguracích nebo orientacích montáže a je potřeba upravit znaménko naměřených hodnot.
Podporovaná měření
Sekce “Podporovaná měření”Invertování funguje u následujících měření MBMD:
power: celkový výkoncurrents: proudy jednotlivých fází (pole)powers: výkony jednotlivých fází (pole)
Syntaxe
Sekce “Syntaxe”meters: - name: my-meter type: modbus model: sdm power: -Power # invertuje hodnotu výkonuPříklady
Sekce “Příklady”Invertovaný celkový výkon
Sekce “Invertovaný celkový výkon”meters: - name: pv-meter type: modbus model: sdm power: -Power # výkon se invertuje (např. z +1000 W bude -1000 W)Invertované výkony fází
Sekce “Invertované výkony fází”meters: - name: grid-meter type: modbus model: sdm power: Power powers: - -PowerL1 # fáze 1 invertovaná - -PowerL2 # fáze 2 invertovaná - -PowerL3 # fáze 3 invertovanáInvertované proudy (jednotlivé fáze)
Sekce “Invertované proudy (jednotlivé fáze)”meters: - name: grid-meter type: modbus model: sdm power: Power currents: - -CurrentL1 # proud fáze 1 invertovaný - CurrentL2 # proud fáze 2 beze změny - -CurrentL3 # proud fáze 3 invertovanýPřípady použití
Sekce “Případy použití”Chybně namontované měřiče: Pokud je proudový senzor nebo měřič fyzicky namontován v opačném směru, můžete hodnoty opravit softwarově.
Export do sítě vs. spotřeba: Hodí se u solárních měřičů, u kterých je potřeba invertovat znaménko.
Různá orientace proudových transformátorů: U vícefázových instalací s různě orientovanými proudovými transformátory.
Ruční konfigurace
Sekce “Ruční konfigurace”Pokud zařízení Modbus není přímo podporováno nebo pokud se mají číst či zapisovat hodnoty odlišné od předdefinovaných modelů, lze registry Modbus nastavit i ručně.
Kromě obecných nastavení Modbus (viz výše), která jsou stejná jako u předdefinovaných zařízení, je k tomu místo value potřeba definovat registr register. Zadat současně value i register není povoleno.
Definice registru vyžaduje následující parametry:
address: adresa registrutype: typ registru, povolené typy pro čtení jsoucoil,input,holding, typy pro zápis jsouwriteholding,writeholdings,writecoildecode: typ kódování dat. Povoleno je:int16|32|64, uint16|32|64, float32|64 and u|int32s + float32s. U typucoilse kódování ignoruje, ale přesto musí být zadáno. U typuwritecoilmusí být zadánobool8.bitmask: volitelný údaj. Zadaná hodnota se s přečtenou hodnotou spojí operací AND, aby se získaly jednotlivé bity.
Další povolené parametry ruční konfigurace jsou:
scale: desetinné číslo, kterým lze převádět přečtené hodnoty (např. W na kW nebo naopak). Touto hodnotou se násobí přečtená a dekódovaná surová hodnota.timeout: časový limit Modbus. Bez jednotky je hodnota v ns, jinak uveďte jednotku, např. 10s pro 10 sekund.
Například:
source: modbus---register: address: 40070 type: holding # coil, holding nebo input decode: int32 # int16|32|64, uint16|32|64, float32|64 and u|int32s + float32s bitmask: 2 # volitelné: bitová maska, která se použije na přečtenou hodnotu. Zde je maska 0000000000000010b, při hodnotě 0 se ignorujescale: -1.0 # desetinný koeficient, kterým se násobí výsledek, např. pro převod kW na Wtimeout: 2s # časový limit, bez jednotky v nsU dekódování int32s/uint32s se prohodí pořadí slov (nejméně významné slovo jako první), což se hodí u zařízení E3/DC.
Zápis registrů
Sekce “Zápis registrů”Zapisovat lze holding registry i coily. K tomu je nutné zadat buď type: writeholding pro holding registry, nebo type: writecoil pro coily. Pro zápis více registrů (funkční kód 16) je k dispozici typ writeholdings.
type: writeholding vždy zapisuje 16bitový registr (int nebo bool16). Pro decode proto musí být vždy zadáno uint16.
type: writecoil zapisuje coil. Pro decode musí být zadáno bool8.
Například:
source: modbus---register: address: 40070 type: writeholding # writeholding, writeholdings nebo writecoilKompletní příklad
Sekce “Kompletní příklad”Kompletní příklad nabíječky definované uživatelem s rozhraním Modbus (zde Phoenix EM-CP-PP-ETH s IP adresou 192.168.1.10) může vypadat následovně.
Například:
chargers: - type: custom name: CustomCharger status: # Čtení stavu nabíječky # buď A, B, C, nebo F source: modbus id: 180 uri: 192.168.1.10:502 timeout: 3s register: address: 100 type: input # čtení input registru decode: int16 enabled: # Je nabíječka povolená (1), nebo ne (0) source: modbus id: 180 uri: 192.168.1.10:502 register: address: 400 type: coil # čtení coilu decode: bool16 # nehraje roli, ale je povinné enable: # Povolení nabíječky source: modbus id: 180 uri: 192.168.1.10:502 register: address: 400 type: writecoil # zápis coilu decode: bool8 maxcurrent: # Nastavení maximálního proudu source: modbus id: 180 uri: 192.168.1.10:502 register: address: 300 type: writeholding # zápis holding registru decode: uint16