Akıllı Üretim

IoT ile Elektrik Alt Sayaçlama: Modbus Enerji Analizörlerinden MQTT'ye

RS-485 hattındaki DIN ray Modbus enerji analizörlerini bir gateway'e bağlayın, register'ları Python ile çözün ve makine bazlı kWh değerlerini bir MQTT broker'a yayınlayın; böylece her makinenin kendi enerji verisi olsun.

RS-485 hattında DIN ray Modbus enerji analizörleri, bir gateway ve bulut broker'a akan MQTT verisiyle IoT elektrik alt sayaçlama kurulumu
Bunu kendi MQTT broker’ınızda çalıştırınFree planla özel, yönetilen bir MQTT broker alın ve hazır kod örnekleriyle başlayın.
Ücretsiz deneyin Kod örnekleri Kart gerekmez

IoT sayaçlarla elektrik alt sayaçlama, tesisin elektrik tüketimini tek bir ana sayaç yerine tek tek makinelere, hatlara ve yardımcı tesislere atar. Bu eğitimde RS-485 hattındaki DIN ray Modbus enerji analizörlerini küçük bir gateway'e bağlayacak, gerilim, akım, güç ve enerji sayaçlarını Python ile okuyacak ve bunları MQTT üzerinden yayınlayacaksınız; böylece her makinenin kendi canlı ve geçmiş enerji verisi olacak.

Neden Makine Seviyesinde Alt Sayaçlama?

Ana sayaç "ne kadar" sorusunu yanıtlar; alt sayaçlar ise "nerede" ve "ne zaman" sorularını. Her büyük makinenin kendi sayacı olduğunda siparişler arasındaki boşta tüketimi görebilir, aynı makineleri karşılaştırabilir, yeni bir sürücünün veya değiştirilmiş bir ayar değerinin etkisini doğrulayabilir ve parça başına enerjiyi raporlayabilirsiniz. Alt sayaçlama aynı zamanda tesis genelinde fabrika enerji izleme uygulamasının ve bir ISO 50001 veri toplama planının ölçüm omurgasıdır.

Sayaç ve Gateway Seçimi

Bileşen Yaygın seçim Notlar
Üç fazlı sayaç RS-485 Modbus RTU'lu, CT girişli DIN ray çok fonksiyonlu sayaç (ör. Eastron SDM630 MCT, diğer üreticilerin benzer modelleri) Register haritasının yayınlanmış olduğunu kontrol edin
Akım trafoları Fidere göre boyutlandırılmış açılabilir (split-core) CT'ler veya Rogowski bobinleri Split-core, kabloları sökmeden sonradan montaja izin verir
Hat Bükümlü çift RS-485, zincirleme (daisy-chain) bağlantı, her iki uçta 120 ohm sonlandırma Tekrarlayıcı olmadan segment başına 32 birim yüke kadar
Gateway USB-RS485 adaptörlü Raspberry Pi, endüstriyel edge PC veya Modbus-TCP'den RTU'ya dönüştürücü Broker'a güvenilir bir ağ yolu gerekir
Yazılım pymodbus ve paho-mqtt ile Python veya Node-RED Aşağıda Python gösterilmiştir

Her sayaca, sayacın ön panelinden yapılandırılan benzersiz bir Modbus adresi (1, 2, 3 vb.) ile aynı baud hızı ve pariteyi verin. Örneklerde 9600 baud, 8 veri biti, paritesiz, 1 stop biti kullanılmıştır.

Sayaçların ve CT'lerin elektrik tesisatı, yerel mevzuata uygun olarak yetkin bir elektrikçi tarafından yapılmalıdır. Sekonder çıkışlı CT'ler, güvenli gerilim çıkışlı tipte değillerse, primerden akım geçerken asla açık devre bırakılmamalıdır.

Register Haritası

Çok fonksiyonlu sayaçlar, ölçümleri iki adet 16 bitlik input register'a yayılmış 32 bitlik IEEE 754 float değerler olarak sunar. SDM630 ailesi için birkaç kullanışlı input register (fonksiyon kodu 04) şunlardır:

