Ditulis oleh Ketut Kumajaya — 16 Oktober 2025

Latar Belakang

Dalam sistem distribusi energi, sering kali terdapat perbedaan waktu pemasangan antara power meter pada sisi sumber dan sisi beban. Akibatnya, nilai akumulasi energi pada beban dapat lebih besar dibandingkan sumber, menghasilkan delta negatif yang tidak realistis.

Untuk mengatasi hal ini, Function Block K_ACCDELTA dikembangkan menggunakan Structured Text (ST) untuk menghitung delta akumulator secara andal, dilengkapi dengan proteksi terhadap nilai negatif dan mekanisme snapshot reset guna menyamakan baseline antar meter.


Struktur Function Block

(*=============================================================================
  Function Block Name : K_ACCDELTA
  Author              : Ketut Kumajaya
  Contributor         : Copilot (Microsoft AI)
  Date Created        : 15/10/2025
  Version             : 1.0
  Description         : Menghitung delta antara dua akumulator energi dengan
                        penyimpanan nilai buffer antar siklus. Dapat berfungsi
                        sebagai delta satu power meter maupun sistem netting
                        (sumber–pengurang). Dirancang untuk sinkronisasi
                        pembacaan energi dari power meter yang tidak
                        terpasang serentak, dengan proteksi nilai negatif.
  Inputs              : srcCur - total energi sumber saat ini (FLOAT)
                        subCur - total energi pengurang saat ini (FLOAT)
                        srcBuf - nilai buffer sumber (FLOAT, disimpan di luar FB)
                        subBuf - nilai buffer pengurang (FLOAT, disimpan di luar FB)
                        reset  - TRUE untuk reset output & snapshot awal (BOOL)
  Outputs             : dSrc   - delta energi sumber (FLOAT)
                        dSub   - delta energi pengurang (FLOAT)
                        eNet   - delta netting (sumber - pengurang) (FLOAT)
                        srcOut - snapshot nilai sumber untuk update buffer (FLOAT)
                        subOut - snapshot nilai pengurang untuk update buffer (FLOAT)
  Proteksi Audit      : - Nilai negatif dipaksa nol
                        - Snapshot hanya diperbarui saat reset
                        - Variabel buffer dikelola di luar Function Block
=============================================================================*)

FUNCTION_BLOCK K_ACCDELTA
VAR_INPUT
    srcCur : FLOAT;
    subCur : FLOAT;
    srcBuf : FLOAT;
    subBuf : FLOAT;
    reset  : BOOL;
END_VAR

VAR_OUTPUT
    dSrc   : FLOAT;
    dSub   : FLOAT;
    eNet   : FLOAT;
    srcOut : FLOAT;
    subOut : FLOAT;
END_VAR

VAR
END_VAR

IF NOT reset THEN
    (* Hitung delta terhadap nilai buffer *)
    dSrc := srcCur - srcBuf;
    IF dSrc < 0.0 THEN dSrc := 0.0; END_IF;

    dSub := subCur - subBuf;
    IF dSub < 0.0 THEN dSub := 0.0; END_IF;

    (* Netting antara sumber dan pengurang *)
    eNet := dSrc - dSub;
    IF eNet < 0.0 THEN eNet := 0.0; END_IF;
ELSE
    (* Reset semua output *)
    dSrc := 0.0;
    dSub := 0.0;
    eNet := 0.0;
    (* Snapshot nilai sekarang untuk pembaruan buffer *)
    srcOut := srcCur; (* gunakan untuk update srcBuf eksternal *)
    subOut := subCur; (* gunakan untuk update subBuf eksternal *)
END_IF;

END_FUNCTION_BLOCK

Penjelasan

Function Block ini dirancang minimalis, tanpa penyimpanan state internal. Seluruh baseline (srcBuf, subBuf) dikelola secara eksternal, sehingga blok ini dapat digunakan lintas plant tanpa perlu modifikasi besar.

  • Proteksi nilai negatif — memastikan delta energi tidak pernah bernilai negatif, menjaga akumulator tetap monoton meningkat.
  • Snapshot reset — baseline hanya diperbarui saat reset dilakukan.
  • Auditability — setiap aksi reset dapat dicatat sebagai baseline baru, menjaga transparansi pelaporan dan rekonsiliasi data.

Selain mode netting (dua meter: sumber dan pengurang), blok ini juga mendukung mode single-meter delta. Pada mode ini, input subCur dan subBuf diisi 0.0, sehingga K_ACCDELTA berfungsi sebagai kalkulator delta untuk satu power meter saja, di mana eNet = dSrc.


Reset Logis di Level DCS

Reset pada K_ACCDELTA dilakukan di level DCS, bukan pada power meter fisik. Power meter terus mengakumulasi total energi tanpa pernah direset, sedangkan reset di DCS hanya menetapkan baseline baru sebagai titik awal perhitungan delta berikutnya tanpa mengubah nilai aktual di meter.

Reset ini berfungsi sebagai sinkronisasi baseline antar power meter, memastikan perhitungan delta tetap akurat meskipun waktu pemasangan atau status akumulasi antar meter berbeda.

Pendekatan ini memiliki beberapa keuntungan:

  • Tidak memerlukan akses konfigurasi langsung ke power meter.
  • Aman terhadap kesalahan pembacaan maupun sistem billing.
  • Fleksibel dan dapat diterapkan lintas sistem.
  • Baseline reset dapat diaudit melalui rekam operasi DCS.

Mekanisme reset logis ini tidak mengganggu logsheet maupun histori energi. Nilai akumulasi tetap tercatat normal, sementara baseline baru hanya memengaruhi perhitungan delta pada sisi DCS.


Flowchart

%%{init: {'themeVariables': { 'fontSize': '14px', 'primaryColor': '#e8f0fe', 'edgeLabelBackground':'#ffffff'}}}%% flowchart TD A["Mulai"] --> B["Apakah reset = TRUE?"] B -- Ya --> C["Snapshot buffer eksternal:
srcOut = srcCur
subOut = subCur"] B -- Tidak --> D["Hitung delta sumber:
dSrc = srcCur - srcBuf"] D --> E["Hitung delta pengurang:
dSub = subCur - subBuf"] E --> F["Hitung energi bersih:
eNet = dSrc - dSub"] C --> G["Kirim output:
dSrc, dSub, eNet, srcOut, subOut"] F --> G G --> H["Selesai"] A:::Pine B:::Peach C:::Ash D:::Ash E:::Ash F:::Ash G:::Ash H:::Pine classDef Peach stroke-width:2px, stroke-dasharray:none, stroke:#FBB35A, fill:#FFEFDB, color:#8F632D classDef Pine stroke-width:2px, stroke-dasharray:none, stroke:#254336, fill:#27654A, color:#FFFFFF classDef Ash stroke-width:2px, stroke-dasharray:none, stroke:#999999, fill:#EEEEEE, color:#000000
K_ACCDELTA: Perhitungan delta energi dengan proteksi negatif dan fungsi reset

Kesimpulan

Function Block K_ACCDELTA menghitung delta energi dengan proteksi nilai negatif dan mekanisme snapshot reset. Dengan desain yang minimalis dan modular, FB ini dapat digunakan baik untuk netting dua meter maupun single-meter delta, serta mendukung auditabilitas lintas plant. Reset dilakukan secara logis di DCS, memungkinkan pembaruan baseline kapan pun tanpa memengaruhi nilai akumulasi pada power meter.