Sesi 13 dari 16

Implementasi Praktis &
Integrasi SCADA / ICS

Dari algoritma di kertas ke sistem kontrol nyata β€” bagaimana kontrol adaptif diimplementasikan di PLC, DCS, dan diintegrasikan ke dalam arsitektur SCADA infrastruktur kritis Indonesia.

Arsitektur SCADA PLC & DCS Pipeline Implementasi Keamanan Siber ICS Pemilihan Metode Studi Kasus PLN Python HIL Simulator
πŸ–₯️
Topik 13.1
Arsitektur SCADA & Hirarki Kontrol Industri
🏒 Analogi β€” Struktur Komando Militer

Bayangkan sistem pertahanan dengan 4 tingkat: Markas Pusat (kebijakan nasional), Komando Wilayah (koordinasi regional), Komandan Lapangan (instruksi operasional), dan Prajurit (eksekusi langsung). SCADA bekerja persis sama! Setiap level punya kecepatan dan tanggung jawab berbeda β€” level bawah bekerja dalam milidetik, level atas dalam menit atau jam.

LEVEL 4
Enterprise / MES
Perencanaan produksi, ERP, analitik bisnis. Koneksi ke internet (DMZ). Siklus: menit–jam.
SAP, Oracle, Historian
LEVEL 3
SCADA / HMI
Supervisory control, visualisasi proses, alarm management, setpoint dari operator. Siklus: detik–menit.
Ignition, WinCC, iFIX
LEVEL 2
DCS / BPCS
Distributed Control System. Kontrol loop regulasi, sekuens, batch. Siklus: 100ms–detik.
ABB 800xA, Honeywell PKS
LEVEL 1
PLC / RTU / Field Devices
Eksekusi kontrol real-time langsung ke aktuator. Kontrol adaptif diimplementasi di sini. Siklus: 1–100ms.
Siemens S7, Allen Bradley

πŸ“ Di Mana Kontrol Adaptif Diimplementasi?

  • Level 1 (PLC/RTU): Gain Scheduling, PID auto-tuning, MRAC sederhana β€” kode dioptimasi untuk eksekusi real-time cepat dalam bahasa IEC 61131-3 (Structured Text, Ladder Diagram)
  • Level 2 (DCS): STR, Fuzzy PID, MRAC lebih kompleks β€” lingkungan yang lebih kaya komputasi
  • Level 3 (SCADA): RL, ANFIS, NN besar β€” dijalankan sebagai advisory system atau setpoint optimizer; hasilnya dikirim ke DCS/PLC
πŸ”§
Topik 13.2
PLC vs DCS: Memilih Platform yang Tepat
πŸš— Analogi β€” Mobil Sport vs Bus Kota

PLC seperti mobil sport: cepat, tangkas, cocok untuk misi tertentu yang sederhana dan cepat. DCS seperti bus kota: kapasitas besar, banyak penumpang (sinyal), rute panjang (proses kompleks), tapi tidak secepat mobil sport. Pilihan bergantung skala dan kompleksitas proses yang dikendalikan!

AspekPLC (Programmable Logic Controller)DCS (Distributed Control System)
Kecepatan scan1–10 ms (sangat cepat)100 ms–1 s (lebih lambat)
Jumlah I/ORatusanRibuan–puluhan ribu
Cocok untukKontrol sekuensial, mesin, motion controlProses kontinu: kilang, pembangkit, pabrik kimia
PemrogramanIEC 61131-3 (Ladder, ST, FBD)FBD, CFC, grafcet β€” lingkungan terintegrasi
RedundansiOpsional (tambahan biaya)Built-in, dirancang untuk keandalan tinggi
Kontrol adaptifGain scheduling, MRAC orde rendahSTR, Fuzzy PID, ANFIS sederhana
Contoh produkSiemens S7-1500, Rockwell Studio 5000ABB 800xA, Emerson DeltaV, Yokogawa CENTUM

Bahasa Pemrograman IEC 61131-3 untuk Kontrol Adaptif

