PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683)  HOMEへ

(8ピンPICで、入出力全6点のPLC)

☆はじめに

☆仕様・製作

◎PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683)ハード

◎PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683)ソフト

◎PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683) プログラム設定書込ツール(パソコン用)

◎PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683) サンプルプログラム

☆まとめ

 


☆はじめに

 

 

先回製作したPICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F675)では、プログラムメモリーが1Kワードだったのでメモリー不足で、入力1ピン、出力3ピンの仕様の物しか出来ませんでした。同じ8ピンでプログラムメモリーが2Kワード有るPIC12F683を使用して、もう少し使用用途が有りそうなPLCを製作してみました。

8ピンの内、電源で2ピンを使用して、残り6ピンを制御モードでは入出力6点として使用します。

8ピンですが、使用用途により、ハード及びソフトも、入力2,出力4、入出力各3、入力4,出力2の3種類の設定を選択することが出来ます。

PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683)

点滅間隔変更テストプログラム

 

 

このページのTOPへ

 


 


☆仕様・製作

◎PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683)ハード

PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683) LEDハード回路図

PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683) 入出力ハード回路図

 

     入力用切替え抵抗ICソケット

 

     

PICミニミニ簡易プログラマブルコントローラ    (PLC)(PIC12F683) LEDハード

PICミニミニ簡易プログラマブルコントローラ(PLC)  (PIC12F683) 入出力ハード   

 

PIC12F683を使用して、クロックは内部の 最大値の8MHzRC発振器信号を使用します。8ピンの内、VDD、VSS電源で2ピン、設定モードでRS232C用で2ピン使用します。設定モードでGP0がRS232Cの送信用、GP3がRS232Cの受信用ですが、制御モードではスイッチSW2で切替えて、GP0を出力用、GP3を入力用とします。GP1は、スイッチSW1を切替えて、設定モードでは入力用として、制御モードでは出力用です。GP4は入力専用です。GP2、GP5は、ジャンパJMP1、JMP2の短絡の有、無で、入力用、出力用のどちらでも可能です。GP2、GP5を入力用、出力用に切替える事により、入力2,出力4、入出力各3、入力4,出力2の3種類の設定が出来るようにしています。

入力(スイッチ)がHI(ON)の時、PICの入力ピンはHIで、PICの出力ピンがHIの時は、出力(LED)はHI(ON)となり、入出力共、正論理です。

RS232Cの通信速度は9600bps固定です。前回のPLC(PIC12F675)と同じで、簡易プログラム制御命令をEEPROMに書込む時は、DC5V電源を入れる前にスイッチSW1及びSW2を設定側にしてから、5V電源をONにします。電源立ち上げ時にGP1が入力設定となっていて、スイッチSW1が設定側になっているとGP1はHI(ON)となって、HI(ON)で有れば設定モード状態となり、パソコンとRS232C通信が可能となり、制御命令を書込む事が出来ます。DC5V電源を入れる前にスイッチSW1を制御側にしてから、5V電源をONするとGP1はLO(OFF)の為、制御モードに切替り、GP1は出力設定となり、簡易プログラム制御命令での制御動作を行います。スイッチSW2も制御側にしないと、入出力出来ません。

 

まず初めに実験回路として上記のPICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683) LEDハード回路図の回路をブレッドボードで組んで、スイッチの入力とLEDの出力でハードとソフトの仕様と動作を確認しました。

入力2,出力4、入出力各3、入力4,出力2の3種類の設定が出来る、上記のPICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683) 入出力ハード回路図の回路を70×50mmのユニバーサル基板に組み込んで、入力4、出力4の最終的な汎用テスト基板を製作しました。

外部入力はフォトカプラ入力で、外部出力はトランジスタアレイを使用したオープンコレクタ出力です。基板単体で動作確認が出来る様に入力スイッチと出力確認用のLEDを設けました。入力スイッチは押ボタンスイッチの方が操作がし易いですが、ディップスイッチが有ったので、入力スイッチとジャンパJMP1、JMP2は、ディップスイッチを使用しました。RS232C用と入出力用に切り替える設定/制御スイッチSW2は、2極のスイッチを使用しましたが、最初に使用したスイッチが6ピン有ったので2極のスイッチと思っていたが、実際には1極のスイッチであったので制御が出来ずにトラブリましたので、注意しましょう。本当は3極のスイッチがあるとSW1とSW2が共用出来て良いのですが。

入力用の外部電源が5V、12V、24Vと3種類の電源に対応出来る様にするには、4本の抵抗値を交換する必要が有りますが、抵抗を切替えるのは大変なので、基板に8ピンのICソケットを取付けて、別の8ピンのICソケットに4本の抵抗をハンダ付けしてICソケット毎、基板のICソケットに挿して交換出来る様にしました。(上記の写真の入力用切替え抵抗ICソケット) ICソケットは外れやすいので、使用時は結束バンド等で固定した方が良いです。

8ピンのICソケットに4本の抵抗をハンダ付けするのは難しく、ハンダの熱でソケットが溶けてしまい上手くいかないので、最終的にピンをソケットより抜いて、抵抗とピン単体でハンダ付けした後、ピンをソケットに挿し込む様にして作りました。

 

 

このページのTOPへ

 


 

◎PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683)ソフト

PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683) HEXファイル (lzhで圧縮)

 

PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683) IOピン割付

RS232C用(設定モードの時)   受信用 GP3   送信用 GP0 EEPROM Oh番地に書込む
設定 入力数 入力ピン

