ロジックプログラム

説明

PolyScope Xのアプリケーションには、メインのロボットプログラムとは独立して、バックグラウンドで継続的に実行される「 ロジックプログラム 」を含めることができます。 これは、アームの電源がオフになっている場合、メインプログラムが一時停止または停止している場合、あるいはオペレーターが安全区域に入った場合でも、実行を継続しなければならないタスクに役立ちます。


代表的な用途としては、フィールドバス通信(Modbus、Ethernet/IP、PROFINET、Socket、XmlRPC)の維持、外部センサー入力への反応、生産用PLCへのロボット状態の報告、およびメインプログラムが停止した際の外部機器の制御などが挙げられます。

ロジックプログラムでは、ロボットアームを直接移動させたり、荷重を変更したり、TCPパラメータを修正したりする関数を使用することはできません。

ロジックプログラムを用いたアプリケーションの例

  1. ロボットが「セーフガード停止」、「保護停止」、または「非常停止」などの停止モードにあり、メインプログラムが一時停止または停止している間、あるいはロボットアームの電源投入前に、外部センサーの入力に対して能動的に応答すること。

  2. フィールドバス通信(Modbus、Ethernet/IP、PROFINET、Socket、XmlRPC)は、ロボットアームの電源がオフになっており、プログラムが実行されていない場合でも維持されます。

  3. オペレーターによってメインプログラムが中断されている間も、セルロジックの動作は継続されます。

  4. 生産制御ソフトウェア(生産用PLC)に送信されるロボットのステータスレポート。

  5. メインプログラムが停止または一時停止した際、溶接機、コンベア、接着剤ディスペンサーなどの外部機器を制御して停止させる機能。

  6. プログラムの開始前に、オペレーターからの入力が取得されます。

  7. 障害状態に応じたカスタマイズされた復旧処理。 オペレーターは、メインプログラムを再開した後、どのような操作を行うかを決定できます。

  8. 小型ロボットセルにおける外部PLCコントローラの交換。

ライセンス

ロジックプログラムの利用にはライセンスが必要であり、ライセンスはカスタマーポータルから購入できます。

 

ロジックプログラムの制御

「プログラム」ページで、サイドバーから「ロジックプログラム」を選択します。 展開されたサイドバーには、ロジックプログラムの各部分を移動するための操作ボタンが表示されます。 また、プログラムの開始、一時停止、停止、リセットを行うこともできます。

 

「プログラム実行」ボタンは、ロジックプログラムの状態に応じて、「プログラム実行」または「プログラム停止」のいずれかに表示が切り替わります。 これは、ロジックプログラムのコンテキストメニューで利用可能なプログラム制御アクションへのショートカットとして機能します。

4つの ロジックプログラムインジケーター は、プログラムの現在の状態を示します。 また、アプリケーションの起動時にプログラムが自動的に開始されるように設定されているかどうかも示されています。

 

ロジックプログラム構造

ロジックプログラムは、メインプログラムと同じ構造セクションを持っています:

  • メインプログラム本体 — 手動で停止されるか、` halt ` 命令が実行されるか、あるいは実行時エラーが発生するまで継続して実行されます。
  • 開始 前 — ロジックプログラムの起動時に1回実行されます。
  • モジュール — 関数とスレッド。メインプログラムと同様の構成になっています。 スレッド関数はデフォルトでは1回のみ実行されます。ループオプションを有効にすると、スレッドを継続的に実行できます。

ロボットプログラムとロジックプログラムは、それぞれ独自のグローバル変数セット、独立したスレッドプール、および独立した実行ライフサイクルを持っています。 あるプログラムの起動、停止、または障害が発生しても、他のプログラムは停止しません。 「 停止 」または 「一時停止 」の命令は、それが実行されたプログラムにのみ影響します。

 

 

開始 前」セクションでは、プログラムを1回のみ実行できます。

モジュール 」セクションでは、プログラムで使用可能な関数やスレッドの一覧を確認できます。

 

ロボットプログラムとのデータ交換

ロボットプログラムとロジックプログラム間の通信は、主に「アプリケーション変数」を通じて行われます。 変数は、ロボットおよびロジックプログラムから設定および読み取りが可能です。