πŸ“ Contoh: MRAC Sederhana dalam Structured Text (ST)
(* Parameter MRAC β€” dideklarasi di blok VAR *)
VAR
  theta1, theta2 : REAL := 1.0;
  gamma : REAL := 0.05; (* learning rate *)
  y_ref, y_plant, e : REAL;
END_VAR

(* Di dalam program cycle β€” dieksekusi tiap scan *)
e := y_ref - y_plant;
theta1 := theta1 - gamma * e * y_plant;
theta2 := theta2 - gamma * e * r_input;
u_output := theta1 * y_plant + theta2 * r_input;

⚠️ Batasan Real-Time: Apa yang Bisa & Tidak Bisa di PLC

  • Bisa: PID, Gain Scheduling, MRAC orde 1–2, simple fuzzy (lookup table), filter digital
  • Sulit: RLS dengan matriks besar, backpropagation NN, ANFIS β€” operasi floating-point banyak menghabiskan waktu scan
  • Tidak bisa real-time (perlu offload ke SCADA server): Deep RL, training NN, optimisasi MPC horizon panjang
  • Solusi modern: Edge computing β€” server AI kecil terpasang di dekat PLC, komunikasi via OPC-UA
πŸ—‚οΈ
Topik 13.3
Pipeline Implementasi: Dari Algoritma ke Produksi
πŸ—οΈ Analogi β€” Membangun Gedung: Tidak Langsung Pasang Atap

Tidak ada kontraktor yang langsung memasang atap tanpa pondasi. Implementasi kontrol adaptif di infrastruktur kritis juga punya urutan ketat β€” melewati setiap tahap validasi sebelum masuk ke sistem nyata. Skip satu tahap bisa berarti blackout atau kecelakaan industri!

Identifikasi Sistem & Pemodelan

Kumpulkan data operasional historis. Lakukan identifikasi sistem (bisa dengan RLS offline atau step response test). Bangun model matematis atau NN identifier sebagai dasar desain kontroller.

Desain & Tuning Algoritma (Offline)

Pilih metode kontrol adaptif yang sesuai (lihat Topik 13.5). Tuning parameter di lingkungan Python/MATLAB dengan model dari langkah 1. Analisis stabilitas, robustness, dan respons terhadap gangguan.

Model-in-the-Loop (MIL) Testing

Jalankan algoritma Python/Simulink terhubung dengan model sistem secara penuh. Uji semua skenario operasional: startup, shutdown, gangguan, kondisi ekstrem. Tidak ada hardware fisik.

Hardware-in-the-Loop (HIL) Testing

Algoritma dijalankan di hardware target (PLC/controller nyata) terhubung ke simulator plant real-time (misalnya dSPACE atau National Instruments). Validasi timing, komunikasi, dan performa real-time.

Factory Acceptance Test (FAT)

Pengujian end-to-end di laboratorium vendor sebelum instalasi ke lokasi. Melibatkan tim instrumentasi, keselamatan, dan operasional. Semua skenario kegagalan (failure mode) diuji.

Site Acceptance Test (SAT) & Commissioning

Instalasi di lokasi nyata. Jalankan awal dalam mode shadow (kontrol adaptif berjalan tapi tidak mengeksekusi aktuator β€” hanya monitor perbedaan output). Setelah yakin, aktifkan secara penuh dengan mode fallback ke PID manual jika ada anomali.

Monitoring, Drift Detection & Retuning

Setelah live, monitor terus-menerus via SCADA historian. Deteksi performance degradation (model drift). Jadwalkan retuning berkala atau gunakan parameter adaptation yang sudah dirancang.

πŸ”’
Topik 13.4
Keamanan Siber ICS: Ancaman Nyata untuk Infrastruktur Kritis
🦠 Analogi β€” Virus di Sistem Imun yang Sudah Melemah

Sistem SCADA lama dirancang di era sebelum internet β€” seperti tubuh yang tumbuh tanpa paparan penyakit. Ketika tiba-tiba terhubung ke jaringan korporat dan internet, sistem ini tidak punya "antibodi" (mekanisme keamanan). Serangan siber pada ICS bukan hanya mencuri data β€” bisa langsung merusak fisik peralatan atau mematikan layanan kritis!

