Inisiatif HMI Modern Berbasis Open Source: Studi Kasus Plant Monitoring

Inisiatif HMI Modern Berbasis Open Source: Studi Kasus Plant Monitoring

Pengantar

Di tengah tuntutan efisiensi dan fleksibilitas dalam dunia otomasi industri, sistem HMI (Human-Machine Interface) menjadi komponen yang sangat vital. HMI yang baik memungkinkan operator untuk memantau dan mengendalikan proses industri secara intuitif, dengan menyediakan visualisasi data dan kondisi sistem secara real-time. Namun, sistem HMI tradisional seringkali terjebak dalam keterbatasan perangkat keras dan perangkat lunak proprietary yang mahal dan kurang fleksibel.

"HMI bukan hanya soal tampilan, tapi tentang bagaimana manusia berinteraksi dengan mesin secara efektif."

Seiring berkembangnya teknologi open source, solusi HMI berbasis open source muncul sebagai alternatif yang menarik. Penggunaan perangkat lunak dan platform terbuka tidak hanya mengurangi biaya lisensi, tetapi juga memberikan fleksibilitas tinggi dalam hal kustomisasi dan integrasi dengan berbagai sistem industri yang berbeda. Secara global, semakin banyak industri beralih ke solusi open source untuk meningkatkan fleksibilitas sistem otomasi mereka, mempercepat inovasi, dan mengurangi ketergantungan pada vendor proprietary.

"Open source bukan hanya pilihan teknologi, tapi strategi untuk membangun sistem yang lebih adaptif dan berkelanjutan."

Di sinilah penerapan Rapid SCADA, Node-RED, dan alat bantu lainnya dalam pengembangan sistem HMI menjadi sangat relevan. Rapid SCADA dipilih berkat kombinasi antara skalabilitas, stabilitas, serta komunitas pengembang aktif yang mendukung pengembangan berkelanjutan, menjadikannya platform yang ideal untuk implementasi di berbagai skala proyek industri.

"Rapid SCADA adalah platform open source untuk membangun sistem SCADA dan HMI berbasis web, yang menawarkan fleksibilitas tinggi, dukungan protokol luas, dan kemampuan kostumisasi mendalam."

Artikel ini bertujuan untuk mendokumentasikan inisiatif penerapan HMI modern berbasis open source di salah satu plant industri, dengan fokus pada pemanfaatan Node-RED untuk berkomunikasi dengan PLC, Rapid SCADA untuk monitoring, serta integrasi perangkat keras seperti PLC Siemens S7-300 dan remote I/O MOXA E1242. Dalam artikel ini, kami juga akan membahas tantangan dan solusi yang dihadapi selama implementasi, serta keuntungan dari adopsi teknologi open source dalam sistem HMI yang efisien dan hemat biaya.

"Di tengah tantangan keterbatasan perangkat proprietary dan kebutuhan skalabilitas, pendekatan open source ini menjadi jawaban yang strategis."

Arsitektur Sistem

Sistem ini dirancang dengan pendekatan modular, yang memungkinkan skalabilitas dan fleksibilitas tinggi sesuai dengan kebutuhan berbagai ukuran proyek industri. Arsitektur ini juga mendukung berbagai sistem operasi, baik itu Windows, Linux, maupun embedded Linux, sehingga dapat dengan mudah diimplementasikan pada perangkat keras yang ada di lapangan tanpa mengkhawatirkan keterbatasan platform.

Salah satu keputusan penting dalam desain ini adalah penggunaan OPC UA (Unified Architecture) sebagai protokol komunikasi utama antara PLC Siemens S7-300 dan Rapid SCADA. OPC UA dipilih karena kemampuannya untuk menjamin komunikasi yang aman, stabil, dan terstandarisasi antar perangkat yang berbeda. Selain itu, protokol ini memungkinkan pengelolaan data secara terstruktur dan real-time dengan menggunakan komunikasi berbasis objek yang dapat memperkaya informasi.

