この記事ではArduino OptaのSTATUSのLEDに入出力(I/O)を表示するためのラダーロジックコードを紹介します。この技法を使用すると、通常プログラマブルロジックコントローラ(PLC)に関連する故障のトラブルシューティングに必要な時間を短縮でき、センサの故障や位置ずれを特定するようなタスクが容易になります。
この記事では、読者がラダーロジック(LL)についてある程度の知識を持っていること、また、読者が以前にラダーロジックプログラムを使用してOptaを構成し、プログラムしたことがあることを前提としています。例えば、読者がスタートとストップのプッシュボタン、およびラッチ機能を備えたクラシックな3線式モータスタータのコードをプログラムできることを前提としています。産業オートメーションが初めての方は、下記の用語集をご覧になることをお勧めします。
用語集
-
Arduino Opta:OptaはArduinoファミリの最新製品の1つです。プログラマブルロジックコントローラ(PLC)で、学生の産業オートメーションへの移行を支援するために理想的に設計されています。従来のArduino IDE、またはIEC 61131-3言語(ラダーロジック、ファンクションブロック、構造化テキスト、命令リスト、シーケンシャルファンクションチャート)を特徴とする新しいPLC専用IDE(Arduino PLC IDE)でプログラミングできます。
-
グローバル変数:PLCコードは小さな POU(Program Organization Unit)に分割されることがよくあります。グローバル変数は、これらのプログラム間のやりとりによく使用されます。これは、Arduinoのプログラミングで学んだメモリスコープの概念に似ています。
-
ハード化:この用語は、PLCが過酷な産業環境で動作する可能性があることを意味します。PLCは高温で何十年も動作することが予想されます。また、入力端子に印加された異常電圧によるワイヤの短絡など、偶発的な電気接続からの耐性の尺度もあります。
-
ハンガリー記法:この変数命名法は、変数名とともにデータ型とスコープを含めることをプログラマーに促すものですが、議論の余地はあります。しかし、著者の経験では、プログラミング初心者にとって、この注意喚起は重要です。特にユーザー定義関数ブロックのような高度なトピックに遭遇した場合、コードのトラブルシューティングにかかる時間を大幅に短縮することができます。
-
入出力(I/O):下記のネジ端子の項をご覧ください。
-
ラダーロジック:IEC 61131-3言語の1つです。物理的なリレーと共通するシンボルを用いたグラフィカルな言語です。
-
マッピング:この技法は、あるメモリ位置の内容を別のメモリ位置に転送するために使用されます。原則として、プログラマーはPLCで使用可能なメモリ量に制約されることはありません。プログラムの可読性がサイズよりも優先されるためです。マッピングはその可読性を高め、トラブルシューティング時間を短縮する確実な方法です。たとえば、プログラマーは1つの物理I/Oに対して個別に参照できます。これにより、そのI/Oへのすべての参照を確認して変更する必要がある面倒な作業とは対照的に、プログラムを変更したときのエラーを防ぐことができます。これは特に、PLC接点が損傷した場合に有利で、技術者は1行のコードを変更するだけで、まだ機能している接点に移動できます。
-
ネジ端子:PLCへの物理的接続を行います。一般に入力ブロックと出力ブロックに分類されます。関連用語に「フィールドデバイス」があります。これらのセンサとアクチュエータは、PLCのネジ端子に接続さ れます。
-
セルフドキュメントコード:PLCのライフサイクルは何十年という単位です。一般的に、携帯電話のように数年ごとにアップグレードされることはありません。理想的な設定では、PLCによって実行される物理的アクションに対して明確な名前を使用してプログラムが記述されます。例えば、ラダーロジックの1行は、「クランプセンサがアクティブになってから2秒後にドリルモータを始動する」と読むことができます。
-
セルフリセット:この記事に関して、セルフリセットとはタイマとカウンタを指します。例えば、規則的なパルスを生成するようにタイマをコード化することができます。カウンタは、特定の数までカウントしてから、リセットするようにプログラムすることができます。これらを組み合わせると、0から59までを1秒ごとに繰り返しカウントする、時計のような構造を構築することができます。
-
ステートマシン:PLCは、物理的な機械またはその他の産業プロセスを制御するように設計されています。多くの場合、機械の動作は、加工材が機械に入り、加工され、機械から排出される一連の物理的ステップに依存します。ステートマシンという用語は、これらのステップを追って制御するPLCコードを指します。一般に、この用語は、固有のステップを含むあらゆるコード構造を表すために使用できます。
関連フォーラムの投稿
はじめに
多くの人たちは、教育の場でArduinoに出会いました。ブレッドボードで回路を組み、マイクロコントローラをプログラムして、巧妙で、楽しく、興味深い、さまざまな機能を実行する方法を学びました。ブレッドボードから産業用に移行するにあたり、異なる基準を考慮する必要があります。
Arduino Optaはプログラマブルロジックコントローラ(PLC)です。これはハード化された産業用コンピュータです。ここでいうハード化とは、Optaが過酷な産業環境で耐え得るように設計されていることを意味します。入力は、マイクロコントローラの脆弱な3.3V I/Oピンが24V DCを受け入れ、相応の酷使に耐えられるように設計されています。Optaのベースユニットは、120V ACコイルを持つモータのスタータまで、さまざまな中電力負荷を直接駆動する能力を持つ4つのリレーベースの出力を備えています。
使い慣れたArduinoのアイデアや習慣をすべて守ろうとするのは自然な本能です。しかし、それではトラブルに巻き込まれる可能性があります。例えば、Optaを搭載した小型マシンを設計するとしましょう。Optaのプログラミングに成功し、その記念すべき日にマシンは試運転され、工場の現場で生産的な仕事を始めます。この試運転は努力の成果だと考える人もいるでしょう。しかし経験豊富な技術者は、これが始まりに過ぎないことを知っています。
そのマシンは今や工場の設備に不可欠な要素となり、高い信頼性をもって動作する必要があります。マシンが故障した場合、技術者はマシンの稼働を素早く復旧させなければなりません。これは重要なことです。何故なら、マシンの故障は、生産量の低下や作業員の休業という点で非常にコストがかかるからです。
理想的には、技術者がテスト機器を使用せず、コンピュータを探してIDEを開いて操作することなく、設備の復元ができることです。実際、技術者がPLC内の知的財産にまったくアクセスできないことも珍しくありません。今日の厳しい作業環境を考えると、技術者はそのPLCを使用した経験のない新入社員かもしれません。
技術者を支援する有用な方法の1つは、OptaのLEDにI/Oステータスを表示するように、Optaをプログラムすることです。
この記事では、このタスクを達成するラダーロジックソリューションを紹介します。STATUS LEDと赤、緑、および青のインジケータLEDにより、技術者はすべてのネジ端子入出力(I/O)の状態をすばやく判断できます。例えば、近接センサが壊れたり、位置がずれている場合、技術者はテスト機器やコンピュータがなくても修理を行うことができます。その結果、迅速なトラブルシューティングが可能となり、機器の稼動停止時間を最小限に抑えることができます。
Status LEDs
これはArduino Optaの写真です。4つのSTATUSのLEDがあることに注目してください。また、RESETのピンホールの上には緑/赤のLEDがあり、USERプッシュボタンの上には青のLEDがあります。これらのLEDは、すべてのI/Oの状態を技術者に知らせるために使用されます。
ここでは、すべての入力がデジタルであると仮定します。もちろん、リレー出力はデジタルです。8個のデジタル入力と4個のデジタル出力、合計で12個のI/Oがあります。4個のSTATUS LEDと3個のインジケータLEDがあれば、ラウンドロビン方式ですべてのI/Oの状態を表示するのに十分なリソースとなります。
図2はその1つの方法を示しています。各ニブル(4ビット幅)が色分けされていることに注目してください。緑色のLED(RESETピンホールの上)が点灯すると、入力I1~I4の値が4個のSTATUS LEDに表示されます。2秒後に緑色のLEDは赤色に変わり、I5からI8の値がSTATUS LEDに表示されます。さらにその2秒後に赤色LEDが消え、青色LED(USERスイッチの上)が点灯し、PLC の出力の値がSTATUS LEDに表示されます。
ラダーロジック
この機能を実行するためにOptaをプログラムするには、いくつかの異なる方法があります。この記事では、PLCの伝統的な言語のラダーロジックに焦点を当てます。技術ヒントに記載されているように、このIEC 61131-3言語を使用する正当な理由があるからです。
技術ヒント:ラダーロジック(LL)をめぐる論争があります。LLは古い手法であり、現代のプログラミング言語に置き替えるべきだという意見があります。そうかもしれませんが、LLはまだ一般的に使用されており、おそらく何十年もこのままでしょう。仮に今日、すべてのPLCプログラミングからLLを廃止したとしても、既存のマシンは通常のライフサイクル20~30年の残りの期間、LLを使い続けると予想されます。これに関連してLLは、リレーとその現実世界のデバイスとの物理的な接続にとても類似しています。すべてのPLCプログラマと技術者は、それぞれの仕事を効率的に行うために、この情報を具体化する必要があります。
コードの概要を図3に示します。このプログラミングは、prgStatusDisplayを一度コーディングすると、複数のプロジェクトで再利用れるため複雑になっています。このため、変数の命名には注意が必要であり、その命名が明らかにマッピング操作を冗長なものにしています。
ダイアグラムの中央から外に向かって順に見ていきましょう。PLCプログラミングの中核は、セルフドキュメントプログラム(Self-Documenting Programs)として示されています。ここには、入力マッピングプログラム(prgInMap)、制御プログラム(prgCtrl)、および出力マッピングプログラム(prgOutMap)があります。ハンガリー記法を使用していることに注意してください。
ここでは、物理的な分野に関連する、説明的な名前を含むコードを「セルフドキュメント」と定義します。例えば、物理的なコントロールパネルには、セレクタスイッチ、スタートプッシュボタン、およびストッププッシュボタンがあります。内部的には、これらにそれぞれgxEnable、gxStart、およびgxStopという名前を付けることができます。gはグローバルメモリの位置を示し、xはブーリアン型を示し、その後に説明的な名前が続きます。図4にラダーロジック図が示されており、イネーブルスイッチが作動している場合に、スタート/ストップラッチを介してgxMotorが作動することがわかります。
技術ヒント:LLのような「単純」なものであっても、いかなる言語に拘わらず、一貫したスタイルでプログラミングすることは重要です。すでに職場ではスタイルガイドが制定されているかもしれません。そうでない場合は、PLCopenが提供するCoding Guidelines documentから始めるのがよいでしょう。この公開文書では、prgなどの前置詞の使用や、gxPBStartなどのハンガリー記法の使用の根拠が説明されています。
技術ヒント:ラダーロジックに詳しい方は、gxStopに関連するノーマルクローズ接点にお気づきかもしれません。これは、物理的なストップスイッチがノーマルクローズ接点を備えている必要があるため、気がかりになったかもしれません。別の言い方をすれば、マシンを停止させるためには、断線や線の緩みに対するフェイルセーフとして、ノーマルクローズ接点が必要です。混乱を避けるため、prgCtrlではポジティブロジックが使用されています。prgInMapは停止スイッチの極性を反転させるので、スイッチのタイプと回路への取り付け方法を同時に考えるという頭の体操は必要ありません。その代わりに、「if not stop」という単純なステートメントを作ることができます。
マッピングの課題
PLCプログラミングにおける重要な課題の1つは、これらのセルフドキュメント名を物理的な「ネジ端子」I/O にマッピングすることです。図3では、prgCtrlの両側にprgInMapとprgOutMapがあります。また、Arduino Optaコードスペースに、システムリソースを参照する入出力マッピングがあります。
通常、prgInMapとprgOutMapは必要ありません。例えば、ネジ端子I1に接続された物理的なスタートスイッチを、Arduino Opta入力マッピングブロックのgxStartに関連付けることができます(図3の左から2番目です)。
prgInMapとprgOutMapが存在する理由は、prgIOStatusDisplayのインスタンス化を変更することなくクリーンに行うためです。その目的は、ステータス表示プログラムを一度書いたら変更しないことです。ArduinoのOptaリソースセクションの内部でマッピング操作を行うと、このようなことはできません。
マッピングを図4に示します。すべての変数がグローバルスコープであり、ブーリアン型であることに注意してください。これは純粋なプログラマーを怒らせるかもしれませんが、ラダーロジックプログラミングでは必要かつ正常なことです。グローバル変数は、図3に示したプログラムブロック間のやりとりに使用されます。例えば、図4の中央にはOptaのI_O_mapping-ProgInpセクションがあります。暗黙のうちに、8個のネジ端子入力がgxI1~gxI8にマッピングされていることがわかります。同様に、I_O_mapping_RelayOutからの出力はgxO1からgxO4にマッピングされています。
マッピングの概要
図3のprgIOStatusDisplayプログラムは、変数gxI1~gxI8とgxO1~gx04を取り込みます。このプログラムには7個の出力があり、その内の4個はステータスLEDを駆動し、3個は図2に示しているように緑、赤、および青のインジケータLEDを駆動します。もう一度言いますが、prgIOStatusDisplayを一度コーディングしたら、二度と触らないようにしたいのです。これには、図4で説明した厳密なマッピング操作が必要です。
図4に示すOptaリソース内では、I_O_mappings_ProgInp、I_O_mappings_ProgOut、およびI_O_mapping_LEDOut内で指定された変数名を常に使用します。その結果、ユーザー定義のprgInMap と prgOutMapを使用して、固定リソース名をPLC プログラミングで一般的な望ましいセルフドキュメント名にマッピングします。例えば、I1に接続された物理的なスタートスイッチは、prgCtrlにgxSWStartとして表示されると、gxI1になります。
ステータス表示プログラム
prgIOStatusDisplayの実際のラダーロジックコードは比較的単純です。この記事の最後にある図5を参照してください。6行のコードで構成されています。最初の2行は、おおまかなステートマシンとして機能します。セルフリセットタイマTON_1は、2秒に1回パルスを発生します。セルフリセットカウンタCTU_1は0から2までのカウントを行います。ただし、1回のプログラムスキャンで3カウントを提供することに注意してください。しかし、このアプリケーションでは重要ではありません。
ライン0002には、一連のコンパレータが含まれます。これらはCTU_1の状態に基づいて赤、緑、および青のインジケータLEDを発光さ せます。
ライン0003は、4つのSTATUSのLEDを消灯します。次に、マシンがどの状態にあるかによって、ライン0004からライン0006でSTATUSのLEDが点灯します。例えば、I1とI3が真であれば、gxLEDGreenの順番が回ってきたときにSTATUSのLED gxLED1とgxLED3が点灯します。
まとめ
この記事で説明している技法を使用すると、技術者はPLCをすばやくトラブルシューティングすることができます。テスト機器に頼ったり、PLCコードを表示するためにラップトップパソコンを接続するための時間を要することなく、トラブルシューティングを行うことができます。プログラム自体は比較的単純ですが、変数のマッピングに関してかなりの訓練が必要です。
産業用制御システムの設計、構築、トラブルシューティング、修理など、皆様からのご連絡をお待ちしております。皆様のフィードバックは、当社と読者にとって非常に貴重です。この記事に関するご意見、ご質問は、このページまたはDigiKeyのTechForumのページに戻ってお寄せください 。
よろしくお願いします。
APDahlen