出力数

出力ピン PIC 設定 PIC 命令
設定1 4 GP3、GP4、GP5、GP2 2 GP0、GP1 1 &H01
設定2 3 GP3、GP4、GP5 3 GP0、GP1、GP2 2 &H02
設定3 2 GP3、GP4 4 GP0、GP1、GP2、GP5 3 &H03

 

PLC(PIC12F683) 入出力名称

入力名称 入力ピン 出力名称 出力ピン
IN1 GP3 OUT1 GP0
IN2 GP4 OUT2 GP1
IN3 GP5 OUT3 GP2
IN4 GP2 OUT4 GP5

 

PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683) 制御コマンド

制御命令

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 OUT4 ON **** 11 B **** ****
OUT OUT4 OFF **** 12 C **** ****
OUT OUT ALL ON **** 13 D **** ****
OUT OUT ALL OFF **** 14 E **** ****
IN IN1 ON **** 15 F **** ****
IN IN1 OFF **** 16 10 **** ****
IN IN2 ON **** 17 11 **** ****
IN IN2 OFF **** 18 12 **** ****
IN IN3 ON **** 19 13 **** ****
IN IN3 OFF **** 20 14 **** ****
IN IN4 ON **** 21 15 **** ****
IN IN4 OFF **** 22 16 **** ****
INState IN1 ON **** 23 17 **** ****
INState IN1 OFF **** 24 18 **** ****
INState IN2 ON **** 25 19 **** ****
INState IN2 OFF **** 26 1A **** ****
INState IN3 ON **** 27 1B **** ****
INState IN3 OFF **** 28 1C **** ****
INState IN4 ON **** 29 1D **** ****
INState IN4 OFF **** 30 1E **** ****
IF INWaite IN1 ON ジャンプステップ 31 1F ジャンプ先ステップ ****
IF INWaite IN1 OFF ジャンプ ステップ 32 20 ジャンプ先ステップ ****
IF INWaite IN2 ON ジャンプ ステップ 33 21 ジャンプ先ステップ ****
IF INWaite IN2 OFF ジャンプ ステップ 34 22 ジャンプ先ステップ ****
IF INWaite IN3 ON ジャンプ ステップ 35 23 ジャンプ先ステップ ****
IF INWaite IN3 OFF ジャンプ ステップ 36 24 ジャンプ先ステップ ****
IF INWaite IN4 ON ジャンプ ステップ 37 25 ジャンプ先ステップ ****
IF INWaite IN4 OFF ジャンプ ステップ 38 26 ジャンプ先ステップ ****
IF INState IN1 ON ジャンプ ステップ 39 27 ジャンプ先ステップ ****
IF INState IN1 OFF ジャンプ ステップ 40 28 ジャンプ先ステップ ****
IF INState IN2 ON ジャンプ ステップ 41 29 ジャンプ先ステップ ****
IF INState IN2 OFF ジャンプ ステップ 42 2A ジャンプ先ステップ ****
IF INState IN3 ON ジャンプ ステップ 43 2B ジャンプ先ステップ ****
IF INState IN3 OFF ジャンプ ステップ 44 2C ジャンプ先ステップ ****
IF INState IN4 ON ジャンプ ステップ 45 2D ジャンプ先ステップ ****
IF INState IN4 OFF ジャンプ ステップ 46 2E ジャンプ先ステップ ****
LOOP 回数 ***

繰返 し最終ステップ

47 2F 繰返し最終ステップ 繰返し回数

INTRUPT ON

IN1 ON ジャンプ ステップ 48 30 ジャンプ先ステップ ****
INTRUPT ON IN1 OFF ジャンプ ステップ 49 31 ジャンプ先ステップ ****
INTRUPT ON IN2 ON ジャンプ ステップ 50 32 ジャンプ先ステップ ****
INTRUPT ON IN2 OFF ジャンプ ステップ 51 33 ジャンプ先ステップ ****
INTRUPT ON IN3 ON ジャンプ ステップ 52 34 ジャンプ先ステップ ****
INTRUPT ON IN3 OFF ジャンプ ステップ 53 35 ジャンプ先ステップ ****
INTRUPT ON IN4 ON ジャンプ ステップ 54 36 ジャンプ先ステップ ****
INTRUPT ON IN4 OFF ジャンプ ステップ 55 37 ジャンプ先ステップ ****
INTRUPT OFF IN1 ON **** 56 38 **** ****
INTRUPT OFF IN1 OFF **** 57 39 **** ****
INTRUPT OFF IN2 ON **** 58 3A **** ****
INTRUPT OFF IN2 OFF **** 59 3B **** ****
INTRUPT OFF IN3 ON **** 60 3C **** ****
INTRUPT OFF IN3 OFF **** 61 3D **** ****
INTRUPT OFF IN4 ON **** 62 3E **** ****
INTRUPT OFF IN4 OFF **** 63 3F **** ****
RETURN IN1 ON **** 64 40 **** ****
RETURN IN1 OFF **** 65 41 **** ****
RETURN IN2 ON **** 66 42 **** ****
RETURN IN2 OFF **** 67 43 **** ****

 

IO入出力設定について(上記のIOピン割付表参照)

設定1は入力4,出力2、設定2は入出力各3、設定3は入力2,出力4なります。どの設定を使用するかは、パソコンのPICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683)の専用プログラム設定書込ツールで、制御プログラム作成時に選択して、制御プログラムをPICのEEPROMに書込み時に、EEPROMの0h番地にこの設定内容を書込みます。

PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683)が制御モードで立ち上がった時に、EEPROMの0h番地の設定内容を読込んで、&H01なら設定1、&H02なら設定2、&H03なら設定3として処理します。

 

命令のついて

PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683)が制御出来る制御命令は、上記の表の命令だけです。

パソコンのPICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683)の専用プログラム設定書込ツールで、上記の制御命令で制御プログラムを作成して、PIC命令に変換し、RS232CでPICのEEPROMに書込み、制御モード時は、書込んだEEPROMの0h番地からFFh番地までの制御プログラムデータを順次読込んで実行します。

PIC12F683のEEPROMのメモリ容量は、256バイト(0h番地〜FFh番地)ですが、0h番地は入出力設定用に使用しますので、255バイト(1h番地〜FFh番地)で、ステップbヘ、ステップ1からステップ255までとなります。

 

END、OUT、IN、INState、INTRUPT OFF、RETURN命令は、1バイト命令なので1ステップ使用します。GOTO、TIMER1、IF INWaite、IF INState、INTRUPT ON令は、命令で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バイト命令のみを使用した時は、255ステップまで使用出来ますが、2バイト命令を1個使用した時は、1ステップ減少します。

次の命令は、処理を行っている命令が1バイト命令の時は、EEPROMの次の番地にある命令を読込み、2バイト命令の時は2つ後の番地にある命令を読込み、3バイト命令の時は、3つ後の番地の命令を読込み実行します。

 

PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683)  RS232C通信制御命令

制御名称(パソコン⇒PIC)

制御コマンド

応答(PIC⇒パソコン)

接続確認

O

O

PIC EEPROMデータ書込

W

(256バイトのEEPROMデータ書込後)256バイトのEEPROMデータ送信

PIC EEPROMデータ読込

R

256バイトのEEPROMデータ送信

PIC 設定モード解除

E

(PICを設定モードから制御モードに切替えます)

 

RS232Cの制御コマンドは、上記です。

設定モードでパソコンより、"O"コマンドが送信されると"O"をパソコンへ送信して、接続を確認します。"W"コマンドが送信されると、PICは書込みモードとなり、パソコンよりデータが送信されるのを待ち、データが送信されるとEEPROMの0番地から順にデータを255番地まで書込み、その後EEPROMの0番地から順位に255番地までデータを読取り、データを順次パソコンに送信します。"R"コマンドが送信されると、EEPROMの0番地から順位に255番地までデータを読取り、データを順次パソコンに送信します。"E"コマンドが送信されると、設定モードから抜け出して、ソフト的には制御モードとなり、制御プログラムを実行します。

 

以上の仕様で、PICのソフトをmikroBasicで作成しました。

PIC12F683は、USART(通信機能)が無いので、ソフトウエアで RS232C通信を行います。PIC12F683 の内蔵クロックオシレータは最大値の8MHzを使用しました。RS232Cの通信速度は9600bps固定です。PIC12F675の時は、4MHzの内蔵クロックオシレータであったので、9600bps時の誤差が大きいでしたが(4800bpsの時は小さいが)、今回は8MHzの為、誤差も小さくなりました。

電源投入時の設定モードと制御モードの切替は、USART(通信機能)が有るPIC16F648Aの時と同じように、時間と通信コマンドで、ソフト的に切替える事が出来ないのでソフトウエア UARTを使用したので、同時にはタイマ割込みが使用出来ないので)、スイッチSW1で設定、制御を切替えてIOピンのGP1をON、OFFさせてハードにて切替える事にしました。電源ON時は、GP1を入力設定にして、GP1がON(HI)の時は、設定モードとして、通信処理を行うことが出来、書込み、読込が可能です。電源ON時に、GP1が0FF(LO)の時は、制御モードとして、GP1を出力に変更して、制御を開始します。

RS232C通信の通信ポート用GP0、GP3は、制御時は不要ですので、制御時は入出力ポートとして使用して、入出力数を増やしました。但しスイッチSW2で切替える必要が有ります。

TIMER命令は、割込みはソフトウェア UARTとは、同時には使用出来ないので制御モードになったら、タイマー割り込みを設定するようにしました。タイマー設定は、最小単位は10msです。

入力ポートの変化を常時監視して、変化した時に割り込んで指定したステップbヨジャンプして処理が出来るように入力割り込み機能を付けました。入力IN1とIN2は、入力割込み後、RETURN命令を使用することにより、ジャンプする前のステップbノ戻ることが出来ますが、入力IN3とIN4はジャンプするのみで元の処理には戻れません。但し、入力IN1、IN2は元のステップbノ戻れても、戻ったステップbェLOOP内の時でも、繰返し動作は出来なくその後は1回のみの動作となります。プログラム途中で、入力割り込み有効、無効を設定出来る様にしました。Basicでプログラムを作っているのでメモリの使用量が多く、これだけの機能で、2Kワードを超えてしまいましたが、何とかプログラムを組みなおして2Kワード以内に収めました。(割り込み動作終了後、全ての入力で元のプログラムへ戻ったり、LOOP命令も引き続き出来る様にしたいのですが、メモリが足らなく、2Kワードを超えてしまい出来ませんでした。)

入力ポートの変化割込みは、入力命令以外の時は、タイマー割り込みが有った時に、入力ポートの変化を確認して、変化が有れば指定したステップbヨジャンプする様にしました。10ms毎に監視します。

 

PICには、PICライターで、PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683) HEXファイルを書き込みます。

