M-Bus Gateway
← Tilbage til blog
· M-Bus· wired· EN 13757· protokol· master-slave· bus· UART· varmemåler· måler

M-Bus wired protokol — master-slave, signalniveauer og topologi

M-Bus wired (EN 13757-2): master-slave topologi, signalniveauer, multidrop bus, adressering, kommunikationssekvens og forskellen fra wM-Bus trådløs.

Af M-Bus Gateway

M-Bus wired er forgængeren til wM-Bus — stadig udbredt i ældre bygninger og varmecentraler. Her er den tekniske opbygning.


M-Bus vs. wM-Bus: Hvornår bruger man hvad?

M-Bus wired (EN 13757-2):
  → 1990'erne–2010: Standard i nye bygninger
  → 2-leder bus (signalkabel)
  → Op til 250 målere pr. master
  → Rækkevidde: 1.000m (standard), 4.000m (repeatere)
  → Hastighed: 300, 2.400 eller 9.600 baud
  → Bruges stadig i: Fjernvarmecentraler, store installationer
  → Kræver kabling — ikke praktisk til renovering

wM-Bus (EN 13757-4):
  → 2010+: Standard i nye installationer
  → Trådløs 868 MHz (Norden: 169 MHz alternativ)
  → Rækkevidde: 50-200m indendørs
  → Ingen kabling — god til renovering og HCA-skift

Hvornår bruge M-Bus wired?
  → Eksisterende kablede installationer (ældre ejendomme)
  → Varmecentraler (fordelingsstation med mange målere i kælder)
  → Industri (EMI-miljøer hvor radio ikke er pålideligt)
  → Varmemålere der mangler radio-modul

Signallag: M-Bus elektrisk protokol

M-Bus bruger current loop signalering (ikke RS-232 spænding):

Hviletilstand (Mark/Logisk 1):
  → Master sender: 36V DC på bus
  → Ström: 1mA (hvile)

Logisk 0 (Space):
  → Master sender: 36V → 24V (spændigsfald)
  → Slave detekterer spændingsfald som logisk 0

Slave → Master kommunikation:
  → Slave modulerer strøm (ikke spænding)
  → Logisk 1: 1,5mA
  → Logisk 0: 11-20mA (current loop modulation)
  → Master detekterer strømvariationer via shunt-resistor

Elektrisk karakteristik:
  Busspænding:  36V DC (±5V)
  Load pr. slave: Max 1,5mA hvile + 20mA peak
  Max belastning: 250 mA → max ~125 målere pr. master ved 2mA pr. måler
  Kabel: Standard telekabel (0,8mm kobber), IKKE UTP Ethernet
  Polaritet: Ikke-polaritetsafhængig (kan vendes 180°)

Adressering: Primær og sekundær

Primær adressering (1 byte, 0-250):
  → Simpel men begrænset: Kun 250 adresser pr. master
  → Konfigureres af installatør
  → Brugt til: Enkle installationer, direkte aflæsning

Sekundær adressering (8 bytes):
  → Fabrikant-ID (2 bytes) + Serienummer (4 bytes) + Version + Type
  → Global unik adresse (samme som wM-Bus)
  → Wildcard-søgning: Frekvensinddelingsalgoritme (binary search)
  → Nødvendig ved: Mere end 250 målere, auto-discovery

Auto-discovery (sekundær):
  1. Master sender WILDCARD (FF FF FF FF FF FF FF FF)
  2. Alle målere svarer
  3. Master deler bitvis → identificerer én måler ad gangen
  4. Gentages til alle målere identificeret
  Tidsforbrug: ~2-5 min pr. 100 målere

Kommunikationssekvens

M-Bus kommunikation (master initieret — slave svarer aldrig uopfordret):

1. Master → Slave: REQ_UD2 (Request User Data 2)
   → Start byte: 10h
   → C-felt: 5Bh (REQ_UD2)
   → Adresse: 05h (primær adresse 5)
   → Checksum
   → Stop byte: 16h

2. Slave → Master: RSP_UD (Response User Data)
   → L-felt: Payload-længde
   → Data records (DIB+VIB+data) — samme format som wM-Bus
   → Checksum
   → Stop byte: 16h

Timing:
  → Master venter 330ms (standard) på svar
  → Lange payloads: 500ms–2s
  → Polling alle 60 målere ved 2400 baud: ~3 min

Python M-Bus library:
  pip install pyMeterBus  # Implements EN 13757-3 application layer

Topologi og kabler

Star-topologi (anbefalet til nye installationer):
  Master → Hub → Slave 1
                → Slave 2
                → Slave 3
  Fordel: Nemmere fejlfinding, isoleret kabesfejl

Bus-topologi (eksisterende installationer):
  Master ─── Slave 1 ─── Slave 2 ─── Slave 3
  Fordel: Mindre kabling
  Ulempe: Ét kabelbrud = alle mister forbindelse

Terminering:
  → IKKE nødvendig (current loop, ikke differentielt signal)
  → Ingen pullup/pulldown resistorer nødvendige

Kabellængde vs. impedans:
  0-1.000m:  Standardkabel (0,8mm)
  1-4.000m:  Kræver repeater ELLER tykkere kabel (1,5mm)
  > 4.000m:  Anbefal wM-Bus i stedet — trådløs er lettere at udvide

Multiplexer til M-Bus:
  → En enkelt RS-232/USB serial port er master
  → USB-til-M-Bus converter: ex. Relay MBus Master
  → 1 USB = op til 32 eller 250 slaver (afhænger af converter)

Integration med platformen

# Platform: Læs M-Bus wired via serial port
# (Brugt ved fjernvarmemålere i kælder-central)

import serial
import meterbus  # pyMeterBus library

async def read_mbus_meter(
    port: str,  # "/dev/ttyUSB1" (separat fra wM-Bus dongle /dev/wmbus)
    address: int,  # Primær M-Bus adresse 0-250
) -> dict:
    with serial.Serial(port, 2400, 8, "E", 1, timeout=1.0) as ser:
        # Ping meter:
        meterbus.send_ping_frame(ser, address)
        frame = meterbus.load(meterbus.recv_frame(ser))

        # Request data:
        meterbus.send_request_frame(ser, address)
        data_frame = meterbus.load(meterbus.recv_frame(ser))

    return {
        "address": address,
        "manufacturer": data_frame.header.manufacturer_id.decode(),
        "serial": data_frame.header.identification_no,
        "records": [
            {"value": r.value, "unit": r.unit}
            for r in data_frame.records
        ],
    }

Konklusion

M-Bus wired er stadig relevant i ældre og store installationer med eksisterende kabling. Protokollen bruger current loop signalering på 2-leder bus — polaritetsuafhængig og robust. Sekundær adressering via 8-byte global adresse er identisk med wM-Bus header. For nye installationer foretrækkes wM-Bus trådløs (ingen kabling, men kortere rækkevidde).

Se wM-Bus teknisk guide eller OMS standard guide.