Node-RED bertindak sebagai middleware yang menghubungkan antara PLC dan Rapid SCADA. Node-RED memungkinkan alur pengolahan data yang lebih fleksibel, termasuk penerapan logika kontrol sederhana, pemetaan data, dan pengolahan sinyal dari berbagai sensor dan perangkat. Node-RED juga memberikan keuntungan dalam hal pemrograman berbasis visual, mempermudah pengembangan, serta memungkinkan integrasi berbagai jenis protokol dan perangkat.

System Architecture

Selain komunikasi utama antara PLC dan Node-RED, sistem ini juga memperluas akuisisi data analog menggunakan perangkat tambahan. MOXA E1242 berfungsi sebagai remote I/O untuk membaca sinyal 4-20mA dari sensor-sensor seperti pressure transmitter dan level transmitter, dan mengirimkan data tersebut langsung ke Rapid SCADA melalui protokol Modbus TCP.

"Dengan memanfaatkan kombinasi dua protokol — OPC UA dan Modbus TCP — sistem ini mampu menjembatani dunia perangkat keras legacy dengan kebutuhan monitoring modern."

Penting untuk dicatat bahwa desain sistem ini tidak bergantung pada vendor perangkat keras tertentu, memberikan kebebasan untuk menggunakan berbagai komponen industri yang berbeda, asalkan mendukung protokol komunikasi yang telah ditetapkan. Hal ini memungkinkan pemanfaatan teknologi terbaru dan penggantian perangkat dengan lebih mudah di masa depan tanpa harus merombak seluruh sistem. Rapid SCADA sendiri secara standar mendukung OPC UA, OPC DA/Classic, Modbus TCP, Modbus RTU, MQTT, dan lain-lain.

Secara keseluruhan, sistem ini tidak hanya memastikan pengumpulan dan pemrosesan data yang efisien, tetapi juga menyediakan fleksibilitas dan interoperabilitas yang tinggi dengan berbagai perangkat keras dan perangkat lunak lainnya.

"Dengan desain modular ini, sistem tetap fleksibel untuk ekspansi di masa depan, seperti penambahan unit sensor baru atau integrasi dengan platform monitoring lain tanpa perlu rekayasa ulang terlampau besar."

Desain HMI

Konsep High Performance HMI

Desain HMI pada proyek ini mengikuti prinsip High Performance HMI yang mengutamakan kejelasan informasi dibandingkan estetika berlebihan, sejalan dengan standar ISA-101 untuk desain HMI yang efektif. Standar ini menekankan pentingnya tampilan yang sederhana namun informatif, yang memungkinkan operator untuk melakukan tugasnya dengan cepat dan efisien tanpa terganggu oleh informasi yang tidak relevan.

Desain ini mengoptimalkan penggunaan warna-warna minimalis yang memberikan umpan balik visual yang jelas. Warna biru digunakan untuk status normal, kuning untuk peringatan, dan merah untuk kondisi alarm kritis. Shading lembut diterapkan untuk menyoroti status alarm tanpa menyebabkan kelelahan visual, sesuai dengan prinsip desain ISA-101 yang bertujuan untuk menjaga kenyamanan operator selama bekerja dalam waktu lama.

"Shading merah lembut digunakan hanya untuk mengindikasikan kondisi alarm kritis, menjaga perhatian operator tanpa menyebabkan kelelahan visual."

Desain HMI ini mengadopsi prinsip navigasi intuitif yang mendukung efisiensi operasional, sebuah konsep yang juga diusung oleh standar ISA-101. Setiap halaman HMI dilengkapi dengan navigasi yang jelas di bagian atas, memudahkan operator untuk berpindah antar halaman dengan cepat. Pada halaman Plant Overview, tombol navigasi berubah warna jika ada alarm aktif pada halaman terkait, memungkinkan operator untuk mengidentifikasi area yang membutuhkan perhatian segera.

Struktur multi-tab pada halaman juga memungkinkan untuk menampilkan berbagai unit atau sistem dalam satu tampilan, mempercepat pengambilan keputusan tanpa membuat layar menjadi berantakan atau membingungkan.

"Konsep perubahan warna tombol hanya diterapkan di overview untuk menjaga fokus operator dan menghindari kebingungan saat berada di halaman detail."

