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:

Ads Jadwal Training bisaioti Offline
NoMateriTanggalWaktuHargaLokasiViewAction
1IOT PLC SCADA Siemens7-8 Juni 202508.00 - 16.002000000SurabayaSilabusDaftar Sekarang
2IOT PLC SCADA Omron14 - 15 Juni 202508.00 - 16.002000000SurabayaSilabusDaftar Sekarang
3IOT PLC SCADA Schneider21-22 Juni 202508.00 -16.002000000SurabayaSilabusDaftar Sekarang
4IOT PLC SCADA Allen Bradley28-29 Juni 202508.00-16.002000000SurabayaSilabusDaftar 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)

  1. Modifikasi sistem untuk menulis nilai ke PLC (misal menyalakan lampu)
  2. Integrasikan dengan front-end framework seperti Vue.js atau React
  3. Tambahkan fitur alarm/logging jika nilai melebihi ambang batas

 

 

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Sekarang