PHPからModbusをアクセスする場合に便利なPhpModbusですが、2013年7月以後、エンハンスがされていない様子。まあ枯れた分野なので、ユーザ・サイドからしてもエンハンスしていただく必要はありません。
ただし、最終リリース版 0.8.r106 でも、そのままでは現在のPHPバージョンでは動きません。クラス ModbusMaster だけを使う限りでは、1ステップだけ修正する必要があります。他のクラスを使ったことはないので、他のクラスではどうなるのかは知りません。
1ステップだけの修正なので、エラーになっても臆せずに修正して使用してみてください。
なにが問題なのか
最終リリース版 0.8.r106 しか使用したことがありませんが、コンストラクタ名称に起因するエラーが発生します。
PHP4までは当然であった「コンストラクタの名称はクラスの名称と同じ」は、現在のPHPでは許されません。
PhpModbus のコンストラクタ名称は、PHP4時代の記法にもとづいているらしく「クラスの名称と同じ」なのです。エラーの原因はこれです。
修正
diffを見てもらえばわかると思います。
c:\Phpmodbus_0.8.r106\Phpmodbus>diff ModbusMaster.php.bak ModbusMaster.php
--- ModbusMaster.php.bak
+++ ModbusMaster.php
@@ -58,7 +58,8 @@
* @param String $host An IP address of a Modbus TCP device. E.g. "192.168.1.1"
* @param String $protocol Socket protocol (TCP, UDP)
*/
- function ModbusMaster($host, $protocol){
+ function __construct($host, $protocol){
+ // function ModbusMaster($host, $protocol){
$this->socket_protocol = $protocol;
$this->host = $host;
}
ところでなぜにPHPからModbusなのか
なんでもかんでもPLCで、てのはおかしいと思いませんか?
WEBからModbusを含むFAのインタフェースをアクセスする、なんてのは、とっくの昔に常識になっていてもよいと思うんですよ。なぜなら、FAの進歩に比べれば、WEBを含むIT技術の進歩は音速級ですからね。