Değer Register (ondalık) Birim
Faz 1 gerilimi 0 V
Faz 1 akımı 6 A
Toplam sistem gücü 52 W
Toplam sistem güç faktörü 62 -
Frekans 70 Hz
Toplam çekilen aktif enerji 72 kWh

Diğer sayaçlar farklı adresler, fonksiyon kodları veya kelime sıraları (word order) kullanır. Her zaman üreticinin register belgesinden çalışın; yanlış kelime sırası makul görünen ama tamamen yanlış sayılar üretir.

Gateway Kablolaması

  1. USB-RS485 adaptörünün A ve B (bazen D+ ve D-) uçlarını ilk sayacın A ve B terminallerine bağlayın, ardından diğer sayaçlara zincirleme devam edin. Yıldız topolojilerden kaçının.
  2. Sayaçlarda veya adaptörde dahili sonlandırma yoksa hattın iki fiziksel ucuna 120 ohm sonlandırma dirençleri takın.
  3. Adaptör sağlıyorsa referans topraklamasını bağlayın, özellikle uzun hatlarda.
  4. Adaptörü Raspberry Pi'ye takın ve cihazın göründüğünü doğrulayın:
ls -l /dev/ttyUSB*
sudo usermod -aG dialout $USER     # ardından oturumu kapatıp yeniden açın

python3 -m venv ~/meter-env
source ~/meter-env/bin/activate
pip install "pymodbus>=3.10" paho-mqtt pyserial

IoT Elektrik Alt Sayaçlama Gateway Betiği

Betik her sayacı sırayla sorgular, float değerleri çözer ve beslediği makineyi adlandıran bir topic'e sayaç başına bir JSON mesajı yayınlar. Demo için ücretsiz herkese açık test broker'ını kullanır; üretim varyantı ardından gösterilmiştir.

#!/usr/bin/env python3
"""Electrical sub-metering gateway: Modbus RTU meters -> MQTT."""
import json
import struct
import time

import paho.mqtt.client as mqtt
from pymodbus.client import ModbusSerialClient

BROKER = "broker.connectmq.com"
PREFIX = "connectmq/demo/subm-4q9z/plant1"
POLL_SECONDS = 10

# Modbus adresi -> ölçtüğü makinenin topic yolu
METERS = {
    1: "molding/imm-01",
    2: "molding/imm-02",
    3: "utilities/comp-1",
}

REGISTERS = {               # ad: input register adresi (float32, 2 kelime)
    "v_l1": 0,
    "i_l1": 6,
    "kw": 52,
    "pf": 62,
    "hz": 70,
    "kwh_total": 72,
}


def read_float(modbus, address, unit):
    rr = modbus.read_input_registers(address, count=2, device_id=unit)
    if rr.isError():
        raise IOError(f"Modbus error unit {unit} reg {address}: {rr}")
    return struct.unpack(">f", struct.pack(">HH", *rr.registers))[0]


def read_meter(modbus, unit):
    values = {name: read_float(modbus, reg, unit) for name, reg in REGISTERS.items()}
    values["kw"] = values["kw"] / 1000.0        # sayaç watt cinsinden raporlar
    return {k: round(v, 3) for k, v in values.items()}


def on_connect(client, userdata, flags, reason_code, properties):
    print("MQTT connected:", reason_code)
    client.publish(f"{PREFIX}/gateway/status", "online", qos=1, retain=True)


def main():
    modbus = ModbusSerialClient(
        port="/dev/ttyUSB0", baudrate=9600, bytesize=8, parity="N", stopbits=1, timeout=1
    )
    if not modbus.connect():
        raise SystemExit("Cannot open serial port")

    mqttc = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="subm-gw-4q9z")
    mqttc.will_set(f"{PREFIX}/gateway/status", "offline", qos=1, retain=True)
    mqttc.on_connect = on_connect
    mqttc.connect(BROKER, 1883, keepalive=60)
    mqttc.loop_start()

    while True:
        cycle_start = time.time()
        for unit, path in METERS.items():
            topic = f"{PREFIX}/{path}/energy"
            try:
                payload = {"ts": int(time.time()), "meter": unit, **read_meter(modbus, unit)}
                mqttc.publish(topic, json.dumps(payload), qos=1)
                print(topic, payload)
            except IOError as err:
                mqttc.publish(f"{topic}/error", str(err), qos=1)
                print(err)
            time.sleep(0.05)                         # hattaki sayaçlar arasında kısa bekleme
        time.sleep(max(0, POLL_SECONDS - (time.time() - cycle_start)))