PICライターで今まで使用していた書き込みソフト”IC-Prog”が、PIC12F683には対応していませんでしたが、フリーの書き込みソフト”WinPic”を使用して書込む事が出来ました。

 

このページのTOPへ

 


 

◎PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683) プログラム設定書込ツール(Windowsパソコン用)

  PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683) プロブラム設定書込ツール (lzhで圧縮) 

 

Windowsパソコンで制御プログラムを編集して、制御プログラムを記号化して、PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683)のPICのEEPROMに書込む為に使用するパソコン用プログラム設定書込ツールです。

VB.NET 2003にて作成していますので、起動しない時は、Microsoftより.NET Framework Version 1.1 再頒布可能パッケージおよび.NET Framework Version 1.1 LanguagePackをダウンロードしてインストールして下さい。

シリアルポート制御モジュールは、アクティブセルさんのフリーソフト EasyComm.NETを使用させて頂きました。

 

 

 

このページのTOPへ

 


 

●プログラム設定書込ツール説明

 このプログラム設定書込ツール画面上で、命令を選択して簡易制御プログラムを作成します。作成した簡易制御プログラムはファイル保存ボタンでテキストファイルに保存されます。保存したテキストファイルをファイル読込ボタンで読込むことにより、再度使用及び編集が出来ます。

PIC書込ボタンで、PICミニミニ簡易プログラマルコントローラ(PLC)(PIC12F683)のPICのEEPROMに簡易制御プログラムデータを書込みます。又、PIC読込ボタンでPICよりEEPROMの簡易制御プログラムデータを読込みます。

 

制御プログラムを製作する時は、まずメニューの入出力設定で、PICミニミニ簡易プログラマルコントローラ(PLC)(PIC12F683)の入出力設定に対応した入出力の設定を行います。設定1、設定2、設定3のいずれかを選択します。選択すると簡易制御プログラム設定画面に、選択した設定が表示されます。

 

PICミニミニ簡易プログラマルコントローラ(PLC)(PIC12F683)に制御プログラムを書込む時は、電源をONする前に、PICミニミニ簡易プログラマルコントローラ(PLC)(PIC12F683)のスイッチSW1及びスイッチSW2を設定側にしてから、電源をONにして下さい。スイッチSW1が設定側の時は、設定モードとなりPICと通信接続が可能となります。スイッチSW1が設定側になっているかの確認は電源立ち上げ時のみ確認しているだけですので、電源立ち上げで設定モードになった後は、スイッチSW1を制御側に切替えてもOKです。設定モードでPIC書込み後、設定解除ボタンを押すと、ソフト的には制御状態となり、制御プログラムを実行します。スイッチSW1を制御側に切替え後、設定解除ボタンを押すとハード側もソフト側も制御モードとなります。制御モードになったらスイッチSW2を制御側に切替えてRS232Cの送受信用のGP0,GP3をOUT1,IN1用に切替えます。スイッチSW1を制御側にして、電源をONにすると制御モードで立ち上がり、直ちに制御プログラムを実行します。

[注意]設定モードでPIC書込み後、設定解除ボタンで制御モードにして、スイッチSW2を制御側に切替えても、IOが切替え時の状態を保持していますので、1度電源をOFFにしてから、電源をONにして制御プログラムを実行した方が確実です。

 

以下は、プログラム設定書込ツール画面のボタン操作及びプログラム命令の説明です。

 

 ・入出力設定

メニューの入出力設定で、PICミニミニ簡易プログラマルコントローラ(PLC)(PIC12F683)の入出力設定に対応した入出力の設定を行います。

設定1、設定2、設定3のいずれかを選択します。選択すると簡易制御プログラム設定画面に、選択した設定が表示されます。

 ・プログラムファイル

ファイル保存ボタン:簡易制御プログラムをファイルに保存します。  

ファイル読込ボタン:保存された簡易制御プログラムファイルを読込みます。

  ・ステップ

ボタン:ステップb20ステップ加算して、設定を表示します。

▼ボタン:ステップb20ステップ減算して、設定を表示します。

  ・編集

削除ボタン:指定したステップbフ設定内容を削除して、指定したステップbフ次のステップhネ降の設定内容を1ステップ前に変更します。

GOTO及びIF INWaiteIF INState、LOOP、INTRUPT ONのジャンプ先のステップbヘ、削除以降のステップbフ時は、自動的にスッテプb修正します。(1減算します。))

挿入ボタン:指定したステップbノ1行挿入して、指定したステップhネ降の設定内容を1ステップ後に変更します。

GOTO及びIF INWaiteIF INStateLOOP、INTRUPT ONのジャンプ先のステップ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を切替えて下さい。

       (制御モードでは、スイッチSW2も制御側に切替えて下さい。通信ポートがIN1,OUT1ポートとなります。)

簡易制御プログラム設定

 ステップ数:ステップ数は、ステップ1〜ステップ255までです。但し、使用する命令により、使用出来るステップ数は変化します。

 命令説明

END(終了命令):プログラムを終了します。

END1つの命令のみです。

最初の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ヨ進むのを1000ms1秒)遅延します。(1000ms1秒)後に、次のステップbヨ進みます。)  

TIMER2(タイマー命令):遅延タイマーで、設定した時間の間、次のステップbヨ進むのを遅延します。(×10msタイマー)

