1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PhpModbus を使う

Last updated at Posted at 2024-05-06

PhpModbus

PHPからModbusをアクセスする場合に便利なPhpModbusですが、2013年7月以後、エンハンスがされていない様子。まあ枯れた分野なので、ユーザ・サイドからしてもエンハンスしていただく必要はありません。
ただし、最終リリース版 0.8.r106 でも、そのままでは現在のPHPバージョンでは動きません。クラス ModbusMaster だけを使う限りでは、1ステップだけ修正する必要があります。他のクラスを使ったことはないので、他のクラスではどうなるのかは知りません。
1ステップだけの修正なので、エラーになっても臆せずに修正して使用してみてください。

なにが問題なのか

最終リリース版 0.8.r106 しか使用したことがありませんが、コンストラクタ名称に起因するエラーが発生します。
PHP4までは当然であった「コンストラクタの名称はクラスの名称と同じ」は、現在のPHPでは許されません。

PHP 7.0.x で推奨されなくなる機能

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技術の進歩は音速級ですからね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?