ロボット通信 - ABB ロボットコントローラ

概要

このトピックでは、In-Sight ビジョンシステムから ABB ロボットコントローラに接続し、データを転送する手順の概要を説明します。このトピックでは、ロボットコントローラは、画像取り込みとデータ転送を制御するデバイスを指しています。  一般に、In-Sight ネイティブモードコマンドを使用するロボットコントローラは、画像を取り込み、処理するようにビジョンシステムをトリガし、その後、ビジョンシステムに特定のデータを要求します。データは、シリアル通信または Ethernet 通信を使用して転送できます。

必要なハードウェア

  • In-Sight ビジョンシステム (In-Sight Micro 1000 シリーズ、In-Sight 5000 シリーズ、In-Sight 7000 シリーズ、または In-Sight 8000 シリーズのビジョンシステム)
  • シリアル通信の場合、I/O モジュール、ブレークアウトケーブル (In-Sight 5000 シリーズまたは In-Sight 7000 シリーズのみ)。

    :  
    • シリアルベースのロボット通信がブレークアウトケーブルでサポートされていますが (In-Sight 5000 シリーズまたは In-Sight 7000 シリーズのみ)、セットアップが容易なので I/O モジュールを推奨します。
    • In-Sight Micro 1000 シリーズビジョンシステムは、CIO-MICRO または CIO-MICRO-CC I/O モジュールに接続している場合のみ、シリアル通信をサポートします。
    • In-Sight 70xx ~ 74xx シリーズ上でシリアル通信を有効にするには、ブレークアウトケーブルを使用するか、CIO-MICRO または CIO-MICRO-CC I/O モジュールを使用します。ブレークアウトケーブルに接続している場合 (I/O モジュールに接続されていない場合)、ディスクリート入出力ライン (各 1) をシリアル受信およびシリアル送信に設定することができます。詳細については、「In-Sight 70xx ~ 74xx ビジョンシステムのシリアル通信を有効にするには」を参照してください。
    • In-Sight Micro 8000 シリーズビジョンシステムは、CIO-MICRO I/O モジュールに接続している場合のみ、シリアル通信をサポートします。
    • CIO-WENET イーサネット I/O モジュールはシリアル通信をサポートしていません。
  • DB9 シリアルケーブルまたは Ethernet ケーブル
  • PC
  • ABB ロボットコントローラ (IRC5、S4Cplus、または S4P+)
  • PC インタフェース (Ethernet 通信用に推奨)
  • ビジョンシステムインタフェース (シリアル通信用)

必要なソフトウェア

  • Cognex In-Sight Explorer バージョン 3.3.0 以降
  • Cognex In-Sight ファームウェアバージョン 3.3.0 以降
  • ABB RAPID プログラミング言語

シリアル通信

ロボットコントローラの RAPID コード

