howto:open_plc:digitally_analogout
アナログ出力をデジタルに使う
展示物の電飾を始めたら、展示スペースのPLCに使っているUniPi1.1の出力チャンネル数が足りなくなってきたため、使っていないアナログ出力(PWM)をLEDのON/OFFに使おうとしたら、うまくいきません。デジタルとアナログの機能の認識の違いもあって、試行錯誤してやっとデジタル的にも使えるように設定できました。
経緯
アナログ出力の設定方法
- さて、OpenPLCでのPLCプログラムのアナログ出力の使い方ですが、検索して探してもあまり情報が見つからず、見つかったサンプルの使い方でラダー図に書き加えてみて、はたと困りました。
ON/OFF動作の設定1
なんとか出来ないかと調べてみると、OpenPLCフォーラムの投稿でプロックの機能自体を有効/無効にするイネーブル機能(Execution Control)を使うという案がありました。
これだとON入力があるまでは出力をOFF状態にしておくことができます。出力レベルを100%に設定しておいてイネーブル入力をON/OFFすれば、デジタル出力と同等、かつ出力レベルも自由に設定出来るはずです。
- と思ってそのようにプログラムを直して、シミュレーションしデバッグ画面でチェックしてみると、エディター内のデバッグ用の2つの画面で結果が異なって出ています。イネーブルONで出力もONになるのですが、その後イネーブルOFFになると、1つの画面ではMOVEの出力は0になっていますがもう一方の画面ではアナログ出力が65535のまま。どっちが正しいのかわかりません。
(MOVEにイネーブル制御(EN/ENO)を追加)

(MOVE/ENがON(緑線)で、LT_AB(LED用アナログ出力)は65535(点灯))
(MOVE/ENがOFF(黒線)になっても、LT_ABは65535(点灯)のまま。但しMOVE/OUTは0(紫))

- 一見プログラムのバグにも思えるこの辺の動作については、OpenPLCフォーラムのここの投稿で考察されています。
アナログ出力に数値を送る機能ブロックがイネーブル機能で停止したときに、アナログ出力にOFF相当の0を上書きするかどうかが、PLCソフトウェア(OpenPLCとCODESYS)によって異なっているという課題提起です。OpenPLCは0の上書き派です。PLCの国際基準(IEC61131-3)の解釈の仕方から生まれた動作の違いとのことですが、機能ブロックが停止の際に0を上書きする仕様は間違った解釈という結論になりました。
そうするとイネーブル機能を使うこのやり方では、アナログ出力を0にできないことになります。その後のバージョンアップを経て、現行のOpenPLCは0を上書きしない仕様になっています。
- 上記のシミュレーションでも、機能ブロックの停止時にアナログ出力に0が上書きされないので、停止前の値65535が保持されたままになっているということでしょう。
- 後で実機でもこのプログラムを流して試して見ましたが、LEDは点きっぱなしになり消灯しませんでした。
ON/OFF動作の設定2
- アナログ出力では、送られてきた数値に比例して出力を増減させます。数値が0のときが出力0で、OFFと同じことになります。
結論と今後の対応
- ON/OFF動作のラダープログラム中にアナログ出力を入れてON/OFFさせたいときは、SEL機能ブロックでON/OFF数値を選択するように設定すればできます。
- 機能ブロックのイネーブル制御を使うときは、出力先の動作に要注意。機能を停止したからといってその先のアナログ出力が0になるわけではありません。
- この先は、アナログ出力に与える数値をいろいろに変化させるやり方を検討します。
howto/open_plc/digitally_analogout.txt · 最終更新: by Staff_Ujiie