Untuk kenyamanan operator, antarmuka ini dijalankan dalam mode kiosk penuh (fullscreen kiosk mode) menggunakan browser Edge, memastikan fokus penuh pada tampilan proses tanpa gangguan elemen browser dan antarmuka sistem.

Penggunaan SVG dan draw.io

Untuk menjaga kualitas grafis yang tinggi, seluruh elemen visual HMI dibuat dalam format SVG (Scalable Vector Graphics), sesuai dengan pedoman desain ISA-101 yang mendorong penggunaan grafis yang bersih dan tajam. SVG memastikan bahwa gambar tetap jelas dan dapat diskalakan dengan sempurna tanpa kehilangan kualitas visual. Alat yang digunakan untuk desain ini adalah draw.io, yang memungkinkan pembuatan diagram dan grafik yang efisien, sekaligus memudahkan integrasi dengan HMI.

Daraw.io multi tab

Fitur common background dan multi-tab di draw.io membantu mempermudah pengelolaan layout dan mempercepat proses desain secara keseluruhan.

"Walaupun draw.io bukan dirancang khusus untuk pengembangan HMI, kreativitas dalam menggunakannya menjadi bukti bahwa alat sederhana bisa memberikan hasil profesional. Grafik 11 halaman HMI yang tidak terlalu sederhana hanya kurang dari 350 kB!"

Watermark Profesional

Sebagai penanda identitas proyek, watermark "AUTOMATION & INNOVATION INITIATIVE – APRIL 2025" ditempatkan dengan halus di bagian kiri bawah halaman Plant Overview. Watermark ini bukan hanya untuk estetika, tetapi juga untuk memberikan tanda profesionalisme yang sesuai dengan standar industri, termasuk prinsip ISA-101 dalam pengelolaan tampilan HMI.

"Watermark ini menjadi penanda profesionalisme sekaligus pengingat kontribusi departemen terhadap inisiatif modernisasi."

Sebagai bagian dari pendekatan HMI berkelanjutan, dua halaman tambahan juga telah disiapkan dengan watermark "RESERVED FOR FUTURE USE". Hal ini mencerminkan bahwa sistem masih mungkin terus berkembang dan HMI dirancang terbuka untuk ekspansi di masa depan.

Keamanan dan Reliability

Dalam mengembangkan sistem HMI, aspek keamanan dan keandalan data menjadi perhatian utama. Desain sistem ini mengadopsi prinsip defense-in-depth dengan memperhatikan komunikasi aman, kontinuitas data, serta akses jarak jauh yang terkontrol.

Komunikasi Read-Only

Rapid SCADA hanya melakukan koneksi read-only ke PLC melalui OPC UA, sesuai dengan prinsip keamanan yang direkomendasikan oleh ISA-99 (Industrial Automation and Control Systems Security). Dengan pendekatan ini, jalur komunikasi data ke PLC bersifat satu arah, sepenuhnya menghindari risiko perintah tulis yang tidak disengaja atau malicious injection.

"Dengan konfigurasi read-only, potensi kesalahan akibat salah kirim perintah ke PLC dihilangkan sepenuhnya."

Data Persistence

Dengan memanfaatkan contextStorage pada Node-RED, data variabel penting disimpan baik di memory aktif maupun disinkronkan secara periodik ke persistent storage berbasis file system. Pendekatan ini tidak hanya mempertahankan status variabel saat terjadi restart, tetapi juga mempercepat proses recovery sistem, menghindari false zero reading.

"Fitur ini vital untuk menjaga konsistensi data historis dan mencegah alarm palsu setelah reboot sistem."

Remote Access

Untuk akses jarak jauh, sistem menggunakan jaringan overlay ZeroTier dengan server controller mandiri, bukan bergantung pada layanan publik. Hal ini memastikan bahwa jalur komunikasi terenkripsi dan kontrol penuh tetap berada di pihak pengelola sistem, meningkatkan tingkat privasi dan reliability dalam remote operation. ZeroTier memastikan koneksi aman dan seamless, mempercepat troubleshooting dan pengembangan lanjutan tanpa mengganggu operasi.

