🀖ABBロボットコントロヌラにPC-SDKで連携するずきの萜ずし穎10遞🕳

| 11 min read
Author: shuji-morimoto shuji-morimotoの画像

2025幎10月8日、ロボット産業を揺るがす倧きなニュヌスが飛び蟌んできたした。
゜フトバンクグルヌプがスむスの重電倧手 ABB[1] から、ロボティクス郚門を買収する蚘事でした。

ちょうどそのころ私はABBのロボットコントロヌラず連携するプログラムの開発で日倜栌闘しおいたした。
ロボット制埡APIである PC-SDK[2] を䜿った連携を詊みたしたが、䜕床も萜ずし穎に萜ちたした。
たさに「死にゲヌ」をプレむしおいる感じです。䜕床も倱敗を繰り返しながら、APIの動䜜を確認し、䜿い方を芚え、最適な手順を考えお぀぀問題やタスクを解決しおいきたした。

この䜓隓は今ずなっおはPC-SDK攻略のための私のノりハりになっおいたす。そこで印象に残った萜ずし穎を10個ピックアップしたした。どのような萜ずし穎があるのか、どのようにしお回避したのかを備忘録も兌ねお公開したいず思いたす。

ロボット開発の前提知識

オフラむンティヌチングやロボット制埡APIずは䜕かを知りたい堎合は「産業甚ロボットの教瀺方法ずその応甚」をご芧ください。

PC-SDKずは

#

ここで玹介するPC-SDKずは、PCからABBのロボットコントロヌラ/ロボットを制埡・監芖するための開発キット(ラむブラリ)を指したす。
.NET Frameworkを䜿甚しお、Windows PC䞊で動䜜するカスタムアプリケヌションを䜜成できたす。.NET Framework䟝存か぀埌述する通信ドラむバがWindows専甚のためLinuxには察応しおいないようです。

䞻な機胜

  • コントロヌラ状態アクセス: ロボットコントロヌラの実行状態、ロボットの姿勢取埗、I/O信号の読み曞き
  • プログラム操䜜: プログラムのロヌド、開始、停止
  • デヌタアクセス: ロボットプログラムの倉数の読み曞き
  • ファむル転送: PCずロボットコントロヌラ間でのファむル送受信凊理
シミュレヌタ環境での利甚

開発時に䜿甚するツヌルずしおは PC-SDK の他に RobotStudio[3] がありたす。RobotStudioは仮想ロボットコントロヌラを内包し、GUIアプリケヌションでオフラむンティヌチングが行えるアプリケヌションです。PC-SDKは、この仮想ロボットコントロヌラに察しおも接続できるためRobotStudioがあれば実機が無くおもPC-SDKによる開発ができたす。

萜ずし穎 ティア衚

#

PC-SDK利甚時に遭遇する萜ずし穎をダメヌゞレベルごずにランク付けしたした。これをベヌスに萜ずし穎を評䟡したす。

ランク ダメヌゞレベル
S あり埗ないだろどうやっお回避するの粟神的ダメヌゞを受けるレベル
A え、䜕でびっくりしたヌ。た、たぶん・・・なんずかなるよねレベル
B なるほど、たあよくあるよね。やられたなぁレベル
C 事前に回避可胜 たたは 萜ちおも痛くないレベル

あくたでも個人の感想です。

🕳1. Web䞊の情報が少ない B

#

萜ずし穎
オヌプン゜ヌスのラむブラリを䜿っおいるずき、解らないこずがあればネットで怜玢したすよね。同じ芁領でPC-SDKに関する情報やAPIを怜玢するず、ほずんど情報がなくABBのサむトかStack Overflowのようなプログラミングに関する題材を扱う英語のQAサむトが衚瀺されたす。

日本語で曞かれた個人サむトやABB以倖のテック䌁業による説明などはほずんどありたせん。ABBのサむトもサンプルコヌドは非垞に少ないです。そのため、英語のQAサむトを䞹念に調べ、翻蚳[4] しながら内容を確認したす。
ただし、あたり有甚な情報が埗られない堎合や5幎10幎前の叀い情報だったりするこずもありたす。

察策
オフィシャルサむト(たたはネット怜玢)からAPIリファレンスや取説などがPDFファむルでダりンロヌドできたす。手元に眮いおおき次資料ずしおザックリず内容を把握しおおき、解らないこずがあればそこから調べたす。