Insiden NyataTahunDampakVektor Serangan
Stuxnet (Iran β€” PLTN Natanz)20101.000+ sentrifugal uranium rusakUSB + zero-day Siemens PLC
Ukrainian Power Grid2015225.000 rumah tanpa listrik 6 jamSpear-phishing + BlackEnergy malware
Triton/TRISIS (Saudi Arabia)2017Safety Instrumented System dinonaktifkanSerangan langsung ke Safety PLC
Colonial Pipeline (AS)2021Distribusi BBM terganggu 6 hariRansomware via VPN tanpa MFA
Oldsmar Water Plant (Florida)2021Sodium hydroxide nyaris 100Γ— dinaikkanRemote access terbuka tanpa autentikasi

🚨 Implikasi untuk Sistem Kontrol Adaptif

  • Kontrol adaptif yang terhubung ke jaringan (untuk update model, data collection) menciptakan attack surface baru
  • Musuh bisa memanipulasi data sensor yang masuk ke adaptation law β†’ parameter ΞΈ diarahkan ke nilai yang tidak stabil (adversarial attack)
  • Model NN yang di-update secara online bisa "diracuni" dengan data palsu (data poisoning)
  • Wajib terapkan: IEC 62443 (standar keamanan ICS), network segmentation, dan anomaly detection untuk semua parameter adaptif
πŸ“ Defense-in-Depth untuk ICS dengan Kontrol Adaptif
Internet / Corporate Network
   β†“ [Firewall Level 1]
DMZ (Data Historian, Reporting Server)
   β†“ [Firewall Level 2 β€” unidirectional jika memungkinkan]
SCADA / HMI Network (Level 3)
   β†“ [Industrial Firewall / Data Diode]
Control Network (DCS Level 2)
   β†“ [Air gap atau managed switch]
Field Network: PLC, RTU, Sensor (Level 1)

Kontrol adaptif online harus terisolasi:
Parameter update tidak boleh bisa dimodifikasi dari luar tanpa autentikasi multi-faktor
🎯
Topik 13.5
Panduan Pemilihan Metode Kontrol Adaptif
🩺 Analogi β€” Dokter Memilih Obat yang Tepat

Dokter tidak memberi semua pasien obat yang sama. Dia mendiagnosis dulu: kondisi apa, seberapa parah, ada alergi apa, berapa budget pasien. Pemilihan metode kontrol adaptif serupa β€” tidak ada metode yang "selalu terbaik". Setiap konteks punya trade-off yang berbeda!

βœ… Model matematika tersedia
βœ… Sistem berubah lambat
βœ… Safety-critical
β†’ MRAC / STR

Jaminan stabilitas Lyapunov. Dapat diverifikasi secara formal. Cocok: pembangkit listrik, proses kimia.

βœ… Operating point jelas
βœ… Ada pakar / data historis
⚠️ Nonlinier sedang
β†’ Gain Scheduling

Paling mudah diimplementasi di PLC. Sudah banyak terbukti. Cocok: turbin angin, HVAC, kompresor.

βœ… Ada pengetahuan pakar
βœ… Interpretabilitas penting
⚠️ Data training terbatas
β†’ Fuzzy / ANFIS

Mudah dijelaskan ke operator. Bisa diinisialisasi dari SOP. Cocok: kontrol proses berbasis pengalaman operator.

βœ… Data historis sangat banyak
βœ… Nonlinier kompleks
⚠️ Interpretabilitas tidak kritis
β†’ Neural Network

Akurasi tertinggi untuk sistem kompleks. Butuh validasi ekstensif. Cocok: identifikasi fault, prediksi beban.

βœ… Simulator plant tersedia
βœ… Multi-objective
⚠️ Safety bisa dipastikan offline
β†’ Reinforcement Learning

Terbaik untuk optimasi jangka panjang multi-tujuan. Training harus di simulator. Cocok: energy management, scheduling.

