ふたつぼし inside

制作・活動内容、機材の使い方、作り方などなど

ユーザ用ツール

サイト用ツール


howto:open_plc:digitally_analogout

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
howto:open_plc:digitally_analogout [2022/09/20 13:37]
Staff_Ujiie [ON/OFF動作の設定1]
howto:open_plc:digitally_analogout [2022/09/20 14:19] (現在)
Staff_Ujiie [今後の対応]
行 14: 行 14:
   * {{ :howto:open_plc:sc2022-09-19_16.42.33_w600.png?200&direct}}なんとか出来ないかと調べてみると、OpenPLCフォーラムの投稿でプロックの機能自体を有効/無効にする[[https://openplc.discussion.community/post/type-of-analog-outputs-8565217?highlight=analog&pid=1296265215|イネーブル機能(Execution Control)を使うという案]]がありました。\\ これだとON入力があるまでは出力をOFF状態にしておくことができます。出力レベルを100%に設定しておいてイネーブル入力をON/OFFすれば、デジタル出力と同等、かつ出力レベルも自由に設定出来るはずです。   * {{ :howto:open_plc:sc2022-09-19_16.42.33_w600.png?200&direct}}なんとか出来ないかと調べてみると、OpenPLCフォーラムの投稿でプロックの機能自体を有効/無効にする[[https://openplc.discussion.community/post/type-of-analog-outputs-8565217?highlight=analog&pid=1296265215|イネーブル機能(Execution Control)を使うという案]]がありました。\\ これだとON入力があるまでは出力をOFF状態にしておくことができます。出力レベルを100%に設定しておいてイネーブル入力をON/OFFすれば、デジタル出力と同等、かつ出力レベルも自由に設定出来るはずです。
  
-  * と思ってそのようにプログラムを直して、シミュレーションしデバッグ画面でチェックしてみると、エディター内のデバッグ用の2つの画面で結果が異なって出ています。イネーブルONで出力もONになるのですが、その後イネーブルOFFになると、1つの画面ではMOVEの出力は0になっていますがもう一方の画面ではアナログ出力が65535のまま。どっちが正しいのかわかりません。\\ \\ <fs small>(MOVEにイネーブル制御を追加)</fs>\\ {{:howto:open_plc:sc2022-09-02_23.03.29r2.png?600&direct}}\\ \\ <fs small>(MOVE/**EN:ON**(緑線)で、**LT_AB**(LED用アナログ出力)**:65535(点灯)**)</fs>{{:howto:open_plc:sc2022-09-02_23.04.04r.png?600&direct}}\\ \\ <fs small>(MOVE/**EN:OFF**(黒線)になっても、**LT_AB**(LED用アナログ出力)**:65535(点灯)**のまま。但しMOVE/**OUTは0**(紫))</fs>{{:howto:open_plc:sc2022-09-02_23.04.24r.png?600&direct}}+  * と思ってそのようにプログラムを直して、シミュレーションしデバッグ画面でチェックしてみると、エディター内のデバッグ用の2つの画面で結果が異なって出ています。イネーブルONで出力もONになるのですが、その後イネーブルOFFになると、1つの画面ではMOVEの出力は0になっていますがもう一方の画面ではアナログ出力が65535のまま。どっちが正しいのかわかりません。\\ \\ <fs small>(MOVEにイネーブル制御(**EN**/**ENO**)を追加)</fs>\\ {{:howto:open_plc:sc2022-09-02_23.03.29r2.png?600&direct}}\\ \\ <fs small>(MOVE/**ENON**(緑線)で、**LT_AB**(LED用アナログ出力)**65535**(点灯))</fs>{{:howto:open_plc:sc2022-09-02_23.04.04r.png?600&direct}}\\ \\ <fs small>(MOVE/**ENOFF**(黒線)になっても、**LT_ABは65535**(点灯)のまま。但しMOVE/**OUTは0**(紫))</fs>\\ {{:howto:open_plc:sc2022-09-02_23.04.24r.png?600&direct}}
  
   * 一見プログラムのバグにも思えるこの辺の動作については、OpenPLCフォーラムの[[https://openplc.discussion.community/post/unipi-ladder-problem-8515424?highlight=execution%20control&pid=1304581537|ここの投稿]]で考察されています。\\ アナログ出力に数値を送る機能ブロックがイネーブル機能で停止したときに、アナログ出力にOFF相当の0を上書きするかどうかが、PLCソフトウェア(OpenPLCとCODESYS)によって異なっているという課題提起です。OpenPLCは0の上書き派です。PLCの国際基準(IEC61131-3)の解釈の仕方から生まれた動作の違いとのことですが、機能ブロックが停止の際に0を上書きする仕様は間違った解釈という結論になりました。\\ そうするとイネーブル機能を使うこのやり方では、アナログ出力を0にできないことになります。その後のバージョンアップを経て、現行のOpenPLCは0を上書きしない仕様になっています。   * 一見プログラムのバグにも思えるこの辺の動作については、OpenPLCフォーラムの[[https://openplc.discussion.community/post/unipi-ladder-problem-8515424?highlight=execution%20control&pid=1304581537|ここの投稿]]で考察されています。\\ アナログ出力に数値を送る機能ブロックがイネーブル機能で停止したときに、アナログ出力にOFF相当の0を上書きするかどうかが、PLCソフトウェア(OpenPLCとCODESYS)によって異なっているという課題提起です。OpenPLCは0の上書き派です。PLCの国際基準(IEC61131-3)の解釈の仕方から生まれた動作の違いとのことですが、機能ブロックが停止の際に0を上書きする仕様は間違った解釈という結論になりました。\\ そうするとイネーブル機能を使うこのやり方では、アナログ出力を0にできないことになります。その後のバージョンアップを経て、現行のOpenPLCは0を上書きしない仕様になっています。
  
-  * 上記のシミュレーションでも、機能ブロックの停止時にアナログ出力に0が指定されないので、停止前の値65535が保持されたままになっているということでしょう。+  * 上記のシミュレーションでも、機能ブロックの停止時にアナログ出力に0が上書きされないので、停止前の値65535が保持されたままになっているということでしょう。
  
   * 後で実機でもこのプログラムを流して試して見ましたが、LEDは点きっぱなしになり消灯しませんでした。   * 後で実機でもこのプログラムを流して試して見ましたが、LEDは点きっぱなしになり消灯しませんでした。
行 29: 行 29:
   * アナログ出力では、送られてきた数値に比例して出力を増減させます。数値が0のときが出力0で、OFFと同じことになります。   * アナログ出力では、送られてきた数値に比例して出力を増減させます。数値が0のときが出力0で、OFFと同じことになります。
  
-  * そのため、別のやり方として**SEL**(2値選択)という機能ブロックを使えばよいのではと思いつき、入力がOFFのときは0(0%)、ONのときは65535(100%)を選んでアナログ出力に送ってやる形にしてみたらうまくいきました。これだと機能ブロックはずっと動作し続けています。\\ こちらの方が処理としても自然であり、採用することにしました。\\ \\ <fs small>(SEL/G:ON(緑線)で、LT_AB(LED)は65535(点灯))</fs>\\ {{:howto:open_plc:sc2022-09-02_23.51.51r.png?direct&600|}}\\ \\ <fs small>(SEL/G:OFF(黒線)で、LT_AB(LED)は0(消灯))</fs>\\ {{:howto:open_plc:sc2022-09-02_23.52.09r.png?direct&600|}}\\ \\ <fs small>(OpenPLCのバージョンは1.3)</fs>\\ {{:howto:open_plc:sc2022-09-02_23.06.07r.png?direct&600|}}+  * そのため、別のやり方として**SEL**(2値選択)という機能ブロックを使えばよいのではと思いつき、入力がOFFのときは0(0%)、ONのときは65535(100%)を選んでアナログ出力に送ってやる形にしてみたらうまくいきました。これだと機能ブロックはずっと動作し続けています。\\ こちらの方が処理としても自然であり、採用することにしました。\\ \\ <fs small>(SEL/**GON**(緑線)で、**LT_AB**(LED用アナログ出力)**は65535**(点灯))</fs>\\ {{:howto:open_plc:sc2022-09-02_23.51.51r.png?direct&600|}}\\ \\ <fs small>(SEL/**GOFF**(黒線)で、**LT_ABは0**(消灯))</fs>\\ {{:howto:open_plc:sc2022-09-02_23.52.09r.png?direct&600|}}\\ \\ <fs small>使用したOpenPLCのバージョンは**1.3**)</fs>\\ {{:howto:open_plc:sc2022-09-02_23.06.07r.png?direct&600|}}
 \\  \\ 
-===== 今後の対応 =====+===== 結論と今後の対応 =====
  
-  * アナログ出力チャンネルでON/OFFの切り替えができるようになったので、後ONの際の数値をいろいろに変化させるやり方を検討します。+  * ON/OFF動作のラダープログラム中に__アナログ出力を入れてON/OFFさせたいとは、__**SEL機能ブロック**__でON/OFF数値を選択__するように設定すればできます。 
 + 
 +  * 機能ブロックの**イネーブル制御**を使うときは、出力先の動作に要注意。__機能を停止しからといってそ先のアナログ出力が0になるわけではありません。__ 
 + 
 +  * こ先は、アナログ出力に与える数値をいろいろに変化させるやり方を検討します。
 \\  \\ 
howto/open_plc/digitally_analogout.1663648636.txt.gz · 最終更新: 2022/09/20 13:37 by Staff_Ujiie