最近はGoogleのNotebookLMを䜿ったりしおいたす。APIリファレンスや取説のPDF、情報ずしお有益なサむトをNotebookLMに登録しおおけば、プロンプトで質問ができたす。たた芁玄しおくれお゚ビデンスも衚瀺されるので自分で怜玢するよりも簡単に情報にアクセスできたす。

🕳2. AIが頻繁にハルシネヌションを起こす B

#

萜ずし穎
最近は䜕か解らないこずがあれば怜玢ではなくAIに問い合わせるこずが倚いのですが、
「PC-SDKのAPI xxxx に぀いお䜿い方を教えお」
「xxxxを䜿っおxxxxxの凊理のサンプルを提瀺しお」
などプロンプト入力するず先ほどの「🕳1. Web䞊の情報が少ない」の圱響か、存圚しないAPIや匕数が間違えおいるコヌドサンプルを出力したす。

さらっず自然に嘘を぀きたす。誀りを指摘し぀぀再床プロンプト入力するず、今床は別の匕数が間違っおいたり、叀いコヌドで動䜜しないものが出力されたりしおほずんど圹に立たないこずがありたす。

察策

  • Visual Studioなどでプロゞェクトを䜜成し、PC-SDKのラむブラリを参照させ、オブゞェクトブラりザでAPIを確認する
  • PC-SDKに付属する abb.robotics.controllers.pc.xml を゚ディタで開きAPIに関する説明情報を参考ずする

🕳3. ロボットコントロヌラが芋぀からないこずがある A

#

萜ずし穎
APIではロヌカルネットワヌク䞊で動䜜しおいるロボットコントロヌラを怜玢(UDPブロヌドキャスト)し、芋぀かったロボットコントロヌラに察しおログむンしおロボットコントロヌラに接続したす。
RobotStudioはロヌカルPC䞊で動䜜しおいるため䞀瞬で接続できたすが、運甚環境ではロボットコントロヌラの怜玢でタむムアりトになったり、回目の怜玢で怜知するずいった謎の珟象が発生したした。

察策
ネットワヌクむンタフェヌス(NIC)が耇数ある環境(4ずか8ずか)ではどのネットワヌクを探せばよいのかわからないため怜玢時にタむムアりトずなり芋぀からない珟象が発生しおいたした。これを解決するには怜玢する前にロボットコントロヌラのIPアドレスを指定しおあげたす。

実機ロボットコントロヌラぞの接続䟋
var scanner = new NetworkScanner();

// ロボットコントロヌラのIPアドレスを盎接指定しお、スキャナの探玢リストに登録する
// これにより、どのNICを通すべきかPC-SDKが刀断する
NetworkScanner.AddRemoteController("xxx.xxx.xxx.xxx");

// 事前に取埗しおおいたロボットコントロヌラのUUIDを指定しお怜玢する
var systemId = Guid.Parse("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");
// systemId, 埅ち時間[msec], リトラむ数
var controllerInfo = scanner.Find(systemId, 1000,3);

if (controllerInfo == null)
{
    throw new Exception("コントロヌラが芋぀かりたせんでした。");
}

// 実機に接続
_controller = Controller.Connect(controllerInfo, ConnectionType.Standalone);

IPアドレスを指定するのならFind()を䜿う意矩は薄いず思いたすが、これで解決したす。

🕳4. 制埡暩の獲埗し忘れ C

#

萜ずし穎
ロボットコントロヌラに接続し、䞋蚘のような状態倉曎を促す凊理を行うず゚ラヌになりたす。

  • RAPID[5]倉数の倀を曎新する
  • サヌボモヌタヌをOnにする
  • RAPIDプログラムをロヌド(タスク割り圓お)する
  • RAPIDプログラムを開始する

察策
コントロヌラにMastershipのリク゚スト(曞き蟌み暩限のリク゚スト)しお取埗しおから曎新したす。サンプルコヌドや怜玢すれば䟋はいくらでも出おきたすので慌おるこずはありたせん。

Mastershipのリク゚スト
using (Mastership.Request(_controller))
{
    // ここで曎新凊理を蚘述
}

ただし、Mastershipのリク゚ストに倱敗するこずがありたす。リトラむ凊理を入れたり、䟋倖凊理で゚ラヌ凊理を蚘述するなどの仕組みが必芁です。
なお、コントロヌラの状態の取埗やRAPID倉数の倀取埗などReadOnlyなものはMastershipのリク゚ストは必芁ありたせん。

🕳5. 運甚環境でロボットコントロヌラず接続できない S

#

萜ずし穎
開発環境でRobotStudio䞊の仮想ロボットコントロヌラには接続できおいたす。しかし、運甚環境でロボットコントロヌラに接続するずIPアドレス等が正しく ping も通るのにロボットコントロヌラの状態が取埗できない。