Untuk menjaga keamanan sistem, konfigurasi firewall dan pengaturan akses dibuat secara ketat. Hanya port dan protokol yang diperlukan saja yang dibuka, dan akses administratif dibatasi sesuai kebutuhan.

Sebagai bagian dari pengamanan sistem, akses jarak jauh ke server juga diamankan dengan SSH (Secure Shell) yang telah diaktifkan dan dikonfigurasi sesuai praktik terbaik, seperti penggunaan autentikasi berbasis key dan pengaturan port non-standar. Referensi pengaturan SSH tersedia di dokumentasi resmi sistem operasi terkait.

"Keamanan bukan hanya tentang mencegah serangan, tetapi tentang memastikan sistem tetap berfungsi dalam segala kondisi."

Pengalaman Praktis, Implementasi, dan Optimalisasi

Implementasi sistem ini tidak lepas dari tantangan teknis dan kebutuhan penyesuaian di lapangan. Pengalaman penggunaan Node-RED dalam kasus-kasus sebelumnya sangat berguna di sini. Salah satu fokus utama dalam proses optimasi adalah efisiensi eksekusi script di Node-RED, yang berperan sebagai middleware penghubung antara PLC, Rapid SCADA, dan berbagai perangkat lainnya.

Pemrograman Node-RED

Pada awalnya, alur pemrosesan data di Node-RED cukup kompleks dengan function node yang saling terhubung dan melakukan operasi yang sebagian besar bisa disederhanakan. Melalui diskusi, eksplorasi, dan pengujian bersama AI, struktur alur data berhasil diringkas, mengurangi beban CPU, dan mempercepat waktu tanggap (response time) dari sistem monitoring secara keseluruhan.

"Script JavaScript di dalam function node difokuskan ulang menjadi lebih deklaratif, efisien, dan hanya melakukan parsing saat benar-benar diperlukan."

Konfigurasi akhir sistem hanya memerlukan satu node s7 in, satu node opcua-compact-server, dan tiga function node yang terbagi menjadi:

  1. Node s7 in untuk berkomunikasi langsung dengan PLC Siemens S7-300 melalui ethernet dengan pengaturan variabel berdasarkan rack, slot, dan input/output. Sebagai contoh untuk membaca 2 modul digital input, 2 digital output, satu analog input, dan satu analog output:
Perlihatkan di sini
ID0;R0-S5
ID4;R0-S6
QD8;R0-S7
QD12;R0-S8
DB62,REAL0;R1-S5-0
DB62,REAL48;R1-S5-1
DB62,REAL96;R1-S5-2
DB62,REAL144;R1-S5-3
DB62,REAL192;R1-S5-4
DB62,REAL240;R1-S5-5
DB62,REAL288;R1-S5-6
DB62,REAL336;R1-S5-7
DB62,REAL384;R1-S6-0
DB62,REAL432;R1-S6-1
DB62,REAL480;R1-S6-2
DB62,REAL480;R1-S6-3
DB62,REAL576;R1-S6-4
DB62,REAL624;R1-S6-5
DB62,REAL672;R1-S6-6
DB62,REAL960;R1-S6-7
DB62,REAL432;R1-S6-8
  1. Menuliskan output dari s7 in ke memory context:
Perlihatkan di sini
const groups = {};

for (const [k, v] of Object.entries(msg.payload)) {
    const p = k.split("-");
    const gk = p.length >= 3 ? `${p[0]}-${p[1]}` : p[0];
    (groups[gk] ??= {})[k] = v;
}

Object.entries(groups).forEach(([k, v]) => flow.set(k, v));

return msg;
  1. Menyimpan data context ke persistent storage dengan interval 5 menit:
Perlihatkan di sini
const keys = flow.keys();
let synced = [];

// Loop dan simpan ke persistent
keys.forEach(key => {
    const value = flow.get(key);
    if (value !== undefined) {
        flow.set(key, value, "file");
        synced.push(key);
    }
});

msg.payload = {
    message: "Sinkronisasi ke persistent selesai.",
    total: synced.length,
    keys: synced
};

