K_ACCDELTA: Function Block untuk Perhitungan Delta Akumulator
Dirancang untuk menghitung delta energi atau akumulator dengan sinkronisasi baseline antar meter, tanpa mengganggu logsheet yang berjalan.
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
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
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.