PHP和Go语言Modbus库使用指南:phpmodbus与go-modbus实战

kostenlosKostenloses technisches Material

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

PHP和Go语言Modbus库使用指南:phpmodbus与go-modbus实战缩略图
🌐 Diese Seite ist noch nicht auf Deutsch verfügbar. Die chinesische Version wird angezeigt. Zurück zur chinesischen Seite.
本文目录
  1. 1. PHP Modbus 库(phpmodbus)
  2. 2. 安装与基础使用
  3. 3. FC16 写多个保持Register.
  4. 4. FC23 组合读写
  5. 5. Go Modbus 库(goburrow/modbus)
  6. 6. 安装
  7. 7. Modbus TCP 客户端Beispiel
  8. 8. Modbus RTU Die Serie客户端
  9. 9. Go 语言在Das industrielle Internet der Dinge中的优势
  10. 10. Python Modbus Test Kit(modbus-tk)
  11. 11. 各语言 Modbus 库Empfehlungen wählen
  12. 12. 总结

PHP Modbus 库(phpmodbus)

phpmodbus 是一个用 PHP 实现的 Modbus UDP/TCP Kommunikation库,项目托管在 Google Code Archive:code.google.com/p/phpmodbus(已归档)。它实现了 Modbus UDP Vereinbarung的基本Funktion,支持 FC03(Lesen Sie das Register)、FC16(写多Register.)、FC23(读/写多Register.)。

尽管 Modbus UDP 在Industrie-Standort远不如 Modbus TCP Häufig,但 phpmodbus 在某些特殊的 Web Anwendungsszenarien中有独特价值——比如在 PHP 编写的 SCADA 看板Webseite中直接Lesen Modbus UDP Ausrüstung的Daten、或者通过浏览器界面Fernsteuerung Modbus Ausrüstung。

安装与基础使用

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

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

try {
    // FC03: LesenVon der Station 1,Ausgang Adresse 0,10 个保持Register.
    $data = $modbus->readMultipleRegisters(1, 0, 10);
    
    // 输出Ergebnis
    echo "Lesenzu的Registerdaten:n";
    for ($i = 0; $i < count($data); $i++) {
        echo sprintf("  Adresse %d: %d (0x%04X)n", $i, $data[$i], $data[$i]);
    }
} catch (Exception $e) {
    echo "Modbus KommunikationFehler.: " . $e->getMessage();
}
?>

FC16 写多个保持Register.

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

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

// FC16: Von der Station 1,Ausgang Adresse 10,写入 4 ein Register.
$modbus->writeMultipleRegister(1, 10, $values);
echo "写入成功n";
?>

FC23 组合读写

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

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

echo "Daten lesen: ";
print_r($readData);
echo "写入Daten: ";
print_r($valuesToWrite);
?>

Go Modbus 库(goburrow/modbus)

go-modbus(全称 github.com/goburrow/modbus)是一个用 Go 语言编写的 Das Modbus-Protokoll客户端库,GitHub Adresse:github.com/goburrow/modbus。它被描述为”fault-tolerant, fail-fast”的实现——在设计上注重Fehler.处理和快速失败,适合在可靠性和稳定性要求较高的工业边缘网关Szene中使用。

⚠️ 注意:根据 modbus.org 2024 Jahr的最新描述,该库仍处于”incubating”阶段,”do not use in production yet (more testing needed)”。虽然 API 设计优秀,但在生产环境中使用前需要充Unterteilung测试。

安装

go get github.com/goburrow/modbus

Modbus TCP 客户端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
    
    // 建立Verbindung
    err := handler.Connect()
    if err != nil {
        fmt.Printf("Verbindung失败: %vn", err)
        return
    }
    defer handler.Close()
    
    client := modbus.NewClient(handler)
    
    // Lesen 10 个保持Register.(Adresse 0-9)
    results, err := client.ReadHoldingRegisters(0, 10)
    if err != nil {
        fmt.Printf("Lesen gescheitert: %vn", err)
        return
    }
    
    fmt.Println("Registerdaten:")
    for i := 0; i < len(results)-1; i += 2 {
        value := uint16(results[i])<<8 | uint16(results[i+1])
        fmt.Printf("  Adresse %d: %d (0x%04X)n", i/2, value, value)
    }
    
    // Schreiben in ein einzelnes Register
    err = client.WriteSingleRegister(0, 1234)
    if err != nil {
        fmt.Printf("写入失败: %vn", err)
    } else {
        fmt.Println("写入成功")
    }
}