return msg;
  1. Melakukan restore dari persistent memory ke context memory, yang dieksekusi segera setelah Node-RED restart:
Perlihatkan di sini
const keys = flow.keys("file");
let synced = [];

keys.forEach(key => {
    const value = flow.get(key, "file");
    if (value) {
        flow.set(key, value);  // restore ke memory biasa (non-persistent)
        synced.push(key);
    }
});

msg.payload = {
    message: "Restore ke memory selesai.",
    total: synced.length,
    keys: synced
};

return msg;
  1. Kemudian script untuk konfigurasi address space node opcua-compact-server:
Perlihatkan di sini
function constructAlarmAddressSpace(server, addressSpace, eventObjects, done) {
  const opcua = coreServer.choreCompact.opcua;
  const { LocalizedText, Variant, DataType } = opcua;
  const namespace = addressSpace.getOwnNamespace();

  const flexServerInternals = this;

  const rootFolder = addressSpace.findNode("RootFolder");
  node.warn("Constructing dynamic address space for OPC UA...");
  coreServer.debugLog("Constructing dynamic address space for OPC UA...");

  const myPLC = namespace.addFolder(addressSpace.rootFolder.objects, {
    browseName: "S7-300"
  });

  // Fungsi umum untuk setup rack input analog/digital
  function setupRackVariables(rackName, count, dataType, keyFormat = i => `${rackName}-${i}`) {
    const variables = [];

    for (let i = 0; i < count; i++) {
      const key = `${rackName}.${keyFormat(i)}`;

      // Cek apakah nilai sudah ada, jika belum maka set ke nol
      if (flexServerInternals.sandboxFlowContext.get(key) === undefined) {
        flexServerInternals.sandboxFlowContext.set(key, 0);
        node.warn(`Init value for ${key} = 0`);
        coreServer.debugLog(`Init value for ${key} = 0`);
      }

    }

    const rackFolder = namespace.addFolder(myPLC, {
      browseName: rackName
    });

    for (let i = 0; i < count; i++) {
      const browseName = keyFormat(i);
      const ctxKey = `${rackName}.${browseName}`;

      const variable = namespace.addVariable({
        organizedBy: rackFolder,
        browseName: browseName,
        nodeId: `ns=1;s=${browseName}`,
        dataType: dataType,
        value: {
          get: function () {
            const val = flexServerInternals.sandboxFlowContext.get(ctxKey);
            coreServer.debugLog(`Read ${ctxKey} = ${val}`);
            return new Variant({ dataType: dataType, value: val });
          }
        }
      });

      variables.push(variable);
    }

    return variables;
  }

  // Setup analog inputs/outputs
  const inputAnalogRacks = [
    "R1-S5", "R1-S6"
  ];
  const analogInputs = inputAnalogRacks.map(rack => setupRackVariables(rack, 8, DataType.Double));

  // Setup digital inputs/outputs
  const digitalConfig = [
    { rack: "R0", start: 5, end: 8 }
  ];
  const digitalInputs = digitalConfig.map(cfg =>
    setupRackVariables(cfg.rack, cfg.end - cfg.start + 1, DataType.UInt32, i => `${cfg.rack}-S${cfg.start + i}`)
  );

  coreServer.debugLog("Dynamic address space construction for OPC UA completed.");
  node.warn("Dynamic address space construction for OPC UA completed.");

  done();
}

Struktur ini cukup untuk menangani seluruh kebutuhan pembacaan data dari PLC dan pengiriman data ke Rapid SCADA, mencerminkan efisiensi struktural yang tinggi.

Selain itu, pembacaan sinyal digital juga dioptimalkan menggunakan pendekatan block read DWORD 32-bit. Teknik ini memungkinkan sistem membaca seluruh status digital input/output dalam satu blok register, alih-alih satu per satu. Pendekatan ini tidak hanya meningkatkan efisiensi komunikasi antara PLC dan middleware, tetapi juga mempercepat waktu refresh data secara keseluruhan tanpa membebani sistem komunikasi atau CPU. Teknik ini menjadi sangat relevan dalam sistem yang memiliki lebih banyak kanal digital dibandingkan analog dan memerlukan tanggapan real-time.

