HOME 戻る

情報監視画面の作成と表示プログラム

 
 
監視画面は、ポイントの状態表示が主な役割であるが、一般情報を表示させる場合に用いることもある。
例えば以下監視画面の様に特定のポイントの状態を表示するのではなく、 ポイントとは無関係のシステム情報を表示する場合である。
ここで言うシステム情報とは何でも良く、任意に表示させたい(プログラム加工による)情報文字列である。
この画面例では、本日、昨日、一昨日の
1. 一日の最大温度とこれをマークした時間
2. 一日の最低温度とこれをマークした時間
3. 上記温度差と一日の日射量と例えば散水量
を別途プログラムで計測記録しておいて表示するものである。
従って、システム情報を表示するにはこれを出力するプログラムと併用して用いる必要がある。
以下画面にはおまけとして、現在時刻とシステムの設定情報も併せ表示させている。
※監視画面で表示できるものは、遠隔よりWeb画面でも参照できます。
 
 
 
 
 
【 情報監視画面の作り方 】
 
1. 監視パネルCADを起動し、静的な文字(静部品B/文字)や枠(静部品B/表)等をレイアウトします。
 
2. システム情報(情報文字列)を表示させたい所に、ポイントの属性文字枠(動部品A/属性文字)を置きます。
    ○ポイントの属性文字を使う理由
    ・ 監視画面では、ポイント情報しか表示出来ない仕様になっている。
    ・ 従って、ポイントの属性文字を介して任意の文字を表示させる。
    ○ポイントの属性文字を勝手に使って良いのか
    ・ システムに全く関与されないものであり用途は自由なので、勝手に使える。
    ・ 但し、文字はポイント情報の一部になるので、ポイントが警報状態になった時には、
    ・ 文字が警報で設定された色になるので色(カラー)の設定の所だけは注意が必要になる。
    ○属性文字の仕様
    ・ ポイント種別に関係なく全てのポイントに属性文字がある。
    ・ 1ポイントの文字属性は、属性1,属性2,属性3,属性4と4つある。
    ・ 1属性当たりの文字長は63バイトである。
    ・ 漢字1文字は、utf8の場合3バイト、eucの場合2バイト消費される。
    ・ 文字書き込み関数は、 kcxobj_atbut_cwt( objid, no, text );   [no=1〜4] である。
 
★下画面の設計例
a. 現在時刻の表示に、di001 ポイントの文字属性1を割り当てている。
b. 本日の最大温度の表示に、di001 ポイントの文字属性2を割り当てている。
c. システム設定の状態表示に、di002 ポイント文字属性4とdi003文字属性1を割り当て画面上で連結させている。
注:以下画面内の例えば赤色の"di001/文字属性1"というのは監視画面上の文字ではなく、本説明用に書き込んだ設計説明文字である。
 
 
 
 
 
【 文字色の設定 】
 
属性文字の色は、ポイント状態の影響を受けてしまうと前項で少し述べた。
これがポイントの状態を反映させるものと言う事であれば良いのだが、 ここの解説での文字の使い方は、 システムの状態を表すのであって 割り当てているポイント状態の影響を受けたくないと言う場合である。
この場合には、 つまりポイントが如何なる状態であろうとも色変えさせない色を作っておいてこれを使用すれば良いということになる。
ここでは、システム情報文字専用のカラーを作って使ってみる。
 
KaracrixBuilderでは、色の設定は「カラーリスト」という箱があってここにポイント状態別の色を設定しておく設計となっている。
本解説では、システム情報文字用の色を、カラーリスト番号「No.14」に設定する事にして進める。
○ 手順
  1. 監視パネルCADのカラーボタン(1)を押すと、"カラーリスト"画面が表示される。
  2. 画面右側のスクロールボタン(2)を移動し、画面左上(3)のNo.を 14 にする。
  3. (4)"正常ON/数"の表色を"Blue"、裏色を"Gray0"に選択画面(6)より設定する。
  4. (4)"正常OFF"の表色を"Blue"、裏色を"Gray0"に選択画面(6)より設定する。
  5. (5)"警報ON/数"の表色を"Blue"或は"Red"、裏色を"Gray0"に選択画面(6)より設定する。
  6. (5)"警報OFF"の表色を"Blue"或は"Red"、裏色を"Gray0"に選択画面(6)より設定する。