命令  時間(×10ms) の2つの命令でセットとなります。2バイトですので、入力出来る数値は、0〜65535までです。(時間0〜655350ms(655.35秒)

例、 TIMER1  1000 で、次のステップbヨ進むのを10000ms10秒)遅延します。(10000ms10秒)後に、次のステップbヨ進みます。)  

OUT(出力命令):指定した出力ポートをON又はOFFに制御して、次のステップbヨ進みます。(設定した 設定1〜3によりOUT数は変わります。)

OUT1OUT4までの4つの出力ポートの内、指定した1つの出力ポートを、ON又はOFFして、次のステップbヨ進みます。

又、OUT ALLは、4つの出力ポートを全て、ON又はOFFして、次のステップbヨ進みます。

命令   OUT/IN   ON/OFF の3つの命令でセットとなります。

例、 OUT  OUT1  ON で、OUT1ポートをONして、次のステップbヨ進みます。

IN(入力命令):指定した入力ポートが、ON又はOFFに変化するのを待ち、次のステップbヨ進みます。(設定した 設定1〜3によりIN数は変わります。)

IN1〜IN4までの4つの入力ポートの内、指定した1つの入力ポートが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ヨ進みます。

入力ポートが変化するのを待ち、指定した入力ポートが、指定した状態にONOFF変化した時は、指定したステップbヨジャンプして、ジャンプ先のステップb謔閭vログラムを進めます。指定した状態変化での変化でない時は次のステップbヨ進みます。

命令   OUT/IN   ON/OFF  ステップa@ の4つの命令でセットとなります。

例、 IF INWaite  IN1  OFF  80  で、入力ポートが変化するまで待ち、入力IN1ポートがONからOFFになれば、ステップ80にジャンプして、ステップ80からプログラムを進めます。又、指定した入力ポートが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ポートがONのの状態でない時は、次のステップbヨ進みます。(入力待ちは有りません。)

 LOOP(繰返し命令):LOOPの次のステップbゥら、指定したステップbワで、指定した回数、繰返し動作します。

命令   回数  ステップa@  の3つの命令でセットとなります。

例、 LOOP  5  20  で、LOOPの次のステップbゥらステップ20までの動作を5回繰返します。

INTRUPT ON(入力割込み命令ON):指定した入力ポートの入力状態を監視して、入力に変化が有った時に、指定したステップbヨジャンプします。

この命令が設定されたステップhネ降、この割込み命令は有効となります。但し、INTRUPT OFF(入力割込み命令OFF)が設定されるとそれ以降のステップbナは、この命令で指定した割込み命令は無効となります。

   指定した入力ポートがOFFからONに変化する場合と、ONからOFFに変化する場合と別々に設定します。

命令   OUT/IN   ON/OFF  ステップa@ の4つの命令でセットとなります。

例、INTRUPT ON  IN1  ON  50 で、入力IN1ポートがOFFからONに変化した時は、プログラム途中でもステップ50にジャンプします。

入力割込プログラム動作終了後、入力IN1、IN2はRETURN命令で、元のステップbノ戻ることが出来ますが、IN3、IN4はジャンプするのみで、戻ることは出来ません。入力割込プログラム動作終了後は、入力IN1、IN2はRETURN命令又はGOTO命令で、IN3、IN4はGOTO命令でジャンプ先を指定します。

入力ピン割込み有りにした時は、同じ入力ピンのIN、INState、IF INWaiteの命令は、使用出来ません。

INTRUPT OFF(入力割込み命令OFF):この命令により、指定した入力ポートの指定した入力変化割込みを無効とします。

この命令が設定されるとそれ以降のステップbナは、この命令で指定した入力ポートの指定した入力変化割込み命令は無効となります。

命令   OUT/IN   ON/OFF の3つの命令でセットとなります。  

例、INTRUPT OFF  IN1  ON で、入力IN1ポートがOFFからONの変化割込みを無効にします。

RETURN(入力割込み戻り先命令):入力割込み処理後、この命令により、入力割込み前のステップbノ戻り、割込みで中断された処理を行います。

但し入力IN1、IN2しか設定が出来ません。入力割込み前のステップbェ、LOOP内の時でも、割込みで戻った時は、繰返し動作は出来ません。

命令   OUT/IN   ON/OFF の3つの命令でセットとなります。  

例、RETURN   IN1  ON で、入力IN1ポートがOFFからONに変化した時の割込み処理後、このRETURN命令で、ジャンプする前のステップbノ戻ります。

 

 

このページのTOPへ

 


 

◎ PICミニミニ簡易プログラマブルコントローラ(PLC)(PIC12F683) サンプルプログラム

PICミニミニ簡易プログラマブルコントローラ(PLC)  (PIC12F683) 入出力ハードで、動作を確認しました。

 

下記が、動作を確認した時に使用したテストプログラムサンプルです。

 

■サンプル1.・・・・・・設定2用OUTテストプログラム

    OUTテストプログラム

 

OUT1からOUT3まで1秒間隔で順位点灯、消灯を2回繰り返した後、OUT1からOUT3まで0.5秒間隔で順位点灯、消灯を4回繰り返し、次にOUT1からOUT3まで0.2秒間隔で順位点灯、消灯を8回繰り返した後、初期のOUT1に戻り、この動作を繰り返します。

 

 

■サンプル2.・・・・・・設定2用INテストプログラム

  INテストプログラム

 

