ロボット通信 - 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 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 シリアルポートの設定
ビジョンシステムに接続している間 (ビジョンシステムはオフライン) に、次の手順に従ってください。
-
[センサ] メニューで、[シリアルポートの設定] をクリックします。
-
[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) を使用して、シリアルデバイスに接続してください。 -
[シリアルポートの設定] ダイアログで、次のプロパティを設定します。
- [ビット/秒]: 115200
- [データビット]: 8 (CIO-1400 を使用する場合のデフォルト設定)
- [ストップビット]: 1 (CIO-1400 を使用する場合のデフォルト設定)
- [パリティ]: なし
- [フロー制御]: なし
- [モード]: Native
- [固定長の入力]: 無効
- [入力終端記号]: 13
- [出力終端記号]: 13
- ダイアログで、ビジョンシステムに物理的に接続されている I/O モジュールの横に「(接続済み)」というメッセージが表示されていることを確認します。
- [OK] をクリックします。
In-Sight ジョブの設定
- [ファイル] メニューから、新規ジョブを作成します。
- AcquireImage プロパティシート (セル A0 をダブルクリック) で、次のパラメータを設定します。
- トリガ = 外部
- 手動 = ON
- セル A2 を選択し、「ExtractBlobs」と入力して Enter キーを押します (この時点で、ExtractBlobs プロパティシートが表示されます)。
- [OK] をクリックします (パラメータはすべて、デフォルト設定値のままになります)。
- セル A4 を選択し、パレット の [スニペット] タブから、[Communication] → [Robots] → [ABB.cxd] スニペットをスプレッドシートに挿入します。
- 次のように座標セル参照を定義します。
- X: C6 をダブルクリック、C2 をダブルクリック
- Y: D6 をダブルクリック、D2 をダブルクリック
- 角度: E6 をダブルクリック、E2 をダブルクリック
- [手動トリガ] アイコンを数回クリックし、ExtractBlobs 関数からのデータが変化していることを確認します。
- ジョブを保存します。
- ビジョンシステムをオンラインにします。
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 ジョブの設定
- [ファイル] メニューから、新規ジョブを作成します。
- AcquireImage プロパティシート (セル A0 をダブルクリック) で、次のパラメータを設定します。
- トリガ = 外部
- 手動 = ON
- セル A2 を選択し、「ExtractBlobs」と入力して Enter キーを押します (この時点で、ExtractBlobs プロパティシートが表示されます)。
- [OK] をクリックします (パラメータはすべて、デフォルト設定値のままになります)。
- セル A4 を選択し、パレット の [スニペット] タブから、[Communication] → [Robots] → [ABB.cxd] スニペットをスプレッドシートに挿入します。
- 次のように座標セル参照を定義します。
- X: C6 をダブルクリック、C2 をダブルクリック
- Y: D6 をダブルクリック、D2 をダブルクリック
- 角度: E6 をダブルクリック、E2 をダブルクリック
トラブルシューティング
ハイパーターミナルとのシリアル接続
In-Sight シリアルポートの設定
ビジョンシステムに接続している間 (ビジョンシステムはオフライン) に、次の手順に従ってください。
-
[センサ] メニューで、[シリアルポートの設定] をクリックします。
-
[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) を使用して、シリアルデバイスに接続してください。 -
[シリアルポートの設定] ダイアログで、次のプロパティを設定します。
- [ビット/秒]: 115200
- [データビット]: 8 (CIO-1400 を使用する場合のデフォルト設定)
- [ストップビット]: 1 (CIO-1400 を使用する場合のデフォルト設定)
- [パリティ]: なし
- [フロー制御]: なし
- [モード]: Native
- [固定長の入力]: 無効
- [入力終端記号]: 13
- [出力終端記号]: 13
- ダイアログで、ビジョンシステムに物理的に接続されている I/O モジュールの横に「(接続済み)」というメッセージが表示されていることを確認します。
- [OK] をクリックします。
テストジョブの設定
- [ファイル] メニューから、新規ジョブを作成します。
- AcquireImage プロパティシート (セル A0 をダブルクリック) で、次のパラメータを設定します。
- トリガ = 外部
- 手動 = ON
- セル A2 を選択し、「ExtractBlobs」と入力して Enter キーを押します (この時点で、ExtractBlobs プロパティシートが表示されます)。
- [OK] をクリックします (パラメータはすべて、デフォルト設定値のままになります)。
- セル A4 を選択し、「FindBlobs」と入力して Enter キーを押します (この時点で、FindBlobs プロパティシートが表示されます)。
- ブロブパラメータについてはセル B2 を参照します。
- [OK] をクリックします。
- [手動トリガ] アイコンを数回クリックし、データが変化していることを確認します。
- ビジョンシステムをオンラインにします。
In-Sight ビジョンシステムへの接続
- Windows で、[スタート] → [すべてのプログラム] → [アクセサリ] → [通信] → [ハイパーターミナル] をクリックします。
- 新しい接続を生成します ([ファイル] → [新しい接続])。
- [ポート名]: COM1
- [ビット/秒]: 115200
- [データビット]: 8
- [パリティ]: なし
- [ストップビット]: 1
- [フロー制御]: なし
- [ファイル] → [プロパティ] → [設定] をクリックします。
- [エミュレーション]: ANSI
- [ASCII 設定] の表示を見やすくするため次のように設定します。
- 行末に改行文字を付ける
- ローカル エコーする
- 着信データに改行文字を付ける
- 右端で折り返す
- [接続] をクリックします。
- ビジョンシステムのユーザ名とパスワードを入力します (デフォルトのユーザ名は「admin」、パスワードは空白)。
- 「User Logged In」と表示されます。
- 「SW8」と入力し、Enter キーを押します (手動トリガが実行され、画像が変化します)。
- 「GVC004」と入力し、Enter キーを押します (セル C4 に保存されている値が取得されます)。
Telnet による Ethernet 接続の確認
テストジョブの設定
- [ファイル] メニューから、新規ジョブを作成します。
- AcquireImage プロパティシート (セル A0 をダブルクリック) で、次のパラメータを設定します。
- トリガ = 外部
- 手動 = ON
- セル A2 を選択し、「ExtractBlobs」と入力して Enter キーを押します (この時点で、ExtractBlobs プロパティシートが表示されます)。
- [OK] をクリックします (パラメータはすべて、デフォルト設定値のままになります)。
- セル A4 を選択し、「FindBlobs」と入力して Enter キーを押します (この時点で、FindBlobs プロパティシートが表示されます)。
- ブロブパラメータについてはセル B2 を参照します。
- [OK] をクリックします。
- [手動トリガ] アイコンを数回クリックし、データが変化していることを確認します。
- ビジョンシステムをオンラインにします。
In-Sight ビジョンシステムへの接続
- Windows で、[スタート] → [ファイル名を指定して実行] をクリックします。
- [ファイル名を指定して実行] ウィンドウで、次のように入力します。telnet < センサの IP アドレス > (例: telnet 10.27.80.66)
- [OK] をクリックします。
- ビジョンシステムのユーザ名とパスワードを入力します (デフォルトのユーザ名は「admin」、パスワードは空白)。
- 「User Logged In」と表示されます。
- 「SW8」と入力し、Enter キーを押します (手動トリガが実行され、画像が変化します)。
- 「GVC004」と入力し、Enter キーを押します (セル C4 に保存されている値が取得されます)。
- telnet セッションを切断するには、Ctrl + ] キーを押します。
- 「quit」と入力し、ウィンドウを閉じます。