シーケンス回路論

 ロボット製作をはじめとする機械の制御に、C言語による方法がもてはやされていますが、果たしてC言語は機械コントロールに向いているのでしょうか。もともとC言語は、ミニコン(小型電子計算機)上でデータ処理をするためのUNIXから発生したもので、機械についてなど全く考えてもいないものなのです。CにとってはI/Oって何だったけ?といいたいくらいで本来I/Oとは無縁なものです。
 Cはパソコン中の、アドレスが固定されていない任意のRAM上を走るのが前提になっているため、固定した少ないROM、RAMしか持っていない基板上で走らせようとすると、そのための相当面倒で複雑な手続きが必要です。また、データ扱いの命令が主流になっていて、I/O制御に便利なビット命令は持っていません。

Cを究極の言語と考えるのなら、それでは何故、ホ-ムページ作成の言語がCではなく、HTMLやPerl/CGIなのでしょうか?
 HPの画面作りにはCでは不便で仕方がないから、必要にせまられてこれらの言語を作ったのです。
 HP作りと機械設計とどちらがCに近いでしょうか?明らかに画面上のことだけである前者の方がCにとって得意なことのはずです。本来、機械設計の方がCから遠い存在なのです。
 マイコンによる機械制御についてはこの日本に相当な責任があるはずです。それなのに全く機械制御に向いていないCにしがみつき、他の言語の作成または利用を考えないのは、なんと融通がきかない人たちだといわれても仕方がないと思います(WINDOWS上で走っているEXEファイルである「連枝」はすべてCで書かれています。便利だからです。(念のため!))。

 実際的にI/Oに関する命令とか、タイマ割り込みのタイマ設定とかはCで書いても、その部分は、アセンブラもしくは非常にアセンブラに似た、そのコンパイラ固有のCの特殊関数によって書かなくてはなりませんし、素子の基本動作の性質を決めるCONFIGEについても、まったくアセンブラと同等の思考と手続きととらなくてはなりません。
 Cを使用するメリットと言えば、アセンブラ言語自体を詳細に記憶する必要がなく、少しこぎれいのように見えるプログラムができることくらいでしょうか。それも割込みなどでアセンブラとのリンクが必要な場合は、ほとんど完璧に近い特殊レジスター等のハード部分のの習得が必要です。
命令が多様すぎてアセンブラの扱いがわずらわしいH8とか、バンクの設定が複雑なPICの8ビット素子や、特殊レジスタのアクセス方法がレジスタのアドレスによって違う命令を使わなくてはならないatMEGA(AVR)などは、一応そんなことはCコンパイラの方にまかせて、自分ではそれにかかわらないで書くことができることにメリットがあるとも考えられますが、PIC18F452のようなPIC16ビット素子については、バンクやページの問題が、95%くらい解決されていて、すべてのメモリーをROM、RAMの区別だけで同一命令でアクセスできます。
 PIC18F452について言えば、ただ命令をそのまま書いていけば、何の問題もなく(?)プログラムができあがります。
 私には、それを何故、またCで書いてアセンブラとリンクするなどという複雑な方法を取るのか、まったく理解できません。
 アセンブラによるプログラムのバグは、まさにその中にあるのであって、絶対にリンクの方法やCのアセンブラへの展開具合によるものではありえないのです。あれか、これかなどと考える必要がないのは大きなメリットと考えます。参照サイト
 ラダーも言語の一つなのです。シーケンス回路そのものを高級言語とすれば、そのマスターは極めて簡単です(C言語のマスターとは比較にならないくらいです)。また組み込み部分は、すべてそのコンパイラである「連枝」(れんり)が書いてくれますのでユーザはそれについて考える必要がありません。

 シーケンサではライン上のいろいろな動作を同じラダー上に書くだけで、普通に並列動作を行っています。並列動作はマイコンのプログラムでいえばマルチタスクの動作になりますが、Cでマルチタスクの動作を書こうとすれば、タイムシェアリングの方法を使ったり相当な困難をともないます。
 また、ライン上の機械動作を行うためにはたくさんのタイマーを使用しますが、シーケンサでは簡単に挿入できるタイマーも、C言語では、アセンブラーにより割込みのサブルーチンを書いてリンクするという手続きが必要になります。タイマーが数多くなるとその複雑さは半端でないものになります。本来、C言語はタイマ割込みを始めとする割り込みは本来的に扱わないものなのです。
 マイコンボードの大きな問題である耐ノイズ性も、シーケンサではオンディレータイマをリレー動作の前に入れることによって簡単に得ることができます。

 Cやアセンブラによるマイコン基板とラダー回路によるシーケンサのシェアの比較は、機械の分野のとり方にもよりますので、困難な面もあります。例えば、自動販売器にはもうリレー回路やシーケンサは使用されていません。しかしいわゆる工場の機械と呼ばれるものの制御では圧倒的にシーケンサの方が多く使用されているのではないでしょうか。シーケンサのメーカーは10社以上ありますが、シーケンサ関連の年間売上だけで一社で数千億円を優に越える会社が複数あるくらいですから、金額から考えても充分に大きなシェアを確認できます。
 「連枝」ではL(ラダー言語)がCを越えた!としていますが、機械制御に関してはマイコン誕生以来の35年の歴史を見ると、少なくともシェアの面だけみれば、CはL(ラダー言語)を抜けなかった!とするのが正確な評価だと思います。

 シーケンス回路のもとになっているのは、リレー回路です。
 ( シーケンサーはそれをマイコン化して、設計、書き込み、動作、デバッグ等をシステム化したものです。)

 「連枝」(れんり)ではリレー回路そのものを、高級言語のL言語としています。
 現代もてはやされているC言語によるソフトと、リレー回路によるソフトを比較して見ましょう。