MODULE VISION
 ! DATA DECLARATIONS
 
  PERS num nXOffs:=0;
     PERS num nYOffs:=0;
  PERS num nAngle:=0;
  VAR string stReceived;
  VAR iodev ComChannel;
  PERS tooldata tGripper:=[TRUE,[0,0,0],[0,0,0,1]],
  [5,[0,0,],[1,0,0,0],0,0,0]];
  PERS tooldata tVision:=[TRUE,[[0,0,0],[0,0,0,1]],
  [5,[0, 0, 0],[1,0,0,0],0,0,0]];
  CONST robtarget pHome:=[[0,0,0],[0,0,0,1],
  [-2,0,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
  CONST robtarget pVisionPos:=[[0,0,0],[0,0,0,1],
  [-2,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
 
 
 
  PROC Main()
    MoveL pHome,v1000,fine,tVision;
    GetVisionData;
    MoveL Reltool(pVisionPos,nXOffs,nYOffs,0\Rz:=nAngle),v500,
    fine,tGripper;
    WaitTime 3;
    MoveL pHome,v1000,fine,tVision;
  ENDPROC
 
  PROC GetVisionData()
    VAR string XData:="";
    VAR string YData:="";
    VAR string AngleData:="";
    VAR num NumCharacters:=9;
    VAR bool bOK;
 
    nXOffs:=0;
    nYOffs:=0;
    nAngle:=0;
 
    Close ComChannel;
    Open "COM2", ComChannel \Append\Bin;
    ClearIOBuff ComChannel;
    WaitTime\InPos, 0.5;
 
    ! Instruction In-Sight to Acquire an Image
    ! and not return until complete
    WriteStrBin ComChannel, "sw8\0D";
    CheckStatus;
 
    ! Get the value in cell C7
    WriteStrBin ComChannel, "gvc007\0D";
    CheckStatus;
 
    ! Read the X-offset
    XData:= ReadStrbin (ComChannel, NumCharacters \Time:=5);
 
    ! Read the Y-offset
    YData:= ReadStrbin (ComChannel, NumCharacters \Time:=5);
 
    ! Read the Angle-offset
    AngleData:= ReadStrbin (ComChannel, NumCharacters \Time:=5);
 
    !Closes Serial Channel "COM2"
    Close ComChannel;
 
    !Convert String Data To Numerical Data
    bOK:=StrToVal(XData,nXOffs);
    bOK:=StrToVal(YData,nYOffs);
    bOK:=StrToVal(AngleData,nAngle);
  ENDPROC
 
  PROC CheckStatus()
    stReceived:=ReadStrBin(ComChannel,1\Time:=5);
    IF stReceived<>"1" THEN
      TPErase;
      TPWrite "Vision Error!";
    Stop;
  ENDIF
  ClearIOBuff ComChannel;
  ENDPROC
 
ENDMODULE

In-Sight シリアルポートの設定

ビジョンシステムに接続している間 (ビジョンシステムはオフライン) に、次の手順に従ってください。

  1. [センサ] メニューで、[シリアルポートの設定] をクリックします。

  2. [I/O モジュール] ボタンをクリックして [I/O モジュールの設定] ダイアログを開き、I/O モジュールを設定します。[OK] ボタンをクリックして [I/O モジュールの設定] ダイアログを閉じ、[シリアルポートの設定] ダイアログに戻ります。

    :  In-Sight 70xx ~ 74xx シリーズのビジョンシステムが CIO-MICRO または CIO-MICRO-CC I/O モジュールを使用するように設定されている場合、ブレークアウトケーブルの RS-232 TRANSMIT ピンと RS-232 RECEIVE ピンは無効です。I/O モジュールの RS-232 OUT ポート (DB9) を使用して、シリアルデバイスに接続してください。
  3. [シリアルポートの設定] ダイアログで、次のプロパティを設定します。

    • [ビット/秒]: 115200
    • [データビット]: 8 (CIO-1400 を使用する場合のデフォルト設定)
    • [ストップビット]: 1 (CIO-1400 を使用する場合のデフォルト設定)
    • [パリティ]: なし
    • [フロー制御]: なし
    • [モード]: Native
    • [固定長の入力]: 無効
    • [入力終端記号]: 13
    • [出力終端記号]: 13
  4. ダイアログで、ビジョンシステムに物理的に接続されている I/O モジュールの横に「(接続済み)」というメッセージが表示されていることを確認します。
  5. [OK] をクリックします。

In-Sight ジョブの設定

  1. [ファイル] メニューから、新規ジョブを作成します。
  2. AcquireImage プロパティシート (セル A0 をダブルクリック) で、次のパラメータを設定します。
    • トリガ = 外部
    • 手動 = ON
  3. セル A2 を選択し、「ExtractBlobs」と入力して Enter キーを押します (この時点で、ExtractBlobs プロパティシートが表示されます)。
  4. [OK] をクリックします (パラメータはすべて、デフォルト設定値のままになります)。
  5. セル A4 を選択し、パレット の [スニペット] タブから、[Communication] → [Robots] → [ABB.cxd] スニペットをスプレッドシートに挿入します。
  6. 次のように座標セル参照を定義します。
    • X: C6 をダブルクリック、C2 をダブルクリック
    • Y: D6 をダブルクリック、D2 をダブルクリック
    • 角度: E6 をダブルクリック、E2 をダブルクリック
  7. [手動トリガ] アイコンを数回クリックし、ExtractBlobs 関数からのデータが変化していることを確認します。
  8. ジョブを保存します。
  9. ビジョンシステムをオンラインにします。

Ethernet 通信

ロボットコントローラの設定

次のコードの例は、IP アドレス 192.168.0.1 の In-Sight ビジョンシステムに接続しているコントローラを示しています。ビジョンシステムの IP アドレスを確認するには、In-Sight Explorer の [In-Sight ネットワーク] ツリーでビジョンシステム名を右クリックして、[プロパティ] を選択します。

ロボットコントローラの RAPID コード
MODULE VISION
  ! DATA DECLARATIONS
 
  PERS num nXOffs:=0;
  PERS num nYOffs:=0;
  PERS num nAngle:=0;
  VAR string stReceived;
  VAR socketdev ComSocket;
  PERS tooldata tGripper:=[TRUE,[0,0,0],[0,0,0,1]],
  [5,[0,0,],[1,0,0,0],0,0,0]];
  PERS tooldata tVision:=[TRUE,[[0,0,0],[0,0,0,1]],
  [5,[0, 0, 0],[1,0,0,0],0,0,0]];
  CONST robtarget pHome:=[[0,0,0],[0,0,0,1],
  [-2,0,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
  CONST robtarget pVisionPos:=[[0,0,0],[0,0,0,1],
  [-2,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
 
 
  PROC Main()
    ConnectToInSight ;
    MoveL pHome,v1000,fine,tVision;
    GetVisionData;
    MoveL Reltool(pVisionPos,nXOffs,nYOffs,0\Rz:=nAngle),v500,
    fine,tGripper;
    WaitTime 3;
    MoveL pHome,v1000,fine,tVision;
    GetVisionData;
    MoveL Reltool(pVisionPos,nXOffs,nYOffs,0\Rz:=nAngle),v500,
    fine,tGripper;
    WaitTime 3;
    MoveL pHome,v1000,fine,tVision;
    SocketClose ComSocket;
  ENDPROC
 
 
  PROC GetVisionData()
    VAR string XData:="";
    VAR string YData:="";
    VAR string AngleData:="";
    VAR num NumCharacters:=9;
    VAR bool bOK;
 
    nXOffs:=0;
    nYOffs:=0;
    nAngle:=0;
 
    status := SocketGetStatus(ComSocket);
    IF status <> SOCKET_CONNECTED THEN
      TPErase;
      TPWrite "Vision Sensor Not Connected";
      Return;
    ENDIF
 
    ! Instruct In-Sight to Acquire an Image
    ! and not return until complete
    SocketSend ComSocket \Str:="sw8\0d\0a";
    CheckStatus;
 
    SocketReceive ComSocket \Str:=stReceived;
 
    ! Get the value in cell C7
    SocketSend ComSocket \Str:="gvc007\0d\0a";
 
    ! Read the data
    SocketReceive ComSocket \Str:=stReceived;
 
    ! Parse the data string
    XData:= StrPart(stReceived, 3, NumCharacters);
    YData:= StrPart(stReceived, NumCharacters, NumCharacters);
    AngleData:= StrPart(stReceived, 2*NumCharacters, NumCharacters);
 
    !Convert String Data To Numerical Data
    bOK:=StrToVal(XData,nXOffs);
    bOK:=StrToVal(YData,nYOffs);
    bOK:=StrToVal(AngleData,nAngle);
    SocketClose ComSocket;
  ENDPROC
 
 
  PROC CheckStatus()
    SocketReceive ComSocket \Str:=stReceived;
    IF stReceived <> "1\0d\0a" THEN
      TPErase;
      TPWrite "Vision Error!";
      Stop;
    ENDIF
  ENDPROC
 
 
  PROC ConnectToInSight()
    var num found:=0;
    var num length:=0;
    SocketCreate ComSocket;
    SocketConnect ComSocket, "192.168.0.1", 23;
 
  SocketReceive ComSocket \Str:=stReceived;
    Length:=strlen(stReceived);
    found:=strmatch(stReceived,1,"User:");
    IF found = length+1 THEN
      TPErase;
      TPWrite "Vision Login Error (User Prompt)";
      Stop;
    ENDIF
 
    ! Send the Username
    SocketSend ComSocket \Str:="admin\0d\0a";
 
    SocketReceive ComSocket \Str:=stReceived;
 
    IF stReceived <> "Password: " THEN
      TPErase;
      TPWrite "Vision Login Error (Password Prompt)";
      Stop;
    ENDIF
 
    ! Send Password
    SocketSend ComSocket \Str:="\0d\0a";
 
    SocketReceive ComSocket \Str:=stReceived;
 
    IF stReceived <> "User Logged In\0d\0a" THEN
      TPErase;
      TPWrite "Vision Login Error (Final Login)";
      Stop;
    ENDIF
  ENDPROC
 
ENDMODULE

In-Sight ジョブの設定

  1. [ファイル] メニューから、新規ジョブを作成します。
  2. AcquireImage プロパティシート (セル A0 をダブルクリック) で、次のパラメータを設定します。
  • トリガ = 外部
  • 手動 = ON
  1. セル A2 を選択し、「ExtractBlobs」と入力して Enter キーを押します (この時点で、ExtractBlobs プロパティシートが表示されます)。
  2. [OK] をクリックします (パラメータはすべて、デフォルト設定値のままになります)。
  3. セル A4 を選択し、パレット の [スニペット] タブから、[Communication] → [Robots] → [ABB.cxd] スニペットをスプレッドシートに挿入します。
  4. 次のように座標セル参照を定義します。
  • X: C6 をダブルクリック、C2 をダブルクリック
  • Y: D6 をダブルクリック、D2 をダブルクリック
  • 角度: E6 をダブルクリック、E2 をダブルクリック
  1. [手動トリガ] アイコンを数回クリックし、ExtractBlobs 関数からのデータが変化していることを確認します。
  2. ジョブを保存します。
  3. ビジョンシステムをオンラインにします。

トラブルシューティング

ハイパーターミナルとのシリアル接続

In-Sight シリアルポートの設定

ビジョンシステムに接続している間 (ビジョンシステムはオフライン) に、次の手順に従ってください。

  1. [センサ] メニューで、[シリアルポートの設定] をクリックします。

  2. [I/O モジュール] ボタンをクリックして [I/O モジュールの設定] ダイアログを開き、I/O モジュールを設定します。[OK] ボタンをクリックして [I/O モジュールの設定] ダイアログを閉じ、[シリアルポートの設定] ダイアログに戻ります。

    :  In-Sight 70xx ~ 74xx シリーズのビジョンシステムが CIO-MICRO または CIO-MICRO-CC I/O モジュールを使用するように設定されている場合、ブレークアウトケーブルの RS-232 TRANSMIT ピンと RS-232 RECEIVE ピンは無効です。I/O モジュールの RS-232 OUT ポート (DB9) を使用して、シリアルデバイスに接続してください。
  3. [シリアルポートの設定] ダイアログで、次のプロパティを設定します。

    • [ビット/秒]: 115200
    • [データビット]: 8 (CIO-1400 を使用する場合のデフォルト設定)
    • [ストップビット]: 1 (CIO-1400 を使用する場合のデフォルト設定)
    • [パリティ]: なし
    • [フロー制御]: なし
    • [モード]: Native
    • [固定長の入力]: 無効
    • [入力終端記号]: 13
    • [出力終端記号]: 13
  4. ダイアログで、ビジョンシステムに物理的に接続されている I/O モジュールの横に「(接続済み)」というメッセージが表示されていることを確認します。
  5. [OK] をクリックします。

テストジョブの設定 

  1. [ファイル] メニューから、新規ジョブを作成します。
  2. AcquireImage プロパティシート (セル A0 をダブルクリック) で、次のパラメータを設定します。
    • トリガ = 外部
    • 手動 = ON
  3. セル A2 を選択し、「ExtractBlobs」と入力して Enter キーを押します (この時点で、ExtractBlobs プロパティシートが表示されます)。
  4. [OK] をクリックします (パラメータはすべて、デフォルト設定値のままになります)。
  5. セル A4 を選択し、「FindBlobs」と入力して Enter キーを押します (この時点で、FindBlobs プロパティシートが表示されます)。
  6. ブロブパラメータについてはセル B2 を参照します。
  7. [OK] をクリックします。
  8. [手動トリガ] アイコンを数回クリックし、データが変化していることを確認します。
  9. ビジョンシステムをオンラインにします。

In-Sight ビジョンシステムへの接続

  1. Windows で、[スタート] → [すべてのプログラム] → [アクセサリ] → [通信] → [ハイパーターミナル] をクリックします。
  2. 新しい接続を生成します ([ファイル] → [新しい接続])。
    • [ポート名]: COM1
    • [ビット/秒]: 115200
    • [データビット]: 8
    • [パリティ]: なし
    • [ストップビット]: 1
    • [フロー制御]: なし
  3. [ファイル] → [プロパティ] → [設定] をクリックします。
    • [エミュレーション]: ANSI
    • [ASCII 設定] の表示を見やすくするため次のように設定します。
      • 行末に改行文字を付ける
      • ローカル エコーする
      • 着信データに改行文字を付ける
      • 右端で折り返す
  4. [接続] をクリックします。
  5. ビジョンシステムのユーザ名とパスワードを入力します (デフォルトのユーザ名は「admin」、パスワードは空白)。
  6. 「User Logged In」と表示されます。
  7. SW8」と入力し、Enter キーを押します (手動トリガが実行され、画像が変化します)。
  8. GVC004」と入力し、Enter キーを押します (セル C4 に保存されている値が取得されます)。

Telnet による Ethernet 接続の確認

テストジョブの設定

  1. [ファイル] メニューから、新規ジョブを作成します。
  2. AcquireImage プロパティシート (セル A0 をダブルクリック) で、次のパラメータを設定します。
    • トリガ = 外部
    • 手動 = ON
  3. セル A2 を選択し、「ExtractBlobs」と入力して Enter キーを押します (この時点で、ExtractBlobs プロパティシートが表示されます)。
  4. [OK] をクリックします (パラメータはすべて、デフォルト設定値のままになります)。
  5. セル A4 を選択し、「FindBlobs」と入力して Enter キーを押します (この時点で、FindBlobs プロパティシートが表示されます)。
  6. ブロブパラメータについてはセル B2 を参照します。
  7. [OK] をクリックします。
  8. [手動トリガ] アイコンを数回クリックし、データが変化していることを確認します。
  9. ビジョンシステムをオンラインにします。

In-Sight ビジョンシステムへの接続

  1. Windows で、[スタート] → [ファイル名を指定して実行] をクリックします。
  2. [ファイル名を指定して実行] ウィンドウで、次のように入力します。telnet < センサの IP アドレス > (例: telnet 10.27.80.66)
  3. [OK] をクリックします。
  4. ビジョンシステムのユーザ名とパスワードを入力します (デフォルトのユーザ名は「admin」、パスワードは空白)。
  5. 「User Logged In」と表示されます。
  6. SW8」と入力し、Enter キーを押します (手動トリガが実行され、画像が変化します)。
  7. GVC004」と入力し、Enter キーを押します (セル C4 に保存されている値が取得されます)。
  8. telnet セッションを切断するには、Ctrl + ] キーを押します。
  9. 「quit」と入力し、ウィンドウを閉じます。