"Perlu diperhatikan bahwa internal data PLC Siemens S7-300 menggunakan format big-endian, sedangkan komputer berbasis x86 (seperti PC tempat Node-RED atau SCADA dijalankan) umumnya menggunakan little-endian. Akibatnya, saat membaca data multibyte seperti WORD, INT, DWORD, DINT, atau REAL diperlukan penyesuaian urutan byte (byte swap) agar nilai yang dibaca benar."

Proses tagging data yang sempat direncanakan untuk dilakukan di tahap persiapan address space OPC UA dalam Node-RED diubah untuk dilakukan langsung di Rapid SCADA setelah ekstraksi bit. Tagging data analog juga dilakukan di Rapid SCADA agar aktivitas ini terpusat di satu tempat. Pendekatan ini membuktikan bahwa efisiensi dan fleksibilitas dapat dicapai tanpa mengorbankan kejelasan data, selama peran masing-masing komponen dalam arsitektur sistem dirancang secara tepat.

Selain optimasi teknis, aspek keberlanjutan juga menjadi perhatian. Untuk itu, dilakukan mirroring variabel penting dari memory context ke persistent storage di Node-RED. Strategi ini terbukti mengurangi false reading dan zero state saat sistem mengalami restart, sehingga meminimalisasi alarm palsu yang dapat mengganggu operator.

Mengakses Dokumentasi Online

Untuk mempelajari lebih lanjut tentang Node-RED dan memanfaatkan berbagai fitur yang ditawarkannya, Anda bisa mengunjungi dokumentasi resmi Node-RED secara online. Dokumentasi ini menyediakan panduan lengkap, tutorial, dan referensi API yang sangat berguna untuk mengembangkan aplikasi otomatisasi menggunakan Node-RED.

Anda dapat mengakses dokumentasi tersebut di sini:
👉 Dokumentasi Node-RED

Di dalam dokumentasi, Anda akan menemukan:

  • Instalasi dan Konfigurasi: Langkah-langkah untuk memulai dengan Node-RED di berbagai platform.
  • Tutorial dan Contoh Proyek: Panduan praktis untuk mengembangkan aplikasi berdasarkan kebutuhan spesifik Anda.
  • Referensi API: Penjelasan mendalam tentang setiap fungsi dan node yang tersedia di Node-RED.

Yang paling penting setelah instalasi adalah mengamankan Node-RED, Anda bisa membaca petunjuknya di:
👉 Securing Node-RED

Untuk otomatis menjalankan Node-RED pada saat Windows startup, mengikuti petunjuk dokumen online, pada beberapa kesempatan Windows Task Scheduler gagal melakukan start. Untuk ini dibutuhkan opsi lain yang lebih handal:
👉 NSSM - the Non-Sucking Service Manager

Jangan ragu untuk mengeksplorasi seluruh dokumentasi agar dapat memanfaatkan Node-RED secara maksimal dalam proyek Anda!

Untuk informasi lebih mendalam tentang penggunaan dan konfigurasi Rapid SCADA, Anda dapat mengakses dokumentasi resmi secara online melalui tautan berikut:
👉 Dokumentasi Rapid SCADA

Dokumentasi ini menyediakan panduan lengkap mengenai instalasi, konfigurasi, serta fitur-fitur penting yang dapat membantu Anda memaksimalkan penggunaan Rapid SCADA dalam proyek Anda. Detail mengenai Rapid SCADA dalam artikel ini akan segera ditambahkan.

Dalam mode kiosk fullscreen menggunakan Microsoft Edge, operator tidak memiliki akses navigasi standar browser seperti tombol kembali pada browser untuk kembali ke halaman utama setelah misalnya mereka melihat trend. Untuk mengatasi ini, digunakan sebuah floating button yang dijalankan menggunakan skrip AutoHotkey. Tombol ini memungkinkan operator untuk kembali ke halaman utama HMI kapan pun diperlukan, tanpa keluar dari tampilan fullscreen.

