【OpenPLC】論理回路演習をいまさらながらやってみる

テクニカル情報
この記事は約10分で読めます。

PLC文化圏では、電子回路文化圏は別次元のものと思われているふしがあるようです

こんな方にお勧めです

  • OpenPLCであそんでみたい!
    (へ~、なんか簡単にうごかせるんだー の実験)
  • さわってみたいけどハードウェア(ラズパイ等)の用意がめんどうだな・・・・
  • ニッチでブルーオーシャンな分野を押さえたい
  • IEC 61131-3 の自分の性格に合った言語を見つける
  • ニッチなビジネスモデルの現場から
      OpenPLC無料なので投資なしで
      生理的に無理な場合は判断できる!
      (ブラック業種化は避けましょう)
  • 注意)電気回路と電子回路の中の論理回路(デジタル回路)の分野です
    アナログ回路は扱っていません
スポンサーリンク
  1. とりあえず 【NAND回路】をつくってみる-(IC屋さんの文化的に万能らしい)
    1. なぜわざわざNAND?
        1. 最小単位の構成の構築
        2. FB化するーこれがすべてのもとになる予定
        3. NANDでNOT
        4. NANDでAND
        5. NANDでOR
        6. NANDでNOR
        7. NANDでXOR
        8. 3入力NAND回路
        9. 4入力NAND回路
  2. MUX 選択回路
  3. MUX4 – DMUX4  選択回路
    1. MUX4 4つのなかから選択します
    2. DMUX4 4つのどれかへ出力します
        1. FB化 MUX4 TO DMUX4
  4. MUX4WAY16 【IEC61161-3がHDL対応にならないかしら】
  5. MUX8WAY16【ハード結線する場合は狂気の沙汰です】
  6. Dの一族:D-LATCH,D-FlipFlop
        1. D-latch
        2. D-FlipFlop
        3. オルタネイトスイッチ 1個のスイッチでオン/オフする
  7. NANDによる半加算器 ー NANDを4つ使うんです
        1. FB化する
  8. NANDによる全加算器 ー 半分が2つで1人前だそうです
        1. FB化する
  9. 4桁の加算器 桁上がり付き
        1. 4桁の加算器のFB化
  10. ついでにエンコーダとデコーダをつくってみる
        1. エンコーダ :10進数をビット列化にする
        2. デコーダ :ビット列を10進数に変換する
        3. 実装
  11. ALU (16ビット)
        1. FB化で動作チェックする
  12. bit -1ビットレジスタ
  13. register -16bit レジスタ
  14. RAM8 -16ビットレジスタ8つ、アドレス付き
        1. 動作確認
        2. 簡易クロック出力
  15. OpenPLC ver4 (beta)現る
  16. RAM64 -省略 変数追加が重くなってきました
  17. RAM512 -16ビットレジスタ512個、アドレス付き
        1. ワイヤー接続は疲れたので変数指定に変更する
        2. FB化で動作チェック
  18. PC (PROGRAM COUNTER)
        1. PCはやり方が色々あるらしくこれが正解なのか不明
        2. とりあえずカウントアップはしている模様
  19. OpenPLCの限界説に、もやもやしてきたので[nandgame]をやってみた
        1. 最初の一歩:リレーが現れる!
        2. ぶっちゃけほぼカンニングで制覇【ハード部】
        3. CMOS版はオプションレベルで現れるようです
        4. ちなみに MUX を2つでC接点2つのリレー MY2N(オムロン)ができてしまう
  20. MUX8WAY16 [HDL をST 化するとこうなる] EDITOR:SX-EXPERT:Fuji-electric

とりあえず 【NAND回路】をつくってみる-(IC屋さんの文化的に万能らしい)

*注意:物理接点リレーでの再現はかなり辛いですがやってる方もいるようです。

ということなので NAND2TETRIS 勝手に参考して

OpenPLCでどこまで再現できるかやってみよう!!!!!!!

パチ パチ パチっ(拍手)

なぜわざわざNAND?

素子が安いかららしいです (OPENPLC上のみでやる分には意味はないです)

最小単位の構成の構築
NAND回路
FB化するーこれがすべてのもとになる予定
NANDでNOT
NANDでAND
NANDでOR
NANDでNOR
NANDでXOR
3入力NAND回路
4入力NAND回路

MUX 選択回路

MUX4 – DMUX4  選択回路

MUX4 4つのなかから選択します

DMUX4 4つのどれかへ出力します

接続点がないから見えにくいんです

FB化 MUX4 TO DMUX4

