📄 Komunikasi PHP ↔️ PLC Omron CP1H via FINS UDP

🎯 Tujuan

Siswa mampu:

  • Menulis data ke alamat DM (Data Memory) pada PLC Omron CP1H.
  • Membaca data dari alamat DM menggunakan protokol FINS UDP.
  • Menggunakan PHP untuk membuat antarmuka web real-time.

🧰 Peralatan

Nama Spesifikasi
PLC Omron CP1H (dengan CP1W-CIF41 Ethernet)
Komputer Windows/Linux dengan Apache & PHP
Jaringan LAN (PLC & PC 1 subnet)
Software Tambahan Browser, Wireshark (opsional untuk debug)

⚙️ Langkah Konfigurasi PLC

  1. Atur IP PLC (CP1W-CIF41)
    • IP: 192.168.240.200
    • Subnet: 255.255.255.0
    • Default Gateway: kosong atau 192.168.240.1
    • Node Address: 1
  2. Setting FINS di CX-Programmer / Network Config
    • Network Type: Ethernet
    • FINS Node Address: 1
    • UDP Port: 9600
  3. Tes Koneksi
    • Dari PC, ping 192.168.240.200
    • Gunakan Wireshark untuk melihat paket FINS jika perlu.

💻 Struktur File PHP

  1. index.php – Antarmuka Web

Form input untuk kirim dan baca data:

<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Kontrol PLC Omron CP1H</title>
<style>
body {
font-family: 'Segoe UI', sans-serif;
background: #f0f4f8;
padding: 40px;
}
.container {
max-width: 500px;
margin: auto;
background: #fff;
padding: 30px;
border-radius: 15px;
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
h2 {
text-align: center;
margin-bottom: 25px;
color: #333;
}
label {
display: block;
margin-top: 15px;
font-weight: 600;
color: #555;
}
input[type="number"],
input[type="text"] {
width: 100%;
padding: 10px;
margin-top: 5px;
border-radius: 8px;
border: 1px solid #ccc;
}
input[type="submit"] {
margin-top: 20px;
width: 100%;
padding: 12px;
background-color: #007acc;
border: none;
border-radius: 8px;
color: white;
font-size: 16px;
cursor: pointer;
}
input[type="submit"]:hover {
background-color: #005fa3;
}
#response {
background: #f7f9fb;
padding: 15px;
margin-top: 25px;
border-left: 5px solid #007acc;
white-space: pre-wrap;
border-radius: 8px;
font-family: monospace;
}
</style>
</head>
<body>
<div class="container">
<h2>Kontrol DM Memory - PLC Omron CP1H</h2>
<form onsubmit="event.preventDefault(); sendData();">
<label for="dm_start">Alamat DM Awal:</label>
<input type="number" id="dm_start" value="100" required>

<label for="values">Nilai (pisahkan dengan koma):</label>
<input type="text" id="values" value="123,456" required>

<input type="submit" value="Tulis & Baca">
</form>

<div id="response">Menunggu data dari PLC...</div>
</div>

<script>
function sendData() {
const dm = document.getElementById("dm_start").value;
const values = document.getElementById("values").value;
fetch("plc-handler_1.php", {
method: "POST",
headers: {"Content-Type": "application/x-www-form-urlencoded"},
body: `dm_start=${dm}&values=${values}`
})
.then(r => r.text())
.then(t => document.getElementById("response").innerText = t)
.catch(e => document.getElementById("response").innerText = "❌ Error: " + e);
}
</script>
</body>
</html>
  1. plc-handler.php – Komunikasi ke PLC via FINS UDP

<?php

function finsUdpWriteDM($ip, $port, $dm_start, $values) {

    $clientNode = 0x0A;

    $plcNode = 0x01;

    $sid = 0x00;

    $word_count = count($values);

    $header = pack('C*', 0x80, 0x00, 0x02, 0x00, $plcNode, 0x00, 0x00, $clientNode, 0x00, $sid);

    $mem_area = 0x82; // DM Area

    $addr = pack('n', $dm_start) . chr(0x00);

    $write_count = pack('n', $word_count);

    $data_payload = '';

    foreach ($values as $val) {

        $data_payload .= pack('n', $val);

    }

    $command = chr(0x01) . chr(0x02) . chr($mem_area) . $addr . $write_count . $data_payload;

    $finsFrame = $header . $command;




    $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

    socket_connect($sock, $ip, $port);

    socket_send($sock, $finsFrame, strlen($finsFrame), 0);

    socket_recv($sock, $response, 512, 0);

    socket_close($sock);

    return "✅ Menulis ke DM$dm_start: " . implode(", ", $values);

}




function finsUdpReadDM($ip, $port, $dm_start, $word_count) {

    $clientNode = 0x0A;

    $plcNode = 0x01;

    $sid = 0x01;

    $header = pack('C*', 0x80, 0x00, 0x02, 0x00, $plcNode, 0x00, 0x00, $clientNode, 0x00, $sid);

    $addr = pack('n', $dm_start) . chr(0x00);

    $words = pack('n', $word_count);

    $command = chr(0x01) . chr(0x01) . chr(0x82) . $addr . $words;

    $finsFrame = $header . $command;




    $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

    socket_connect($sock, $ip, $port);

    socket_send($sock, $finsFrame, strlen($finsFrame), 0);

    socket_recv($sock, $response, 512, 0);

    socket_close($sock);




    $data = substr($response, 14);

    $result = [];

    for ($i = 0; $i < $word_count; $i++) {

        $word = substr($data, $i * 2, 2);

        $result[] = unpack('n', $word)[1];

    }

    return $result;

}




// Konfigurasi

$ip = "192.168.240.200";

$port = 9600;

$dm_start = intval($_POST["dm_start"]);

$values = array_map('intval', explode(",", $_POST["values"]));

echo finsUdpWriteDM($ip, $port, $dm_start, $values) . "\n";




$data = finsUdpReadDM($ip, $port, $dm_start, count($values));

foreach ($data as $i => $val) {

    echo "DM" . ($dm_start + $i) . " = $val\n";

}

?>

Hasil yang Diharapkan

Setelah menekan tombol “Tulis Sekarang”, di bawah form akan tampil:

✅ Menulis ke DM100: 123, 456

DM100 = 123

DM101 = 456

📌 Catatan

  • Pastikan PLC dalam mode RUN.
  • Pastikan PC dan PLC dalam satu jaringan.
  • Jika tidak berhasil, gunakan Wireshark untuk memeriksa apakah PLC mengirim balasan.

Jadilah profesional di bidang otomasi industri dengan mengikuti pelatihan PLC Omron bersama bisaioti.com. Training ini dirancang untuk membantu Anda memahami cara kerja dan pemrograman PLC Omron secara menyeluruh, mulai dari dasar logika ladder hingga integrasi komunikasi Modbus. Materi disampaikan secara praktis dan mudah dipahami, cocok untuk pemula maupun teknisi berpengalaman.

Related Articles

Leave a Reply

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