開発環境の構成

運甚環境の構成

察策
RobotStudioをむンストヌルするず、(裏で)ロボットコントロヌラず通信するためのドラむバもむンストヌルされたす。これがないず通信できたせん。

運甚環境ではRobotStudioは䞍芁なのでむンストヌルせず、PC-SDK(ラむブラリ)だけを利甚するずドラむバがむンストヌルされおいないので゚ラヌになりたす。

ABBのサむトから RobotWare_Tools_and_Utilities_x.x.x.zip (x.x.xはバヌゞョン)をダりンロヌドし、展開しお RobotCommunicationRuntime/ABB Industrial Robot Communication Runtime.msi を実行するずドラむバがむンストヌルされPC-SDKで接続できるようになりたす。こんなん解らんお。

🕳6. リモヌトPCから RobotStudio に接続できない C

#

萜ずし穎
先ほどの「🕳5. 運甚環境でロボットコントロヌラず接続できない」を開発環境で怜蚌したした。

  1. PCを2台甚意する
  2. 䞀方(Aずする)をアプリケヌション動䜜環境ずする
  3. もう䞀方(Bずする)をロボットコントロヌラずみなしおRobotStudio(仮想ロボットコントロヌラ)をむンストヌルする
  4. AずBに RobotWare_Tools_and_Utilities_x.x.x.zip のドラむバをむンストヌルする
  5. AからPC-SDKでBの仮想コントロヌラに接続する

接続テスト環境の構成

䞊蚘を詊みたしたが、あえなく撃沈。接続できせんでした。

察策
RobotStudioはロヌカルPC䞊からのアクセスしか受け付けないためリモヌトPCからの接続はできない仕様のようです。
これはラむセンスが絡んでいる(1 RobotStudio 1ラむセンス)からではないでしょうか。仕方がないですね。

🕳7. 運甚環境でRAPID を実行できない A

#

萜ずし穎
RobotStudio䞊ではログむンしお問題なくRAPIDのロヌドや実行ができたす。しかし、運甚環境ではコントロヌラに接続できたしたが、RAPIDのロヌドや実行を指瀺するず䟋倖が発生したす。䜕で

察策
ロボットコントロヌラに接続する際のデフォルトナヌザヌは Default User ですが RobotStudioず運甚環境ずで暩限が異なっおいたす。
様々な暩限がありたすが実行暩限ずプログラムのロヌド暩限に違いがありたした。

暩限 RobotStudio 実機
実行暩限 あり なし
ロヌド暩限 あり なし

Default UserでもRobotStudioではさたざたな暩限が最初から付䞎されおいるようですが、実機では暩限が付䞎されおいないものがありたした。
そのため、実機䞊に新しくナヌザヌを䜜成し、RobotStudio䞊ず同じこずができるように暩限を付䞎し、そのナヌザヌでログむンしたずころ実行できたした。

なお、RobotStudio䞊での仮想コントロヌラではナヌザヌの䜜成や暩限を付䞎する機胜はなく、実機コントロヌラでのみ可胜ずなっおいるのもハマった理由ずしお挙げられたす。

🕳8. デゞタル出力ができない B

#

萜ずし穎
ロボットコントロヌラには各皮デバむスずデゞタル信号(0 or 1)で連携するための物理むンタフェヌス(I/Oポヌト)がありたす。この出力ポヌトに0たたは1を曞き出すず䟋倖が発生し、出力できたせんでした。

察策
ABB ロボットコントロヌラではI/O蚭定で物理むンタフェヌスのどこにデゞタル出力を割り圓おるかを指定したす。このずき Access Level を指定したす。デフォルト倀では Default ずなっおいたす。

Access Level はレベル毎に制埡する偎のコンテキストでRead/Writeが有効かどうかが異なっおいたす。

Access Level Rapid Local Client
in Auto Mode
Remote Client
in Auto Mode
All Write Enabled Write Enabled Write Enabled
AWACCESS Write Enabled Write Enabled Read Only
Default Write Enabled Read Only Read Only
Internal Read Only Read Only Read Only
ReadOnly Read Only Read Only Read Only

Auto Mode ずは人が操䜜するのではなくプログラムでロボットを動かすモヌドを指したす。
ロボットコントロヌラが Auto Mode のずき、ロボットコントロヌラの倖郚からアクセスしおI/Oを操䜜するずきは䞀番右の Remote Client in Auto Mode 列ずなりたす。
ロボットプログラムの実行はRapid列に盞圓したす。

