3.3.PHPでカスタマイズできる例
F&e Web Serverのサンプルモニタリング画面の全てはPHPを利用して作成しています。
モニタリングだけであればHTML+JavaAppletでも実現できるのですが、
「F&e Web Serverで設定された信号名称を引用する」
「F&eWSサービスの動作状態を表示する」
等の表示を行う際にはPHPを使う必要があります。
これらの機能を有効にするには事前に以下の記述しておく必要があります。
F&e Web Serverのサンプルモニタリング画面には全てこの記述が含まれています。
F&e Web Serverのモニタリング画面をPHPで作成場合に必須の記述
#!/usr/local/bin/php
<!--
<?
///// F&eWS定義部 ここから(変更しないで下さい) /////
include("include/fws_monitor.inc");
include("include/common.def");
include("include/fws_device.cls");
include("include/fws_signal.cls");
include("include/fws_plc.cls");
$fws_device = new fws_dev( $DevInfoFile );
$fws_plc = new fws_plc( );
for( $i = 0; $i < 8 ; $i++ ){
$FWS[$i] = new fws_signal( $fws_device->device_id[$i] );
if( $fws_device->category_id[$i] > 0 && $fws_device->category_id[$i] < 4 ){
$FWS[$i]->getDataArray();
}
}
// PLCの情報を読込み
for( $i = 0x10; $i < 0x20 ; $i++ ){
$FWS["P".($i-0x10)] = new fws_signal( $i );
if( $FWS["P".($i-0x10)]->read_size > 0 ){
$FWS["P".($i-0x10)]->getDataArray();
}
}
// 仮想デバイスの情報を読込み
for( $i = 0x20; $i < 0x24 ; $i++ ){
$FWS["U".($i-0x20)] = new fws_signal( $i );
if( $FWS["U".($i-0x20)]->read_size > 0 ){
$FWS["U".($i-0x20)]->getDataArray();
}
}
///// F&eWS定義部 ここまで(変更しないで下さい) /////
?>
-->
*.仮想デバイスの記述はVer 1.05で追加になりました。
仮想デバイスの値を扱う場合には記述が必要ですので追記してください。
F&e Web Server が提供する機能でPHPから使えるものには以下のものがあります。
・F&e Web Server名称の表示
…(1)
・F&e Web Serverのサービス状態の表示
…(2)
・F&e Web Serverのシステム日時の表示
…(3)
・信号名称の表示
…(4)
・信号値の表示
…(5)
・デジタル出力用ボタンの表示
…(6)
・デジタル現在値による画像切り替え
…(7)
以下ではsample2.phpを例にPHPを使って作成できる画面・機能を説明します。
PHPを使ったサンプル画面(sample2.php)
3.3.1.F&e Web Server名称の表示
F&e Web Serverの名称を表示するには以下の記述で行えます。
<? ShowName(); ?>
実際の表示が (1) になります。
3.3.2.F&e Web Serverのサービス状態の表示
F&e Web Serverのサービスの状態を表示するには以下の記述で行えます。
<? ShowStatus(); ?>
表示は TABLEタグ で表組みされ、以下のHTMLに変換されます。
<TABLE BORDER="1">
<TR>
<TH>F&eWSサービス状態</TH>
<TD BGCOLOR="#aaffaa"><B>起動中</B></TD>
</TR>
</TABLE>
サービスの状態は「起動中」「停止中」「メンテナンスモード」の3種類の表示で表します。
実際の表示が (2) になります。
3.3.3.F&e Web Serverのシステム日時の表示
F&e Web Serverのシステム日時を表示するには以下の記述で行えます。
<? ShowDateTime(); ?>
実際の表示が (3) になります。
3.3.4.信号名称の表示
デバイス設定で設定されたそれぞれの信号名称を表示するには以下の記述で行えます。
<? $DevId = 0; $Ch = 0; $Type = 0; ?>
<? $FWS[$DevId]->Name( $Ch, $Type ); ?>
まず1行目の
<? $DevId = 0; $Ch = 2; $Type = 0; ?>
で表示する信号の指定を行っています。
ここでは $DevID = 0 の 0 の部分に名称を表示したい信号のDeviceIDを、
$Ch = 2 の 2 の部分に表示したい信号のチャネル番号を、
$Type = 0 の 0 の部分に表示したい信号のタイプを指定します。
これらの値はデバイスによって指定できる値が異なり、以下のようになります。
デバイスの種類 |
指定可能な$DevId |
指定可能な$Ch |
指定可能な$Type |
デジタル入出力
(DIO-8/8,DIO-16/16)
|
0 〜 7 |
0 〜 31 |
【DIO-8/8】
CHが0〜7(X)のとき
0…現在値, 1…カウント値, 2…ON時間値
CHが8〜15(Y)のとき
0…現在値のみ
【DIO-16/16】
CHが0〜15(X)のとき
0…現在値, 1…カウント値, 2…ON時間値
CHが16〜31(Y)のとき
0…現在値のみ
|
デジタル入力
(DI-16,DI-32)
|
0 〜 7 |
0 〜 31 |
0…現在値, 1…カウント値, 2…ON時間値 |
デジタル出力
(DO-16,DO-32)
|
0 〜 7 |
0 〜 31 |
0…現在値のみ |
アナログ入力,PT入力
(ADI12-8,ADI16-4,PTI-4)
|
0 〜 7 |
0 〜 7 |
0…現在値のみ |
カウンタ入力
(CNT24-2,CNT16-8x)
|
0 〜 7 |
0 〜 7 |
0…現在値, 1…増分カウント値 |
PLC
MELSEC-A/Q/FX、FPシリーズなど
|
P0 〜 P15*1 |
0 〜 47*2 |
0…現在値のみ |
仮想デバイス
|
U0 〜 U3*3 |
0 〜 47 |
0…現在値のみ |
*1.P0〜P15 は要求番号の 1〜16 に対応
*2.0〜47 は先頭アドレスからの点数 1〜48 に対応
32ビット値指定の時は偶数番号を指定してください。
[例].P0がD-1000から読込み、32ビット信号を指定の場合
→ D-1000+D-1001 = P0-0 を指定
→ D-1002+D-1003 = P0-2 を指定
*3.U0〜U3 は仮想デバイスNo. 0〜3 に対応
例えば...
DeviceIDが0に設定されているDIO-8/8のX-6(CH6)のON時間値の信号を指定
<? $DevId = 0 ; $Ch = 6 ; $Type = 2; ?>
DeviceIDが2に設定されているADI12-8のCH1を指定
<? $DevId = 2 ; $Ch = 1 ; $Type = 0; ?>
DeviceIDが3に設定されているCNT24-2のCH0の増分カウントを指定
<? $DevId = 3 ; $Ch = 0 ; $Type = 1; ?>
PLCで要求番号1の先頭から5点目のデータを指定
<? $DevId = P0 ; $Ch = 4 ; $Type = 0; ?>
PLCで要求番号3の先頭のデータを指定
<? $DevId = P2 ; $Ch = 0 ; $Type = 0; ?>
仮想デバイスで仮想デバイスNo.3の2点目のデータを指定
<? $DevId = U3 ; $Ch = 1 ; $Type = 0; ?>
のように記述することになります。
信号の指定が終わったら2行目の
<? $FWS[$DevId]->Name( $Ch, $Type ); ?>
で実際に1行目でセットされた信号の名称を表示します。
PLCの場合、信号名称としてアドレスが表示されます。
実際の表示が (4) になります。
3.3.5.信号値の表示
それぞれの信号の値を表示するには以下の記述で行えます。
<? $DevId = 0; $Ch = 0; $Type = 0; ?>
<? $FWS[$DevId]->Data( $Ch, $Type ); ?>
1行目の
<? $DevId = 0; $Ch = 2; $Type = 0; ?>
で表示する信号の指定を行っています。
内容は「3.3.4.信号名称の表示」と同じです。
信号の指定が終わったら2行目の
<? $FWS[$DevId]->Data( $Ch, $Type ); ?>
で実際に1行目でセットされた信号の値を表示します。値は全て10進数で表示されます。
実際の表示が (5) になります。
3.3.6.デジタル出力用ボタンの表示
デジタル出力用のボタンを表示するには以下の記述で行えます。
<? $DevId = 5; $Ch = 0; $Type = 0; ?>
<? DoButton( $DevId, $Ch, $FWS[$DevId]->getData( $Ch, $Type ) ); ?>
1行目の
<? $DevId = 5; $Ch = 0; $Type = 0; ?>
で表示する信号の指定を行っています。指定する内容は「3.3.4.信号名称の表示」と同じです。
信号の指定が終わったら2行目の
<? DoButton( $DevId, $Ch, $FWS[$DevId]->getData( $Ch, $Type ) ); ?>
で実際に1行目でセットされたデジタル出力用のボタンを表示します。
実際の表示が (6) になります。
3.3.7.デジタル現在値による画像切り替え
デジタル入力値(出力の現在値も含まれます)に合わせて画像を切り替える場合には以下の記述で行えます。
HTMLヘッダ内に以下の記述を追加
<SCRIPT LANGUAGE="JavaScript" SRC="/dispgif.js"></SCRIPT>
実際に画像を表示したい個所に以下の記述を追加
<? $DevId = 5; $Ch = 0; $Type = 0; ?>
<SCRIPT LANGUAGE="JavaScript">
<!--
disp_gif("<? $FWS[$DevId]->Data( $Ch, $Type ); ?>");
-->
</SCRIPT>
標準の状態では
信号状態 |
表示画像 |
表示画像ファイル |
ON時 |
 |