MUX4WAY16 【IEC61161-3がHDL対応にならないかしら】

本家GiT-HDLから脳内変換なので合ってるか不明です。(クリックしても拡大しません)

MUX16 を3つ使用します

MUX8WAY16【ハード結線する場合は狂気の沙汰です】

MUX4WAY16を2つ、MUX16を1つ使います

(クリックしても拡大しません)

Dの一族:D-LATCH,D-FlipFlop

D-latch
D-FlipFlop
オルタネイトスイッチ 1個のスイッチでオン/オフする

NANDによる半加算器 ー NANDを4つ使うんです

FB化する

NANDによる全加算器 ー 半分が2つで1人前だそうです

FB化する

4桁の加算器 桁上がり付き

4桁の加算器キャリー付き
4桁の加算器のFB化

ついでにエンコーダとデコーダをつくってみる

エンコーダ :10進数をビット列化にする

各ビットを確認してフラグを立てる

エンコーダ回路
デコーダ :ビット列を10進数に変換する

ビットのフラグ確認で合成する

デコーダ回路
実装

3+7=10を計算出来ました。

ALU (16ビット)

HDLもなんとなく読めるようになる

FB化で動作チェックする

bit -1ビットレジスタ

register -16bit レジスタ

RAM8 -16ビットレジスタ8つ、アドレス付き

やばい、なんかたのしくなってきた・・・

動作確認

アドレスごとにデータの保持を確認

簡易クロック出力

OpenPLC ver4 (beta)現る

RAM64あたりで、そろそろ限界っぽい挙動(エディターが落ちる)がでてきたので 本家HPをみてみるとVer4がでてきてました。

RAM64 -省略 変数追加が重くなってきました

そろそろシステム的に限界らしいー原因箇所は不明

RAM512 -16ビットレジスタ512個、アドレス付き

ワイヤー接続は疲れたので変数指定に変更する
FB化で動作チェック

この時点でコンパイル時間が3分に迫るようになる

ver4で改善されるのだろうか・・・・・

どうやらOpenPLC v4は PythonからJAVA に開発環境を変えてるみたいです

PC (PROGRAM COUNTER)

RAM512,RAM64 のFB削除するとなぜか軽くなったのでもう少しチャレンジ実行

PCはやり方が色々あるらしくこれが正解なのか不明
とりあえずカウントアップはしている模様

右下の動作確認表は見方がわかりません

OpenPLCの限界説に、もやもやしてきたので[nandgame]をやってみた

最初の一歩:リレーが現れる!

ぶっちゃけほぼカンニングで制覇【ハード部】
CMOS版はオプションレベルで現れるようです
ちなみに MUX を2つでC接点2つのリレー MY2N(オムロン)ができてしまう

MUX8WAY16 [HDL をST 化するとこうなる] EDITOR:SX-EXPERT:Fuji-electric

繰り返し入力はつらいです

(*--------------------------------------------------------------------
CHIP Mux8Way16 {
    IN a[16], b[16], c[16], d[16]
       e[16], f[16], g[16], h[16],
       sel[3];
    OUT out[16];

    PARTS:
    Mux4Way16(a=a, b=b, c=c, d=d, sel=sel[0..1], out=muxAD);
    Mux4Way16(a=e, b=f, c=g, d=h, sel=sel[0..1], out=muxEH);
    Mux16(a=muxAD, b=muxEH, sel=sel[2], out=out);
}
---------------------------------------------------------------------*)



MUX4WAY16_1(
			a00:=a00,a01:=a01,a02:=a02,a03:=a03,a04:=a04,a05:=a05,a06:=a06,a07:=a07,
			a08:=a08,a09:=a09,a10:=a10,a11:=a11,a12:=a12,a13:=a13,a14:=a14,a15:=a15,

			b00:=b00,b01:=b01,b02:=b02,b03:=b03,b04:=b04,b05:=b05,b06:=b06,b07:=b07,
			b08:=b08,b09:=b09,b10:=b10,b11:=b11,b12:=b12,b13:=b13,b14:=b14,b15:=b15,
			
			c00:=c00,c01:=c01,c02:=c02,c03:=c03,c04:=c04,c05:=c05,c06:=c06,c07:=c07,
			c08:=c08,c09:=c09,c10:=c10,c11:=c11,c12:=c12,c13:=c13,c14:=c14,c15:=c15,

			d00:=d00,d01:=d01,d02:=d02,d03:=d03,d04:=d04,d05:=d05,d06:=d06,d07:=d07,
			d08:=d08,d09:=d09,d10:=d10,d11:=d11,d12:=d12,d13:=d13,d14:=d14,d15:=d15,			

			sel0:=sel0,sel1:=sel1

			);

	ad00:=MUX4WAY16_1.out00;
	ad01:=MUX4WAY16_1.out01;
	ad02:=MUX4WAY16_1.out02;
	ad03:=MUX4WAY16_1.out03;
	ad04:=MUX4WAY16_1.out04;
	ad05:=MUX4WAY16_1.out05;
	ad06:=MUX4WAY16_1.out06;
	ad07:=MUX4WAY16_1.out07;
	ad08:=MUX4WAY16_1.out08;
	ad09:=MUX4WAY16_1.out09;
	ad10:=MUX4WAY16_1.out10;
	ad11:=MUX4WAY16_1.out11;
	ad12:=MUX4WAY16_1.out12;
	ad13:=MUX4WAY16_1.out13;
	ad14:=MUX4WAY16_1.out14;
	ad15:=MUX4WAY16_1.out15;



