>サイトトップへ >このカテゴリの一覧へ

日本工業規格

JIS

 B

8440

-1995

産業用ロボット−中間コード STROLIC

Industrial robots

−Intermediate code STROLIC

1.

適用範囲  この規格は,種々の産業用ロボット(以下,ロボットという。)間での,中間コードレベル

における動作プログラムの移植性を高めるために,ロボットコントローラ(

1

)

用中間コード(

2

)STROLIC

(Standard Robot Language in Intermediate Code)

(以下,STROLIC という。

)の記述形式及び機能について規

定する。

中間コードに関する規格は,

(1)

中間コードの割付方法,

(2)

中間コードによるデータ構造表現,

(3)

中間コードの機能別割付表,

(4)

システム関数の中間コード割付表

からなる。

(

1

)

ロボットコントローラ(以下,コントローラという。

)は,STROLIC の解釈をする処理系(イ

ンタプリタ)

,アクチュエータを駆動するサーボ系などからなる。

(

2

)

この規格でいう中間コードは,ロボットシステム内部で使用されるもので,利用者が使用する

プログラム言語とは独立に設計されている。利用者は,任意のプログラム言語を選択できる。

ロボット用プログラム言語の一例として,SLIM (JIS B 8439)  がある。

2.

用語の定義  この規格で用いる主な用語の定義は,次のとおりとする。

(1)

プログラム装置  利用者がプログラムを用意するための装置。STROLIC コードは,この装置によって

生成され,通信回線で接続されたコントローラに伝送される。上位計算機ともいう。

(2)

プログラム  STROLIC コードの並び。

(3)

処理系定義  各処理系ごとの定義。各処理系は,その処理方法及び意味を何らかの形で定義化しなけ

ればならない。概念を,紛らわしくない文脈で明確な文章で表現する。

(4)

例外状態  中間コードが,STROLIC 仕様に従って動作できない又は動作していないことを,処理系が

認識した状態とする。

(5)

拡張  STROLIC 仕様に対する記述形式・機能の変更。ただし,拡張に際して STROLIC 仕様に合致す

るプログラムを排除してはならない。

(6)

動作領域  動作領域とは,ロボットの動作が保証される空間。

備考  JIS B 0134 における“作業領域”,“可動領域”などのいずれに該当するかは,処理系に依存す

る。

(7)

座標系  STROLIC が扱う座標系は,ロボットのベース座標系及びエンドエフェクタのツール座標系が

ある。


2

B 8440-1995

(8)

タスク  STROLIC の処理系の外で,同時並行的に実行される実行単位。

(9)

プロセス  STROLIC の処理系の中で,同時並行的に実行される実行単位。

3.

規定事項  この規格の規定事項は,次のとおりとする。

(1) STROLIC

によるコードの構文。

(2) STROLIC

で表現されたコードによって制御されるロボットシステムに対して入出力できるデータの

形式,数値の表現の精度及び範囲。

(3) STROLIC

で表現されたコードによって制御されるロボットシステムの動作。

(4) STROLIC

で表現されたコードの意味の解釈に関する事項。

(5)

検出されなければならない誤り及び例外状態並びにそれらの処理方法。

4.

STROLIC

への規格合致性

4.1

規格合致性  この規格では,次の二つの合致性を定める。

(1) STROLIC

で表現されたコードの規格合致性。

(2) STROLIC

で表現されたコードを処理する処理系の規格合致性。

4.2

コードの規格合致性  STROLIC で表現されたコードは,次の条件を満たすとき,コードの規格合致

性をもつ。

(1) STROLIC

プログラム中の各々のコードが,この規格で定める正しい構文に従っていること。

(2) STROLIC

プログラム中の各々のコードが,この規格で明示的に定める正しい意味をもっていること。

(3) STROLIC

プログラム中のコードの列が,全体としてこの規格で明示的に定める正しい意味をもつ正し

いプログラムを構成していること。

4.3

処理系の規格合致性  処理系は,次の条件を満たすとき,処理系の規格合致性をもつ。

(1)

コードの規格合致性をもつプログラムを受け入れて実行できること。

(2)

コードの規格合致性をもたないプログラムに対しては,これを実行できないことを報告できること。

(3)

誤り及び例外状態を,この規格の定めるところに従って解釈し実行できること(4.4 及び 4.5 参照)

(4)

コードの規格合致性をもつプログラム中の各々のコードの意味を,この規格の定めるところに従って

実行できること。

(5)

コードの規格合致性をもつプログラム中の全体としての意味を,この規格の定めるところに従って実

行できること。

(6)

数値については,この規格で定める精度及び範囲を処理できること。

(7)

この規格で“規定しない”としている機能及び“処理系定義”としている機能に対する動作を,明確

に定義してあること。

4.4

誤りの処理  コード及びプログラム中の構文上又は意味上の誤りがあることを,必ずしも報告しな

くてもよい。

4.5

例外状態の処理  例外状態の処理は,次による。

(1)

処理系の規格合致性をもつ処理系は,

この規格で定める例外状態を,

すべて報告しなければならない。

ただし,例外状態を処理する機能を備えている場合は,例外状態を報告しなくてもよい。

(2)

処理系の規格合致性をもつ処理系は,例外状態を検出したとき,プログラムの実行を停止する。プロ

グラムの実行が停止すると,ロボットの動作も停止する。ただし,例外処理手続を規定している場合

は,その手続による。この例外処理の規定がある場合であっても,処理系のハードウェア,操作環境


3

B 8440-1995

などの制約によって,例外処理の手続がとれない場合は,プログラムの実行を終了する。

(3)

この規格では,プログラムの実行の停止及びロボットの動作の停止について処理系定義とし,例外状

態の検出の順序及び処理の順序については規定しない。

4.6

拡張の規格合致性  処理系の規格合致性をもつ処理系は,拡張した言語仕様で表現されたプログラ

ムを受け入れてもよい。この処理系がそのようなプログラムを受け入れる場合には,STROLIC 仕様に合致

していない部分を報告する必要はない。ただし,この場合であって,コードが STROLIC 仕様に合致して

いないとき,処理系は,誤りを報告するか又は合致していない部分の構文規則及び意味をあらかじめ与え

ておかなければならない。

5.

STROLIC

5.1

STROLIC

コードの構文  STROLIC コードの構文は,次による。

STROLIC

コード  =  データコード  |  機能コード

データコード  =  評価抑制データ  |  数値データ  |  文字列データ  |

間接参照  |  配列データ  |

レコードデータ  |  関数データ  |

ベクトルデータ  |  同次変換データ  |

ポーズデータ

機能コード  =  STROLIC 関数  |  利用者コード

5.2

STROLIC

コードの意味  中間コードは,バイト列で表現する。中間コードには,データを表すタグ

付きデータ及び機能を表す機能コードがある。機能コードは,2 バイト(又は 4 バイト)を単位とするビ

ット列の並びであり,ビットパターンがもつ意味とその並びがもつ意味とで解釈される。機能コードでは

先に現れたバイトが上位のビットを構成する。

参考  中間コードは,シリアルライン上を送られたり,ファイルに直接書き込まれることを想定して

いるが,印刷可能でない文字及び ASCII コードにおける制御文字を含むので,実際の伝送又は

ファイル操作において,制御用コードの取扱いに注意する。

6.

評価抑制データ

6.1

評価抑制データの構文  評価抑制子の構文は,次による。

評価抑制子データ=評価抑制タグ(  データ頭部  |  機能コード  )

データ頭部  =  評価抑制タグ  |  間接参照タグ  |  データタグ部

データタグ部  =  1 バイト整数タグ  |  2 バイト整数タグ|

4

バイト整数タグ  |  4 バイト実数タグ  |

8

バイト実数タグ  |

配列タグ  長さ  配列要素タグ  |

文字列タグ  長さ  |  レコードタグ  長さ  |

関数タグ  長さ  |  ベクトルタグ  |

同次変換タグ  |  ポーズタグ  長さ

長さ  =  整数データ


4

B 8440-1995

6.2

評価抑制子の意味  一般の中間コードは,フェッチされると,それぞれ決まった評価が行われる。

例えば,変数を評価すると,その値が得られる。しかし,評価を行わずに,そのままスタックに積みたい

場合がある。このとき,評価抑制子#を用いる。評価抑制の対象は,ユーザ変数,関数及びタグがある。

ユーザ変数及び関数の場合は,コードそのものが結果となる。タグの場合は,1 バイトのタグコードが

結果となる。長さをもつタグの場合には,長さ情報までを含めたバイト列,配列の場合,長さの情報及び

要素の型を表すタグまでのバイト列が結果となる。

可変の長さをもつデータ構造では,その長さがそのデータ構造の長さに対応したバイト数を表す。長さ

は,正の整数値とする。長さは,タグ付きの整数で表す。したがって,127 以下の値ならタグ付きの 1 バ

イトの整数を用い,それ以上なら 2 バイト又は 4 バイトの整数を用いる。

7.

数値データ

7.1

数値データの構文  数値データの構文は,次による。

数値データ  =  整数データ  |  実数データ

整数データ  =  1 バイト整数  |  2 バイト整数  |  4 バイト整数

1

バイト整数  =  1 バイト整数タグ  1 バイト整数値

2

バイト整数  =  2 バイト整数タグ  2 バイト整数値

4

バイト整数  =  4 バイト整数タグ  4 バイト整数値

実数データ  =  4 バイト実数  |  8 バイト実数

4

バイト実数  =  4 バイト実数タグ  4 バイト実数値

8

バイト実数  =  8 バイト実数タグ  8 バイト実数値

7.2

数値データの意味  整数には,1 バイト整数,2 バイト整数,4 バイト整数の三つがある。1 バイト

整数は,タグ F1 の後に 1 バイトの整数値が続く。2 バイト整数では,タグ F2 の後に 2 バイトの整数値が

上位バイト・下位バイトの順で続く。4 バイト整数も同様である。

実数には,4 バイト実数と 8 バイト実数との二つがある。4 バイト実数では,タグ F5 の後に 4 バイトの

実数値が上位バイトから下位バイトへと続く。8 バイト実数の場合も同様である。実数の表現形式は,

考 の表現を推奨する。

8.

間接参照

8.1

間接参照の構文  間接参照の構文は,次による。

間接参照  =  間接参照タグ  利用者コード

8.2

間接参照の意味  間接参照では,続く 2 バイトで表されるユーザコードの中身を用いた間接参照を

行う。

9.

配列データ

9.1

配列データの構文  配列データの構文は,次による。

配列データ  =  配列タグ  長さ  配列要素タグ  {  配列要素  }*

配列要素タグ  =  データタグ部

配列要素  =  タグなしデータコード


5

B 8440-1995

9.2

配列データの意味  配列データは,配列を表す。配列とは,同一の型のデータを並べたものである。

配列データは,配列タグ,データの長さ,配列要素タグに続く配列要素の並びである。配列要素タグは,

配列要素に対応する型のタグを用いる。配列要素は,データコードからタグを取除いた部分(タグなしデ

ータコード)で表現する。

長さは,配列要素の全量をバイトで表した値であり,配列タグ,長さ及び配列要素タグの長さは含まな

い。

10.

文字列データ

10.1

文字列データの構文  文字列データの構文は,次による。

文字列データ  =  文字列タグ  長さ  {  文字  }*

10.2

文字列データの意味  文字列は,文字データ(バイト)の並びである。文字コード系には依存しな

い。特に漢字コードを含むことを妨げない。文字列は,文字列タグに続いて文字列の長さがあり,その後

に文字データが並ぶ。

長さは,文字データの長さをバイト数で表した値であり,タグ及び長さの長さは含まない。

11.

レコードデータ

11.1

レコードデータの構文  レコードデータの構文は,次による。

レコードデータ  =  レコードタグ  長さ  {  レコード要素  }*

レコード要素  =  タグなしデータコード

11.2

レコードデータの意味  レコードデータは,レコード構造体を表す。レコード構造体とは,型の異

なるデータの集まりである。レコードデータの内部構造は,STROLIC では関知しない。内部構造のアクセ

スは,利用者の責任である。レコードデータは,レコードタグに続き,データの長さがあり,その後にレ

コードの要素データが並ぶ。レコード要素にはタグを付けず,データコードからタグを取除いた部分(タ

グなしデータコード)を並べて表現する。

長さは,レコード・データの長さをバイト数で表した値であり,タグ及び長さは含まない。

12.

関数データ

12.1

関数データの構文  関数データの構文は,次による。

関数データ  =  関数タグ  長さ  {  STROLIC コード  }*

12.2

関数データの意味  ユーザ関数の表現である。コードの列の部分には,関数の本体を,中間コード

で表す。関数の本体の中では,分岐関係の中間コードを用いることができる。関数のコードの列は,関数

定義の終了のコード “END” で終わっていなければならない。

長さは,関数のコードの長さをバイト数で表した値であり,タグ及び長さは含まない。

13.

ベクトルデータ

13.1

ベクトルデータの構文  ベクトルデータの構文は,次による。

ベクトルデータ  =  ベクトルタグ  {  ベクトル要素  }

3

ベクトル要素  =  4 バイト実数値


6

B 8440-1995

13.2

ベクトルデータの意味  ベクトルは,三つの実数データの集まりで,全体で 14 バイトの長さをもつ。

各実数値は,4 バイト(単精度)で,実数を示すタグはもたない。3 次元ベクトル値を表す。ベクトルタグ

を Vec,3 実数値をそれぞれ x,y,z とするとき,

Vec

  x  y  z

は,ベクトル

[x

,y,z]

を表す。

14.

同次変換データ

14.1

同次変換データの構文  同次変換データの構文は,次による。

同次変換データ  =  同次変換タグ  {  同次変換要素  }

12

同次変換要素  =  4 バイト実数値

14.2

同次変換データの意味  同次変換データは,12 個の実数データからなり,全体で 50 バイトの長さを

もつ。各実数値は,4 バイト(単精度)で,実数を示すタグはもたない。3 行×4 列の変換行列を表す。同

次変換タグを Trn,それに続く各実数値を Px,Py,Pz,Nx,Ny,Nz,Ox,Oy,Oz,Ax,Ay,Az とする

と,

Trn

  Px  Py  Pz  Nx  Ny  Nz  Ox  Oy  Oz  Ax  Ay  Az

は,同次変換マトリクス

Nx Ox Ax Px

Ny Oy Ay  Py

Nz Oz Az Pz

0 0 0 1

を表す。

15.

ポーズデータ

15.1

ポーズデータの構文  ポーズデータの構文は,次による。

ポーズデータ  =  ポーズタグ  長さ  {  ポーズ要素  }*

ポーズ要素  =  数値データ

15.2

ポーズデータの意味  ポーズの表現である。ポーズとは,空間上の位置の情報のほか,その位置で

のロボットの姿勢及びその他のパラメータの総合体である。

また,その内部表現は,各インプリメントに依存して様々である。したがって,ここではその内部表現

には関与しない。ポーズにかかわる一まとまりの情報を,ポーズデータと呼ぶ。

長さは,ポーズデータの長さをバイト数で表した値であり,タグ及び長さは含まない。

長さ以下のデータの構成は,処理系定義とする。STROLIC では関知しない。ただし,各処理系は,この

表現と同次変換データの表現との間の相互変換の関数(TRN と PNT)を提供しなくてはならない。この変

換に際し,同次変換データの表現だけでは表しきれない情報については,仮想マシン内に状態パラメータ

(これを,コンフィギュレーションと呼ぶ)を設ける。コンフィギュレーション(主に,姿勢関連)は,

コンフィギュレーション情報の設定/参照の関数によって取り扱う。このコンフィギュレーション情報の

操作関数には拡張関数が用意されており,各処理系ごとの拡張に対応できる。


7

B 8440-1995

16.  STROLIC

関数

16.1  STROLIC

関数の構文  STROLIC 関数の構文は,次による。

STROLIC

関数  =  2 バイト STROLIC 関数コード

STROLIC

関数は,2 バイトの STROLIC 関数コードであり,

表 に示すものからなる。

表 1  STROLIC 関数一覧表

コード

表記

機能

EF00 ADD

加算

EF01 SUB

減算

EF02 MUL

乗算

EF03 DIV

除算

EF04 PWR

べき乗

EF05 MOD

剰余

EF06 IDIV

整数除算

EF07 INC

1

増加

EF08 DEC

1

減少

EF09 EQU

比較・等しい

EF0A NEQ

比較・等しくない

EF0B LEQ

比較・小さいか等しい

EF0C GEQ

比較・大きいか等しい

EF0D LT

比較・小さい

EF0E GT

比較・大きい

EF0F AEQ

近似比較

EF10 CPL

1

の補数

EF11 AND

論理積

EF12 OR

論理和

EF13 XOR

排他的論理和

EF14 BSET

ビットセット

EF15 BCLR

ビットクリア

EF16 BTST

ビットテスト

EF17 LSH

左論理シフト

EF18 RSH

右論理シフト

EF19 LSHA

左算術シフト

EF1A RSHA

右算術シフト

EF1B NOT

論理否定

EF1C CONC

文字列の連結

EF1D LNG

文字列の長さ

EF1E MID

部分文字列の取出し

EF1F SIN

正弦

EF20 COS

余弦

EF21 TAN

正接

EF22 ATAN

逆正接

EF23 ATAN2

逆正接(2 引き数)

EF24 LN

自然対数

EF25 EXP

指数

EF26 SQRT

平方根

EF27 NEG

2

の補数

EF28 ABS

絶対値

EF29 SGN

符号判定

EF2A INT

整数化

EF2B INT1

1

バイト  整数化


8

B 8440-1995

コード

表記

機能

EF2C INT2

2

バイト  整数化

EF2D INT4

4

バイト  整数化

EF2E REAL

実数化

EF2F REAL4

4

バイト  実数化

EF30 REAL8

8

バイト  実数化

EF31 SEPS

近似比較パラメタ  (

ε

)

の設定

EF32 EPS

近似比較パラメタ  (

ε

)

の読出し

EF33 PI

円周率

EF34 DEGRAD

度・ラジアン変換

EF35 RADDEG

ラジアン・度変換

EF36 VLEN

ベクトル長

EF37 VADD

ベクトルの和

EF38 VSUB

ベクトルの差

EF39 VTIMES

ベクトルのスカラ倍

EF3A VPRODI

ベクトルの内積

EF3B VPRODO

ベクトルの外積

EF3C TPROD

同次変換の積

EF3D TINV

同次変換の逆変換

EF3E TPRODV

同次変換とベクトルの積

EF3F TRN

ポーズから同次変換への変換

EF40 PNT

同次変換からポーズヘの変換

EF41 LOC

ポーズの位置成分取出し

EF42 DEV

ポーズの並進変換

EF43 DEVH

ツール座標によるポーズの並進変換

EF44 PADD

ポーズの加算

EF45 PSUB

ポーズの減算

EF46 CONSP

ポーズデータの構成

EF47 DESTP

ポーズデータの分解

EF48 CONSV

ベクトルの構成

EF49 DESTV

ベクトルの分解

EF4A CONSA

配列の構成

EF4B DESTA

配列の分解

EF4C CONSU

利用者コードの構成

EF4D DESTU

利用者コードの分解

EF4E DUP

スタックトップのコピー

EF4F DROP

スタックトップの切り落とし

EF50 EXCH

スタックトップの入替え

EF51 PUSH

データのプッシュ

EF52 POP

データのポップアップ

EF53 STORE

代入

EF54 EXTB

バイト抽出

EF55 EMBB

バイト埋込み

EF56 EXTE

要素抽出

EF57 EMBE

要素埋込み

EF58 BRA

相対分岐(

3

)

EF59 BRF

偽条件相対分岐(

3

)

EF5A BRT

真条件相対分岐(

3

)

EF5B RET

復帰(

3

)

EF5C END

関数宣言の終わり(

3

)

EF5D NESTIN

入れ子構造の設定

EF5E NESTOUT

入れ子構造からの復帰


9

B 8440-1995

コード

表記

機能

EF5F NPUSH

外側の入れ子レベルのデータのプッシュ

EF60 NPOP

外側の入れ子レベルのデータのポップアップ

EF61 DCL

変数宣言

EF62 FREE

変数の解放

EF63 VAR

DCL

,FREE の始まり

EF64 FDEF

関数定義の始まり

EF65 BAL

サブルーチンの呼出し

EF66 GRET

関数実行の強制終了

EF67 ALLOC

領域の割付け

EF68 ALLOCZ

領域の割付け

EF69 ACLR

領域のクリア

EF6A ARELS

領域の解放

