今回の記事ではSIEMENS S7-1200 G2 × WITTENSTEINサーボでPROFINET IRT構築に挑戦します。サーボドライブ(simco® drive 2)の設定からTIA Portalでのプログラム作成まで、実機で構築した手順をまとめました。また、制御のリアルタイム性や注意点も解説しています。実際に動かしたい人にもおすすめ!
さ、FAのを楽しもう。

Reference Link
http://soup01.com/ja/category/siemens-jp/s7%e2%80%901200-g2/
TIA Portalからのモーション制御
プロジェクトを作成し、テクノロジー・オブジェクトを設定し、TIAポータルを使用してコンフィギュレーションをCPUにダウンロードします。そしてCPUにダウンロードします。 モーションコントロール機能はCPUで処理されます。
ユーザープログラムの Motion Control 命令を使用して、テクノロジーオブジェクトを制御します。TIA Portal は、コミッショニング、最適化や診断などの機能を提供します。
次の図は、ユーザー・インターフェースと S7-1500 CPU へのモーション・コントロールの統合を概略的に示しています。ンセプトを簡単に説明します。
機能
TIAポータルは、モーションコントロール機能のプランニングと試運転をサポートします:
- ハードウェアの統合と構成
- テクノロジーオブジェクトの作成と設定
- ユーザープログラムの作成
- CPUへのダウンロード
- 軸の試運転
- ドライブの最適化
- 診断
Technology objects?
Technology objectsは、コントローラ内の実際のオブジェクト(ドライブなど)を表します。 ユーザープログラムのモーションコントロール命令によって、Technology objectsの関数を呼び出します。 Technology objectsは、実オブジェクトの動きのオープンループおよびクローズドループ制御を行い、ステータス情報(現在位置など)をFeedbackします。
それを簡単にまとめると、
- Technology objectsの構成は、実際のオブジェクトの特性を表している。
- 構成データはTechnology データブロックに格納されます。
モーション・コントロールでは、以下のテクノロジー・オブジェクトが利用可能です。
Speed axis technology object
速度軸technology object(”TO_SpeedAxis”)は、ドライブの速度を指定するために使用します。 モーションコントロール命令で軸の動きをプログラムします。
Positioning axis technology object
位置決め軸technology object(”TO_PositioningAxis”)は、クローズドループ位置制御でドライブを位置決めするために使用されます。 位置決めジョブは、ユーザプログラムのモーションコントロール命令で軸に発行します。
Synchronous axis technology object
同期軸technology object(”TO_SynchronousAxis”)には、位置決め軸テクノロジー・オブジェクトのすべての機能が含まれています。 軸は、同期動作で先行軸の位置変化に追従するように、先行値と相互接続することもできます。
External encoder technology object
外部エンコーダtechnology object(”TO_ExternalEncoder”)は、位置を検出し、それをコントローラが利用できるようにします。 検出された位置は、ユーザープログラムで評価することができます。
Measuring input technology object
Measuring input technology object(”TO_MeasuringInput”)は、実際の位置を素早く正確に検出し、イベントをトリガーします。
Output cam technology object
Output cam technology object(”TO_OutputCam”)は、軸または外部エンコーダの位置に応じてスイッチング信号を生成します。 スイッチング信号はユーザープログラムで評価したり、デジタル出力に送ることができます。
Cam track technology object
Cam track technology object(”TO_CamTrack”)は、軸または外部エンコーダの位置に応じてスイッチング信号シーケンスを生成します。 このプロセスでは、最大32個のカムが重ね合わされ、スイッチング信号がトラックとして出力されます。 スイッチング信号はユーザープログラムで評価したり、デジタル出力に供給することができます。
Cam technology object (S7-1500T)
Cam technology object(”TO_Cam”)は、補間点および/またはセグメントによって関数f(x)を定義し、欠落した関数範囲は補間されます。
Kinematic technology object (S7-1500T)
Kinematic technology object(”TO_Kinematics”)は、位置決め軸をキネマティックに相互接続するために使用します。 キネマティクス・テクノロジー・オブジェクトを構成すると、構成されたキネマティクス・タイプに従って軸を相互接続します。
Technology data block
各オブジェクトのプロパティは、テクノロジー・オブジェクトによって設定され、テ クノロジー・データ・ブロックに保存されます。 Technology data blockには、テクノロジー・オブジェクトのすべての構成データ、設定値、実測値、ステータス情報が含まれます。 TIA ポータルは、テクノロジー・オブジェクトが作成されると自動的にTechnology data blockを作成します。 ユーザ・プログラムを使用して、テクノロジー・データ・ブロックのデータにアクセ ス(読み取り/書き込みアクセス)します。
Motion Control instructions
モーション・コントロールのインストラクションを使用すると、テクノロジー・オブ ジェクトで必要な機能を実行できます。 モーション・コントロールのインストラクションは、TIAポータルの「インストラクション > テクノロジー > モーション・コントロール」から入手できます。 モーションコントロール命令は PLCopen(バージョン 2.0)に準拠しています。
User program
モーションコントロール命令とテクノロジーデータブロックは、Technology objectsのプログラミングインターフェースを表します。 モーションコントロール命令を使用して、ユーザプログラム内のTechnology objectsのモーションコントロールジョブを転送します。
実行中のジョブのステータスは、Motion Control 命令の出力パラ メータで追跡します。Technology data blockを使用して、実行中にTechnology objectsのステータス情報にアクセスし、特定の構成パラメータを変更します。
Drives and encoders
ドライブは軸の動きを確実にします。 ハードウェア構成に組み込まれています。 ユーザプログラムで Motion Control ジョブを実行すると、テクノロジオブジェクトがドライブの制御とエンコーダの値の読み込みを引き継ぎます。
PROFIdrive 機能を持つドライブとエンコーダは PROFIdrive テレグラムで接続されます。 以下の接続が可能です:
- PROFINET IO
- PROFIBUS DP
- Technology module (TM)
アナログ設定値インターフェースを持つドライブは、アナログ出力(AQ)とオプションのイネーブル信号を使用して接続されます。 アナログ入出力は、対応するI/Oモジュールによって利用できます。
Axis types
軸は、さまざまな軸タイプで構成できます:
- 位置決め軸と同期軸は、回転軸または直線軸として構成できます。
- 速度軸は常に回転軸である。 メカニクスの実行に応じて、軸はリニア軸または回転軸として実装される:
- 直線軸 直線軸の場合、軸の位置はミリメートル(mm)など、直線的な尺度として指定されます。
- 回転軸 回転軸の場合、 軸の位置は角度単位(°)などで指定します。
PROFIdrive telegrams
PROFIdrive Telegramはコントローラとドライブ/エンコーダの間で、設定値と実測値、制御とステータスワード、そ の他のパラメータを転送するのに使われます。
PROFIdrive テレグラムが接続に使用され た場合、ドライブとエンコーダは PROFIdrive プロファイルに従って扱われ、オンになります。
- 制御語STW1、STW2、ステータス語ZSW1、ZSW2
- 速度設定値32ビット(NSET)、速度実測値32ビット(NACT)
- エンコーダ実測値1(G1_XIST1、G1_XIST2)
- ダイナミックサーボ制御(DSC)2
- 速度プリコントロール値
- 位置差(XERR)
- Kpc – 閉ループ位置制御の速度プリコントロール値
- トルク制限
Process response
モーションコントロールのためのOB
technology objectを作成すると、テクノロジーオブジェクトを処理するためのOBが自動的に作成されます。 technology objectのモーションコントロール機能は、独自の実行レベルを作成し、モーションコントロールのアプリケーションサイクルに従って呼び出されます。
それは以下のブロックが作成される:
MC-Servo [OB91]
ポジションコントローラーの計算
MC-Interpolator [OB92]
モーションコントロール命令の評価、セットポイントの生成、モニタリング機能
2つのOBの実行
OBはノウハウが保護されていて、 プログラムコードの閲覧や変更はできません。
2つのOBブロックの周波数は常に1:1であり、MC-Servo[OB91]は常にMC-Interpolator[OB92]の前で実行されます。制御品質とシステム負荷の要件に応じて、適用サイクルとOBの優先順位を設定できます。
MC-PreServo [OB67] とMC-PostServo [OB95]
さらに、アプリケーションによってOBブロックMC-PreServo [OB67]とMC-PostServo [OB95]を作成することができます。
OB MC-PreServo [OB67]とMC-PostServo [OB95]をプログラムすることができ、アプリケーション・サイクルで呼び出されます。 つまり、MC-PreServo[OB67]とMC-PostServo[OB95]OBは、一貫したデータ処理や、アプリケーションサイクルと同期して実行する必要があるプロセスのモーションや原点復帰機能の開始など、時間的に重要なイベントに使用できます。
アプリケーションサイクル
MC-Servo[OB91]が呼び出されるアプリケーション・サイクルは、OBのプロパティの”General > Cycle Time”で設定できます:
Synchronous to the bus
MC-Servo[OB91]は、バス・システムと同期して、またはバス・システムに reduced ratioで呼び出されます。 送信クロックは、選択したバスシステムのプロパティで設定します。 Distributed I/O”の ドロップダウンリストで、以下のバスシステムを選択できます:
- Isochronous PROFIBUS DP
- Isochronous PROFINET IO
注意するのは、通信プロセッサ/通信モジュール(CP/CM)を介してCPUに接続されているバスシステムと同期してMC-Servo [OB91]を呼び出すことはできません。
Cyclic
MC-Servo [OB91]は、指定されたアプリケーション・サイクルで周期的に呼び出される。
選択されたアプリケーション・サイクルは、1サイクルでtechnology objectを処理するのに十分な長さでなければなりません。technology objectの処理時間がアプリケーション・サイクルより長いと、オーバーフローが発生します。なので、最適な制御品質を達成するためには、MC-PreServo[OB67]、MC-Servo[OB91]、MC-PostServo[OB95]の構成ブロックの計算は、送信サイクル内で実行されなければならない。
MC-Servo[OB91]とMC-Interpolator[OB92]の実行時間は、拡張命令 “RT_INFO “で確認できます。それによって、OB MC-PreServo[OB67]とMC-PostServo[OB95]の現在のアプリケーション・サイクル(μs単位の情報)は、開始情報を使用して読み取ることができます。
Reduction ratio (CPU V1.5 and higher)
Isochronous PROFINET IOシステムの送信クロックに対して、MC-Servo [OB91]のアプリケーション・サイクルを減らすことができます。 送信クロックの整数倍を係数として設定できます。同じ PROFINET IO システムでIsochronousモード割り込み OB と MC-Servo [OB91] を同期して呼び出す場合、両方のOBに同じアプリケーションサイクルを設定する必要があります。
Priority
OBの優先順位は、”General > Properties > Priority”のプロパティで必要に応じて設定できます。
MC-Servo [OB91]
MC-Servoの優先度は17〜26まで調整できます(デフォルト値26)。
MC-Interpolator [OB92]
MC-Interpolatorの優先度は16〜25まで調整できます(デフォルト値24)。
注意
The priority of MC-Servo [OB91] must be at least one higher than the priority of MC-Interpolator [OB92]. The priority of the organization blocks MC-PreServo [OB67] and MC-PostServo [OB95] correspond to the priority of the MC-Servo [OB91]. MC-PreServo [OB67] is called immediately before MC-Servo [OB91]. MC-PostServo [OB95] is called immediately after MC-Servo [OB91].
MC-Servo [OB91] の優先度は MC-Interpolator [OB92] の優先度より少なくとも1つ高くなければならない。また、優先度の調整では:
- MC-PreServo[OB67]とMC-PostServo[OB95]のOBの優先度は、MC-Servo[OB91]の優先度に対応する。
- MC-PreServo [OB67]は、MC-Servo [OB91]の直前に呼び出される。
- MC-PostServo[OB95]は、MC-Servo[OB91]の直後に呼び出されます。
Process image partition “OB Servo PIP”
MC-Servo[OB91]を呼び出すと、モーションコントロールのisochronous モードでProcess image partition「OB Servo PIP」が利用可能になります。 モーションコントロールが使用するすべてのドライブとエンコーダは、このプロセスイメージパーティションに割り当てられます。
また、MC-PreServo[OB67]とMC-PostServo[OB95]は、MC-Servo[OB91]から自動的に呼び出されるため、プロセスイメージのパーティションも自動的に利用できます。 MC-PreServo[OB67]を使用する場合は、MC-PreServo[OB67]の起動時にデータが読み込まれます。そして MC-PostServo[OB95]を使用する場合は、MC-PostServo[OB95]の起動後にデータが出力されます。
さらに、モーションコントロールが使用するすべての I/O モジュールをこのProcess image partitionに割り当てる必要があります(ハードウェア・リミットスイッチなど)。 この割り当てにより、テクノロジオブジェクトと時系列的に同期した処理が行われます。 注意するのは、入力プロセス・イメージ・パーティションは、STOP モードでも更新されます。
Operational Sequence and Timeouts
モーション・コントロール機能を処理する場合、各アプリケーション・サイクルでOB MC-Servo [OB91]とMC-Interpolator [OB92]が呼び出され、処理される。 残りのサイクル時間は、ユーザープログラムの処理に使用できます。エラーのないプログラム実行のために、以下のルールを守ってください:
- 各アプリケーション・サイクルでは、MC-Servo [OB91]を起動し、完全に実行しなければならない。
- 各アプリケーション・サイクルにおいて、関連するMC-Interpolator [OB92]は少なくとも起動されなければならない。
下図は、OB1 の処理におけるエラーなし動作シーケンスの例です。