MUX4WAY16_2(
			a00:=e00,a01:=e01,a02:=e02,a03:=e03,a04:=e04,a05:=e05,a06:=e06,a07:=e07,
			a08:=e08,a09:=e09,a10:=e10,a11:=e11,a12:=e12,a13:=e13,a14:=e14,a15:=e15,

			b00:=f00,b01:=f01,b02:=f02,b03:=f03,b04:=f04,b05:=f05,b06:=f06,b07:=f07,
			b08:=f08,b09:=f09,b10:=f10,b11:=f11,b12:=f12,b13:=f13,b14:=f14,b15:=f15,
			
			c00:=g00,c01:=g01,c02:=g02,c03:=g03,c04:=g04,c05:=g05,c06:=g06,c07:=g07,
			c08:=g08,c09:=g09,c10:=g10,c11:=g11,c12:=g12,c13:=g13,c14:=g14,c15:=g15,

			d00:=h00,d01:=h01,d02:=h02,d03:=h03,d04:=h04,d05:=h05,d06:=h06,d07:=h07,
			d08:=h08,d09:=h09,d10:=h10,d11:=h11,d12:=h12,d13:=h13,d14:=h14,d15:=h15,

			sel0:=sel0,sel1:=sel1

			);

	eh00:=MUX4WAY16_2.out00;
	eh01:=MUX4WAY16_2.out01;
	eh02:=MUX4WAY16_2.out02;
	eh03:=MUX4WAY16_2.out03;
	eh04:=MUX4WAY16_2.out04;
	eh05:=MUX4WAY16_2.out05;
	eh06:=MUX4WAY16_2.out06;
	eh07:=MUX4WAY16_2.out07;
	eh08:=MUX4WAY16_2.out08;
	eh09:=MUX4WAY16_2.out09;
	eh10:=MUX4WAY16_2.out10;
	eh11:=MUX4WAY16_2.out11;
	eh12:=MUX4WAY16_2.out12;
	eh13:=MUX4WAY16_2.out13;
	eh14:=MUX4WAY16_2.out14;
	eh15:=MUX4WAY16_2.out15;




MUX16_1(
		a00:=ad00,a01:=ad01,a02:=ad02,a03:=ad03,a04:=ad04,a05:=ad05,a06:=ad06,a07:=ad07,
		a08:=ad08,a09:=ad09,a10:=ad10,a11:=ad11,a12:=ad12,a13:=ad13,a14:=ad14,a15:=ad15,

		b00:=eh00,b01:=eh01,b02:=eh02,b03:=eh03,b04:=eh04,b05:=eh05,b06:=eh06,b07:=eh07,
		b08:=eh08,b09:=eh09,b10:=eh10,b11:=eh11,b12:=eh12,b13:=eh13,b14:=eh14,b15:=eh15,

		sel:=sel2 );


	out00:=MUX16_1.out00;
	out01:=MUX16_1.out01;
	out02:=MUX16_1.out02;
	out03:=MUX16_1.out03;
	out04:=MUX16_1.out04;
	out05:=MUX16_1.out05;
	out06:=MUX16_1.out06;
	out07:=MUX16_1.out07;
	out08:=MUX16_1.out08;
	out09:=MUX16_1.out09;
	out10:=MUX16_1.out10;
	out11:=MUX16_1.out11;
	out12:=MUX16_1.out12;
	out13:=MUX16_1.out13;
	out14:=MUX16_1.out14;
	out15:=MUX16_1.out15;

コメント

タイトルとURLをコピーしました