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/modbusModbus 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 kompiliert:
GOOS=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
| Anwendungsszenarien | Empfohlene Bibliotheken | Sprache | Status |
|---|---|---|---|
| Webanwendungsintegration | phpmodbus | PHP | Abbrechen (nur UDP) |
| Edge-Gateway - Dienst | goburrow/modbus | Go | Incubating |
| Automatisierte Testskripte | modbus-tk / pymodbus | Python | Active |
| Embedded Linux | libmodbus | C | Stable |
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.
Antwort veröffentlichen