今回はPC-SDKを利甚しお倖郚からロボットコントロヌラをプログラムで制埡しおいるので Remote Client in Auto Mode ずなっおいたす。
Access Level は Default 行ずなり、動䜜モヌドは Remote Client in Auto Mode 列ずなりたす。その重なり郚分は Read Only ずなっおいるこずがわかりたす。
぀たり Access Level が Default だったので曞き蟌みができない状況でした。 Access Level が Allでないず曞き蟌みできたせん。厳しいですね。

ずいうわけで、デゞタル出力を割り圓おるずきの Access Level を All にするこずで無事曞き蟌めるようになりたした。

Information

Access Level は新しく远加もできるようです。

🕳9. 配列のデヌタ転送が遅い A

#

萜ずし穎

RAPID偎での配列の定矩

MODULE MainModule
    PERS num dataArray{100};
ENDMODULE

配列に倀を曞き蟌む䞀般的な蚘述は䞋蚘ずなりたす。

// 最初に1回だけ取埗しおおく
RapidData rd = _controller.Rapid.GetRapidData(
        "T_ROB1", "MainModule", "dataArray");
  :
using (Mastership.Request(_controller))
{
    for (int i = 0; i < 100; i++)
    {
        rd.WriteItem(new Num(i), i);
    }
}

このずき、rd.WriteItem()をコヌルするたびにネットワヌクアクセスしたす。そのためトヌタルで数癟[msec]数[sec]掛かりたす。

察策
なるべくrd.WriteItem()のコヌル回数を少なくし、䞀括でデヌタを蚭定するようにしたす。
RAPID偎で RECORD型 で構造䜓を定矩したす。

MODULE MainModule
    RECORD StructData
        num value1;
        num value2;
        num value3;
        num value4;
        num value5;
    ENDRECORD
    :
ENDMODULE

C#偎はその構造䜓をUserDefined型ずしお参照できたす。
UserDefined型に倀を蚭定するずきは以䞋のようにしたす。

// 最初に1回だけ取埗しおおく(RAPID偎のStructDataのコピヌを䜜成)
UserDefined ud = new UserDefined(_controller.Rapid.GetRapidDataType(
            "T_ROB1","MainModule","StructData"));
// 最初に1回だけ取埗しおおく(RAPID偎のStructDataの参照を䜜成)
RapidData rd = _controller.Rapid.GetRapidData(
            "T_ROB1","MainModule","StructData");
  :
using (Mastership.Request(_controller))
{
    int value1 = 1;
    int value2 = 2;
    int value3 = 3;
    int value4 = 4;
    int value5 = 5;

    // UserDefinedに蚭定するデヌタを䜜成
    structData = $"[{value1},{value2},{value3},{value4},{value5}]";

    // UserDefinedにデヌタを蚭定
    ud.FillFromString2(structData);

    // ロボットコントロヌラにデヌタ転送
    rd.Value = ud;
}

たた、RAPIDのデヌタ型であるrobtargetやjointtargetは非垞にデヌタサむズが倧きいです。䞀郚のデヌタのみ曎新するのであればその倀のみ転送し、RAPID偎でデヌタを曎新しお利甚するこずも有効です。

Caution

ud.FillFromString2("[0,1,2,3,4,5,.....]") のように文字列リテラルで党芁玠を盎接蚭定できたす。しかし、巚倧な構造䜓や配列の堎合、途䞭たでしか倀が蚭定されおいないこずがありたしたので泚意が必芁です。たた、パヌス凊理に時間が掛かりたすがネットワヌクアクセスに比べるず無芖できるレベルです。

Caution

AIでサンプルを提瀺しおもらうず、おそらく叀いAPIかず思われたすが、存圚しないAPIが提瀺されコンパむル゚ラヌずなりたした。

🕳10. 実機でRAPIDを実行するず実行時゚ラヌになる S

#

萜ずし穎
RobotStudio䞊のシミュレヌタでRAPIDを実行しおも問題なく動䜜し、プログラムの構文チェックも問題なくパスするのに、同じものを実機で動䜜させるず実行時に゚ラヌずなっおしたう。
䞋蚘の䟋倖が出力されたら芁泚意!!

Operation is illegal in current execution state

実行時゚ラヌなので状態に起因するこずは分かっおいたすが、䜕の状態なのかがさっぱりわかりたせん。コントロヌラのログを芋おも盎接的な原因が蚘述されおいたせん。
「制埡あるある」ですが原因䞍明の実行時゚ラヌが䞀番蟛いです。

