Modbus RTU

Modbus är ett protokoll som länge använts för att avläsa s.k. undermätare. Modbus är egentligen ett kommunikationsprotokoll som i princip går ut på att man frågar en enhet med ett visst nummer om ett värde på enheten på en viss adress.

Vad ett specifikt värde betyder på en särskild adress är upp till implementatören att bedöma. Pga detta så kan olika elmätare ha olika värden på olika adresser, dvs standarden är till viss del ad-hoc.

Det finns många olika elmätare på marknaden som kan läsas av med hjälp av Modbus och alla fungerar olika. Vi har därför tagit fram en felxibel lösning som ska fungera med så många som möjligt. Våra elmätaravläsare kan konfigureras att läsa värden från de flesta elmätare som kommunicerar via Modbus RTU. De kan kommunicera med flera seriekopplade elmätare för att både publicera deras mätarställningar till en MQTT broker och websocket anslutning samt fungera som gateway för Modbus TCP.

Anslutning till elmätaren

Elmätaravläsaren har en RS485 port i form av en kopplingsplint. Denna är markerad med 5V, GND, A+ och B-.

5V och GND är till för strömförsöjning och kan kopplas till ett nätaggregat. Det bör också finnas en koppling mellan jordanslutningen (GND skruven) på elmätaravläsaren och elmätaren.

A+ och B- ska kopplas till motsvarande kopplingpunkter på elmätaren. Notera att det är ”+” och ”-” som ska matcha och inte nödvändigtvis ”A” och ”B”. Vissa elmätare kan vara markerade med A- och B+ och då ska A+ kopplas till B+.

För optimal signalintegritet ska elmätaravläsaren kopplas till elmätaren med en TP kabel där A+ och B- består av ett kabelpar.

Flera elmätare kan kopplas i serie med samma elmätaravläsare.

Strömförsörjning

Enheten kan strömförsörjas via USB, POE (power over ethernet) eller ett DIN monterat 5V nätaggregat.

Tänk på att elmätaren och elmätaravläsaren måste ha en gemensam jordnivå för att kommunikationen ska fungera. Oavsett hur man strömförsörjer enheten så kan man åstadkomma detta genom att dra en kabel mellan GND skruven på enhetens kopplingplint till motsvarande jordanslutning på elmätaren.

Konfiguration

OBS! Följande instruktioner gäller för firmware version 4.0.0 eller senare. Har du en äldre version så kan du läsa guiden Konfigurera Modbus RTU istället.

Enheten använder sig av en yaml-fil på sitt interna filsystem där användaren kan konfigurera vilka enheter som är anslutna via RS485 porten och hur de ska läsas. Man skriver också en lista på vilka parametrar som ska läsas från elmätaren samt hur de ska läsas och hur ofta.

Enheten kan också användes som Modbus brygga (gateway). När den agerar som Modbus brygga så lyssnar den på Modbus anrop på en TCP server. När ett anrop tas emot så görs anropet om till ett Modbus RTU anrop och skickas ut genom elmätaravläsarens RS485 port. Svaret som kommer från elmätaren skickas vidare till TCP anslutningen.

Datatyper som stöds

följande datatyper stöds när enheten läser från elmätaren.

  • int16 – 16 bitars heltal
  • uint16 – 16 bitars positiva heltal
  • int32 – 32 bitars heltal
  • uint32 – 32 bitars positiva heltal
  • float32 – 32 bitars flyttal

Dataformat

Eftersom att Modbus protokollet inte specifierar ordningen för bytes och register när dessa överförs så går detta att ställa in för Modbus enheter samt för deras enstaka parametrar.

Byte ordningen hänsvisar till den ordning som bytes skickas i varje register. Om man sätter parametern flipByteOrder till true så kommer den minst signifikanta byten att lagras först i registret.

Även registerordningen kan ställas in för värden som sträcker sig över flera register (större än 16 bitar). Om parametern flipWordOrder är satt till true så kommer de minst signifikanta 16 bitarna att lagras i det första registret (med mindre registeradress).

Att skriva en konfigurationsfil

Konfigurationsfilen följer ett YAML format och innehåller information om vilka enheter och parametrar som kan läsas och hur de formateras. Följande exempel visar hur filen kan komma att se ut:

Ovanstående exempel kan användas för att läsa den totalt förbrukade och genererade energin från en elmätare av modellen GNM3D från Garo som har ställts in på att kommunicera i hastigheten 115200 baud och har Modbus-adressen 1.

Konfigurationsfilen består av en lista på en eller flera elmätare som enheten har anslutits till. Varje enhet kan ha följande fält:

FältnamnDatatypBeskrivning
namestringEnhetens visningsnamn. Detta bör vara unikt för varje enhet och hjälper dig identifiera vilken mätare ett värde kommer från.
addressstringEnhetens Modbus adress. Denna bör vara unik för varje enhet och motsvara adressen som ställts in på mätaren.
baudintegerkommunikationshastigheten som ska användas för denna elmätare. Standardvärdet 9600kommer att användas om inget annat anges.
flipByteOrderbooleanAnger om värdet ska läsas med omvänd byte ordning. Standardvärdet är true
flipWordOrderbooleanAnger om värdet ska läsas med omvänd word ordning. Standardvärdet är true
parametersParameter[]Lista med parametrar som Modbus servern tillhandahåller. En parameter är ett enstaka värde som kan sträcka sig över flera register. Se nedanstående tabell
Tabell 1. Fält som stöds av enhetsobjekt

Parameter formatet stödjer följande fält:

FältnamnDatatypBeskrivning
functionCodeintegerModbus funktionskoden som används för att anropa parametern.
offsetintegerParameterns första registeradress.
typestringParameterns datatyp. Datatyper som stöds är: int16, uint16, int32, uint32 och float32.
topicstringMQTT topic som mätvärdet kommer att publiceras till. Kom ihåg att det du anger här kommer föregås med enhetens namn.
unitstringMätvärdets enhet (exemplevis ”kWh”).
pollIntervalintegertidsintervall (i sekunder) mellan varje läsning av mätvärdet från elmätaren.
factornumberDen faktor som elmätaren multiplicerar värdet med innan det lagras i registret. Detta kan användas av elmätaren för att lagra värden som heltal utan att tappa decimalplatser. detta fält är inte obligatoriskt och faktorn: 1 kommer att användas om inget annat anges.
flipByteOrderbooleanAnger om värdet ska läsas med omvänd byte ordning för denna enstaka parameter.
flipByteOrderbooleanAnger om värdet ska läsas med omvänd word ordning för denna enstaka parameter.
Tabell 2. Fält som stöds av parameter objekt