OUT3を点灯して、入力IN1がONになるまで待ちます。IN1がONになったら、OUT1からOUT3まで1秒間隔で順位点灯、消灯を2回繰り返しす。次に入力IN2がONになるまで待ちます。IN2がONになったら、OUT1からOUT3まで0.5秒間隔で順位点灯、消灯を4回繰り返します。次に入力IN3がONになるまで待ちます。IN3がONになったら、OUT1からOUT3まで0.2秒間隔で順位点灯、消灯を8回繰り返し後、初期の入力IN1がONになるのを待つ動作に戻り、以上の動作を繰り返します。(IN命令は、指定したINが指定した状態に変化しないと、次の動作を行わない待ちの命令です。)

 

 

■サンプル3.・・・・・・設定2用INStateテストプログラム

INStateテストプログラム

 

OUT3を点灯して、入力IN1の入力状態を確認します。ONの状態の時は、次の動作に進みます。ONでない時はONになるまで待ちます。IN1がONになったら、OUT3を消灯して、1秒間隔で、OUT1、OUT2、OUT3の順で、順次点灯、消灯動作の繰り返し動作を2回行い、入力IN2の入力状態を確認します。IN2がONの時は、次の動作へ進みます。ONでない時はONになるまで待ちます。IN2がONになったら、0.5秒間隔でOUT1、OUT2、OUT3の順で、順次点灯、消灯動作の繰り返し動作を4回行います。次に入力IN3の入力状態を確認します。IN3がONの時は、次の動作へ進みます。ONでない時はONになるまで待ちます。IN3がONになったら、0.2秒間隔でOUT1、OUT2、OUT3の順で、順次点灯、消灯動作の繰り返し動作を8回行います。その後初期の動作のステップ2の入力IN1の入力状態を確認する動作に戻り、以上の動作を繰り返します。(入力IN1,2,3が全てONになっていれば連続動作となります。

INState命令は、指定したINが指定した状態になっていれば、直ちに次の動作を行う命令です。)

 

 

■サンプル4.・・・・・・設定2用IF INWaiteテストプログラム

  IF INWaiteテストプログラム

 

全OUT(OUT1,2,3)を1秒間点灯します。次に入力IN1が変化するのを待ちます。入力IN1がONの時はステップ25にジャンプして、0.5秒間隔でOUT1を点灯、消灯を5回繰り返し後、ステップ10にジャンプしてIN2の入力待ちとなります。入力IN1がONでない時(IN1がOFFに又はIN2,3が変化した時)は、全OUTを1秒間隔で点灯、消灯動作の繰返しを3回行い、IN2の入力待ちとなります。IN2がONの時はステップ32にジャンプして、0.5秒間隔でOUT2を点灯、消灯を5回繰り返し後、ステップ16にジャンプしてIN3の入力待ちとなります。入力IN2がONでない時(IN2がOFFに又はIN1,3が変化した時)は、全OUTを0.5秒間隔で点灯、消灯動作の繰返しを5回行い、IN3の入力待ちとなります。IN3がONの時はステップ39にジャンプして、0.5秒間隔でOUT3を点灯、消灯を5回繰り返し後、ステップ1にジャンプして初期の動作に戻り、全OUT(OUT1,2,3)を1秒間点灯した後、IN1の入力待ちとなります。入力IN3がONでない時(IN3がOFFに又はIN1,2が変化した時)は、全OUTを0.1秒間隔で点灯、消灯動作の繰返しを10回行い、ステップ4に戻りIN1の入力待ちとなり、以上の動作を繰り返します。(IF INWaite命令は、入力が変化するまで待つ待ちの命令で、指定したINが指定した状態に変化した時は、指定したステップへジャンプして、指定したINが指定しない状態に変化した時又は他のINが変化した時には、次のステップに進みます。)

 

 

■サンプル5.・・・・・・設定2用IF INStateテストプログラム

  IF INStateテストプログラム

 

全OUT(OUT1,2,3)を1秒間点灯します。次に入力IN1の状態を確認してONならステップ25にジャンプして0.5秒間隔でOUT1を点灯、消灯を5回繰り返し後、ステップ10にジャンプして戻ります。入力IN1がONの状態でない時は、全OUTを1秒間隔で点灯、消灯動作の繰返しを3回行い、次のステップ10に進みます。次に入力IN2の状態を確認してONならステップ32にジャンプして0.5秒間隔でOUT2を点灯、消灯を5回繰り返し後、ステップ16にジャンプして戻ります。入力IN2がONの状態でない時は、全OUTを0.5秒間隔で点灯、消灯動作の繰返しを5回行い、次のステップ16に進みます。次に入力IN3の状態を確認してONならステップ39にジャンプして0.5秒間隔でOUT3を点灯、消灯を5回繰り返し後、ステップ1にジャンプして初期の動作に戻ります。入力IN3がONの状態でない時は、全OUTを0.1秒間隔で点灯、消灯動作の繰返しを10回行い、ステップ4にジャンプして入力IN1の状態を確認して、以上の動作を繰り返します。(IF INState命令は、入力の状態を確認する瞬時動作命令で、指定した入力が指定した状態で有れば、指定したステップにジャンプして、その他の状態なら次のステップに進みます。)

 

 

■サンプル6.・・・・・・設定2用INTRUPTテストプログラム

  INTRUPTテストプログラム

 

 

このテストプログラムは、入力IN1は入力割込みON設定後は割込み可能で、入力IN2は入力割込みをON又はOFFに設定する事により、割込み可能又は不可になる事を確認するテストプログラムです。

