|
PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675) HOMEへ (8ピンPICで、入力1、出力3のPLC) ◎PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675)ハード ◎PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675)ソフト ◎PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675) プログラム設定書込ツール(パソコン用) ◎PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675) サンプルプログラム
New PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683)へ (8ピンPICで、入出力全6点のPLC)
|
||
|
☆はじめに |
||
|
PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675) |
先回製作したRS232C-I/O通信制御ボードのハード部分を使用して、パソコン無しで単独で簡易プログラム制御が出来るようにPICミニ簡易プログラマブルコントローラ(PLC)(シーケンサー)を作ろうとソフトの作成に着手しました。制御プログラムは、パソコンより専用書込ツールでRS232C通信でPIC16F648AのEEPROM(256バイト)のメモリ部分に書込みます。制御ボード(PLC)単体で、制御命令をPIC内の制御変換プログラムで変換して入出力、タイマー等を制御します。PIC16F648AのEEPROMは256バイトしか無いので、小さな簡単な制御しか出来ませんが、PICライターがなくてもパソコンで簡単に制御プログラムを書き換える事が出来ます。 256バイトの容量しか無いので、出来るだけメモリを節約する必要が有り、先回無かった繰返しの動作命令と入力割込みも追加したいです。 mikroBasicでソフトを作成しましたが、先回の制御命令だけでフリーの制限の2Kワードの壁にぶち当たり、エラーとなってしまいました。色々とプログラムの組み方を変えて出来るだけ容量が小さくなるように変更して何とか先回の制御命令だけは入れましたが、追加したい繰返しの動作命令と入力割込み命令等を入れる事が出来ません。 |
|
|
こちらは中止して、手持ちにPIC12F675が有るので、これはIOポートが少ないので容量エラーは出ないと思い、これでミニミニ簡易プログラマブルコントローラ(PLC)を作成する事にしました。 8ピンの小さなPICですので、電源で2ピン、RS232Cで2ピン使用して、残り4ピンがIOポートです。入力1ピン、出力3ピンで、スイッチで入力2ピン、出力2ピンに切替出来るように回路は考慮しましたが、最終的に入力1ピンと出力3ピン固定となってしまいました。EEPROMは、178バイトと648Aの半分しか有りません。 |
|
|
|
☆仕様・製作 |
|
◎PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675)ハード PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675) LEDハード回路図 PIC12F675を使用して、クロックは内部の 4MHzRC発振器信号を使用します。8ピンの内、VDD、VSS電源で2ピン、RS232C用で2ピン使用して、残り4ピンをI/Oピンとして使用しました。GP2が入力用、GP0、GP1、GP5が出力用です。当初は、スイッチの切替えでGP5を入力用、出力用に切替えて、入力1、出力3又は入出力共各2に変更出来るようにしました。簡易プログラム制御命令を書込む設定モードと制御モードの切替でハードでの切替が必要となり、又、入力2ポートの制御プログラムはこの675のフラッシュメモリ容量(1Kワード)では小さくて入りきらなく無理となり、最終的に入力1ピンと出力3ピン固定となりました。RS232Cレベル変換器(MAX232)を使用して、パソコンとRS232C通信でPIC12F675のEEPROMに簡易プログラム制御命令を書込みます。RS232Cの通信速度は9600bps固定です。簡易プログラム制御命令をEEPROMに書込む時は、DC5V電源を入れる前にスイッチSW1を設定側にしてから、5V電源をONにします。設定モード状態となり、パソコンとRS232C通信が可能となり、制御命令を書込む事が出来ます。DC5V電源を入れる前にスイッチSW1を制御側にしてから、5V電源をONすると制御モードとなり、簡易プログラム制御命令での制御動作を行います。スイッチの入力とLEDの点灯出力で動作は確認しました。外部機器等と入出力を行う場合には、RS232C-I/O通信制御ボード(PIC16F648A)回路図の様に、接続する外部機器に合うように入力はフォトカプラ入力等、出力はオープンコレクタ出力等、又は、入出力共フォトカプラで絶縁して外部機器と合うような回路に変更して下さい。入力スイッチのチャタリングで誤動作しますが、入力スイッチのチャタリング防止はPICソフトでは行っていませんので、抵抗とコンデンサーを入力回路に入れてチャタリング防止を行って下さい。 |
|
PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675) IOピン割付 |
|
| IO IN名称 | 入力 |
| IN1 | CP2 |
| IO OUT名称 | 出力 |
| OUT1 | GP0 |
| OUT2 | GP2 |
| OUT3 | GP5 |
|
PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675) 制御コマンド |
|||||||
|
制御命令 |
PIC命令 |
パラメーター | |||||
|
命令 |
OUT/IN、回数 |
ON/OFF |
時間(×10ms)/ステップ |
10進数 |
16進数 |
パラメーター1 | パラメーター2 |
| END | **** | *** |
**** |
1 |
1 | **** | **** |
| GOTO | **** | *** | ジャンプ先ステップ |
2 |
2 | ジャンプ先ステップ | **** |
| TIMER1 | **** | *** | 時間(0〜255)1バイト |
3 |
3 | 時間(1バイト) | **** |
| TIMER2 | **** | *** | 時間(0〜65535)2バイト |
4 |
4 | 時間(上位1バイト) | 時間(下位1バイト) |
| OUT | OUT1 | ON |
**** |
5 |
5 | **** | **** |
| OUT | OUT1 | OFF |
**** |
6 |
6 | **** | **** |
| OUT | OUT2 | ON | **** |
7 |
7 | **** | **** |
| OUT | OUT2 | OFF | **** |
8 |
8 | **** | **** |
| OUT | OUT3 | ON | **** |
9 |
9 | **** | **** |
| OUT | OUT3 | OFF | **** |
10 |
A | **** | **** |
| OUT | OUT ALL | ON | **** |
11 |
B | **** | **** |
| OUT | OUT ALL | OFF | **** |
12 |
C | **** | **** |
| IN | IN1 | ON | **** |
13 |
D | **** | **** |
| IN | IN1 | OFF | **** |
14 |
E | **** | **** |
| INState | IN1 | ON | **** |
15 |
F | **** | **** |
| INState | IN1 | OFF | **** |
16 |
10 | **** | **** |
| IF INWaite | IN1 | ON | ジャンプ先ステップ |
17 |
11 | ジャンプ先ステップ | **** |
| IF INWaite | IN1 | OFF | ジャンプ先ステップ |
18 |
12 | ジャンプ先ステップ | **** |
| IF INState | IN1 | ON | ジャンプ先ステップ |
19 |
13 | ジャンプ先ステップ | **** |
| IF INState | IN1 | OFF | ジャンプ先ステップ |
20 |
14 | ジャンプ先ステップ | **** |
| LOOP | 回数 |
*** |
繰返し最終ステップ |
21 |
15 | 繰返し最終ステップ | 繰返し回数 |
| INTRUPT | IN1 | ON | ジャンプ先ステップ |
22 |
16 | ジャンプ先ステップ | **** |
| INTRUPT | IN1 | OFF | ジャンプ先ステップ |
23 |
17 | ジャンプ先ステップ | **** |
命令のついて
PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675)が制御出来る制御命令は、上記の表の命令だけです。
パソコンのPICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675)の専用プログラム設定書込ツールで、上記の制御命令で制御プログラムを作成して、PIC命令に変換し、RS232CでPICのEEPROMに書込み、制御モード時は、書込んだEEPROMの0h番地から7Fh番地までの制御プログラムデータを順次読込んで実行します。
PIC12F675のEEPROMのメモリ容量は、128バイト(0h番地〜7Fh番地)ですので、ステップbヘ、ステップ1からステップ128までとなります。
END、OUT、IN、INState命令は、1バイト命令なので1ステップ使用します。GOTO、TIMER1、IF INWaite、IF INState、INTRUPT命令は、命令で1バイト、命令の後にパラメーター1のジャンプ先ステップ1バイトが付いて2バイト命令なので2ステップ使用します。TIMER1命令は、命令で1バイト、命令の後にパラメーター1の時間1バイトが付いて2バイト命令で、2ステップ使用し、TIMER2命令は、命令で1バイト、命令の後にパラメーター1、2の時間2バイトが付いて3バイト命令で、3ステップ使用します。又、LOOP命令は、命令で1バイト、命令の後にパラメーター1の繰返し最終ステップbPバイト、パラメーター2の回数1バイトが付いて3バイト命令で、3ステップ使用します。依って使用する命令により使用出来るステップp狽ヘ変化します。
全て1バイト命令のみを使用した時は、128ステップまで使用出来ますが、2バイト命令を1個使用した時は、1ステップ減少します。
次の命令は、処理を行っている命令が1バイト命令の時は、EEPROMの次の番地にある命令を読込み、2バイト命令の時は2つ後の番地にある命令を読込み、3バイト命令の時は、3つ後の番地の命令を読込み実行します。
|
RS232C通信制御命令 |
||
|
制御名称(パソコン⇒PIC) |
制御コマンド |
応答(PIC⇒パソコン) |
|
接続確認 |
O |
O |
|
PIC EEPROMデータ書込 |
W |
(128バイトのEEPROMデータ書込後)128バイトのEEPROMデータ送信 |
|
PIC EEPROMデータ読込 |
R |
128バイトのEEPROMデータ送信 |
|
PIC 設定モード解除 |
E |
(PICを設定モードから制御モードに切替えます) |
RS232Cの制御コマンドは、上記です。
設定モードでパソコンより、"O"コマンドが送信されると"O"をパソコンへ送信して、接続を確認します。"W"コマンドが送信されると、PICは書込みモードとなり、パソコンよりデータが送信されるのを待ち、データが送信されるとEEPROMの0番地から順にデータを127番地まで書込み、その後EEPROMの0番地から順位に127番地までデータを読取り、データを順次パソコンに送信します。"R"コマンドが送信されると、EEPROMの0番地から順位に127番地までデータを読取り、データを順次パソコンに送信します。"E"コマンドが送信されると、設定モードから抜け出して、ソフト的には制御モードとなり、制御プログラムを実行します。
以上の仕様で、PICのソフトをmikroBasicで作成しました。
PIC12F675は、USART(通信機能)が無いので、ソフトウエアで RS232C通信を行います。PIC12F675 の内蔵クロックオシレータの校正値を入れても、通信速度の誤差が大きく、ハイパーターミナルで受信しても、1文字目は正常に送受信が出来ません。2文字目からは、通信速度を自動調整する様で何とか正常に送受信出来ます。初めにダミーのコマンドを送信して通信速度を調整してから、送信する事にしました。648AでUSART(通信機能)で作成した時は、通信速度の誤差も少なく正常でしたが、USART(通信機能)ではなく、ソフトウエアで RS232C通信を行っているので仕方が無いのでしょうか。
電源投入時の設定モードと制御モードの切替は、PIC16F648Aの時と同じように、時間と通信コマンドで、ソフト的に切替える予定でしたが、
ソフトウエア UARTを使用したので、受信が無いとLOOPより抜け出すことが出来ずタイマーも利かなくなり何も出来なくなり、切替える事が出来ません。
スイッチで設定、制御を切替えてIOピンのGP5をON、OFFさせてハードにて切替える事にしました。電源ON時は、GP5を入力設定にして、GP5がON(HI)の時は、設定モードとして、通信処理を行うことが出来、書込み、読込が可能です。電源ON時に、GP5が0FF(LO)の時は、制御モードとして、GP5を出力に変更して、制御を開始します。
TIMER命令は、PIC16F648Aの時と同じように、タイマー割り込みを使用しましたが、PIC12FF675では上手く機能せず、やむなくライブラリーの変数が使用出来るVdelay_msタイマーを使用しましたが、時間が極端に不正確(マニュアルには精度が良くない事が書いてあったが、ここまで悪いとは思いませんでした。10秒設定で、8秒以下でした。)なので、再度タイマー割り込みを使用して、色々とテストした結果、割込みはソフトウェア UARTとは、同時には使用出来ない事が判り、制御モードになったら、タイマー割り込みを設定するようにしました。タイマー設定は、最小単位は10msです。
入力(IN)設定が、プログラムに指定された時しか制御出来ないのでは、時間が掛かる処理をしていた場合には、すぐに対応出来ないので、入力変化を常時監視して、変化した時に割り込んで指定したステップbヨジャンプして処理が出来るように入力割り込み機能を付けました。但し、ジャンプするのみで元の処理には戻りません。INT割込み及びピン変化割り込みも使用してみましたが、機能出来ませんでした。
原因は、mikroBasicでは、タイマー割り込みを使用しているので、他の割り込みと同時には使用出来ない様です。INT割込み及びピン変化割り込みは使用せず、タイマー割り込みが有った時に、GP2ピンの変化を見て、変化が有れば指定したステップbヨジャンプする様にしました。10ms毎に監視します。
入力1ポートだけで1Kワードを超えてエラーとなってしまい2Kなのにおかしいなと思いましたが、私の勘違いでPIC12F675は1Kワードしかフラッシュメモリは有りませんでした。プログラムの組み方を変更して、何とか1Kワード以内に抑えました。入力処理関係にメモリーを多く使用しますので、最終的に、このメモリ容量では、入力1ポート、出力3ポートしか出来ませんでした。
上記のPICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675) HEXファイルをPICライターで書込む時、PIC12F675 の内蔵クロックオシレータの校正値を確認して、下記の様に校正値を変更して書込んで下さい。ソフトウエアで RS232C通信を行っていますので この処理を省略すると 通信速度に誤差が大きくなって 通信出来なくなる可能性があります。
PIC12F675には、工場出荷時にプログラムメモリの最終番地03FFに内部4MHzクロックの補正する校正値が書込まれています。
書込むPIC12F675をPICライターで読み出して、プログラムメモリの最終番地03FFの値を確認して下さい。(下記左写真)
PICライターでPICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675) HEXファイルを開いて、01E9番地の3094の下2桁(94)の値をプログラムメモリの最終番地03FFの値の下2桁部分に変更して、この変更した値で、PICに書込んで下さい。(下記右写真)
![]() |
|
◎PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675) プログラム設定書込ツール(Windowsパソコン用) PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675) プロブラム設定書込ツール (lzhで圧縮)
Windowsパソコンで制御プログラムを編集して、制御プログラムを記号化して、PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675)のPICのEEPROMに書込む為に使用するパソコン用プログラム設定書込ツールです。 VB.NET 2003にて作成していますので、起動しない時は、Microsoftより.NET Framework Version 1.1 再頒布可能パッケージおよび.NET Framework Version 1.1 LanguagePackをダウンロードしてインストールして下さい。 シリアルポート制御モジュールは、アクティブセルさんのフリーソフト EasyComm.NETを使用させて頂きました。
|
![]() |
●プログラム設定書込ツール説明
PIC書込ボタンで、PICミニミニ簡易プログラマルコントローラ(PLC)(PIC12F675)のPICのEEPROMに簡易制御プログラムデータを書込みます。又、PIC読込ボタンでPICよりEEPROMの簡易制御プログラムデータを読込みます。
PICミニミニ簡易プログラマルコントローラ(PLC)(PIC12F675)に制御プログラムを書込む時は、電源をONする前に、PICミニミニ簡易プログラマルコントローラ(PLC)(PIC12F675)のスイッチSW1を設定側にしてから、電源をONして下さい。設定モードとなりPICと通信接続が可能となります。PIC書込み後、設定解除ボタンを押すと、ソフト的には制御状態となり、制御プログラムを実行します。スイッチSW1を制御側にするとハード側も制御モードとなります。スイッチSW1を制御側にして、電源をONにすると制御モードで立ち上がり、直ちに制御プログラムを実行します。
以下は、プログラム設定書込ツール画面のボタン操作及びプログラム命令の説明です。
・プログラムファイル
ファイル保存ボタン:簡易制御プログラムをファイルに保存します。
ファイル読込ボタン:保存された簡易制御プログラムファイルを読込みます。
▲ボタン:ステップb20ステップ加算して、設定を表示します。
▼ボタン:ステップb20ステップ減算して、設定を表示します。
・編集
削除ボタン:指定したステップbフ設定内容を削除して、指定したステップbフ次のステップhネ降の設定内容を1ステップ前に変更します。
(GOTO及びIF
INWaite、IF
INState、LOOP、INTRUPTのジャンプ先のステップbヘ、削除以降のステップbフ時は、自動的にスッテプb修正します。(1減算します。))
挿入ボタン:指定したステップbノ1行挿入して、指定したステップhネ降の設定内容を1ステップ後に変更します。
(GOTO及びIF
INWaite、IF
INState、LOOP、INTRUPTのジャンプ先のステップbヘ、指定したステップhネ降の時は、自動的にスッテプb修正します。(1加算します。))
全消去ボタン:設定値を全て消去して、設定値を初期状態とします。(全てEND)
・PICメモリ使用量
使用最終ステップaF制御プログラムで使用している最終ステップb入れます。
メモリ量チェック:現在設定されている制御プログラムの使用最終ステップbェ、使用可能ステップb超えていないかを確認します。使用可能ステップhネ内で有れば、PICに正常に書込み及び制御が出来ますが、使用可能ステップb超えている場合には、PICに正常に書込む事が出来ないので、制御プログラムを変更して下さい。PICに書込む前に、必ずメモリ量チェックをして、メモリ使用量を確認して下さい。
・PIC接続
通信ポート:通進ポートを設定します。COM1からCOM16まで設定出来ます。
通信停止表示:休止中は通信停止表示します。PIC書込、読込、設定解除時は、通信中表示となります。
PIC書込:簡易制御プログラム設定で設定されている制御プログラムを記号化して、PICのEEPROMに制御プログラムデータを書込みます。
PIC読込:PICのEEPROMの制御プログラムデータを読込んで、簡易制御プログラム設定に表示します。
設定解除:設定モードを解除して、制御モードに切替えます。ソフト的には切替えますが、ハード的には スイッチSW1を切替えて下さい。
・簡易プログラム制御設定
ステップ数:ステップ数は、ステップ1〜ステップ127までです。但し、使用する命令により、使用出来るステップ数は変化します。
入力ピン割込み有り:入力ピン割込み有りにした時は、ステップ1、2が自動的にINTRUPT命令となります。
入力ピン割込み有りにした時は、IN、INState、IF INWaiteの命令は、使用出来ません。
・命令説明
END(終了命令):プログラムを終了します。
ENDの1つの命令のみです。
最初のEND命令の有るステップbナプログラムを終了します。
GOTO(ジャンプ命令):指定したステップbヨジャンプして、ジャンプしたステップb謔閭vログラムを進めます。
命令 ステップa@の2つの命令でセットとなります。
例、 GOTO 120 で、ステップ120へジャンプして、ステップ120からプログラムを進めます。
TIMER1(タイマー命令):遅延タイマーで、設定した時間の間、次のステップbヨ進むのを遅延します。(×10msタイマー)
命令 時間(×10ms) の2つの命令でセットとなります。1バイトですので、入力出来る数値は、0〜255までです。(時間0〜2550ms(2.55秒)
例、 TIMER1 100 で、次のステップbヨ進むのを1000ms(1秒)遅延します。(1000ms(1秒)後に、次のステップbヨ進みます。)
TIMER2(タイマー命令):遅延タイマーで、設定した時間の間、次のステップbヨ進むのを遅延します。(×10msタイマー)
命令 時間(×10ms) の2つの命令でセットとなります。2バイトですので、入力出来る数値は、0〜65535までです。(時間0〜655350ms(655.35秒)
例、 TIMER1 1000 で、次のステップbヨ進むのを10000ms(10秒)遅延します。(10000ms(10秒)後に、次のステップbヨ進みます。)
OUT(出力命令):指定した出力ポートをON又はOFFに制御して、次のステップbヨ進みます。
OUT1〜OUT3までの3つの出力ポートの内、指定した1つの出力ポートを、ON又はOFFして、次のステップbヨ進みます。
又、OUT
ALLは、3つの出力ポートを全て、ON又はOFFして、次のステップbヨ進みます。
命令 OUT/IN ON/OFF の3つの命令でセットとなります。
例、 OUT OUT1 ON で、OUT1ポートをONして、次のステップbヨ進みます。
IN(入力命令):指定した入力ポートが、ON又はOFFに変化するのを待ち、次のステップbヨ進みます。
IN1の入力ポートがONからOFFに、又はOFFからONに変化するのを待ち、変化した時点で、次のステップbヨ進みます。
命令 OUT/IN ON/OFF の3つの命令でセットとなります。
例、 IN IN1 ON で、IN1ポートがOFFからONになるまで待ち、ONになった時点で、次のステップbノ進みます。(入力待ち状態となるので、IN1入力ポートの変化が有るまでプログラムは次のステップbヨ進めません。)
INState(入力命令):入力ポートの状態を取得して、指定した入力ポートが、指定したON又はOFFに変化していれば次のステップに進みます。
変化していなけれが変化するのを待ち、次のステップbヨ進みます。
命令 OUT/IN ON/OFF の3つの命令でセットとなります。
例、 INState IN1 ON で、入力ポートの状態を取得して、IN1ポートがON状態で有れば次のステップbヨ進みます。OFFの状態の時は、IN1ポートがOFFからONになるまで待ち、ONになった時点で、次のステップbノ進みます。(指定した状態で有れば、即次のステップbヨ進み、指定した状態でない時は、入力待ち状態となり、指定した状態に変化するまでプログラムは次のステップbヨ進めません。)
IF INWaite(入力分岐命令):入力ポートが変化するのを待ち、指定した入力ポートがON又はOFFに変化した時は、指定したステップbヨジャンプします。
指定した状態に変化しなかった時は、次のステップbヨ進みます。
IN1の入力ポートが変化するのを待ち、IN1入力ポートが、指定した状態にON、OFF変化した時は、指定したステップbヨジャンプして、ジャンプ先のステップb謔閭vログラムを進めます。指定した状態変化での変化でない時は次のステップbヨ進みます。
命令 OUT/IN ON/OFF ステップa@ の4つの命令でセットとなります。
例、 IF
INWaite IN1 OFF 80 で、入力ポートが変化するまで待ち、入力IN1ポートがONからOFFになれば、ステップ80にジャンプして、ステップ80からプログラムを進めます。又、入力IN1ポートがOFFからONの変化の時は、次のステップbヨ進みます。(入力待ち状態となるので、変化が有るまでプログラムは次のステップbヨ進めません。)
IF INState(入力分岐命令):入力ポートの状態を取得して、指定した入力ポートの状態がON又はOFFであれば、指定したステップbヨジャンプします。
指定した入力ポートが指定した状態でない時は、次のステップbヨ進みます。
命令 OUT/IN ON/OFF ステップa@ の4つの命令でセットとなります。
例、 IF
INState IN1 ON 60 で、入力ポートの状態を取得して、入力IN1ポートがONの状態の時は、ステップ60へジャンプして、ステップ60からプログラムを進めます。入力IN1ポートがOFFの状態の時は、次のステップbヨ進みます。(入力待ちは有りません。)
LOOP(繰返し命令):LOOPの次のステップbゥら、指定したステップbワで、指定した回数、繰返し動作します。
命令 回数 ステップa@ の3つの命令でセットとなります。
例、 LOOP 5 20 で、LOOPの次のステップbゥらステップ20までの動作を5回繰返します。
INTRUPT(入力割込み命令):入力IN1の入力状態を10ms毎に監視して、入力の変化が有った時に、指定したステップbヨジャンプします。
入力ピン割込み有りにした時は、ステップ1とステップ2で入力割込み先のステップb指定します。(必ず両方とも指定して下さい。)
ステップ1が、INTRUPT IN1 ON ステップbニなり、入力IN1がONに変化した時にジャンプするステップb指定します。
ステップ2は、INTRUPT IN1 OFF ステップbニなり、入力IN1がOFFに変化した時にジャンプするステップb指定します。
命令 OUT/IN ON/OFF ステップa@ の4つの命令でセットとなります。
例、INTRUPT IN1 ON 50 で、入力IN1がONに変化した時は、ステップ50にジャンプします。OFFの時は、次のステップbヨ進みます。
入力ピン割込み有りにした時は、IN、INState、IF INWaiteの命令は、使用出来ません。
PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675)の回路をブレッドボードで組んで、動作を確認しました。
![]() |
ブレッドボードに組んだPICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675)のテストボードです。 左からOUT1(黄LED)、OUT2(赤LED)、OUT3(青LED)の高輝度タイプLEDを付けてみました。 OUT3の青LEDの上のスイッチ(押しボタン)が入力IN1用のSW2で、下のスイッチが設定、制御切替え用のSW1です。 OUT1の黄LEDの左がPIC12F675で、その左がRS232Cレベル変換用ICです。
|
下記が、動作を確認した時に使用したテストプログラムサンプルです。
■サンプル1.・・・・・・OUTテストプログラム
500ms間隔で、OUT1からOUT3まで順位点灯、消灯をして、全OUTを点灯、消灯した後、逆にOUT3からOUT1まで順次点灯、消灯して、全OUTを点灯、消灯して、この動作を繰り返します。
■サンプル2.・・・・・・INテストプログラム
OUT1を点灯して、入力IN1がONになるまで待ちます。ONに変化した後、1秒間隔で、OUT2、OUT3、全OUTの順で、順次点灯、消灯動作を行い、初期のOUT1点灯に戻り、この動作を繰り返します。
■サンプル3.・・・・・・INStateテストプログラム
OUT1を点灯して、入力IN1の入力状態を確認します。ONの状態の時は、次の動作に移ります。ONでない時はONになるまで待ちます。ONの時は、1秒間隔で、OUT2、OUT3、全OUTの順で、順次点灯、消灯動作を行い、初期のOUT1点灯に戻り、この動作を繰り返します。
■サンプル4.・・・・・・IF INWaiteテストプログラム
OUT1を点灯します。入力IN1が、ON、OFF変化するのを待ちます。変化が有った時、IN1がONの時はステップ20にジャンプして、1秒間隔で全OUT点灯、消灯を2回繰り返し、初期のOUT1を点灯して、入力IN1の変化待ちに戻ります。IN1がOFFの時は、次のステップbフ動作、OUT1を消灯して、1秒間隔で、OUT2、OUT3、全OUTの順で、、順次点灯、消灯動作を行い、初期のOUT1を点灯して、入力IN1の変化待ちに戻り、この動作を繰り返します。
■サンプル5.・・・・・・IF INStateテストプログラム
OUT1を点灯して、1秒待ちます。入力IN1の入力状態を確認します。IN1がONの時はステップ20にジャンプして、1秒間隔で全OUT点灯、消灯を2回繰り返し、初期のOUT1の点灯に戻ります。IN1がOFFの時は、次のステップbフ動作、1秒間隔で、OUT2、OUT3、全OUTの順で、、順次点灯、消灯動作を行い、初期のOUT1の点灯に戻り、この動作を繰り返します。
■サンプル6.・・・・・・LOOP、INTRUPT@テストプログラム
INTRUPTは、入力IN1の入力が変化した時に割込む為、電源ON時は入力IN1がどの入力状態かは、INTRUPTでは確認出来ないので、IF INStateで入力IN1の入力状態を確認して処理します。
入力IN1がONに変化した時は、ステップ20にジャンプして、全OUTを消灯して、全OUTを1秒間隔で点灯、消灯を5回繰り返します。全OUTを3秒間点灯して消灯して3秒間待ち、これを2回繰り返し、ステップ20に戻り、この動作を繰り返します。(入力割込みがONに変化した時のジャンプ先は、ステップ1のステップbノ設定します。)
入力IN1がOFFに変化した時は、ステップ4にジャンプして、全OUTを消灯して、1秒間隔で、OUT2、OUT3、全OUTの順で、順次点灯、消灯動作を行い、ステップ4に戻り、この動作を繰り返します。(入力割込みがOFFに変化した時のジャンプ先は、ステップ2のステップbノ設定します。)
入力IN1がON、OFF変化した時に、直ちにON用、OFF用のプログラムに切り替って実行します。
■サンプル7.・・・・・・LOOP、INTRUPTAテストプログラム
入力IN1がパルス入力の時(ONになるが、すぐにOFFになるような場合)、ONに変化してONのプログラムを実行していて、すぐにOFFに変化した場合でも、OFFになってもしばらくONのプログラムを実行したい時が有りますが、この様な場合のテストプログラムです。(警報器などで、センサが働いて一瞬ONとなりすぐにOFFになるが、警報はしばらく出したい時などです。)
入力IN1がONに変化した時は、ステップ36にジャンプして、300ms間隔で全OUTを点灯、消灯して、100ms間隔でOUT3、OUT2、OUT1の順で点灯、消灯を5回繰返して、ステップ36に戻り、この動作を繰り返します。OFFに変化した時は、ステップ18にジャンプして、ONの時と同じ、300ms間隔で全OUTを点灯、消灯して、100ms間隔でOUT3、OUT2、OUT1の順で点灯、消灯を5回繰返して、ステップ4にジャンプして、入力IN1がOFFの状態の動作となり、1秒間隔で、OUT1、OUT2、OUT3の順で点灯、消灯を繰り返します。入力IN1がOFFになっても、しばらくONと同じようなプログラムで動作を行います。
|
☆まとめ |
PIC12F675では、プログラムメモリーが1Kワードしか無かったので、入力1、出力3のPLCしか出来ませんでした。
一般的にPLC(シーケンサー)の基本ベースは、入力点数が出力点数と同じか又は出力より点数が多いみたいですが、今回の入力が1では余りにも少な過ぎて使用出来る用途が余りないかもしれません。このPLCで、車の防犯用のイルミネーションも兼ねた警報器を作ろうと思っていますが、せっかくPICが小さいので、RS232Cのレベル変換器等の通信部分は別基板で分離して、書込む時のみ接続すれば警報器は小さくコンパクトに出来ます。
PICのソフトでは、通信部分、割込み等でてこずりましたが、かえってパソコン用のプロブラム設定書込ツールの方が、命令の記号化、バイト通信、命令の読込み他の処理で時間が掛かりました。
私は、実際のPLCを使用したことがなく、PLCの知識もないので、リレー回路での動作を考慮して、命令動作を作成しましたが、命令の種類も少ないので、簡単な操作しか出来ないと思います。
入力ピン割込み有りの設定時は、PICソフトではTIMER1、TIMER2命令のみ使用出来ないようにしていますが、プログラム設定書込ツールの方でIN、INState、IF INWaiteの命令が使用出来ないようにして有ります。
このPLCでは、入力処理でプログラムメモリーを一番多く使用しますが、mikroBasicのフリーの2Kワードの制限が有り、入力数を余り大きくする事が出来ません。PIC12F675では、プログラムメモリーが1Kワードだったのでメモリー不足でしたが、同じピン数のPIC12F683を使用すればプログラムメモリーが2Kワード有り、入力2とする事も可能で、もう少し使用用途の有るPLCが出来るでしょう。
HOMEへ このページのTOPへ PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683)へ New
(8ピンPICで、入出力全6点のPLC)