注:以下画面では、警報時の文字の色が(Red)になっているが、警報時でも(Blue)とする場合は(Blue)に設定する。
 
 
 
 
 
【 属性文字の設定 】
 
属性文字は、監視パネルCADの動部品Aの属性文字のボタン(1)より設定します。
○ 手順
  1. OBJID名を、割り当てます。
  2. 表示属性に、属性/文字列-1〜4を割り当てます。
  3. 表示点を、設定します。(最初適当に設定しておいて後でCAD移動すると良いでしょう)
  4. 表示文字数を、設定します。英数1文字は1字数として、漢字1文字は2文字数として扱われます。
  5. 描画は、表+裏にしておきます。
  6. カラーを、設定します。本解説では、14に設定します。
  7. フォントサイズを、適当に選択しておきます。
 
 
 
 
 
 
【 表示プログラムの作り方 】
 
ここまでの説明で、属性文字枠を監視パネル上に置く環境まで整った。
次は、その枠内に表示させるシステム情報なる文字列を作る。
文字列は、プログラムによって作成し、kcxobj_atbut_cwt()関数を用いてシステム(監視画面)に書き込む必要がある。
以上により、システム情報が監視画面に表示されるようになる。
 
表示プログラムの一部を下記に添付する。
1. while文を使用して、プログラムが負荷らないよう800msecウエイトを入れながらエンドレスで回している。
2. 現在時間を取得し、文字に変換して、di001の文字属性1へ書込んでいる。
3. 本日の最大温度と時間の表示をさせるのであるが、以下プログラムはサンプルで、max_today_temp,max_today_hour,max_today_minの値はハードコーディングされている。本来はプログラムの何処かで計測保持させたものを使用することになる。
 
#include  <karacrix.h>
main(argc,argv)
int   argc;
char *argv[];
{
  int          objid1,objid2,objid3;
  double       max_today_temp;
  int          max_today_hour;
  int          max_today_min;
  char         sysmesg1[1024];
  char         sysmesg2[1024];
  char         text[1024];
  struct tm    jikan;

    kcxinit( argc, argv );

    objid1 = kcxobj_open( "di001" );
    objid2 = kcxobj_open( "di002" );
    objid3 = kcxobj_open( "di003" );

    while( 1 ){

      /*(1)現在時間の表示*/
      kcxtim_whattime( &jikan );
      sprintf( text, "%2d月%2d日  %02d時%02d分%02d秒",
               jikan.tm_mon,jikan.tm_mday,jikan.tm_hour,jikan.tm_min,jikan.tm_sec);
      kcxobj_atbut_cwt( objid1, 1, text ); /*di001文字属性1へ書込*/

      /*(2)本日の最大温度と時間の表示*/
      max_today_temp = 24.5; /*←本来プログラムの何処かで計測保持しておくもの*/
      max_today_hour = 14;   /*←本来プログラムの何処かで計測保持しておくもの*/
      max_today_min  = 8;    /*←本来プログラムの何処かで計測保持しておくもの*/
      sprintf( text, "%4.1f℃ /%02d:%02d", max_today_temp,max_today_hour,max_today_min );
      kcxobj_atbut_cwt( objid1, 2, text ); /*di001文字属性2へ書込*/
      .
      .
      .

      /*(3)現在のシステム設定状態の表示*/
      strcpy( sysmesg1, "自動制御=ON, 警報メール設定=ON" ); /*←(本来プログラム処理生成)*/
      strcpy( sysmesg2, ".. 朝起動=04:32   "             ); /*←(本来プログラム処理生成)*/
      kcxobj_atbut_cwt( objid2, 4, sysmesg1 ); /*di002文字属性4へ書込*/
      kcxobj_atbut_cwt( objid3, 1, sysmesg2 ); /*di003文字属性1へ書込*/

      kcxtim_tsleep( 800000 ); /*プログラムウエイト(800msec)*/

    }
}
 
 

HOME 戻る