KUKAインライン測定サンプルプログラム

現在ご覧いただいているのは最新版の内容です(V1.3.0)。異なるバージョンを参照する場合は、画面右上のボタンから切り替えが可能です。

■ ご利用中のバージョンが分からない場合や、サポートが必要な場合はお気軽にサポート窓口までご連絡ください。

プログラム概要

機能

ユーザはロボット側からトリガーをかけて Mech-Metrics を起動し、Mech-MSR を使用して測定を行い、Mech-Metrics へ測定結果を返す

ファイルパス

Mech-MSR および Mech-Metrics ソフトウェアのインストールディレクトリMech-MSR/center/MSR_Interface/KUKA/MSR_METRICS_SAMPLE.src

必要なリソース

Mech-MSR ソリューションと Mech-Metrics プロジェクト

利用の前提条件

  • インライン測定定システム側の準備:

    • 現在のワークが Mech-Metrics で Mech-MSR ソリューションに関連付けられていること

    • 現在の特徴が Mech-Metrics で Mech-MSR プロジェクトにバインドされていること

    • Mech-MSR ソリューションとプロジェクトが Mech-MSR で開かれていること

  • ロボット側の準備:

    • KUKA標準インターフェース通信設定が完了していること

    • KUKA自動キャリブレーションが完了していること

    • 測定位置がティーチング済みであること

    • ロボット側でロボットを最初の測定予定位置に移動していること

    • 測定開始前にロボットとカメラを30分間予熱済みであること

    • 測定を開始する前に、外部の照明環境と温度が安定していること

本サンプルプログラムは、あくまで例示用のプログラムです。ユーザーは実際の状況に応じて変更する必要があり、プログラムを直接使用しないでください。

プログラム説明

以下は、MSR_METRICS_SAMPLE サンプルプログラムのコードと関連する説明です。

&ACCESS RVP
&PARAM EDITMASK = *
&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe
DEF MSR_METRICS_SAMPLE( )
  ;FUNCTION: Test Metrics
  INT MSR_Continuous_Mode,Measure_Result,MSR_Status
  MSR_Continuous_Mode = 0
  Measure_Result = 0
  Failed_Count[1] = 0
  Failed_Count[2] = 0
  Failed_Count[3] = 0
  MSR_Init_Socket("XML_Kuka_MSR",20,30,60)
  MSR_Start_Measure(1,"Piece01","ABC",2,10,20,30,40,50,60,70,80,MSR_Continuous_Mode,MSR_Status)
  IF MSR_Status <> 8100 THEN
    MSR_LOG("Run failed!")
    HALT;
  ENDIF
  MSR_Set_Piece_Info(1,"Piece01",MSR_Status)
  IF MSR_Status <> 8103 THEN
    MSR_LOG("Run failed!")
    HALT;
  ENDIF
