IEC 62056 Elektrik Sayacı Simülatörü

Geliştiriciler, test mühendisleri ve gömülü sistem tasarımcıları için IEC 62056-21 uyumlu TCP tabanlı elektrik sayacı simülatörü. Gerçek donanıma ihtiyaç duymadan entegrasyonlarınızı test edin.

  • Short/default readout (OBIS 1.8.0, 1.7.0, 32.7.0, tarih/saat)
  • 15 dk aralıklı yük profili (P.01) simülasyonu
  • TCP üzerinden IEC 62056 benzeri mesaj akışı
Elektrik Sayacı Simülatör
Elektrik sayacı illüstrasyonu
Seri No 12345678
Toplam Enerji 0012345.67 kWh
Anlık Güç 0001.42 kW
Gerilim 230.4 V

Bu Proje Ne Yapar?

IEC 62056-21 protokolüne benzer bir akışla, elektrik sayacını tamamen yazılım tabanlı olarak simüle eder. Gerçek ölçüm yapmaz; bunun yerine zaman içinde artan, pozitif ve tutarlı bir enerji tüketim profili oluşturur.

Short / Default Readout

Tipik sayaçlarda olduğu gibi /?! handshake ve ACK050 sonrasında, seri numarası, toplam tüketim, anlık güç, gerilim ve tarih/saat bilgilerini içeren bir short readout üretir.

Yük Profili (Load Profile)

15 dakikalık aralıklarla (veya test için hızlandırılmış periyotlarla) tüketim değerleri kaydeder. Bu değerler hem dosyaya (P.01(YYMMDDhhmm)(vvvv.vv)) yazılır hem de protokol üzerinden sorgulanabilir.

Geliştirici Dostu Mimari

TCP sunucu, protokol katmanı ve sayaç çekirdeği birbirinden ayrıdır. Böylece UI, gerçek donanım entegrasyonu veya ek OBIS komutlarını kolayca ekleyebilirsiniz.

Mimari Genel Bakış

Proje, gerçek bir sayacın davranışını modüler katmanlara bölerek simüle eder. Aşağıdaki görsel, TCP client'tan sayaç çekirdeğine ve yük profili dosyasına kadar olan veri akışını üst düzeyde özetler.

IEC 62056 MeterSim mimarisini gösteren diyagram: TCP client, TCP sunucu, protokol katmanı, sayaç çekirdeği ve yük profili dosyası arasındaki veri akışı

Protokol Akışı

Simülatör, seri port yerine TCP kullanır; ancak mesaj akışı klasik IEC 62056-21 sayacı ile aynıdır.

1. Handshake

Client → Meter  : /?!<CR><LF>
Meter  → Client : /ISK5ME382-1003<CR><LF>

2. ACK & Short Readout

Client → Meter  : ACK050<CR><LF>
Meter  → Client : 
 0.0.0(12345678)
 1.8.0(0012345.67*kWh)
 2.8.0(0000123.45*kWh)
 1.7.0(0001.42*kW)
 32.7.0(230.4*V)
 0.9.1(14:22:31)
 0.9.2(24-01-01)
 !

3. Load Profile (P.01)

Client → Meter: 
  P.01(YYMMDDhhmm)(YYMMDDhhmm)
  Ör: P.01(2401010000)(2401020000)
Meter  → Client :
  P.01(2401010000)(0000.42)
  P.01(2401010015)(0000.38)
 ...
 !

Hızlı Başlangıç

1. Simülatörü Çalıştırın

python run_simulator.py --host 127.0.0.1 --port 5000 \
  --interval-seconds 10

Yukarıdaki örnek, 15 dakikalık intervali test için 10 saniyeye düşürür. Gerçekte 15 dk kullanmak için --interval-seconds 900 parametresini verebilirsiniz.


python run_simulator.py --host 127.0.0.1 --port 5000 --meter-id ZD5ME666-667

Özel port ve meter-ID örneği.

2. TCP Client ile Bağlanın

telnet 127.0.0.1 5000
/?!<Enter>
ACK050<Enter>
P.01(2401010000)(2401012359)<Enter>

