Rumah >pembangunan bahagian belakang >tutorial php >Cara menggunakan PHP untuk menghuraikan dan memaparkan laporan data Modbus TCP

Cara menggunakan PHP untuk menghuraikan dan memaparkan laporan data Modbus TCP

王林
王林asal
2023-07-17 13:19:391522semak imbas

Cara menggunakan PHP untuk menghuraikan dan memaparkan laporan data Modbus TCP

Dalam sistem kawalan industri, Modbus TCP ialah protokol komunikasi yang biasa digunakan untuk pertukaran data antara peranti. Apabila membangunkan aplikasi, menghuraikan dan memaparkan laporan data Modbus TCP adalah tugas yang sangat penting. Artikel ini akan memperkenalkan cara menggunakan bahasa pengaturcaraan PHP untuk menghuraikan dan memaparkan laporan data Modbus TCP, dengan contoh kod.

1. Persediaan
Sebelum kita mula, kita perlu memastikan PHP telah dipasang dan mempunyai persekitaran pembangunan asas. Pada masa yang sama, alamat IP dan nombor port pelayan Modbus TCP perlu diberikan kepada skrip sebagai parameter.

2. Sambung dan baca data
Pertama, kita perlu menggunakan fungsi soket PHP untuk mewujudkan sambungan dengan pelayan Modbus TCP dan menghantar permintaan untuk membaca data. Berikut ialah contoh kod mudah:

<?php
// Modbus TCP服务器的IP地址和端口号
$server_ip = '192.168.1.100';
$server_port = 502;

// 创建一个socket连接
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("无法创建socket连接: " . socket_strerror(socket_last_error()) . "
");
}

// 连接到Modbus TCP服务器
$result = socket_connect($socket, $server_ip, $server_port);
if ($result === false) {
    die("无法连接到Modbus TCP服务器: " . socket_strerror(socket_last_error($socket)) . "
");
}

// 向服务器发送读取数据的请求

$result = socket_write($socket, $request, strlen($request));
if ($result === false) {
    die("无法发送请求到Modbus TCP服务器: " . socket_strerror(socket_last_error($socket)) . "
");
}

// 读取服务器返回的数据
$response = socket_read($socket, 1024);
if ($response === false) {
    die("无法从Modbus TCP服务器读取数据: " . socket_strerror(socket_last_error($socket)) . "
");
}

// 关闭socket连接
socket_close($socket);

// 解析并展示数据
$data = unpack('C*', $response);
foreach ($data as $value) {
    echo $value . ' ';
}
?>

Kod di atas menggunakan fungsi berkaitan soket PHP untuk menyambung dan membaca data daripada pelayan Modbus TCP. Perlu diingatkan bahawa data permintaan dan tindak balas dihantar dan diterima dalam format binari, jadi fungsi unpack perlu digunakan untuk menghuraikan dan mendapatkan nilai tertentu.

3. Menghuraikan dan memaparkan data
Selepas mendapatkan data yang dikembalikan oleh pelayan Modbus TCP, kami perlu menghuraikannya dan memaparkannya kepada pengguna dalam format tertentu. Berikut ialah contoh kod mudah:

<?php
// 假设Modbus TCP服务器返回的数据为:
$data = array(1, 0, 2, 0, 3, 0, 4, 0, 5, 0);

// 解析并展示数据
for ($i = 0; $i < count($data) - 1; $i += 2) {
    $value = ($data[$i] << 8) + $data[$i+1];
    echo "寄存器 " . ($i / 2 + 1) . ": " . $value . "
";
}
?>

Kod di atas menukar data yang diterima menjadi integer 16-bit yang tidak ditandatangani dan memaparkannya dalam susunan daftar.

4. Contoh program lengkap
Menggabungkan kod sambungan dan parsing, kita boleh menulis program lengkap untuk menghuraikan dan memaparkan laporan data Modbus TCP. Berikut ialah contoh mudah:

<?php
// Modbus TCP服务器的IP地址和端口号
$server_ip = '192.168.1.100';
$server_port = 502;

// 创建一个socket连接
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("无法创建socket连接: " . socket_strerror(socket_last_error()) . "
");
}

// 连接到Modbus TCP服务器
$result = socket_connect($socket, $server_ip, $server_port);
if ($result === false) {
    die("无法连接到Modbus TCP服务器: " . socket_strerror(socket_last_error($socket)) . "
");
}

// 向服务器发送读取数据的请求

$result = socket_write($socket, $request, strlen($request));
if ($result === false) {
    die("无法发送请求到Modbus TCP服务器: " . socket_strerror(socket_last_error($socket)) . "
");
}

// 读取服务器返回的数据
$response = socket_read($socket, 1024);
if ($response === false) {
    die("无法从Modbus TCP服务器读取数据: " . socket_strerror(socket_last_error($socket)) . "
");
}

// 关闭socket连接
socket_close($socket);

// 解析并展示数据
$data = unpack('C*', $response);
for ($i = 0; $i < count($data) - 1; $i += 2) {
    $value = ($data[$i] << 8) + $data[$i+1];
    echo "寄存器 " . ($i / 2 + 1) . ": " . $value . "
";
}
?>

Dengan kod di atas, kami boleh menyambung ke pelayan Modbus TCP dan membaca serta memaparkan laporan data di dalamnya.

Ringkasan
Menggunakan PHP untuk menghuraikan dan memaparkan laporan data Modbus TCP memerlukan tiga langkah: menyambung, membaca data dan menghuraikan. Artikel ini menyediakan kod contoh mudah yang saya harap akan membantu pembaca. Dalam aplikasi sebenar, lebih banyak pemprosesan dan pelarasan mungkin diperlukan bergantung pada keperluan khusus dan format data.

Atas ialah kandungan terperinci Cara menggunakan PHP untuk menghuraikan dan memaparkan laporan data Modbus TCP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn