PHPとGo言語のModbusライブラリの使用ガイド:phpmodbusとgo-modbus

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

PHPとGo言語のModbusライブラリの使用ガイド:phpmodbusとgo-modbus

PHP Modbusライブラリphpmodbus

phpmodbusはPHPで実装されたModbus UDP/TCP Communicationライブラリで、Google Code Archiveでホストされている。code.google.com/p/phpmodbus(アーカイブされた。Modbus UDPプロトコルの基本機能を実装し、FC03(リードホールドレジスタ)、FC16(ライトマルチレジスタ)、FC 23(リード/ライトマルチレジスタ)をサポートしています。

Modbus UDPはModbus TCPよりも産業界でははるかに一般的ではありませんが、phpmodbusは、PHPで書かれたSCADAかんばんサイトからModbus UDPデバイスから直接データを読み取ったり、ブラウザインターフェースを介してModbusデバイスをリモート制御したりするなど、特定のWebアプリケーションシナリオでユニークな価値を持っています。

インストールと基本的な使用

<? PHPは
//phpmodbusライブラリのインポート
require_once 'PhpModBus.php';

//Modbus UDPマスターインスタンスの作成
$modbus = new modbus UdpMaster('192.16 8.1.100',50 2);

Try {
    // FC03読み出しスレーブ1、アドレス0、保持レジスタ10 个
    $data = $mod-readpleRegisters 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 Communicationエラー”. $e-getMessage;
}
?& GT;

FC16複数の保持レジスタの書き込み

<? PHPは
$modbus = new modbus UdpMaster('192.16 8.1.100',50 2);

//書き込むデータ
$values = [100 200 300 400];

//FC16スレーブ1、アドレス10、4レジスタへの书き込み
$mod-epleRegister 1 10 $val;
echo "書き込みが成功しましたn";
?& GT;

FC 23の読み書き

<? PHPは
$modbus = new modbus UdpMaster('192.16 8.1.100',50 2);

FC 23:読み取りアドレス0-9、書き込みアドレス10 ~ 13
$valuesToWrite = [99 88 77 66];
$readData = $mod-readWriteRegisters 1 0 10 10 $valuesTo;

echo "データの読み取り";
print_r $readData;
echo "データを書き込む";
print_r $valuesTo;
?& GT;

Go Modbusライブラリ(goburrow/modbus)

go-modbus(フルネーム)github.com/goburrow/modbus)はGo言語で書かれたModbusプロトコルクライアントライブラリで、GitHubアドレスは:github.com/goburrow/modbus。“fault-tolerant fail-fast”実装として説明されています。エラー処理と高速障害を重視した設計で、信頼性と安定性が要求される産業用エッジゲートウェイのシナリオでの使用に適しています。

⚠️注意点はmodbus.orgの2024 yearの最新の説明によると、このライブラリはまだ“incubating”段階にあり、“do not use in production yet APIはよく設計されていますが、本番環境で使用する前に十分なテストが必要です。

インストールする。

go get github.com/goburrow/modbus

Modbus TCPクライアントの例

パッケージ·メイン

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
    もしそうなら!”Nil {
        fmt.Printf "接続に失敗しました%vn" err
        Return To Returnシングル
    }
    defer handler.Close
    
    client = modbus.NewClient handler
    
    //10個のホールドレジスタ(アドレス0-9)を読み込む
    rets err =. ReadingRegisters 0 10
    もしそうなら!”Nil {
        fmt.Printf "読み取りに失敗しました%vn" err
        Return To Returnシングル
    }
    
    fmt.Println "レジスタデータ"
    for i = 0; i rets-1; i += 2 {
        value = uint16 results[i]<< 8| uint16 results[i+1]
        fmt.Printf "ロケーション%d % d 0x % 04X n" i/2 value
    }
    
    //単一レジスタへの書き込み
    err =.WriteSingleRegister 0 1234
    もしそうなら!”Nil {
        fmt.Printf "書き込みに失敗しました%vn"、err
    (エルゼ)
        fmt.Println“書き込み成功”
    }
}

Modbus RTUクライアント

パッケージ·メイン

import
    “fmt”
    “github.com/goburrow/modbus”
)

func main {
    RTUクライアント(RS-48 5)の作成
    ler
    handler.BaudRate = 96 00
    handler.DataBits = 8
    handler.Parity = "N"   //チェックなし
    handler.StopBits = 1
    handler.SlaveId = 1
    handler.Timeout = 3 * time.Second
    
    err = handler.Connect
    もしそうなら!”Nil {
        panic err
    }
    defer handler.Close
    
    client = modbus.NewClient handler
    rets_=. ReadingRegisters 0 5
    fmt.Printf "RTU読み取り結果% Xn" results
}

産業用モノのインターネットにおけるGo言語の利点

Go言語は、いくつかの理由から、近年、産業用IoTエッジゲートウェイの分野で人気が高まっています。

  • 原初同時開催:goroutineは数百のModbusスレーブを同時に簡単かつ効率的に接続できます
  • シングルバイナリ展開コンパイルされると、実行時の依存関係(JVM、Pythonインタプリタなど)がなく、デプロイが非常に簡単になります。
  • クロスプラットフォームコンパイルGOOS=linux GOARCH=arm64 go buildARM Linux(Raspberry Pi、産業用コンピュータ)にクロスコンパイル可能
  • メモリの安全性Goが提供する自動ガベージコレクションとメモリ安全チェックは、C言語よりも安定した長時間実行可能なサービスを書くのに適しています。

Python Modbus Test Kit(modbus-tk)

Modbus Test Kit(modbus-tk)は、Google Code ArchiveにあるModbusプロトコルライブラリのPython実装である。Modbus RTUとModbus TCPをサポートし、クライアントとサーバの両方を記述することができる。Pythonユーザのためのもう一つのより現代的なオプションはpymodbusAPIスタイルは異なりますが、機能は似ています。

#!/ usr/bin/env Python 3の設定
# modbus-tk 基本的な使用例
import mod_tk
import modbus_tk.defines as cst
modbus_tkからmodbus_tcpをインポート

#TCPマスターの作成
master = modbus_tcp.TcpMaster host="192.168.1.100"、port=502
master.set_out 5.0

#ステーション1の保持レジスタ0-9から読み取る
try
    values = master.execute 1 cst. READ_HOLDING_REGISTERS 0 10
    print f"読み込み{val}"
except modbus_tk.modbus.ModbusError as exc
    print f "エラー {exc}"

言語別Modbusライブラリの選択

シーンの使用おすすめの図書館言語は状態の状態
Webアプリケーションの統合phpmodbusPHPStopUDP only
Edge Gatewayサービスgoburrow/modbusGoIncubating
テストスクリプトの自動化modbus-tk / pymodbusPythonアクティブな活動
組み込みLinuxlibmodbusC安定した

概要まとめ

Modbusは40 年以上前の古いプロトコルですが、現代のプログラミング言語に実装されています。PHPのphpmodbusはウェブ統合シナリオに適しており(UDPのみをサポートしていますが)、Goのgoburrow/modbusは産業用モノのインターネットのエッジコンピューティングにおけるGoの可能性を示しています。Pythonのpymodbusとmodbus-tkは自動テストスクリプトや研究プロトタイプを書くのに最適です。プロジェクトの言語スタックと安定性要件に応じて適切なライブラリを選択してください。

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

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