Modbus RTU Die Serie客户端

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"   // 无Prüfungen
    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 LesenErgebnis: % Xn", results)
}

Go 语言在Das industrielle Internet der Dinge中的优势

Go 语言近Jahr来在Das industrielle Internet der Dinge边缘网关领域越来越受欢迎,原因有几个:

  • 原生并发:goroutine 让同时Verbindung数百个 Modbus Von der Station变得简单高效
  • 单Binärsystem部署:编译后是一个独立可执行文件,无需Betrieb时依赖(如 JVM、Python 解释器),部署极其简单
  • 跨平台编译GOOS=linux GOARCH=arm64 go build 即可交叉编译zu ARM Linux(Raspberry Pi、Arbeitskontrolle机)
  • 内存安全:相比 C 语言,Go 提供的自动垃圾回收和内存安全检查更适合编写稳定的长ZeitBetrieb服务

Python Modbus Test Kit(modbus-tk)

Modbus Test Kit(modbus-tk)是一个 Python 实现的 Das Modbus-Protokoll库,项目在 Google Code Archive。它支持 Modbus RTU 和 Modbus TCP,可以同时编写客户端和Der Server。对于 Python 用户来说,另一个更现代的Auswahl是 pymodbus,两者 API 风格不同但Funktion覆盖类似。

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

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

# LesenVon der Station 1 的保持Register. 0-9
try:
    values = master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 10)
    print(f"LesenErgebnis: {values}")
except modbus_tk.modbus.ModbusError as exc:
    print(f"Modbus Fehler.: {exc}")

各语言 Modbus 库Empfehlungen wählen

使用Szene推荐库语言Status
Web 应用集成phpmodbusPHP停更(UDP only)
边缘网关服务goburrow/modbusGoIncubating
自动化测试Drehbuchmodbus-tk / pymodbusPython活跃
Eingebettet LinuxlibmodbusC稳定

总结

Modbus 虽然是一个诞生超过 40 Jahr的老Vereinbarung,但在各种现代编程语言中都有对应的实现。PHP 的 phpmodbus 适合 Web 集成Szene(尽管只支持 UDP),Go 的 goburrow/modbus 展现了 Go 语言在Das industrielle Internet der Dinge边缘Berechnung的潜力,Python 的 pymodbus 和 modbus-tk 则是编写自动化测试Drehbuch和研究原型的最佳Auswahl。根据你的项目语言栈和稳定性需求Auswahl合适的库即可。

Techniken术语(共 7 个)—— Klick auf展开
Modbus RTU基于串行链路的ModbusVereinbarung,使用BinärsystemCodierung和CRC-Test
Modbus TCP基于Ethernet的ModbusVereinbarung变体,使用TCP/IP传输
Register.Modbus Register.存储Daten单元,Unterteilung线圈/离散输入/保持/输入Register.四类
SCADADatenerfassung与监视控制Das System,用于Fern entfernt监控工业过程
网关Vereinbarung转换Ausrüstung,如 Modbus RTU ↔ Modbus TCP
Die SerieBerechnung机与外部Ausrüstung进行串行Kommunikation的物理Schnittstelle
保持Register.Modbus 16位可读Schreiben von Daten,Adresse从40001开始
来源/Werkzeuge信息 —— Klick auf展开
来源 Modbus Chinesisches Netzwerk(modbus.cn) —— Inländisch führend.ModbusKommunikationsprotokoll Technologie Gemeinschaft Klassifizierung Modbus Programmierung 字数 3730 字 · 阅读约 10 Unterteilung钟 更新 2026-06-26 永久链接 https://www.modbus.cn/43933.html
Empfohlene Werkzeuge: Modbus Debugger-Assistent WeChat-Applet
Modbus Chinesisches Netzwerk官方推出的Modbus Debugging-Tools,支持 Modbus RTU/TCP 实时KommunikationTests、Register.读写、线圈控制、Daten监控和MeldungUnterteilung析。 keine Installation erforderlich,Mikro-Suche「Modbus DebuggingAssistenten.」Benutzt werden kann.。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
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.