EF6B ASIZE

領域のサイズを得る

EF6C VERID

STROLIC

のバージョン ID を得る

EF6D SYSID

処理系のバージョン ID を得る

EF6E INIT

中間コードインタプリタの初期化

EF6F TRON

トレース開始

EF70 TROFF

トレース終了

EF71 TRACE

トレース

EF72 SYNC

同期

EF73 ACK

肯定的応答

EF74 NAK

否定的応答

EF75 RESULT

結果要求

EF76 FXQT

関数の起動

EF77 TXQT

タスクの起動

EF78 FPREDC

関数の実行優先度

EF79 TPRECD

タスクの実行優先度

EF7A FCYCLE

関数の周期起動指定

EF7B TCYCLE

タスクの周期起動指定

EF7C FDONE

関数の終了判定

EF7D TDONE

タスクの終了判定

EF7E FKILL

関数の強制終了

EF7F TKILL

タスクの強制終了

EF80 FSUSPEND

関数の強制中断

EF81 TSUSPEND

タスクの強制中断

EF82 FRESUME

関数の強制再開

EF83 TRESUME

タスクの強制再開

EF84 LOCK

競合資源のロック

EF85 UNLOCK

競合資源のロック解除

EF86 EWAIT

事象の待合わせ

EF87 EWAITA

複数事象の待合わせ(AND 条件)

EF88 EWAITO

複数事象の待合わせ(OR 条件)

EF89 EPOP

事象の取出し

EF8A ESIG

事象の発生

EF8B ECLR

事象のクリア

EF8C CHIN

チャネルからのデータ入力

EF8D CHOUT

チャネルへのデータ出力

EF8E SHARE

共有変数の宣言

EE00 TIME

時刻

EE01 DATE

日付

EE02 CLOCK

時計


10

B 8440-1995

コード

表記

機能

EE03 STIME

時刻の設定

EE04 SDATE

日付の設定

EE05 CLRCLK

内部時計のクリア

EE06 PACKTM

時刻要素データのまとめ

EE07 UNPKTM

時刻データの要素データへの分解

EE08 PACKDT

日付要素データのまとめ

EE09 UNPKDT

日付データの要素データへの分解

EE0A CNFG

通信ポートの設定

EE0B DOUT

出力ポートへの出力

EE0C DIN

入力ポートからの入力

EE0D IOWAIT

入力条件待ち

EE0E ACT

割込みの活性化

EE0F ACTRS

割込みの不活性化

EE10 REACT

割込みの再活性化

EE11 ACTCODE

割込みコードの定義

EE12 ACTION

割込み処理の定義

EE13 TIMER

タイマ割込みの設定

EE14 RTIMER

タイマ割込みの再設定

EE15 TACTION

タイマ割込み処理の定義

EE16 FSTAT

ファイルステータスの取出し

EE17 OUTPUT

ファイルへの書出し

EE18 INPUT

ファイルの読込み

EE19 LOUTPUT

ファイルの 1 行書出し

EE1A LINPUT

ファイルの 1 行読込み

EE1B FOPEN

ファイルの入出力用オープン

EE1C FCLOSE

ファイルのクローズ

EE1D PUTC

1

文字出力

EE1E GETC

1

文字入力

EE1F DECODE1

文字列の分解(BASIC 形式)

EE20 ENCODE1

文字列の構成(BASIC 形式)

EE21 DECODE2

文字列の分解(C 形式)

EE22 ENCODE2

文字列の構成(C 形式)

ED00 JSPEED

関節速度指定

ED01 SPEED

手先速度指定

ED02 ACCEL1

手先加速度指定

ED03 ACCEL2

時間による手先加速度指定

ED04 DECEL1

手先減速度指定

ED05 DECEL2

時間による手先減速度指定

ED06 SCONF

コンフィギュレーション設定

ED07 SCONF2

コンフィギュレーション設定 2

ED08 SCONF3

コンフィギュレーション設定 3

ED09 GCONF

コンフィギュレーション取出し

ED0A GCONF2

コンフィギュレーション取出し 2

ED0B GCONF3

コンフィギュレーション取出し 3

ED0C HERE

現在ポーズの取込み

ED0D JHERE

現在ジョイント値の取込み

ED0E CALIB

キャリブレーション

ED0F PAUSE

中断

ED10 DELAY

時間待ち

ED11 AJMOVE

関節角空間直線補間絶対移動

ED12 IJMOVE

関節角空間直線補間相対移動


11

B 8440-1995

コード

表記

機能

ED13 ALMOVE

直角座標空間直線補間絶対移動

ED14 ILMOVE

直角座標空間直線補間相対移動

ED15 HMOVE

ツール座標系直線補間移動

ED16 CMOVE1

直角座標空間円弧補間移動

ED17 CMOVE3

直角座標空間 3 点指定円弧補間移動

ED18 ADRIVE

関節角絶対位置移動

ED19 IDRIVE

関節角相対位置移動

ED1A SACC

近傍精度設定

ED1B GACC

近傍精度参照

ED1C $WAIT

ロボットの動作完了待ち

ED1D $DONE

ロボットの動作完了判定

ED1E HANDOPEN

ハンドを開く

ED1F HANDCLOSE

ハンドを閉じる

ED20 GRASP

握る

ED21 HANDDEF

ハンドの定義

ED22 HANDREF

ハンド定義の参照

ED23 HANDCHG

ハンドの交換

(

3

)

関数データの中だけで有効。

16.2  STROLIC

関数の意味  STROLIC 関数が評価されると,あらかじめ定められた機能が実行される。

それぞれの機能については,

附属書 に規定する。機能の実行に際しては,必要ならば,スタック上のデ

ータを引き数として用いる。

また,実行の結果をスタック上に置くものもある。

17.

利用者コード

17.1

利用者コードの構文  利用者コードの構文は,次による。

利用者コード  =  2 バイト利用者コード  |  拡張利用者コード

17.2

利用者コードの意味  2 バイト利用者コードは,2 バイトのコードであり,16 進数で 1000 から EAFF

の値を取る。拡張利用者コードは,4 バイトのコードであり,16 進数で EA001000 から EBFFFFFF の値を

取る。拡張利用者コードのうち,EB001000 から EB00EAFF は,2 バイト利用者コードの 1000 から EAFF

に対応する。0000 から 0FFF までは利用しない。

利用者コードには,利用者が値を代入することができる。関数データを代入すれば利用者コードは関数

コードとなり,その他のデータを代入すれば変数コードとなる。関数コードの評価では,利用者によって

定められた機能が実行される。

また,変数コードの評価では,代入されている値を取り出し,スタックへプッシュする。

18.

タグ

18.1

一般  STROLIC のデータコードは,タグで始まる。タグには,1 バイトのタグである基本データタ

グ及び 2 バイトのタグである拡張データタグがある。タグコードに続くデータには,各タグごとにその長

さと意味を定める。

18.2

基本データ構造  基本データ構造は,STROLIC の基本的データを表現するデータ構造で,基本デー

タタグで始まる。基本データタグを

表 に示す。


12

B 8440-1995

表 2  基本データタグ

タグ

表記

意味

F0 #

評価抑制子

F1 I1

1

バイト整数

F2 I2

2

バイト整数

F3 --

予約

F4 I4

4

バイト整数

F5 R4

4

バイト実数

F6 R8

8

バイト実数

F7 Rf

間接参照

F8 --

予約

F9 Ar

配列

FA St

文字列

FB Rd

レコード

FC --

予約

FD Fn

関数

FE (Mc)

予約(機械語関数)

FF ext

タグ拡張(2 バイトタグ)

18.3

拡張データ構造  拡張データ構造は,ロボット用データを表現するデータ構造で,拡張データタグ

(2 バイト)で始まる(

表 参照)。

表 3  拡張データタグ

タグ

表記

意味

FF01 Vec

ベクトル

FF02 Trn

同次変換

FF03 --

予約

FF04 Pm

点(マシン表現)

FF05

∼FF7F

予約

FF80

∼FFFF

利用者拡張用

関連規格  JIS B 0134  産業用ロボット−用語

JIS B 8439

  産業用ロボット−プログラム言語  SLIM

JIS X 0001

  情報処理用語  基本用語

JIS X 0015

  情報処理用語(プログラム言語)

JIS X 0201

  情報交換用符号

IEEE 754

  A Standard for Binary Floating Point Arithmetic


13

B 8440-1995

附属書 1  組込関数の機能

1.

適用範囲  この附属書は,STROLIC における組込関数の機能に関する一般的事項及び詳細について規

定する。

2.

内部割付け  組込機能を三つに大別し,以下のようにコード領域を割り付ける。

(1) EC00

∼EDFF   (512)   ロボット制御機能の呼出し

(2) EE00

∼EEFF   (256)   システム機能の呼出し

(3) EF00

∼EFFF   (256)   仮想マシン基本操作

基本操作は,仮想マシン内の基本的オペレーションを行う。システム機能の呼出しは,ロボット制御装

置の基本システム内の機能の呼出しで,入出力,時計などを含む。ロボット制御機能の呼出しは,文字ど

おり各種ロボットの制御機能を呼び出す。

3.

基準整数  中間コードは,表面記述と異なり,様々なデータの表現をコーディングしたものが取り扱

われる。各種データの表現に用いられるデータの内部表現は,主に整数である。すなわち,表面記述上の

様々なデータは,整数値に符号化されて内部で取り扱われる。このため整数表現は,単に整数を表すとい

う以上に,より重要な基本データである。中間コードでは,整数にタグ付きで可変長の表現を用いている。

しかし,コーディングにおいて,ときとしてこうした可変長のデータ表現が適していない場合がある。例

えば,ビットごとに意味のあるデータなどである。こうした目的には,基準整数として 2 バイト整数(I2

整数)を用いる。

4.

ビット位置表現  データ単位内のビット位置を表す表し方が必要である。データ単位内でのビットの

位置は,そのビットの 2 のべき乗の指数で表す。したがって,最下位ビットは 2 の 0 乗であるので,第 0

ビットと表す。最上位ビットは,用いるデータ単位の大きさによって,8 ビットのデータ単位では 2 の 7

乗で第 7 ビット,16 ビット長では第 15 ビット,32 ビット長では第 31 ビットと表現する。

5.

混合演算  算術演算では,内部表現の異なる数値データどうしの演算,混合演算が行えると便利であ

る。中間コードでは,長さが異なる整数データどうし,長さ(精度)が異なる実数データどうし及び整数

データと実数データとの間の演算がある。各データ間の関係を強さの表現を用い,

I1

  <  I2  <  I4  <  R4  <  R8

と表した場合,混合演算では,より強い方のデータ表現に変換して演算が行われる。

また,その演算結果も,その強いデータ表現で得られる。

6.

丸めの処理  関数の引き数が整数として意味をもつ場合,実引き数が実数ならば,特別の規定のない

限り,関数の評価(実行)に先立ってあらかじめ整数に丸められる。


14

B 8440-1995

7.

論理値  論理操作のために,論理値の表現を定める必要がある。STROLIC に,論理型のデータは存在

しない。論理データは,基準整数型 (I2) のデータに論理値をコーディングして用いる。まず,論理値の真

と偽とに対し,標準整数の 1 と 0 とを対応させる。

真・・・1

偽・・・0

また,論理値の判定の場合,スタック上のデータが,I1,I2,I4,R4,R8 のいずれの型であっても,そ

の値が 0 ならば偽,さもなければ真と評価する。

if

  論理値  =  0  then  偽  else  真

8.

エラーコード  各種関数には,実行に際しエラーの発生するものがある。このような場合に,関数の

実行終了時にエラーコードが帰される。このエラーコードの割付けは,特に規定された場合を除いて,次

のルールによる。

(1)

エラーコードには標準整数を用いる。

(2)  0

をノーマル状態(ノーエラー)とする。

(3)

エラーに対して正の整数値を小さい方から順に割り振る。

ただし,ビットに意味があるような場合,この限りではない。

9.

例外処理  組込関数一覧の例外の項に,発生する例外とその処理を記述する。しかし,一般的に発生

する例外のすべてを記述してはいない。STROLIC の処理系が扱う例外として,計算機言語一般のものとロ

ボット言語特有のものがある。計算機言語一般の例外として,次のものがある。

・  0 による割算

・  数値のオーバーフロー又はアンダーフロー

・  スタックのオーバーフロー又はアンダーフロー

・  データの型の不一致

・  未定義のデータ

・  その他の計算機エラー

ロボット言語特有の例外として,次のものがある。

・  動作領域外

・  速度過大

・  その他のエラー

これらの例外が発生したとき,インタプリタは停止する。

また,例外の項に処理が記述されていない場合にも,停止する。

また,ロボットコントローラで発生する例外としては,次のものがある。

・  非常停止

・  サーボエラー

・  通信エラー

・  その他のコントローラエラー

これらの例外が発生したとき,サーボ電源を落とすなどロボットそのものの動作が停止するよう処置す

る。

また,例外の項にその処理が記述されていない場合にも,停止する。


15

B 8440-1995

なお,いずれの場合でも停止及び復旧の具体的手順については,処理系定義とする。

10.

組込関数の詳細  STROLIC における組込関数の詳細については,附属書 表 に規定する。附属書 1

表 の様式(項目及び内容)は,次のとおり。

コード STROLIC 関数のコード番号(16 進数表現)

表記

コードに付けられた名前(ニーモニック)

機能

簡便に表現された関数の働き

呼出形式

関数の実行のさせ方(引き数の順番)

結果

関数の実行後スタックに残される結果

入力

引き数の型及び意味

出力

結果の型及び意味

説明

機能の詳細説明

例外

関数の実行時に発生する例外事項及びその処理

備考

その他の補足的事項

附属書 表の読み方は,次の例のとおりである。

コード

項目

記述

EF01

表記 SUB

機能

減算 (subtract)

呼出形式

結果

a

  b  SUB

c

入力

出力

a

  :I1,I2,I4,R4,R8

b

  :I1,I2,I4,R4,R8

c

  :I1,I2,I4,R4,R8

説明

スタック上の二つの数の減算を行い,結果

をスタックへ置く。

c

=a−b

例外

備考

読み方  呼出形式の例 (a b SUB) では,引き数が a,b 実行すべき関数が SUB である。STROLIC では,こ

の順で評価が進むことを表している。以下,スタックが使用されているとして説明する。a 及び b は,こ

の順に積まれる(つまり,b が Top of Stack になる)。関数 SUB が実行されると,a,b がスタック上から

取り除かれ,結果として,数値 c がスタック上に積まれる。この関数 SUB は,2 引き数で一つの出力の関

数である。

入力の型及びに結果の型の指定は,引き数 a が任意の数値(I1,I2,I4,R4,R8 の一つ)であり,引き

数 b も同様である。結果 c も数値であり,その型は混合演算の結果として得られる型となる。入力の型,

出力の型の欄には可能な型をコンマ (, ) で区切って並べる。


16

B 8440-1995

附属書 表 1  組込関数

コード EF00

表記 ADD

機能

加算 (add)

呼出形式

a

  b  ADD

結果 c

入力

a

  :I1,I2,I4,R4,R8

b

  :I1,I2,I4,R4,R8

出力

c

  :I1,I2,I4,R4,R8

説明

スタック上の二つの数の加算を行い,結果をスタックへ置く。

c

=a+b

例外

備考

コード EF01

表記 SUB

機能

減算 (subtract)

呼出形式

a

  b  SUB

結果 c

入力

a

  :I1,I2,I4,R4,R8

b

  :I1,I2,I4,R4,R8

出力

c

  :I1,I2,I4,R4,R8

説明

スタック上の二つの数の減算を行い,結果をスタックへ置く。

c

=a−b

例外

備考

コード EF02

表記 MUL

機能

乗算 (multiply)

呼出形式

a

  b  MUL

結果 c

入力

a

  :I1,I2,I4,R4,R8

b

  :I1,I2,I4,R4,R8

出力

c

  :I1,I2,I4,R4,R8

説明

スタック上の二つの数の乗の演算を行い,結果をスタックへ置く。

c

=a×b

例外


17

B 8440-1995

備考

コード EF03

表記 DIV

機能

除算 (divide)

呼出形式

a

  b  DIV

結果 c

入力

a

  :I1,I2,I4,R4,R8

b

  :I1,I2,I4,R4,R8

出力

c

  :R8

説明

スタック上の二つの数の除算を行い,結果をスタックへ置く。

c

=a÷b

例外

0

除算は,エラー検出をする。エラーに対する処理は,処理系定義とする。

備考

コード EF04

表記 PWR

機能

べき乗 (power)

呼出形式

a

  b  PWR

結果 c

入力

a

  :I1,I2,I4,R4,R8

b

  :I1,I2,I4,R4,R8

出力

c

  :I1,I2,I4,R4,R8

説明

スタック上の二つの数のべき乗の演算を行い,結果をスタックへ
置く。

c

=a

b

例外

b

<0 の場合は,0 除算の場合と同じ処理を行う。

備考

コード EF05

表記 MOD

機能

剰余 (modulo)

呼出形式

a

  b  MOD

結果 c

入力

a

  :I1,I2,I4

b

  :I1,I2,I4

出力

c

  :I1,I2,I4

説明

スタック上の二つの数の剰余を取り,結果をスタックへ置く。

SGN (a)

×  (  |a|−INT(  |a|÷|b|  )  ×|b|  )

例外

除数 b が 0 の場合は,0 除算と同じ処理を行う。

備考

剰余の符号


18

B 8440-1995

コード EF06

表記 IDIV

機能

整数除算 (integer divide)

呼出形式

a

  b  IDIV

結果 c

入力

a

  :I1,I2,I4

b

  :I1,I2,I4

出力

c

  :I1,I2,I4

説明

スタック上の二つの数の整数除算を行い,結果をスタックへ置
く。

SGN (a

×b) (  INT (  |a|÷|b|  )  )

例外

除数 b が 0 の場合,0 除算と同様の処理を行う。

備考

整数除算の符号

コード EF07

表記 INC

機能

1

増加 (increment)

呼出形式

a

  INC

結果 b

入力

a

  :I1,I2,I4

出力

b

  :I1,I2,I4

説明

スタック上の数に 1 の加算を行い,結果をスタックへ置く。

b

=a+1

例外

備考

結果 b の型は,入力 a と同じとする。 
正の最大値を INC すると,結果は負の最大値となる。

コード EF08

表記 DEC


19

B 8440-1995

機能

1

減少 (decrement)

呼出形式

a

  DEC

結果 b

入力

a

  :I1,I2,I4

出力

b

  :I1,I2,I4

説明

スタック上の数から 1 を引き,結果をスタックへ置く。

b

=a−1

例外

備考

結果 b の型は入力 a と同じとする。 
負の最大値を DEC すると,結果は正の最大値となる。

コード EF09

表記 EQU

機能

比較・等しい (equal)

呼出形式

a

  b  EQU

結果 c

入力

a

  :I1,I2,I4,R4,R8

b

  :I1,I2,I4,R4,R8

出力

c

  :I2  (論理値)

説明

スタック上の二つの数の比較を行い,結果をスタックへ置く。

a

=b のとき  c=真

a

≠b のとき  c=偽

例外

備考

整数の比較の場合,入力の型が一致していないときでも,値が等しければ,結果を真とする。 
実数の比較の場合,入力の型が同じでなくてはならない。 
型が異なる場合,結果を偽とする。

整数と実数の比較は,結果を偽とする。

コード EF0A

表記 NEQ

機能

比較・等しくない (not equal)

呼出形式

a

  b  NEQ

結果 c

入力

a

  :I1,I2,I4,R4,R8

b

  :I1,I2,I4,R4,R8

出力

c

  :I2  (論理値)

説明

スタック上の二つの数の比較を行い,結果をスタックへ置く。

a

≠b のとき  c=真

a

=b のとき  c=偽


20

B 8440-1995

例外

備考

整数の比較の場合,入力の型が一致していないときでも,値が等しくなければ,結果を真とする。 
実数の比較の場合,入力の型が同じでなくてはならない。 
型が異なる場合,結果を真とする。

整数と実数の比較は,結果を真とする。

コード EF0B

表記 LEQ

機能

比較・小さいか等しい  (less than or equal to)

呼出形式

a

  b  LEQ

結果 c

入力

a

  :I1,I2,I4,R4,R8

b

  :I1,I2,I4,R4,R8

出力

c

  :I2  (論理値)

説明

スタック上の二つの数の比較を行い,結果をスタックへ置く。

a

≦b のとき  c=真

a

>b のとき  c=偽

例外

備考

コード EF0C