;FOLD PTP P3 CONT Vel=100 % PDAT3 Tool[1] Base[0];%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=P3; Kuka.BlendingEnabled=True; Kuka.MoveDataPtpName=PDAT3; Kuka.VelocityPtp=100; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=PTP
;ENDFOLD
$BWDSTART = FALSE
PDAT_ACT = PPDAT3
FDAT_ACT = FP3
BAS(#PTP_PARAMS, 100.0)
;SET_CD_PARAMS (0)
PTP XP3 C_Dis
;ENDFOLD
  MSR_Measure_Feature(1,1,MSR_Status)
  IF MSR_Status <> 8101 THEN
    MSR_LOG("Run failed!")
    HALT;
  ENDIF
;FOLD PTP P2 CONT Vel=100 % PDAT2 Tool[1] Base[0];%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=P2; Kuka.BlendingEnabled=True; Kuka.MoveDataPtpName=PDAT2; Kuka.VelocityPtp=100; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=PTP
;ENDFOLD
$BWDSTART = FALSE
PDAT_ACT = PPDAT2
FDAT_ACT = FP2
BAS(#PTP_PARAMS, 100.0)
;SET_CD_PARAMS (0)
PTP XP2 C_Dis
;ENDFOLD
  MSR_Measure_Feature(1,1,MSR_Status)
  IF MSR_Status <> 8101 THEN
    MSR_LOG("Run failed!")
    HALT;
  ENDIF
;FOLD PTP P4 CONT Vel=100 % PDAT4 Tool[1] Base[0];%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.basistech.inlineforms.movement.old; Kuka.IsGlobalPoint=False; Kuka.PointName=P4; Kuka.BlendingEnabled=True; Kuka.MoveDataPtpName=PDAT4; Kuka.VelocityPtp=100; Kuka.CurrentCDSetIndex=0; Kuka.MovementParameterFieldEnabled=True; IlfCommand=PTP
;ENDFOLD
$BWDSTART = FALSE
PDAT_ACT = PPDAT4
FDAT_ACT = FP4
BAS(#PTP_PARAMS, 100.0)
;SET_CD_PARAMS (0)
PTP XP4 C_Dis
;ENDFOLD
  MSR_Measure_Feature(1,1,MSR_Status)
  IF MSR_Status <> 8101 THEN
    MSR_LOG("Run failed!")
    HALT;
  ENDIF
  MSR_End_Measure(1,Measure_Result,Failed_Count[],MSR_Status)
  IF MSR_Status <> 8102 THEN
    MSR_LOG("Run failed!")
    HALT;
  ENDIF
  MSR_View_Piece_Data(1,"Piece01",MSR_Status)
  IF MSR_Status <> 8104 THEN
    MSR_LOG("Run failed!")
    HALT;
  ENDIF
  WAIT SEC 1
END

下表は上記プログラムのロジック解説です。上記のコードにおいて、コメントアウトされている行は「;」から始まります。下表ではコメントアウトされた内容については説明しません。

フロー コードと説明

通信初期化

INT MSR_Continuous_Mode,Measure_Result,MSR_Status
MSR_Continuous_Mode = 0
Measure_Result = 0
Failed_Count[1] = 0
Failed_Count[2] = 0
Failed_Count[3] = 0
MSR_Init_Socket("XML_Kuka_MSR",20,30,60)
  • INT MSR_Continuous_Mode, Measure_Result, MSR_Status:3つの整数型変数MSR_Continuous_Mode、Measure_Result、およびMSR_Statusを宣言する

    • MSR_Continuous_Mode = 0:変数MSR_Continuous_Modeを0に初期化し、実行モードを保存する

    • Measure_Result = 0:変数Measure_Resultを0に初期化し、最終的な測定結果を保存する

    • MSR_Status:コマンドから返されるステータスコードを保存し、重要コマンドのたびに検証する

    • Failed_Count[1] = 0:配列Failed_Countの1番目の要素を0に初期化し、ワークの公差1を超えた測定項目の数量を保存する

    • Failed_Count[2] = 0:配列Failed_Countの2番目の要素を0に初期化し、ワークの公差2を超えた測定項目の数量を保存する

    • Failed_Count[3] = 0:配列Failed_Countの3番目の要素を0に初期化し、ワークの公差3を超えた測定項目の数量を保存する

  • MSR_Init_Socket("XML_Kuka_MSR",20,30,60):インライン測定システムとロボット間のTCPプロトコルによる通信接続を確立する

    • "XML_Kuka_MSR":ネットワーク設定ファイル名

    • 20:通信ステータスに対応する信号番号(XML設定ファイルのパラメータと一致)

    • 30:受信ステータスに対応する信号番号(XML設定ファイルのパラメータと一致)

    • 60:通信タイムアウト待ち時間(単位:秒)

測定開始

MSR_Start_Measure(1,"Piece01","ABC",2,10,20,30,40,50,60,70,80,MSR_Continuous_Mode,MSR_Status)
IF MSR_Status <> 8100 THEN
  MSR_LOG("Run failed!")
  HALT;
ENDIF
  • MSR_Start_Measure(1,"Piece01","ABC",2,10,20,30,40,50,60,70,80,MSR_Continuous_Mode,MSR_Status):測定タスクを開始し、カスタムパラメータを設定する

    • 1:ワーク番号

    • "Piece01":ワーク名

    • "ABC":ワークSN

    • 2:品質検査モード(1 は全数検査、2 は抜取検査を表す)

    • 10,20,30,40,50,60,70,80:設定されたカスタムパラメータ

    • MSR_Continuous_Mode:Mech-Metrics ら返された実行モードを保存する

    • MSR_Status:コマンドから返されるステータスコードを保存する

  • IF MSR_Status <> 8100 THEN …​ ENDIF:ステータスコードが8100ではない場合、測定開始コマンドの実行失敗を意味し、ロボット側でログを記録してプログラムを停止する

    ここで設定する検査モードおよびカスタムパラメータは、Mech-Metrics で設定した内容と一致している必要があります。

Mech-Metrics にワークを入力

MSR_Set_Piece_Info(1,"Piece01",MSR_Status)
IF MSR_Status <> 8103 THEN
  MSR_LOG("Run failed!")
  HALT;
ENDIF
  • MSR_Set_Piece_Info(1,"Piece01",MSR_Status):Mech-Metrics にワークSN「Piece01」のワークを入力ことを指定し、コマンドのステータスコードを取得する

    • 1:ワーク番号

    • "Piece01":ワークSN

  • IF MSR_Status <> 8103 THEN …​ ENDIF:ステータスコードが8103ではない場合、ワーク情報の入力失敗を意味し、ロボット側でログを記録してプログラムを停止する

ロボットを指定位置へ移動させ、特徴測定を行う

$BWDSTART = FALSE
PDAT_ACT = PPDAT3
FDAT_ACT = FP3
BAS(#PTP_PARAMS, 100.0)
PTP XP3 C_Dis
MSR_Measure_Feature(1,1,MSR_Status)
IF MSR_Status <> 8101 THEN
   MSR_LOG("Run failed!")
   HALT;
ENDIF
$BWDSTART = FALSE
PDAT_ACT = PPDAT2
FDAT_ACT = FP2
BAS(#PTP_PARAMS, 100.0)
PTP XP2 C_Dis
MSR_Measure_Feature(1,1,MSR_Status)
IF MSR_Status <> 8101 THEN
   MSR_LOG("Run failed!")
   HALT;
ENDIF
$BWDSTART = FALSE
PDAT_ACT = PPDAT4
FDAT_ACT = FP4
BAS(#PTP_PARAMS, 100.0)
PTP XP4 C_Dis
MSR_Measure_Feature(1,1,MSR_Status)
IF MSR_Status <> 8101 THEN
   MSR_LOG("Run failed!")
   HALT;
ENDIF
  • $BWDSTART = FALSE:逆方向パス補正を無効にする。すなわち、実行中にパスのバックトラッキングを行わない

  • PDAT_ACT = PPDAT3:現在の点から点への動作のパラメータをPPDAT3に設定する。速度、加速度、および遷移設定を含む。PDAT_ACT = PPDAT2およびPDAT_ACT = PPDAT4も同様

  • FDAT_ACT = FP3:現在位置の座標系データをFP3に設定し、ロボットの動作基準を定義する。FDAT_ACT = FP2およびFDAT_ACT = FP4も同様

  • BAS(#PTP_PARAMS, 100.0):点から点への動作の基本パラメータを適用、速度100%

  • PTP XP3 C_Dis:ロボットはPTP方式でXP3点に正確に移動する。PTP XP2 C_DisおよびPTP XP4 C_Disも同様

  • MSR_Measure_Feature(1,1,MSR_Status):ロボット側から、ワーク番号1、測定対象の特徴の測定番号1となる Mech-MSR プロジェクトの実行をトリガーし、コマンドのステータスコードを取得する

    • 1番目の「1」:ワーク番号

    • 2番目の「1」:特徴測定番号

  • IF MSR_Status <> 8101 THEN …​ ENDIF:特徴測定をトリガーするたびに、ステータスコードを確認する。ステータスコードが8101ではない場合、ロボット側でログを記録してプログラムを停止する

ユーザーは事前に測定位置(XP2、XP3、XP4)をティーチングしておく必要があります。具体的なティーチング方法については、自動キャリブレーションにおけるKUKA自動キャリブレーション篇のキャリブレーションの初期位置を設定部分の操作をご参照ください。

測定終了

MSR_End_Measure(1,Measure_Result,Failed_Count[],MSR_Status)
IF MSR_Status <> 8102 THEN
  MSR_LOG("Run failed!")
  HALT;
ENDIF
  • MSR_End_Measure(1,Measure_Result,Failed_Count[],MSR_Status):測定を終了し、測定結果をMeasure_Resultに保存してFailed_Count配列を更新すると同時に、コマンドのステータスコードを取得する

  • IF MSR_Status <> 8102 THEN …​ ENDIF:ステータスコードが8102ではない場合、測定終了コマンドの実行失敗を意味し、ロボット側でログを記録してプログラムを停止する

履歴データ照会

MSR_View_Piece_Data(1,"Piece01",MSR_Status)
IF MSR_Status <> 8104 THEN
  MSR_LOG("Run failed!")
  HALT;
ENDIF
WAIT SEC 1
END
  • MSR_View_Piece_Data(1,"Piece01",MSR_Status):外部からワークSNを入力することで、Mech-Metrics ソフトウェアのメイン画面を入力されたSNのワークのデータビューに切り替え、コマンドのステータスコードを取得する

  • IF MSR_Status <> 8104 THEN …​ ENDIF:ステータスコードが8104ではない場合、履歴データ照会の失敗を意味し、ロボット側でログを記録してプログラムを停止する

この情報は役に立ちましたか?

ご意見・ご要望がございましたら、以下よりお寄せください:

Mech-Mindは、お客様のプライバシーを重視しています

このサイトでは最高の体験を提供するために Cookie を使用しています。サイトの閲覧を続ける場合、Cookie の使用に同意したことになります。「拒否する」を選択すると、このサイトを訪れた際に追跡や記憶が行われないように単独の Cookie が使用されます。