ブロックを積みながら(145) Scilab/Xcos、イベントのハンドリングその1

Joseph Halfmoon

いつものフローは左から右に横方向に信号が流れる形です。しかし今回は上から下が練習の「主方向」です。そして配線の色も赤。「イベント」とよばれる「データ信号」を制御するための信号を取り扱うためのブロックどもを練習してみます。これまでもCLOCKにはお世話になっていたのだけれども、エッジ検出、遅延に分周、いろいろあるのよ。

※「ブロックを積みながら」投稿順 index はこちら

※動作確認にはWindows 11のパソコン(64bit)上にインストールしたScilabの以下バージョンを使用しています。

Scilab 2024.0.0

Event handling palette

まずはイベント・ハンドリング・パレットの全貌が以下に。

eventHandlig

「クロック信号」が無いとグラフの表示ができないので、これまでのところ、CLOCK_cブロックと、SampleCLKは使ってますが、他のブロックなどはお目にかかっておりませなんだ。

今回練習のフロー

今回は、以下の5つのブロックを練習してみます。

    1. CLOCK_c
    2. CEVENTSCOPE
    3. EDGE_TRIGGER
    4. EVTDLY_c
    5. freq_div

CLOCK_cはいままでずっとグラフ描画のイベント生成のためにお世話になってきたものです。evnet1Flow

各部の説明は以下に。

CLOCK_cとCEVENTSCOPE

左端のCLOCK_cブロックは何も設定せず、デフォルト値のままです。間隔0.1(1を1秒とすると10Hzね)で、開始時刻0.1です。CLOCK_c_setting

左端のCLOCK_cブロックの真下に直結したグラフ描画のブロックは「いつもの」ブロックに似てますが、黒色のデータ信号を受け取る入口のないCEVENTSCOPEです。イベントの発生時刻を確認するのに適したイベント・ハンドリングに「スペシフィック」な奴です。観察した波形が以下に。CLOCK_c_events

t=0.1間隔で、イベントが到着していることが分かります。ただその値が0.8な理由はXCOS素人老人には分かりませぬ。値などドーデモよさそうなんだけれども。

EDGE_TRIGGER

右側には、根本にパルスジェネレータがおかれています。信号波形的に言うと、周期1Hz、デューティ30%の振幅1のパルス波形です。初期化時0.1sの遅延後に発生始めるので、ライジングエッジは毎秒0.1の位置、フォーリングエッジは0.4の位置となる筈。

これをEDGE_TRIGGERの黒色のデータ信号入力に印加します。設定が以下に。-1なのでフォーリングエッジを検出。EDGE_TRIGGER_setting

よって、以下のイベント・グラフのようにx.4(x=0,1…)なるポジションにイベントが立っております。EDGE_TRIGGER_events

 

EVTDLY_c

さて上記でイベント検出して生成した「イベント」をEVTDLY_cブロックで遅延をかけてみます。設定は以下に。

EVTDLY_c_setting

上記でinitial output eventのところに -1 としてあるのは、それを使わん、という意味っす。この機能を使うと入力と関わりなく「最初に一発」イベントを発生できるみたいですが、使ってません。遅延させたイベントの様子が以下に。元々0.4のところにある筈のものを0.5遅延させたので、各秒0.9の位置にイベントがあります。EVTDLY_c_events

 

freq_div

他のブロックのお名前が大文字が主なのにこのブロックは小文字です。ちょっと気になりますが、コマケー話を気にしていたらScilab/Xcosなど使えんと(個人の感想です。)今回設定が以下に。いわゆる「2分周」ね。

freq_div_setting

観察できた波形が以下に。2分周されてますな。freq_div_events

イベント・ハンドリング・ブロック、まだまだあるな。。。

ブロックを積みながら(144) Scilab/Xcos、信号のルーティング、切り替える へ戻る

ブロックを積みながら(146) Scilab/Xcos、イベントのハンドリングその2 へ進む