電源ON後、出力OUT1からOUT3までの3出力を同時に1秒間隔で点灯、消灯を5回繰り返し後、入力IN1とIN2の入力割込みをONとして入力割込みが出来る様に設定します。以降は、入力割込みが可能となります。(入力IN1は、これ以降は、いつでも入力割込みは可能ですが、IN2は割り込みOFFの設定状態時は割込みは不可で、割込みONの設定状態になった時は割込み可能となります。)出力OUT1とOUT2を同時に0.5秒間隔で点灯、消灯を入力IN1又はIN2が変化するまで(入力割込みが入るまで)繰り返します。

入力IN1がONに変化した時は、ステップ19にジャンプして、全OUTを消灯して、OUT1を0.5秒間隔で点灯、消灯を5回繰り返し後、ステップ1にジャンプして、初期動作に入ります。

入力IN1がOFFに変化した時は、ステップ29にジャンプして、全OUTを消灯して、OUT3を0.5秒間隔で点灯、消灯を5回繰り返し後、ステップ1にジャンプして、初期動作に入ります。

電源ON時の最初の初期動作時は入力割込みは出来ませんが、2回目以降の初期動作の時は、入力割込みは可能となります。(但しIN2は入力割込みの設定の状態により可能又は不可となります。)

入力IN2がONに変化した時は、ステップ37にジャンプして、全OUTを消灯して、OUT1からOUT3まで0.5秒間隔で順次点灯、消灯を3回繰り返し後、入力IN2のON変化割込みをOFFに設定して、割込みを不可とし、ステップ10にジャンプして、出力OUT1とOUT2を同時に0.5秒間隔で点灯、消灯を繰り返す動作に入ります。以後は、入力IN1が変化して初期動作に戻り、全出力点灯、消灯5回繰返し後、入力IN2のONが入力割込みONになるまで、IN2のON変化割込みは不可となります。

入力IN2がOFFに変化した時は、ステップ52にジャンプして、全OUTを消灯して、OUT3からOUT1まで0.5秒間隔で順次点灯、消灯を3回繰り返し後、入力IN2のOFF変化割込みをOFFに設定して、割込みを不可とし、ステップ10にジャンプして、出力OUT1とOUT2を同時に0.5秒間隔で点灯、消灯を繰り返す動作に入ります。以後は、入力IN1が変化して初期動作に戻り、全出力点灯、消灯5回繰返し後、入力IN2のOFFが入力割込みONになるまで、IN2のOFF変化割込みは不可となります。

 

 

■サンプル7.・・・・・・設定2用INTRUPT、RETURNテストプログラム

  INTRUPT、RETURNテストプログラム

 

このテストプログラムは、入力IN1、IN2の入力割り込みプログラム動作処理後、割込み前のプログラムに戻り、動作するかを確認するテストプログラムです。

電源ON後、入力IN1とIN2の入力割込みをONとして入力割込みが出来る様に設定します。出力OUT1からOUT3までの全出力をOFFにします。IF INstate IN3 ONで入力IN3の入力状態を確認して、OFFの時はOUT1からOUT3まで順次点灯、消灯を1秒間隔で3回繰り返し後、0.5秒間隔で5回繰返し、その後0.1秒間隔で8回繰り返し、ステップ4のIF INstate IN3 ONに戻ります。IN3がONの時は、ステップ47にジャンプしてOUT2を点灯、消灯を0.5秒間隔で5回繰り返し後ステップ4に戻り、動作を繰り返します。プログラム途中で入力IN1がOFFからONに変化割込みが有った時は、ステップ36にジャンプしてOUT3を2秒点灯後、入力割込み前のプログラム途中のステップbノ戻り、中断したプログラムを実行します。入力IN2がOFFからONに変化割込みが有った時は、ステップ41にジャンプしてOUT1を2秒点灯後、入力割込み前のプログラム途中のステップbノ戻り、中断したプログラムを実行します。但し、入力割込み前のステップbェ、LOOP内の時でも、割込みで戻った時は、繰返し動作は出来ません。

 

 

■サンプル8.・・・・・・設定3用INTRUPT点滅間隔変更テストプログラム

点滅間隔変更テストプログラム

 

 

このテストプログラムは、入力IN1をONする度に工程が1つ進み出力の点滅間隔が短くなり、入力IN2をONする度に工程が1つ戻り出力の点滅間隔が遅くなるテストプログラムです。入力IN1、IN2がOFFに変化してもOFFの割込みの初期値はOFFの為、変化は有りません。(動作はしません。)

電源ON後、まず工程1となり、入力IN1がONに変化した時のジャンプ先ステップ16を設定します。次に入力割込みが有るまでOUT1からOUT4まで1秒間隔で順次点灯、消灯を繰り返します。入力IN1がONに変化した時、工程1よりステップ16にジャンプして、工程を1つ進めて、工程2となります。工程2の時に、入力IN1、IN2がONに変化した時のジャンプ先ステップb再設定します。(再設定しないと前のジャンプ先のままなので、書き換える必要が有ります。)次に入力割込みが有るまでOUT1からOUT4まで0.5秒間隔で順次点灯、消灯を繰返します。入力IN1がONに変化した時は、指定ステップbノジャンプして工程を1つ進めて、工程3となります。入力IN2がONに変化した時は、指定ステップbノジャンプして工程を1つ戻り工程1となります。入力IN1をONに変化する事を繰り返すことにより、工程5まで進める事が出来ます。工程5になったら入力IN1のON割込みをOFFにして、IN1が割り込み出来ないように設定します。工程5では、入力IN2だけが割り込み出来るようにします。