if __name__ == "__main__":
    main()

Çıktıyı herhangi bir makineden Mosquitto istemcisiyle izleyin:

mosquitto_sub -h broker.connectmq.com -p 1883 -i subm-viewer-$RANDOM \
  -t "connectmq/demo/subm-4q9z/plant1/#" -v

Herkese açık MQTT test broker'ı bu ilk test için idealdir, ancak herkes tarafından okunabilir; bu nedenle gerçek üretim ekipmanını bağlamadan önce özel bir broker'a geçin.

Üretime Geçiş

Bağlantı satırlarını değiştirerek gateway'i kimlik doğrulamalı TLS'e taşıyın:

mqttc = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="YOUR_CLIENT_ID")
mqttc.username_pw_set("YOUR_USERNAME", "YOUR_PASSWORD")
mqttc.tls_set()
mqttc.will_set(f"{PREFIX}/gateway/status", "offline", qos=1, retain=True)
mqttc.connect("broker.connectmq.com", 8883, keepalive=60)

ISA-95 hiyerarşisini izlemek için PREFIX değerini kendi ad alanınızla, örneğin connectmq/plant1 ile değiştirin. ConnectMQ bu tür bir yapıyı tanır ve portalında cihazları saha, alan ve hatta göre listeler; bu da birkaç düzine sayaç arasında gezinmeyi kolaylaştırır. Betiği, arızada ve açılışta yeniden başlaması için bir systemd servisi olarak çalıştırın.

Enerjiyi Makinelere Atamak

Makine başına bir topic olduğunda atama oldukça basittir:

  1. Dönem başına enerji: vardiya veya gün sonundaki kwh_total sayaç değerinden başlangıçtaki değeri çıkarın.
  2. Boşta enerji: gücü makine durumuyla birleştirin. Makine durum izleme yazısındaki durumları kullanarak makine boşta veya dururken tüketilen enerji, pek çok tesis için en çok aksiyon alınabilir rakamdır.
  3. Sayaçlanmamış kalan: ana sayaçtan alt sayaçların toplamını çıkarın. Büyük veya büyüyen bir kalan, sayaçlanmamış yüklere ya da bir sayaç yapılandırma hatasına işaret eder.
  4. Parça başına enerji: aynı dönem için makinenin kWh değerini sağlam parça sayısına bölün.

Veri akışını Telegraf veya küçük bir abone ile bir zaman serisi veritabanında saklayın ve bu rakamları orada hesaplayın; broker geçmişi değil, canlı veriyi ve retained son değerleri taşır.

Alt Sayaçlama Yaygınlaştırmasını Planlamak

Önce en büyük tüketicileri sayaçlayın. Bir pens ampermetreyle kısa bir tur atmak ya da motor ve ısıtıcı etiketlerine bakmak, genellikle yükün büyük bir kısmının birkaç makine ve yardımcı tesisten kaynaklandığını gösterir. Bunları ilk hatta bağlayın, veri yolunu uçtan uca doğrulayın ve ancak ondan sonra daha küçük yüklere genişletin.

En baştan bir sayaç kaydı tutun: Modbus adresi, fiziksel konum, fider, CT oranı, montaj tarihi ve yayın yaptığı topic. Bu liste, sistemin başka biri tarafından bakımının yapılabilmesini sağlar ve tam olarak bir enerji denetiminin istediği türden belgelenmiş bilgidir. Bir sayaç değiştirildiğinde, dönem hesaplamalarının doğru kalması için eski sayacın son değerini ve yenisinin ilk değerini kaydedin.

Son olarak, sorgulama aralıklarını amaca göre belirleyin. Canlı panolar ve boşta enerji tespiti için on saniye fazlasıyla yeterlidir; faturalama tarzı raporlar yalnızca sayaç değerlerine ihtiyaç duyar, dolayısıyla uzun bir hatta daha yavaş bir aralık kabul edilebilir.

Alt Sayaçlarda Sorun Giderme

