INtimeドキュメンタリトップへ

NT側グラフ表示アプリケーション

課題
アナログ変換データ取得スレッド、DO出力スレッド、ログ出力スレッドなど、RT側のアプリケーションをほぼ完成させ、次にNT側の表示アプリケーションの作成に取り掛かりたいと思います。

10月25日・・・NTXアプリケーション作成準備

以前にVisual C++を使用し、Windowsアプリケーションの作成をおこなったことがあるので、INtime側(RT側)の処理との通信インターフェースさえ確立されていれば、そんなに難しくないだろうと考えていましたが、まずVisual C++の環境設定から失敗しました。


環境設定

Windows側でINtimeのオブジェクトを扱うためのライブラリファイルがあるというように聞いていましたが、その概要についてあまり知りませんでした。INtime Helpよりその概要を調査しました。
NTX.libファイルとNTX.hファイルが存在し、INtimeのntxコールを使用するためには、環境設定で、それらを設定する必要がありました。
また同様に、INtimeソフトウェアの使用について->RTカーネルシステムコール->システムコールについてと選択し、表示されるNTXコールをクリックし、NTXコールの種類を確認しました。


Visual C++のメニューからプロジェクト->設定と選択し、リンクタブのオブジェクトライブラリモジュールにntx.libを追加しました。
さらに、メニューのツール->オプションと選択し、ディレクトリタブから、NTX.hの参照場所を入力しました。
この作業後、コンパイルが無事とおるようになりました。INtimeシステムにおいてWindows側アプリケーションの設定には、NTX.libの追加、NTX.hのインクルード先参照設定が必要になるということが分かりました。

NTX.lib: C:\INtime\nt\lib\ntx.lib
NTX.h: C:\INtime\nt\include\ntx.h
アイコン設定

RT側のアナログ変換値取得データが8V以上のデータである場合、チャンネルを示す棒グラフの脇に、アイコンでランプ表示をすることになります。
アイコンをリソースレベルで設定せず、プログラムで動的に変更する方法について調査しました。


SetIcon()

ダイアログクラスの初期処理CINtimeGraphDspDlg::OnInitDialog()で、アイコンを表示するコントロールへのポインタを設定し、それぞれのポインタにOFF表示アイコンをロードします。リソースで前もってIDI_ICON_ON(ON用ビットマップ)、IDI_ICON_OFF(OFF用ビットマップ)を登録してあります。
 
CStatic* m_widIcon[8]; //ON/OFF表示エリアポインタ:ダイアログクラスのメンバ
  OnInitDialog()部
 
//8V以上の場合赤いランプを点滅するためにPICTコントロールを作成しアイコンでON,OFFの
切り替えを行う
//初期状態として開始時にはすべてOFFになるようにOFFアイコンを表示させる //メンバー変数m_widIconに表示エリア(IDC_STATIC_ICONX(コントロール番号)) コントロールへのポインタを設定する
m_widIcon[0] = (CStatic*)GetDlgItem(IDC_STATIC_ICON1); m_widIcon[1] = (CStatic*)GetDlgItem(IDC_STATIC_ICON2); m_widIcon[2] = (CStatic*)GetDlgItem(IDC_STATIC_ICON3); m_widIcon[3] = (CStatic*)GetDlgItem(IDC_STATIC_ICON4); m_widIcon[4] = (CStatic*)GetDlgItem(IDC_STATIC_ICON5); m_widIcon[5] = (CStatic*)GetDlgItem(IDC_STATIC_ICON6); m_widIcon[6] = (CStatic*)GetDlgItem(IDC_STATIC_ICON7); m_widIcon[7] = (CStatic*)GetDlgItem(IDC_STATIC_ICON8); //OFF状態にする(IDI_ICON_OFFアイコンを表示する)      m_widIcon[0]->SetIcon( AfxGetApp()->LoadIcon(IDI_ICON_OFF));    m_widIcon[1]->SetIcon( AfxGetApp()->LoadIcon(IDI_ICON_OFF));      m_widIcon[2]->SetIcon( AfxGetApp()->LoadIcon(IDI_ICON_OFF)); m_widIcon[3]->SetIcon( AfxGetApp()->LoadIcon(IDI_ICON_OFF)); m_widIcon[4]->SetIcon( AfxGetApp()->LoadIcon(IDI_ICON_OFF)); m_widIcon[5]->SetIcon( AfxGetApp()->LoadIcon(IDI_ICON_OFF)); m_widIcon[6]->SetIcon( AfxGetApp()->LoadIcon(IDI_ICON_OFF)); m_widIcon[7]->SetIcon( AfxGetApp()->LoadIcon(IDI_ICON_OFF));
  グラフ表示部
 
        if(m_valTbl[i] < VAL_8V){ 
m_widIcon[i]->SetIcon( AfxGetApp()->LoadIcon(IDI_ICON_OFF));
}else{ m_widIcon[i]->SetIcon( AfxGetApp()->LoadIcon(IDI_ICON_ON)); }
8V以上のデータm_valTbl[i]の場合・・・ON のアイコンをロード 8V以下のデータm_valTbl[i]の場合・・・OFFのアイコンをロード
  INtimeカーネルの起動確認部
 
 
 INtimeで提供しているサンプルから検索、調査してみました。
サンプルアプリケーションのディレクトリ位置: C:\INtime\Project 上記ディレクトリ内のjitterntフォルダ内のhisgraphプロジェクトで行っている処理を参考
にしました。    【Bool CHistGraphDlg::OnInitDialog() ダイアログ初期処理部】 //check to see that the RT nucleus was successfully initialized
→RTカーネルが初期化されているかチェックをする if( ntxGetRtStatus( NTX_LOCAL ) != E_OK ) { MessageBoxEx(NULL, _T( "RT Machine not present:RTPM0001" ), _T( "Jitter Graph"), MB_ICONERROR | MB_OKCANCEL, LANG_ENGLISH ); exit(0); }