同様に、工程1の時、入力IN2が割り込み出来ないように入力IN2のON割込みをOFFに設定します。入力IN1は工程1から工程4までの時割り込みが出来、入力IN2は工程2から工程5までの時割込みが出来ます。(工程1⇔工程5間の移動となります。)

 

ループプログラムとするには、下記の様にプログラムを変更して下さい。

工程1で入力IN2のON変化時のジャンプ先を工程5のステップbノ指定して、工程5で入力IN1のON変化時のジャンプ先を工程1のステップbノ指定するとループでの移動となります。

 

 

■サンプル9.・・・・・・設定1用簡易シーケンステストプログラム

  クランプテストプログラム

 

入力

 IN1 (クランプ押ボタン)

 IN2 (リセット押ボタン)

 IN3 (後退端オートスイッチL2)

 IN4 (前進端オートスイッチL1)

出力

 OUT1 (電磁弁SOL1)

 OUT2 (異常信号)

 

 

機械制御等で多く使用されているエアシリンダーの制御をこのPLCを使用して制御した場合の簡単な例を作ってみました。

 

製品をエアシリンダーで押して製品を動かない様に固定するクランプ治具を想定しました。

動作としては、クランプボタンを押すと、電磁弁がONとなり、エアシリンダーの前進方向にエアが供給されて、エアシリンダーのピストンロッドが前進して製品を押し固定します。リセットボタンを押すと、電磁弁がOFFとなり、エアシリンダーの後退方向にエアが供給されて、エアシリンダーのピストンロッドが後退して製品から離れ、固定を解除します。エアシリンダーの前進端、後退端に有るオートスイッチのON、OFFを確認して、動作中に異常が有る時は、異常出力を外部に出力します。リセットボタンを押すと異常出力は解除(リセット)されます。

 

電源ON後、リセット押ボタンが何時でも有効となる様に、入力IN2のOFFからONの変化割込みをONと設定します。入力IN1で、クランプ押ボタンが押されるまで入力待ちとなります。クランプ押ボタンが押され入力IN1がONとなったら、100msタイマ待ちを行い、IF INstateで100ms後のIN1の入力状態を確認します。100ms間隔でIN1が2回ONとなっていれば、クランプ押ボタンがONしていると判断します。これはノイズでの誤動作、チャタリング防止も兼ねています。この時IN1がON以外の時は、クランプ押ボタンはONしてないと判断して、ステップ2に戻り、又、入力待ちとなります。IN1がONの時はステップ6にジャンプして、後退端オートスイッチL2(入力IN3)がONの時は、出力OUT1をONして電磁弁がONされエアシリンダーのピストンロッドが前進して製品をクランプして固定します。後退端オートスイッチL2(入力IN3)がOFFの時は、エアシリンダーが後退端にないので、ステップ10にジャンプして、OUT2をONして異常信号を出力します。出力OUT1をONしてから1秒後に前進端オートスイッチL1(入力IN4)がONになっていれば、正常に動作したと判断してステップ11にジャンプしてクランプを続けます。(タイマ待ちを繰り返します。)前進端オートスイッチL1(入力IN4)がONになっていない時は、クランプがされていないと判断して、OUT2をONにして異常出力し、タイマ待ちを繰り返します。リセットボタンを押すと、IN2がONとなり、入力割込みでOUT1とOUT2をOFFにして、電磁弁をOFFにして、エアシリンダーをリセット(後退)し、異常出力もOFFにしてリセットし、ステップ2にジャンプして、クランプ押ボタンが押されるのを待ちます。

 

入出力点数が少ないので、上記のような簡単な制御しか出来ません。

 

出力のトランジスタアレイの電気容量は50V、500mAですので、電磁弁等の容量の大きなものを駆動する時は、容量の大きなタイプにするか、リレーやパワートランジスタなどを入れて間接的に駆動するようにして、容量に注意して下さい。

 

 

このページのTOPへ

 


 


☆まとめ

先回製作したPIC12F675では、プログラムメモリーが1Kワードしか無かったので、入力1、出力3の入出力計4点の簡易PLCしか出来ませんでしたが、今回のPIC12F683は同じ8ピンでもプログラムメモリーが2Kワード有るので、入出力計6点の簡易PLCにする事が出来ました。又、制御プログラムを格納するEEPROMのメモリーも、PIC12F675の128バイトより2倍大きい256バイト有るので、多少長いプログラムを組む事が出来ます。

入出力は計6点ですが、入力2,出力4、入出力各3、入力4,出力2の3種類の設定を使用用途により選択することが出来る様にしたので、無駄な入出力がなくなり、使用用途が多少広がるのではと思います。

 

PICライターにPICを付け替えてプログラムを変更するのは結構面倒なので、PICライターがなくても、パソコンから簡単に制御プログラムを書き換えが可能なので、手軽に使用出来るのではないかと思います。

PICのプログラムを作る事は出来なくても、入出力を制御するプログラムは簡単に記述出来ると思うので、誰でも使用出来るのではないかと思います。プログラムソースのPICへの書き込みと、ハードの製作をどうするかが、問題ですが。

 

IOピン数がもっと多いPICを使用すれば、IO点数の大きいPLCが出来ますが、使用しているPICの開発ソフトのmikroBasicはフリーの物を使用していて、フリーの使用制限は2Kワードですので、これ以上のメモリ容量のPICを使用しても、もうこれ以上の仕様の物は、私の方では作ることが出来ません。

 

HOMEへ    このページのTOPへ

 


 

Counter