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

無料無料技术资料

这篇内容可直接阅读,适合用于基础学习和検索引流。

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

PHP Modbusライブラリphpmodbus

phpmodbusはPHPで実装されたModbus UDP/TCP 通信ライブラリで、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 通信エラー”. $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 年の最新の説明によると、このライブラリはまだ“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アプリケーションの統合phpmodbusPHP停止UDP only
Edge Gatewayサービスgoburrow/modbusGoIncubating
テストスクリプトの自動化modbus-tk / pymodbusPythonアクティブな活動
組み込みLinuxlibmodbusC安定した

概要まとめ

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

この資料を実際のプロジェクトに活用しませんか?

ツールセンターで電文解析、CRCチェック、デバイスデバッグを行うか、要件を送信して選定と接続のアドバイスを受けましょう。

エンジニア会員

この記事を実行可能なデバッグ資料に

登録すると、高度な電文解析、資料パックのダウンロード、コード例、エンジニアリングケース、優先技術サポートが利用可能に。実際のプロジェクト納品に最適です。

高度なツール無制限
資料パックとコードパック
完全なエンジニアリングケースライブラリ
優先技術サポート窓口

发表回复

あなたのメールアドレスアドレス不会被公开。 必須項目已用 * 标注