/usr/apache/html/images/btn_aqua_green_15x15.gif |
OFF時 |
 |
/usr/apache/html/images/btn_aqua_red_15x15.gif |
サービス停止時 |
 |
/usr/apache/html/images/btn_aqua_gray_15x15.gif |
の画像表示になります。
画像の指定は /usr/apache/html/dispgif.js にて指定されていますので、
画像を変更したい場合は編集を行って下さい。
実際の表示が (7) になります。
3.3.8.デジタル入力カウント値(ON時間値)変更用フォームの表示
デジタル入力カウント値(ON時間値)変更用フォームを表示するには以下の記述で行えます。
[カウント値変更用フォーム]
<? $DevId = 5; $Ch = 0; $Type = 1; ?>
<? SwCntChange( $DevId, $Ch, 0, $FWS[$DevId]->getData( $Ch, $Type ) ); ?>
1行目の
<? $DevId = 5; $Ch = 0; $Type = 1; ?>
で表示する信号の指定を行っています。
指定する内容は「3.3.4.信号名称の表示」と同じです。
信号の指定が終わったら2行目の
<? SwCntChange( $DevId, $Ch, 0, $FWS[$DevId]->getData( $Ch, $Type ) ); ?>
でカウント値変更用のフォームを表示します。
[ON時間値変更用フォーム]
<? $DevId = 5; $Ch = 0; $Type = 2; ?>
<? SwCntChange( $DevId, $Ch, 1, $FWS[$DevId]->getData( $Ch, $Type ) ); ?>
1行目の
<? $DevId = 5; $Ch = 0; $Type = 2; ?>
で表示する信号の指定を行っています。
指定する内容は「3.3.4.信号名称の表示」と同じです。
信号の指定が終わったら2行目の
<? SwCntChange( $DevId, $Ch, 1, $FWS[$DevId]->getData( $Ch, $Type ) ); ?>
でON時間値変更用のフォームを表示します。
3.3.9.カウンタ入力値変更用フォームの表示
カウンタ入力値変更用フォームを表示するには以下の記述で行えます。
<? $DevId = 5; $Ch = 0; $Type = 1; ?>
<? HwCntChange( $DevId, $Ch, $FWS[$DevId]->getData( $Ch, $Type ) ); ?>
1行目の
<? $DevId = 5; $Ch = 0; $Type = 1; ?>
で表示する信号の指定を行っています。
内容は「3.3.4.信号名称の表示」と同じです。
信号の指定が終わったら2行目の
<? HwCntChange( $DevId, $Ch, $FWS[$DevId]->getData( $Ch, $Type ) ); ?>
でカウンタ入力値変更用のフォームを表示します。