この例では、ロボットセルの入力バッファに入力されるアイテムの数をカウントし、そのカウント値をロボットプログラムに表示します。 ロボットアームの電源がオフになっている間も、カウンターは増加し続けます。

 

ロボットの状態の読み取り

ロボットの状態は、組み込みの RTDE 変数を通じて確認できます。 これらの変数は、スクリプト関数 ` get_rtde_value()` を使用して読み取ることができます。 利用可能なRTDEフィールドの完全な一覧については、『 RTDEガイド』を参照してください。

以下の例は、「セーフガード停止」が有効かどうかを確認する方法を示しています:


safety_status = get_rtde_value("safety_status")
# セーフガード停止および自動モードのセーフガード停止
を確認  is_safeguard_stop_active = (safety_status == 5 または safety_status == 12)

 

次の例は、ロボットプログラムが一時停止しているかどうかを確認するものです:

is_program_paused = get_rtde_value("runtime_state") == 4

URScript Control API もこの機能をラップしています。

 

ロジックプログラムの自動起動

アプリケーションの起動時に自動的に実行されるプログラムを選択できます。 「 自動 起動」オプションを選択すると、アプリケーションの読み込み完了直後にロジックプログラムが起動します。

また、ロボットコントローラの電源が投入され、前回のアプリケーションが読み込まれた際に、ロジックプログラムを自動的に起動することも可能です。

自動 起動」機能は、動作モードやロボットアームの状態にかかわらず動作します。 読み込み時に「自動起動」がトリガーされると、スナックバー通知によりロジックプログラムが開始されたことが確認されます。

 

 

「Logic Program 」アイコン のサイドバーバッジは、プログラムが実行中か停止中かといった現在の状態を常に示しています。

ロボットの電源投入時や、さまざまなアプリケーションが読み込まれる際に、ロジックプログラムが安全であることを確認するのは、お客様の責任となります。

ロジックプログラムは、有線接続またはPLC接続(Modbus、PROFINET、Ethernet/IP、ソケット、ダイレクト出力、その他のインターフェース)を使用して、外部機器の起動および停止を行うことができます。

 

モジュールとスレッド

ロジックプログラムの機能は、関数として整理することができます。 これはロボットプログラム内での動作と同じです。

各機能は「 スレッド」としてマークすることができます。 デフォルトでは、スレッドは1回のみ実行されます。 スレッド関数上の [ ループ ] チェックボックスを選択すると、スレッドが継続的に実行されます。

 

リソースの共有

ロボットプログラムとロジックプログラムは、それぞれ独自のスレッドおよび変数のプールを持ち、独立して実行されますが、ハードウェアリソースはすべて共有されています。 これに伴い、プログラマーが留意すべきいくつかの制約事項があります:

  • ロジックプログラムのスレッドは、ロボットプログラムと同じCPU上で実行されます。 すべてのロジックプログラムスレッドの実行時間は、すべてのロボットプログラムスレッドの実行時間に加算されます。 極端な場合、これにより「実行時間が大幅に遅れている」という違反が発生する可能性があります。

  • Modbus信号や汎用レジスタなどの一部の通信リソースは、共有リソースです。 同じレジスタに同時に書き込みを行うと、予期しない結果が生じます。 また、現在確認されている動作は、将来的に基盤となる実装が最適化された際に変更される可能性があります。

  • Modbus — Modbusクライアントは1つを共有します。 いずれかのプログラムで生成された信号は、両方のプログラムで確認できます。

  • Ethernet/IP フレキシブル・アダプタ — 各プログラムは、同じインスタンスに対して独自の読み取りまたは書き込みハンドルを開きます。 ハンドルは、同一のデータフィールドに書き込みを行ってはなりません。

 

制限事項

  • ロジックプログラムでは、URScript命令の一部のみが利用可能です。

  • ロジックプログラムでは、プログラム実行インジケーターおよびブレークポイントによるデバッグはサポートされていません。

  • ロジックプログラムでは、インタープリタモードはサポートされていません。 ただし、ロジックプログラムの実行中でも、ロボットプログラム内でインタープリターモードを起動することは可能です。