ロボットプログラミング 教材 ろぼたみくらぶ
ロボットプログラミング教材ろぼたみくらぶ

「[STOP][停止]」に関連するトラブル

動作時間を指定してもとまらない

[GO=5]などで、動作時間を指定してもロボットが止まりません。なぜですか?

この項目は、TronZ-Card V2やTAMI-TOOLである程度プログラミングを経験していて、[GO][STOP][DELAY][DELAY100]などの命令語が分かる方を対象にしています。

動作時間を指定してもとまらない

次のプログラムを実行すると、ロボットの動きはどうなるでしょう。

実行結果[GO=5]なので、0.5秒前進して止まりそうに感じます。しかし実際に動かしてみると、ロボットは前進し続けます。0.5秒の命令を無視して、電源が続く限り前進し続けます。これはなぜでしょう。
理由これは命令を無視している訳ではなく、0.5秒前進した後に[GO]の動きに変化を与える命令の[STOP]や[LEFT]、[RIGHT]などが無いため。
では0.5とは何なのか実際のプログラム動作上は[DELAY100=5]と同じで、「次の命令実行まで0.5秒遅延」と同じ働きになります。[GO=5]の後に続く命令がなければ、ロボットは[GO]を実行し続けるしかない訳です。仮に[GO=5]が[GO=0]だったとしても上記プログラムにおいては同じ動作をします。
ポイント[GO=5]の”5”の部分の値は、厳密には動作の時間を指定する値では無く[DELAY100]と同じ効果で、次の命令を実行するまでの遅延時間である。

プログラミングで0.5秒前進後に停止させたければ、停止の命令を入れる必要があります。一見すると[END]で停止しそうに思いますが、[START]と[END]のカードはプログラムの始まりと終わりを示しているだけなので、ロボット制御になんの機能もありません。

ポイント[START]と[END]のカードはプログラムの始まりと終わりを示しているだけなので、ロボット制御になんの機能も無い。

では、ロボットを0.5秒で停止の命令をするにはどうしたら良いでしょう。
[GO=5]の命令カードの次に[STOP]の命令カードを入れて試してみます。

実行結果ロボットは0.5秒前進した後に停止します。思い通りに行きました。0.5秒前進し停止したロボットはそのまま全く動きません。

この状態のロボットは「[STOP]を実行し続けている」状態になっています。

では、次のプログラムを実行するとどうなるでしょう。

コントローラーの【OUT0】ポートにLEDモジュールを付けて命令語[ON=0]で点灯するようにしました。早速実行してみます。

実行結果前進開始から0.5秒後にLEDが点灯し、そのまま前進し続けて止まらない。
ここでも前進したまま止まらない状態になり、さらにLEDも点灯しっぱなしです。これは、[GO=5]で前進が始まり、0.5秒後に次の命令の[ON=0]が実行されますが、それ以降に前進やLED点灯に変化を与える命令が無いので前進とLED点灯を実行し続けている状態です。
まとめ[GO=5]の値は、厳密にはその動作時間ではなく、次のプログラム実行までの遅延時間である。動作として[DELAY]や[DELAY=100]と同じであり、以降のプログラムで[STOP][LEFT][RIGHT][BACK]などの[GO]に変化を与える命令が無い場合、そのまま命令を守り実行し続ける。