ありぎりす の徒然日記

アクセスカウンタ

zoom RSS RaspberryPiで鉄道模型を動かしてみる その9

<<   作成日時 : 2017/09/15 14:31   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 1 / トラックバック 0 / コメント 0

これまで試してきたことを応用すれば、けっこう凝った
ギミックを作ったり、そこそこ複雑な自動運転を実現する
ことができるだろうと思います。

しかし、根性なしの ありぎりす にはそこまでやる気力がない。 (^-^;

なので、最後に、
制御プログラムの話:
をして一段落にしようかと思います。


逐次処理の問題点:
これまで紹介してきたテストプログラムは、逐次処理
呼ばれるものです。

逐次処理というのはその名の通り、決められた処理を
順々に実行していくものです。

自然な人の考えをそのままなぞるようなプログラムなので
理解が容易で作り易いのが特徴です。

以下に示すのは、徐々に加速して、目標速度に達したら
一定時間走行して、その後、徐々に減速する処理を
逐次処理でフローチャートにしたものです。

画像


しかし、逐次処理というのは、制御プログラムとしては、
いろいろと問題があるのです。

例えば、上記のフローチャートに、
 一時停止釦を追加して、一度押されたら減速停止し、
 もう一度押されたら自動運転を再開する
といった機能を追加することを考えてみてください?

どうでしょうか?

うまく出来ましたか?

このように逐次処理というのは融通がきかなくて、
状況の変化に対応できないのです。

その主因は下記のような、上方向への分岐、
待ちループだと思います。
画像


ちなみに我が家のブルーレイレコーダ(東芝製)は、
しょっちゅうフリーズします。(T^T)
もうこうなってしまうと、電源釦を押しても応答なし。
電源コードを引っこ抜く以外に手がありません。 orz

おそらくこうした現象は、制御プログラムの中に、
上記のような待ちループが沢山あって、開発者が
想定しないような手順で操作すると、発生しない
状態を待ち続ける、デッドロックが起きてしまう
のでしょう。

制御プログラムでは、このような
 待ちループは禁物です

それではどうすればいいのでしょう?

その解答の一つが 以下のような作り方です。
画像


運転状態の変化(遷移)を管理する変数を設けて、
C言語の〈switch〉文のように多分岐判断するのです。

システムの状態、振る舞いをもっと上の視点で
判断し管理することで、デッドロックを防ぎます。


並列処理:
前述した方法で、ある程度は逐次処理の問題を解消できるのですが、
これではまだまだ不十分です。

例えば、自動運転の最高速度の値を変更したい場合、
どうすればいいでしょう?

コンソールターミナルから数値を入力するようにしたら
よさそうですが・・・
〈scanf〉文を使えば数値入力できるのですが、
そうすると、プログラムが入力待ちになってしまい、
列車の自動運転制御ができなくなってしまいます。

こうした問題に対応するのが並列処理です。

実はこれまでも並列処理は使っているのですよ。
例えば、その4その8
〈system〉関数をバックグランド実行したり、
その6で複数のターミナルウィンドウを使ったりね。

こういうのをマルチプロセスと呼んだりします。
しかし、こういったマルチプロセスではプロセス間での
情報共有や処理の同期をとったりするのが難しかったりします。

しかし、最近のC言語にはマルチスレッドが実装されています。

スレッドというのは小型のソリのことです。

冬、雪の積もった丘の上から、何人もの子供たちが、
オモチャのソリで一斉に滑り降りる・・・
そんな光景をイメージするといいでしょうか?

このマルチスレッド機能を使えば、一つのプログラム
(プロセス)で並列処理が実現できるので、大域変数を使えば
スレッド間での情報共有が容易に行えます。

まぁ、詳しいことは専門書をお読みください。

こういった並列処理技術を使うことで、
マンマシンのインタフェースや、自動運転制御や、時間管理や、
異常検出の処理などを平行して実行することができるようになります。


と。まぁ、入門以前のガイダンス的な内容ではありますが、
制御プログラムのお話をさせていただきました。

もしも、お一人でも「面白い」と感じる人がいて、
より高度なものを目指していただけるならば・・・

ありぎりす 望外の幸せでございます。 v(^-^)

関連ブログ一覧:

 『RaspberryPiで鉄道模型を動かしてみる その1
   まずは下準備 』


 『RaspberryPiで鉄道模型を動かしてみる その2
   車両を動かす(ON/OFF制御) 』


 『RaspberryPiで鉄道模型を動かしてみる その3
   PWMで速度制御 』


 『RaspberryPiで鉄道模型を動かしてみる その4
   DACで速度制御その1 』


 『RaspberryPiで鉄道模型を動かしてみる その5 追記あり
   DACで速度制御その2 』


 『RaspberryPiで鉄道模型を動かしてみる その6
   ポイントを動かす 』


 『RaspberryPiで鉄道模型を動かしてみる その7
   駅で停める 』


 『RaspberryPiで鉄道模型を動かしてみる その8
   効果音を鳴らす 』

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 1
なるほど(納得、参考になった、ヘー)

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
RaspberryPiで鉄道模型を動かしてみる その9 ありぎりす の徒然日記/BIGLOBEウェブリブログ
文字サイズ:       閉じる