PHP + MX Component
どうやら三日坊主にはならなかったようです。12月連続記事企画、4日目の今日は「PHP + MX Component」という、一体誰がそんなことをするんだ!?という記事を書いてみたいと思います。
XAMPP
昨日も書きましたが、大事なことなのでもう一度書きます。今の私だったら Windows を Home から Pro にアップグレードして、IIS で Web 画面を作ります。その方が色々と上手くいきます。
とは言え、OS のアップグレードができない場合もあります。そんな時は XAMPP でしょう。XAMPP を使うと、PHP の動作環境をとても簡単に用意することができます。
PHP
PHP で MX Component を使って PLC のデータを読み込む、簡単なコードを以下に示します。
COM の操作は面倒なので、まずは適当なクラスを用意しましょう。
class ActMLEasyIf {
const NO_ERROR = 0;
private $com = FALSE;
function __construct($stn) {
$com = new COM('ActMulti.ActMLEasyIF');
$com->ActLogicalStationNumber = new VARIANT(intval($stn));
$err = $com->Open();
if ($err != ActMLEasyIf::NO_ERROR) {
throw new Exception('PLCに接続できませんでした');
}
$this->com = $com;
}
function __destruct() {
if ($this->com != FALSE) $this->com->Close();
}
function read_data($addr, $len) {
$v_buf = new VARIANT(array_fill(0, $len, FALSE), VT_ARRAY | VT_VARIANT);
$v_addr = new VARIANT($addr);
$v_len = new VARIANT($len)
$err = $this->com->ReadDeviceBlock2($v_addr, $v_len, $v_buf);
if ($err != ActMLEasyIf::NO_ERROR) {
throw new Exception('データの読み出し中にエラーが発生しました');
}
$data = array();
foreach($v_buf as $v_val) {
$data[] = $v_val;
}
return $data;
}
}
以下のコードで、論理局番 0 の PLC の、ZR1000 から100ワードのデータを読み出すことができます。
$plc = new ActMLEasyIf(0);
$data = $plc->read_data('ZR1000', 100);
書き方がわかれば簡単ですね。読み出したデータは整数の配列として扱うことができます。
制限事項
- この記事で紹介しているコードは、説明のためにエラー処理を省略しています。実際にはもう少し真面目にエラー処理を実装する必要があります。
- PLC との接続は、ページ毎に毎回切断してください。さもなくば、三菱電機の呪いがあなたに降りかかることでしょう。
- 同時接続が発生する場合、接続毎に MX Component の論理局番を別にすると上手く動きます。
明日は JavaScript の記事を書いてみたいと思います。
この記事の投稿者
この投稿者の最近の記事
- 2020年5月30日さきラボFA-HAT 開発中
- 2020年4月11日さきラボ工場の設備をネットワークで接続したいけど何をどうしたらいいのか? そんな時はおまかせください!
- 2020年4月10日さきラボテレワークを推奨しない理由
- 2019年10月6日Raspberry Pi と PLC で作る Factory Automationファイルシステムの変換方法
“PHP + MX Component” に対して1件のコメントがあります。
コメントは受け付けていません。