İsterseniz kendi STM32 / UART köprünüzle de aynı mesajları göndererek entegrasyon testleri yapabilirsiniz.

TCP Client Test Uygulaması

Meter_Client_Test.py, simülatöre belirli aralıklarla bağlanıp hem kimlik/short readout hem de seçtiğiniz tarih aralığı için yük profili (P.01) sorgulayan basit bir test client'ıdır.

1. Client Ne İşe Yarar?

Bu script, gerçek bir uygulama veya gömülü cihazın yapacağı çağrıları taklit eder:

  • Belirtilen IP/port'a TCP bağlantısı açar.
  • /?! gönderip sayaç ID'sini okur.
  • ACK050 gönderip short/full OBIS readout cevabını alır.
  • P.01(start)(end) komutu ile yük profili verilerini çeker.
  • Belirlediğiniz saniye aralığında bu işlemi tekrarlar (sürekli izleme).

2. Nasıl Çalıştırılır?

python Meter_Client_Test.py --host 127.0.0.1 --port 5000 \
  --interval 10 --start 2603171000 --end 2603171050

Argümanlar:

  • --host: Sayaç simülatörünün IP adresi (varsayılan 127.0.0.1).
  • --port: TCP portu (varsayılan 5000).
  • --interval: Sorgular arasındaki bekleme süresi/sn (varsayılan 10).
  • --start: Yük profili başlangıç zamanı YYMMDDhhmm formatında (varsayılan 2603171000).
  • --end: Bitiş zamanı (YYMMDDhhmm). Boş bırakılırsa script çalıştığı andaki zamanı kullanır.

3. İletişim Akışı (Sequence Diagram)

Client ile simülatör arasındaki istek akışı: TCP connect, handshake, OBIS readout, load profile sorgusu ve döngü

4. Örnek Çıktı

Starting TCP client...
Target: 127.0.0.1:5000
Interval: 10 sec
Load profile range: 2603171000 - 2603171050

--- New Query ---
ID Response:
/ISK5ME382-1003

ACK Response:
0.0.0(12345678)
1.8.0(0000025.73*kWh)
1.7.0(0001.42*kW)
32.7.0(230.4*V)
0.9.1(10:50:00)
0.9.2(26-03-17)
!

Load Profile Response:
P.01(2603171048)(0000.51)
P.01(2603171049)(0000.45)
P.01(2603171050)(0000.54)
!...

5. Yük Profili Dosyaları

Simülatör, ürettiği yük profilini ve toplam endeksi disk üzerinde iki dosyada saklar. Bu dosyalar, sayaç belleği gibi davranır ve uygulama yeniden başlasa bile tüketim toplamının korunmasını sağlar.

meter_data.txt (Yük Profili Kayıtları)

Her satır bir interval için tüketimi temsil eder:

P.01(2603171048)(0000.51)
P.01(2603171049)(0000.45)
P.01(2603171050)(0000.54)
...

Format: P.01(YYMMDDhhmm)(vvvv.vv) → verilen zaman diliminde tüketilen enerji (kWh).

meter_data_total_endex.txt (Toplam Endeks)

Son zaman damgası ve toplam tüketim bilgisini içerir:

last_timestamp(2603171050)
total_import(25.73)

Uygulama başlatıldığında bu dosya okunur ve 1.8.0 OBIS değeri (toplam enerji) bu endekse göre ayarlanır. Böylece sayaç, gerçek bir cihaz gibi kaldığı yerden devam eder.

Kaynak Kod ve İndirme

Projeyi doğrudan GitHub üzerinden inceleyebilir veya Python uygulamasının sıkıştırılmış halini indirerek hızlıca deneyebilirsiniz.

Günlük Tüketim Görselleştirme

Simülatörün ürettiği yük profili ile, günlük tüketimi basit ama şık bir bar grafik olarak görselleştirebilirsiniz.

Örnek Günlük Yük Profili Toplam ≈ 12.34 kWh (1.8.0 ≈ 12.34 kWh)
00:00
0000.42
00:15
0000.38
00:30
0000.35
...
...
23:45
0000.41