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側と「そうじゃない」側に振り分けられるもの。
SampleCLKブロックで生成したイベント
2つのSampleCLKブロックには、周期0.2(s)と周期0.3(s)と異なる周期を与えてあるので、それぞれ異なるタイミングでイベントを発生してます。最小公倍数の0.6の整数倍のタイミングでは両方が同時にイベントを発生するのでANDをとれるはず。
GOTOで飛んでIF~THEN~ELSE
ANDをとった結果はGOTOで飛ばしてIFTHEL_fブロックに入っていきますが、IFの判定は左から入ってくる正弦波の値によって決定されます。入力正弦波の様子が以下に。
これを使って入力信号(ANDをとった結果の0.6s周期の信号)を「振り分け」た結果が以下に。上が>0、下が<=0っす。
まあ、この辺はまだ分かり易い部分よな。