表記 GEQ

機能

比較・大きいか等しい  (greater than or equal to)

呼出形式

a

  b  GEQ

結果 c

入力

a

  :I1,I2,I4,R4,R8

b

  :I1,I2,I4,R4,R8

出力

c

  :I2  (論理値)

説明

スタック上の二つの数の比較を行い,結果をスタックへ置く。

a

≧b のとき  c=真

a

<b のとき  c=偽

例外

備考

コード EF0D

表記 LT

機能

比較・小さい (less than)

呼出形式

a

  b  LT

結果 c

入力

a

  :I1,I2,I4,R4,R8

b

  :I1,I2,I4,R4,R8

出力

c

  :I2  (論理値)


21

B 8440-1995

説明

スタック上の二つの数の比較を行い,結果をスタックへ置く。

a

<b のとき  c=偽

a

≧b のとき  c=偽

例外

備考

コード EF0E

表記 GT

機能

比較・大きい (greater than)

呼出形式

a

  b  GT

結果 c

入力

a

  :I1,I2,I4,R4,R8

b

  :I1,I2,I4,R4,R8

出力

c

  :I2  (論理値)

説明

スタック上の二つの数の比較を行い,結果をスタックへ置く。

a

>b のとき  c=真

a

≦b のとき  c=偽

例外

備考

コード EF0F

表記 AEQ

機能

近似比較 (approximately equal)

呼出形式

a

  b  AEQ

結果 c

入力

a

  :R4,R8

b

  :R4,R8

出力

c

  :I2  (論理値)

説明

スタック上の二つの数の近似比較を行い,結果をスタックへ置く。すなわち,もし abs (a−b)  <

ε

なら

結果は真,そうでなければ偽となる。

|a

−b|<

ε

のとき  c=真

|a

−b|≧

ε

のとき  c=偽

例外

備考

近似の許容範囲

εの設定には,関数 SEPS を用いる。

コード EF10

表記 CPL

機能

1

の補数 (complement)

呼出形式

a

  CPL

結果 b


22

B 8440-1995

入力

a

  :I1,I2,I4

出力

b

  :I1,I2,I4

説明

スタック上の数のビット反転を行い,結果をスタックへ置く。

例外

備考

コード EF11

表記 AND

機能

論理積 (bitwise AND)

呼出形式

a

  b  AND

結果 c

入力

b

  :I1,I2,I4

出力

c

  :I1,I2,I4

説明

スタック上の二つの数のビットごとの論理積を取り,結果をスタックへ置く。

例外

備考

コード EF12

表記 OR

機能

論理和 (bitwise OR)

呼出形式

a

  b  OR

結果 c

入力

a

  :I1,I2,I4

b

  :I1,I2,I4

出力

c

  :I1,I2,I4

説明

スタック上の二つの数のビットごとの論理和を取り,結果をスタックへ置く。

例外

備考

コード EF13

表記 XOR

機能

排他的論理和 (bitwise exclusive-OR)

呼出形式

a

  b  XOR

結果 c

入力

a

  :I1,I2,I4

b

  :I1,I2,I4

出力

c

  :I1,I2,I4

説明

スタック上の二つの数のビットごとの排他的論理和を取り,結果をスタックへ置く。


23

B 8440-1995

例外

備考

コード EF14

表記 BSET

機能

ビットセット (bit set)

呼出形式

a

  b  BSET

結果 c

入力

a

  :I1,I2,I4

b

  :I1,I2,I4

出力

c

  :I1,I2,I4

説明

入力 a の第 b ビットを 1 にして,結果をスタックへ置く。

b

の示すビット位置は,a の中に含まれていなくてはならない。

出力 c の型は,a の型と同一である。

例外

備考

a

が n ビットの場合,0≦b<n でなければ,c は a と同じ値をとる。

コード EF15

表記 BCLR

機能

ビットクリア (bit clear)

呼出形式

a

  b  BCLR

結果 c

入力

a

  :I1,I2,I4

b

  :I1,I2,I4

出力

c

  :I1,I2,I4

説明

入力 a の第 b ビットを 0 にして,結果をスタックへ置く。

b

の示すビット位置は,a の中に含まれていなくてはならない。

出力 c の型は,a の型と同一である。

例外

備考

a

が n ビットの場合,0≦b<n でなければ,c は a と同じ値をとる。

コード EF16

表記 BTST

機能

ビットテスト (bit test)

呼出形式

a

  b  BTST

結果 c

入力

a

  :I1,I2,I4

b

  :I1,I2,I4

出力

c

  :I2  (論理値)

説明

入力 a の第 b ビットが 1 なら 1 を,0 なら 0 をスタックへ置く。

b

の示すビット位置は,a の中になくてはならない。


24

B 8440-1995

例外

備考

a

が n ビットの場合,0≦b<n でなければ,c は偽となる。

コード EF17

表記 LSH

機能

左論理シフト  (left shift logical)

呼出形式

a

  b  LSH

結果 c

入力

a

  :I1,I2,I4

b

  :I1,I2,I4

出力

c

  :I1,I2,I4

説明

入力 a を b ビットだけ左論理シフトし,結果をスタックへ置く。

b

が負の値をもつときは,右論理シフトが行われる。

出力 c の型は,a と同じである。

例外

備考

a

が n ビットの場合,|b|≧n であれば,c は 0 となる。

コード EF18

表記 RSH

機能

右論理シフト  (right shift logical)

呼出形式

a

  b  RSH

結果 c

入力

a

  :I1,I2,I4

b

  :I1,I2,I4

出力

c

  :I1,I2,I4

説明

入力 a を b ビットだけ右論理シフトし,結果をスタックへ置く。

b

が負の値をもつときは,左論理シフトが行われる。

c

の型は,a と同じである。

例外

備考

a

が n ビットの場合,|b|≧n であれば,c は 0 となる。

コード EF19

表記 LSHA

機能

左算術シフト  (left shift arithmetic)

呼出形式

a

  b  LSHA

結果 c

入力

a

  :I1,I2,I4

b

  :I1,I2,I4

出力

c

  :I1,I2,I4

説明

入力 a を b ビットだけ左算術シフトし,結果をスタックへ置く。


25

B 8440-1995

b

が負の値をもつときは,右算術シフトが行われる。

c

の型は,a と同一となる。

例外

備考

a

が n ビットの場合,b≧n であれば,左へのシフトなら c の符号ビットは a と同じで,符号ビット以

外はすべて 0 となる。 
右へのシフトでは,全ビットが a の符号ビットと同じとなる。

コード EF1A

表記 RSHA

機能

右算術シフト  (right shift arithmetic)

呼出形式

a

  b  RSHA

結果 c

入力

a

  :I1,I2,I4

b

  :I1,I2,I4

出力

c

  :I1,I2,I4

説明

入力 a を b ビット右算術シフトし,結果をスタックへ置く。

b

が負の値をもつときは,左算術シフトが行われる。

c

の型は,a と同一となる。

例外

備考

a

が n ビットの場合,b≧n であれば,左へのシフトなら c の符号ビットは a と同じで,符号ビット以

外は,すべて 0 となる。右へのシフトでは,全ビットが a の符号ビットと同じとなる。

コード EF1B

表記 NOT

機能

論理否定 (logical NOT)

呼出形式

a

  NOT

結果 b

入力

a

  :I1,I2,I4,R4,R8

出力

b

  :I2  (論理値)

説明

入力 a を論理否定し,結果をスタックへ置く。

a

が 0 の値をもつときは,真,0 以外のときは,偽となる。

例外

備考

コード EF1C

表記 CONC

機能

文字列の連結 (concatenate)

呼出形式

a

  b  CONC

結果 c

入力

a

  b  :St

出力

c

      :St


26

B 8440-1995

説明

文字列 a に文字列 b を連結し,結果をスタックに置く。

例外

備考

コード EF1D

表記 LNG

機能

文字列の長さ  (length of the string)

呼出形式 a

LNG

結果 b

入力

a

  :St

出力

b

  :I1,I2,I4

説明

文字列 a の長さを返す。

例外

備考

出力 b をどの型で返すかは,処理系定義とする。すなわち,長さに応じて型を選んでもよいし,すべ
て 14 型で返してもよい。

コード EF1E

表記 MID

機能

部分文字列の取出し  (middle of the string)

呼出形式

a

  b  c  MID

結果 d

入力

a

      :St

b

  c  :I1,I2,I4,R4,R8

出力

d

      :St

説明

文字列 a の b 文字目から c 文字分の部分文字列を取り出し,結果をスタックへ置く。

b

が 1 より小さい場合は,文字列 a の先頭から取り出す。

c

が 1 より小さい場合は,出力 d は空の文字列とする。

b

+c が a の長さを超える場合は,b 文字目から最後までの文字列とする。

例外

備考

コード EF1F

表記 SIN

機能

正弦 (sine)

呼出形式

a

  SIN

結果 b

入力

a

  :R4,R8

出力

b

  :R4,R8

説明

a

の正弦を計算し,結果をスタックへ置く。

b

=sin a

例外

備考

a

は,ラジアン (radian) を単位とする。

コード EF20

表記 COS

機能

余弦 (cosine)

呼出形式

a

  COS

結果 b

入力

a

  :R4,R8

出力

b

  :R4,R8

説明

a

の余弦を計算し,結果をスタックへ置く。

b

=cos a

例外

備考

a

は,ラジアン (radian) を単位とする。

コード EF21

表記 TAN

機能

正接 (tangent)

呼出形式

a

  TAN


27

B 8440-1995

結果 b

入力

a

  :R4,R8

出力

b

  :R4,R8

説明

a

の正接を計算し,結果をスタックへ置く。

b

=tan a

例外

備考

a

は,ラジアン (radian) を単位とする。

コード EF22

表記 ATAN

機能

逆正接 (arctangent)

呼出形式

a

  ATAN

結果 b

入力

a

  :R4,R8

出力

b

  :R4,R8

説明

a

の値の逆正接を計算し,結果をスタックへ置く。

b

=tan

1

a

(ただし,

2

2

π

π

b

<

例外

備考

コード EF23

表記 ATAN2

機能

逆正接 (arctangent) (2 引き数)

呼出形式

a

  b  ATAN2

結果 c

入力

a

  :R4,R8(Y 座標)

b

  :R4,R8(X 座標)

出力

c

  :R4,R8

説明

スタック上の値の逆正接を計算し,結果をスタックへ置く。

c

=tan

1

b

a

              (b>0 のとき)

c

=SGN (a)  ×

π+tan

1

b

a

(b<0 のとき)

c

=SGN (a)  ×

2

π

        (b=0 のとき)

例外

備考

コード EF24

表記 LN

機能

自然対数 (natural logarithm)

呼出形式

a

  LN

結果 b

入力

a

  :R4,R8

出力

b

  :R4,R8

説明

スタック上の値の自然対数を計算し,結果をスタックへ置く。

b

=log a

例外

a

≦0 の場合は,0 除算の場合と同じ処理をする。

備考

コード EF25

表記 EXP

機能

指数 (exponential)

呼出形式

a

  EXP

結果 b

入力

a

  :R4,R8

出力

b

  :R4,R8

説明

自然対数の底 e の a 乗を計算し,結果をスタックへ置く。

b

=e

a

例外

備考


28

B 8440-1995

コード EF26

表記 SQRT

機能

平方根 (square root)

呼出形式

a

  SQRT

結果 b

入力

a

  :R4,R8

出力

b

  :R4,R8

説明

スタック上の値 a の平方根を計算し,結果をスタックへ置く。

b

a

例外

a

<0 の場合は,0 除算の場合と同様の処理をする。

備考

コード EF27

表記 NEG

機能

2

の補数 (negate)

呼出形式

a

  NEG

結果 b

入力

a

  :I1,I2,I4

出力

b

  :I1,I2,I4

説明

スタック上の値の 2 の補数を計算し,結果をスタックへ置く。

例外

備考

コード EF28

表記 ABS

機能

絶対値 (absolute value)

呼出形式

a

  ABS

結果 b

入力

a

  :I1,I2,I4,R4,R8

出力

b

  :I1,I2,I4,R4,R8

説明

スタック上の値の絶対値を計算し,結果をスタックへ置く。

b

=|a|

例外

備考

コード EF29

表記 SGN

機能

符号判定 (sign)

呼出形式

a

  SGN

結果 b

入力

a

  :I1,I2,I4,R4,R8

出力

b

  :I2  (1,0 又は−1)

説明

スタック上の値の符号を調べ,結果をスタックへ置く。

a

が正のとき  b=1

a

が 0 のとき  b=0

a

が負のとき  b=−1

例外

備考

コード EF2A

表記 INT

機能

整数化  (convert to integer)

呼出形式

a

  INT

結果 b

入力

a

  :I1,I2,I4,R4,R8

出力

b

  :I1,I2,I4

説明

スタック上の数値を整数化し,結果をスタックへ置く。

結果の型は,必要最小限のものが選ばれる。

例外

備考

整数化とは,その数を超えない最大の整数を求めることである。

オーバフローした場合は,a と同符号の I4 の最大値とする。


29

B 8440-1995

コード EF2B

表記 INT1

機能

1

バイト整数化  (convert to 1 byte integer)

呼出形式

a

  INT1

結果 b

入力

a

  :I1,I2,I4,R4,R8

出力

b

  :I1

説明

スタック上の数値を 1 バイト整数化し,結果をスタックへ置く。 
整数化した結果が 1 バイトに収まらないときは,下位 1 バイトが取られる。

例外

備考

整数化の処理は,INT と同じである。

コード EF2C

表記 INT2

機能

2

バイト整数化  (convert to 2 byte integer)

呼出形式

a

  INT2

結果 b

入力

a

  :I1,I2,I4,R4,R8

出力

b

  :I2

説明

スタック上の数を 2 バイト整数化し,結果をスタックへ置く。 
整数化した結果が 2 バイトに収まらないときは,下位 2 バイトが取られる。

例外

備考

整数化の処理は,INT と同じである。

コード EF2D

表記 INT4

機能

4

バイト整数化  (convert to 4 byte integer)

呼出形式

a

  INT4

結果 b

入力

a

  :I1,I2,I4,R4,R8

出力

b

  :I4

説明

スタック上の数を 4 バイト整数化し,結果をスタックへ置く。 
整数化した結果が 4 バイトに収まらないときは,下位 4 バイトが取られる。

例外

備考

整数化の処理は,INT と同じである。

コード EF2E

表記 REAL

機能

実数化  (convert to real)

呼出形式

a

  REAL

結果 b

入力

a

  :I1,I2,I4,R4,R8

出力

b

  :R4,R8

説明

スタック上の数を実数化し,結果をスタックへ置く。

a

が整数の場合,b は R4 となる。

a

が R4,R8 の場合は,そのまま b となる。

例外

備考

コード EF2F

表記 REAL4

機能

4

バイト実数化  (convert to 4 byte real)

呼出形式

a

  REAL4

結果 b

入力

a

  :I1,I2,I4,R4,R8

出力

b

  :R4

説明

スタック上の数を 4 バイト実数化し,結果をスタックへ置く。

例外

備考

入力が R8 の場合,あふれが生じる可能性がある。

コード EF30

表記 REAL8

機能

8

バイト実数化  (convert to 8 byte real)


30

B 8440-1995

呼出形式

a

  REAL8

結果 b

入力

a

  :I1,I2,I4,R4,R8

出力

b

  :R8

説明

スタック上の数を 8 バイト実数化し,結果をスタックへ置く。

例外

備考

コード EF31

表記 SEPS

機能

近似比較パラメタ  (

ε

)

の設定  (set epsilon value)

呼出形式

a

  SEPS

結果

なし

入力

a

  :R4,R8

出力

説明

近似比較パラメタ  (

ε

)

を設定する。

入力 a は,絶対値 (|a|) を取ってから設定される。

例外

備考

コード EF32

表記 EPS

機能

近似比較パラメタ  (

ε

)

の読出し  (get epsilon value)

呼出形式 EPS

結果

なし

入力

出力

a

  :R8

説明

近似比較パラメタ  (

ε

)

を読み出して,結果をスタックに置く。

例外

備考

コード EF33

表記 PI

機能

円周率  (get pi value)

呼出形式 PI

結果 a

入力

出力

a

  :R8

説明

円周率

π

の値を取り出し,スタックに置く。

例外

備考

コード EF34

表記 DEGRAD

機能

度・ラジアン変換  (convert from degree to radian)

呼出形式

a

  DEGRAD

結果 b

入力

a

  :R4,R8

出力

b

  :R4,R8

説明

スタック上の度による角度値をラジアンに変換し,結果をスタックへ置く。型は変わらない。

例外

備考

コード EF35

表記 RADDEG

機能

ラジアン・度変換  (convert from radian to degree)

呼出形式

a

  RADDEG

結果 b

入力

a

  :R4,R8

出力

b

  :R4,R8

説明

スタック上のラジアンによる角度値を度に変換し,結果をスタックへ置く。型は変わらない。

例外


31

B 8440-1995

備考

コード EF36

表記 VLEN

機能

ベクトル長 (vector length)

呼出形式

a

  VLEN

結果 b

入力

a

  :Vec

出力

b

  :R4

説明

スタック上のベクトルの長さを計算し,結果をスタックへ置く。

)