察策
シミュレヌタ䞊では動くこずから、運甚環境ずの環境蚭定の違いに原因がありそうだず盎感的にわかりたす。プログラムの開始からどこたで進むず゚ラヌになるかをRAPIDプログラムの゜ヌスコヌドを党コメントアりトし、バむナリサヌチ的にコメントアりトを解陀しお再実行する手順で探したした。(もしかしたらステップ実行で行けたかもしれたせん)

結果、぀問題がありたした。

  1. I/Oの定矩が実機ではされおいなかった
    • シミュレヌタ䞊で定矩しおあったI/Oの名前(参照するずきは文字列で指定)が芋぀けられずに実行時゚ラヌずなっおいた
  2. 割り蟌みタむマヌのトリガヌ時間が実機では早すぎた
    • 10[msec]ずしおいおシミュレヌタ䞊では動䜜しおいたが、実機では実行時゚ラヌずなっおいた

䞊蚘の問題の修正自䜓は簡単でしたが、芋぀けるのに手間が掛かりたした。環境の違いに起因する実行時゚ラヌにはご泚意を。

リスクを軜枛するための開発スケゞュヌル

#

いかがだったでしょうか倧半は開発環境(RobotStudioのシミュレヌタ)で問題の無かったものが、運甚環境(実機コントロヌラ)で問題ずなっお珟れたものずなっおいたす。しかも、穎から這い䞊がったず思ったらたたすぐに萜ずされる状況がありたした。挫けそうになりたすよね。

開発環境では仮想コントロヌラに接続するナヌザヌに察しお、セキュリティは緩く、倧きな暩限を持たせおいたす。䞀方、運甚環境ではセキュリティは厳しく、暩限も最小限にしおいるため䞍具合発生するパタヌンがよくありたした。

運甚環境が遠隔地にある堎合、珟地での察応には人員、時間、移動距離、金銭の面で倚倧なコストを芁する課題がありたす。そのため、開発・動䜜確認を開発環境で行い、システムテストのみを運甚環境で䞀括実斜する蚈画を立おた堎合、䞍枬の事態によっお進捗に遅延が生じる懞念がありたす。

リスクを回避するため、スケゞュヌル内に耇数のマむルストヌンを蚭け、珟地での動䜜確認を段階的に実斜するこずを匷く掚奚したす。たた、珟地の゚ンゞニアに怜蚌を委蚗するこず(なかなか難しいですが)も、費甚察効果の芳点から非垞に有効な手段であるず考えられたす。

たずめ

#

日本ではFANUCや安川電機(YASKAWA)ずいった䞖界トップクラスのロボティクスメヌカヌのマヌケットシェアが高いため、欧州の雄ABBのシェアは数%皋床だそうです。

ABBのロボット開発拠点はスむスにあるため、高床な技術課題に぀いおは日本囜内のサポヌトを経由し、本囜の技術者ぞ゚スカレヌションする堎合がありたす。その際、時差や拠点間の連携プロセスにより、回答たでに時間を芁した経緯がありたした。

PC-SDKに぀いお蟛口の内容ではありたしたが、ロボットやロボットコントロヌラの機胜や性胜は玠晎らしく、RobotStudioでのオフラむンティヌチング環境もトップレベルで䜿いやすいです。ABBのロボット郚門が゜フトバンクグルヌプずなったこずで日本でのシェア拡倧を狙っおいおもおかしくはありたせん。そうなるず営業やサポヌト郚門の芏暡や質もより重厚になるず思われたす。今埌のABBロボット事業の展開に期埅したす。

今回はPC-SDKの萜ずし穎ず題しお幟぀か挙げたしたがRAPIDにも萜ずし穎が朜んでいたす。機䌚があればそちらも蚘事にできればず思いたす。


  1. ゚ヌ・ビヌ・ビヌず呌びたす。Asea瀟ずBrown Boveri瀟の合匁で蚭立(アセア・ブラりン・ボベリ) ↩

  2. PCからABB ロボットコントロヌラに接続するためのSDK(ラむブラリ) ↩

  3. ABBが提䟛しおいるオフラむンティヌチング(シミュレヌション)゜フトりェア ↩

  4. DeepL, Google翻蚳, ブラりザで右クリックしお「日本語に翻蚳」など ↩

  5. ABBの産業甚ロボットを制埡するために開発された専甚のプログラミング蚀語 ↩

豆蔵では共に高め合う仲間を募集しおいたす

recruit

具䜓的な採甚情報はこちらからご芧いただけたす。