Arduino PLC: MPINOでスキャンベースの制御ロジックを実行する
PLCの信頼性は一つの考え方に由来します。すなわち、入力を読み、ロジックを解き、出力を書く処理を繰り返す決定論的なスキャンサイクルです。MPINOコントローラはこのモデルをArduinoスケッチで再現し、MPINO-16A8R、MPINO-16A16R、MPINO-16A8R8Tといった高密度機種でラダー等価の機械制御を記述できるようにします。
Arduinoループの中のスキャンサイクル
従来のPLCは繰り返しのシーケンスを実行します。すなわち、すべての入力をイメージテーブルにサンプリングし、そのイメージに対してユーザプログラムを評価し、結果を出力に書き込みます。Arduinoのloop()関数はこのパターンに自然に対応します。各パスの先頭ですべてのデジタルおよびアナログ入力をローカル変数に読み込み、中間でその安定した値に対して制御ロジックを評価し、末尾で計算された状態をリレーまたはトランジスタ出力に反映します。
ロジックの途中でピンを場当たり的にポーリングするのではなく、スキャンごとに一度入力をイメージとして読むことが、PLCに予測可能な動作を与えており、同じ規律がここにも適用されます。16点のデジタル入力と16点のリレー出力を備えたMPINO-16A16Rでは、loop()の開始時に16点の入力すべてをスナップショットするため、ラング評価の途中で接点の状態が変化したように見えることはありません。その結果、制御技術者が期待する通り、サイクルごとに一貫して動作するスキャンとなります。
Cで実装するラダー等価パターン
ラダーロジックは本質的に、毎スキャン評価されるブール代数です。直列接点は論理AND、並列分岐はOR、b接点(常時閉)は否定です。これらはC式に直接変換されます。起動ボタンが押され、停止ボタンが押されていないときに出力コイルを励磁するラングは、loop()の各パスで評価される単一の代入文になります。すなわち、出力はstart AND NOT stopであり、自身の状態を通じて自己保持されます。
一般的なPLC命令も同様にきれいに対応します。自己保持(ラッチ)ラングはコイル自身の前回状態とのORです。タイマは条件が初めて真になった時点で取得したmillis()との比較です。カウンタは入力の立ち上がりエッジで増加する整数であり、これは現在の入力イメージを前スキャンのイメージと比較して検出します。MPINO-16A8R8Tでは、このロジックで8点のリレーと8点のトランジスタ出力を駆動しつつ、比例弁やドライブ用の2点のアナログ出力も一つの決定論的スキャン内で同時に指令できます。
決定論的タイミングとエッジ検出
決定論はスキャンからブロッキング呼び出しを排除することから生まれます。delay()を避け、代わりにmillis()タイムスタンプを用いてループがタイマ待ちで停止しないようにすれば、すべての出力が各パスで更新されます。現場入力のデバウンス、ステートマシンのステップシーケンス、最小ON/OFF時間の強制は、いずれもブロッキング待機ではなく取得済みタイムスタンプとの比較として表現すれば容易になります。
エッジ検出は第二の柱です。現在と前回の入力イメージの両方を保持するため、立ち上がりエッジは単に現在 AND NOT 前回であり、立ち下がりエッジはその逆です。これがワンショットの起動、ステップの前進、遷移ごとに正確に一度のカウンタ増加を行う方法です。ATmega2560ベースのMPINO-16A8Rでは、追加のフラッシュとRAMの余裕により、多段シーケンサ、複数の独立タイマ、カウンタを同時に動かしてもスキャン時間が予測不能に増大することはありません。
機械制御に適したMPINOの選定
I/O点数を機械に合わせてください。小型のインターロックやポンプ制御盤はMPINO-8A8R-Sの8点入力と8点リレーだけで足りる場合がある一方、多数のセンサとアクチュエータを持つ包装やコンベアのステーションにはMPINO-16A16Rの16点入力と16点リレーがより適しています。アプリケーションが低速の接触器スイッチングと高速のソリッドステート駆動を併用する場合、MPINO-16A8R8TはAC負荷用の8点リレー出力と高速DCデバイス用の8点トランジスタ出力を一つのコントローラに統合します。
これらすべてが標準のArduino IDEで同一のスキャンベーススケッチを実行するため、ある機種で制御ロジックを試作し、I/Oマッピングだけを変更して別の機種に展開できます。MPINO-8A8R-Sで構築した決定論的ループ構造はMPINO-16A8R8Tで動作するものと形が同一であり、機械制御ロジックはプログラミングパラダイムを変えることなく製品群全体にわたって拡張されます。
関連コントローラ
関連ガイド
FAQ
Arduinoは機械制御において本当にPLCを置き換えられますか?▾
単一の機械、スキッド、分散ノードであれば可能です。MPINOコントローラはPLCのスキャンサイクル(入力読み取り、ロジック演算、出力書き込み)をArduinoスケッチで再現し、オプトアイソレーション入力とリレーまたはトランジスタ出力を備えます。MPINO-16A16RやMPINO-16A8R8Tといった高I/O機種は、一般的な機械が必要とするチャネル数を提供します。
MPINOでラダーロジックのタイマとカウンタはどう実装しますか?▾
タイマは条件が真になった時点で取得したmillis()タイムスタンプとの比較として、カウンタは検出した立ち上がりエッジで増加する整数として実装します。ループが現在と前回の入力イメージの両方を保持するため、エッジ検出(現在 AND NOT 前回)により遷移ごとに正確に一度だけカウンタやワンショットを進められます。
MPINOのスキャンサイクルは決定論的ですか?▾
loop()からブロッキング呼び出しを排除する限り決定論的です。スキャンの先頭ですべての入力をスナップショットし、delay()を避け、タイミングにmillis()を用い、末尾で出力を書き込みます。MPINO-16A8RのようなATmega2560機種では、追加のRAMとフラッシュにより複数のタイマ、カウンタ、シーケンサを同時に動かしてもスキャン時間が予測不能に増大しません。