Belirti Olası neden Çözüm
Her sayaçta zaman aşımı A ve B ters bağlanmış, yanlış baud hızı veya parite A/B'yi değiştirin, tüm cihazlarda seri ayarları eşleştirin
Bir sayaçta zaman aşımı Yinelenen veya yanlış Modbus adresi Sayaç ekranındaki adresi kontrol edin
1.4e-38 gibi değerler veya çok büyük sayılar Yanlış kelime sırası veya register ofseti Register haritasını doğrulayın; iki register'ın yerini değiştirmeyi deneyin
Negatif güç CT ters takılmış veya faz uyuşmazlığı CT'yi ters çevirin veya faz atamasını düzeltin
Güç sabit bir katsayıyla fazla Sayaçta yanlış CT oranı yapılandırılmış Doğru primer/sekonder oranını ayarlayın
Uzun hatlarda aralıklı hatalar Eksik sonlandırma veya referans toprak yok Her iki ucu sonlandırın, referans toprağı bağlayın

kWh'nin Ötesinde

Pek çok çok fonksiyonlu sayaç ayrıca toplam harmonik bozulma, faz bazlı değerler ve talep (demand) register'ları da sunar. Bunlar doğrudan güç kalitesi izleme uygulamasını besler; bu da gereksiz açmaları ve aşırı ısınan trafoları açıklamaya yardımcı olur. Herhangi bir Modbus RTU cihazını köprülemeye genel bir bakış için Modbus RTU'dan MQTT'ye yazısına bakın. Akıllı üretim rehberi, alt sayaçlamayı bağlantılı üretimin daha geniş yol haritası içine yerleştirir.

Sayaçlarınızı ConnectMQ'ya Bağlayın

ConnectMQ; TLS, MQTT 5, canlı topic gezgini, ISA-95 cihaz görünümü ve kw veya pf gibi alanlarda eşik uyarıları sunan bir yönetilen MQTT broker hizmetidir. Kredi kartı olmadan ücretsiz bir Serverless broker oluşturun, oluşturulan kimlik bilgilerini yapıştırın ve alt sayaçlarınız çevrimiçi olsun.

Sık Sorulan Sorular

Bir RS-485 hattını kaç enerji analizörü paylaşabilir?

Standart bir RS-485 segmenti 32 birim yüke kadar destekler ve pek çok modern alıcı-verici kesirli yük sunduğundan daha fazlası sığar. Pratikte sınırı sorgulama süresi belirler: hat başına daha fazla sayaç, her sayaç için daha uzun bir döngü anlamına gelir.

Bunun yerine Modbus TCP sayaçlar kullanabilir miyim?

Evet. ModbusSerialClient yerine ModbusTcpClient ve sayacın IP adresini kullanın; register çözümleme ve MQTT yayını aynı kalır.

Gateway kWh değerini güç ölçümlerinden mi hesaplamalı?

Hayır. Sayacın kendi kümülatif enerji register'ını yayınlayın. Bu, sorgular arasında doğrudur ve gateway yeniden başlatmalarına ve kaybolan mesajlara karşı dayanıklıdır.

IoT elektrik alt sayaçlama verisi internet üzerinden güvenli mi?

8883 portunda, her gateway için ayrı verilen kimlik bilgileriyle TLS kullanın. ConnectMQ'da client ID'ler kimlik bilgilerine bağlıdır ve tekrarlanan başarısız oturum açma denemeleri IP engellemesine yol açar.

İlgili yazılar

OEE vs TEEP vs OOE: Hangi Metriği Kullanmalısınız?

OEE, OOE ve TEEP aynı performans ve kalite faktörlerini paylaşır, ancak farklı zaman tabanlarına göre ölçer. Bu karşılaştırma tek bir örnek üzerinden ilerliyor ve her metriğin ihtiyaç duyduğu MQTT sinyallerini listeliyor.

6 dk okuma

Tüm yazılar →

Özel MQTT broker’ınız birkaç tık uzağınızda

Hesabınızı oluşturun, broker kimlik bilgilerinizi alın ve ilk cihazınızı bağlayın — kurulacak, yamalanacak ya da ölçeklendirilecek sunucu yok.