いつものフローは左から右に横方向に信号が流れる形です。しかし今回は上から下が練習の「主方向」です。そして配線の色も赤。「イベント」とよばれる「データ信号」を制御するための信号を取り扱うためのブロックどもを練習してみます。これまでもCLOCKにはお世話になっていたのだけれども、エッジ検出、遅延に分周、いろいろあるのよ。
※「ブロックを積みながら」投稿順 index はこちら
※動作確認にはWindows 11のパソコン(64bit)上にインストールしたScilabの以下バージョンを使用しています。
Scilab 2024.0.0
Event handling palette
まずはイベント・ハンドリング・パレットの全貌が以下に。
「クロック信号」が無いとグラフの表示ができないので、これまでのところ、CLOCK_cブロックと、SampleCLKは使ってますが、他のブロックなどはお目にかかっておりませなんだ。
今回練習のフロー
今回は、以下の5つのブロックを練習してみます。
-
- CLOCK_c
- CEVENTSCOPE
- EDGE_TRIGGER
- EVTDLY_c
- freq_div
CLOCK_cはいままでずっとグラフ描画のイベント生成のためにお世話になってきたものです。
各部の説明は以下に。
CLOCK_cとCEVENTSCOPE
左端のCLOCK_cブロックは何も設定せず、デフォルト値のままです。間隔0.1(1を1秒とすると10Hzね)で、開始時刻0.1です。
左端のCLOCK_cブロックの真下に直結したグラフ描画のブロックは「いつもの」ブロックに似てますが、黒色のデータ信号を受け取る入口のないCEVENTSCOPEです。イベントの発生時刻を確認するのに適したイベント・ハンドリングに「スペシフィック」な奴です。観察した波形が以下に。
t=0.1間隔で、イベントが到着していることが分かります。ただその値が0.8な理由はXCOS素人老人には分かりませぬ。値などドーデモよさそうなんだけれども。
EDGE_TRIGGER
右側には、根本にパルスジェネレータがおかれています。信号波形的に言うと、周期1Hz、デューティ30%の振幅1のパルス波形です。初期化時0.1sの遅延後に発生始めるので、ライジングエッジは毎秒0.1の位置、フォーリングエッジは0.4の位置となる筈。
これをEDGE_TRIGGERの黒色のデータ信号入力に印加します。設定が以下に。-1なのでフォーリングエッジを検出。
よって、以下のイベント・グラフのようにx.4(x=0,1…)なるポジションにイベントが立っております。
EVTDLY_c
さて上記でイベント検出して生成した「イベント」をEVTDLY_cブロックで遅延をかけてみます。設定は以下に。
上記でinitial output eventのところに -1 としてあるのは、それを使わん、という意味っす。この機能を使うと入力と関わりなく「最初に一発」イベントを発生できるみたいですが、使ってません。遅延させたイベントの様子が以下に。元々0.4のところにある筈のものを0.5遅延させたので、各秒0.9の位置にイベントがあります。
freq_div
他のブロックのお名前が大文字が主なのにこのブロックは小文字です。ちょっと気になりますが、コマケー話を気にしていたらScilab/Xcosなど使えんと(個人の感想です。)今回設定が以下に。いわゆる「2分周」ね。
イベント・ハンドリング・ブロック、まだまだあるな。。。