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/modbusModbus 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アプリケーションの統合 | phpmodbus | PHP | StopUDP only |
| Edge Gatewayサービス | goburrow/modbus | Go | Incubating |
| テストスクリプトの自動化 | modbus-tk / pymodbus | Python | アクティブな活動 |
| 組み込みLinux | libmodbus | C | 安定した |
概要まとめ
Modbusは40 年以上前の古いプロトコルですが、現代のプログラミング言語に実装されています。PHPのphpmodbusはウェブ統合シナリオに適しており(UDPのみをサポートしていますが)、Goのgoburrow/modbusは産業用モノのインターネットのエッジコンピューティングにおけるGoの可能性を示しています。Pythonのpymodbusとmodbus-tkは自動テストスクリプトや研究プロトタイプを書くのに最適です。プロジェクトの言語スタックと安定性要件に応じて適切なライブラリを選択してください。
Leave a Reply