PHP - und Go-Modbus - Bibliothek Handbuch: phpmodbus vs. go-modbus

kostenlosKostenloses technisches Material

Dieser Inhalt ist direkt lesbar und eignet sich für das Grundlagenlernen und die Suche.

PHP - und Go-Modbus - Bibliothek Handbuch: phpmodbus vs. go-modbus

PHP Modbus-Bibliothek (phpmodbus)

phpmodbus ist eine in PHP implementierte Modbus-UDP / TCP-Kommunikationsbibliothek, das im Google Code Archive gehostet wird:code.google.com/p/phpmodbus(Archiviert) Es implementiert die grundlegenden Funktionen des Modbus-UDP - Protokolls und unterstützt FC03 (Read-Hold - Register), FC16 (Write-Multi - Register), FC23 (Read / Write-Multi - Register).

Obwohl Modbus UDP in der Industrie weit weniger verbreitet ist als Modbus TCP, hat phpmodbus einen einzigartigen Wert in bestimmten speziellen Web-Anwendungs - Szenarien - wie zum Beispiel direktes Lesen von Daten von Modbus UDP-Geräten in PHP-geschriebenen SCADA Kanban-Websites oder die Fernsteuerung von Modbus-Geräten über die Browser-Schnittstelle.

Installation und Grundlagen Verwenden

<?php
// 引入 phpmodbus 库
require_once 'PhpModBus.php';

// 创建 Modbus UDP 主站实例
$modbus = new ModbusUdpMaster('192.168.1.100', 502);

try {
    // FC03: 读取从站 1,起始地址 0,10 个保持寄存器
    $data = $modbus->readMultipleRegisters(1, 0, 10);
    
    // 输出结果
    echo "读取到的寄存器数据:n";
    for ($i = 0; $i < count($data); $i++) {
        echo sprintf("  地址 %d: %d (0x%04X)n", $i, $data[$i], $data[$i]);
    }
} catch (Exception $e) {
    echo "Modbus 通信错误: " . $e->getMessage();
}
?>

FC16 Schreiben mehrerer Aufbewahrungsregister

<?php
$modbus = new ModbusUdpMaster('192.168.1.100', 502);

// 要写入的数据
$values = [100, 200, 300, 400];

// FC16: 从站 1,起始地址 10,写入 4 个寄存器
$modbus->writeMultipleRegister(1, 10, $values);
echo "写入成功n";
?>

FC23 Kombinationslesen und Schreiben

<?php
$modbus = new ModbusUdpMaster('192.168.1.100', 502);

// FC23: 读地址 0-9,同时写地址 10-13
$valuesToWrite = [99, 88, 77, 66];
$readData = $modbus->readWriteRegisters(1, 0, 10, 10, $valuesToWrite);

echo "读取数据: ";
print_r($readData);
echo "写入数据: ";
print_r($valuesToWrite);
?>

Go Modbus Library (goburrow / modbus)

go-modbus (Vollbezeichnung)github.com/goburrow/modbusEs ist eine Modbus-Client - Bibliothek, die in der Sprache Go geschrieben wurde, GitHub:github.com/goburrow/modbus。Es wird als "fault-tolerante, fail-fast" - Implementierung beschrieben - mit Schwerpunkt auf Fehlerbehandlung und schnellen Ausfällen, geeignet für den Einsatz in industriellen Edge-Gateway - Szenarien mit hohen Anforderungen an Zuverlässigkeit und Stabilität.

und️AchtungBasi erend auf :modbus.orgDie neu este Besch reib ung für 2024 bef ind et sich noch in der " In kub ations ph ase ", " noch nicht in der Produk tion verw enden (me hr Test s erforderlich). " Ob wohl die API ausge zeichnet ist , müssen sie vor der Verwendung in der Produk tion aus reich end get est et werden .

Installation

go get github.com/goburrow/modbus

Modbus TCP-Client - Beispiel

package main

import (
    "fmt"
    "time"
    "github.com/goburrow/modbus"
)

func main() {
    // 创建 TCP 客户端
    handler := modbus.NewTCPClientHandler("192.168.1.100:502")
    handler.Timeout = 5 * time.Second
    handler.SlaveId = 1
    
    // 建立连接
    err := handler.Connect()
    if err != nil {
        fmt.Printf("连接失败: %vn", err)
        return
    }
    defer handler.Close()
    
    client := modbus.NewClient(handler)
    
    // 读取 10 个保持寄存器(地址 0-9)
    results, err := client.ReadHoldingRegisters(0, 10)
    if err != nil {
        fmt.Printf("读取失败: %vn", err)
        return
    }
    
    fmt.Println("寄存器数据:")
    for i := 0; i < len(results)-1; i += 2 {
        value := uint16(results[i])<<8 | uint16(results[i+1])
        fmt.Printf("  地址 %d: %d (0x%04X)n", i/2, value, value)
    }
    
    // 写入单个寄存器
    err = client.WriteSingleRegister(0, 1234)
    if err != nil {
        fmt.Printf("写入失败: %vn", err)
    } else {
        fmt.Println("写入成功")
    }
}