リレー回路の特長をあげると、次のようになります。
1) 設計が簡単です!!

  • 押釦(またはリレーの接点)のオン・オフによって、リレーに電圧(ACかDC電圧)をかけて、そのリレーの持つ接点をオン/オフすると言う、ごく当たり前のことのみによって、電気回路が構成されるため、そのことを理解さえすれば、誰でもその論理を追い、回路の動きを理解できます。
  • それ以外、タイマー(電圧をかけてから、ある一定の時間 を経てから 接点がオンするリレーの一種)と、カウンター(一定の回数、入力がオンすると内部接点がオンするもの)があるくらいです。
  • 配線による基本的なリレー回路には、シフトレジスター(シーケンサには有るものがある)は有りませんし、オン・オフを交互に繰り返すッチラチェット・リレー等はあくまで、例外的に使用するだけで、実際問題ほとんど使われることは有りません。
  • つまり、押し釦等の入力接点と、リレーとタイマーとカウンターだけ知っていれば、誰でもリレー回路を理解したり、製作することが可能です。
  • それに比較して、アセンブラやC言語のの”基礎”は確かに、0と 1のみですが、それによってマイコン内部の0と1を動かすためには、ご存じのように、何万という(万は決しておおげさではない。)約束事を覚え、そのとうりに入力しないと、正確に動きません。
  • 何万の内、1つでも間違えると、”正確に”どころでは無く、カタリ!とも動かないことも少なくありません。

2) 補足やメンテナンスが容易!!

  • リレー回路はラダー図で表現されるため、直感的な理解が容易で、他の人の書いた回路の巧拙を判断したり、部分的な修正やその指導をしたりする事が容易にできます。
  •  

  • アセンブラーやC言語はあくまで「言語」であるため、他の人による補足には、長い時間と大変な努力が必要です。
    ”後輩の指導なんて、やってるヒマは無い”と言うのが現実です。
    先輩がプログラム例を渡すのが指導教育と言うところでしょうが、ソフト業界を見渡した限りでは2/3はイモ・プログ
    ラムが伝わっていると言うところです。
  • このことは機械コントロールでの、既存ソフトによるメンテナンスや改造を著しく困難にしています。

3) マイコン動作における比較

  • 一般にアセンブラー言語やC言語はコンピュータにものすごく複雑な動作をさせることが出来、リレー回路は単純なことしかできないように思われています。
  • しかし機械コントロールに関しては超高速と言う要素を除けば、それほど決定的な差ではありません。
    ICやマイコンが生まれるまでの、勢いがあった高度成長期の「戦後オートメーション」と呼ばれるものは、全てこのリレー回路のコントロールによったものです。
  • またシーケンサを中心として、リレー回路の駆動にマイコンそのものを利用したことにより、高速化、小型化が可能になりました。また各種応用命令を使用することにより、アセンブラー言語やC言語によるマイコン動作と、リレー回路によるマイコン動作とは殆ど差がなくなって来ています。

ソフトとしてのリレー回路に優秀な面が多いことがお分かり頂けたでしょうか?