Overflows
例えば、MC-PreServo [OB67]またはMC-PostServo [OB95]にtechnology objects oやプログラムが追加された場合など、設定されたアプリケーション・サイクルが超えた場合にオーバーフローが発生する可能性があります。
MC-Servo[OB91]の送信クロックがオーバーフローした場合、CPUの診断バッファにメッセージが生成される。 コントローラは等時性で動作しなくなります。 アプリケーション・サイクルでMC-Servo [OB91]がオーバーフローした場合、CPUはSTOPモードに切り替わります。
次の図は、MC-Servo[OB91]がアプリケーション・サイクルでオーバーフローした場合と、reduction ratio=2の送信クロックでオーバーフローした場合の動作を示している:

MC-Interpolator [OB92]の実行は、MC-Servo [OB91]呼び出しによってのみ中断することができる。それ以上の割り込みが発生した場合、CPU は STOP モードに切り替わります。
CPUはMC-Interpolator [OB92]の最大3連続オーバーフローを許容する。それ以上のオーバーフローが発生した場合、CPUはSTOPモードに切り替わる。
Operating modes
最後は、各動作モードおよび動作モード間の遷移におけるモーションコントロールの動作について説明します。CPUには以下の動作モードがあります。
STOP mode
STOPモードでは、ユーザープログラムは処理されず、すべてのプロセス出力は無効になります。したがって、モーション・コントロールのジョブは実行されません。Technology data blocks は更新されます。
STARTUP mode
CPUが周期的なユーザープログラムの処理を開始する前に、スタートアップOBが1回処理する。STARTUPモードでは、プロセス出力は無効になる。モーションコントロールのジョブは拒否されますが、Technology data blocks は更新されます。
RUN mode
ユーザープログラムは RUN モードで処理される。RUN モードでは、プログラムされたモーション・コントロールのジョブが周期的に呼び出され、処理される。そしてTechnology data blocks は更新されます。
HOLD operating state
Technology Objectが使用されている場合、ブレークポイントの使用はサポートされません。各ケースでMC-Servoのオーバーフローが発生します。これは即座にSTOPモードに切り替わります。HOLD 動作状態では、イベントは開始されず、ユーザープログラムは実行されません。すべての出力は無効化されるか、パラメータ設定に従って反応します。出力は設定された代替値を供給するか、最後に出力された値を保持し、制御されたプロセスを安全な動作状態にします。
Operating mode transitions
動作モード間の遷移におけるモーション・コントロールの動作を示しています:
POWER ON → STOP
CPUが技術オブジェクトの再起動を行う。 technology objectsはロード・メモリの値で再初期化される。
STOP → STARTUP
モーションコントロールには関係ない。
STARTUP → RUN
プロセス出力が有効になる。
RUN → STOP
CPU が RUN モードから STOP モードに切り替わると、アラーム応答「remove enable」 に従ってすべてのtechnology objectsが無効になる。アクティブなモーションコントロールジョブは中断される。RUN中のtechnology objectsに対して再起動に関連するデータが変更された場合、CPUは対応するtechnology objectsの再起動を実行する。
STARTUP → HOLD
起動ルーチンのブレークポイントに達したときになります。
HOLD → STARTUP
technology objectsを使用する場合は不可能です。
RUN → HOLD
ブレークポイントに到達した。
HOLD → RUN
technology objectsを使用する場合は不可能です。
HOLD → STOP
スイッチ/ディスプレイの操作、またはプログラミング装置からSTOPに設定します。
Positioning axis technology object?
位置決め軸technology object?は、エンコーダ設定を考慮して位置設定値を計算し、対応する速度設定値をドライブに出力します。
位置制御モードでは、位置決め軸のすべての動作は位置制御動作として行われる。アブソリュート位置決めでは、位置決め軸technology objectの物理的な位置がわかっていなければなりません。
各位置決め軸は、PROFIdrive テレグラ ム、アナログ設定値インターフェース、 PROFIdrive テレグラムによるエンコーダに よってドライブが割り当てられます。
エンコーダ値と定義された位置の関係は、機械的特性とエンコーダ設定のパラメータ割り当て、および原点復帰動作によって確立されます。
また、technology objectは、原点復帰状態でなくても、位置関係のない動きや、相対的な位置の動きを行うことができる。
Implementation
今回の記事の流れはWITTENSIEN側のDRIVE設定→TIA側のハードウェア構成→PROFINET設定→Technology Object構築→プログラム作成になります。
WITTENSTEIN Side
最初にWITTENSTEIN側を構築します。
ソフトウェア・バージョン
MotionGUI2ツールから現在のServo DriveのFirmwareを確認できます。今回の記事では03.02.00です。
古いMotionGUI2でも新しいFirmwareのDriveの設定も可能ですが、最新VersionをDownloadして使用しましょう。
モーターギア
今回記事で使用するdynamic motorのGear比を確認したいので、Unitsをクリックし>Unit perspectiveの基本設定はMotor/Input Sideになっています。
Drop-listからShaft/Output sideを選択します。
Motor gear ratioは12になっていることを確認できます。それはMotor Gear比になります。
同じくGear比はMotor項目からも確認できます。
Gear Ratioは固定で12であることがわかります。
PROFIdrive 設定
最後はPROFIdriveの設定を確認しまよう。
その中で調整するのはLife Sign Monitoringの回数ですね。実際のネットワーク状態に合わせて設定しましょう。
Siemens Side
次はシーメンスS71200 G2側を構築します。
GSDMLファイルのインストール
Options>Manage general Station description files(GSD)をクリックします。
GSDMLの管理画面が表示され、…ボタンをクリックします。
先程DownloadされたGSDML Folderを選びましょう。
Done!
ハードウェア構成
WITTENSEINサーボモータの追加
Catalogからsimco Drive2を追加します。
Done!
Profinet ネットワークの割り当て
先ほど追加したSERVO MOTORにある”Not Assigned”を選び、S71200G2と同じのPROFINETネットワークに割り付けます。
Done!
IPアドレスの設定
下図のボタンをクリックすれば、各デバイスのIPアドレスが表示され、アプリケーションに合わせてIPアドレスを設定しましょう。
IRTネットワークの設定
WITTENSEINサーボモータをクリックし、PROFINET>Advanced options>Real time settings>Synchronizationを選び、RT classをIRTに設定してください。
G71200-G2のPROFINET>Advanced options>Synchronizationに自動的にSync masterに変わります。
トポロジーの設定
PROFINET IRTネットワークを構築するには、各IRTデバイスの物理配線を設定する必要があります。ここでTopology Viewをクリックします。
こちらはTopology viewになります。
各IRTデバイスを実際の物理配線に合わせて設定しましょう。
Telegram設定
WITTENSEINサーボモータの通信Telegramを設定します。Default上でServo Driveの通信ModuleはTelegram1に設定されています。
Telegram1を右クリック>DeleteでDefaultのTelegram設定を削除します。
次はCatalogからTelegram105を追加します。
Done!
Realtime Settings-Update Time
WITTENSEINサーボモータを選び、Advanced options>Real time settings>Update timeを実際のネットワーク状態に合わせて調整してください。
Watchdog time
Watchdog timeも実際のネットワーク状態に合わせて調整してください。
Assign device name
WITTENSEINサーボモータを右クリック>Assign device nameで実機のPROFINETデバイス名を設定しましょう。
Safety Program Cycle Time
Safety プログラムを使用する場合は、Cycle time・Warn Cycle time・Max Cycle timeを調整してください。
Configure MC_Servo
次は先程追加したTelegram105のPropertiesを開きます。
次はWITTENSEINサーボモータノIOAddress>InputにあるOBをMC_Servoに設定しましょう。
Done!
また、IOAddress>OutputにあるOBをMC_Servoに設定しましょう。
また、MC_Servo自体のサイクルタイムにも設定可能です。
Cycle timeを開き>Factorをアプリケーションに合わせて設定しましょう。
Insert Technology Object
今度はTechnology Objectを追加するため、Technology Objects>Add new objectで新規Objectを追加します。
今回記事で使用するTO_PositioningAxis(位置決め軸)を選び>OKでTechnology Objectsを追加しましょう。
Done!
Configure Axis
先ほど追加した位置決め軸を設定します。
Hardware interface-Drive
Drive項目を開きます。
Driveの項目のとなりにある…ボタンをクリックします。
先ほど追加したWITTENSEINサーボモータを選択します。
Done!
Hardware interface- Encoder
Encoderを選び>Encoder1>Encoder Typeを実機のエンコーダータイプに合わせて設定しましょう。
Hardware interface-Data exchange with the drive
Data exchange with the driveの項目でReferenceとMax Speedをアプリケーションに合わせて行きましょう。
- reference speedはこの軸の基準速度(100%として扱う速度)
- Maximum speedは実際の使用上の最大速度の上限
Hardware interface-Data exchange with encoder
エンコーダパラメータをエンコーダ設定からCPUに転送する場合は、チェックボックスを選択します。 エンコーダパラメータは、 テクノロジオブジェクトの(再)初期化、 エンコーダと CPU の(再)起動後、 バスから転送されます。 また、エンコーダタイプは、軸のコンフィギュレーションとドライブのコンフィギュレーションが同じでなければなりません。
注意するのはエンコーダパラメータの自動転送は、製品バージョン A16 の PROFIdrive エンコーダでのみ可能です。 このためには、”Encoder” を設定ウィンドウのデータ接続として選択する必要があります。また、SINAMICSドライブでエンコーダを使用するには、製品バージョン> V4.xが必要です。
Extend parameters-Mechanics-Drive
こちらは負荷ギヤのギヤ比は、モーター回転数と負荷回転数の比で規定される。また、”Leadscrew pitch”が1回転するときに負荷が移動する距離を設定する。
- Number of motor revolutions モーター側の回転数:ここではモーターが12回転する
- Number of load revolutions 上記12回転でリードスクリューが100回転する設定
Extend parameters-Mechanics-Encoder
このフィールドで、モーター1回転の負荷距離を設定する。負荷ギヤのギヤ比は、モータ回転数と負荷回転数の比で規定される。
- Number of motor revolutions モーターが6553回転する間に
- Number of encoder revolutionsエンコーダが65536カウントする
プログラム
次はプログラムを作成します。
dbData
WITTENSEINサーボモータのDBはモーション制御用の軸セットポイント(AxisSetPoint)配列として機能しています。それにより、パラメータを1つの配列で扱うため、コードやブロック間の受け渡しがシンプルなプログラムになります。
fbAxis
次はWITTENSEINサーボモータを制御するFBを作成します。
Interface
こちらはfbAxisのインタフェースで、Technology Objectと加減速などの変数をIOパラメータとして渡すことにより、FBの汎用化になり、1軸のサーボモーション制御を統合的に扱う再利用可能なモジュールです。
Network1
こちらはTechnology ObjectのServo ON信号・インタロック・リセット信号になります。
Network4
こちらはTechnology ObjectのJog Fw/Bwインタロックとコマンド発行のプログラムです。
Network5
このブロックは、軸(Axis)にサーボ電源(電力)を供給するための命令です。これにより、指定した軸が動作可能な状態になります。このブロックは、軸に電源を入れる最初のステップです。通常、MC_MOVE や MC_HOME など他のモーション命令の前に必ず実行されます。
Network6
これは「ジョグ運転(Jog Operation)」を行う命令ブロックで、一定の速度で前進・後退させるような用途に使われます。
Network7
これは、モーション制御軸のエラー状態をリセットする命令ブロックです。
Network8
このブロックは、軸をホーム(原点)位置に移動させ、以降の動作の基準とする処理を行います。
Network9
このブロックは、実行中のモーション(移動)を減速して停止させます。
Network10
MC_HALT は「即時停止(Halt)」を実行する命令です。
MC_STOPよりも緊急度が高く、現在の位置で強制的に速度をゼロに近づけて停止しますが、モーション制御上の「ターゲット位置」などは維持されます。
Network11
これは、指定された絶対座標へ軸を移動させる命令ブロックです。
Network12
この命令は、現在位置からの相対距離で軸を移動させる命令ブロックです。
Network13
これは、軸(#ioToPosition)の StatusDrive.InOperation ステータスを #xDriveOK というBOOL変数に代入しているシンプルの/代入処理です。
Network14
こちらは複数のモーションブロックの Busy フラグを集約し、そのうち 1つでも TRUE であれば xBusy を TRUE に設定します。また、>=1 演算ブロックは、入力信号のうち1つ以上がTRUEかを判定するOR条件です。
Network15
こちらは複数の Done フラグ(処理完了)を集約し、そのうち いずれかが TRUE なら xDone = TRUE に設定します。こちらも >=1 による OR条件の集約です。
fb1
b1(FB3)関数ブロックの宣言部になります。
Network 1:SWITCH #iStep
ステップ番号(#iStep)に応じて、Case0〜Case30へジャンプします。
Case0(Network 2): 開始条件
%M100.7 (mStart) が ON かつ _axis1.xDriveOK が TRUE → 上昇エッジ検出 (R_TRIG)します。またiStep を 1 に進めて %M100.7 をリセット(1回限りの起動)。
Case1(Network 3)
インターロックチェック → MC_POWER 有効化
DriveOK が TRUE かつ %M100.4 (mInterlock) に TRUE → %M100.0 (mEnable) をセットし、またiStep = 10にセットします。
Case10(Network 4): 絶対位置移動
AxisSetPoint[0] = 300.0(位置)
AxisSetPoint[1] = 300.0(速度)
%M100.5 (mMoveAbs) をセット → fbAxis で MC_MOVEABSOLUTE が実行される
終了後に iStep = 20 に進み %M100.5 をリセット
Case20(Network 5): 相対移動(マイナス方向)
AxisSetPoint[0] = 300.0, AxisSetPoint[1] = -300.0で、%M100.6 (mMoveRel) をセット → fbAxis で MC_MOVERELATIVEします。そして終了後に iStep = 30、mMoveRel リセット
Case30(Network 6): タイマーによる一時停止
TON タイマーで 1.5秒停止し、停止後に iStep = 10 に戻します(ループ再開)。
Network 7
FB2では、これまでの構成で見てきたように MC_POWER, MC_MOVEABS, MC_MOVEREL などが1つに集約されており、FB3からの各メモリビット(%M100.x)をトリガーとしてモーション制御が実行されています。
OB1 からの呼び出し
OB1内で fb1(FB3)が呼び出され、軸制御ステップシーケンスが常にサイクル実行されています。
結果
Done!PN/IE_1(G2_PLC_1) と DP-NORM(simco2) は、緑線で接続されており、通信経路は確立されていることを示しています(通常、緑線は正常接続)。
こちらの動画で動作確認できます。