目次次へ番外編 Chap.5 ラダー図で加算器をつくる(2)

Chap.4では、全加算器の論理式をラダーに変換して、LD Cv!で試しに動作させてみるところまでおこないました。
今回は、この全加算器を4個接続して、4ビットの加算をおこなってみます。
もちろん動作確認は、「番外編の命令語インタプリタ」でおこないます。

5.1 I/O番号の割付け
全加算器を4個接続して、図5.1のようにI/O番号を割り付けることにします。
(Chap.4では、表4.3のようにI/O番号を割り付けましたが、わかりやすい割付になっていなかったので、図5.1の割付に変更します。)

図5.1 I/O番号の割付(4ビット加算器)

図をみると、4個の全加算器のCoとCiが芋蔓(いもづる)式に配線されています。
この配線は、ラダー図上では接続されているCoとCiに同一のI/O番号を使うことに相当します。

5.2 全加算器1の命令語プログラム
では、図5.1の回路のうち1桁分のラダー図を作成し、これを命令語に置き換えてみることにします。
前回おこなったのと同じ方法で、全加算器1をラダー図で表すと、図5.2のようになります。

図5.2 全加算器1のラダー図

このラダー図は赤枠、青枠で囲まれた回路ブロックをそれぞれOR結合しています。
したがって、回路ブロックの結合命令をサポートしていない「番外編の命令語インタプリタ」では、このラダー図を実行することができません。
そこで、これらの回路ブロックを、図5.3のようにいったんコイルM40〜M46に置き換えることにします。

図5.3 図5.2の回路ブロックをコイルに置き換え

回路ブロックをコイルに置き換えたので、今度は図5.4のように「番外編の命令語インタプリタ」でもOR結合が可能です。

図5.4 全加算器1のラダー図(図5.3の結果を使用)

図5.3と図5.4を一緒にすると、図5.2のラダー図と等価になります。
図5.3と図5.4のラダー図ならば、「番外編の命令語インタプリタ」でも実行可能な命令語プログラムに変換できます。
手作業で、図5.3と図5.4のラダー図を命令語に変換したのがリスト5.1です。

リスト1 全加算器5.1の命令語プログラム
/* 全加算器1(1/7) */
LDNOT
7
ANDNOT
17
AND
8
OUT
40
/* 全加算器1(2/7) */
LD
7
ANDNOT
17
ANDNOT
8
OUT
41
/* 全加算器1(3/7) */
LDNOT
7
AND
17
ANDNOT
8
OUT
42
/* 全加算器1(4/7) */
LD
7
AND
17
AND
8
OUT
43
/* 全加算器1(5/7) */
LD
7
ANDNOT
17
AND
8
OUT
44
/* 全加算器1(6/7) */
LDNOT
7
AND
17
AND
8
OUT
45
/* 全加算器1(7/7) */
LD
7
AND
17
OUT
46
/* 全加算器1(出力Y0) */
LD
40
OR
41
OR
42
OR
43
OUT
27
/* 全加算器1(桁上げ) */
LD
44
OR
45
OR
46
OUT
F

5.3 4ビット加算器の命令語プログラム
ここまでで、全加算器1の命令語プログラムができあがりました。
同様にして、全加算器2〜全加算器4の命令語を作成し、全加算器1〜全加算器4を1つのプログラムにして、末尾にEND命令を追加したのがリスト5.2です。
(コイルへの置き換えは、48〜4E、50〜57、58〜5Eを使用しました。)