(

2

2

2

z

y

x

b

+

+

ただし,x,y,z は,ベクトル a の x,y,z の各成分とする。

例外

備考

コード EF37

表記 VADD

機能

ベクトルの和 (vector add)

呼出形式

a

  b  VADD

結果 c

入力

a

  :Vec

b

  :Vec

出力

c

  :Vec

説明

スタック上のベクトルの和を計算し,結果をスタックへ置く。

c

=a+b

例外

備考

コード EF38

表記 VSUB

機能

ベクトルの差 (vector subtract)

呼出形式

a

  b  VSUB

結果 c

入力

a

  :Vec

b

  :Vec

出力

c

  :Vec

説明

スタック上のベクトルの差を計算し,結果をスタックへ置く。

c

=a−b

例外

備考

コード EF39

表記 VTIMES

機能

ベクトルのスカラ倍  (scalar product of vector)

呼出形式

a

  b  VTIMES

結果 c

入力

a

  :Vec

b

  :I1,I2,I4,R4,R8

出力

c

  :Vec

説明

スタック上のベクトル a の各要素を b 倍し,結果をスタックへ置
く。

c

=b・a

例外

備考

コード EF3A

表記 VPRODI

機能

ベクトルの内積  (inner product of vectors)

呼出形式

a

  b  VPRODI

結果 c

入力

a

  :Vec


32

B 8440-1995

b

  :Vec

出力

c

  :R4

説明

スタック上のベクトルの内積を計算し,結果をスタックへ置く。

c

=a・b

=a

x

b

x

+a

y

b

y

+a

z

b

z

ただし,a

x

,a

y

,a

z

,b

x

,b

y

,b

z

は,ベクトル a,b の x,y,z の各成分を表す。

例外

備考

コード EF3B

表記 VPRODO

機能

ベクトルの外積  (outer product of vectors, vector product)

呼出形式

a

  b  VPRODO

結果 c

入力

a

  :Vec

b

  :Vec

出力

c

  :Vec

説明

スタック上のベクトルの外積を計算し,結果をスタックへ置く。

c

=a×b

c

x

=a

y

b

z

−a

z

b

y

c

y

=a

z

b

x

−a

x

b

z

c

z

=a

x

b

y

−a

y

b

x

ただし,a

x

,a

y

,a

z

,b

x

,b

y

,b

z

は,ベクトル a,b の x,y,z の各

成分を表す。

例外

備考

コード EF3C

表記 TPROD

機能

同次変換の積  (product of two transformation matrices)

呼出形式

a

  b  TPROD

結果 c

入力

a

  :Trn(同次変換行列 A)

b

  :Trn(同次変換行列 B)

出力

c

  :Trn(同次変換行列 C)

説明

スタック上の二つの変換行列の積を計算し,結果をスタックへ置
く。

C

=A×B

例外

備考

コード EF3D

表記 TINV

機能

同次変換の逆変換  (inverse of atransformation matrix)

呼出形式

a

  TINV

結果 b

入力

a

  :Trn(同次変換行列 A)

出力

b

  :Trn(同次変換行列 B)

説明

スタック上の変換行列の逆行列を計算し,結果をスタックへ置く。

B

=A

1

例外

逆行列が求まらない場合,エラーを出して,停止することを推奨する。

備考

数学的には同次変換行列には逆行列は必ず存在するが,行列 A が同次変換行列になっていない,又は
計算上の誤差によって,逆行列が求められないことがある。停止以外の処理としては,次のものが考
えられる。 
①  警告をだす(続行可能) 
②  疑似逆行列で代用する

コード EF3E

表記 TPRODV

機能

同次変換とベクトルの積  (product of a transformation matrix and a vector)


33

B 8440-1995

呼出形式

a

  b  TPRODV

結果 c

入力

a

  :Trn(行列 A)

b

  :Vec(ベクトル b)

出力

c

  :Vec(ベクトル c)

説明

スタック上の同次変換行列とベクトルの積を計算し,結果をスタックへ置く。

c

=A・b

例外

備考

コード EF3F

表記 TRN

機能

ポーズから同次変換への変換  (conversion from pose to transformation matrix)

呼出形式

a

  TRN

結果 b

入力

a

  :Pm

出力

b

  :Trn

説明

ポーズ a から,同次変換の情報を取り出し,結果をスタックへ置く。

例外

備考

コード EF40

表記 PNT

機能

同次変換からポーズへの変換  (conversion from transformation matrix to pose)

呼出形式

a

  PNT

結果 b

入力

a

  :Trn(行列 A)

出力

b

  :Pm

説明

同次変換行列 A のデータをもとに,ポーズデータ b を作る。

ポーズデータを決定するために必要なその他の情報は,現在の状態のコンフィギュレーション情報を
用いる。

例外

備考

コンフィギュレーション情報については,config 関連関数を参照のこと。

コード EF41

表記 LOC

機能

ポーズの位置成分取出し  (get location from pose data)

呼出形式

a

  LOC

結果 b

入力

a

  :Pm

出力

b

  :Vec

説明

ロボット座標系におけるポーズの位置(x,y,z 成分)を,ベクトルの形で取り出す。

例外

備考

コード EF42

表記 DEV

機能

ポーズの並進変換 (deviation)

呼出形式

a

  b  DEV

結果 c

入力

a

  :Pm

b

  :Vec

出力

c

  :Pm

説明

ポーズ a に,ロボット座標系における並進偏差 b を施して得られるポーズをつくり,結果をスタック
へ置く。

例外

備考

ベクトル b は,ポーズデータに対し,x,y,z 成分の偏差を指定する。

コード EF43

表記 DEVH

機能

ツール座標によるポーズの並進変換  (deviation in tool coordinate)

呼出形式

a

  b  DEVH


34

B 8440-1995

結果 c

入力

a

  :Tm

b

  :Vec

出力

c

  :Tm

説明

ポーズ a に,ツール(ハンド)座標系による並進偏差 b を施して得られるポーズをつくり,結果をス

タックへ置く。 
ツール座標系は,現在組み付けられているハンドのものを用いる。

例外

備考

ベクトル b は,ポーズデータに対し,x,y,z 成分の偏差を指定する。

コード EF44

表記 PADD

機能

ポーズの加算 (pose add)

呼出形式

a

  b  PADD

結果 c

入力

a

  :Pm  被加数

b

  :Pm  加数

出力

a

  :Pm  ポーズの和

説明

二つのポーズの和のポーズを作る。結果のポーズは処理系依存とするが,以下の条件を満たさなくて

はならない。

P1

,P2,P3 をポーズ,ただし P1 は現在ポーズ,P3=P2+P1 とする。

このとき,次の二つの MOVE 関数は,位置,姿勢を含めて同じ結果となる。

P2

  ILMOVE

P3

  ALMOVE

例外

備考 PSUB,ALMOVE,ILMOVE 参照

コード EF45

表記 PSUB

機能

ポーズの減算 (pose subtract)

呼出形式

a

  b  PSUB

結果 c

入力

a

  :Pm  被減数

b

  :Pm  減数

出力

a

  :Pm  ポーズの差

説明

二つのポーズの差のポーズを作る。結果のポーズは処理系依存とするが,以下の条件を満たさなくて

はならない。

P1

,P2,P3 をポーズ,ただし P1 は現在ポーズ,P3=P2−P1 とする。

このとき,次の二つの MOVE 関数は,位置,姿勢を含めて同じ結果となる。

P2

  ALMOVE

P3

  ILMOVE

例外

備考 PADD,ALMOVE,ILMOVE 参照

コード EF46

表記 CONSP

機能

ポーズデータの構成  (construction of a pose)

呼出形式

a

1

  …  a

n

  n  CONSP

結果 b

入力

a

1

,…,a

n

  :任意の型    要素データ

n

          :I1,I2,I4  要素データ数

出力

b

          :Pm

説明

スタック上の要素データ a

1

,…,a

n

を使ってポーズデータ b を作り,結果をスタックへ置く。

要素データの数,型及び順序は,処理系定義であるポーズデータの構造に従う。

例外

備考

コード EF47

表記 DESTP

機能

ポーズデータの分解  (destruction of a pose)


35

B 8440-1995

呼出形式

a

  DESTP

結果

b

1

  …  b

n

  n

入力 a

          :Pm

出力

b

1

,…,b

n

  :任意の型  要素データ

n

          :I2

説明

スタック上のポーズデータ a を要素データ b

1

,…,b

n

に分解し,結果をスタックへ置く。

スタックトップには要素数 n が置かれる。 
要素データの数,型及び順序は,処理系定義であるポーズデータの構造に従う。

例外

備考

コード EF48

表記 CONSV

機能

ベクトルの構成  (construction of a vector)

呼出形式

a

  b  c  CONSV

結果 d

入力

a

,b,c  :I1,I2,I4,R4,R8  ベクトルの要素

出力

d

        :Vec

説明

スタック上の三つの数値から,a を x 成分,b を y 成分,c を z 成

分とするベクトルデータ d をつくり,結果をスタックへ置く。

例外

備考

ベクトルの要素を整数型データで与えてもよい。この場合には,

実数に変換して処理する。

コード EF49

表記 DESTV

機能

ベクトルの分解  (destruction of a vector)

呼出形式

a

  DESTV

結果

b

  c  d

入力

a

        :Vec

出力

b

,c,d  :R4 ベクトルの各成分

説明

ベクトルデータ a を,x 成分 b,y 成分 c,z 成分 d の各成分に分解し,結果をスタックへ置く。

例外

備考

コード EF4A

表記 CONSA

機能

配列の構成  (construction of an array)

呼出形式

a

1

  …  a

n

  n  #t  CONSA

結果 b

入力

a

1

,…,a

n

:任意の型  要素型のデータ

n

:I1,I2,I4  要素の数

t

:タグ  要素型を示すタグ

出力 b

:Ar

説明

スタック上の要素データ a

1

,…,a

n

を使って配列データ b を作り,結果をスタックへ置く。

要素数 n は,スタック上にある要素データの数を示す。

タグ t は,配列要素の型を示す。各々の配列要素は,指定された要素型に合わせて必要に応じて変換
される。

例外

a

1

,…,a

n

のいずれかが,t で指定された要素型に変換できない。

備考

コード EF4B

表記 DESTA

機能

配列の分解  (destruction of an array)

呼出形式

a

  DESTA

結果

b

1

  …  b

n

  n

入力

a

  :Ar

出力

b

1

,…,b

n

  :配列要素の型  要素データ

n

  :I1,I2,I4  要素数

説明

配列 a を要素に分解し,結果をスタックへ置く。


36

B 8440-1995

要素は,添え字の小さいものから順にプッシュする。 
最後に(スタックトップに)要素数をプッシュする。

例外

備考

コード EF4C

表記 CONSU

機能

利用者コードの構成  (construction of a user code)

呼出形式

a

  CONSU

結果 #b

入力

a

  :I1,I2,I4,R4,R8  コード値

出力

b

  :U                  利用者コード

説明

スタック上の数値データ a と同じコード値をもつ利用者コードに評価抑制タグを付けて,結果をスタ

ックへ置く。

例外

a

が,許される利用者コード番号の範囲にない場合。

備考

コード EF4D

表記 DESTU

機能

利用者コードの分解  (destruction of a user code)

呼出形式 #a  DESTU

結果 b

利用者コード

入力

a

  :U

出力

b

  :I2,I4  コード値

説明

評価抑制タグ付き利用者コード a を整数データに変換し,結果をスタックへ置く。

例外

備考

コード EF4E

表記 DUP

機能

スタックトップのコピー (duplicate)

呼出形式

a

  DUP

結果

a

  a

入力

a

  :任意の型のデータ

出力

a

  :任意の型のデータ(入力と同じ)

説明

スタックの一番上にあるデータを複写して,スタックに置く。

例外

スタックが空の場合,スタックアンダフローエラーとなる。

備考

コード EF4F

表記 DROP

機能

スタックトップの切り落とし (drop)

呼出形式

a

  DROP

結果

なし

入力

a

  :任意の型のデータ

出力

説明

スタックの一番上にあるデータを一つ取り去る。 
スタックが空の場合は,何もしない。

例外

備考

コード EF50

表記 EXCH

機能

スタックトップの入替え (exchange)

呼出形式

a

  b  EXCH

結果

c

  d

入力

a

  :任意の型のデータ

b

  :任意の型のデータ

出力

c

  :任意の型のデータ(c は b と同じ)

d

  :任意の型のデータ(d は a と同じ)

説明

スタックの上から二つのデータ a,b の順序を入れ替える。


37

B 8440-1995

スタックには,二つ以上のデータがなくてはならない。 
一つ以下のときは,何もしない。

例外

備考

コード EF51

表記 PUSH

機能

データのプッシュ (push)

呼出形式 #a  PUSH

結果 b

入力

a

  :U

出力

b

  :任意の型のデータ

説明

利用者コード a に代入されているデータ値 b を,スタックへ置く。

例外

利用者コード a が定義されていない,又は値が定義されていない。

備考

コード EF52

表記 POP

機能

データのポップアップ (pop)

呼出形式

a

  #b  POP

結果

なし

入力

a

  :任意の型のデータ

b

  :U

出力

説明

データ a を利用者コード b へ格納する。

例外

備考

関数 STORE を用いて次のように書いても同じである。

#b

  a  STORE

コード EF53

表記 STORE

機能

代入 (store)

呼出形式 #a  b  STORE

結果

なし

入力

a

  :U

b

  :任意の型のデータ

出力

説明

利用者コード a へ値 b を代入する。

例外

備考

関数 POP を用いて次のように書いても同じである。

b

  #a  POP

コード EF54

表記 EXTB

機能

バイト抽出 (extract bytes)

呼出形式 #a  b  #c  EXT

結果 d

入力

a

  :U

b

  :I1,I2,I4

c

  :データタグ T

出力

d

  :c 型の値

説明

利用者コード a のデータの b バイト目から,c で決まる数のデータを取り出し,タグ c をつけて,c 型
のデータとしてスタックに置く。 
取り出すデータは,利用者コード a に割り付けられた領域内に納まっていなくてはならない。

例外

次のいずれかの場合,プログラム停止エラーとなる。 

利用者コード a に,領域が割り付けられていないとき。

b

<0 のとき。

取り出すデータの最終位置が,a に割り付けられた領域を超えているとき。

備考

コード EF55

表記 EMBB


38

B 8440-1995

機能

バイト埋込み (embed bytes)

呼出形式 #a  b  c  EMB

結果

なし

入力

a

  :U

b

  :I1,I2,I4

c

  :任意の型のデータ

出力

説明

利用者コード a の b バイト目から,c のタグを除いた部分のデータを埋め込む。

データ位置は,利用者コード a に割り付けられた領域内に納まらなくてはならない。

例外

次のいずれかの場合,プログラム停止エラーとなる。 

利用者コード a に,領域が割り付けられていないとき。

b

<0 のとき。

書き込むデータの最終位置が,a に割り付けられた領域を超えているとき。

備考

コード EF56

表記 EXTE

機能

要素抽出 (extract element)

呼出形式 #a  b  EXTE

結果 c

入力

a

  :U  利用者コード

b

  :I1,I2,I4  要素の位置

出力

c

  :I1,R4 など  抽出された値

説明

利用者コード a のデータの b 番目の要素を取り出し,スタックに置く。 
利用者コードは,ここでは,配列,文字列,ベクトル,同次変換のいずれかでなくてはならない。

b

は,要素の位置を表し,最初の要素は,0 番目と数える。

配列の場合は,結果は配列要素の型と同じ型となる。 
文字列の場合は,b バイト目の 1 バイトが 1 バイト整数として得られる。

ベクトル及び同次変換では,結果は R4 型となる。

例外

次のいずれかの場合,プログラム停止エラーとなる。 

利用者コードが,配列,文字列,ベクトル,同次変換以外のとき。

利用者コード a に代入されていないとき。

b

<0 のとき。

取り出すデータが a に割り付けられた領域を超えているとき。

備考

コード EF57

表記 EMBE

機能

要素埋込み (embed element)

呼出形式 #a  b  c  EMBE

結果

なし

入力

a

  :U

利用者コード

b

  :I1,I2,I4

要素の位置

c

  :I1,R4 など

埋め込むデータ

出力

説明

利用者コード a に代入されているデータの b 番目の位置に,c のタグを除いた部分のデータを埋め込
む。

データ位置は,利用者コード a に割り付けられた領域内に納まらなくてはならない。利用者コードは,
ここでは,配列,文字列,ベクトル,同次変換のいずれかでなくてはならない。

b

は要素の位置を表し,最初の要素は 0 番目と数える。

配列の場合は,c は配列要素の型と同じ型でなければならない。 
文字列の場合は,c は 1 バイトに丸められ,b バイト目の 1 バイトに埋め込まれる。ただし,c は数値
データでなくてはならない。

ベクトル及び同次変換の場合は,R4 型に変換されて埋め込まれる。ただし,c は数値データでなくて
はならない。


39

B 8440-1995

例外

次のいずれかの場合,プログラム停止エラーとなる。 

利用者コードが,配列,文字列,ベクトル,同次変換以外のとき。

利用者コード a に代入されていないとき。

利用者コードの要素の型と c の型が対応しないとき。

b

<0 のとき。

書き込むデータが a に割り付けられた領域を超えているとき。

備考

コード EF58

表記 BRA

機能

相対分岐 (branch, goto)

呼出形式

a

  BRA

結果

なし

入力

a

  :I1,I2,I4

出力

説明

関数内で次に実行する命令の位置を,現在の位置から a バイトだけ相対移動する。a=0 なら BRA の

直後の命令へ移動する。 
この命令は,関数内でだけ有効であり,移動先も同じ関数内でなくてはならない。

例外

関数内でないときの処置は,処理系定義とするが,何もしないこと (no effect) を推奨する。

移動先が同じ関数内でないとき,プログラム停止となる。

備考

コード EF59

表記 BRF

機能

偽条件相対分岐  (branch if false)

呼出形式

a

  b  BRF

結果

なし

入力

a

  :I1,I2,I4

b

  :I1,I2,I4

出力

説明

a

の値が 0 のとき(偽のとき)

,関数内で次に実行する命令の位置を,現在の位置から b バイトだけ相

対移動する。

b

=0 なら BRF の直後の命令へ移動する。

この命令は,関数内でだけ有効であり,移動先も同じ関数内でなくてはならない。

例外

関数内でないときの処置は,処理系定義とするが,何もしないこと (no effect) を推奨する。

移動先が同じ関数内でないとき,プログラム停止となる。

備考

コード EF5A

表記 BRT

機能

真条件相対分岐  (branch if true)

呼出形式

a

  b  BRT

結果

なし

入力

a

  :I1,I2,I4

b

  :I1,I2,I4

出力

説明

a

の値が 1 のとき(真のとき)

,関数内で次に実行する命令の位置を,現在の位置から b バイトだけ相

対移動する。

b

=0 なら BRT の直後の命令へ移動する。

この命令は,関数内でだけ有効であり,移動先も同じ関数内でなくてはならない。

例外

関数内でないときの処置は,処理系定義とするが,何もしないこと (no effect) を推奨する。 
移動先が同じ関数内でないとき,プログラム停止となる。

備考

コード EF5B

表記 RET

機能

復帰 (return)

呼出形式 RET

結果

なし

入力


40

B 8440-1995

出力

説明

関数の実行を終了し,呼び出した側に戻る。

例外

対応する戻り先が定義されていない RET の実行は,プログラム停止エラーとなる。

備考

コード EF5C

表記 END

機能

関数宣言の終わり (end of function)

呼出形式 END

結果

なし

入力

出力

説明

関数の宣言における関数の本体のコードの並びの終わりを示す。

例外

備考

コード EF5D

表記 NESTIN

機能

入れ子構造の設定 (nest in)

呼出形式

a

  NESTIN

結果

なし

入力

a

  :I1,I2,I4 入れ子レベル(非負)

出力

説明

現在の入れ子レベルを保存し,入れ子レベル a の局所変数空間を設定する。 
一番外側の空間は,レベル 0 とする。 
利用者変数は,指定されている局所変数空間に置かれる。

レベル n で宣言された利用者変数 u が,すでにレベル m でも宣言されていたとき,レベル m の利用者
変数 u は,レベル n では直接には参照されない。

例外

備考

入れ子レベルは,順番に大きくなるよう指定することが望ましい。

コード EF5E

表記 NESTOUT

機能

入れ子構造からの復帰 (nest out)

呼出形式 NESTOUT

結果

なし

入力

出力

説明

現在の入れ子レベル n の局所変数空間を開放し,保存してある入れ子レベルを回復する。

例外

備考

コード EF5F

表記 NPUSH

機能

外側の入れ子レベルのデータのプッシュ (nested data push)

呼出形式 #a  b  NPUSH

結果 c

入力

a

  :U

b

  :I1,I2,I4  入れ子レベル

出力

c

  :任意の型のデータ

説明

入れ子レベル b で定義された利用者コード a が保持しているデータ値 c を,スタックへ置く。

例外

入れ子レベル b が定義されていないとき。 
利用者コード a が入れ子レベル b で定義されていないか,又は値が定義されていないとき。

備考

入れ子レベル b は,NESTIN で定義する。

コード EF60

表記 NPOP

機能

外側の入れ子レベルのデータのポップアップ (nested data pop)

呼出形式

a

  #b  c  NPOP

結果

なし

入力

a

  :任意の型のデータ

b

  :U


41

B 8440-1995

c

  :I1,I2,I4  入れ子レベル

出力

説明

データ a を入れ子レベル c で定義された利用者コード b へ格納する。

例外

入れ子レベル b が定義されていないとき。

備考

入れ子レベル b は,NESTIN で定義する。

コード EF61

表記 DCL

機能

変数宣言  [declaration of variable(s)]

呼出形式 VAR  #u

1

  #u

2

  …  #u

n

  DCL

結果

なし

入力 VAR        :VAR 関数コード

U

1

,…,U

n

  :利用者コード

出力

説明

利用者コード u

1

,…,u

n

を変数表に登録する。

利用者コード u

i

 (i

=1,…,n)  が変数表に既に登録されているとき,重複して登録されるが,新しい

登録が有効となる。

例外

備考

コード EF62

表記 FREE

機能

変数の解放 (free)

呼出形式 VAR  #u

1

  #u

2

  …  #u

n

  FREE

結果

なし

入力 VAR

:VAR 関数コード

u

1

,…,u

n

  :利用者コード

出力

説明

利用者コード u

1

,…,u

n

を変数表から削除する。

変数表に同一利用者コード u

i

 (i

=1,…,n)  が複数定義されているときは,最近定義された U

i

を無効

とし,古い定義を有効とする。

例外

備考

存在しない利用者コード U

i

を指定しても何も起こらない。

コード EF63

表記 VAR

機能 DCL,FREE の始まり (variable)

呼出形式 VAR

結果 VAR

入力

出力

説明

関数のコード VAR そのものを,スタック上に置く。 
変数の宣言 (DCL),及び解放 (FREE) をする関数における利用者コードの並びの始まりを示す。

例外

備考

コード EF64

表記 FDEF

機能

関数定義の始まり (function definition)

呼出形式 #a  FDEF

結果

なし

入力

a

  :U  (利用者コード)

出力

説明

関数を利用者コード a に設定する。関数定義全体としては,

#a

  FDEF  b

のようになり,関数コード FDEF に続く関数型データ b(関数タグ Fn から始まり END までのデータ)
を,スタックを経由せずに直接利用者コードに設定する。

例外


42

B 8440-1995

備考

関数 STORE を用いて,

#a

  b  STORE

としても効果は同様である。ただしこの場合は,データはスタックを経由する。

コード EF65

表記 BAL

機能

サブルーチンの呼出し  (branch and link, call)

呼出形式

a

  BAL

結果

なし

入力

a

  :I1,I2,I4

出力

説明

現在の位置(BAL コードの直後)をリターンスタックに積み,そこから a バイトだけ相対移動する。
この命令は,関数内でだけ有効であり,移動先も同じ関数内でなくてはならない。

例外

関数内でないときの処置は,処理系定義とするが,何もしないこと (no effect) を推奨する。 
移動先が同じ関数内でないとき,プログラム停止となる。

備考 RET 関数で復帰できる。

別の関数へ飛ぶことは,許されない。

コード EF66

表記 GRET

機能

関数実行の強制終了 (grand return)

呼出形式 GRET

結果

なし

入力

出力

説明

関数呼出しの状態を保持するリターンスタックをすべてクリアし,入力ストリームからの入力待ちと

なる。 
この命令は,関数内でだけ有効である。

例外

関数内でないときの処置は,処理系定義とするが,何もしないこと (no effect) を推奨する。

備考

リターンスタックをクリアするので,関数の実行に戻ることはできない。

コード EF67

表記 ALLOC

機能

領域の割付け (allocate)

呼出形式

a

  #b  #c  ALLOC

結果 d

入力

a

  :I1,I2,I4,R4,R8

b

  :タグ

c

  :U  (利用者コード)

出力

d

  :I1,I2,I4

d

>0 のとき,確保した領域の大きさ

d

<0 のとき,確保に不足する量

説明

a

の値にタグの長さを加えたバイト数の領域を確保し,利用者コード C に割り付ける。

確保した領域には,タグ b が書き込まれる。

a

=0 を指定したしたときは,確保可能な最大量が得られる。このとき確保は行わない。

指定した大きさの領域が確保できないときは,不足する量が負の値で返される。この場合も領域の確
保は行わない。

例外

備考

通常,代入では,必要に応じて領域が自動的に確保される。 
この命令は,主に,配列の領域をあらかじめ確保したいときに用いる。

コード EF68

表記 ALLOCZ

機能

領域の割付け  (allocate and zero clear)

呼出形式

a

  #b  ALLOCZ

結果 d

入力

a

  :I1,I2,I4,R4,R8

b

  :タグ

c

  :U  (利用者コード)

出力

d

  :I1,I2,I4


43

B 8440-1995

d

>0 のとき,確保した領域の大きさ

d

<0 のとき,確保に不足する量

説明

関数 ALLOC と同様に,領域を確保する。 
さらに,確保した領域を,Null コードで初期化する。

例外

備考

コード EF69

表記 ACLR

機能

領域のクリア (area clear)

呼出形式 #a  ACLR

結果

なし

入力

a

  :U  (利用者コード)

出力

説明

利用者コード a に割り付けられた領域を,Null コードで初期化する。

領域が割り付けられていない場合は,何もしない。

例外

備考

コード EF6A

表記 ARELS

機能

領域の解放 (area release)

呼出形式 #a  ARELS

結果

なし

入力

a

  :U  (利用者コード)

出力

説明

利用者コード a に割り付けられた領域を解放する。 
領域が割り付けられていない場合は,何もしない。

例外

備考

コード EF6B

表記 ASIZE

機能

領域のサイズを得る (area size)

呼出形式 #a  ASIZE

結果 b

入力

a

  :U  (利用者コード)

出力

b

  :I2,I4

説明

利用者コード a に割り付けられた領域のサイズを得る。

領域が割り付けられていない場合は,−1(I2 型)を返す。

例外

備考

コード EF6C

表記 VERID

機能 STROLIC のバージョン ID を得る (version ID)

呼出形式 VERID

結果 a

入力

出力

a

  :St

説明 STROLIC 規格のバージョンを識別できるコードを文字列で取り出す。ただし,その文字列の先頭部分

は,次に示す文字列でなくてはならない。

STROLIC JIS B 8440-1994

例外

備考

コード EF6D

表記 SYSID

機能

処理系の ID を得る (system ID)

呼出形式 SYSID

結果 a

入力


44

B 8440-1995

出力

a

  :St

説明

処理系を識別できるコードを,文字列で取り出す。

例外

備考

取り出される文字列の内容は処理系定義であるが,処理系の名前,バージョン,提供機関,リリース
時期を入れることを推奨する。

コード EF6E

表記 INIT

機能

中間コードインタプリタの初期化 (initialize)

呼出形式 INIT

結果

なし

入力

出力

説明

中間コードのインタプリタを初期化する。すなわち,インタプリタの内部状態をリセットするととも
に,データ領域の初期化を行う。

例外

備考

コード EF6F

表記 TRON

機能

トレースの開始 (trace on)

呼出形式 TRON

結果

なし

入力

出力

説明

トレースフラグをオンにする。

例外

備考

関数 TRACE を参照。

コード EF70

表記 TROFF

機能

トレースの終了 (trace off)

呼出形式 TROFF

結果

なし

入力

出力

説明

トレースフラグをオフにする。

例外

備考

関数 TRACE を参照。

コード EF71

表記 TRACE

機能

トレース (trace)

呼出形式

a

  TRACE

結果

なし

入力

a

  :任意の型

出力

説明

トレースフラグがオンなら a をコンソールに出力する。 
オフなら何も出力しない。 
いずれの場合も,a はスタックから取り除かれる。

コンソール出力の形式は,処理系定義とする。

例外

備考

a

として行番号,文番号,ラベルなどを用いると実行のトレース

が,変数の値を用いれば代入のトレースが行える。

コード EF72

表記 SYNC

機能

同期 (synchronize)

呼出形式 SYNC

結果

なし

入力

出力


45

B 8440-1995

説明

コントローラと上位計算機との間の同期を行う。 
このコードを実行すると,応答(ACK 又は NAK)を上位計算機に送る。

例外

備考

スタックの状態は,変わらない。

コード EF73

表記 ACK

機能

肯定的応答 (acknowledge)

呼出形式

なし

結果

なし

入力

出力

説明

同期 (SYNC) に対する肯定的応答コード。

このコードは実行されることはなく,単に STROLIC の表現形式で上位計算機に応答するだけである。

例外

備考 ACK と NAK の使い分けについては処理系定義とするが,コントローラが正常状態にあるときは,

ACK

,そうでないときは,NAK を応答するという使い方が考えられる。

コード EF74

表記 NAK

機能

否定的応答 (negative acknowledge)

呼出形式

なし

結果

なし

入力

出力

説明

同期 (SYNC) に対する否定的応答コード。

このコードは実行されることはなく,単に STROLIC の表現形式で上位計算機に応答するだけである。

例外

備考 ACK と NAK の使い分けについては処理系定義とするが,コント

ローラが正常状態にあるときは,ACK,そうでないときは,NAK
を応答するという使い方が考えられる。

コード EF75

表記 RESULT

機能

結果要求 (result)

呼出形式

a

  RESULT

結果

なし

入力

a

  :I1,I2,I4,R4,R8,Ar,St,Rd,Fn,Vec,Trn,Pm

出力

説明

上位計算機に a の値を送る。

例外

備考

上位計算機からコントローラ内の情報を取り出したいときに使用する。

コード EF76

表記 FXQT

機能

関数の起動 (execution of function)

呼出形式 #a  b  FXQT

結果 c

入力

a

  :Fn

b

  :I1,I2,I4,R4,R8  プロセス番号

出力

c

  :I2

説明 STROLIC 関数 a をプロセス番号 b で起動する。

プロセス番号は,正の整数とする。

出力 c は,正常に起動されたとき 0,起動に失敗したとき次のエラー番号とする。 
  a が関数でないとき  −1 
  システムの制約により起動できないとき  −2

例外

備考

並行処理機能の一つである。

コード EF77

表記 TXQT

機能

タスクの起動 (execution of task)


46

B 8440-1995

呼出形式

a

  TXQT

結果 b

入力

a

  :I1,I2,I4,R4,R8  タスク番号

出力

b

  :I2

説明

タスク番号 a で識別されるタスクを起動する。

タスク番号は,正の整数とする。 
出力 b は,正常に起動されたとき 0,起動に失敗したとき次のエラー番号とする。

a

がすでに起動されているとき  −1

システムの制約により起動できないとき  −2

例外

備考

並行処理機能の一つである。

タスクについては,使用するマルチタスク OS に依存する。

コード EF78

表記 FPREDC

機能

関数の実行優先度 (function precedence)

呼出形式

a b FPRECD

結果 c

入力 a

:I1,I2,I4,R4,R8  プロセス番号

b

  :I1,I2,I4,R4,R8  優先度

出力

c

  :I2

説明

プロセス番号 a で識別される STROLIC 関数の実行優先度を指定する。優先度 b は,正の整数で値が

小さいほど優先度が高い。 
結果 C の値は次のとおりとする。 
  実行終了のとき  0

  実行中のとき    1 
  待ち状態のとき  2

例外

備考

並行処理機能の一つである。 
プロセス番号については,関数 FXQT を参照。 
優先度のデフォルト値は,処理系による。

コード EF79

表記 TPRECD

機能

タスクの実行優先度 (task precedence)

呼出形式

a

  b  TPRECD

結果 c

入力

a

  :I1,I2,I4,R4,R8  タスク番号

b

  :I1,I2,I4,R4,R8  優先度

出力

c

  :I2

説明

タスク番号 a で識別されるタスクの実行優先度を指定する。優先度 b は,正の整数で値が小さいほど

優先度が高い。 
結果 c の値は,次のとおりとする。 
  実行終了のとき  0

  実行中のとき    1 
  待ち状態のとき  2

例外

備考

並行処理機能の一つである。 
タスク番号については,関数 TXQT を参照。 
優先度のデフォルト値は,処理系による。

コード EF7A

表記 FCYCLE

機能

関数の周期起動指定 (function cycle)

呼出形式

a

  b  FCYCLE

結果 c

入力

a

  :I1,I2,I4,R4,R8  プロセス番号

b

  :I1,I2,I4,R4,R8  周期起動定数


47

B 8440-1995

出力

c

  :I2

説明

プロセス番号 a で識別される STROLIC 関数の周期起動を指定する。周期起動定数 b は,正の整数で 0

なら周期起動しない。非 0 で周期起動の間隔を指定する。 
結果 c の値は,次のとおりとする。 
  実行終了のとき  0

  実行中のとき    1 
  待ち状態のとき  2

例外

備考

並行処理機能の一つである。 
プロセス番号については,関数 FXQT を参照。 
周期起動定数の単位は,処理系定義であるが msec とすることを推奨する。

コード EF7B

表記 TCYCLE

機能

タスクの周期起動指定 (task cycle)

呼出形式

a

  b  TCYCLE

結果 c

入力

a

  :I1,I2,I4,R4,R8  タスク番号

b

  :I1,I2,I4,R4,R8  周期起動定数

出力

c

  :I2

説明

タスク番号 a で識別されるタスクの周期起動定数を指定する。周期起動定数 b は,正の整数で 0 なら
周期起動しない。非 0 で周期起動の間隔を指定する。

結果 c の値は,次のとおりとする。 
  実行終了のとき  0 
  実行中のとき    1

  待ち状態のとき  2

例外

備考

並行処理機能の一つである。

タスク番号については,関数 TXQT を参照。 
周期起動定数の単位は,処理系定義であるが msec とすることを推奨する。

コード EF7C

表記 FDONE

機能

関数の終了判定 (function done)

呼出形式

a

  FDONE

結果 b

入力

a

  :I1,I2,I4,R4,R8  プロセス番号

出力

b

  :I2

説明

プロセス番号 a で識別される STROLIC 関数の実行終了を判定する。

b

の値は,次のとおりとする。

  実行終了のとき  0

  実行中のとき    1 
  待ち状態のとき  2 
  中断状態のとき  3

例外

備考

並行処理機能の一つである。 
プロセス番号については,関数 FXQT を参照。

コード EF7D

表記 TDONE

機能

タスクの終了判定 (task done)

呼出形式

a

  TDONE

結果 b

入力

a

  :I1,I2,I4,R4,R8  タスク番号

出力

b

  :I2

説明

タスク番号 a で識別されるタスクの実行終了を判定する。

b

の値は,次のとおりとする。

  実行終了のとき  0


48

B 8440-1995

  実行中のとき    1 
  待ち状態のとき  2

  中断状態のとき  3

例外

備考

並行処理機能の一つである。

関数 TXQT を参照。

コード EF7E

表記 FKILL

機能

関数の強制終了 (kill function)

呼出形式

a

  FKILL

結果 b

入力

a

  :I1,I2,I4,R4,R8  プロセス番号

出力

b

  :I2

説明

プロセス番号 a で識別される STROLIC 関数の実行を強制終了する。

b

の値は,次のとおりとする。

  強制終了できたとき            0 
  プロセス a が実行中でないとき  1

例外

備考

並行処理機能の 1 つである。 
プロセス番号については,関数 FXQT を参照。

コード EF7F

表記 TKILL

機能

タスクの強制終了 (kill task)

呼出形式

a

  TKILL

結果 b

入力

a

  :I1,I2,I4,R4,R8  タスク番号

出力

b

  :I2

説明

タスク番号 a で識別されるタスクの実行を強制終了する。

b

の値は,次のとおりとする。

  強制終了できたとき          0

  タスク a が実行中でないとき  1

例外

備考

並行処理機能の一つである。

関数 TXQT を参照。

コード EF80

表記 FSUSPEND

機能

関数の強制中断 (suspend function)

呼出形式

a

  FSUSPEND

結果 b

入力

a

  :I1,I2,I4,R4,R8  プロセス番号

出力

b

  :I2

説明

プロセス番号 a で識別される STROLIC 関数の実行を強制中断する。

b

の値は,次のとおりとする。

  強制中断できたとき            0 
  プロセス a が実行中でないとき  1

例外

備考

並行処理機能の一つである。 
プロセス番号については,関数 FXQT を参照。

コード EF81

表記 TSUSPEND

機能

タスクの強制中断 (suspend task)

呼出形式

a

  TSUSPEND

結果 b

入力

a

  :I1,I2,I4,R4,R8  タスク番号

出力

b

  :I2

説明

タスク番号 a で識別されるタスクの実行を強制中断する。


49

B 8440-1995

b

の値は,次のとおりとする。

  強制中断できたとき          0

  タスク a が実行中でないとき  1

例外

備考

並行処理機能の一つである。

関数 TXQT を参照。

コード EF82

表記 FRESUME

機能

関数の強制再開 (resume function)

呼出形式

a

  FRESUME

結果 b

入力

a

  :I1,I2,I4,R4,R8  プロセス番号

出力

b

  :I2

説明

プロセス番号 a で識別される STROLIC 関数の実行を強制再開する。

b

の値は,次のとおりとする。

  強制再開できたとき            0 
  プロセス a が中断中でないとき  1

例外

備考

並行処理機能の一つである。 
プロセス番号については,関数 FXQT を参照。

コード EF83

表記 TRESUME

機能

タスクの強制再開 (resume task)

呼出形式

a

  TRESUME

結果 b

入力

a

  :I1,I2,I4,R4,R8  タスク番号

出力

b

  :I2

説明

タスク番号 a で識別されるタスクの実行を強制再開する。

b

の値は,次のとおりとする。

  強制再開できたとき          0

  タスク a が中断中でないとき  1

例外

備考

並行処理機能の一つである。

関数 TXQT を参照。

コード EF84

表記 LOCK

機能

競合資源のロック (reseource lock)

呼出形式

a

  LOCK

結果

なし

入力

a

  :I1,I2,I4,R4,R8  事象フラグ番号

出力

説明

競合資源の排他制御のために,番号 a で指定された事象フラグをオンにする。 
フラグがすでにオンになっている場合,オフになるまで待つ。

例外

備考

並行処理機能の一つである。

コード EF85

表記 UNLOCK

機能

競合資源のロック解除 (reseource unlock)

呼出形式 a

UNLOCK

結果 b

入力

a

  :I1,I2,I4,R4,R8  事象フラグ番号

出力

b

  :I2

説明

競合資源の開放のために,番号 a で指定された事象フラグをオフにする。 
結果 b は,0 となる。 
フラグがすでにオフになっている場合,b は 1 とする。

例外


50

B 8440-1995

備考

並行処理機能の一つである。

コード EF86

表記 EWAIT

機能

事象の待合わせ (event wait)

呼出形式

a

  EWAIT

結果

なし

入力

a

  :I1,I2,I4,R4,R8  事象フラグ番号

出力

説明

番号 a で指定した事象フラグがオンになるまで,すなわち事象が発生するまで待つ。待ちが解かれる

とき,事象フラッグはオフになる。同じ事象フラッグで待っているタスク又はプロセスの中で待ちが
解かれるものはただ一つである。

例外

備考

並行処理機能の一つである。

コード EF87

表記 EWAITA

機能

複数事象の待合わせ(AND 条件)  [multi event wait (and)]

呼出形式

a

1

  a

2

  …  a

n

  n  EWAITA

結果

なし

入力

a

1

:I1,I2,I4,R4,R8  事象フラグ番号

n

:I1,I2,I4,R4,R8  事象の個数

出力

説明

指定した複数事象のすべてが発生するまで待つ。待ちが解かれるとき,指定されたすべての事象フラ
ッグはオフとなる。同じ事象フラッグで待っているタスク又はプロセスの中で待ちが解かれるものは
ただ一つである。

例外

備考

並行処理機能の一つである。 
事象の待合わせ EWAIT を参照。

コード EF88

表記 EWAITO

機能

複数事象の待合わせ(OR 条件)  [multi event wait (or)]

呼出形式

a

1

  a

2

  …  a

n

  n  EWAITO

結果

なし

入力

a

1

:I1,I2,I4,R4,R8  事象フラグ番号

n

:I1,I2,I4,R4,R8  事象の個数

出力

説明

事象バッファをクリアし,指定した複数事象のいずれかが発生するまで待つ。いずれかの事象が発生
すると待ちが解かれる。このとき発生したすべての事象フラッグは,その事象フラッグ番号が事象バ

ッファに格納され,同時にオフとなる。発生した事象フラッグと同じ事象フラッグで待っているタス
ク又はプロセスの中で待ちが解かれるものはただ一つである。

例外

備考

並行処理機能の一つである。 
事象の待合わせの関数 EWAIT を参照。 
事象バッファからの取出しは,関数 EPOP を参照。

コード EF89

表記 EPOP

機能

事象の取出し (pop up event)

呼出形式 EPOP

結果 a

入力

出力 a

:I2  事象フラグ番号

説明

事象バッファから事象を取り出す。 
結果は,事象フラグ番号であり,事象の存在しないときは,0 となる。

例外

備考

並行処理機能の一つである。 
関数 EWAITO を参照。

事象バッファから取り出される順序は,処理系に依存する。


51

B 8440-1995

コード EF8A

表記 ESIG

機能

事象の発生 (signal evevt)

呼出形式

a

  ESIG

結果

なし

入力 a

:I1,I2,I4,R4,R8    事象フラグ番号

出力

説明

番号 a で指定した事象フラグをオンにして事象を発生させる。

例外

備考

並行処理機能の一つである。

コード EF8B

表記 ECLR

機能

事象のクリア (clear event)

呼出形式

a

1

  a

2

  …  a

n

  n  ECLR

結果

なし

入力

a

1

:I1,I2,I4,R4,R8    事象フラグ番号

n

:I1,I2,I4,R4,R8    事象の個数

出力

説明

指定した事象フラグをクリアする。

n

=0 のとき,全部のフラグをクリアする。

例外

備考

並行処理機能の一つである。

コード EF8C

表記 CHIN

機能

チャネルからのデータ入力 (channel in)

呼出形式

a

  CHIN

結果 b

入力

a

  :I1,I2,I4,R4,R8  チャネル番号

出力

b

  :任意の型  入力データ

説明

チャネル番号 a で識別されるチャネルからデータを入力する。チャネル番号には事象フラッグが用い
られる。事象フラッグがオンになるのを待ってデータを取り込む。データが取り込まれると事象フラ

ッグはオフとなる。

例外

備考

並行処理機能の一つである。

事象フラグを介して同期が取られた送り手と受け手とのデータ交換路をチャネルと呼び,データの送
り手は同じチャネルに対し CHOUT を実行する。

コード EF8D

表記 CHOUT

機能

チャネルへのデータ出力 (channel out)

呼出形式

a

  b  CHOUT

結果

なし

入力

a

  :I1,I2,I4,R4,R8  チャネル番号

b

  :任意の型

出力データ

出力

説明

チャネル番号 a で識別されるチャネルへデータ b を出力する。チャネル番号には事象フラッグが用い
られる。

事象フラッグがオフになるのを待ってデータを送る。データを送りだすと事象フラッグはオンとなる。

例外

備考

並行処理機能の一つである。

事象フラグを介して同期が取られた送り手と受け手とのデータ交換路をチャネルと呼び,データの受
け手は同じチャネルに対し CHIN を実行する。

コード EF8E

表記 SHARE

機能

共有変数の宣言 (share variable)

呼出形式 #a  b  SHARE

結果

なし

入力

a

  :任意の型

共有する変数


52

B 8440-1995

b

  :I1,I2,I4

共有変数番号

出力

説明

変数 a を,共有変数番号 b をもつ共有変数として宣言する。

例外

備考

並行処理機能の一つで,他のタスクと変数を共有する機能である。

共有変数のための番号の扱いは,マルチタスク OS 及び処理系に依存する。

コード EE00

表記 TIME

機能

時刻 (get time)

呼出形式 TIME

結果 a

入力

出力

a

  :St

説明

時刻を文字列表現でスタックへ置く。 
表現は処理系定義とするが,HH : MM : SS(24 時間表記)を推奨する。

この場合,HH は時間で 00∼23,MM は分で 00∼59,SS は秒で 00∼59 の値を取る。

例外

備考

コード EE01

表記 DATE

機能

日付 (get date)

呼出形式 DATE

結果 a

入力

出力

a

  :St

説明

日付を文字列表現でスタックへ置く。 
表現は処理系定義とするが,YYYY/MM/DD を推奨する。この場合,YYYY は年で 1900∼2100,MM

は月で 01∼12,DD は日でり 01∼31 の値を取る。

例外

備考

コード EE02

表記 CLOCK

機能

内部時計 (get clock)

呼出形式 CLOCK

結果 a

入力

出力

a

  :I4

説明

内部時計の現在の値を取り出して,スタックへ置く。 
単位は処理系定義とするが,msec を用いることを推奨する。

例外

備考

内部時計は,停止しない。 
内部時計の最大値は,処理系に依存する。

コード EE03

表記 STIME

機能

時刻の設定 (set time)

呼出形式

a

  STIME

結果

なし

入力

a

  :St

出力

説明

時刻を設定する。

例外

文字列が時刻表現に合致しないとき,警告をコンソールに出して,時刻設定は行わない。

備考

コード EE04

表記 SDATE

機能

日付の設定 (set date)

呼出形式

a

  SDATE

結果

なし


53

B 8440-1995

入力

a

  :St

出力

説明

日付を設定する。

例外

文字列が日付表現に合致しないとき,警告をコンソールに出して,日付設定は行わない。

備考

コード EE05

表記 CLRCLK

機能

内部時計のクリア (clear clock)

呼出形式 CLRCLK

結果

なし

入力

出力

説明

内部時計の値を 0 に設定する。

例外

備考

内部時計は,停止しない。

コード EE06

表記 PACKTM

機能

時刻要素データのまとめ (pack time)

呼出形式

a

  b  c  PACKTM

結果 d

入力

a

  :I1,I2,I4,R4,R8  時

b

  :I1,I2,I4,R4,R8  分

c

  :I1,I2,I4,R4,R8  秒

出力

d

  :St                  時刻表現文字列

説明

時 a,分 b,秒 c を時刻表現文字列 d にまとめる。

a

,b,c が実数型の場合には,あらかじめ整数に丸める。

時刻の表現は,処理系定義とする。

例外

時,分,秒の値が所定の範囲内にないとき,その値を 0 として処理する。

備考

コード EE07

表記 UNPKTM

機能

時刻データの要素データへの分解 (unpack time)

呼出形式

a

  UNPKTM

結果

b

  c  d

入力

a

  :St  時刻表現文字列

出力

b

  :I2  時

c

  :I2  分

d

  :I2  秒

説明

時刻表現文字列 a を,時 b,分 c,秒 d に分解する。 
時刻の表現は,処理系定義とする。

例外

文字列 a が時刻表現に合致しないとき,時,分,秒の一部又は全部を 0 として処理する。

備考

コード EE08

表記 PACKDT

機能

日付要素データのまとめ (pack date)

呼出形式

a

  b  c  PACKDT

結果 d

入力

a

  :I1,I2,I4,R4,R8  年

b

  :I1,I2,I4,R4,R8  月

c

  :I1,I2,I4,R4,R8  日

出力

d

  :St                  日付表現文字列

説明

年 a,月 b,日 c を日付表現文字列 d にまとめる。

a

,b,c が実数型の場合には,あらかじめ整数に丸める。

日付の表現は,処理系定義とする。

例外

年,月,日の値が所定の範囲内にないとき,処理系の定めた範囲の下限の値を用いる。

備考


54

B 8440-1995

コード EE09

表記 UNPKDT

機能

日付データの要素データへの分解 (unpack date)

呼出形式

a

  UNPKDT

結果

b

  c  d

入力

a

  :St  日付表現文字列

出力

b

  :I2  年

c

  :I2  月

d

  :I2  日

説明

日付表現文字列 a を,年 b,月 c,日 d に分解する。 
日付の表現は,処理系定義とする。

例外

文字列 a が日付表現に合致しないとき,年,月,日の一部又は全部を処理系の定めた範囲の下限の値

として処理する。

備考

コード EE0A

表記 CNFG

機能

通信ポートの設定  (configuration of communication port)

呼出形式

a

  b  c  d  CNFG

結果

なし

入力

a

  :I2  通信ポート番号

b

  :I2  フロー制御/RS 制御

ビット 1  RS 制御(0:無,1:有) 
ビット 0  フロー制御(0:無,1:有)

c

  :I2  通信速度 (bps)

1 300bps

,2 1200bps

3 2400bps

,4 4800bps

5 9600bps

,6 19200bps

d

  :I2  形式

ビット 5  データ長 (0:7,1:8) 
ビット 3  パリティ(0:無,1:有)

ビット 2  パリティ(0:奇,1:偶) 
ビット 1,0  ストップビット

0

  1  1bit

1

  0  1.5bits

1

  1  2bits

出力

説明

通信ポートの初期化を行う。ポート番号とファイル番号の対応は,あらかじめ処理系で決められてい
るものとする。 
入力の b と d において,指定されていないビットは,0 とする。

例外

不正な設定値があるときは,設定を行わない。

備考

コード EE0B

表記 DOUT

機能

出力ポートへの出力 (data output)

呼出形式

a b DOUT

結果

なし

入力

a

  :I1,I2,I4,R4,R8  出力ポート番号

b

  :I2  出力データ

出力

説明

ポート a へデータ b を出力する。 
ポート番号の値は,あらかじめ整数に丸める。 
ポート a が 8 ビットポートの場合,データ b の下位 8 ビットを使用する。

例外

指定されたポートが存在しない場合,警告を発し,出力は行わない。

備考

コード EE0C

表記 DIN


55

B 8440-1995

機能

入力ポートからの入力 (data input)

呼出形式

a

  DIN

結果 b

入力

a

  :I1,I2,I4,R4,R8  入力ポート番号

出力

b

  :I2  入力されたデータ

説明

ポート a からデータを入力し,結果をスタックへ置く。 
ポート番号の値は,あらかじめ整数に丸める。 
ポート a が 8 ビットポートの場合,データ b の上位 8 ビットは 0 とする。

例外

指定されたポートが存在しない場合,警告を発し,入力は行わない。

備考

コード EE0D

表記 IOWAIT

機能

入力条件待ち (input wait)

呼出形式

a

  b  c  d  IOWAIT

結果

e

  f

入力

a

  :I1,I2,I4,R4,R8  ポート番号

b

  :I2  マスクパターン

c

  :I2  待ち条件

1

のとき and

2

のとき or

d

  :I1,I2,I4,R4,R8  タイムアウト時間

出力

e

  :I2  マスクした値

f

  :I2  タイムアウトフラグ

説明

ポート a から読み込んだ値を,マスクパターン b でマスクしたビットがオンになるまで待つ。 
待ち条件が 1 のときは,すべてのビットがオンになるまで待ち,2 のときは,いずれかのビットがオ
ンになるまで待つ。

d

時間経過しても入力条件が発生しない場合には,タイムアウトとなり,タイムアウトフラグ f を 1

として,待ちは解かれる。 
待ち条件が成立した場合には,フラグ f は 0 とする。

タイムアウト時間 d の単位は,処理系定義とする。 
なお,ポート番号 a が実数で与えられた場合には,あらかじめ整数に丸める。

例外

備考

コード EE0E

表記 ACT

機能

割込みの活性化 (activate interrupt)

呼出形式

a

  ACT

結果

なし

入力

a

  :I1,I2,I4  割込みレベル番号

出力

説明

割込みレベル a の割込みを受け付けるようにする。

例外

備考 ACTRS,REACT 参照。

コード EE0F

表記 ACTRS

機能

割込みの不活性化  (reset interrupt activity)

呼出形式

a

  ACTRS

結果

なし

入力

a

  :I1,I2,I4  割込みレベル

出力

説明

割込みレベル a の割込みを受け付けないようにする。

割込みレベル a が,0 のときは,すべての割込みが禁止される。

例外

備考 ACT,REACT を参照。

コード EE10

表記 REACT


56

B 8440-1995

機能

割込みの再活性化 (reactivate interrupt)

呼出形式 REACT

結果

なし

入力

出力

説明 ACTRS によって最近禁止された割込みレベルの割込みを受け付けるようにする。 
例外

備考

回復される割込みは,最近禁止された一回だけである。

ACT

,ACTRS を参照。

コード EE11

表記 ACTCODE

機能

割込みコードの定義  (define intrrupt code)

呼出形式

a

  b  c  ACTCODE

結果

なし

入力

a

  :I1,I2,I4  割込みコード

b

  :I1,I2,I4  割込みレベル

c

  :Fn,Mc,U  割込み検出手続

出力

説明

割込みレベル b をもつ割込みコード a を定義する。 
割込みの検出には,C の手続を用いる。

例外

備考 ACTION を参照。

コード EE12

表記 ACTION

機能

割込み処理の定義  (define interrupt action)

呼出形式

a

  b  ACTION

結果

なし

入力

a

  :I1,I2,I4  割込みコード

b

  :Fn,Mc,U  割込み処理

出力

説明

割込みコード a の割込み発生時の処理を定義する。

例外

備考 ACTCODE を参照。

コード EE13

表記 TIMER

機能

タイマ割込みの設定 (set timer interrupt)

呼出形式

a

  TIMER

結果

なし

入力

a

  :I1,I2,I4,R4,R8  タイムアウト時間

出力

説明

タイムアウト時間を設定し,タイマ割込みを活性化する。 
タイムアウト時間に 0 又は負の値を設定した場合,タイマ割込みは,不活性となる。

例外

備考

コード EE14

表記 RTIMER

機能

タイマ割込みの再設定  (reactivate timer interrupt)

呼出形式 RTIMER

結果

なし

入力

出力

説明

タイマ割込みによって最近禁止された割込みを受け付るようにする。

タイマ割込みは,再起動されない。

例外

備考

コード EE15

表記 TACTION


57

B 8440-1995

機能

タイマ割込み処理の定義  (define timer action)

呼出形式

a

  TACTION

結果

なし

入力

a

  :Fn,Mc,U  割込み処理

出力

説明

タイマ割込み発生時の処理を定義する。

例外

備考

コード EE16

表記 FSTAT

機能

ファイルステータスの取出し (file status)

呼出形式

a

  FSTAT

結果 b

入力

a

  :I1,I2,I4,R4,R8  ファイル番号

出力

b

  :I2  ファイルのステータス

説明

ファイルのステータスを取り出し,結果をスタックへ置く。

bit-0

  EOF

bit-1

  not opened

bit-2

  I/O error

ファイルの終端に達しているとき,ビット 0 が 1 となる。 
ファイルがオープンされていないとき,ビット 1 が 1 となる。

ファイルアクセスに失敗したとき,ビット 2 が 1 となる。 
ポート番号 a が実数で与えられた場合,あらかじめ整数に丸める。

例外

備考

コード EE17

表記 OUTPUT

機能

ファイルへの書出し (output)

呼出形式

a

  b  OUTPUT

結果

なし

入力

a

  :I1,I2,I4,R4,R8  ファイル番号

b

  :任意の型のデータ  書き出すデータ

出力

説明

b

を a 番のファイルへ書き出す。書き出される値は,テキストに変換される。データの区切り文字は,

処理系定義とするが,空白を用いることを推奨する。 
ポート番号 a が実数で与えられた場合,あらかじめ整数に丸める。

例外

ファイル書込みエラーは,プログラム停止。

備考

コード EE18

表記 INPUT

機能

ファイルの読込み (input)

呼出形式

a

  INPUT

結果 b

入力

a

  :I1,I2,I4,R4,R8  ファイル番号

出力

b

  :任意の型のデータ  読み込んだデータ

説明

a

番のファイルから読み込んだデータをスタックへ置く。

型は,データの表現形式から決定される。 
ポート番号 a が実数で与えられた場合,あらかじめ整数に丸める。

例外

ファイル読込みエラーは,プログラム停止。

備考 INPUT を実行する前に,FSTAT を用いてファイルのオープン状態及び EOF 状態を調べることができ

る。

コード EE19

表記 LOUTPUT

機能

ファイルの 1 行書出し (line output)

呼出形式

a

  b  LOUTPUT

結果

なし


58

B 8440-1995

入力

a

  :I1,I2,I4,R4,R8  ファイル番号

b

  :任意の型のデータ  書き出すデータ

出力

説明

データをファイルへ書き出す。データに続けて改行文字が書き出される。データの変換は,OUTPUT
に準じる。

ポート番号 a が実数で与えられた場合,あらかじめ整数に丸める。

例外

ファイル書込みエラーは,プログラム停止。

備考 OUTPUT 参照。

コード EE1A

表記 LINPUT

機能

ファイルの 1 行読込み (line input)

呼出形式

a

  #t  LINPUT

結果 c

入力

a

  :I1,I2,I4,R4,R8  ファイル番号

t

  :タグ

出力

c

  :t 型のデータ  読み込んだデータ

説明

ファイルから 1 行読み込み,タグ t に従って値を取り出し,結果をスタックへ置く。1 行の最大長及び
データの区切り文字は,処理系定義とする。

ポート番号 a が実数で与えられた場合,あらかじめ整数に丸める。

例外

ファイル読込みエラーは,プログラム停止。

備考

コード EE1B

表記 FOPEN

機能

ファイルの入出力用オープン (file open)

呼出形式

a

  b  FOPEN

結果

なし

入力

a

  :I1,I2,I4,R4,R8  ファイル番号

b

  :I2  オープンモード

出力

説明

ファイルを指定されたモードでオープンする。モードは整数で,次による。

1

のとき  read(読込み)

2

のとき  write(書出し)

4

のとき  append(追加)

ポート番号 a が実数で与えられた場合,あらかじめ整数に丸める。

例外

ファイルのオープンに失敗したときは,プログラム停止。

備考

コード EE1C

表記 FCLOSE

機能

ファイルのクローズ (file close)

呼出形式

a

  FCLOSE

結果

なし

入力

a

  :I1,I2,I4,R4,R8  ファイル番号

出力

説明

ファイルをクローズする。 
ポート番号 a が実数で与えられた場合,あらかじめ整数に丸める。

例外

ファイルクローズエラーは,プログラム停止。

備考

コード EE1D

表記 PUTC

機能

1

文字出力  (put a character)

呼出形式

a

  b  PUTC

結果

なし

入力

a

  :I1,I2,I4,R4,R8  ファイル番号

b

  :I2  書き出すデータ(8 ビット)

出力


59

B 8440-1995

説明

ファイルへ 1 文字書き出す。 
ポート番号 a が実数で与えられた場合,あらかじめ整数に丸める。

例外

ファイル書込みエラーは,プログラム停止。

備考

コード EE1E

表記 GETC

機能

1

文字入力

呼出形式

a

  GETC

結果 b

入力

a

  :I1,I2,I4,R4,R8  ファイル番号

出力

b

  :I2  読み込んだ文字(8 ビット)

説明

ファイルから 1 文字読み込み,結果をスタックへ置く。

ポート番号 a が実数で与えられた場合,あらかじめ整数に丸める。

例外

ファイル読込みエラーは,プログラム停止。

備考

コード EE1F

表記 DECODE1

機能

文字列の分解(BASIC 形式)

呼出形式

a

  #b  DECODE1

結果 c

入力

a

  :St  データ文字列

b

  :t  取り出したいデータ型のタグ

出力

c

  :指定した型  取り出したデータ

説明

データ文字列 a を,タグ b の指定に従って分解した結果をスタックへ置く。

例外

変換エラーは,プログラム停止。

備考

コード EE20

表記 ENCODE1

機能

文字列の構成(BASIC 形式)

呼出形式

a

  b

1

  …  b

n

  n  ENCODE1

結果 c

入力 a

  :St  フォーマット文字列

b

1

,…,b

n

  :任意の型  データ

n

  :I1,I2,I4,R4,R8  データ数

出力 c    :St  構成された文字列

説明

任意の型のデータを,フォーマット文字列に従って変換し,構成された文字列をスタックへ置く。 
フォーマット文字列の働きは,

附属書 を参照。

例外

変換エラーは,プログラム停止。

備考

コード EE21

表記 DECODE2

機能

文字列の分解(C 形式)

呼出形式

a

  b  #c

1

  …  #cn  n  DECODE2

結果 d

入力 a

:St  フォーマット文字列

b

:St  データ文字列

c

1

:U  結果の入る変数

n

:I1,I2,I4,R4,R8  データ数

出力 d

:I2  分解された数

説明

データ文字列を,フォーマット文字列の指定に従って分解して格納し,分解できた数をスタックへ置
く。 
フォーマット文字列の働きは,

附属書 を参照。

例外

変換エラーは,プログラム停止。

備考

コード EE22

表記 ENCODE2

機能

文字列の構成(C 形式)


60

B 8440-1995

呼出形式

a

  b

1

  …  b

n

  n  ENCODE2

結果 c

入力 a

  :St  フォーマット文字列

b

1

,…,b

n

  :任意の型  データ

出力 c

  :St  構成された文字列

説明

任意の型のデータを,フォーマット文字列に従って変換し,構成された文字列をスタックに置く。 
フォーマット文字列の働きは,

附属書 を参照。

例外

変換エラーは,プログラム停止。

備考

コード ED00

表記 JSPEED

機能

関節速度指定 (joint speed)

呼出形式

a

  JSPEED

結果 b

入力

a

  :I1,I2,I4,R4,R8  関節速度比率

出力

b

  :I2  エラーフラグ

説明

移動時の関節速度を比率で指定する。最高速度を 100%とし,0∼100 の値を指定する。既定値は処理
系依存とする。

フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。 
フラグ b の詳細は,処理系定義とする。 
コントローラは,このコードを実行完了後,再度実行されるまで指定値を保持する。

例外

指定値が負値又は最大値を超過した場合,実現不可能となり,出力は非 0 値となる(旧値を保持する)

備考 AJMOVE,IJMOVE,ADRIVE,IDRIVE の 4 関数でだけ有効である。

コード ED01

表記 SPEED

機能

手先速度指定 (speed)

呼出形式

a

  SPEED

結果 b

入力

a

  :I1,I2,I4,R4,R8  手先の速度を指定する数値

出力

b

  :I2  エラーフラグ

説明

手先効果器 (end effector) の直角座標系における移動速度を指定する。 
単位は処理系定義とするが,m/s を推奨する。 
フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。

フラグ b の詳細は,処理系定義とする。 
コントローラは,このコードを実行完了後,再度実行されるまで指定値を保持する。

例外

指定値が負値又は最大値を超過した場合,実現不可能となり,出力は非 0 値となる(旧値を保持する)

備考

直角座標系の動作命令(ALMOVE,ILMOVE,HMOVE,CMOVE1,CMOVE3 の 5 関数)でだけ有効
である。

コード ED02

表記 ACCEL1

機能

手先加速度指定(acceleration)

呼出形式

a

  ACCEL1

結果 b

入力

a

  :I1,I2,I4,R4,R8  手先の加速度を指定する数値

出力

b

  :I2  エラーフラグ

説明

手先効果器(ende effector)の直角座標系での加速度を指定する。

単位は処理系定義とするが,加速度を数値として与える場合には m/s

2

を推奨し,また,最大加速度に

対する割合で指定する場合には%を推奨する。 
フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。

フラグ b の詳細は,処理系定義とする。 
コントローラは,このコードを実行完了後,ACCEL1,ACCEL2 のいずれかが再度実行されるまで指
定値を保持する。

加速度を数値で指定した場合の関節座標系の動作命令への影響については,処理系定義とする。

例外

指定値が,実現不可能な場合,若しくは負値又は最大値を超過した場合。


61

B 8440-1995

備考

加速度を数値で指定した場合,関節座標系の動作命令(AJMOVE,IJMOVE,ADRIVE,IDRIVE の 4
関数)において指定された接線加速度を維持するには,角加速度の複雑な制御が必要となる。

コード ED03

表記 ACCEL2

機能

時間による手先加速度指定  (acceleration by time)

呼出形式

a

  ACCEL2

結果 b

入力

a

  :I1,I2,I4,R4,R8  最大速度に達するまでの時間

出力

b

  :I2  エラーフラグ

説明

最大速度に達するまでの時間を指定することによって,加速度を指定する。 
単位は処理系定義とするが,秒を推奨する。 
フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。

フラグ b の詳細は,処理系定義とする。 
コントローラは,このコードを実行完了後,ACCEL1,ACCEL2 のいずれかが再度実行されるまで指
定値を保持する。

例外

指定値が,実現不可能な場合,若しくは負値又は最大値を超過した場合。

備考

コード ED04

表記 DECEL1

機能

手先減速度指定 (deceleration)

呼出形式

a

  DECEL1

結果 b

入力

a

  :I1,I2,I4,R4,R8  手先の減速度を指定する数値

出力

b

  :I2  エラーフラグ

説明

手先効果器 (end effector) の直角座標系での減速度を指定する。 
単位は処理系定義とするが,減速度を数値として与える場合には m/s

2

を推奨し,また,最大減速度に

対する割合で指定する場合には%を推奨する。

フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。 
フラグ b の詳細は,処理系定義とする。 
コントローラは,このコードを実行完了後,DECEL1,DECEL2 のいずれかが再度実行されるまで指

定値を保持する。 
加速度を数値で指定した場合の関節座標系の動作命令への影響については,処理系定義とする。

例外

指定値が,実現不可能な場合,若しくは負値又は最大値を超過した場合。

備考

減速度を数値で指定した場合,関節座標系の動作命令(AJMOVE,IJMOVE,ADRIVE,IDRIVE の 4
関数)において指定された接線加速度を維持するには,角加速度の複雑な制御が必要となる。

コード ED05

表記 DECEL2

機能

時間による手先減速度指定  (deceleration by time)

呼出形式

a

  DECEL2

結果 b

入力

a

  :I1,I2,I4,R4,R8  最大速度から停止するまでの時間

出力

b

  :I2  エラーフラグ

説明

最大速度から速度 0 に達するまでの時間を指定することによって,加速度を指定する。

単位は処理系定義とするが,秒を推奨する。 
フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。 
フラグ b の詳細は,処理系定義とする。

コントローラは,このコードを実行完了後,DECEL1,DECEL2 のいずれかが再度実行されるまで指
定値を保持する。

例外

指定値が,実現不可能な場合,若しくは負値又は最大値を超過した場合。

備考

コード ED06

表記 SCONF

機能

コンフィギュレーション設定 (set configuration)

呼出形式

a

  SCONF

結果 b

入力

a

  :I2  コンフィギュレーション指定


62

B 8440-1995

出力

b

  :I2  エラーフラグ

ロボットのコンフィギュレーションパラメタ(標準コンフィギュレーション)を設定する。このパラ

メタの効果は,次のロボット制御の実行時に有効となる。

ビット位置

意味 (0/1)

第 0 ビット 
第 1 ビット 
第 2 ビット

右腕系/左腕系 (righty/lefty) 
ひじ(肘)部位置 (above/below)
手首振り (flip/noflip)

説明

ロボットに定義されていない形態を指定した場合,その指定を無視する。 
その他のビットの扱いは,処理系定義とする。

フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。 
フラグ b の詳細は,処理系定義とする。 
コントローラは,この関数を実行完了後,再度実行されるまで指定値を保持する。

例外

備考

この関数は,直角座標系移動に影響する。指定されたコンフィギュレーションが現在の設定と異なっ

ている場合の処置は,処理系定義とする。 
これを回避するためには,いったん関節座標系移動を用いてコンフィギュレーションを合わせた後,
直角座標系移動を実行する,などの対処が考えられる。

コード ED07

表記 SCONF2

機能

コンフィギュレーション設定 2 (set configuration-2)

呼出形式

a

  SCONF2

結果 b

入力

a

  :I2  コンフィギュレーション指定

出力

b

  :I2  エラーフラグ

説明

ロボットのコンフィギュレーションパラメタ(拡張コンフィギュレーション)を設定する。このパラ
メタの効果は,次のロボット制御の実行時に有効となる。 
コンフィギュレーション指定 a によって指定される拡張コンフィギュレーションの意味及びビット位

置は,処理系定義とする。ロボットに定義されていないコンフィギュレーションを指定した場合,そ
の指定は無視する。 
フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。

フラグ b の詳細は,処理系依存とする。 
コントローラは,このコードを実行完了後,再度実行されるまで指定値を保持する。

例外

備考

この関数は,ロボットコントローラに固有のコンフィギュレーション設定を行うものであり,主要な
コンフィギュレーション設定は SCONF で行う。

コード ED08

表記 SCONF3

機能

コンフィギュレーション設定 3 (set configuration-3)

呼出形式

a

  b  SCONF3

結果 c

入力

a

  :I2  コンフィギュレーション指定番号

b

  :I1,I2,I4,R4,R8  設定値

出力

c

  :I2  エラーフラグ

説明

ロボットのコンフィギュレーションパラメタ(拡張量コンフィギュレーション)を設定する。このパ
ラメタの効果は次のロボット制御の実行時に有効となる。

拡張量コンフィギュレーションを指定する番号 a とその設定値 b の意味は,処理系定義とする。ロボ
ットに定義されていないコンフィギュレーションを指定した場合,その指定を無視する。 
フラグ c は,例外が発生しなければ,0 値。発生すれば非 0 値。

フラグ b の詳細は,処理系定義とする。 
コントローラは,このコードを実行完了後,再度実行されるまで指定値を保持する。

例外

備考

この関数は,ロボットコントローラに固有のコンフィギュレーション設定を行うものであり,主要な
コンフィギュレーション設定は SCONF で行う。


63

B 8440-1995

コード ED09

表記 GCONF

機能

コンフィギュレーション取出し (get configuration)

呼出形式 GCONF

結果 a

入力

出力

a

  :I2  コンフィギュレーションパラメタ

説明

現在設定されているコンフィギュレーションパラメタ(標準コンフィギュレーション)を取り出す。

例外

備考

コンフィギュレーションパラメタの意味及び表現については,SCONF を参照。 
ロボットの構造によって意味のないビット値は,暗黙値 0 がセットされる。

コード ED0A

表記 GCONF2

機能

コンフィギュレーション取出し 2 (get configuration-2)

呼出形式 GCONF2

結果 c

入力

出力

a

  :I2  コンフィギュレーションパラメタ

説明

現在設定されているコンフィギュレーションパラメタ(拡張コンフィギュレーション)を取り出す。

例外

備考

コンフィギュレーションパラメタの意味と表現については,SCONF2 を参照。

ロボットの構造によって意味のないビット値は,暗黙値 0 がセットされる。

コード ED0B

表記 GCONF3

機能

コンフィギュレーション取出し 3 (get configuration-3)

呼出形式 a

GCONF3

結果 b

入力

a

  :I2  コンフィギュレーション指定番号

出力

b

  :I1,I2,I4,R4,R8  コンフィギュレーションの値

説明

現在設定されているコンフィギュレーションパラメタ(拡張量コンフィギュレーション)から,形態
指定番号 a に指定されている値を取り出す。

例外

備考

コンフィギュレーションパラメタの意味と表現については,SCONF3 を参照。 
ロボットの構造によって意味のないビット値は,暗黙値 0 がセットされる。

コード ED0C

表記 HERE

機能

現在ポーズの取込み  (get current pose)

呼出形式 HERE

結果 a

入力

出力

a

  :Pm

説明

ロボットの現在ポーズを取り出し,スタックに置く。

例外

備考

移動命令実行中でも現在ポーズを取り出すことを原則とする。ただし,処理系によっては,コントロ
ーラの処理速度に問題を生ずるなどの理由によって,ポーズの取り出しが移動完了後となることもあ
る。

コード ED0D

表記 JHERE

機能

現在ジョイント値の取込み  (get current joint)

呼出形式 JHERE

結果 a

入力

出力

a

  :Ar of (I4,R4)    ジョイント値

説明

ロボットの現在のジョイント値を取り出し,スタックに置く。

例外


64

B 8440-1995

備考

処理系は,I4 又は R4 のいずれかの型で取り出せばよい。 
移動命令実行中でも現在ジョイント値を取り出すことを原則とする。ただし,処理系によっては,コ

ントローラの処理速度に問題を生ずるなどの理由によって,ジョント値の取り出しが移動完了後とな
ることもある。

コード ED0E

表記 CALIB

機能

キャリブレーション (calibration)

呼出形式 CALIB

結果

なし

入力

出力

説明

ロボットの機械的位置姿勢とコントローラの保持している設定値とを一致させる。この働きの詳細は,

処理系定義である。

例外

備考

キャリブレーションの内容は,処理系に依存する。このとき,ロボットが位置姿勢を変更することも

ある。

コード ED0F

表記 PAUSE

機能

中断 (pause)

呼出形式

a

  PAUSE

結果 b

入力

a

  :St  メッセージ

出力

b

  :I2  エラーフラグ

説明

指定されたメッセージを標準出力装置に表示して,オペレータの指示があるまでプログラムの実行を

中断する。 
また,ロボットが動作中の場合にはコントローラに動作中断を指示し,ロボットは速やかに停止する。
停止の方法については,処理系定義とする。

再開の方法は,ロボットコントローラの機能に依存するが,通常はコントローラにつけられた再開ボ
タンが押されるか,再開指令が入力されることによる。 
フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。

フラグ b の詳細は,処理系定義とする。

例外

標準出力装置が定義されていない。

備考

表示機能のないロボットの場合は,標準出力装置の未定義を例外扱いとしない。

コード ED10

表記 DELAY

機能

時間待ち (delay)

呼出形式

a

  DELAY

結果 b

入力

a

  :I1,I2,I4,R4,R8  待ち時間

出力

b

  :I2  エラーフラグ

説明

待ち時間 a で指定した時間だけ,プログラムの実行を遅らせる。

a

の単位は処理系定義とするが,msec を推奨する。

この関数の実行中にプログラム実行が強制終了された場合,残計数は 0 となる。

また,中断又は割込みが発生した場合,残計数は保存され,その後再開した場合は残計数から継続す
る。 
フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。

フラグ b の詳細は,処理系定義とする。

例外

指定値が限界値を超えている。

備考

コード ED11

表記 AJMOVE

機能

関節角空間直線補間絶対移動  (absolute joint move)

呼出形式

a

  AJMOVE

結果 b

入力

a

  :Pm  又は  Ar  of  Pm

出力

b

  :I2  エラーフラグ


65

B 8440-1995

説明

関節角空間の直線補間によって,現在ポーズから,指定ポーズ又は指定ポーズ列を移動する。 
ポーズの座標値は,ロボットのベース座標系で絶対指定される。

移動終了を待たずに次の命令の実行へ進む。 
フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。 
フラグ b の詳細は,処理系定義とする。

例外

指定ポーズ(目的地)が,未定義の場合。 
指定ポーズ(目的地)が,動作領域外の場合。

備考

移動動作の完了を待つときは,$DONE 関数を用いる。

コンフィギュレーションを変えることがある。

コード ED12

表記 IJMOVE

機能

関節角空間直線補間相対移動  (incremental joint move)

呼出形式

a

  IJMOVE

結果 b

入力

a

  :Pm  又は  Ar  of  Pm

出力

b

  :I2  エラーフラグ

説明

関節角空間の直線補間によって,現在ポーズから,指定ポーズ又は指定ポーズ列を移動する。 
ポーズの座標値は,移動開始位置からの相対位置で表現される。

移動終了を待たずに次の命令の実行へ進む。 
フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。 
フラグ b の詳細は,処理系定義とする。

例外

指定ポーズ(列)が,未定義の場合。 
指定ポーズ(列)が,動作領域外の場合。

備考

移動動作の完了を待つときは,$DONE 関数を用いる。

コンフィギュレーションを変えることがある。

コード ED13

表記 ALMOVE

機能

直角座標空間直線補間絶対移動  (absolute linear move)

呼出形式 a

ALMOVE

結果 b

入力

a

  :Pm  又は  Ar  of  Pm

出力

b

  :I2  エラーフラグ

説明

直角座標空間の直線補間によって,現在ポーズから,指定ポーズ又は指定ポーズ列を移動する。

ポーズの座標値は,ロボットのベース座標系で絶対指定される。 
移動終了を待たずに次の命令の実行へ進む。 
フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。

フラグ b の詳細は,処理系定義とする。

例外

指定ポーズが,未定義の場合。 
指定ポーズが,動作領域外の場合。

移動中に特異解が,発生した場合。 
移動中に補間ポーズが,動作領域を超えた場合。

備考

移動動作の完了を待つときは,$DONE 関数を用いる。

コード ED14

表記 ILMOVE

機能

直角座標系直線補間相対移動  (incremental linear move)

呼出形式

a

  ILMOVE

結果 b

入力

a

  :Pm  又は  Ar  of  Pm

出力

b

  :I2  エラーフラグ

説明

直角座標空間の直線補間によって,現在ポーズから,指定ポーズ又は指定ポーズ列を移動する。 
ポーズの座標値は,移動開始位置からの相対位置で表現される。 
移動終了を待たずに次の命令の実行へ進む。

フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。 
フラグ b の詳細は,処理系定義とする。

例外

指定ポーズが,未定義の場合。


66

B 8440-1995

指定ポーズが,動作領域外の場合。 
移動中に特異解が,発生した場合。

移動中に補間ポーズが,動作領域を超えた場合。

備考

移動動作の完了を待つときは,$DONE 関数を用いる。 
現在ポーズを P1,目標ポーズを P2 とし,P3=P2−P1 とすると,次の二つの MOVE 関数は位置,姿

勢を含めて同じ結果となる。

P2

  ALMOVE

P3

  ILMOVE

なお,ポーズの演算に関しては,PADD,PSUB を参照のこと。

コード ED15

表記 HMOVE

機能

ツール座標系直線補間移動 (hand move)

呼出形式 a

HMOVE

結果 b

入力

a

  :Pm  又は  Ar  of  Pm

出力

b

  :I2  エラーフラグ

説明

ハンド(ツール)座標系で表現された指定ポーズ又は指定ポーズ列を直線移動する。 
移動終了を待たずに次の命令の実行へ進む。

フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。 
フラグ b の詳細は,処理系定義とする。

例外

指定ポーズが,未定義の場合。

指定ポーズが,動作領域外の場合。 
移動中に特異解が,発生した場合。 
移動中に補間ポーズが,動作領域を超えた場合。

備考

移動動作の完了を待つときは,$DONE 関数を用いる。

コード ED16

表記 CMOVE1

機能

直角座標空間円弧補間移動 (circular move-1)

呼出形式

a

  b  c  d  CMOVE1

結果 e

入力

a

  :I1,I2,I4,R4,R8  平面指定

b

  :I1,I2,I4,R4,R8  回転角

c

  :Pm  回転中心ポーズ

d

  :I1,I2,I4,R4,R8  姿勢指定

出力

e

  :I2  エラーフラグ

説明

現在ポーズから,指定平面 a,回転中心 c,回転角 b で決まるポーズまで,円弧補間による移動をする。

移動終了を待たずに次の命令の実行へ進む。

a

は,ロボット座標系における平面指定であり,1 のとき xy 平面,2 のとき yz 平面,3 のとき zx 平面

を指す。

b

は,b≧0 のとき反時計回り,b<0 のとき時計回りとする。

d

は,移動に伴う姿勢の変化を指定し,1 のとき回転変換され,2 のとき現在姿勢を保ち,3 のとき処

理系依存の姿勢となる。

フラグ e は,例外が発生しなければ,0 値。発生すれば非 0 値。 
フラグ e の詳細は,処理系定義とする。

例外

指定ポーズが,未定義の場合。

補間ポーズが,動作領域外の場合。 
移動中に特異解が,発生した場合。 
半径が,コントローラの定める限界値を超えた場合,直線移動となる。

備考

移動動作の完了を待つときは,$DONE 関数を用いる。 
メーカは,限界半径の仕様値を明記する。

コード ED17

表記 CMOVE3

機能

直角座標空間 3 点指定円弧補間移動 (circular move-3)

呼出形式

a

  b  CMOVE3

結果 c


67

B 8440-1995

入力

a

  :Pm  経由ポーズ

b

  :Pm  目的ポーズ

出力

c

  :I2  エラーフラグ

説明

現在ポーズ,経由ポーズ,目的ポーズで決まる円弧上を移動する。 
移動終了を待たずに次の命令の実行へ進む。

フラグ c は,例外が発生しなければ,0 値。発生すれば非 0 値。 
フラグ c の詳細は,処理系定義とする。

例外

指定ポーズが,未定義の場合。

補間ポーズが,動作領域外の場合。 
移動中に特異解が,発生した場合。

3

点で平面が決定できないとき。

備考

提供機関は,限界半径の仕様値を明記すること。 
円弧の半径が,コントローラの定める限界値を超えた場合は,直線移動とみなしてもよい。 
移動動作の完了を待つときは,$DONE 関数を用いる。

コード ED18

表記 ADRIVE

機能

関節角絶対位置移動 (absolute joint drive)

呼出形式

a

  ADRIVE

結果 b

入力

a

  :Ar of (I1,I2,I4,R4,R8)    関節角パラメタ

出力

b

  :I2  エラーフラグ

説明

ロボットアームの関節角絶対位置 a へ移動する。

a

の単位(例えば,パルス又は角度)

,及び配列要素と関節との対応については,処理系定義とする。

動作終了を待たずに次の命令の実行へ進む。

フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。 
フラグ b の詳細は,処理系定義とする。

例外

指定パラメタが可動範囲外の場合。

備考

移動動作の完了を待つときは,$DONE 関数を用いる。

コード ED19

表記 IDRIVE

機能

関節角相対位置移動  (incremental joint drive)

呼出形式

a

  IDRIVE

結果 b

入力

a

  :Ar of (I1,I2,I4,R4,R8)    関節角パラメタ

出力

b

  :I2  エラーフラグ

説明

ロボットアームの関節角を増分量 a だけ増やす移動をする。

a

の単位(例えば,パルス又は角度)

,及び配列要素と関節との対応については,処理系定義とする。

動作終了を待たずに次の命令の実行へ進む。 
フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。

フラグ b の詳細は,処理系定義とする。

例外

可動範囲の限界を超えようとする場合。

備考

移動動作の完了を待つときは,$DONE 関数を用いる。

各関節は同時刻に移動を開始し,同時に動作完了することが望ましい。

コード ED1A

表記 SACC

機能

近傍精度設定 (set accuracy)

呼出形式 a

SACC

結果 b

入力

a

  :I1,I2,I4,R4,R8  近傍指定パラメタ

出力

b

  :I2  エラーフラグ V

説明

ロボットアームの位置決め精度を,指定位置に対してどのくらい近傍であるかによって定義する。パ
ラメタの具体的な値は処理系定義とするが,すべて正の値であって,0 直は最高位置決め精度を表す。

また,初期値は,処理系定義であるが,0 値(最高精度)とすることを推奨する。 
フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。 
フラグ b の詳細は,処理系定義とする


68

B 8440-1995

例外

パラメタが許される値以外の場合。

備考

サーボ系は,このパラメタで決まる精度基準に達した所で次の制御に移行する。パラメタの意味は,

精度を表すレベル番号のこともあれば,近傍系の値(球なら半径,箱なら一辺の大きさなど)のこと
もある

コード ED1B

表記 GACC

機能

近傍精度参照 (get accuracy)

呼出形式 GACC

結果 a

入力

出力

a

  :I2,R4  近傍精度パラメタ

説明

現在設定されている近傍精度パラメタの値を取り出す。

例外

備考

処理系は,I2 又は R4 のいずれかの型で取り出す。

コード ED1C

表記 $WAIT

機能

ロボットの動作完了待ち (wait)

呼出形式

a

  $WAIT

結果 b

入力

a

  :I1,I2,I4,R4,R8  タイムアウト時間

出力

b

  :I2  完了状態

説明

最も最近に出された動作指令に対するロボットの動作完了を待つ。

a

時間経過しても動作完了しない場合には,タイムアウトとなり,完了状態 b を 1 として,待ちは解

かれる。

タイムアウト時間 a の単位は,処理系定義とする。 
正常完了ならば,完了状態 b は 0 値。エラーが発生すれば負値。 
エラー時の完了状態 b の詳細は,処理系定義とする。

例外

備考

手先効果器の完了をこの関数で検出できるかは,処理系に依存する。手先効果器の完了を検出する場
合,完了状態値 2 を用いることを推奨する。

すなわち,ロボットも手先効果器も共に動作中なら完了状態を 3,手先効果器だけ動作中なら完了状
態を 2,ロボットだけ動作中なら完了状態を 1 とする。

コード ED1D

表記 $DONE

機能

ロボットの動作完了判定 (done)

呼出形式 $DONE

結果 a

入力

出力

a

  :I2  完了状態

説明

ロボットの動作完了状態を取り出す。

完了状態 a は,動作中なら 1,正常完了していれば 0,異常完了していれば負値。

例外

備考

手先効果器の完了をこの関数で検出できるかは,処理系に依存する。手先効果器の完了を検出する場

合,完了状態値 2 を用いることを推奨する。 
すなわち,ロボットも手先効果器も共に動作中なら完了状態を 3,手先効果器だけ動作中なら完了状
態を 2,ロボットだけ動作中なら完了状態を 1 とする。

コード ED1E

表記 HANDOPEN

機能

ハンドを開く (hand open)

呼出形式 HANDO

結果

なし

入力

出力

説明

現在のハンド(手先効果器)を開く。 
開閉動作の完了を待たずに次の命令へ進む。

例外


69

B 8440-1995

備考

ハンドの開閉を量で指定するとき,又は複数のパラメタを指定するときには,GRASP を用いる。 
開閉動作に時間を要する場合には,DELAY 又は$DONE を併用する。

コード ED1F

表記 HANDCLOSE

機能

ハンドを閉じる (hand close)

呼出形式 HANDCLOSE

結果

なし

入力

出力

説明

現在のハンド(手先効果器)を閉じる。 
開閉動作の完了を待たずに次の命令へ進む。

例外

備考

ハンドの開閉を量で指定するとき,又は複数のパラメタを指定するときには,GRASP を用いる。 
開閉動作に時間を要する場合には,DELAY 又は$DONE を併用する。

コード ED20

表記 GRASP

機能

握り (grasp)

呼出形式

a

1

  …  a

n

  n  GRASP

結果 b

入力

a

1

,…,a

n

  :I1,I2,I4,R4,R8  把握パラメタ

n

          :I1,I2,I4,R4,R8  パラメタ数

出力

b

          :I2  エラーフラグ

説明

指定されたハンド(手先効果器)にパラメタ a

1

,…,a

n

を送り,制御する。

把握動作の完了を待たずに次の命令へ進む。

パラメタの意味は,ハンドに依存する。 
パラメタ数 n が実数で与えられた場合,あらかじめ整数に丸める。 
フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。

例外

手先が定義されていない。 
パラメタの値が不正である。

備考

コード ED21

表記 HANDDEF

機能

ハンドの定義 (hand definition)

呼出形式

a

1

  …  a

n

  n  b  HANDDEF

結果 c

入力

a

1

,…,a

n

  :任意の型  ハンド定義のパラメタ

n

          :I1,I2,I4,R4,R8  パラメタ数

b

          :I1,I2,I4,R4,R8  ハンド番号

出力

c

          :I2  エラーフラグ

説明

ハンド番号 b を宣言し,それに付随する情報(ハンドの種類,ハンド座標系など)を定義する。

指定されるパラメタは,ハンドに依存する。 
パラメタ数 n 及びハンド番号 b が実数で与えられた場合,あらかじめ整数に丸める。 
フラグ c は,例外が発生しなければ,0 値。発生すれば非 0 値。

例外

ハンド番号,パラメタ数,パラメタ(型,値)が不正である。 
処理系で許されるハンド定義数を超えた。

備考

複数のハンドを指定する場合,ハンド番号は必ずしも連続している必要はない。

コード ED22

表記 HANDREF

機能

ハンド定義の参照 (hand reference)

呼出形式 a

HANDREF

結果

b

1

  …  b

n

  n

入力

a

          :I1,I2,I4,R4,R8  ハンド番号 V

出力

b

1

,…,b

n

  :任意の型  ハンド定義のパラメタ

n

          :I2  パラメタ数

説明

ハンド番号 a で指定したハンド(手先効果器)の情報を取り出す。

ハンド番号が定義されていないときは,パラメタ数 n を−1 とする。


70

B 8440-1995

例外

備考

コード ED23

表記 HANDCHG

機能

ハンドの交換 (hand change)

呼出形式

a

  HANDCHG

結果

入力

a

  :I1,I2,I4,R4,R8  ハンド番号

出力

b

  :I2  エラーフラグ

説明

指定されたハンド(手先効果器)に論理的に交換する。 
フラグ b は,例外が発生しなければ,0 値。発生すれば非 0 値。 
なお,ハンド番号 a が実数で与えられた場合,あらかじめ整数に丸める。

例外

ハンド番号が未定義のとき。

備考

ハンドの物理的交換をすることは限らない。


71

B 8440-1995

附属書 2  書式変換

1.

適用範囲  この附属書は,STROLIC における書式変換に関しての書式指定について規定する。

備考  データの文字による表現と処理系の内部表現との変換を,書式変換という。書式変換では,変

換を指示する書式指定に従ってデータの表現形式が変換される。

2.

書式指定

(1)

  BASIC

形式  書式指定は,ANSI FULL-BASIC に従う。

(2)

  C

形式  書式指定は,基本的に ANSI C に従う。ただし,以下の点が異なる。

・  書式文字列中の u,l,L,h については,意味をもたない。

・ %c については,STROLIC の整数型データが対応する。


72

B 8440-1995

参考 1  中間コード・マシン

序文  この参考は,本体及び附属書の規定に関連する事柄を補足するもので,規定の一部ではない。

1.

中間コードマシン概要  中間コードの実行を行う仮想のマシンの構成を述べる。実際のインプリメン

トに際し,このとおりに作る必要はない。あくまで概念的なモデルである。

ロボット言語は,利用者が使用する入力形式言語であり,統一的文法をもつ。これを利用者とロボット

とのマン・マシン・インタフェースとしてとらえるなら,中間コードはロボットの制御盤と外部のコンピ

ュータとのマシン・マシン・インタフェースとして定義される。各種“機能”のロボット制御盤上での実

現には,

“機能”を手続あるいは関数のパッケージとして準備する方法が行われ,それらの呼出しによって

“機能”を実現する。したがって,中間コード表現に用いる文法は,入力用言語で用いられるより単純,

かつ,原始的で十分である。

この中間コードは,

(1)

スタックの利用

(2)

逆ポーランド記法の採用

(3)

タグによるデータ構造の表現

を採用し,単純な処理系を想定しているので,その文法も,関数の処理手続として,

(1)

スタックから実引き数の値を必要なだけ取り,演算する。

(2)

演算結果をスタック上に置く。

だけであり,データ構造のスタックヘの積み方としては,

(3)

タグによって続くデータを解釈する。

を想定しているだけである。

なお,これらの中間コードにおける文法は,入力用言語の文法を規定するものではない。

2.

仮想マシン構成  仮想マシン(インタプリタ)は,入力ストリーム,スタック,変数表,ヒープ,リ

ターンスタックから構成される。


73

B 8440-1995

(1)

入力ストリーム  インタプリタは,一つの入力ストリームをもつ。入力ストリームからは,中間コー

ドがバイト順に送り込まれる。

インタプリタは,

入力された中間コードを順次その場で実行していく。

入力ストリームにデータを送る側を,プログラム装置と呼ぶ。

(2)

スタック(データ用)  インタプリタは,スタック・マシンであり,すべての操作はスタックを中心

に実行される。スタックにプッシュ/ポップされるデータはすべてタグ付きで,その長さは一定して

はいない。

(3)

変数表  変数及び関数は,中間コード上では特定のコード表現で表されている。この変数コードや関

数コードは,インタプリタ内のヒープ領域に実際の場所が取られている。この対応関係は,変数表で

管理する。すなわち,変数及び関数は,変数表を引くことでヒープ上の位置を知ることができる。変

数と関数の区別は,変数表上にはない。ヒープ領域に格納されている値を見ることで判定する。

(4)

ヒープ  インタプリタ内には,ヒープ領域と呼ばれるエリアがある。このエリアは,必要に応じて,

利用者関数及び利用者変数の領域が(動的に)確保される。ヒープ上のデータはすべてタグ付きで格

納されている。格納されている値のタグが関数ならば,そこには関数の本体が格納されているし,そ

れ以外ならばその値,例えば,2 バイト整数のタグならば 2 バイト整数値が(タグ付きで)格納され

ている。

(5)

リターン・スタック  関数の呼出に対し,その戻りを制御するためにリターン・スタックがデータ用

のスタックとは別に用意されている。

ここに,関数の呼出し及び戻りに関する情報が保持されている。

(6)

その他  仮想マシンは,出力ストリームをもっている。仮想マシンは,プログラム装置から送られて

くる中間コードを順次実行していく。しかし,ときには仮想マシンからプログラム装置へ情報を送る

必要もある。このとき,出力ストリームを用いる。

また,仮想マシンは,コンフィギュレーションと呼ぶ状態パラメータをもっている。コンフィギュ

レーションの多くはロボットの姿勢,形態に関するパラメータで,設定/参照を行うことができる。

このパラメータは,実行時の必要に応じて制御装置などで参照される。標準のコンフィギュレーショ

ンとしては次の三つがある。

(a)

右腕系/左腕系 (RIGHTY/LEFTY)

(b)

ひじ部位置 (ABOVE/BELOW)

(c)

手首振り (FLIP/NOFLIP)

3.

仮想マシン動作

(1)

入力ストリームから順次バイト列を取り込む。

(2)

タグのときは,データであると判断し,各々のタグの定義に従って,その個数分データを取り込み,

スタックヘプッシュする。

(3)

タグでなければ関数(利用者関数,組込関数)又は変数(利用者変数)であると判断し,次のバイト

を取り込んで,2 バイトで関数一覧表を引いて変数又は関数の評価を行う。

4.

利用者関数及び利用者変数の評価  利用者関数及び変数は,インタプリタ内の変数表にあらかじめリ

ストされている。変数表は,利用者関数,変数のコード及びその実体の存在するヒープ上の位置へのポイ

ンタから成っている。この表を引くことによって利用者変数又は関数の実体を取り出し,評価することが

できる。取り出した実体が関数の場合は,利用者関数の評価が行われる。そうでなければ利用者変数の評

価が行われる。


74

B 8440-1995

(1)

利用者変数の評価  その値を取り出し,スタックヘプッシュする。このときプッシュされる値は,タ

グ付きのままである。評価を行わずに利用者変数コードそのものをスタックヘプッシュしたい場合は,

評価抑制子を用いる。

(2)

利用者関数の評価  関数本体の評価(実行)を行う。利用者関数の本体も,また,中間コードで書か

れている。インタプリタは,現在のコードのフェッチを中断し,関数本体の中間コードを順にフェッ

チして実行する。飛越し関係の中間コードは,利用者関数の中でしか使用することはできない。

RETURN

命令の実行によって関数の評価は終了し,元の制御の流れに戻る。

5.

利用者関数及び利用者変数の定義  利用者変数/関数の定義には,変数の定義 (DEF) を用いる。変

数の定義では,まず,定義の開始を示す VAR 関数が置かれる。それに続いて評価抑制子付きの利用者コー

ドが並び,そして最後に定義関数 DEF が置かれて終了する。

VAR

  #u1  #u2  #u3  …  #un  DEF

VAR

関数は,自身をスタック上ヘプッシュする。続いて,定義する利用者コードがプッシュされる。最

後に DEF 関数の実行で,中間コードマシンの変数表に利用者コードが登録される。登録された直後の利用

者コードは,値も,値を入れる領域も与えられてはいない。これらは,この利用者コードヘの値の代入が

行われたときに決定される。

u1

…un の利用者コードは,異なっていなくてはならない。しかし,異なる変数定義で同一の利用者コー

ドが現れてもかまわない。この場合より後から定義されたものが有効となるが,先の定義が無効となるわ

けではない。後から定義された利用者コードが解放 (FREE) されると先の定義が再び有効となる。

VAR

  #u1  #u2  #u3  …  #un  FREE

6.

利用者変数への代入

利用者コードへ値を設定するときは,代入 (STORE) を用いる。代入に先立って,利用者コードが定義

されていなくてはならない。

#u

  val  STORE

#u

は評価抑制子付きの利用者コード,val は設定する値。代入ではヒープ領域に値が置かれ,そこへの

ポインタが変数テーブル中に格納される。すでに変数に値が設定されているときは,この時点でヒープ領

域の解放が行われる。ただし,解放する領域の再利用が可能なときは,それを行ってもよい。

7.

構造をもつデータの要素  配列データ,レコードデータ及び文字列データは,構造をもつデータであ

る。構造をもつデータの要素は,タグなしで構造データ中に並べられている。構造をもつデータ中の要素

の参照は抽出 (extract) によって,設定は埋込み (embed) によってそれぞれ行うことができる。

○抽出 (extract)   構造をもつデータの要素の参照は,抽出関数 EXT によって行われる。抽出関数では,

構造をもつデータ内の位置と抽出するデータの型(タグ)を与えて要素を取り出す。

st

  of  #t  EXT

st

は,構造をもつデータで,普通は構造をもつデータが代入されている利用者コードが評価抑制子付き

で書かれる。of は,オフセットで構造をもつデータのデータ部分の先頭をゼロとして数えたバイト位置で

ある。#t は,取り出す要素の型をタグの形で与える。

例  部分文字列


75

B 8440-1995

長さ 8 の文字列“ABCDEGFH”の第 3 文字目(バイト位置 2)から,長さ 3 の文字列“CDE”

が取り出される。

○埋込み (embed)   構造をもつデータの一部分にデータを書き込むには,埋込み関数 EMB を用いる。

st of elm EMB

st

は,構造をもつデータで,普通は構造をもつデータが代入されている利用者コードが評価抑制子付き

で書かれる。of は,オフセットで構造をもつデータのデータ部分の先頭をゼロとして数えたバイト位置で

ある。elm は,埋め込むデータである。

8.

ブロック構造  STROLIC では,変数表を用いて利用者変数の評価を行う。このとき,ただ一つの変数

表によって利用者変数を評価すると,すべての変数は,全域的(グローバル)となる。これに対し,STROLIC

ではブロック構造をもつ表面言語の出力に対応できるように,変数表の局所化の機能が用意されている。

この局所化された構造を入れ子構造と呼ぶ。

入れ子構造の設定  NESTIN

入れ子構造の解除  NESTOUT

入れ子構造には入れ子レベルが与えられる。一番外側は,入れ子レベル 0 である。変数の評価は,現在

の入れ子構造からより外側の入れ子レベルの低い構造へと探していき,初めて見つかった構造の所で評価

が行われる。特別に,より外側の構造の変数を評価するために入れ子レベル付きのデータのプッシュ/ポ

ップがある。

入れ子レベル付きプッシュ  NPUSH

入れ子レベル付きポップ  NPOP

同じ入れ子レベルをもつ構造のより外側の変数は,参照できない。しかし,より内側の構造が解除され

ると見えるようになる。指定できる入れ子レベルは,処理系の定める深さまでである。この深さは,16∼

32

くらいあれば実用上問題はない。

9.

マルチタスク  STROLIC では,マルチタスクの機能を用意する。マルチタスクの実現には,二つのタ

イプがある。一つは中間コードマシンの上で並行的に実行するもので,二つ目は,STROLIC 処理系が乗っ

ているマルチタスク OS によるものである。STROLIC では,両方の並行処理をサポートしている。中間コ

ードマシン内での並行実行を行う場合,プロセスと呼ばれる。STROLIC 利用者関数の実行が同時並行的に

行われる。一方,マルチタスク OS に依存する並行処理をタスクと呼ぶ。STROLIC の中では,プロセスも

タスクも番号で識別される。これをそれぞれプロセス番号,タスク番号と呼ぶ。

起動  FXQT,TXQT

起動補助  FPREDC,TPRECD,FCYCLE,TCYCLE

終了判定  FDONE,TDONE

強制終了  FKILL,TKILL

同時並行的に実行されるプロセス間及びタスク間では,同期をとったり,データの交換を行ったりでき

るようにする必要がある。この目的のためにイベントフラグが用意されている。イベントフラグは,1 ビ

ットのオン/オフフラグで同期又は排他制御に用いる。イベントフラグも番号で識別される。


76

B 8440-1995

ロック  LOCK

ロック解除  UNLOCK

イベント待ち  EWAIT,EWAITA,EWAITO,EPOP

イベント発生  ESIG

イベントクリア  ECLR

プロセスの間でのデータの共有には,グローバル変数を用いる。グローバル変数は,二つのプロセス

(STROLIC 関数)から共に参照することができる。別のタスクと共有するデータの場合は,共有変数宣言

が必要である。共有変数宣言では,変数に共有変数番号が割り付けられ,別のタスクは,この共有変数番

号を頼りに共有変数への参照を実現する。データの排他制御は,イベントフラグを用いて利用者が行う必

要がある。

他に,1 : 1 の単方向のデータ交換を簡便に行うためにチャネルが用意されている。一つのチャネルは,

一つのイベントフラグとスタックとを介したデータ交換で実現される。

チャネル入力  CHIN

チャネル出力  CHOUT


77

B 8440-1995

参考 2  実数の表現

序文  この参考は,本体及び附属書の規定に関連する事柄を補足するもので,規定の一部ではない。

この規格で使用する実数の表現は,IEEE 754 の規格に準じることを推奨する。ただし数としての実数の

ビット構成だけを使用し,非数についてはこれを定めない。

実数は,以下に示すように四つ又は八つのバイトの並びで表現し,それらを第 0 バイトから第 3 バイト

又は第 7 バイトとする。バイトの並びの中で先行するバイトは上位のビットに,後のバイトは下位のビッ

トを構成する。バイト内の各ビットは,MSB が上位のビットに,LBS が下位のビットとなる。

実数は,符号,指数,仮数の三つから構成される。符号は数の符号を表す。指数は 2 の指数で中央値が

0

を表す,いわゆるゲタ履き表現である。仮数は,正規化された 2 進小数で最初の 1 ビットは(常に 1 で

あるので)省略する。ただし,0 は例外とする。

1.

単精度実数  単精度実数は,4 バイト(32 ビット)で表す。

符号  1 ビット

指数  8 ビット(2 の指数でゲタ履き表現)

仮数  23 ビット  [仮数の先頭の 1 ビット (2

1

)

を省略]

2.

倍精度実数  倍精度実数は,8 バイト(64 ビット)で表す。

符号  1 ビット

指数  11 ビット(2 の指数でゲタ履き表現)

仮数  52 ビット[仮数の先頭の 1 ビット (2

1

)

を省略]


78

B 8440-1995

ロボット言語 JIS 原案作成専門委員会  構成表

氏名

所属

(委員長)

新  井  民  夫

東京大学

松  元  明  弘

東洋大学

伊佐山  建  志

通商産業省

吉  田  藤  夫

工業技術院

柿  倉  正  義

工業技術院電子技術総合研究所

高  島      覺

財団法人機械振興協会

黒  澤  豊  樹

黒澤 R&G 技術事務所

石  井      博

株式会社小野技術研究所

鈴  木  和  彦

日本電装株式会社

吉  田  邦  夫

日本ビクター株式会社

斎  藤  和  春

セイコーエプソン株式会社

川  村  敏  和

株式会社東芝

西  本  克  史

富士通株式会社

針  木  和  夫

株式会社不二越

佐  藤  和  克

松下電器産業株式会社

中  村  寿  夫

石川島播磨重工業株式会社

松  島  幹  治

川崎重工業株式会社

村  上  悦  三

株式会社ダイヘン

毛  利  峻  治

株式会社日立製作所

原      龍  一

ファナック株式会社

奥  井  得  博

富士電機株式会社

高  木  裕  明

ぺんてる株式会社

森      俊  二

三菱電機株式会社

田  中  雅  人

株式会社安川電機

松  本  博  志

株式会社ユーシン精機