Modbus RTU-Serieclient

package main

import (
    "fmt"
    "github.com/goburrow/modbus"
)

func main() {
    // 创建 RTU 客户端(RS-485)
    handler := modbus.NewRTUClientHandler("/dev/ttyUSB0")
    handler.BaudRate = 9600
    handler.DataBits = 8
    handler.Parity = "N"   // 无校验
    handler.StopBits = 1
    handler.SlaveId = 1
    handler.Timeout = 3 * time.Second
    
    err := handler.Connect()
    if err != nil {
        panic(err)
    }
    defer handler.Close()
    
    client := modbus.NewClient(handler)
    results, _ := client.ReadHoldingRegisters(0, 5)
    fmt.Printf("RTU 读取结果: % Xn", results)
}

Vorteile der Go-Sprache im industriellen IoT

Die Go-Sprache hat in den letzten Jahren im Bereich der IoT-Edge - Gateways aus mehreren Gründen an Popularität gewonnen:

  • Native Parallelität: Goroutine macht es einfach und effizient, Hunderte von Modbus-Slaven gleichzeitig zu verbinden
  • Einzelbinäre Bereitstellung: Kompiliert als eigenständige ausführbare Datei, ohne Laufzeit-Abhängigkeiten (z. B. JVM, Python-Interpreter), extrem einfach zu implementieren
  • Plattformübergreifend kompiliertGOOS=linux GOARCH=arm64 go buildCross-compilierbar auf ARM Linux (Raspberry Pi, Industrial Controller)
  • Memory Security: Automatische Garbage Collection und Memory-Sicherheitsüberprüfungen von Go sind besser geeignet als C-Sprache für das Schreiben von stabilen, langlaufenden Diensten

Python Modbus Test Kit (modbus-tk)

Modbus Test Kit (modbus-tk) ist eine implementierte Modbus-Protokollbibliothek, die im Google Code Archive verfügbar ist. Es unterstützt Modbus RTU und Modbus TCP und kann sowohl Client als auch Server schreiben. Eine weitere, modernere Option für Python-Benutzer istpymodbus, die unterschiedliche API-Stile haben, aber ähnliche Funktionsumfangs haben.

#!/usr/bin/env python3
# modbus-tk 基本使用示例
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_tcp

# 创建 TCP 主站
master = modbus_tcp.TcpMaster(host="192.168.1.100", port=502)
master.set_timeout(5.0)

# 读取从站 1 的保持寄存器 0-9
try:
    values = master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 10)
    print(f"读取结果: {values}")
except modbus_tk.modbus.ModbusError as exc:
    print(f"Modbus 错误: {exc}")

Auswahlempfehlungen für Modbus-Bibliotheken pro Sprache

AnwendungsszenarienEmpfohlene BibliothekenSpracheStatus
WebanwendungsintegrationphpmodbusPHPAbbrechen (nur UDP)
Edge-Gateway - Dienstgoburrow/modbusGoIncubating
Automatisierte Testskriptemodbus-tk / pymodbusPythonActive
Embedded LinuxlibmodbusCStable

Summary

Modbus ist zwar ein über 40 Jahre altes Protokoll, aber es gibt eine entsprechende Implementierung in verschiedenen modernen Programmiersprachen. PHP phpmodbus eignet sich für Web-Integrationsszenarien (obwohl nur UDP unterstützt), Go Goburrow / modbus zeigt das Potenzial der Go-Sprache für Edge-Computing im industriellen IoT, und Python pymodbus und modbus-tk sind die besten Optionen für das Schreiben automatisierter Testscripts und die Erstellung von Prototypen. Wählen Sie einfach die richtige Bibliothek für Ihren Sprachstack und Ihre Stabilitätsanforderungen.

Sollte man diese Informationen für ein echtes Projekt verwenden?

Gehen Sie zum Tool Center, um Nachrichten zu analysieren, CRC-Prüfungen und Geräte-Debugging zu erledigen, oder senden Sie Anforderungen für Auswahl - und Zugangsvorschläge.

Ingenieur Mitglied

Verwandeln Sie diesen Artikel in ein umsetzbares Debuggermaterial

Erweiterte Nachrichtenanalyse, Paket-Downloads, Codebeispiele, Engineering-Szenarien und Priority-Technischer Support sind für die Real-Projekt - Bereitstellung möglich.

Unbegrenzte Werkzeuge
Datenpaket und Codepaket
Vollständige Engineering Case-Basis
Vorrangiger Zugang zum technischen Support

Antwort veröffentlichen

Ihre E-Mail - Adresse wird nicht öffentlich gemacht. Erforderliche Elemente wurden verwendet * markiert.