Cara Mengakses Alamat Memori Work Area PLC Omron Menggunakan WebSocket dan PHP

🧠 Pendahuluan
Dalam era Industrial Internet of Things (IIoT), kebutuhan untuk mengakses data dari PLC (Programmable Logic Controller) secara real-time melalui web semakin meningkat. Salah satu caranya adalah dengan menggunakan WebSocket, protokol komunikasi dua arah (full-duplex) yang efisien, dikombinasikan dengan PHP untuk pengelolaan logika dan tampilan web.
Pada artikel ini, kita akan membahas bagaimana mengakses alamat memori PLC Omron (misalnya D0, D100, CIO, dll) dengan protokol FINS menggunakan WebSocket dan PHP.
🎯 Tujuan Pembelajaran
Setelah mengikuti artikel ini, Anda akan memahami:
No | Materi | Tanggal | Waktu | Harga | Lokasi | View | Action |
---|---|---|---|---|---|---|---|
1 | IOT PLC SCADA Siemens | 7-8 Juni 2025 | 08.00 - 16.00 | 2000000 | Surabaya | Silabus | Daftar Sekarang |
2 | IOT PLC SCADA Omron | 14 - 15 Juni 2025 | 08.00 - 16.00 | 2000000 | Surabaya | Silabus | Daftar Sekarang |
3 | IOT PLC SCADA Schneider | 21-22 Juni 2025 | 08.00 -16.00 | 2000000 | Surabaya | Silabus | Daftar Sekarang |
4 | IOT PLC SCADA Allen Bradley | 28-29 Juni 2025 | 08.00-16.00 | 2000000 | Surabaya | Silabus | Daftar Sekarang |
- Struktur alamat memori di PLC Omron (CIO, D, W, H, dll)
- Cara kerja komunikasi FINS
- Membangun WebSocket server dengan PHP
- Mengakses dan menampilkan data memori PLC secara real-time di web
🧱 1. Struktur Alamat Memori PLC Omron
Omron menggunakan berbagai area memori, beberapa yang sering digunakan:
Area | Fungsi | Contoh Alamat |
CIO | Input/output digital | CIO 0.00, CIO 100 |
D | Data Memory (biasa digunakan untuk penyimpanan variabel) | D0, D100 |
W | Work memory | W0 |
H | Holding relay | H0 |
Alamat biasanya ditulis dalam bentuk byte atau bit. Misalnya:
- D0: byte
- CIO 0.00: bit ke-0 dari word CIO 0
📡 2. Komunikasi FINS dengan PLC Omron
Protokol FINS (Factory Interface Network Service) adalah protokol buatan Omron untuk berkomunikasi dengan PLC. FINS memungkinkan membaca dan menulis ke memori PLC melalui berbagai media (Ethernet, Serial, dll).
Contoh komunikasi FINS melalui Ethernet:
- Host: 192.168.250.1 (komputer)
- PLC: 192.168.250.2
- Port: 9600
FINS request dikirim dalam frame hex tertentu, misalnya untuk membaca D0–D1.
⚙️ 3. Arsitektur Sistem
Sistem kita terdiri dari:
Browser (WebSocket Client)
⇅
PHP WebSocket Server
⇅
PLC Omron (via FINS TCP)
- Frontend: WebSocket JavaScript
- Backend: PHP WebSocket Server
- Komunikasi ke PLC: Menggunakan socket TCP dengan frame FINS
🧪 4. Contoh Implementasi PHP dan WebSocket
4.1 WebSocket Server (PHP)
Install library via Composer:
composer require cboden/ratchet
server.php
<?php $ip = '192.168.240.200'; // Ganti dengan IP PLC Anda $port = 9600; // Fungsi BACA BIT (misalnya W0.00) function finsUdpReadBit($ip, $port, $mem_area, $bit_address, $bit_offset) { $clientNode = 0x0A; $plcNode = 0x01; $sid = 0x01; $header = pack('C*', 0x80, 0x00, 0x02, 0x00, $plcNode, 0x00, 0x00, $clientNode, 0x00, $sid); $addr = pack('n', $bit_address) . chr($bit_offset); // Offset 0-15 $command = pack('C*', 0x01, 0x01) . chr($mem_area) . $addr . pack('n', 1); $frame = $header . $command; $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); socket_sendto($socket, $frame, strlen($frame), 0, $ip, $port); socket_recvfrom($socket, $buf, 2048, 0, $ip, $port); socket_close($socket); $status = ord(substr($buf, -1)); return $status === 1 ? 1 : 0; } // Fungsi TULIS BIT (misalnya W0.00) function finsUdpWriteBit($ip, $port, $mem_area, $bit_address, $bit_offset, $value) { $clientNode = 0x0A; $plcNode = 0x01; $sid = 0x02; $header = pack('C*', 0x80, 0x00, 0x02, 0x00, $plcNode, 0x00, 0x00, $clientNode, 0x00, $sid); $addr = pack('n', $bit_address) . chr($bit_offset); $data = $value ? chr(0x01) : chr(0x00); $command = pack('C*', 0x01, 0x02) . chr($mem_area) . $addr . pack('n', 1) . $data; $frame = $header . $command; $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); socket_sendto($socket, $frame, strlen($frame), 0, $ip, $port); socket_recvfrom($socket, $buf, 2048, 0, $ip, $port); socket_close($socket); return true; } // Handler AJAX if ($_SERVER['REQUEST_METHOD'] === 'POST') { $mode = $_POST['mode']; $val = isset($_POST['value']) ? intval($_POST['value']) : 0; $bit_address = 0; // W0 $bit_offset = 0; // .00 $mem_area = 0x31; // W area if ($mode === 'read') { echo finsUdpReadBit($ip, $port, $mem_area, $bit_address, $bit_offset); } elseif ($mode === 'write') { echo finsUdpWriteBit($ip, $port, $mem_area, $bit_address, $bit_offset, $val) ? 'OK' : 'FAIL'; } } ?>
4.2 Client (index.html)
<!DOCTYPE html> <html> <head> <title>Control W0.00 (ON/OFF)</title> <style> body { font-family: Arial; text-align: center; margin-top: 50px; } button { font-size: 20px; padding: 10px 20px; margin: 10px; } .lamp { width: 40px; height: 40px; border-radius: 50%; display: inline-block; background: gray; margin-top: 20px; } .on { background: green; } .off { background: red; } </style> </head> <body> <h1>Kontrol Bit W0.00 (FINS UDP)</h1> <button onclick="setBit(1)">ON</button> <button onclick="setBit(0)">OFF</button> <div> <h3>Status Lampu:</h3> <div class="lamp" id="lampu"></div> </div> <script> function setBit(val) { fetch('fins_bit.php', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: 'mode=write&value=' + val }).then(res => res.text()).then(updateLampu); } function getBit() { fetch('fins_bit.php', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: 'mode=read' }) .then(res => res.text()) .then(updateLampu); } function updateLampu(val) { const lampu = document.getElementById('lampu'); lampu.className = 'lamp ' + (val.trim() === '1' ? 'on' : 'off'); } // Auto polling setiap 1 detik setInterval(getBit, 1000); </script> </body> </html>
✅ 5. Keuntungan Menggunakan WebSocket
- Real-time: Tidak perlu refresh untuk mendapatkan data terbaru
- Responsif: Cocok untuk SCADA berbasis web
- Ringan: Lebih hemat bandwidth dibanding polling AJAX
🔐 6. Tips Keamanan
- Gunakan HTTPS + WSS
- Implementasi token-based authentication
- Validasi alamat memori sebelum dikirim ke PLC
- Gunakan middleware firewall (misal: Nginx proxy)
📘 Kesimpulan
Mengakses alamat memori PLC Omron dengan WebSocket dan PHP memungkinkan kita membangun sistem monitoring atau kontrol berbasis web yang real-time, efisien, dan scalable. Dengan memanfaatkan protokol FINS dan WebSocket, proses komunikasi menjadi lebih cepat dan responsif dibanding metode polling biasa.
🔧 Latihan Lanjutan (Exercise)
- Modifikasi sistem untuk menulis nilai ke PLC (misal menyalakan lampu)
- Integrasikan dengan front-end framework seperti Vue.js atau React
- Tambahkan fitur alarm/logging jika nilai melebihi ambang batas