Rangeノードを使う(その1)

 引き続きサンプルフローを見ていきます。今回からRangeノードシリーズ開幕です。今回のサンプルは、挙動を見ていると理解できても、言葉で表現するのが難しかったです。

入力値の範囲を出力値の範囲にマッピングして按分計算(上下限を超えた値はサチる)

最初のサンプルは「flows > node-red > function > range > 01 - Scale input value」です。入力値をスケールして出力するらしいです。


動作」の設定は「入力値の範囲外の値を最小値/最大値とし拡大/縮小」となっています。


実行するとこんな感じで、入力値が出力値の範囲の割合で按分され、出力値の範囲内の値が出るようです。


そうなると、このサンプルフローでは入力値として範囲(0〜1023)外の値を与えているわけではないので、画面の説明が不正確な気もします。意味合い的には、

入力値の範囲を出力値の範囲にマッピングして按分計算(上下限を超えた値はサチる)

みたいな感じでしょうか。文章にすると表現は難しいですが、感じ取りましょう。ちなみに、入力値の上限である1023より大きい値を与えたところ、出力は5になりました。

入力値の範囲を出力値の範囲にマッピングして按分計算(上下限を超えた値はサチらず倍率計算)

次のサンプルは「flows > node-red > function > range > 02 - Scale input and round to integer」です。


動作」の設定は「msg.payloadの値を拡大/縮小」となっています。


実行すると、以下のような結果になります。


どうやら、「入力値の範囲」に対する「入力値」の倍率を出力値の範囲に倍率計算した値を出力するようです。例えば、入力値99の場合、入力値の範囲の上限9を11倍超えているので、「出力値の範囲」の上限128に11をかけた値「1408」が出力値となります。言葉で説明すると難しいですが、一つ前に紹介したサンプルの表現に沿うと意味合い的には

入力値の範囲を出力値の範囲にマッピングして按分計算(上下限を超えた値はサチらず倍率計算)

といったところでしょうか。
ところで、「msg.payloadの値を拡大/縮小」と言っておきながら、対象プロパティを指定するとmsg.payloadの値は無視されるのでこれは説明が誤っていると思います。

まとめ

今回の内容をまとめます。
  • 出力を範囲内に収めたい場合は「入力値の範囲外の値を最小値/最大値とし拡大/縮小」を使う
  • 出力を範囲内に収めず入力値の範囲に対する倍率をそのまま反映したい場合は「msg.payloadの値を拡大/縮小」を使う
    • ただし、画面上の説明でmsg.payloadの値が計算対象になる記述は誤ってそう

コメント

このブログの人気の投稿

Joinノードを使う(その1)

Execノードを使う

Joinノードを使う(その4)