βœ… Keandalan tertinggi
βœ… Sudah ada PID berjalan
βœ… Perubahan minimal ke sistem
β†’ Auto-tuning PID + GS

Risiko terendah. Upgrade incremental dari PID konvensional. Cocok: retrofitting sistem lama tanpa downtime.

⚑
Topik 13.6
Studi Kasus: Implementasi di PLTGU Muara Karang
🏭 Skenario: Upgrade Kontrol Turbin Gas di PLTGU Muara Karang, Jakarta

PLTGU Muara Karang menyuplai listrik untuk Jakarta Utara dan sekitarnya. Sistem kontrol lamanya menggunakan PID statis yang di-tune saat komisioning 15 tahun lalu β€” ketika karakteristik turbin masih fresh. Setelah 15 tahun beroperasi, efisiensi turun 8% dan osilasi frekuensi lebih sering saat terjadi perubahan beban mendadak (peak demand malam hari). Tim SCADA memutuskan upgrade ke Gain Scheduling + MRAC hybrid.

FaseAktivitasDurasiTools
1. AssessmentAnalisis data historis SCADA 3 tahun, identifikasi penyebab degradasi, mapping operating points2 bulanPython, PI Historian
2. PemodelanSystem identification dari step test saat maintenance window, validasi model transfer function turbin per zona beban1 bulanMATLAB System ID Toolbox
3. DesainDesain 4 zona gain scheduling (idle, partial, rated, peak), tambah MRAC layer untuk kompensasi drift parameter2 bulanMATLAB/Simulink
4. MIL + HILUji di simulator Simulink, lalu porting ke Siemens S7-1500 + dSPACE HIL simulator3 bulanSimulink + dSPACE
5. CommissioningShadow mode 2 minggu, lalu bumpless transfer ke adaptive mode saat beban stabil, monitoring intensif 3 bulan5 bulanSiemens WinCC SCADA

πŸ“Š Hasil Setelah 6 Bulan Operasi Adaptif

  • Deviasi frekuensi peak-to-peak turun dari Β±0.4 Hz menjadi Β±0.15 Hz saat perubahan beban mendadak
  • Efisiensi thermal turbin naik kembali 5.5% karena operating point selalu optimal
  • Frekuensi alarm kontrol turun 65% (operator lebih tenang, risiko kesalahan manusia berkurang)
  • ROI dicapai dalam 14 bulan dari penghematan bahan bakar gas alam
🐍
Topik 13.7
Python: Simulasi Hardware-in-the-Loop (HIL) Sederhana

Kode berikut mensimulasikan konsep HIL: kontroller (dijalankan di "PLC virtual") dan plant simulator berjalan dalam loop yang sinkron, saling bertukar data melalui antarmuka yang meniru komunikasi OPC-UA. Ini adalah fondasi dari HIL testing sebelum deploy ke hardware nyata.

Python 🐍 β€” hil_adaptive_demo.py
import numpy as np
import matplotlib.pyplot as plt
import time

# ==========================================
# SIMULASI HIL: GAIN SCHEDULING + MRAC
# untuk Kontrol Frekuensi Turbin Gas
# "Plant Simulator" ↔ "PLC Controller"
# ==========================================

# === PLANT SIMULATOR (mensimulasikan turbin gas) ===
class GasTurbinePlant:
    def __init__(self):
        self.freq  = 50.0     # frekuensi awal 50 Hz
        self.power = 0.0      # daya output MW (normalized)
        self.M     = 10.0     # inertia konstan
        self.D     = 1.5      # damping
        # Parameter berubah seiring waktu (simulasi degradasi)
        self.M_true = 10.0

    def step(self, u_gen, P_load, dt, t):
        # Parameter drift setelah t=100s (simulasi degradasi nyata)
        self.M_true = 10.0 - 0.02*(t > 100) * min(t-100, 150)
        df = (u_gen - P_load - self.D*(self.freq-50)) / self.M_true
        self.freq += df * dt
        return self.freq