リスト5.2 4ビットの加算器の命令語プログラム
/* 全加算器1(1/7) */
LDNOT
7
ANDNOT
17
AND
8
OUT
40
/* 全加算器1(2/7) */
LD
7
ANDNOT
17
ANDNOT
8
OUT
41
/* 全加算器1(3/7) */
LDNOT
7
AND
17
ANDNOT
8
OUT
42
/* 全加算器1(4/7) */
LD
7
AND
17
AND
8
OUT
43
/* 全加算器1(5/7) */
LD
7
ANDNOT
17
AND
8
OUT
44
/* 全加算器1(6/7) */
LDNOT
7
AND
17
AND
8
OUT
45
/* 全加算器1(7/7) */
LD
7
AND
17
OUT
46
/* 全加算器1(出力Y0) */
LD
40
OR
41
OR
42
OR
43
OUT
27
/* 全加算器1(桁上げ) */
LD
44
OR
45
OR
46
OUT
F
/* 全加算器2(1/7) */
LDNOT
6
ANDNOT
16
AND
F
OUT
48
/* 全加算器2(2/7) */
LD
6
ANDNOT
16
ANDNOT
F
OUT
49
/* 全加算器2(3/7) */
LDNOT
6
AND
16
ANDNOT
F
OUT
4A
/* 全加算器2(4/7) */
LD
6
AND
16
AND
F
OUT
4B
/* 全加算器2(5/7) */
LD
6
ANDNOT
16
AND
F
OUT
4C
/* 全加算器2(6/7) */
LDNOT
6
AND
16
AND
F
OUT
4D
/* 全加算器2(7/7) */
LD
6
AND
16
OUT
4E
/* 全加算器2(出力Y1) */
LD
48
OR
49
OR
4A
OR
4B
OUT
26
/* 全加算器2(桁上げ) */
LD
4C
OR
4D
OR
4E
OUT
E
/* 全加算器3(1/7) */
LDNOT
5
ANDNOT
15
AND
E
OUT
50
/* 全加算器3(2/7) */
LD
5
ANDNOT
15
ANDNOT
E
OUT
51
/* 全加算器3(3/7) */
LDNOT
5
AND
15
ANDNOT
E
OUT
52
/* 全加算器3(4/7) */
LD
5
AND
15
AND
E
OUT
53
/* 全加算器3(5/7) */
LD
5
ANDNOT
15
AND
E
OUT
54
/* 全加算器3(6/7) */
LDNOT
5
AND
15
AND
E
OUT
55
/* 全加算器3(7/7) */
LD
5
AND
15
OUT
56
/* 全加算器3(出力Y2) */
LD
50
OR
51
OR
52
OR
53
OUT
25
/* 全加算器3(桁上げ) */
LD
54
OR
55
OR
56
OUT
D
/* 全加算器4(1/7) */
LDNOT
4
ANDNOT
14
AND
D
OUT
58
/* 全加算器4(2/7) */
LD
4
ANDNOT
14
ANDNOT
D
OUT
59
/* 全加算器4(3/7) */
LDNOT
4
AND
14
ANDNOT
D
OUT
5A
/* 全加算器4(4/7) */
LD
4
AND
14
AND
D
OUT
5B
/* 全加算器4(5/7) */
LD
4
ANDNOT
14
AND
D
OUT
5C
/* 全加算器4(6/7) */
LDNOT
4
AND
14
AND
D
OUT
5D
/* 全加算器4(7/7) */
LD
4
AND
14
OUT
5E
/* 全加算器4(出力Y3) */
LD
58
OR
59
OR
5A
OR
5B
OUT
24
/* 全加算器4(桁上げ) */
LD
5C
OR
5D
OR
5E
OUT
23
END

このリスト2は、番外編の命令語インタプリタで実行することが可能です。

5.4 4ビット加算器の実行
では、リスト2の命令語プログラムを実際に動かしてみることにしましょう。
例として、7+10=17(2進数で、0111+1010=10001)を計算させてみます。
操作手順は、(1)〜(5)のとおりです。

(1)リスト2のプログラムをテキストエディタで作成し、適当なファイル名で保存します。
(2)番外編の命令語インタプリタを起動します。
(3)「ファイル読み込み」ボタンをクリックし、(1)で作成したファイル名を指定し、プログラムを読み込みます。
(4)「データ入力」ボタンをクリックし、図5.5のように数値を1ビットずつ入力します。

図5.5 データ入力の書式

ここでは数値10と数値7なので、表5.1のように各ビットを入力します。

表5.1 各ビットの入力値
数値 入力操作
数値7
(2進数で0111)
・アドレス04に、0を入力
・アドレス05に、1を入力
・アドレス06に、1を入力
・アドレス07に、1を入力
数値10
(2進数で1010)
・アドレス14に、1を入力
・アドレス15に、0を入力
・アドレス16に、1を入力
・アドレス17に、0を入力

数値をすべて入力すると、図5.6のようになります。

図5.6 加算器に7と10を入力した直後(赤枠が7、青枠が10)

(5)「スキャン実行」ボタンをクリックし、計算結果を見ます。(図5.7)

図5.7 加算器で7+10を実行したところ
(ピンク枠が計算結果の11H、すなわち17)

計算結果は、24〜27に出力され、計算の結果桁上げは、23に出力されます。
図5.7では、0111+1010=10001を計算していることがわかります。

数値を変えてみて、正しく加算していることを確かめてみてください。
たとえば、次のような計算です。

(1)4+8=12 (0100+1000=01100)
(2)13+15=28(1101+1111=11100) (注)28は16進数で1C、2進数で11100

5.5 実際のリレー回路へ適用する場合
これまでで、ラダー図をコンピュータ上でシミュレーションして、4ビットの加算がおこなえたことを確認できました。
シミュレーションできたのですから、実際にリレーを組み合わせても、加算器ができるはずです。
ただし、実際にリレーでラダー図の配線をおこなう場合は、そのリレー(部品)に内蔵している接点の数に制限があるため、使用する接点の数を満たすだけのリレーが必要となります。

さて、次回はメモリに挑戦します。
ここから先は、あまり考えていないので、色々な問題が出てくるかもしれません。

目次次へ