Modbus
Nogle enheder, f.eks. målere (meters) eller opladere (chargers), tilsluttes og adresseres via Modbus-protokollen.
meter-konfigurationen omfatter typen af fysisk forbindelse (interface), valgfrie tekniske interfaceparametre, den anvendte Modbus-protokol, enhedens unikke Modbus-ID på bussen samt nummeret og typen af det register, der skal læses eller skrives.
Det er vigtigt at være opmærksom på, at der findes tre forskellige Modbus-protokoller: Modbus RTU, Modbus ASCII og Modbus TCP. Teknisk set kan de overføres via forskellige typer interfaces. Den klassiske variant er Modbus RTU via et serielt RS485-businterface, som bruges af de fleste målere og nogle opladere. Enheder med et indbygget netværksinterface (Ethernet/WiFi) adresseres derimod typisk via Modbus-TCP-protokollen.
Hvis en seriel Modbus-enhed skal tilsluttes gennem en interfacekonverter via et netværk (Ethernet/WiFi/PowerLAN), køres Modbus-RTU-protokollen over en TCP/IP-forbindelse. Protokollen overføres uændret over netværket (dvs. tunnelleret). Selvom transportmetoden (TCP/IP) er den samme, er protokollen IKKE den samme som Modbus TCP. Det er afgørende at skelne mellem protokol og transportmetode. ”Modbus (RTU) over TCP” er noget andet end Modbus TCP!
Ved en konfiguration med interfacekonverter indstilles den serielle buskonfiguration udelukkende på konverteren. evcc-konfigurationen vedrører så kun forbindelsen frem til konverteren.
Fysisk forbindelse
Sektion kaldt “Fysisk forbindelse”Seriel forbindelse (RS485)
Sektion kaldt “Seriel forbindelse (RS485)”Hvis enheden er tilsluttet direkte via en RS485-adapter (Modbus RTU), skal device og de serielle kommunikationsparametre baudrate og comset angives i overensstemmelse med enhedens konfiguration. Se enhedens brugsanvisning, datablad eller systemindstillinger.
Eksempel:
source: modbusid: 1device: /dev/ttyUSB0baudrate: 38400comset: "8E1"Direkte netværksforbindelse
Sektion kaldt “Direkte netværksforbindelse”Hvis enheden er tilsluttet direkte via en indbygget netværksforbindelse (Modbus TCP), skal der angives en uri bestående af HOSTNAME:PORT eller IP:PORT:
Eksempel:
source: modbusid: 1uri: 192.168.0.11:502Seriel enhed via netværksforbindelse (med interfacekonverter)
Sektion kaldt “Seriel enhed via netværksforbindelse (med interfacekonverter)”Hvis en seriel enhed er tilsluttet via en mellemliggende, transparent RS485-IP-interfacekonverter (uden protokoloversættelse), skal protokollen desuden skiftes til Modbus RTU over TCP/IP-forbindelsen med rtu: true.
Eksempel:
source: modbusid: 1uri: 192.168.0.10:502rtu: true # Modbus RTU over TCPForuddefinerede enheder
Sektion kaldt “Foruddefinerede enheder”De integrerede, foruddefinerede enhedsmodeller (model) svarer til dem i 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-3YEnhver model, der afviger fra disse, behandles som en SunSpec-enhedstype.
Med value angiver du den værdi, der skal læses fra enheden. Alle understøttede værdier er foruddefinerede i MBMD.
For en SunSpec-kompatibel inverter eller måler angives de værdier, der skal læses, i formatet model:[block:]point i henhold til SunSpec-definitionen. Hvis du f.eks. vil hente DC-effekten på den anden streng i en trefaset solcelleinverter (svarende til SunSpec Model 103), skriver du: value: 103:2:W.
Enhedens model og slave-ID’et id er altid påkrævet:
Eksempel:
source: modbus---model: sdmvalue: Powerscale: -1 # kommatalsfaktor, der anvendes på resultatet, f.eks. til omregning fra kW til WNegering af værdier
Sektion kaldt “Negering af værdier”For MBMD-målere kan fortegnet på måleværdierne vendes ved at sætte et - (minustegn) foran aliasnavnet.
Det er nyttigt, når målere bruges i forskellige konfigurationer eller monteringsretninger, og fortegnet på måleværdierne skal tilpasses.
Understøttede målinger
Sektion kaldt “Understøttede målinger”Negering virker for følgende MBMD-målinger:
power- Samlet effektcurrents- Strømme pr. fase (array)powers- Effekt pr. fase (array)
Syntaks
Sektion kaldt “Syntaks”meters: - name: my-meter type: modbus model: sdm power: -Power # vender effektværdienEksempler
Sektion kaldt “Eksempler”Vendt samlet effekt
Sektion kaldt “Vendt samlet effekt”meters: - name: pv-meter type: modbus model: sdm power: -Power # Effekten vendes (f.eks. bliver +1000 W til -1000 W)Vendt effekt pr. fase
Sektion kaldt “Vendt effekt pr. fase”meters: - name: grid-meter type: modbus model: sdm power: Power powers: - -PowerL1 # Fase 1 vendt - -PowerL2 # Fase 2 vendt - -PowerL3 # Fase 3 vendtVendte strømme (enkelte faser)
Sektion kaldt “Vendte strømme (enkelte faser)”meters: - name: grid-meter type: modbus model: sdm power: Power currents: - -CurrentL1 # Strøm fase 1 vendt - CurrentL2 # Strøm fase 2 normal - -CurrentL3 # Strøm fase 3 vendtTypiske anvendelser
Sektion kaldt “Typiske anvendelser”Forkert monterede målere: Hvis en strømsensor eller måler er fysisk installeret i den forkerte retning, kan du rette værdierne i softwaren.
Eksport til elnettet kontra forbrug: For solcellemålere, hvor fortegnskonventionen skal vendes.
Forskellig orientering af strømtransformere: For flerfasede installationer med forskelligt orienterede strømtransformere.
Manuel konfiguration
Sektion kaldt “Manuel konfiguration”Hvis Modbus-enheden ikke understøttes direkte, eller hvis der skal læses eller skrives andre værdier end dem i de foruddefinerede modeller, kan Modbus-registrene også konfigureres manuelt.
Til det formål skal der ud over de generelle Modbus-indstillinger (se ovenfor) defineres et register i stedet for en value som ved foruddefinerede enheder. Det er ikke tilladt at angive både value og register.
Definitionen af et register kræver følgende parametre:
address: Registeradressentype: Registertypen. Tilladte læsetyper ercoil,inputogholding, og tilladte skrivetyper erwriteholding,writeholdingsogwritecoil.decode: Dataenes kodningstype. Tilladte værdier er:int16|32|64, uint16|32|64, float32|64 and u|int32s + float32s. For typencoilignoreres kodningen, men den skal stadig angives. For typenwritecoilskalbool8angives.bitmask: En valgfri angivelse. Den angivne værdi kombineres med den læste værdi via AND for at udtrække enkelte bits.
Andre tilladte parametre i en manuel konfiguration er:
scale: Kommatal, der kan bruges til at omregne læste værdier (f.eks. W til kW eller omvendt). Værdien ganges med den læste og afkodede råværdi.timeout: Modbus-timeout. Uden enhed er værdien i ns, ellers angives enheden, f.eks. 10s for 10 sekunder.
Eksempel:
source: modbus---register: address: 40070 type: holding # coil, holding eller input decode: int32 # int16|32|64, uint16|32|64, float32|64 og u|int32s + float32s bitmask: 2 # Valgfri: en bitmaske, der anvendes på den læste værdi. Her er masken 0000000000000010b. Den ignoreres, hvis værdien er 0scale: -1.0 # kommatalsfaktor, der anvendes på resultatet, f.eks. til omregning fra kW til Wtimeout: 2s # timeout, uden enhed i nsVed kodningerne int32s/uint32s byttes ordrækkefølgen om (mindst betydende ord først), hvilket er nyttigt for E3/DC-enheder.
Skrivning af registre
Sektion kaldt “Skrivning af registre”Både holding-registre og coils kan skrives. Angiv i så fald type: writeholding for holding-registre eller type: writecoil for coils. Til skrivning af flere registre (funktionskode 16) findes typen writeholdings.
type: writeholding skriver altid et 16-bit-register (int eller bool16). Derfor skal der altid angives uint16 for decode.
type: writecoil skriver en coil. For decode skal bool8 angives.
Eksempel:
source: modbus---register: address: 40070 type: writeholding # writeholding, writeholdings eller writecoilKomplet eksempel
Sektion kaldt “Komplet eksempel”Et komplet eksempel på en brugerdefineret oplader med Modbus-interface (her en Phoenix EM-CP-PP-ETH med IP-adressen 192.168.1.10) kunne se sådan ud:
Eksempel:
chargers: - type: custom name: CustomCharger status: # Læs opladerens status # Enten A, B, C eller F source: modbus id: 180 uri: 192.168.1.10:502 timeout: 3s register: address: 100 type: input # Læs et input-register decode: int16 enabled: # Er opladeren aktiveret (1) eller ej (0) source: modbus id: 180 uri: 192.168.1.10:502 register: address: 400 type: coil # Læs en coil decode: bool16 # Uden betydning, men påkrævet enable: # Aktivér opladeren source: modbus id: 180 uri: 192.168.1.10:502 register: address: 400 type: writecoil # Skriv en coil decode: bool8 maxcurrent: # Indstil den maksimale strøm source: modbus id: 180 uri: 192.168.1.10:502 register: address: 300 type: writeholding # Skriv et holding-register decode: uint16