# === PLC CONTROLLER (mensimulasikan kode Structured Text di PLC) ===
class AdaptivePLCController:
    def __init__(self):
        # Gain Scheduling: 3 zona berdasarkan |error frekuensi|
        self.zones = {
            'normal':  {'Kp':8.0,  'Ki':1.2, 'thresh':0.2},
            'moderate':{'Kp':14.0, 'Ki':2.0, 'thresh':0.6},
            'large':   {'Kp':22.0, 'Ki':3.5, 'thresh':9999},
        }
        self.integral = 0.0
        self.prev_e   = 0.0
        # MRAC layer untuk kompensasi drift
        self.theta    = 1.0    # adaptive gain multiplier
        self.gamma    = 0.005  # learning rate
        self.zone_hist = []

    def select_zone(self, err_abs):
        for name, z in self.zones.items():
            if err_abs <= z['thresh']: return name, z
        return 'large', self.zones['large']

    def compute(self, freq_meas, setpoint, dt):
        e      = setpoint - freq_meas
        e_abs  = abs(e)
        zone_name, zone = self.select_zone(e_abs)
        self.zone_hist.append(zone_name)

        # Gain Scheduling: Kp, Ki dari zona
        Kp_eff = zone['Kp'] * self.theta    # MRAC mengalikan gain
        Ki_eff = zone['Ki'] * self.theta

        self.integral = np.clip(self.integral + e*dt, -5, 5)
        u = np.clip(Kp_eff*e + Ki_eff*self.integral, -2.0, 2.0)

        # MRAC adaptation law: update theta berdasarkan tracking error
        # Jika |e| naik dari sebelumnya β†’ theta perlu naik
        de = e - self.prev_e
        self.theta += self.gamma * e * de
        self.theta  = np.clip(self.theta, 0.5, 3.0)
        self.prev_e = e
        return u

# === SIMULASI LOOP HIL ===
dt       = 0.02
T_total  = 300
t_arr    = np.arange(0, T_total, dt)
N        = len(t_arr)

# Profil gangguan beban (MW, normalized)
P_load = np.zeros(N)
P_load[int(20/dt):int(60/dt)]   = 0.5   # load step +0.5
P_load[int(80/dt):int(120/dt)]  = -0.3  # load drop
P_load[int(150/dt):int(200/dt)] = 0.8   # besar setelah degradasi
P_load[int(230/dt):]              = 0.4

def run_hil(use_adaptive):
    plant  = GasTurbinePlant()
    ctrl   = AdaptivePLCController()
    f_hist, u_hist, theta_hist = [], [], []
    for k, t in enumerate(t_arr):
        f_meas = plant.freq + 0.005*np.random.randn()  # sensor noise
        if use_adaptive:
            u = ctrl.compute(f_meas, 50.0, dt)
        else:
            # PID statis baseline (satu zona saja)
            e = 50.0 - f_meas
            ctrl.integral = np.clip(ctrl.integral + e*dt, -5, 5)
            u = np.clip(10.0*e + 1.5*ctrl.integral, -2, 2)
        plant.step(u, P_load[k], dt, t)
        f_hist.append(plant.freq)
        u_hist.append(u)
        theta_hist.append(ctrl.theta)
    return np.array(f_hist), np.array(u_hist), np.array(theta_hist), ctrl.zone_hist

f_pid,   u_pid,   _, _            = run_hil(use_adaptive=False)
f_adp,   u_adp,   theta_h, zones  = run_hil(use_adaptive=True)

# === PLOT HASIL HIL ===
fig, axes = plt.subplots(3, 1, figsize=(13, 10))

axes[0].plot(t_arr, f_pid, color='tomato', lw=1.5, alpha=0.8, label='PID Statis')
axes[0].plot(t_arr, f_adp, color='lime',   lw=2.0,             label='GS + MRAC Adaptif')
axes[0].axhline(50, color='orange', ls='--', lw=1.5, label='Setpoint 50 Hz')
axes[0].fill_between(t_arr, 49.8, 50.2, alpha=0.07, color='lime', label='Zona Β±0.2 Hz')
axes[0].axvline(100, color='yellow', ls=':', lw=1.5, alpha=0.6)
axes[0].annotate('Degradasi\ndimulai', xy=(100,50.3), color='yellow', fontsize=9)
axes[0].set_ylabel('Frekuensi (Hz)')
axes[0].set_title('HIL Test: GS+MRAC vs PID Statis β€” Kontrol Frekuensi Turbin Gas')
axes[0].legend(fontsize=9); axes[0].grid(alpha=0.3)