Perlihatkan di sini
#Requires AutoHotkey v2.0

homeURL := "http://localhost:10008"
imagePath := A_ScriptDir "\button.png"

; Ukuran tombol dan posisi
buttonWidth := 30
buttonHeight := 220
guiX := 0
guiY := 250

; Buat GUI tanpa border dan caption
myGui := Gui("+AlwaysOnTop -Caption +ToolWindow -Border")
myGui.Opt("+LastFound")
myGui.BackColor := "FF00FF"

; Tambahkan tombol HOME
pic := myGui.AddPicture("x0 y0" " w" buttonWidth " h" buttonHeight " BackgroundTrans", imagePath)
pic.OnEvent("Click", HomeAction)

; Tampilkan GUI dengan gambar tombol
myGui.Show("x" guiX " y" guiY " NoActivate")
WinSetTransColor("FF00FF", myGui.Hwnd)

HomeAction(*) {
    Run("msedge.exe " homeURL " --kiosk --edge-kiosk-type=fullscreen")
}

; Ganti kursor default Picture control ke "Hand"
IDC_HAND := 32649
hCursor := DllCall("LoadCursor", "Ptr", 0, "UInt", IDC_HAND, "Ptr")
DllCall("SetClassLongPtr", "Ptr", pic.Hwnd, "Int", -12, "Ptr", hCursor)  ; GCLP_HCURSOR = -12

Skrip ini menampilkan tombol di kiri bagian atas layar. Saat diklik, tombol ini akan membuka kembali halaman utama HMI dalam mode app window Edge, memastikan alur kerja operator tetap lancar.

Setelah script AutoHotkey dikompilasi menjadi file .exe, software AutoHotkey itu sendiri segera dihapus dari sistem untuk meminimalkan potensi penyalahgunaan atau eksekusi skrip tak dikenal oleh pihak yang tidak berwenang.

Dengan seluruh penjelasan di atas, yang tidak kalah penting adalah observasi terhadap perilaku operator dan kebutuhannya untuk dapat melakukan monitoring dengan baik. Beberapa halaman HMI perlu disederhanakan untuk meningkatkan keterbacaan dan meminimalkan ambiguitas. Tag-tag yang aktif juga diberi penanda khusus agar tidak membingungkan saat plant berada dalam mode uji atau parsial.

"Optimalisasi bukan hanya soal teknis, tetapi juga soal memahami kebiasaan operator dan menciptakan tampilan yang benar-benar mendukung mereka."

Semua pembelajaran ini menjadi pondasi untuk sistem yang lebih efisien dan berkelanjutan. Fleksibilitas platform open source sangat membantu, karena memungkinkan iterasi cepat tanpa bergantung pada vendor eksternal.

Penutup

Transformasi ini bukan sekadar pergantian platform, tetapi representasi dari adopsi mindset baru: fleksibilitas, efisiensi, dan keberanian mengintegrasikan teknologi terbuka dalam lingkungan industri konservatif.

"Perjalanan ini menunjukkan bahwa dengan kombinasi pengalaman nyata dan kreativitas, keterbatasan bisa diubah menjadi keunggulan kompetitif."

Melalui implementasi sistem HMI berbasis open source ini, manfaat nyata telah dirasakan: biaya implementasi yang lebih rendah, kemudahan integrasi lintas platform, serta kemampuan adaptasi yang lebih tinggi terhadap kebutuhan spesifik plant. Lebih dari sekadar pencapaian teknis, inisiatif ini menjadi bukti bahwa inovasi bisa tumbuh dari keterbatasan, dan bahwa pendekatan open source layak dipertimbangkan secara serius dalam otomasi industri modern.

"Ketika teknologi terbuka dipadukan dengan pemahaman proses yang kuat, hasilnya bukan hanya sistem yang efisien — tetapi juga tim yang lebih berdaya dan siap menghadapi perubahan."


Catatan: Artikel ini menghindari penyebutan langsung informasi korporasi yang sensitif untuk menjaga kerahasiaan, namun tetap mengedepankan kekuatan inovasi yang diterapkan.