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

Joseph Halfmoon

Event handling paletteの練習2回目です。前回は、エッジ検出、遅延に分周と「ハードテイスト」なイベント処理を練習しましたが、今回は、論理演算にIF~THEN~ELSE的な「ソフトテイスト」なものどもです。イベント処理だけでフローを描くと縦に長くなるのでイベントでもGOTOしてます。あったのね。

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

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

Scilab 2024.0.0

今回練習のブロック共とそのフロー

以下の5ブロックを練習してみます。

    • SampleCLK
    • ANDBLK
    • CLKGOTO
    • CLKFROM
    • IFTHEL_f

SampleCLKは、いつものCLOCK_cブロックと同様、一定周期でイベントを発生するブロックです。ただし何個配置しても「元になるクロック1個」に同期しているので、全てのブロックが同じタイミングでイベントを発生できるようです。ということはCLOCK_cで発生するイベントは定周期といっても、それぞれのブロックにより非同期ってことですかい。

ANDBLKは、その名のとおりイベント信号のアンド(論理積)をとるもの。「同期している」イベント同士でないと演算できないようなので上記のSampleCLKブロックが必須。

GLKGOTOとCLKFROMは、赤いイベント(クロック)信号用のGOTOとFROMです。

IFTHEL_fは、データ信号の正負に応じて上からおちてくるイベントが>0側と「そうじゃない」側に振り分けられるもの。

実験フローが以下に。event2flow

SampleCLKブロックで生成したイベント

2つのSampleCLKブロックには、周期0.2(s)と周期0.3(s)と異なる周期を与えてあるので、それぞれ異なるタイミングでイベントを発生してます。最小公倍数の0.6の整数倍のタイミングでは両方が同時にイベントを発生するのでANDをとれるはず。

周期0.2のグラフが以下に。smpl02

周期0.3のグラフが以下に。smpl03

GOTOで飛んでIF~THEN~ELSE

ANDをとった結果はGOTOで飛ばしてIFTHEL_fブロックに入っていきますが、IFの判定は左から入ってくる正弦波の値によって決定されます。入力正弦波の様子が以下に。sinwave

これを使って入力信号(ANDをとった結果の0.6s周期の信号)を「振り分け」た結果が以下に。上が>0、下が<=0っす。IFTHN

まあ、この辺はまだ分かり易い部分よな。

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

ブロックを積みながら(147) Scilab/Xcos、Sinksパレットその1 へ進む