axes[1].plot(t_arr, theta_h, color='orange', lw=1.8, label='ΞΈ MRAC (adaptive gain multiplier)')
axes[1].axhline(1.0, color='white', ls='--', lw=1, alpha=0.4, label='ΞΈ=1 (nominal)')
axes[1].axvline(100, color='yellow', ls=':', lw=1.5, alpha=0.6)
axes[1].set_ylabel('ΞΈ (MRAC param)')
axes[1].set_title('ΞΈ Naik Otomatis setelah Degradasi: MRAC Mendeteksi & Mengkompensasi')
axes[1].legend(); axes[1].grid(alpha=0.3)

axes[2].plot(t_arr, P_load, color='red',    lw=2, label='Gangguan Beban')
axes[2].plot(t_arr, u_adp,  color='cyan',   lw=1.5, label='Output Kontrol Adaptif')
axes[2].plot(t_arr, u_pid,  color='tomato', lw=1.2, alpha=0.6, ls='--', label='Output PID Statis')
axes[2].set_xlabel('Waktu (s)'); axes[2].set_ylabel('Daya (p.u.)')
axes[2].set_title('Beban vs Output Kontrol β€” Adaptif lebih responsif di kondisi post-degradasi')
axes[2].legend(fontsize=9); axes[2].grid(alpha=0.3)

plt.tight_layout(); plt.show()

rmse_pid = np.sqrt(np.mean((f_pid - 50)**2))
rmse_adp = np.sqrt(np.mean((f_adp - 50)**2))
print(f"\nπŸ“Š RMSE Deviasi Frekuensi:")
print(f"   PID Statis : {rmse_pid:.4f} Hz")
print(f"   GS + MRAC  : {rmse_adp:.4f} Hz")
print(f"   Improvement: {(1-rmse_adp/rmse_pid)*100:.1f}%")
print(f"\nβœ… ΞΈ final = {theta_h[-1]:.3f} β€” MRAC berhasil kompensasi degradasi turbin!")

πŸ“Š Interpretasi Hasil HIL Demo

  • Plot 1: Sebelum degradasi (t<100s), keduanya mirip. Setelah degradasi dimulai, GS+MRAC tetap stabil sedangkan PID statis semakin berosilasi
  • Plot 2: ΞΈ naik otomatis setelah t=100s β€” MRAC "menyadari" bahwa gain perlu dinaikkan karena sistem melemah. Ini persis seperti yang terjadi di tugas dari insinyur SCADA!
  • Plot 3: Output kontrol adaptif lebih agresif saat gangguan besar β€” sesuai zona gain scheduling β€” tapi kembali tenang saat error kecil

πŸ’‘ Dari Demo ini ke Sistem Nyata

  • Ganti GasTurbinePlant.step() dengan data real dari OPC-UA server SCADA
  • Ganti AdaptivePLCController.compute() dengan kode Structured Text yang identik logikanya di PLC Siemens/ABB
  • Tambahkan mekanisme watchdog: jika ΞΈ keluar dari batas [0.5, 3.0], alarm ke operator dan fallback ke PID statis
  • Log semua parameter adaptif ke historian untuk audit trail dan analisis drift berkala

🧠 Kuis Pemahaman Sesi 13

1. Dalam hirarki SCADA, di level mana kontrol adaptif real-time (seperti MRAC atau Gain Scheduling) paling tepat diimplementasi?

2. Mengapa tahap Hardware-in-the-Loop (HIL) penting sebelum commissioning di infrastruktur kritis?

3. Pada insiden Stuxnet, apa yang membuat serangan siber ini sangat berbahaya dibanding serangan IT biasa?