You are on page 1of 412

1 KAREL言語の概要 Page 1 of 412

1 KAREL言語の概要
1.1 概要
KARELプログラミング言語はPascalやPL/1のような論理的な高レベル言語と、工場の現場で実績のある機械制御言語の効率性
の、双方の特長を備えています。KAREL言語はロボットアプリケーションに特有な機能ばかりでなく、高レベル言語に共通の
構造と慣習を持っています。これはKARELの特徴であり、以下の点が含まれます。
 単純で構造化されたデータ型
 算術、関係、ブール演算子
 ループと選択の制御構造
 コンディションハンドラ
 プロシージャ及びファンクションルーチン
 入出力操作
 マルチプログラミング
KARELのシステムはロボット、制御装置、システムソフトウェアから構成されています。KARELプログラム言語で書かれたプ
ログラムを使用することにより、工業用業務を果たすことができます。KARELはロボットの周辺装置の制御、それらとの通
信、UIFの作成を行うことができます。
R-30iA 制御装置はKARELを使って広い範囲のロボットの機種を使用し、様々なアプリケーションを扱うことができます。 共
通の操作、プログラミング、トラブルシュートの手順が利用可能で、保守部品も少なくできます。
この章はKARELプログラム言語を要約し、KARELのシステムソフトウェアと制御装置を説明します。

1.2 KARELプログラミング言語

1.2.1 概要
KARELプログラムはソースコードに書かれた宣言と実行可能文で構成されています。プログラムに関連付けられた変数のデー
タは変数ファイルに格納されます。
KARELプログラムはROBOGUIDEで作成、編集します。Word Padのようなエディタでも作成及び編集可能です(実行前に必要な
トランスレートはテキストエディタでは不可能です)
KAREL言語トランスレータはソースコードをPコードと呼ばれる内部フォーマットに変換し、Pコードファイルを生成します。
トランスレータはOLPC PROやROBOGUIDEと一緒に提供されます。トランスレート後、KAREL コマンド言語(KCL)または
ファイル画面を使用して、生成したPコードプログラムを制御装置にロードできます。
基本的にROBOGUIDEを用いてKARELプログラムをトランスレートして下さい。付録F「ROBOGUIDEを用いたトランスレー
ト」を参照下さい。

注意
基本的にROBOGUIDEを用いてKARELプログラムをトランスレートして下さい。付録F「ROBOGUIDEを用いたト
ランスレート」を参照下さい。

ロード中に、必要な変数の内RAMに存在しない物が生成されます。それらは未初期化となります。プログラムを実行すると、
インタプリタがロードされたPコードの命令を実行します。
KARELプログラムはプログラムのロジックとデータからなります。プログラムのロジックは特定のタスクを成し遂げるために
実行される、一連のステップを定義します。プログラムのデータは、そのタスクに関連した情報であり、プログラムのロジッ
クが使用します。KARELプログラムのロジックはプログラムのデータから分離されています。
プログラムのロジックはKARELプログラムのBEGIN文とEND文の間にある実行可能文として定義されます。プログラムのデー
タは変数を含みます。変数はKARELプログラム中のVARセクションで宣言され、名称、データタイプ、データの存在する領域
によって識別されます。
プログラムのデータの値は教示操作盤、プログラムによる計算、データファイルからの読み込み、CRT/KBもしくは教示操作盤
の画面、プログラムへの入力として実行中に設定できます。データの値は実行するたびに変更できますが、そのデータを扱う
プログラムのロジックは同じです。
プログラムのロジックとデータがKARELプログラムでは分離されているのは以下の理由によります。
 ある一つの教示点を同じプログラムの複数の場所から参照可能とするため。
 同じデータを複数のプログラムで共有可能とするため。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 2 of 412


 代わりのデータを使用することができる
 CADシステムによるオフラインのデータファイル生成を容易にするため。
プログラムの実行可能セクションはI/O文、ルーチンコールを含みます。
プログラムの開発サイクルは簡単に言うと以下の通りとなります。1.2.2項から1.2.6項で各フェーズの詳細を説明します。
 プログラムのソースコードファイルの作成
 プログラムのトランスレート
 プログラムのロジックとデータのロード
 プログラムの実行
 プログラムの実行履歴の保持
実行されたプログラムの履歴は制御装置によって保持され、それを見ることができます。

注意
1 本マニュアル中のプログラム例は全てサンプルです。使用される際にはユーザの責任において実機で十分な動作確
認の上、導入して下さい。
2 KARELプログラムの実行により制御装置のパフォーマンスへ影響がありますので、ご注意下さい。
3 プログラム、変数、ファイルなどのデータを削除する際には、削除の必要が無いものを消さない様、十分注意して
下さい。
4 KARELプログラムのトランスレートやデバッグではROBOGUIDEが便利です。しかし実機での評価を必ず行って下
さい。

1.2.2 プログラムの作成
基本的にKARELプログラムROBOGUIDEを用いて作成して下さい(OLPC PROのようなオフラインのエディタや、ワードパッド
のようなテキストエディタでKARELプログラムを作成できます)。作成されたファイルをソースファイル又はソースコードと呼
びます。

1.2.3 プログラムのトランスレート
KARELのソースファイルは実行前にPコードと呼ばれる内部コードに変換する必要があります。 KAREL言語トランスレータが
この変換を行い、ソースコード中のエラーもチェックします。
KAREL言語トランスレータはソースコードの最初の行から処理を開始し、エラーを発見するまで継続します。エラーが無けれ
ばトランスレートは成功です。エラーを発見すると、トランスレータはプログラムのチェックを継続しようとしますが、Pコー
ドファイルは生成されません。
基本的にROBOGUIDEを用いてKARELプログラムをトランスレートして下さい。トランスレータはROBOGUIDEから起動する
ことができます(OLPC PROからも可能です)。起動すると編集中だったソースコードがトランスレートされます。トランスレー
トが成功するとトランスレータは成功のメッセージを表示してPコードファイルを生成します。Pコードファイルのファイル名
はソースコードと同じとなり、ファイル形式はPCとなります。このファイルはソースコードの内部表現とプログラムを変数
データ及びルーチンとリンクするために必要な情報を含んでいます。
トランスレータがエラーを検出すると、エラーメッセージとトランスレートされていた行を表示します。エラーを修正した
後、再度プログラムをトランスレートできます。

注意
基本的にROBOGUIDEを用いてKARELプログラムをトランスレートして下さい。付録F「ROBOGUIDEを用いたト
ランスレート」を参照下さい。

1.2.4 プログラムのロジックとデータのロード
プログラムのPコードは制御装置にロードして実行可能です。プログラムがロードされると変数データテーブルがRAM上に生
成されます。これはプログラムの全ての静的変数を含みます。変数データテーブルはプログラムの識別子、全ての変数の識別
子、変数が位置するRAM中の格納場所の名前を含んでいます。
プログラムのロードは文(statement)と変数の間のリンクを確立します。最初、変数データテーブルにある値は未初期化です. VR
ファイルのロードに成功すると、あらゆる変数の値が変数データの格納場所(CMOS, DRAM, SHADOW)に格納されます。
マルチプログラミングを行うと、しばしば大きなアプリケーションや問題を小さい単位に分割して別々に開発と試験すること
が可能になります。KARELシステムでは複数のプログラムをロードすることができます。ロードされた各プログラムは各自P
コード構造を持ちます。
複数のプログラムで変数データを共有することができます。この場合、KAREL言語のFROM節(clause)をVAR宣言セクションに

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 3 of 412

指定する必要があります。その結果プログラムをロードした時にリンクすることができます。このことにより、複数のデータ
のコピーに必要なメモリを節約することができます。
ロード可能なKARELプログラムの数とサイズには以下の制限があります。
 ロード可能なプログラムの数は利用可能なRAMによって制限されます。その制限が無い場合は2704です。
 各プログラムあたりの変数の数は利用可能なRAMによって制限されます。その制限が無い場合は2704です。

1.2.5 プログラムの実行
Pコードと変数ファイルをRAMにロードしたプログラムをプログラム一覧から選択した後、プログラムを試験及びデバッグし
てロボットが期待通り動作することを確認して下さい。
プログラム実行はその第一行から始まります。スタックサイズを指定しない限り、300ワードのスタックがアロケートされま
す。スタックは利用可能なRAMからアロケートされます。スタックの使用量については5.1.6項に記述されています。

1.2.6 実行履歴
プログラムが実行される度に、実行された行番号やネストされたルーチンの記録をKCLのSHOW HISTORYコマンドで表示可能
です。
プログラムが一時停止したり、思いがけなく終了した時に役に立ちます。実行履歴は実行の途絶の原因となった一連のイベン
トを表示します。

1.2.7 プログラム構造
KARELプログラムは宣言と実行可能セクションからなります。実行可能セクションはKAREL言語の文(statement)からなりま
す。例1.2.7にこの構造を示します。

例1.2.7 KARELプログラムの構造
PROGRAM プログラム名
トランスレータディレクティブ
CONST, TYPE, VAR 宣言
ROUTINE 宣言
BEGIN
実行可能文
END プログラム名
ROUTINE 宣言
例1.2.7で大文字で示されている単語がKARELの予約語です。予約語は専用の意味を持ちます。 PROGRAM、CONST、TYPE、
VAR、ROUTINEはプログラムの宣言セクションを示しています。BEGIN 及び ENDは実行セクションの印です。 予約語は2.1.3
項で説明されています。
PROGRAM文(プログラムを識別します)は、あらゆるKARELプログラムで最初の文である必要があります。 PROGRAM文は予
約語PROGRAMと選択可能なプログラムの識別子(例1.2.7のprog_name)から構成されます。識別子は2.1.4項で説明されていま
す。

プログラムはファイル中に存在する必要があります。ファイル名はプログラム名と同じにできますが、同じであ
る必要はありません。この区別は重要です。なぜならトランスレータの起動やプログラムのロードは(プログラ
ムを含む)ファイル名で行いますが、プログラムの実行やクリアはプログラム名で行うからです。
例えばプログラムmover がファイルtransfer に格納されていたとします。トランスレートはファイル名transfer
を参照して行います。しかしプログラムの実行ではプログラム名mover を用います。プログラムとファイルが同
じ名称mover であるなら、ファイルのトランスレートとプログラムの実行は共にmoverで行えます。
プログラムを実行するためにタスクが生成されます。タスク名は起動したプログラム名です。プログラムは別の
プログラム中のルーチンを呼ぶことができますが、タスク名は変化しません。
プログラムを命名するために使用した識別子は、そのプログラム中では他の目的で使用することはできません。例えば変数名
や定数名に使用することはできません。
CONST (constant)、TYPE (type)、VAR (variable)宣言セクションがPROGRAM文の後にきます。あるプログラムに任意の数の
CONST、 TYPE、VARセクションを含めることができます。各セクションに任意の数の宣言文を含めることができます。複数
のCONST、TYPE、VARセクションを任意の順番で記述することができます。CONST、TYPE、VARセクションの数と宣言文
の数を制限するのは利用可能なメモリだけです。
ROUTINE宣言をCONST、TYPE、VARセクションに続けることができます。各ルーチンは予約語ROUTINEから始まり、その構

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 4 of 412

文はプログラムに似ています。ROUTINE宣言はメインプログラムの実行可能セクションに続けることもできます。つまりEND
の後に書くこともできます。
実行可能セクションは始めにBEGIN、終わりにENDを書いて示す必要があります。ENDの後にはプログラムの識別子(例1.2.7の
prog_name)が続きます。 PROGRAM文とEND文は同じプログラム識別子を使用する必要があります。 実行可能セクションには
任意の数の実行可能文を書くことができます。利用可能なメモリの量によってのみ制限されます。

2章、3章、4章も参照して下さい。

1.3 システムソフトウェア
R-30iAシステムにはロボットと電子装置のコントローラがあります。ハードウェアのインタフェースとシステムソフトウェア
がプログラミング、日常運転、保守、トラブルシュートをサポートしています。
この節ではシステムソフトウェアとロボット機種の概要を述べます。
ハードウェアに関する話題は制御装置と機種に固有の保守説明書に非常に詳しく述べられています。

1.3.1 ソフトウェア構成要素
R-30iA システムソフトウェアは制御装置のCPUで実行されるFANUCが提供しているソフトウェアです。そのソフトウェアがR-
30iAシステムを操作することを可能にしています。プログラム実行、日常運転、保守、トラブルシュートにはシステムソフト
ウェアが用いられています。
システムソフトウェアの構成要素は以下のものを含みます。

 ファイルシステム 周辺記憶装置やRAMディスクにデータを格納

 システム変数 システムソフトウェアの一部として宣言されている、恒久的に定義されている変数
 教示操作盤の画面 システムの操作を容易にする画面
 KCL KAREL コマンド言語
 インタプリタ KARELプログラムを実行する

教示操作盤を用いての操作手順に関しては各アプリケーションの取扱説明書を参照して下さい。

1.3.2 サポートしている機種
ロボットは適切なツールを用いることで、システムソフトウェアと制御装置に指示されたアプリケーションのタスクを実行し
ます。R-30iA システムは様々なロボットをサポートしており、各ロボットは特定の種類のアプリケーション向けに設計されて
います。
現在サポートしているロボットの機種に関してはファナックのサービスセンタに連絡して下さい。

1.4 制御装置
R-30iA 制御装置はR-30iAシステムを運転するために必要な電子回路とメモリを搭載しています。電子回路はシステムソフトの
サポートを受けてロボットの操作と移動の指令を行い、周辺装置との通信を可能にします。
制御装置の電子装置はCPU、何種類かのメモリ、入出力(I/O)、システム、ユーザインタフェースの装置を含みます。 キャビ
ネットが周辺装置やリモートのユーザインタフェースが接続されるポート、電子装置を格納しています。

1.4.1 メモリ
制御装置のメモリは4種類あります。
 DRAM
 SRAM
 FROM
 SHADOW
更に制御装置は情報を外部に記憶することが可能です。
DRAM
DRAMメモリは揮発性です。 電源が落ちるとメモリの内容は残りません。DRAMメモリは一次メモリ(TEMP)とも呼ばれます。
システムソフトウェアはDRAM上で実行されます。KARELプログラム及び大部分のKAREL変数はDRAMにロードされ、そこか
ら実行されます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 5 of 412


DRAM変数は揮発性のメモリにあるにもかかわらず、電源投入時の値を制御することができます。あるプログラ
ムのVRファイルがロードされると、そのプログラムのDRAM上の値がVRファイル中の値に設定されます。電源
投入時に初期値を設定するためにVRファイル自体をリロードする必要は無いということです。変数の値が通常
の運転中に変化すると、それは最後にVRファイルがロードされた時に設定された値に戻ります。
電源投入時に確実にDRAM変数を未初期化にしたいならば、そうしたい任意の変数にUNINIT_DRAM節を使用す
れば可能です。%UNINITDRAMディレクティブを使用すれば、電源投入時にプログラムの全変数が未初期化とな
るよう指定できます。
SHADOW変数とDRAM変数が同じプログラム中に存在すると、DRAM変数の電源投入時の設定がVRファイルの
ロード無しに変化する可能性があります。この場合、KARELプログラムが次の条件に依存していないか、特に
注意する必要があります。その条件とは、DRAM変数が電源投入時に特定の値に設定されている事です。特に、
DRAMの電源投入時の値には常にコントロールスタート終了時での値が残ることに注意して下さい。SHADOW
メモリが一杯の場合、DRAMの電源投入時の値が通常のシステム運転の間に設定される可能性があります。
SRAM
SRAM メモリは不揮発性です。電源が落ちた時でも値が残ります。SRAMメモリはCMOSもしくはパーマネントメモリ(PERM)
とも呼ばれます。
TPPメモリプール(TPプログラムに使用されます)はPERMからアロケートされます。KARELプログラムは変数をCMOSに格納さ
れるように指定できます。SRAMメモリの一部はRAMディスク(RD:)と呼ばれるユーザの記憶装置として使用可能です。
フラッシュメモリ (FROM)
FROMメモリは不揮発性です。電源が落ちた時でも値が残ります。FROMはシステムソフトウェアの恒久的な保存に使用されま
す。FROMはユーザ記憶装置、FROMデバイス(FR:)として使用可能です。
SHADOW
SHADOWメモリはSRAMと同じ機能を適用します。SHADOW変数に設定された値は不揮発であり、電源を再投入しても状態を
維持します。SHADOWメモリは静的な傾向のあるデータ向けです。FORループのインデックスのような動的に変化するデータ
をSHADOWメモリに保存するのは効率的ではありません。

図1.4.1 制御装置のメモリ
外部記憶装置
外部記憶装置にバックアップを保存することができます。以下のデバイスを使用可能です。
 メモリカード
 FTP経由のイーサネット
 USBメモリ

1.4.2 入出力システム
制御装置はモジュール化されたI/Oを使用可能です。このことによりアプリケーションによって必要になったI/Oボードを追加が

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 6 of 412

可能になっています。デジタル及びアナログ入出力モジュールがサポートされています。 オプションのプロセスI/Oボードで
I/Oを追加できます。入出力信号の数と種類はアプリケーションの必要性に依存します。
11章により詳細な情報が記載されています。

1.4.3 ユーザインタフェース装置
ユーザインタフェース装置によりプログラムと操作を行うことができます。KARELでサポートしている普通のユーザインタ
フェース装置には操作パネル、教示操作盤、CRT/KBがあります。
図1.4.3はこれらのユーザインタフェース装置を図解しています。操作パネルと教示操作盤は全てのモデルで同じ基本的な機能
を持っています。しかし異なる構成も可能です。
制御装置の正面に位置している操作パネルは、電源投入、プログラム実行、電源断のような日常操作を行うためのボタンを提
供します。操作パネル上のライトは運転の状態を示します。例えば電源ONやサイクル運転中であることを示します。
システムはユーザ操作パネル(UOP) のための入出力信号もサポートしています。ユーザ操作パネルはユーザが用意する装置
で、カスタム制御パネル、PMC、ホストコンピュータのような装置です。11章「入出力システム」を参照して下さい。

図1.4.3 R-30iA制御装置

CRT/KBはオプションで、Telnetを実行するPCのような外部端末で教示操作盤と類似した画面の表示を可能にします。
教示操作盤はLCD、画面に応じた機能を持つファンクションキー、キーパッドキー、状態表示のLEDから構成されます。制御
装置のキャビネットにケーブルで接続され、制御装置から離れて操作することを可能にしています。
内部的には、教示操作盤は制御装置のメインCPUボードに接続されています。ロボットのジョグ送り、プログラムの教示、試
験、デバッグ、変数の調整に使用します。I/Oのモニタと制御、アーム先端のツールの制御、プログラムの状態やロボットの現
在位置の表示にも使用可能です。
各アプリケーションの取扱説明書には各ユーザインタフェース装置の説明に加え、操作方法についても記載されています。

1.4.4 座標系
KARELの位置データに関連した処理では、システム変数の$GROUP[グループ番号].$UFRAMEと$GROUP[グループ番
号].$UTOOLに設定された値を、ユーザ座標系とツール座標系として使用します。この座標系の値は位置データ関連の処理の前
にKARELプログラムで適切な値を設定する必要があります。
TPプログラムの動作文では、現在選択されているユーザ座標系とツール座標系が使用されます。このユーザ座標系とツール座
標系をKARELでも使用する場合、$MNUTOOL[グループ番号, $MNUTOOLNUM[グループ番号] ]や$MNUFRAME[グループ番号,
$MNUFRAMENUM[グループ番号] ]の値を$GROUP[ ].$UTOOLと$GROUP[ ].$UFRAMEに設定する必要があります。
KARELの位置データには、TPプログラムの位置データと違い、教示した時のユーザ座標系番号やツール座標系番号は格納され
ていません。このため、KARELの位置データは、使用する時点で$GROUP[グループ番号]$UFRAMEと$GROUP[グループ番
号].$UTOOLに設定されているユーザ座標系とツール座標系上の位置となります。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 7 of 412

ワールド座標系やメカニカルインタフェース座標系総統の値にする場合、$MOR_GRP[1].$NILPOSが使用可能です。

2 言語の要素
KAREL言語はロボットアプリケーションを効率的にプログラミングするために必要な言語の要素を提供しています。この章ではKAREL言
語の構成要素、トランスレータディレクティブ、使用可能なデータ型の一覧を示し、それぞれに関し記述します。

2.1 言語の構成要素
この節では、以下に示すKAREL言語の構成要素について述べます。
 文字セット
 演算子
 予約語
 ユーザ定義識別子
 ラベル
 定義済み識別子
 システム変数
 コメント

2.1.1 文字セット
KAREL言語ではASCII文字セットが使用可能です。表2.1.1は使用可能なASCII文字セットの要素の一覧です。
付録AのCHRビルトインも参照して下さい。

表2.1.1 ASCII文字セット
文字の種類 文字
文字 abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
数字 0123456789
シンボル @<>=/*+-_,;:.#$'[]()&%{}
空白
特殊文字 form feed (0xC:改行として扱われます)
タブ (空白として扱われます)

ASCII文字セットには以下の規則が適用可能です。
 空白
 空白は予約語と識別子を分けるために必要です。例えば、PROGRAM progname はPROGRAM とprogname の間に空白を含ま
ねばなりません。
 空白は、式の中では、シンボルの演算子と被演算子の間に必要ではありません。必要ではありませんが挿入することは許され
ています。例えば、a = b はa=b と同等です。
 空白はプログラム中で行のインデントに用いられます。
 改行もしくはセミコロン(;)が文(statement)を分けます。改行は他の場所にも現れることができます。
 BEGIN文の後に改行またはセミコロンが必要です。
 一行は252文字以上で短縮されます。 連結を表す文字&を使用することで、次の行に続けることができます。
付録Dに各文字セットの文字コードの一覧が載っています。

2.1.2 演算子
KAREL言語は標準的な算術演算子、関係演算子、BOOLEAN(論理)演算子を提供します。KARELには位置データ及びベクトルデータ
型を被演算子とする特殊な演算子もあります。
表2.1.2(a)はKARELで使用可能な全ての演算子の一覧です。

表2.1.2(a) KAREL演算子
分類 演算子
算術 + - * / DIV MOD

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 8 of 412

関係 < <= = <> >= >


ブール AND OR NOT
特殊 >=< : # @

これら演算子の優先順位は以下の通りです。
 括弧の中の式は最初に評価されます。
 ある階層レベルの括弧の中で、最も優先順位の高い演算から演算が開始され、最も低い優先順位の演算に向けて処理が進みま
す。
 同じレベルの括弧かつ同じ演算子の優先順位の中では、演算は左から右に進みます。
表2.1.2 (b)はKARELの演算子の優先順位を示します。

表2.1.2(b) KAREL演算子の優先順位
演算子 優先順位
NOT 高
:, @, # ↓
*, /, AND, DIV, MOD ↓
単項演算子の+と-, OR, +, - ↓
<, >, =, < >, < =, > =, > = < 低

3章に演算子の機能に関して記載されています。3章も参照して下さい。

2.1.3 予約語
予約語はKAREL中で専用の意味を持ちます。 予約語は予め決められた文脈でのみ使用可能です。 表2.1.3はKARELの全予約語の一
覧です。

表2.1.3予約語一覧
ABORT CONST GET_VAR NOPAUSE STOP
ABOUT CONTINUE GO NOT STRING
ABS COORDINATED GOTO NOWAIT STRUCTURE
AFTER CR GROUP OF THEN
ALONG DELAY GROUP_ASSOC OPEN TIME
ALSO DISABLE HAND OR TIMER
AND DISCONNECT HOLD PATH TO
ARRAY DIV IF PATHHEADER TPENABLE
ARRAY_LEN DO IN PAUSE TYPE
AT DOWNTO INDEPENDENT POSITION UNHOLD
ATTACH DRAM INTEGER POWERUP UNINIT
AWAY ELSE JOINTPOS PROGRAM UNPAUSE
AXIS ENABLE JOINTPOS1 PULSE UNTIL
BEFORE END JOINTPOS2 PURGE USING
BEGIN ENDCONDITION JOINTPOS3 READ VAR
BOOLEAN ENDFOR JOINTPOS4 REAL VECTOR
BY ENDIF JOINTPOS5 RELATIVE VIA
BYNAME ENDMOVE JOINTPOS6 RELAX VIS_PROCESS
BYTE ENDSELECT JOINTPOS7 RELEASE WAIT
CAM_SETUP ENDSTRUCTURE JOINTPOS8 REPEAT WHEN
CANCEL ENDUSING JOINTPOS9 RESTORE WHILE
CASE ENDWHILE MOD RESUME WITH
CLOSE ERROR MODEL RETURN WRITE
CMOS EVAL MOVE ROUTINE XYZWPR
COMMAND EVENT NEAR SELECT XYZWPREXT
COMMON_ASSOC END NOABORT SEMAPHORE
CONDITION FILE NODE SET_VAR

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 9 of 412

CONFIG FOR NODEDATA SHORT


CONNECT FROM NOMESSAGE SIGNAL

2.1.4 ユーザ定義識別子
ユーザ定義識別子は定数、データ型、文のラベル、変数、ルーチン名、プログラム名を表します。識別子に関して以下の規則がありま
す。
 文字で始まります。
 文字、数字、アンダースコアを含むことができます。
 最大12文字です。
 特定のスコープ内では一つの意味しか持てません。 5.1.4項を参照して下さい。
 予約語を使用できません。
 使用する前に定義する必要があります。

例えば例2.1.4のプログラムの抜粋は、プログラム、変数、定数の識別子をどのように宣言するかを示しています。

例2.1.4識別子の宣言
PROGRAM mover --program identifier (mover)
VAR
original : POSITION --variable identifier (original)
CONST
no_of_parts = 10 --constant identifier (no_of_parts)

2.1.5 ラベル
ラベルはプログラム中に印をつける特別な識別子です。GOTO文を用いることでプログラムの制御を印をつけた場所に移すことができま
す。
 ラベルの直後には二つのコロン(::)が続きます。二つのコロンの後に、実行可能な文を同じ行及びそれ以降の行に書くことが許され
ています。
 ルーチンの外から中に、中から外に制御を移すことはできません。

例2.1.5では、weld: : が部品が溶接されるプログラム中のセクションを示しています。GOTO weld の文が実行されると、プログラムの制御


はweld のセクションに移ります。
例2.1.5ラベルの使用
weld:: --label
. --additional program statements
.
.
GOTO weld

2.1.6 定義済み識別子
KAREL言語の定義済みの識別子は予め定義された意味を持っています。定数、型、変数、ビルトインのルーチン名として使用されます。
表2.1.6(a)及び表2.1.6 (b)は定義済み識別子を対応する値と共に示しています。プログラムの文では識別子か値を指定可能です。例え
ば、$MOTYPE = 7は$MOTYPE = LINEARと同じです。しかし定義済み識別子MININTはこの規則の例外です。この識別子は常にその
値、-2147483648の場所に使用する必要があります。その値の数字自体を使用することはできません。

表2.1.6(a) 定義済み識別子と値の要約
定義済み識別子 型 値
TRUE ON
BOOLEAN
FALSE OFF
ON ON
BOOLEAN
OFF OFF
MAXINT +2147483647
INTEGER
MININT -2147483648
RSWORLD
Orientation Type: 1

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 10 of 412

AESWORLD $ORIENT_TYPE 2
WRISTJOINT 3
JOINT 6
Motion Type:
LINEAR (or STRAIGHT) 7
$MOTYPE
CIRCULAR 8
FINE 1
COARSE Termination Types: 2
NOSETTLE $TERMTYPE and 3
NODECEL $SEGTERMTYPE 4
VARDECEL 5

表2.1.6(b) I/Oとファイルの定義済み識別子の要約
定義済み識別子 型
DIN (Digital input) BOOLEAN型ポート配列 (ON/OFFのタイプのI/O。デジタ
DOUT (Digital output) ル出力信号1番ならDOUT[1]等とする)
GIN (Group input)
GOUT (Group output)
INTEGER型ポート配列(整数値を取るタイプのI/O)
AIN (Analog input)
AOUT (Analog output)
TPIN (Teach pendant input)
TPOUT (Teach pendant output)
RDI (Robot digital input)
RDO (Robot digital output)
OPIN (Operator panel input)
OPOUT (Operator panel output)
WDI (Weld input)
BOOLEAN型ポート配列
WDOUT (Weld output)
UIN (User operator panel input)
UOUT (User operator panel output)
LDI (Laser digital input)
LDO (Laser digital output)
FLG (Flag)
MRK (Marker)
LAI (Laser analog input)
INTEGER型ポート配列
LAO (Laser analog output)
TPDISPLAY (Teach pendant KAREL display)*
TPERROR (Teach pendant message line)
TPPROMPT (Teach pendant function key line)*
TPFUNC (Teach pendant function key line)*
TPSTATUS (Teach pendant status line)*
INPUT (CRT/KB KAREL keyboard)*
FILE
OUTPUT (CRT/KB KAREL screen)*
CRTERROR (CRT/KB message line)
CRTFUNC (CRT function key line)*
CRTSTATUS (CRT status line)*
CRTPROMPT (CRT prompt line)*
VIS_MONITOR (Vision Monitor Screen)
*入出力は教示操作盤もしくはCRT/KBのユーザメニュー上で発生します。

2.1.7 システム変数
システム変数はKARELのシステムソフトウェアの一部として宣言されている変数です。それは恒久的に定義されている変数名です。ドル
記号($)から始まります。多くの変数がロボットに特有です。つまりシステムに設置されているロボットのタイプに依存した値を持っていま
す。
KARELプログラムからはアクセスできない変数もあります。読み書き可能かどうかはアクセス権で決まります。

2.1.8 コメント

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 11 of 412

コメントはプログラム中にあるテキストで、あなたや他のプログラマがプログラムを理解し易くするためのものです。例えば例2.1.8は例2.2
(a)及び例2.2(b)からのコメントを幾つか含んでいます。

例2.1.8プログラム中のコメント
--This program, called mover, picks up 10 objects
--from an original POSITION and puts them down
--at a destination POSITION.
original : POSITION --POSITION of objects
destination : POSITION --Destination of objects
count : INTEGER --Number of objects moved

連続したハイフン(--)がコメントの印です。プログラム行では、それらハイフンの右にあるものは何でもコメントとして扱われます。
コメントはそれだけの行を挿入することも、任意のプログラム行の終わりに挿入することも可能です。それらはトランスレータに無視され、
プログラムの実行には完全に影響しません。

2.2 トランスレータディレクティブ
トランスレータディレクティブはKARELプログラムのトランスレートの指示を行うメカニズムです。トランスレータディレクティブはKARELプ
ログラム中の特殊な文(statement)です。以下の目的で用いられます。
 他のファイルをトランスレート時にincludeする
 プログラム及びタスクの属性を指定する
%includeを除く全てのディレクティブはPROGRAM文の後で、他の全ての文の前である必要があります。表2.2はトランスレータディレク
ティブの一覧です。それぞれを簡潔に説明しています。それぞれのトランスレータディレクティブに関する完全な記述は付録Aを参照して
下さい。

表2.2トランスレータディレクティブ
ディレクティブ 説明
%ALPHABETIZE Pコードが生成される時、変数がアルファベット順に生成されます。
%CMOSVARS KAREL変数のデフォルトの格納場所をCMOS(SRAM)にします。
%CMOS2SHADOW 全てのCMOS変数をSHADOWメモリに置くことを指示します。
%COMMENT = 'comment' 16文字までのコメントを指定します。 ロード時に、コメントはプログラムの属性と
して保存されます。教示操作盤のプログラム一覧画面で表示可能です。
%CRTDEVICE TPDISPLAYウィンドウの代わりに、CRT/KBユーザウィンドウをREAD及びWRITE
のデフォルトにします。
%DEFGROUP = n トランスレータに使用されるデフォルトのモーショングループを指定します。
%DELAY 250msec毎に発生するプログラム実行の遅れ時間を指定します。
%ENVIRONMENT filename オフラインのトランスレータによって使用されます。特定の環境ファイルをロードす
べきかを指定します。
%INCLUDE filename プログラムのトランスレート時に挿入するファイルを指定します。
%LOCKGROUP =n,n このタスクによってロックされる動作グループを指定します。
%NOABORT = option 発生してもプログラムを終了しないようにする条件のセットを指定します。
%NOBUSYLAMP プログラム実行中にビジーランプがOFFとなります。
%NOLOCKGROUP このタスクにより動作グループをロックしません
%NOPAUSE = option 発生してもプログラムを一時停止しないようにする条件のセットを指定します。
%NOPAUSESHFT 教示操作盤のシフトキーが離されても一時停止しません。
%PRIORITY = n タスクのプライオリティを指定します。
%SHADOWVARS 全ての変数はデフォルトでSHADOWメモリに生成されます。
%STACKSIZE = n スタックのサイズをロングワード単位(4バイト単位)で指定します。
%TIMESLICE = n 同じプライオリティのタスクの間でラウンドロビン方式のタイムスライスをサポート
します。
%TPMOTION 教示操作盤が有効の場合に限り、動作を実行可能とします。
%UNINITVARS デフォルトで全ての変数が未初期化となります。

例2.2(a)は%INCLUDEディレクティブの実例です。 例2.2(b)がincludeされているファイルを示しています。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 12 of 412

例2.2(a) KARELプログラム中での%INCLUDE
PROGRAM mover
-- This program, called mover, picks up 10 objects
-- from an original POSITION and puts them down
-- at a destination POSITION.
%INCLUDE mover_decs
-- Uses %INCLUDE directive to include the file
-- called mover_decs containing declarations
BEGIN
$SPEED = 200.0
$MOTYPE = LINEAR
OPEN HAND gripper
-- Loop to move total number of objects
FOR count = 1 TO num_of_parts DO
MOVE TO original
CLOSE HAND gripper
MOVE TO destination
OPEN HAND gripper
ENDFOR -- End of loop
END mover

例2.2(b) Includeファイルmover_decs
-- Declarations for program mover in file mover_decs
VAR
original : POSITION --POSITION of objects
destination : POSITION --Destination of objects
count : INTEGER --Number of objects moved
CONST
gripper = 1 -- Hand number 1
num_of_parts = 10 -- Number of objects to move
2.3 データ型
プログラム中のデータを定義するために、3種類のデータ型が提供されています。
 単純タイプ
 KARELプログラム中の定数や変数を代入可能
 KARELプログラム中の実際の値(リテラル)を代入可能
 一つの値だけを持ちます。
 構造化タイプ
 一つ以上の値を持つことが可能な(もしくは必要とする)データとして定義されます。
 単純なデータを合成したものであり、構造化されたデータです。
 ユーザ定義タイプ
 他のユーザ定義タイプを含め、存在しているデータ型によって定義されます。
 幾つかのKAREL変数のデータ型から構成される構造体として定義可能です。
 自分自身を含むことはできません。
表2.3は単純タイプデータ型、構造化データ型の一覧です。ユーザ定義のデータ型は2.4節で説明しています。

表2.3単純データ型及び構造化データ型
単純 構造化
BOOLEAN ARRAY OF BYTE JOINTPOS8
FILE CAM_SETUP JOINTPOS9
INTEGER CONFIG MODEL
REAL JOINTPOS PATH
STRING JOINTPOS1 POSITION
JOINTPOS2 QUEUE_TYPE
JOINTPOS3 ARRAY OF SHORT
JOINTPOS4 VECTOR

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 13 of 412

JOINTPOS5 VIS_PROCESS
JOINTPOS6 XYZWPR
JOINTPOS7 XYZWPREXT
付録Aも参照して下さい。各データ型の記載があります。

2.4 ユーザ定義データ型と構造体
ユーザ定義データ型は存在しているデータ型を使ってあなたが定義するデータ型です。ユーザ定義構造体はデータ構造です。幾つかの
KAREL変数を構成要素とするデータ構造として、新しいデータ型を定義することが可能です。以前定義したユーザデータ型も構成要素
に含めることができます。

2.4.1 ユーザ定義データ型
ユーザ定義データ型は存在しているデータ型によりあなたが定義するデータ型です。
 ユーザ定義データ型の宣言はKARELプログラムのTYPEセクションで行います。
 そこでは他のデータ型によって記述される、新しいデータ型を表す名称を定義します。
 特定のアプリケーションに必要な定義済みのデータ型を使用することができます。
ユーザ定義のデータ型は構造体として定義することが可能です。その構造体は幾つかのKAREL変数のデータ型から構成されます。
継続を示す文字"&"を用いて、新しい行に宣言を続けることができます。例2.4.1はユーザ定義データ型の使用方法と、継続文字&の使用
方法の例を示しています。

例2.4.1ユーザ定義データ型の例
CONST
n_pages = 20
n_lines = 40
std_str_lng = 8
TYPE
std_string_t = STRING[std_str_lng]
std_table_t = ARRAY[n_pages] &
OF ARRAY[n_lines] OF std_string_t
point2d_t = STRUCTURE
x:REAL
y:REAL
ENDSTRUCTURE
rect_t = STRUCTURE
pt1:point2d_t
pt2:point2d_t
ENDSTRUCTURE
VAR
msg_table_1: std_table_t
msg_table_2: std_table_t
rectangle1 : rect_t

使用方法
ユーザ定義データ型は以下のことが可能です。
 同じ型の他の変数への代入
 パラメータとして渡す
 ルーチンから返す
定義が同様であったとしても、異なるユーザ定義型の変数間の代入は許されません。システムにはユーザ定義データ型の変数をセー
ブ、ロードすることが可能ですが、ロード中に現在のデータ型の宣言との一貫性をチェックします。
制限事項
ユーザ定義データ型は以下のことができません。
 自分自身を含めること
 直接、間接を問わず、そのデータ型を含むデータ型を含めること
 ルーチン内で宣言すること

2.4.2 ユーザ定義構造体

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 14 of 412

構造体は、一般的に一緒に用いられる情報を集めて格納するために用いられます。ユーザ定義構造体はデータ構造で、その中に幾つ
かのKAREL変数のデータ型からなる構造として新しいデータ型を定義することが可能です。
ユーザ定義のデータ型の変数を含むプログラムをロードする時、これらのデータ型の定義は以前生成された定義に対してチェックされま
す。もし以前生成された定義が存在しないなら、新しい定義が生成されます。
ユーザ定義構造体に関して、以下のことを行えます。
 データ型を構造体として定義可能です。構成要素となるフィールドのリストからなる構造体として定義します。それぞれのフィールド
は標準的なデータ型、他のユーザ定義データ型のいずれにも成り得ます。例2.4.2(a)をご覧下さい。
例2.4.2(a) ユーザ定義構造体としてデータ型を定義する
new_type_name = STRUCTURE
field_name_1: type_name_1
field_name_2: type_name_2
..
ENDSTRUCTURE
 KARELプログラム中で構造体として定義されたデータ型のメンバにアクセス可能です。継続を示す文字、"&"を用いて構造体の要
素へのアクセスを次行に続けることができます。例2.4.2(b)をご覧下さい。

例2.4.2(b) プログラム中でのユーザ定義構造体のメンバへのアクセス
var_name = new_type_name.field_nam_1
new_type_name.field_name_2 = expression
outer_struct_name.inner_struct_name&
.field_name = expression


 KAREL変数画面で構造体として定義したデータ型の要素を表示可能です
 STRUCTURE型の変数のフィールドに、変数名を繰り返さずにアクセス可能な実行可能文の範囲を決定可能です。例2.4.2(c)をご
覧下さい。

例2.4.2(c) 実行可能文の範囲の決定
USING struct_var, struct_var2 DO
statements
..
ENDUSING

上記の例では、struct_var及びstruct_var2は構造体型変数の名称です。

もしフィールド名と変数名が同じ場合、フィールド名と仮定されます。 もし一つ以上の変数で同じフィールド
名が表れた場合、USING文中で最も右の変数が使用されます。
制限事項
ユーザ定義のデータ構造は以下の制限を持ちます。
 以下のデータ型はデータ構造の一部としては有効ではありません。
 STRUCTUREの定義; 但し宣言された構造体であるデータ型は可能です。例2.4.2(d)をご覧下さい。

例2.4.2(d) 有効なSTRUCTUREの宣言
以下は有効:
TYPE
sub_struct = STRUCTURE
subs_field_1: INTEGER
subs_field_2: BOOLEAN
ENDSTRUCTURE
big_struct = STRUCTURE
bigs_field_1: INTEGER
bigs_field_2: sub_struct
ENDSTRUCTURE
以下は無効:
big_struct = STRUCTURE
bigs_field_1: INTEGER
bigs_field_2: STRUCTURE
subs_field_1: INTEGER
subs_field_2: BOOLEAN

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 15 of 412

ENDSTRUCTURE
ENDSTRUCTURE


 PATH型
 FILE型
 VISION型
 可変長配列
 データ型それ自身、もしくは直接間接を問わずそれを含む型
 定義済みで無い任意の構造体
 変数は構造体(STRUCTURE)として定義できません。しかし構造体として定義済みのデータ型としては定義可能です。例2.4.2(e)を
ご覧下さい。

例2.4.2(e) 定義済み構造体として変数を定義
以下は有効:
TYPE
struct_t = STRUCTURE
st_1: BOOLEAN
st_2: REAL
ENDSTRUCTURE
VAR
var_name: struct_t

以下は無効:
VAR
var_name: STRUCTURE
vn_1: BOOLEAN
vn_2: REAL
ENDSTRUCTURE

2.5 配列
PATH型を除き、任意のデータ型の配列を宣言可能です。KARELプログラムの配列の要素をKAREL変数画面で表示可能です。
更に、以下の二種類の配列を定義可能です。
 多次元配列
 可変長配列

2.5.1 多次元配列
多次元配列は2次元もしくは3次元の要素を持つ配列です。これらの配列では2もしくは3個の添え字を使用して要素を識別します。
多次元配列を用いると以下のことが可能です。
 変数を2もしくは3(それ以上は不可)次元の配列として宣言できます。例2.5.1(a)をご覧下さい。

例2.5.1(a) 変数を2次元もしくは3次元配列として宣言する
VAR
name: ARRAY [size_1] OF ARRAY [size_2] .., OF element_type
OR
VAR
name: ARRAY [size_1, size_2,...] OF element_typeb

 KARELの文(statement)でそれらの要素にアクセスできます。 例2.5.1(b)をご覧下さい。

例2.5.1(b) KARELの文で多次元配列の要素にアクセスする
name [subscript_1, subscript_2,...] = value
value = name [subscript_1, subscript_2,...]

 ルーチンのパラメータを多次元配列として宣言可能です。 例2.5.1(c)をご覧下さい。

例2.5.1(c) ルーチンのパラメータを多次元配列として宣言する

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 16 of 412

Routine expects 2-dimensional array of INTEGER.


ROUTINE array_user (array_param:ARRAY [*,*] OF INTEGER)
The following are equivalent:
ROUTINE rtn_name(array_param: ARRAY[*] OF INTEGER)
and
ROUTINE rtn_name(array_param: ARRAY OF INTEGER)


 KCLのコマンドから要素にアクセスできます。
 KAREL変数画面で要素を表示できます。
 変数ファイルで多次元配列をセーブ、ロードできます。

制限事項
以下の制限が多次元配列に適用されます。
 最も右側にある1つもしくはそれ以上の添え字を省略することにより、部分配列をパラメータに渡したり、他の配列に代入したりできま
す。但し別々の型として定義されていた場合に限ります。 例2.5.1(d)をご覧下さい。

例2.5.1(d) 部分配列の使用
TYPE
array_30 = ARRAY[30] OF INTEGER
array_20_30 = ARRAY[20] OF array_30
VAR
array_1: array_30
array_2: array_20_30
array_3: ARRAY[10] OF array_20_30
ROUTINE array_user(array_data: ARRAY OF INTEGER
FROM other-prog
BEGIN
array_2 = array_3[10] -- 要素array_3[10,1,1]から
-- array_3[10,20,30]までをarray_2へ代入
array_2[2] = array_1 -- 要素array_1[1]からarray_1 [30]までを
-- array_2[2,1]からarray_2[2,30]に代入
array_user(array_3[5,3]) -- 要素array_3[5,3,1]からarray_3[5,3,30]
-- までをルーチンarray_userに渡す。

 以下のものは要素になれません

 配列(配列であるユーザ定義型は可能)
 PATH

2.5.2 可変長配列
可変長配列は実際の長さが不明で、長さがプログラムの使用状況によって異なる配列です。可変長配列を用いると配列の次元を確定す
ること無くKARELプログラムを書けます。全てのケースで、変数の次元はPCファイルがロードされる前に確定される必要があります。
可変長配列を利用すると以下のことが可能です。
 配列のサイズを「今後決定される」(*)ように宣言できます。 例2.5.2をご覧下さい。

例2.5.2配列サイズが「今後決定される」と示す
VAR
one_d_array: ARRAY[*] OF type
two_d_array: ARRAY[*,*] OF type


 配列のサイズを、ソースコードではなく、VRファイルやKCL CREATE VARコマンドから決定することができます。
可変長配列の実際のサイズは、もし配列が既に存在するならその実際のサイズによって決定されます。VRファイルがまずロードされた
なら、そのサイズによって決定されます。KCL CREATE VARコマンドがプログラムのロード前に実行されたなら、コマンドで指定したサイ
ズとなります。プログラム中で明示的に指定された次元は、VRファイルやKCL CREATE VARコマンドで指定された次元と一致しなくては
なりません。

制限事項
可変長配列は以下の制限を持ちます。
 使用する前に長さがわかった状態で、(VRファイルやKCLを用いて)メモリ上にロードもしくは生成される必要があります。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 17 of 412

 PCファイルがロードされる時、確定された次元を用います。未確定なら0となります。

 可変長配列はプログラムのVARセクションでのみ使用可能です。TYPEセクションでは使用できません。
 可変長配列は静的変数でのみ使用可能です。

3 演算子の使用
この章はどのように演算子を使用し、KARELプログラム中で演算を行うかを説明します。まず式(expression)と代入(assignment)を説明し
ます。これらは演算子と被演算子を含むプログラムの文(statement)です。次に、KARELで利用可能な各演算子で行える演算の種類につ
いて述べます。

3.1 式と代入
式(expression)は一連の被演算子を演算子でつないで、 望ましい計算を行うよう定義した値のことです。例えば、4 + 8 は式です。4 と8 が
被演算子 でプラス(+) は 演算子です。
代入は変数の値を、式を評価した結果に設定する文です。

3.1.1 式と代入の規則
式と代入には以下の規則が適用されます。
・ 式の各被演算子は演算子の性質によって決定されるデータ型を持ちます。
・ 各演算子は特定の型の被演算子を必要とし、計算の結果は特定の型となります。
・ 式の中の被演算子は両方とも同じ型で無ければなりません。例えばAND演算子では、その両方の被演算子がINTEGERF型の値で
あること、もしくは両方がBOOLEANであることが必要です。式i AND b があるとします。ここで i はINTEGERでb はBOOLEANで
す。この式は無効です。
・ 被演算子が混合可能な例外が5つあります。その5ケースは以下の通りです。
・ REALの結果を生成するNTEGER 及び REAL被演算子
・ BOOLEANの結果を生成するINTEGER 及び REAL被演算子
・ VECTORを生成するINTEGER 及び VECTOR被演算子
・ VECTORを生成するためのREAL 及び VECTOR被演算子
・ VECTORを生成するPOSITION 及び VECTOR被演算子
・ 任意の位置データ型はPOSITION型に置き換え可能です。

3.1.2 式と代入の評価
表3.1.2は、KARELの演算子及び被演算子を含む式を評価の結果生じた値のデータ型の要約です。

表3.1.2演算結果のデータ型の要約
演算子 < >,>= <=, <, >, AND OR :
+ - * / DIV MOD > =< # @
= NOT
被演算子の型
INTEGER I I I R I B ? I ? ? ?
REAL R R R R ? B ? ? ? ? ?
混合** R R R R ? B ? ? ? ? ?
INTEGER-
REAL
BOOLEAN ? ? ? ? ? B ? B ? ? ?
STRING S ? ? ? ? B ? ? ? ? ?
混合** ? ? V V ? ? ? ? ? ? ?
INTEGER-
VECTOR
混合** REAL- ? ? V V ? ? ? ? ? ? ?
VECTOR
VECTOR V V ? ? ? B*** ? ? V R ?
POSITION ? ? ? ? ? ? B ? ? ? P

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 18 of 412

混合** V
POSITION- ? ? ? ? ? ? ? ? ? ?
VECTOR

**混合 は被演算子のそれぞれが、記載された型であること
***VECTOR型の値は = < > でのみ比較可能
? 演算不可
I INTEGER型
R REAL型
B BOOLEAN型
V VECTOR型
P POSITION型

3.1.3 変数と式
代入文は変数と式を含んでいます。変数は任意のユーザ定義の変数、書き込み可能なシステム変数、書き込み可能な出力のポート配
列変数(DOUT[1]等)が使用可能です。式は有効なKARELの式全てです。以下に代入の例を示します。

$KAREL_ENB = 1 -- INTEGERの値をシステム変数に代入
real_var = real_var +0.5 -- REALの値をREALの変数に代入

変数と式のデータ型は一致する必要があります。但し以下の3つの例外があります。
・ INTEGER型の変数はREALの変数に代入可能です。この場合、式の評価の間INTEGERはREALの数として扱われます。しかしな
がら、REALの数値をINTEGERが期待されている部分に使用することはできません。
・ 必要ならREALの数値をINTEGERに変換することは可能です。ROUNDもしくはTRUNCビルトイン関数で変換可能です。
・ INTEGER、BYTE、SHORT型は互いに代入可能です。但し範囲外の値が代入されると実行時エラーとなります。
・ 任意の位置データ型は他の任意の位置データ型に代入可能です。キネマティクスを持たないグループのJOINTPOSをXYZWPRに
代入すると実行時にエラーとなります。

次の項目も参照して下さい。関係演算子、ROUND 及び TRUNC ビルトイン、付録A「KAREL言語アルファベット順解説」。

3.2 演算
演算はKARELで利用可能な演算子を用いて値を計算する変数、定数、リテラルの操作です。以下の演算が議論されます。
・ 算術演算
・ 関係演算
・ ブール演算
・ 特殊演算
表3.2はKARELで使用可能な全ての演算子の一覧です。

表3.2 KAREL演算子
演算 演算子
算術 + - * / DIV MOD
関係 < <= = <> >= >
ブール AND OR NOT
特殊 >=< : # @

3.2.1 算術演算
加算(+), 減算(-), 及び乗算(*) 演算子、DIV及びMOD演算子が算術式の中で値の計算に使用可能です。表3.2.1(a)を参照して下さい。
表3.2.1(a) +,-,*演算子を用いた算術演算
式 結果
3+2 5
3–2 1
3*2 6

・ DIV及びMOD演算子はINTEGERの除算を行うために使用します。表3.2.1 (b)を参照して下さい。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 19 of 412

表3.2.1(b) 算術演算の例
式 結果
11 DIV 2 5
11 MOD 2 1

・ DIV演算子は割り切れなかった時に結果を切り捨てます。
・ MOD演算子は、左の被演算子を右の被演算子で割った結果の剰余を返します。
・ MODの右の被演算子が負の値なら、結果も負の値です。
・ DIV式の除数もしくはMOD式の右辺の被演算子が0ならKARELプログラムは"ゼロ割算"エラーで終了します。
・ INTEGERのビット演算子、AND, OR, NOTは2つのINTEGERを2進数でAND, OR, NOT演算した結果を返します。表3.2.1(c)を参照
して下さい。

表3.2.1(c) ビット演算を用いた算術演算
式 同等な2進数の値 結果
5 AND 8 0101 AND 1000 0000 = 0
5 OR 8 0101 OR 1000 1101 = 13
-4 AND 8 1100 AND 1000 1000 = 8
-4 OR 8 1100 OR 1000 1100 = -4
NOT 5 NOT 0101 1010 = -6*
NOT –15 NOT 110001 1110 = 14*
*負のINTEGERは2の補数形式で表現されるため、NOT iは-iと等しくない。

・ INTEGERもしくはREALの等式がINTEGERもしくはREAL変数の限界を超える値になる場合、プログラムはエラーで終了します。小
さすぎて表現できない場合、0になります。

表3.2.1(d)はKARELの演算の優先順位を示します。

表3.2.1(d) KAREL演算子の優先順位
演算子 優先順位
NOT 高
:, @, # ↓
*, /, AND, DIV, MOD ↓
Unary + and -, OR, +, - ↓
<, >, =, < >, < =, > =, > = < 低

3.2.2 関係演算
関係演算子(<>, =, >, <, <=, >=)はBOOLEAN(TRUE/FALSE)の結果を生成します。その結果は被演算子の値が指定された関係にある
か否かに相当します。関係式の中では、双方の被演算子は同じ単純データ型で無ければなりません。この規則には二つの例外がありま
す。
・ REAL及びINTEGERの式は混在可能です。その場合INTEGERの被演算子はREALの数に変換されます。例えば式1 > .56 におい
て、1 は1.0 に変換され、結果はTRUEです。
・ VECTOR型の被演算子は、これは構造化データ型ですが、関係式で比較可能です。但し等号(=)及び不等号(< >)演算子のみが使
用可能です。

関係演算子はINTEGER及びREALの被演算子と共に機能し、標準的な数学的な等式を評価するために用いられます。 表3.2.2を参照し
て下さい。

等号(=)及び不等号(< >)によるREALの値の検査は期待した結果を生まないかもしれません。REALの値(実数)の
格納、操作方法が原因となり、等価に見える二つの値は厳密には等しくないかもしれません。このことはREAL
型を成分に持つVECTOR型の値にも当てはまります。適切な場所に>= または <=を=の代わりに用いて下さい。

関係演算子はSTRING型の値も被演算子にできます。 STRINGの値は左から右に字句解析的に一文字ずつ比較され、以下のことが発
生するまで続きます。表3.2.2を参照して下さい。
・ 一方のSTRING中の文字の文字コード(character code)が、もう一方のSTRINGの該当文字の文字コードより大きい。 この場合の結
果は「前者のSTRINGが大きい」です。例えば、AのASCIIコードは65, aは97です。それ故にa > AはTRUEです。
・ 一方のSTRINGが、もう一方に文字が残っているのに、使い果たされた場合。この場合の結果は「前者のSTRINGが後者より小さ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 20 of 412

い」です。
・ 双方のSTRINGの式が、不一致を発見する前に使い切られた場合。この場合の結果は「両SRTINGは等しい」です。

表3.2.2 関係演算の例
式 結果
'A' < 'AA' TRUE
'A' = 'a' FALSE
4>2 TRUE
17.3< > 5.6 TRUE
(3 *4) < > (4* 3) FALSE
被演算子がBOOLEANの場合、TRUE > FALSEはTRUEの文として定義されています。それ故に、式FALSE >= TRUEはFALSEの文で
す。FALSE >= FALSE 及び TRUE >= FALSE もまた真です。

3.2.3 ブール演算
ブール演算子AND、OR、NOTをBOOLEANの被演算子と共に用いて、標準的な数学的評価を行うことができます。表3.2.3(a)は
BOOLEANの式を評価した結果の要約です。いくつかの例が表3.2.3(b)に挙げられています。

表3.2.3(a) ブール演算の要約
演算子 被演算子 1 被演算子 2 結果
TRUE - FALSE
NOT
FALSE - TRUE
TRUE
TRUE
FALSE TRUE
OR
TRUE
FALSE
FALSE FALSE
TRUE TRUE
TRUE
FALSE
AND
TRUE FALSE
FALSE
FALSE

表3.2.3(b) AND,OR, NOT演算子を用いたブール演算


式 結果
DIN[1] AND DIN[2] DIN[1] 及び DIN[2] が共にTRUEならTRUE。それ以外はFALSE
DIN[1] AND NOT DIN[2] DIN[1]がTRUEかつDIN[2]がFALSEならTRUE。それ以外はFALSE
(x < y) OR (y > z) x < y もしくは y > zならTRUE。それ以外はFALSE
(i = 2) OR (i = 753) i = 2 もしくは i = 753ならTRUE。それ以外はFALSE

3.2.4 特殊演算
KAREL言語は特殊な演算子を用意しています。例えばPOSITION型変数の近似、相対的な位置の計算、VECTOR型変数の演算、
STRING型変数の演算を行います。この節ではそれら演算子を説明し、使用方法の例を幾つか示します。
関係演算子(>=<)を用いた近似演算には以下の規則が適用されます。
・ 関係演算子(>=<)は二つのPOSITION型の被演算子が大体等しいかどうか決定し、BOOLEANの結果を生成します。比較は等号(=)
と似ています。但し比較される被演算子が同じでなくても良いという点を除いてです。付加軸の値は考慮されません。
・ 関係演算子 (>=<)は通常のプログラム中でのみ使用可能です。コンディションハンドラのコンディションとしては使用できません。

以下の例では、関係演算子(>=<) は現在のロボットの位置(CURPOSビルトインを用いて決定された)が指定のパーチポジションに近いか
どうか決定するために使用されています。

例3.2.4(a) 関係演算子(>=<)
IF perch >=< CURPOS (0,0) THEN
WRITE(‘OK’, CR)
ELSE
ABORT
ENDIF

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 21 of 412

相対位置演算
ある位置の空間上の位置を決定するためには、その位置を特定の座標系に基づいた値(表現)とする必要があります。KARELでは参照
座標系はPOSITION型です。相対位置演算子(:)はPOSITIONもしくはVECTORを、他の位置の座標系に基づいたものとすることが可能
です(他の位置を原点とする座標系での表現となります)。
相対位置演算子(:)は、位置の参照座標系をある座標系から別の座標系にする変換を行うために用いられます。
図3.2.4(a)に示した例では、ターゲットを車上の位置に置くvisionシステムが用いられています。ボルトの頭をバンパー上に置くようなシス
テムです。相対位置演算子は車の図面からのデータに基づいてドアハンドルの位置を計算するために用いられています。図3.2.4(a)に示
した等式は、w_handle のワールド座標での位置を計算するために用いられています。

図3.2.4(a) ワールド座標系に対してのw_handle の決定

INVビルトインファンクションは参照の方向を逆にします。
例えば、bolt に対するドアハンドルの位置(b_handle) を決定するためには、図3.2.4(b)に示した等式を用いて下さい。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 22 of 412

図3.2.4(b) BUMPER座標に対するb_handle の決定


相対位置演算子(:)の順番は重要です。b_handle = bolt : w_handle はb_handle = w_handle : boltと同じではあり
ません。

付録AのINVビルトインファンクションも参照して下さい。

ベクトル演算
ベクトル演算には以下の規則が適用されます。
・ VECTORの式は、被演算子をVECTORとする加算(+)及び減算(-)を行うことが可能です。結果はVECTORです。その成分は被演算
子の対応する成分の和もしくは差となっています。例えば以下のプログラムの結果として、VECOTR型変数vect_3 の成分は (5, 10,
9)に等しくなります。

例3.2.4(b) ベクトル演算
vect_1.x = 4; vect_1.y = 8; vect_1.z = 5
vect_2.x = 1; vect_2.y = 2; vect_2.z = 4
vect_3 = vect_1 + vect_2

・ 乗算(*)及び除算(/)は以下のいずれかで可能です。
・ VECTORとINTEGER
・ VECTORとREAL
VECTORとINTEGER、もしくはVECTORとREALの積はそのVECTORの拡大/縮小バージョンです。 VECTORの各成分が
INTEGERもしくはREAL倍されています。なおINTEGERはREALとして扱われています。
例えば、VECTOR(8,16,10)は以下の演算の結果として生成されます。
(4, 8, 5) * 2

VECTORの成分は演算子の左辺もしくは右辺として使用可能です。

・ INTEGERもしくはREALでVECTORを割ると、VECTORの各成分がINTEGER(REAL扱い)もしくはREALで割られます。例えば、(4,
8, 5) / 2は(2, 4, 2.5)となります。除数を0としないで下さい。
・ INTEGERもしくはREALをVECTORで割ると、INTEGER(REAL扱い)もしくはREALにVECTORの成分の逆数を掛けた物となりま
す。それ故に新しいVECTORが生成されます。例えば、3.5 / VEC(7.0,8.0,9.0)は(0.5,0.4375,0.38889)となります。
もしVECTORの要素の1つでも0ならば、そのVECTORで割らないで下さい。
・ 外積演算子(#)は次に述べるようなVECTORを生成します。二つの被演算子に垂直な方向を向いており、その方向は右手の法則で

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 23 of 412

示されます。大きさは二つのベクトルの大きさとSIN(Θ)の積です。ここでΘは二つのベクトル間の角です。例えば、VEC(3.0,4.0,5.0) # VEC
(6.0,7.0,8.0) は(-3.0, 6.0, -3.0)となります。
もしいずれかのベクトルが0、もしくはベクトルが完全に平行の時は、エラーが発生します。
・ 内積演算子(@)はREAL型の数を生成します。その数は二つのベクトルの対応する要素の積の和です。例えば、VEC(3.0,4.0,5.0) @
VEC(6.0,7.0,8.0)は86.0です。
・ もし上記の演算のどれかの結果が、大きすぎてKARELのREALでは扱えないベクトルの成分ならば、プログラムはエラー"Real
overflow"で終了します。
表3.2.4はベクトル演算の例を更に挙げています。

表3.2.4ベクトル演算の例
式 結果
VEC(3.0,7.0,6.0) + VEC(12.6,3.2,7.5) (15.6,10.2,13.5)
VEC(7.6,9.0,7.0) - VEC(14.0,3.5,17.0) (-6.4,5.5,-10)
4.5 * VEC(3.2,7.6,4.0) (14.4,34.2,18.0)
VEC(12.7,2.0,8.3) * 7.6 (96.52,15.2,63.08)
VEC(17.3,1.5,0.23) /2 (8.65,0.75,0.115)

文字列演算
STRINGの演算には以下の規則が適用されます。
・ KARELルーチンがSTRINGを返すように指定可能です。例3.2.4(c)をご覧下さい

例3.2.4(c) KARELルーチンがSTRINGを返すように指定
ROUTINE name(parameter_list): STRING
ルーチンnameがSTRING型の値を返すように宣言しています

・ 文字列の間に、文字列の連結を示す演算子を使用可能です。例3.2.4(d)をご覧下さい

例3.2.4(d) 演算子を使用して文字列を連結する
string_1 = string_2 + string_3 + 'ABC' + 'DEF'

・ STRINGの式をWRITE文で使用可能です。例3.2.4(e)をご覧下さい。復帰文字にstring_1とstring_2が続く、全体で一つの文字列を
WRITEします。

例3.2.4(e) STRINGの式のWRITE文中での使用
WRITE(CHR(13) + string_1 + string_2)b
・ STRINGの代入に於いて、代入先のSTRINGが文字列全体を保持するには不十分な大きさなら、代入中にSTRINGは短くなります。
・ 文字列中の文字を比較したり、文字を抽出したりできます。例えばstring_1 = `ABCDE' ならば、以下の例でSUB_STRの出力は`D'
でしょう。例3.2.4(f)をご覧下さい。

例3.2.4(f) 文字列の比較
IF SUB_STR(string_1, 4, 1) = 'D' THEN

・ 文字列を別の文字列から作り上げることが可能です。例3.2.4(g)をご覧下さい

例3.2.4(g) 文字列を別の文字列から作成
ROUTINE toupper(p_char: INTEGER): STRING
BEGIN
IF (p_char > 96) AND (p_char < 123) THEN
p_char = p_char - 32
ENDIF
RETURN (CHR(p_char))
END toupper
BEGIN
WRITE OUTPUT ('Enter string: ')
READ INPUT (string_1)
string_2 = ''
FOR idx = 1 TO STR_LEN(string_1) DO
string_2 = string_2 + toupper(ORD(string_1, idx))

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 24 of 412

ENDFOR

4 プログラムの制御
4.1 概要
プログラムの制御構造はプログラムやルーチンの制御の流れを決定します。制御構造は分岐、繰り返し、無条件分岐を含みま
す。

4.2 プログラム制御構造
プログラム制御構造は、プログラムやルーチンの中での実行の流れを定義するために使用されます。デフォルトでは、実行は
BEGIN文に続く最初の文から開始します。その後END(又はRETURN)文までシーケンシャルに進みます。 以下の制御構造が
KARELで使用可能です。
 分岐
 ループ
 無条件分岐
 実行の制御
 コンディションハンドラ
それぞれの制御構造の詳細な情報については付録A「KAREL言語アルファベット順解説」を参照して下さい。

4.2.1 分岐の制御構造
分岐を用いるとプログラムやルーチンで連続した文(statement)を選択して実行できます。それぞれの選択肢は数行からなるもの
にできます。
プログラム実行中、分岐は一つ又はそれ以上のデータに基づいて選択されます。その後プログラムは選択された一連の文
(statement)を実行します。
以下の二種類の分岐制御を使用可能です。
 IF文 BOOLEAN型の式の値に基づいて二者択一の分岐方法を提供します。
ECT文 数種類の分岐先からの選択を行う時に用いられます。分岐は指定されたINTEGER型の式の値に応じて選択されます。

付録AのIF…THEN文、SELECT文も参照して下さい。

4.2.2 ループ制御文
ループ制御を用いると、プログラム中のデータに基づいて、一組の文を任意の回数繰り返すことができます。 KARELは3種類
のループ制御構造をサポートしています。
 FOR 文
ある一組の文を指定の回数だけ実行する時に使用します。回数はFOR文中のINTEGER型のデータで決定します。FORルー
プの最初に、INTEGERのカウンタ変数に範囲の初期値が設定されます。サイクルが繰り返される度に、カウンタが再評価
されます。
 REPEAT 文
あるBOOLEANの式がFALSEである限り、一連の文の実行を続けることができます。REPEAT文の実行可能文は常に一度は
実行されます。
 WHILE 文
あるBOOLEANの式がTRUEである限り、実行を続けます。 BOOLEANの式は繰り返しの開始で検査されるので、繰り返し
部分は一度も実行されない可能性があります。

付録Aの各項目も参照して下さい。

4.2.3 無条件分岐
GOTO文を使ってプログラムの制御を移すことが可能です。それはプログラムのある場所から、ラベル付けされたプログラム
の別の場所に、何らかの条件やBOOLEANの式に依存すること無く行われます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 25 of 412

警告
FORループの中にGOTO文を含めてはなりません。またGOTO文でFORループ中に移動してはいけません。 プ
ログラムが"Run time stack overflow"で終了する可能性があります。
付録AのGOTO文も参照して下さい。

4.2.4 実行制御文
KARELは以下のプログラム制御文を提供しています。プログラム実行を終了したり一時中断したりできます。
 ABORT
実行中の動作も含め、プログラム実行を終了させます。終了させられたプログラムは再開できません。
 DELAY
実行をmsec単位でされる時間だけ延期します。
 PAUSE
継続操作が行われるまで、プログラムの実行を一時中断します。
 WAIT FOR
指定の条件もしくは条件のリストが満たされるまでプログラム実行を延期します。

付録AのABORT 文、DELAY文、PAUSE文、WAIT FOR文も参照して下さい。6章 コンディションハンドラも参照して下さい。

4.2.5 コンディションハンドラ
コンディションハンドラは、指定の条件が満たされた時に指定の処理を行うためのKARELの機能です。条件と処理の組をモニ
タと呼びます。一旦定義すれば、そのモニタを有効もしくは無効にすることができます。詳細は6章を参照して下さい。

5 ルーチン
ルーチンはKARELプログラムのモジュール化の方法を提供します。ルーチンは構造がプログラムに似ています。 ルーチンにはVAR宣
言及び(または)CONST宣言と実行可能文を含めることが可能です。しかしプログラムとは似ていない点もあります。例えばルーチンはプ
ログラムの最初の方で宣言する必要がある点です。また他のルーチンの宣言を含むことができません。
KARELは2種類のルーチンをサポートしています。
・ プロシージャルーチン 値を返しません。
・ ファンクションルーチン 値を返します。

KARELのルーチンにはビルトインと呼ばれる定義済みのルーチンとユーザ定義のルーチンがあります。
ルーチンには以下の規則が適用されます。
・ 返すことが可能です。
ルーチンの宣言にはパラメータを含めることができます。このことにより、ルーチンを呼ぶ時にデータを渡し、結果を呼び出し側に

・ 以下のものがルーチンを呼び出し可能です。
・ 宣言を含んでいるプログラム
・ そのプログラムに含まれる任意のルーチン
・ 宣言を持つ別のプログラム。5.1.1項「ルーチンの宣言」を参照して下さい。
 ルーチン実行
この節ではプロシージャルーチン、ファンクションルーチンの実行を説明します。
・ ルーチンの宣言
・ ルーチンの呼び出し
・ ルーチンからのリターン
・ 変数のスコープ
・ 仮引数(パラメータ)及び実引数

5.1.1 ルーチンの宣言
ルーチンの宣言には以下の規則が適用されます。
・ ルーチンは別のルーチンの中では宣言できません。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 26 of 412

・ プロシージャもファンクションもROUTINE文を用いて宣言されます。
・ プロシージャもファンクションも呼び出しの前に宣言されなくてはなりません。
・ プログラムにローカルなルーチンはそのプログラム中で完全に定義されます。 ルーチンの宣言は以下のものを含みます。
・ ROUTINE文
・ 該当ルーチンのVAR及び/またはCONST宣言
・ ルーチンの実行可能文
・ ルーチンのVAR及びCONSTセクションはプログラムのそれと構文上は似ていますが、以下の制限が適用されます。
・ FILE型は指定できません。
・ FROM節は許されません。
・ IN節は許されません。
・ ある条件を満たせば、プログラムにローカルなルーチンは実行可能セクションの後ろに定義可能です。それはルーチンがFROM節
を同じプログラム名で使用していることです。パラメータは一度のみ定義して下さい。例5.1.1(a)をご覧下さい

例5.1.1(a) FROM節を用いたローカルルーチン宣言
PROGRAM func_lib
ROUTINE done_yet(x: REAL; s1, s2: STRING): BOOLEAN FROM funct_lib
BEGIN
IF done_yet(3.2, 'T', '')
--
END func_lib
ROUTINE done_yet
BEGIN
--
END done_yet

・ プログラムの外部にあるルーチンは、あるプログラムで宣言され、別のプログラムで定義されています。
・ 外部ルーチンの宣言はROUTINE文とFROM節のみを含みます。
・ FROM節はルーチンが定義されているプログラム名を識別します。
・ そのルーチンはFROM節中のプログラムではローカルで定義する必要があります。
・ ルーチンの宣言にはパラメータのリストを含めることができます。パラメータのリストはROUTINE文のオプションです。
・ あるルーチンがプログラムの外部にあるなら、パラメータリスト中の名前は重要ではありません。しかし宣言中にはパラメータの指
定が必要です。パラメータが無いならば、外部、内部ルーチンの両方でパラメータリストを囲む括弧は省略されねばなりません。

例5.1.1(b)中の例はローカル及び外部プロシージャの宣言の例を示しています。

例5.1.1(b) ローカル及び外部プロシージャの宣言
PROGRAM proc_lib
ROUTINE wait_a_bit
--ローカルなプロシージャ。パラメータ無し
BEGIN
DELAY 20
END wait_a_bit
ROUTINE wait_time(dly_time:INTEGER)
--ローカルなプロシージャ。パラメータ1個
BEGIN
DELAY dly_time
END wait_time
ROUTINE calc_dist(p1,p2: POSITION; dist: REAL)
FROM math_lib
--math_lib.klで定義された外部プロシージャ

例5.1.1(c)中の例はローカル及び外部ファンクションの宣言の例を示しています。

例5.1.1(c) ファンクションの宣言
PROGRAM func_lib
ROUTINE done_yet(x: REAL; s1, s2 :STRING): BOOLEAN
FROM bool_lib
--bool_lib.klで定義された外部ファンクションルーチン
--BOOLEANの値を返す。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 27 of 412

ROUTINE xy_dist(x1,y1,x2,y2: REAL): REAL


--ローカルファンクション。REALの値を返す。
VAR
sum_square: REAL --動的(にアロケートされるルーチンレベルの)ローカル変数
dx,dy : REAL --動的(にアロケートされるルーチンレベルの)ローカル変数
BEGIN
dx = x2-x1 --パラメータx2,x1を参照
dy = y2-y1 --パラメータy2,y1を参照
sum_square = dx * dx + dy * dy
RETURN(SQRT(sum_square)) --SQRTはビルトイン(組み込み関数)
END xy_dist
BEGIN
END func_lib

付録AのFROM節、ROUTINE文も参照して下さい。

5.1.2 ルーチンの呼び出し
あるプログラム中で宣言されたルーチンは同じプログラムの実行可能部分で呼ぶことができます。そのプログラムに含まれる任意のルー
チン内でも呼ぶことができます。ルーチンを呼ぶとそのルーチンが呼び出されます。ルーチンは以下の手続きに沿って呼び出されます。
・ ルーチンが呼び出されると、プログラムの実行はルーチンに移ります。
・ プロシージャの実行が完了した後、実行はプロシージャ呼び出しの次の行に戻ります。
・ ファンクションの実行が完了した後、プログラムの実行はファンクションを呼び出した代入の行に戻ります。

プロシージャとファンクションの呼び出しには以下の規則が適用されます。
・ 対して渡します。
プロシージャとファンクションはルーチン名の次に実引数を続けて呼び出されます。実引数は宣言されているパラメータそれぞれに

・ 実引数のリストは括弧で囲まれます。
・ パラメータ無しのルーチンはルーチン名だけで呼ばれます。
・ プロシージャは単一の文であるかのように呼び出されます。 結局はプロシージャの呼び出しは完全な実行可能文を構成します。
例5.1.2(a)は二つのプロシージャの宣言を示します。宣言の後にはその呼び出しが続いています。

例5.1.2(a) プロシージャの呼び出し
ROUTINE wait_a_bit FROM proc_lib
--パラメータ無しの外部プロシージャ
ROUTINE calc_dist(p1,p2: POSITION; dist: REAL)&
FROM math_lib
--パラメータ三個の外部プロシージャ
BEGIN
...
wait_a_bit --wait_a_bitプロシージャを呼び出します。
calc_dist (start_pos, end_pos, distance)
--calc_distを呼び出します。宣言されている三個の仮引数に対し
--三個の実引数を使っています。

・ ファンクションは値を返すので、ファンクションの呼び出しは式の全部または一部で無ければなりません。
・ 呼び出し側に実行が戻った時、ファンクション呼び出しを含む文の実行は戻り値を用いて再開されます。

例5.1.2(b)は二つのファンクションの宣言を示します。宣言の後にはその呼び出しが続いています。

例5.1.2(b) ファンクションの呼び出し
ROUTINE error_check : BOOLEAN FROM error_prog
--パラメータ無し、BOOLEANの値を返す外部ファンクション
ROUTINE distance(p1, p2: POSITION) : REAL &
FROM funct_lib
--パラメータ二個、REALの値を返す外部ファンクション
BEGIN --メインプログラム
--error_checkが呼び出され、IF文

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 28 of 412

--内でBOOLEANの値を返す。
IF error_check THEN
...
ENDIF
travel_time = distance(prev_pos, next_pos)/current_spd
--distanceは代入文の式の一部として呼び出されている。

・ プログラムmaster_prog
ルーチンは他のルーチンを呼び出すことができます。但し後者が前者を含むプログラムで宣言されている場合に限ります。例えば
がルーチンcall_procを含むならば、 call_procはmaster_progで宣言されている任意のルーチンを呼ぶことがで
きます。

・ 自分自身を呼び出して階乗の値を計算しています。
自分自身を呼ぶルーチンは再帰的であると呼ばれ、KAREL使用可能です。例えば 例5.1.2(c)に示されているルーチンfactorialは

例5.1.2(c) 再帰的関数
ROUTINE factorial(n: INTEGER) : INTEGER
--整数nの階乗を計算
BEGIN
IF n = 0 THEN RETURN (1)
ELSE
RETURN (n * factorial(n-1))
--factorialの再帰呼び出し
ENDIF
END factorial

・ して使用される領域です。ルーチン呼び出しが発生するとスタックのメモリ上に情報が置かれます。
ルーチン呼び出しの深さに関する唯一の制約は、スタックの消費です。スタックはローカル変数、パラメータの一時的な保存場所と
RETURNもしくはEND文がルー
チン中で実行されると、情報がスタックから取り除かれます。 このスタックからの情報の除去無しにルーチン呼び出しが発生しすぎる
と、プログラムはスタックを使い切ってしまいます。

5.1.6項「スタックの使用量」にルーチン呼び出しによるスタックの使用量に関する記載があります。

5.1.3 ルーチンからのリターン
RETURN文はルーチン中で使用され、プログラム実行を呼び出し側のルーチン/プログラムに戻します。
ルーチンからのリターンには以下の規則が適用されます。
・ プロシージャ中では、RETURN文は値を含むことができません。
・ RETURN文が実行されないと、END文が制御を呼び側のプログラムもしくはルーチンに戻します。

例5.1.3(a)はプロシージャ中でのRETURN文の使用例を幾つか示しています。

例5.1.3(a) プロシージャのRETURN文
ROUTINE gun_on (error_flag: INTEGER)
--performs some operation while a "gun" is turned on
--returns from different statements depending on what,
--if any, error occurs.
VAR gun: INTEGER
BEGIN
IF error_flag = 1 THEN RETURN
--abnormal exit from routine, returns before
--executing WHILE loop
ENDIF
WHILE DIN[gun] DO
--continues until gun is off
...
IF error_flag = 2 THEN RETURN
--abnormal exit from routine, returns from
--within WHILE loop
ENDIF

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 29 of 412

ENDWHILE --gun is off


END gun_on --normal exit from routineb

・ はプログラムに戻った時に呼び側に戻される値です。
ファンクション中では、RETURN文は戻り値を指定しなくてはなりません。戻り値はプログラムの制御が呼び出し側のルーチンまた

・ ファンクションは以下のデータ型を除く任意の型を返せます。
・ FILE
・ す。戻り値をARRAYとしたファンクションから返された配列は、直接代入文でのみ使用可能です。
戻り値が配列の場合、サイズを指定できません。このことによりファンクションが任意の長さの配列を返すことが可能になっていま
戻り値がARRAYの関数は他の
ルーチンの引数として使用できません。 二つのファンクションの間でARRAYを渡す例として、例5.1.5(c)を参照して下さい。

・ ファンクションのRETURN文が値を提供しないと、トランスレータのエラーが発生します。
・ ルーチンまたはプログラムに値を戻せないので、プログラムはエラーで終了します。
ファンクション中でRETURN文が実行されない場合、END文に到達した時にファンクションの実行が終了します。 呼び出し側の

例5.1.3(b)はファンクション中でのRETURN文の使用例を幾つか示しています。

例5.1.3(b) ファンクションのRETURN文
ROUTINE index_value (table: ARRAY of INTEGER;
table_size: INTEGER): INTEGER
--Returns index value of FOR loop (i) depending on
--condition of IF statement. Returns 0 in cases where
--IF condition is not satisfied.
VAR i: INTEGER
BEGIN
FOR i = 1 TO table_size DO
IF table[i] = 0 THEN
RETURN (i) --returns index
ENDIF
ENDFOR
RETURN (0) --returns 0
END index_value

ROUTINE compare (test_var_1: INTEGER;


test_var_2: INTEGER): BOOLEAN
--Returns TRUE value in cases where IF test is
--satisfied. Otherwise, returns FALSE value.
BEGIN
IF test_var_1 = test_var_2 THEN
RETURN (TRUE) --returns TRUE
ELSE
RETURN (FALSE) --returns FALSE
ENDIF
END compare

付録AのROUTINE文も参照して下さい。

5.1.4 変数のスコープ
変数宣言のスコープは以下のいずれかです。
・ グローバル
・ ローカル

グローバル宣言及び定義
グローバル宣言及び定義には以下の規則が適用されます。
・ グローバル宣言はプログラム全体を通して認識されます。
・ す。更にプログラムのクリア、リロードがあったとしても割り当てられた領域は(変数自体がクリアされることがない限り)変化しませ
グローバル宣言は静的(static)と呼ばれます。なぜならプログラム実行を通して変化しないメモリ上の領域を与えられているからで

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 30 of 412

ん。
・ メインプログラム中でなされた宣言は、定義済みの識別子と同様に、グローバルです。
・ 定義済み及びユーザ定義のルーチン、型、変数、定数、ラベルのスコープは以下の通りです。
・ 全ての定義済みの識別子はプログラム全体を通して認識されます。
・ プログラムの宣言セクションで宣言されたルーチン、型、変数、定数はプログラム全体を通して認識されます。プログラム中の
ルーチンでも認識されます。

ローカル宣言及び定義
ローカル宣言及び定義には以下の規則が適用されます。
・ ローカル宣言は宣言されたルーチン内でのみ認識されます。
・ 壊されます。
ローカルなデータはルーチンが呼び出された時に生成されます。ローカルなデータはルーチンの実行が終了しリターンする時に破

・ 定義済み及びユーザ定義のルーチン、変数、定数、ラベルのスコープは以下の通りです。
・ 内でのみ認識されます。
ルーチンの宣言セクションで宣言された変数及び定数、ルーチンのパラメータリストで宣言されたパラメータは、そのルーチン

・ プログラムのどのルーチン中でも認識されません。
プログラム(プログラム中のルーチンではない)中で定義されたラベルは、プログラムの本体部分にローカルなものです。その

・ ルーチン中で定義されたラベルはそのルーチンローカルです。そのルーチンでのみ認識されます。
・ ルーチン中では型を宣言できません。よって型はローカルでは有り得ません。
5.1.5 仮引数(パラメータ)及び実引数
ルーチン宣言のパラメータリストで使用されている識別子はパラメータ(仮引数)と呼ばれます。ルーチン中に宣言されているパラメータは
ルーチンの処理中いつでも参照できます。パラメータは呼び出しプログラムとルーチンの間でデータを渡すために使用されます。呼び出
し時に供給するデータは実引数と呼ばれます。実引数はルーチンの実行のされ方に影響する可能性があります。
ルーチン呼び出しのパラメータには以下の規則が適用されます。
・ (argument)と呼びます。
ルーチン呼び出しの一部として、ルーチンの宣言にある各パラメータにデータを提供せねばなりません。そのデータを実引数

・ 実引数は変数、定数、式が使用可能です。各パラメータに一つの実引数が必要です。
・ 実引数は対応するパラメータと同じデータ型である必要があります。但し以下の例外があります。
・ す。そのINTEGERと同等の値のREALがルーチンに渡されます。
INTEGER型の実引数をREAL型のパラメータに渡すことができます。この場合、INTEGERの値はREAL型として扱われま

・ BYTEもしくはSHORTの実引数をINTEGERもしくはREALのパラメータに渡せます。
・ ラメータの型に変換され、その値が渡されます。
任意の位置データ型を他の位置データ型に渡せます。もしユーザ定義のルーチンに渡されると、実引数の位置データ型はパ

・ 任意の長さのARRAY もしくはSTRINGを同じデータ型のパラメータに渡すことができます。
例5.1.5(a)はルーチン宣言と、そのルーチンの呼び出し3回の例です。

例5.1.5(a) パラメータと実引数の対応
PROGRAM params
VAR
long_string: STRING[10]; short_string: STRING[5]
exact_dist: REAL; rough_dist: INTEGER
ROUTINE label_dist (strg: STRING; dist: REAL) FROM procs_lib
BEGIN
--...
label_dist(long_string, exact_dist)
--long_string がstrgに相当し、
--exact_distがdistに相当します。
label_dist(short_string, rough_dist)
--異なる長さのshort_stringがstrgに相当し、
--INTEGERであるrough_distがREAL型のdistに
--相当します
label_dist('new distance', (exact_dist * .75))
--リテラルとREAL型の式の実引数が
--パラメータに相当します。
END params

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 31 of 412

・ 二つの方法が用いられます。
ルーチンが呼び出された時、呼び出しに用いられた実引数は対応するパラメータに渡されます。実引数をパラメータに渡すために

・ 実引数が参照渡しされたなら、対応するパラメータは実引数と同じメモリ上の位置を共有しています。
実引数の参照渡し
それ故に、パラメータの値
を変更すると対応する実引数の値も変化します。
・ 実引数が値渡しされたなら、実引数の一時的なコピーがルーチンに渡されます。それ故に、対応するパラメータはこの一時的な
実引数の値渡し

コピーを使います。パラメータの変更は元々の実引数のデータに影響しません。
・ 定数と式の実引数は常に値渡しです。変数は通常参照渡しです。しかし以下の変数の実引数は、値で渡されます。
・ ポート配列変数(DOUT[1]等)
・ REAL型のパラメータに渡されるINTEGER型変数
・ INTEGER型またはREAL型に渡されるBYTE及びSHORT型実引数
・ リードオンリー(RO)のシステム変数
・ 変換が必要なら位置データ型

・ に変換されています。
変数の実引数は通常参照渡しですが、変数の識別子を括弧で囲むと値渡しにできます。実際には、括弧をつけることで変数が式

・ ん。FILEは値渡しできません。配列の要素(配列の変数に添え字をつけた形式)は値で渡せますが、配列変数全体は値渡しできませ
例5.1.5(b)は変数の実引数がどのように渡されたかによって、実引数への影響が異なるルーチンを示しています。

例5.1.5(b) 実引数に変数を渡す
PROGRAM refer01
VAR arg : INTEGER

ROUTINE test(param : INTEGER)


BEGIN
param = param * 3
WRITE ('value of param:', param, CR)
END test

BEGIN
arg = 5
test((arg)) --argは値渡し
WRITE('value of arg:', arg, CR)
test(arg) --argは参照渡し
WRITE('value of arg:', arg, CR)
END refer01
例5.1.5(b)のプログラムからの出力は以下の通りです。
value of param: 15
value of arg: 5
value of param: 15
value of arg: 15
例5.1.5(b)のルーチンコールが逆の順序で行われたとします。つまり最初に”test(arg)”を使ってargを参照渡しし、次に”test((arg))”で値渡し
したとします。その場合出力は以下のようになるでしょう。
value of param: 15
value of arg: 15
value of param: 45
value of arg: 15
・ 変数をルーチンのパラメータとして渡すために、以下の二つの方法の一つを使用可能です。
・ other_rtnに渡します。この文を書くには渡す変数の名前を知っている必要があります。
パラメータのリストに変数の名前を指定する方法があります。例えば、other_rtn(param_var)は変数param_varをルーチン

・ して渡すことができます。例えば、STRINGの変数prog_nameとvar_nameがオペレータが入力したプログラム名と変数名を含んで
BYNAMEを使用してパラメータを指定する方法があります。BYNAMEにより、STRINGに変数名が入っている変数を引数と

いるならば、この変数は以下の構文でルーチンに渡されます。

other_rtn(BYNAME(prog_name,var_name, entry))

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 32 of 412

BYNAMEに関する詳細は付録Aを参照して下さい。
・ そうとすると、エラーが検出されます。
ファンクションがARRAYを返すなら、そのファンクションの呼び出しを他のルーチンの実引数として使用できません。不正に渡

例5.1.5(c)は二つのファンクションの間で正しく渡されるARRAYの例を示しています。

例5.1.5(c) 配列の正しい引渡し
PROGRAM correct
VAR a : ARRAY[8] OF INTEGER
ROUTINE rtn_ary : ARRAY OF INTEGER FROM util_prog
ROUTINE print_ary(arg : ARRAY OF INTEGER)
VAR i : INTEGER
BEGIN
FOR i = 1 TO ARRAY_LEN(arg) DO
WRITE(arg[i],CR)
ENDFOR
END print_ary

BEGIN
a = rtn_ary
print_ary(a)
END correct

例5.1.5(d)は二つのファンクションの間で不正に渡されるARRAYの例を示しています。

例5.1.5(d) 不正な配列の引渡し
PROGRAM wrong
ROUTINE rtn_ary : ARRAY OF INTEGER FROM util_prog
ROUTINE print_ary(arg : ARRAY OF INTEGER)
VAR i : INTEGER
BEGIN
FOR i = 1 TO ARRAY_LEN(arg) DO
WRITE(arg[i],CR)
ENDFOR
END print_ary
BEGIN
print_ary(rtn_ary)
END wrong
次の項目も参照して下さい。ARRAY_LENビルトイン(付録A)、STR_LENビルトイン (付録A), 付録E「文法図」。

5.1.6 スタックの使用量
プログラムが実行される時、スタックサイズを指定していない限り、300ワードのスタックがアロケートされます。 スタックはRAMからアロ
ケートされます。
スタックの使用量は以下のように計算可能です。
・ 呼び出しの度に少なくとも5ワードのスタックを使用します。
・ パラメータの型に応じて使用されます。
それに加え、ルーチンのパラメータとローカル変数のそれぞれに対し、更にスタックが使用されます。表5.1.6に示すように、変数や

表5.1.6スタックの使用量
型 参照渡しのパラメータ 値渡しのパラメータ ローカル変数
BOOLEAN 2 1
1
ARRAY OF BOOLEAN 不可 1 + 配列のサイズ
ARRAY OF BYTE 1 不可 1 + (array size)/4
CAM_SETUP 不可 不可
1
ARRAY OF CAM_SETUP 不可 不可
CONFIG 2 1
1
不可 1 + 配列のサイズ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 33 of 412

ARRAY OF CONFIG
INTEGER 2 1
1
ARRAY OF INTEGER 不可 1 + 配列のサイズ
FILE 不可 不可
1
ARRAY OF FILE 不可 不可
JOINTPOS 2 12 10
ARRAY OF JOINTPOS 1 不可 1 + 10 * 配列のサイズ
JOINTPOS1 2 4 2
ARRAY OF JOINTPOS1 1 不可 1 + 2 * 配列のサイズ
JOINTPOS2 2 5 3
ARRAY OF JOINTPOS2 1 不可 1 + 3 * 配列のサイズ
JOINTPOS3 2 6 4
ARRAY OF JOINTPOS3 1 不可 1 + 4 * 配列のサイズ
JOINTPOS4 2 7 5
ARRAY OF JOINTPOS4 1 不可 1 + 5 * 配列のサイズ
JOINTPOS5 2 8 6
ARRAY OF JOINTPOS5 1 不可 1 + 6 * 配列のサイズ
JOINTPOS6 2 9 7
ARRAY OF JOINTPOS6 1 不可 1 + 7 * 配列のサイズ
JOINTPOS7 2 10 8
ARRAY OF JOINTPOS7 1 不可 1 + 8 * 配列のサイズ
JOINTPOS8 2 11 9
ARRAY OF JOINTPOS8 1 不可 1 + 9 * 配列のサイズ
JOINTPOS9 2 12 10
ARRAY OF JOINTPOS9 1 不可 1 + 10 * 配列のサイズ
MODEL 1 不可 不可
ARRAY OF MODEL 1 不可 不可
PATH 2 不可 不可
POSITION 2 16 14
ARRAY OF POSITION 1 不可 1 + 14 * 配列のサイズ
REAL 1 2 1
ARRAY OF REAL 1 不可 1 + 配列のサイズ
ARRAY OF SHORT 1 不可 1 + (配列のサイズ)/2
STRING (STRINGの長さ+2)/4
2 2 + (STRINIGの長さ+2)/4 不
ARRAY OF STRING 1+((STRINGの長さ+2)
1 可
*配列の長さ)/4
VECTOR 1 4 3
ARRAY OF VECTOR 1 不可 1 + 3 * 配列のサイズ
VIS_PROCESS 1 不可 不可
ARRAY OF VIS_PROCESS 1 不可 不可
XYZWPR 2 10 8
ARRAY OF XYZWPR 1 不可 1 + 8 * 配列のサイズ
XYZWPREXT 2 13 11
ARRAY OF XYZWPREX 1 不可 1 + 11 * 配列の長さ
ARRAY [m,n] OF 何らかの型 1 不可 m(要素のサイズ/4 * n + 1)+1
ARRAY [l,m,n] OF 何らかの l(m(要素のサイズ/4 * n + 1)
1 不可
型 +1)+1

 ビルトイン(組み込み関数)
KAREL言語は定義済みのルーチンを含んでいます。それはビルトインルーチンもしくはビルトインと呼ばれます。 ビルトインルーチンは
プロシージャとファンクションの両方が存在します。それらはプログラムしやすいように用意されており、一般に必要とされるサービスを実
行します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 34 of 412

多くのビルトインはstatusパラメータを返します。それは0と等しくないならエラーを意味します。返されるエラーコードは、アプリケーションに
応じた取扱説明書に定義されている任意のエラーコードに成り得ます。返されたstatusパラメータをPOST_ERRビルトインに渡して呼ぶこ
とにより、そのエラーをアラーム履歴に載せ、エラー行に表示することが可能です。
全てのKARELビルトインの詳細な記述が付録Aにあります。表A.1(g)はKAREL言語に含まれる定義済みビルトインのリストの要約で
す。付録A「KAREL言語アルファベット順解説」も参照して下さい。

6 コンディションハンドラ
コンディションハンドラはKAREL言語の機能です。本機能を使用すると、外部の条件に応じた処理を効率的に行うことができます。慣習
的なプログラムの制御構造よりも効率的に応答できます。コンディションハンドラはプログラム全体を通して条件を監視し、それに応じて
処理を行うために使用します。
コンディションハンドラにより次のことが可能となります。それは指定された条件(コンディションと呼びます)を通常のプログラム実行と並行
して監視し、条件が成立すると対応する処理(アクションと呼びます)を実行することです。
コンディションとアクションのペアをモニタと呼びます。モニタを監視するには、まずモニタを定義して、その後有効にせねばなりません。モ
ニタを無効にすると、それはスキャンされているグループから削除されます。モニタのパージとはモニタの定義を削除することです。
表6(a)はモニタによって監視可能なコンディションの一覧です。

表6(a) コンディション(CONDITION)
port_id[n] ERROR[n]
NOT port_id[n] EVENT[n]
port_id[n]+ ABORT
port_id[n]- PAUSE
operand = operand CONTINUE
operand <> operand SEMAPHORE[n]
operand < operand
operand <= operand
operand > operand
operand >= operand

表6(b)は実行可能なアクションの一覧です。

表6(b) アクション
variable = expression ENABLE CONDITION[n]
port_id[n] = expression DISABLE CONDITION[n]
routine_name PULSE DOUT[n] FOR t
SIGNAL EVENT[n] UNPAUSE
NOABORT ABORT
NOMESSAGE CONTINUE
NOPAUSE PAUSE
SIGNAL SEMAPHORE[n]

6.1 モニタの操作
表6.1はモニタの操作の要約です。

表6.1 モニタの操作
操作 グローバルモニタ
CONDITION[n]:<WITH $SCAN_TIME = n>.
定義 WHEN conds DO actions
ENDCONDITION
有効化 ENABLE CONDITION[n] (文(statement)またはアクション)
無効化 DISABLE CONDITION[n] (文(statement)またはアクション) もしくは条件の成立
パージ PURGE CONDITION[n] (文(statement)またはアクション), プログラムの終了

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 35 of 412

6.1.1 グローバルモニタ
グローバルモニタはプログラムの実行可能セクションでCONDITION文を実行することにより、定義されます。その定義はコンディションと
アクションをペアで指定します。グローバルモニタには以下の規則が適用されます。
・ それぞれのグローバルモニタはプログラム全体を通じて指定された番号で参照されます。その番号は1から1000です。もし指定の番
号が以前に定義されているならば、新しいモニタに置き換える前に、前に定義した方をパージしなくてはなりません。
・ グローバルモニタのコンディション/アクションのペアはCONDITION文のWHEN節で指定します。あるモニタの全てのWHEN節は一
緒に有効にされ、無効にされ、パージされます。
・ 指定したコンディションのリストは該当するモニタがスキャンされる時に監視されるコンディションのリストを表しています。
・ デフォルトでは、それぞれのグローバルモニタは$SCR.$COND_TIMEの値に基づいてスキャンされます。もし"WITH
$SCAN_TIME=n"節がCONDITION文中で使われていると、その条件は大体"n"msecでスキャンされます。実際のスキャンの間隔は
表6.1.1に示されています。

表6.1.1グローバルモニタのスキャンの間隔
"n" スキャンの間隔
n <= $COND_TIME $COND_TIME
$COND_TIME < n <= (2 * $COND_TIME) (2 * $COND_TIME)
(2 * $COND_TIME) < n <= (4 * $COND_TIME) (4 * $COND_TIME)
(4 * $COND_TIME) < n <= (8 * $COND_TIME) (8 * $COND_TIME)
(8 * $COND_TIME) < n <= (16 * $COND_TIME) (16 * $COND_TIME)
(16 * $COND_TIME) < n <= (32 * $COND_TIME) (32 * $COND_TIME)
(32 * $COND_TIME) < n <= (64 * $COND_TIME) (64 * $COND_TIME)
(64 * $COND_TIME) < n <= (128 * $COND_TIME) (128 * $COND_TIME)
(128 * $COND_TIME) < n <= (256 * $COND_TIME) (256 * $COND_TIME)
(256 * $COND_TIME) < n (512 * $COND_TIME)

・ 複数の条件は全てAND演算子かOR演算子で区切る必要があります。ANDとORの混合は許されません。
・ ANDを使用したなら、一つのWHEN節の全ての条件が同時に満たされなければ、モニタはトリガしません。(条件が満たされてアク
ションを実行することをトリガと呼びます)
・ ORを使用したなら、一つでも条件が成立するとトリガします。
・ アクションのリストはWHEN節の対応する条件が同時に成立した時に実行されるアクションのリストです。
・ 複数のアクションはコンマか改行で区切られなくてはなりません。

例6.1.1(a)はグローバルモニタの定義の例を3つ示しています。

例6.1.1(a) グローバルモニタの定義
CONDITION[1]: --defines condition handler number 1
WHEN DIN[1] DO DOUT[1] = TRUE --triggered if any one
WHEN DIN[2] DO DOUT[2] = TRUE --of the WHEN clauses
WHEN DIN[3] DO DOUT[3] = TRUE --is satisfied
ENDCONDITION
CONDITION[2]: --defines condition handler number 2
WHEN PAUSE DO --one condition triggers
AOUT[speed_out] = 0 --multiple actions
DOUT[pause_light] = TRUE
ENABLE CONDITION [2] --enables this condition
ENDCONDITION --handler again
CONDITION[3]:
WHEN DIN[1] AND DIN[2] AND DIN[3] DO --multiple
DOUT[1] = TRUE --conditions separated by AND;
DOUT[2] = TRUE --all three conditions must be
DOUT[3] = TRUE --satisfied at the same time
ENDCONDITION

・ プログラムを通じて、必要に応じてモニタを有効化、無効化、パージ可能です。モニタがトリガした時は常に、自動的に無効化されま
す。但しアクションリストにENABLEアクションが含まれる時は別です。(例6.1.1(a)のCONDITION[2]を参照して下さい)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 36 of 412

・ ENABLE文もしくはENABLEアクションは指定したモニタを有効化します。モニタは次のスキャンでも監視され、無効化されるま
で監視され続けます。
・ DISABLE文もしくはDISABLEアクションは指定したモニタをスキャン対象から除外します。モニタは定義されたままです。
Enable文もしくはアクションで再度有効化できます。
・ PURGE文は指定のモニタの定義を削除します。
・ ENABLE、DISABLE及びPURGEは指定したモニタが定義されていないと効果がありません。指定のモニタが既に有効化されてい
ると、ENABLEは効果がありません。無効化されているとDISABLEは効果がありません。

例6.1.1(b)はグローバルモニタの有効化、無効化、パージの例を示します。

例6.1.1(b) グローバルモニタの使用
CONDITION[1]: --defines condition handler number 1
WHEN line_stop = TRUE DO DOUT[1] = FALSE
ENDCONDITION
CONDITION[2]: --defines condition handler number 2
WHEN line_go = TRUE DO
DOUT[1] = TRUE, ENABLE CONDITION [1]
ENDCONDITION
ENABLE CONDITION[2] --condition handler 2 is enabled
...
IF ready THEN line_go = TRUE; ENDIF
--If ready is TRUE condition handler 2 is triggered (and
--disabled) and condition handler 1 is enabled.
--Otherwise, condition handler 2 is not triggered (and is
--still enabled), condition handler 1 is not yet enabled,
--and the next two statements will have no effect.
DISABLE CONDITION[1]
ENABLE CONDITION[2]
...
ENABLE CONDITION[1] --condition handler 1 is enabled
...
line_stop = TRUE --triggers (and disables) condition handler 1
...
PURGE CONDITION[2] --definition of condition handler 2 deleted
ENABLE CONDITION[2] --no longer has any effect
line_go = TRUE --no longer a monitored condition

6.2 コンディション(CONDITION)
コンディションハンドラで監視する条件はCONDITION文で指定します。この条件をコンディションと表記しています。WHEN節のコンディ
ションのリストには一つ以上のコンディションを指定可能です。コンディション/アクションのペアにおけるコンディションの部分を定義するこ
とで指定します。 コンディションには以下のものがあります。
・ 状態 - ある状態が存在し続ける限り、満たされ続けます。状態の例としてDIN[1]や(VAR1 >VAR2)が挙げられます。
・ イベント - イベントが発生した瞬間のみ満たされます。イベントの例としては ERROR[n]、DIN[n]+、PAUSEが挙げられます。

システム及びプログラムイベントのコンディションには以下の規則が適用されます。
・ モニタが有効化された後、指定のコンディションが監視されます。
・ もしWHEN節のANDで結ばれた全条件(コンディション)が同時に成立したなら、モニタはトリガし、対応するアクションが実行さ
れます。
・ もしWHEN節のORで結ばれた条件(コンディション)の一つが満たされると、モニタはトリガし、対応するアクションが実行されま
す。
・ 複数のイベントコンディションが同時に成立するのは非常に稀です。それ故に、WHEN節の中で二つのイベントコンディションの間に
ANDを使用してはなりません。なぜなら二つのコンディションが同時に満たされないからです。
・ 多くのコンディションは形式上通常のBOOLEANの式(expression)に似ていて、しかも意味も似ています。にもかかわらず、一般的な
BOOLEANの式は許されません。この節の一覧に挙げられた形式のみが許されます。
・ EVAL節の中では一般的なBOOLEANの式が許されます。より一般的な式が比較条件の右辺には使用されるかもしれません。式を
括弧で囲んだEVAL節(EVAL( expression) )を使用することによってです。しかしながら、EVAL節中の式はモニタが定義された時に
評価されます。ダイナミックには評価されません。
・ EVAL節中の値はINTEGER, REALもしくはBOOLEANである必要があります。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 37 of 412

付録AのEVAL節も参照して下さい。

6.2.1 Port_Idコンディション
Port_idコンディションはデジタルポートの信号の監視に使用されます。Port_idは定義済みのBOOLEAN型I/Oの識別子(DIN, DOUT等)
のいずれかとする必要があります。nが監視する信号を指定します。表6.2.1は使用可能なport_idコンディションの一覧です。

表6.2.1 Port_Idコンディション
コンディション 満たされる場合(TRUEになる時)
port_id[n] デジタルポートが n がTRUE (状態コンディション)
NOT port_id[n] デジタルポートnがFALSE (状態コンディション)
port_id[n]+ デジタルポート n がFALSEからTRUEに変化 (イベントコンディション)
port_id[n]- デジタルポート n がTRUEからFALSEに変化 (イベントコンディション)

・ 状態のコンディション、port_id[n]及びNOT port_id[n]に関しては、スキャン毎にポートの値が検査されます。次の条件は、スキャン中
にDIN[1]がTRUEかつDIN[2]がFALSEになると満たされます。
WHEN DIN[1] AND NOT DIN[2] DO . . .

状態を確実に検出するためには、スキャンの間入力信号はONもしくはOFFになっている必要があることに注意して下さい。
・ イベントコンディション、port_id[n]+に関しては、モニタが有効になった時に初期値が検査されます。スキャン毎に信号の指定の変化
がチェックされます。検出するにはモニタが有効の間に変化する必要があります。
次の条件は、モニタが有効な間に、前のスキャン以降、DIN[1]がTRUEからFALSEに変化した時だけ満たされます。

WHEN DIN[1]- DO . . .

6.2.2 関係コンディション
関係コンディションは二つのオペランド間の関係を検査するために使用されます。指定の関係がTRUEの時に満たされます。関係コンディ
ションは状態コンディションです。これは関係がスキャン毎に検査されることを意味します。 表6.2.2は関係コンディションの一覧です。

表6.2.2 関係コンディション
CONDITION 満たされる場合(TRUEになる時)
operand = operand
operand < > operand 指定の関係がTRUE。左辺のオペランドはポート配列の要
operand < operand 素(DOUT[1]等)もしくは変数が使用できます。 右辺のオペ
operand < = operand ランドは変数、定数、EVAL節を使用できます(状態コン
operand > operand ディション)。
operand > = operand

関係コンディションには以下の規則が適用されます。
・ 双方のオペランドは同じデータ型とする必要があります。INTEGER, REAL、もしくはBOOLEANだけが使えます (他の場合と同様、
INTEGERの定数はREALの値が必要な場所に使用可能です。そしてREALとして扱われます)。
・ 左辺のオペランドは、任意のポート配列の信号、ユーザ定義変数、静的な変数、KARELプログラムで読めるシステム変数が使用で
きます。
・ コンディションの右辺はユーザ定義変数、静的変数、KARELで読めるシステム変数、定数、EVAL節が使用できます。例えば次の
通りです。

WHEN DIN[1] = ON DO . . . --ポート配列の要素と定数


WHEN flag = TRUE DO . . . -- 変数と定数
WHEN AIN[1] >= temp DO . . . -- ポート配列の要素と変数
WHEN flag_1 <> flag_2 DO . . . -- 変数と変数
WHEN AIN[1] <= EVAL(temp * scale) DO . . .
-- ポート配列の要素とEVAL節
WHEN dif > EVAL(max_count - count) DO . . .
-- 変数とEVAL節

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 38 of 412

・ EVAL節を用いて関係コンディションに通常のKARELと同様の式を含めることが可能です。しかしながら、EVAL節はモニタが定義
された時だけ評価されます。EVAL節の式はルーチンの呼び出しを含むことはできません。

付録AのEVAL節も参照して下さい。

6.2.3 システム及びプログラムイベントのコンディション
システムイベント及びプログラムイベントのコンディションはシステムやプログラムの発生させたイベントを監視するために使用します。モ
ニタが有効の間にイベントが発生した時だけコンディションは満たされます。
ERROR, EVENT, PAUSE, ABORT, CONTINUEのいずれかを含む有効化されたモニタは指定されたタイプのイベントが発生した時だけ
スキャンされます。例えば、ERRORコンディションを含むモニタが有効になっているとします。そのモニタはエラーが発生した時だけスキャ
ンされます。表6.2.3は使用可能なシステムイベント及びプログラムイベントのコンディションです。

表6.2.3 システム及びプログラムイベントのコンディション
コンディション 満たされる場合(TRUEになる時)
nで指定されたエラーが発生した場合。n=*ならば、任意のエラーが発生した場合
ERROR [n]
(イベントコンディション)
EVENT[n] nで指定されたイベント発生が通知された場合 (イベントコンディション)
ABORT プログラムが終了した場合(イベントコンディション)
PAUSE プログラムが一時停止した場合(イベントコンディション)
CONTINUE プログラムの再開 (イベントコンディション)
SEMAPHORE[n] nで指定されたセマフォの値が0より大きくなった場合

これらのコンディションには以下の規則が適用されます。

ERROR コンディション
・ ERRORコンディションでエラーの発生を監視可能です。エラーコードでエラーを指定します。例えば、ERROR[15018]はエラーコード
15018で表されるエラーの発生を監視します。
エラーコードは以下のフォーマットです。

ffccc (10進数)

ff はファシリティコードです。cccは指定のファシリティコード中のエラー番号です。

例えば、15018はドウサ-018、"この位置には到達できません"です。ファシリティコードは15でエラーコードは018です。
・ ERRORコンディションは任意のエラーの発生を監視することもできます。それには特定のアラームコードの変わりにエラーをアスタリ
スク(*)で指定します。これはワイルドカードの文字です。例えば、ERROR[*]は任意のアラームの発生を監視します。
・ ERRORコンディションは指定のエラーが検出された時に試されたスキャンでのみ成立します。それ以降のスキャンでは発生は記憶
されていません。
EVENTコンディション
・ EVENTコンディションは指定したプログラムイベントの発生を監視します。プログラム中のSIGNAL文、又はSIGNALアクションがイ
ベントの発生を示します。
・ EVENTコンディションはイベントの通知が試されたスキャンでのみ成立します。それ以降のスキャンでは発生は記憶されていませ
ん。
ABORTコンディション
・ ABORTコンディションはプログラム実行の終了を監視します。ABORTが発生すると、対応するアクションが実行されます。しかしな
がら、アクションの一つがルーチンの呼び出しなら、ルーチンは実行されないでしょう。なぜならプログラム実行は既に終了している
からです。
もしABORTコンディションを使用したなら、プログラムが既に終了しているにもかかわらず、全てのアクションが実行されます。但し
ルーチンコールを除きます。
PAUSEコンディション
・ PAUSEコンディションはプログラム実行の一時停止を監視します。 もし対応するアクションの一つがルーチンコールなら、NOPAUSE
もしくはUNPAUSEアクションを指定することが必要です。
CONTINUEコンディション
・ CONTINUEコンディションはプログラム実行の再開を監視します。 もしプログラム実行が一時停止されると、その後プログラム実行
が再開されるとCONTINUEコンディションを満たすでしょう。例えば再開はCONTINUEアクション、KCL>CONTINUEコマンド、操作
パネルからの起動、教示操作盤からのFWDで行われます。
SEMAPHOREコンディション

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 39 of 412

・ SEMAPHOREコンディションは指定のセマフォを監視します。CLEAR_SEMAビルトインを用いてセマフォの値を0に設定できます。
POST_SEMAビルトインもしくはSIGNAL_SEMAPHOREアクションを用いてセマフォの値を増加させ、SEMAPHOREコンディションを
満たすことができます。

以下の項目も参照して下さい。
・ 付録Aの以下の部分。
ABORTコンディション
CONTINUEコンディション
ERROR コンディション
EVENTコンディション
PAUSEコンディション
SEMAPHOREコンディション
・ アプリケーションに応じた取扱説明書

6.3 アクション
監視条件(コンディション)の成立時に行う処理のことをアクションと表記しています。アクションはWHEN節のアクションリスト中に指定され
ます。アクションは以下に示す物が指定できます。
・ プログラムの実行と並行して実行されるKAREL向けに特別に定義されたアクション
・ プログラム実行に割り込んで実行される、ルーチンコール
モニタのコンディションが成立すると、モニタがトリガします。成立したコンディションに対応するアクションは、モニタの定義に出てくる順に
実行されます。但しルーチンコールを除きます。ルーチンは他のアクションが実行された後で実行されます。
アクションの多くはKARELの通常の文(statement)と形式上似ており、効果の上でも対応するKARELの文に似ています。にもかかわら
ず、アクションは実行可能な文ではありません。 この節で指示している形式のみが許されます。
付録Aの各アクションと対応する文を参照して下さい。

6.3.1 代入アクション
使用可能な代入アクションを表6.3.1に示します。

表6.3.1 代入アクション
アクション 結果
右辺の式(expression)の値が変数に代入されます。式は変数、定数、ポート配列の要
variable = expression
素、EVAL節が使用可能です。
右辺の式(expression)の値がI/Oに代入されます。nで要素を指定しています。式は変
port_id[n] = expression
数、定数、EVAL節が使用可能です。

代入アクションには以下の規則が適用されます。
・ 代入アクション"variable = expression"及び"port_id[n] = expression"を使うことで、値を変数や配列要素に代入可能です。
・ variableは次のいずれかで無ければなりません。ユーザ定義の変数、静的変数、最小/最大値の範囲が無くKARELプログラム
から書き込み可能なシステム変数。
・ ポート配列(DOUT等)は、左辺に用いるなら、KARELプログラムで設定可能な出力信号である必要があります。
・ expressoinはユーザ定義の変数、静的変数が使用可能です。KARELプログラムで読めるシステム変数、任意の定数、EVAL
節も使用可能です。
・ 変数が左辺にあるならば、expressionにはポート配列の要素 (DOUT[1]等)も使用可能です。しかしながら、ポート配列の要素をポー
ト配列の要素に直接代入できません。例えば次に示す例で、最初に示した代入は無効です。しかしその次の二つは有効です。

DOUT[1] = DOUT[2] --無効なアクション


port_var = DOUT[2] --有効なアクション。ここでport_varは変数。
DOUT[1] = port_var --これも有効なアクション。これをport_var=DOUT[2]の後に
--実行したなら、実際にはDOUT[2]をDOUT[1]に代入する
--効果となるでしょう。

・ expressionが変数なら、グローバル変数で無ければなりません。使用される値は、アクション実行時の現在値です。モニタ定義時の
値ではありません。expressionがEVAL節なら、モニタ定義時に評価されます。その値がアクション実行時に代入されます。
・ 代入アクションの両辺は同じデータ型で無ければなりません。左辺にINTEGER, REAL, BOOLENがある代入ではINTEGER, EVAL
節を右辺に使用可能です。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 40 of 412

6.3.2 ルーチンコールアクション
ルーチンコールアクション(もしくは割り込みルーチン)は、以下のように指定されます。

<WITH $PRIORITY = n> routine_name

ルーチンコールアクション、もしくは割り込みルーチンには以下の規則が適用されます。
・ 割り込みルーチンはパラメータを持てません。割り込みルーチンはファンクションではなくプロシージャである必要があります。
・ もし割り込まれたプログラムがREAD文を使用しているなら、割り込んだルーチンは同じファイル変数でデータを読めません。もし割
り込まれたプログラムがREADしており、割り込みルーチンが同じファイル変数でREADを使用とすると、プログラムが終了します。
・ 割り込みルーチンが開始した時、割り込まれたKARELプログラムは割り込みルーチンからのリターンまで実行が中止されます。
・ 割り込みルーチンは、KARELプログラムのように、別のルーチンによって割り込まれる可能性があります。 割り込みの最大深さは
スタックのサイズによって限定されます。
・ ルーチンはモニタの定義に現れる順番に開始されます。しかしそれらは互いに割り込むので、実際には逆の順番で実行されます。
・ あるルーチンが他のルーチンにより割り込まれないように、割り込みには優先順位をつけられます。コンディションハンドラの修飾語
句$PRIORITYを用いて指定のルーチンコールアクション実行の優先順位を設定可能です。 $PRIORITYの値は0-255である必要が
あります。小さい値は低いプライオリティを表します。低い優先順位のルーチンが、高い優先順位のルーチン実行中に呼ばれた場
合、前者は後者の完了後にのみ実行されます。 $PRIORITYが指定されていないなら、そのルーチンの優先順位はデフォルトの値と
なります。それはシステム変数$PRIORITYの値です。

付録A「KAREL言語アルファベット順解説」のWITH節に$PRIORITYに関する記載があります。こちらも参照して下さい。

6.3.3 その他のアクション
表6.3.3にその他の利用可能なアクションが記載されています。

表6.3.3 その他のアクション
アクション 結果
SIGNAL EVENT[n] nで指定されたイベント発生が通知された場合
NOMESSAGE 本来表示されるはずのエラーメッセージが表示されず、履歴に残らない。
NOPAUSE プログラムが一時停止されていれば再開される。そうでないなら一時停止を防ぐ。
NOABORT プログラムが終了されているなら再開する。そうでないなら、終了を防ぐ。
ABORT プログラム実行が終了する。
CONTINUE プログラム実行が継続される。
PAUSE プログラム実行が一時停止する。
SIGNAL SEMAPHORE[n] 指定のセマフォが増加します。
ENABLE CONDITION[n] モニタnを有効化します。
DISABLE CONDITION[n] モニタnを無効化します。
PULSE DOUT[n] FOR t nで指定のI/Oをtミリ秒間パルス出力します。
ルーチン呼び出しがアクションとして指定されているが、プログラム実行が一時停止
UNPAUSE している時、実行が再開されます。実行はルーチン呼び出しの間だけ再開され、その
後再度一時停止します。

付録Aに各アクションに関する詳細が記載されています。付録Aも参照して下さい。

7 ファイル入出力操作
7.1 概要
KAREL言語は以下に示すシリアルファイル入出力を可能とします。
 OPEN FILE文でデータファイルやシリアル通信ポートをOpenする
 CLOSE FILE文でデータファイルやシリアル通信ポートをCloseする

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 41 of 412


 READ文でファイルや通信ポート、ユーザインタフェースのデバイスからReadする
 WRITE文でファイルや通信ポート、ユーザインタフェースのデバイスにWriteする
 ReadやWriteをキャンセルする
ファイル変数はファイル、通信ポート、シリアルI/Oの操作を行いたいデバイスを示すために用いられます。
未転送のデータを保持するためにバッファが用いられます。READ及びWRITE文でのdata_itemの使用方法はデータがテキスト
(ASCII)かバイナリかに依存します。データの種類にも依存します。同様に使用する場合のフォーマット指定子もデータの種類
及びテキストかバイナリかに依存します。

7.2 ファイル変数
KARELプログラムは以下に示すものに関してシリアルI/Oの操作を行えます。

 KARELのファイルシステムに存在するデータファイル
 制御装置のコネクタと関連付けられているシリアル通信ポート
 CRT/KB及び教示操作盤を含むユーザインタフェースのデバイス
ファイル変数はファイル、通信ポート、シリアルI/Oの操作を行いたいデバイスを示すために用いられます。
表7.2はユーザインタフェースのデバイス用に定義済みのファイル変数の一覧です。これらのファイル変数はOpen済みで、
READもしくはWRITE文で使用可能です。

表7.2 定義済みファイル変数
識別子 デバイス 操作
TPFUNC* 教示操作盤のファンクションキーの行 両方
TPDISPLAY* 教示操作盤のユーザ画面 両方
TPPROMPT* 教示操作盤のプロンプト行 両方
TPERROR 教示操作盤のメッセージ行 Write
TPSTATUS* 教示操作盤のステータス行 Write
CRTFUNC* CRT/KBのファンクションキーの行 両方
INPUT CRT/KBキーボード Read
OUTPUT* CRT/KBのユーザ画面 Write
CRTPROMPT* CRT/KBプロンプト行 両方
CRTERROR CRT/KB メッセージ行 Write
CRTSTATUS* CRT/KB ステータス行 Write
* 教示操作盤もしくはCRT/KBがユーザ画面にいる時のみ表示される。

FILE型変数をファイル変数として使用可能です。例7.2はFILE型変数の宣言の例を示しています。 そしてFILE型変数をプログ
ラムの実行セクションで使用する例も示しています。

例7.2ファイル型変数のKARELプログラムでの使用
PROGRAM lun_prog
VAR
curnt_file : FILE
ROUTINE input_data(file_spec:FILE) FROM util_prog
BEGIN
OPEN FILE curnt_file ('RW','text.dt') --variable FILE
input_data(curnt_file) --file variable argument
WRITE TPERROR ('Error has occurred')
END lun_prog
FILE型変数をプログラム間で共有可能です。但しそれらのプログラムを一つのタスクが実行している場合に限ります。 タスク
間でファイル変数を共有することは許されていません。

7.3 OPEN FILE 文


OPEN FILE文はファイル変数を特定のデータファイルや通信ポートに関連付けます。
その関連付けはファイルがcloseされるまで続きます。ファイルのcloseはCLOSE FILE文で明示的に行われるか、 プログラムの
実行が最後まで終了するか強制終了することで暗黙的に行われます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 42 of 412

OPEN FILE文はどのようにファイルが使用されるか (第一引数:usage_string)、 どのファイルもしくはポートが使用されるか(第


二引数file_string)を指定します。

7.3.1 ファイル及びポートの属性設定
属性はシリアルポートもしくはFILE型変数の操作や動作の詳細を指定します。SET_PORT_ATR 及び SET_FILE_ATRビルトイ
ンがこれらの属性の設定に使用されます。SET_FILE_ATRはFILE変数がopenされる前に呼ぶ必要があります。SET_PORT_ATR
はシリアルポートを使用しているFILEをOpenする前でも後でも呼ぶことができます。
表7.3.1(a)は属性のタイプ、その機能、教示操作盤、CRT/KB、シリアルポート、データファイル、パイプでの使用が意図されて
いるかどうかの一覧です。より詳しくは付録Aを参照して下さい。

表7.3.1(a) 定義済み属性
SET_PORT_ATR/ シリアル データファ パイプ ソケットメッ
属性の種類 機能 TP/ CRT
SET_FILE_ATR ポート イル (PIPE) セージ
ATR_BAUD ボーレート SET_PORT_ATR 使用せず 有効 使用せず 使用せず 使用せず
ATR_DBITS データ長 SET_PORT_ATR 使用せず 有効 使用せず 使用せず 使用せず
ATR_EOL 行の終了 SET_FILE_ATR 使用せず 有効 使用せず 有効 有効
READのデータ
ATR_FIELD SET_FILE_ATR 有効 有効 有効 有効 有効
量に関係
対話型の書き込
ATR_IA SET_FILE_ATR 有効 有効 有効 有効 有効

ATR_PARITY パリティ SET_PORT_ATR 使用せず 有効 使用せず 使用せず 使用せず
READ時の入力
ATR_PASSALL データの解釈に SET_FILE_ATR 有効 有効 使用せず 有効 有効
関係
先読みバッファ
ATR_READAHD (Read ahead SET_PORT_ATR 使用せず 有効 使用せず 使用せず 使用せず
buffer)
Reverse
ATR_REVERSE SET_FILE_ATR 使用せず 有効 有効 有効 有効
transfer
ATR_SBITS ストップビット SET_PORT_ATR 使用せず 有効 使用せず 使用せず 使用せず
ATR_TIMEOUT タイムアウト SET_FILE_ATR 有効 有効 使用せず 有効 有効
フォーマット無
ATR_UF SET_FILE_ATR 使用せず 有効 有効 有効 有効
しの転送
ATR_XONOFF XON/XOFF SET_PORT_ATR 使用せず 有効 使用せず 使用せず 使用せず
ATR_PIPWAIT データを待つ SET_FILE_ATR 使用せず 使用せず 使用せず 有効 有効

表7.3.1(b)は各属性の詳細な説明です

表7.3.1(b) 属性値
有効なデバイ
属性の種類 説明 使用モード 有効な値 デフォルト値

BAUD_9600: 9600
baud
BAUD_4800: 4800
シリアルポートのボーレート
ATR_BAUD baud
を有効な属性値のいずれかに ポート Read/ Write BAUD_9600
ボーレート BAUD_2400: 2400
変更可能
baud
BAUD_1200: 1200
baud
DBITS_5: 5 bits
指定されるとシリアルポート
ATR_DBITS DBITS_6: 6 bits
のデータ長が指定された属性 ポート Read/ Write DBITS_8
データ長 DBITS_7: 7 bits
値に変更されます。
DBITS_8: 8 bits
この属性が指定されると、シ
リアルポートが指定された属
ATR_EOL 性値でreadを終了するように 任意のASCII文字

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 43 of 412

行の終了 変更されます。 有効な属性値 コード


に関しては付録Dを参照して ポート Read/ Write 13 (carriage return)
下さい。
この属性が指定されると、
readするデータの量がREAD
文のフォーマット指定子もし
ATR_FIELD くはreadするデータタイプに TP/CRT, 終端文字(EOL)が現れ
読み取り専用 無視されます
Field 応じたデフォルトに依存する PORT, FILE るまでデータを読む
ようになります。 指定しない
と、終端文字(EOL)が現れる
までreadします。
この属性が指定されると、
バッファへの書込み操作が終
わる度にバッファの内容を出
力します。 (対話型)
指定されないと、バッファの TP/CRTは対話型で
ATR_IA TP/CRT,
内容はバッファが一杯になる Write only 無視されます す。 PORT, FILEは対
対話型の書き込み PORT, FILE
か、CRが指定された時のみ 話型ではありません。
バッファの内容を出力しま
す。 出力バッファのサイズは
256バイトです。 (対話型では
ない)
PARITY_NONE: パ
リティ無し
シリアルポートのパリティを
ATR_PARITY PARITY_ODD: 奇
有効な属性値の一つに変更可 ポート Read/ Write PARITY_NONE
パリティ 数パリティ
能です。
PARITY_EVEN: 偶
数パリティ
この属性が指定されると、入
力は解釈もトランザクション
も無しにreadされます。 終端 入力キーが押されるま
ATR_PASSALL TP/CRT,
文字(EOL)はreadを終了させ 読み取り専用 無視されます で、表示可能キーのみ
Passall PORT
ないため、自動的にfield属性 readする。
が指定されたと仮定されま
す。
デフォルトでは
snapshotとなります。
WAIT_USED もし
パイプにデータが届くまで つまりパイプ中のデー
ATR_PIPWAIT PIPE Read くは
read操作を待つ。 タが全て読まれている
WAIT_NOTUSED
場合にはEOFを返しま
す。
属性値は128バイト単位で指 任意の正の整数値
ATR_READAHD 定されます。先読みバッファ 1は128バイトを意
先読みバッファ (読める状態になっているが、 味します。 1 (128バイトのバッ
ポート Read/ Write
(Read Ahead まだ読まれていないデータの 2は256バイトを意 ファ)
Buffer) 入るバッファ)を指示されたサ 味します。
イズでアロケートします。 0で無効とします。
ATR_REVERSE
バイトがスワップされます。 PORT, FILE Read/ Write 無視されます スワップしません
Reverse transfer
SBITS_1:1 bit
ATR_SBITS シリアルポートのストップ
ポート Read/ Write SBITS_15: 1.5 bits SBITS_1
ストップビット ビットを指定します。
SBITS_2:2 bits
この属性を指定すると、read
ATR_TIMEOUT に指定属性値より長く掛かる TP/CRT, 任意の整数値(単位
読み取り専用 0 (タイムアウト無し)
タイムアウト と、IO_STATUSからエラー PORT はmsec)
が返ります。
この属性が指定されるとバイ
ナリの転送が行われる。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 44 of 412

Readに関しては、終端文字
(EOL)がreadを停止しない。
ATR_UF
それ故に自動的にfield属性が
フォーマット無し PORT, FILE Read/ Write 無視されます ASCII転送
指定されたと仮定されます。
の転送
この属性を指定しないと、
ASCII転送が行われます。
本属性が指定されると、シリ XF_NOT_USED: 使
ATR_XONOFF アルポートのXON/XOFF文字 Read/ Write 用されない
ポート XF_USED
XON/XOFF が指定された属性値に変更さ XF_USED: 使用す
れます。 る

7.3.2 第二引数file_string
OPEN FILE文の第二引数file stringはデータファイル名及び拡張子、もしくは通信ポートを指定します。
 OPEN FILE文はfile stringで指定されたデータファイルもしくはポートをファイル変数に関連付けます。例えば、OPEN
FILE file_var (`RO', `data_file.dt') は'data_file.dt'と呼ばれるデータファイルをファイル変数file_varに関連付けます。
 file stringが引用符で囲まれている場合、それはリテラルとして扱われます。またはfile stringはSTRING変数もしくは定数の
識別子として扱われます。
 データファイルを指定する時、ファイル名とファイルタイプ(任意の1,2もしくは3文字の拡張子)の両方を含めなくてはなり
ません。
 以下の文字列は制御装置のシリアルポートとfile変数を関連付けるために使用可能です。デフォルト設定であれば以下の通
り。
 'P2:' - 操作パネルの外側にあるコネクタの試験端末
 'P3:' - MainCPUボート上のJD17のRS-232C(CRT/KB)
 'P4:' - MainCPUボート上のJD17コネクタのRS-422
 'KB:tp kb' - 教示操作盤の数値キーからの入力。TPDISPLAYもしくはTPPROMPT は一般的に使用され、OPEN FILEは必
要ありません。
 'KB:cr kb' - CRT/KBからの入力。INPUTもしくはCRTPROMPT は一般的に使用され、OPEN FILEは必要ありません。
 'WD:window_name' - ウィンドウへの書き込み。
 'WD:window_name</keyboard_name>' ,ここでkeyboard_name は'tpkb' もしくは 'crkb' - 指定したウィンドウへの書き込
み。入力は教示操作版のキーパッド(tpkb)もしくはCRTのキーボード(crkb)。 入力が指定ウィンドウにそのまま表示さ
れます。

8章も参照して下さい。ファイル名とファイルタイプの記述があります。

7.3.3 第一引数usage_string
OPEN FILE文の第一引数usage stringはどのようにファイルを使用するかを示します。
 一つの使用方法の指定子からなります。
 OPEN FILE文で指定したファイルにのみ適用されます。他のファイルには適用されません。
 リテラルで表現するなら、単一引用符で囲まねばなりません。
 変数もしくは定数で表すことも可能です。
表7.3.3は各使用方法の指定子、その機能、使用を意図したデバイスもしくはポートの一覧です。
 「TP/CRT」は教示操作盤及びCRT/KBを指します。
 「ポート」はシリアルポートを指します。
 「ファイル」'はデータファイルを指します。
 「パイプ(PIPE)」はパイプデバイスを指します。
 「有効」は使用しても差し支えないことを示します。
 「No use」は予測不可能な副作用の可能性を示します。

表7.3.3 Usage String


指定子 機能 TP/CRT ポート ファイル パイプ(PIPE)
RO 
 readのみ許されます。 有効 有効 有効
 ファイル中の位置をファイルの先頭としま
す。 有効
 ファイルは既に存在している必要がありま
す。
RW  ファイル中の既存のデータを削除し、上書 有効 有効 有効

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 45 of 412

します。 FRx:ではNo
 Readとwriteが可能です。 use
 ファイル中の位置をファイルの先頭としま
有効
す。
 ファイルが存在しない場合、生成されま
す。
AP  既存のデータの終わりに追加(アペンド)し no use 有効 RAM disk*で
ます。 はvalid。FRx:
 ReadとWriteが可能です(最初の操作は ではno use。
Writeとする必要があります)。
有効
 ファイル中の位置をファイルの終わりとし
ます。
 ファイルが存在しない場合、生成されま
す。
 既存のデータの最初を更新する。 (Writeす
る文字の数は置き換える文字の数と等しい
必要がある。) RAM disk*で
UD  既存のデータを新しいデータで上書する。 no use 有効 はvalid。FRx: no use
 ReadとWriteが可能 ではno use。
 ファイル中の位置を既存ファイルの先頭と
します。
* AP及びUDはRAM disk上の非圧縮ファイルにのみ指定可能。RAM diskに関する詳細は8章を参照して下さい。

例7.3.3はOPEN FILE文中の様々なfile stringの例を含んでいるプログラムです。ファイルとポートの文字列がどのように宣言さ


れるか示すために、CONSTとVARセクションが含まれています。

例7.3.3 File Stringの例

PROGRAM openluns
CONST
part_file_c ='parts.dt' --data file のSTRINGの定数
comm_port = 'P3:' --ポートのSTRINGの定数
VAR
file_var1 : FILE
file_var2 : FILE
file_var3 : FILE
file_var4 : FILE
file_var5 : FILE
file_var12 : FILE
temp_file : STRING[19]
--サイズ19のSTRINGは
--デバイス名4文字、ピリオド、12文字のファイル名、
--2文字の拡張子を格納できます。
port_var : STRING[3]
BEGIN
--リテラルのファイル名と拡張子
OPEN FILE file_var1 ('RO','log_file.dt')
--parts.dtをCONSTANTで指定
OPEN FILE file_var2 ('RW', part_file_c)
--new_file.dtを指定する変数
temp_file = 'RD:new_file.dt'
OPEN FILE file_var3 ('AP', temp_file)
--通信ポートをリテラルで指定
OPEN FILE file_var4 ('RW', 'P2:')
--P3:をCONSTANTで指定
OPEN FILE file_var5 ('RW', comm_port)
--C3:を指定する変数
port_var = 'C3:'
OPEN FILE file_var12 ('RW', port_var)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 46 of 412

END openluns

以下の項目も参照して下さい。
 8章:使用可能なデータ保存向けのデバイスに関する記載があります。
 11章: C3:に関する記載があります。

7.4 CLOSE FILE文


CLOSE FILE文は指定されたファイル変数とそのデータファイル、もしくは通信ポートとの関連付けを解消するために用いられ
ます。それは二つの目的を達成します。
 ファイルもしくはポートにバッファ中のあらゆるデータが書き込まれます。
 ファイル変数が開放され、他の目的で使用することができます。
例7.4はCLOSE FILE文をFORループ中で使用している例を含むプログラムです。 そこでは幾つかのファイルがopen、readされ、
そしてcloseされます。各ファイルに対して同一のファイル変数が使用されています。

例7.4 CLOSE FILE 文の例


PROGRAM readfiles
VAR
file_var : FILE
file_names : ARRAY[10] OF STRING[15]
loop_count : INTEGER
loop_file : STRING[15]
ROUTINE read_ops(file_spec:FILE) FROM utilprog
--performs some read operations
ROUTINE get_names(names:ARRAY OF STRING) FROM utilprog
--gets file names and types
BEGIN
get_names(file_names)
FOR loop_count = 1 TO 10 DO
loop_file = file_names[loop_count]
OPEN FILE file_var ('RO', loop_file)
read_ops(file_var) --call routine for read operations
CLOSE FILE file_var
ENDFOR
END readfiles

付録AのCLOSE FILE文、IO_STATUSビルトインも参照して下さい。

7.5 READ 文
READ文は一つもしくはそれ以上のデータを指示されたデバイスから読むために使用されます。READ文の構文は以下の通りで
す。
READ < file_var > (data_item {,data_item})

file_var : FILE変数
data_item : 変数の識別子とオプションのフォーマット指定子、又は予約語CR

データを読み込むdata_itemはREAD文の一部としてリストされます。 READ文には以下のルールが適用されます。
 あらゆるReadを行う前に、OPEN FLIE文を使用する必要があります。それによりファイル変数とファイルを関連付けるた
めです。そうでないならば、定義済みのファイルの一つを使用する必要があります(表7.2を参照して下さい)。
 ファイル変数がREAD文から省略されると、デフォルト値としてTPDISPLAYが使用されます。
 %CRTDEVICE ディレクティブを使用するとデフォルトがINPUT(CRT input window)に変更されます。
 data_itemに読み込むデータ量を制御するためにフォーマット指定子を使用可能です。フォーマット指定子の効果は読み込
むデータの種類と、データがテキスト(ASCII)かバイナリ(フォーマット無し)かに依存します。
 READ文が(ASCIIファイルに)実行される時、次の空白でない入力文字から読み始めます。次の空白か、行末か、ファイル
終端の前の空白以外の文字列まで読みます。これはSTRING以外の全てに当てはまります。
 STRINGに関しては、入力フィールドは次の文字から開始し、行末か、ファイルの終端まで続きます。もしSTRINGが

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 47 of 412

STRING以外のフィールドの後で同じ行から読まれた場合、STRINGには区切りとなった空白が含まれます。
 配列の変数は要素毎に読む必要があります。添え字無しの形で読み込むことはできません。FORループ中でREADを用い
て配列にデータを読み込むことが良くあります。
例7.5は様々なファイル変数とdata_itemを用いたREAD文の例です。

例7.5 READ文の例
READ (next_part_no) --デフォルトのTPDISPLAYを使用
OPEN FILE file_var ('RO','data_file.dt')
READ file_var (color, style, option)
READ host_line (color, style, option, CR)
FOR i = 1 TO array_size DO
READ data (data_array[i])
ENDFOR

ファイル変数がウィンドウデバイスに関するopenでは無く、入力処理中に何かエラーが発生したとします。データを読み込ん
でいた変数と、それに続く変数(CRまで)は未初期化となります。
もしウィンドウデバイスからの読み込みならば、間違ったdata_itemを示すメッセージが表示されます。無効なデータ項目の代
わりとなるよう新規の入力、無効なdata_itemとそれに続く全ての項目の再入力を促されます。
READが成功したか否か(失敗したならその理由)を決定するために、IO_STATUSビルトインを使用可能です。

以下の項目も参照して下さい
 付録AのREAD文
 付録AのIO_STATUSビルトイン
 付録Aの%CRTDEVICEトランスレータディレクティブ

7.6 WRITE文
WRITE文は指示されたデバイスに一つもしくはそれ以上のデータを書き込むために使用されます。WRITE文の構文は以下の通
りです。
WRITE <file_var> (data_item { ,data_item })

file_var : FILE 変数
data_item : 式とオプションのフォーマット指定子、又は予約語CR

ファイルへ書き込むデータとなるdata_itemはWRITE文の一部として指定されます。WRITE文には以下の規則が適用されます。
 あらゆるWriteが行われる前に、OPEN FLIE文を使用する必要があります。それによりファイル変数とファイルを関連付け
るためです。定義済みのファイルの一つを使用している場合は除きます(表7.2を参照して下さい)。
 ファイル変数がWRITE文から省略されると、デフォルト値としてTPDISPLAYが使用されます。
 %CRTDEVICE ディレクティブを使用するとデフォルトがOUTPUT(CRT output window)に変更されます。
 フォーマット指定子を使用すると各data_itemを書き込むフォーマットを制御可能です。フォーマット指定子の効果は書き
込むデータの種類と、データがテキスト(ASCII)かバイナリ(フォーマット無し)かに依存します。
 配列の変数は要素毎に書く必要があります。つまり添え字無しの形で書くことはできません。 FORループ中でWRITE文を
用いて配列に書き込むことが良くあります。
例7.6は様々なファイル変数とdata_itemを用いたWRITE文の例を幾つか示しています。

例7.6 WRITE文の例
WRITE TPPROMPT('Press T.P. key "GO" when ready')
WRITE TPFUNC (' GO RECD QUIT BACK1 FWD-1')
WRITE log_file (part_no::5, good_count::5, bad_count::5, operator::3, CR)
WRITE ('This is line 1', CR, 'This is line 2', CR)
--uses default TPDISPLAY
FOR i = 1 TO array_size DO
WRITE data (data_array[i])
ENDFOR

付録AのWRITE文、IO_STATUSビルトインも参照して下さい。

7.7 入出力 バッファ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 48 of 412

RAMの一部、バッファと呼ばれる領域は、読み書きの操作中に未転送のデータを最大256バイト保持するために用いられま
す。
READ、WRITE文はバッファを以下のように使用します。
 READ文の実行中にREAD文が要求した以上のデータを読み込んだ場合、それ以降に続くREAD操作のために残りのデータ
をバッファ中に保持します。 例えば、あなたがREAD文の要求を満たす以上のデータをキーボードから入力した場合、余
分なデータがバッファ中に保持されます。
 インタラクティブでないファイルに対してWRITEが行われ、その最後のデータがCRでない場合、データは引き続くWrite
がCRを指定するか、バッファが一杯になるまで保持されます。
 単一のREADもしくはWRITE文で処理できるデータは全体で127バイトまでです。

7.8 テキスト (ASCII) 入出力のフォーマット


この節はASCII(フォーマット有り)テキストの読み書きで用いられるフォーマット指定子を各データ型に関して説明します。
本節及び7.8.1項から7.8.6項ではdata_itemという単語が頻出します。data_itemについては7.5及び7.6節のREAD, WRITE文の構文
を参照して下さい。もしくは付録AのREAD文、WRITE文の構文を参照して下さい。
データのフォーマットには以下の規則が適用されます。
 テキストファイルに関しては、READ及びWRITE文中のdata_itemは単純なデータ型(INTEGER, READL, BOOLEAN及び
STRING)のいずれにも成り得ます。
 位置データ及びベクトルの変数はテキストファイルからREADはできませんが、WRITE文では使用可能です。
 配列の変数は添え字無しの形で読み書きできません。配列の要素は配列のデータ型に相当するフォーマットで読み書きさ
れます。
 幾つかのフォーマットとデータの組み合わせは書き込みと同様には読み込まれません。同じフォーマットで読むと無効と
なる場合も有ります。
読み書きするデータの量は制御可能です。READ及びWRITE文の中で、それぞれのdata_itemに対して0から2個のフォー
マット指定子を使うことで制御可能となります。それぞれのフォーマット指定子はINTEGERのリテラルで表現されます。
そのINTEGERの前にコロンが二つ(::)先行します。
表7.8(a)はREAD文のdata_itemで使用可能な入力のフォーマット指定子の要約です。各データ型のデフォルトのフォーマッ
ト、各データ型に影響を持つフォーマット指定子は7.8.1項から7.8.6項に説明されています。

表7.8(a) テキスト(ASCII)入力のフォーマット指定子
データ型 第一のフォーマット指定子 第二のフォーマット指定子
INTEGER 読み込む文字の数 2から16までの基数
REAL 読み込む文字の数 無視されます
BOOLEAN 読み込む文字の数 無視されます
0 - 引用符に囲まれていない STRING
STRING 読み込む文字の数
2 - 引用符に囲まれている STRING

表7.8(b)はWRITE文のdata_itemで使用可能な出力のフォーマット指定子の要約です。 各データ型のデフォルトのフォーマッ
ト、各データ型に影響を持つフォーマット指定子は7.8.1項から7.8.6項に説明されています。

表7.8(b) テキスト(ASCII)出力のフォーマット指定子
データ型 第一のフォーマット指定子 第二のフォーマット指定子
INTEGER 書き込む文字の数 2から16までの基数
小数点の右に書く桁の数
REAL 書き込む文字の数
負の場合、科学的記数法です。
0 - 左揃え
BOOLEAN 書き込む文字の数
1 - 右揃え
0 - 左揃え
1 - 右揃え
STRING 書き込む文字の数
2 - 引用符に囲まれた左揃え(先行する空白)
3 - 引用符に囲まれた右揃え(先行する空白)
VECTOR 各要素に対しREALのフォーマットを使用する 各要素に対しREALのフォーマットを使用する
POSITION 各要素に対しREALのフォーマットを使用する 各要素に対しREALのフォーマットを使用する
XYZWPR 各要素に対しREALのフォーマットを使用する 各要素に対しREALのフォーマットを使用する
XYZWPREXT 各要素に対しREALのフォーマットを使用する 各要素に対しREALのフォーマットを使用する
JOINTPOSn 各要素に対しREALのフォーマットを使用する 各要素に対しREALのフォーマットを使用する

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 49 of 412

7.8.1 INTEGER型data_itemのフォーマット
READ文中のINTEGER型のdata_itemは以下のように処理されます。

デフォルト
10進数(基数10)のINTEGER型として読みます。入力行の次の空白以外の文字から読み始めます。空白や行末を検出するま
で読み続けます。文字列が有効な整数値にならない場合、読み込み操作は失敗します。
第一のフォーマット指定子
読み込む文字の数を示します。入力フィールドは全体が現在の行にある必要があります。先行する空白を含むことができ
ますが、末尾の空白は含まれません。
第二のフォーマット指定子
入力に用いられる基数を示します。2(2進数)から16(16進数)までの間である必要があります。

10を超える基数に関しては、A,B,C,D,E,Fをそれぞれ10,11,12,13,14,15の各桁の入力値として用います。小文字も使用可能です。
表7.8.1(a)はINTEGERの入力のdata_itemとフォーマット指定子の例のリストです。入力データとINTEGER型のdata_itemとして読
み込んだ結果の値が表に含まれています ([eol]は行の終了を示します)。

表7.8.1(a) INTEGER型のdata_itemの入力の例
data_item 入力データ 結果
int_var -2[eol] int_var = -2
int_var 20 30 ... int_var = 20
int_var::3 10000 int_var = 100
10101 int_var = 21
int_var::5::2
(2真数の入力) (10進数の値)
フォーマットエラー
int_var 1.00
(無効なINTEGER)
フォーマットエラー
int_var::5 100[eol]
(桁が少な過ぎる)

WRITE文中のINTEGER型のdata_itemは以下のようにフォーマットされます。
デフォルト
10進数(基数10)のINTEGERとして書かれます。必要な桁数と一つの先行する空白を使用します。INTEGERが負の場合には
負号が先行します。
第一のフォーマット指定子
書き込まれる全文字数を示します。空白や負号を含みます。フォーマット指定子がデータに必要な分より大きい場合は、
先行する空白が加えられます。必要な分より小さい場合には、フィールドが必要なだけ拡張されます。指定子はファイル
に対しては1から127の範囲で、その他のデバイスでは1から126の範囲である必要があります。
第二のフォーマット指定子
出力の基数を示します。2(2進数)から16(16進数)の範囲である必要があります。

10(10進数)以外の基数が指定されたなら、第一のフォーマット指定子に指定された文字の数(-1:先行する空白の分)が書かれま
す。必要なら先行する0が追加されます。
10を超える基数に関しては、A,B,C,D,E,Fをそれぞれ10,11,12,13,14,15の各桁の入力値として用います。

表7.8.1(b)はINTEGER型の出力のdata_itemとフォーマット指定子の例のリストです。INTEGER型のデータ項目の出力値も表に含
まれています。表中では、先行する空白とのデリミタとして二重引用符が用いられています。しかしながら、二重引用符は
KARELプログラムによって書かれません。

表7.8.1(b) INTEGER型data_itemの出力の例
data_item 出力 コメント
123 " 123" 先行する空白
-5 " -5" 先行する空白
123::6 " 123 " 右揃え(先行する空白)
-123::2 " -123" 必要に応じて拡張された
1024::0::16 " 400" 16進数の出力
5::6::2 " 00101" 2進数の出力(先行する空白)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 50 of 412

-1::9::16 " FFFFFFFF" 16進数の出力

7.8.2 REAL型data_itemのフォーマット
READ文中のREAL型のdata_itemは以下のように処理されます。
デフォルト
入力行の次の空白以外の文字から読み始めます。空白や行末を検出するまで読み続けます。
入力データは端数部分を含めた形でも、含めない形でもかまいません。科学的記数法で使用するEは大文字にも小文字にも
できます。文字列が有効な実数にならない場合、読み込み操作は失敗します。
第一のフォーマット指定子
読み込む文字の数を示します。入力フィールドは全体が現在の行にある必要があります。先行する空白を含むことができ
ますが、末尾の空白は含まれません。
第二フォーマット指定子
REAL型のdata_itemでは無視されます。

表7.8.2(a)はREAL型の入力のdata_itemとフォーマット指定子の例のリストです。入力データとREAL型のdata_itemとして読み込
んだ結果の値が表に含まれています。[eol]は行の終了を示します。Xは入力行にある無関係なデータを示します。

表7.8.2(a) REAL型のdata_itemの入力の例
data_item 入力データ 結果
real_var 1[eol] 1.0
real_var 1.000[eol] 1.0
real_var 2.5 XX 2.50
real_var 1E5 XX 100000.0
real_var::7 2.5 XX フォーマットエラー(末尾の空白)
real_var 1E フォーマットエラー(指数が無い)
real_var::4 1E 2 フォーマットエラー(空白が埋め込まれている)

WRTIE文中のREAL型のdata_itemは以下のようにフォーマットされます。
デフォルト
以下の形式の科学的記数法で書かれます。
(blank)(msign)(d).(d)(d)(d)(d)(d)E(esign)(d)(d)

(blank) は一つの空白です。
(msign) はマイナス記号です。必要に応じて出力されます。
(d)は桁です。
(esign)は プラス記号もしくはマイナス記号です。

第一のフォーマット指定子
書き込まれる全文字数を示します。全ての桁、空白、符号、小数点を含みます。フォーマット指定子がデータに必要な分
より大きい場合は、先行する空白が加えられます。必要な分より小さい場合には、フィールドが必要なだけ拡張されま
す。
科学的記数法の場合には、データを完全に出力するためには文字列の長さを(8+第二のフォーマット指定子)より大きくして
下さい。
指定子はファイルに対しては1から127の範囲で、その他のデバイスでは1から126の範囲である必要があります。
第二フォーマット指定子
小数点の右の桁の数を示します。科学的記数法が用いられているか否かによりません。

第二のフォーマット指定子の絶対値は小数点の右に出力される桁の数です。そのフォーマット指定子が正ならば、固定小数点
のフォーマットで出力されます。つまり指数部分がありません。負ならば科学的記数法が使用されます。

表7.8.2(b)はREAL型の出力のdata_itemとフォーマット指定子の例のリストです。 REAL型のdata_itemの出力値も表に含まれてい
ます。 表中では、先行する空白とのデリミタとして二重引用符が用いられています。しかしながら、二重引用符はKARELプロ
グラムによって書かれません。

表7.8.2(b) REAL型data_itemの出力の例
data_item 出力 コメント

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 51 of 412

123.0 " 1.23000E+02" 科学的記数法(デフォルトのフォーマット)


123.456789 " 1.23457E+02" 端数の部分の5桁目で丸められています。
.00123 " 1.23000E-03 " 指数部分が負
-1.00 " -1.00000E+00" 負の値
-123.456::9 " -1.234560E+02 " フィールドが拡張された
123.456::12 " 1.234560E+02" 先行する空白が加えられた
123.456::9::2 " 123.46" 右揃え、丸め発生
123.::12::-3 " 1.230E+02" 科学的記数法

7.8.3 BOOLEAN型data_itemのフォーマット
READ文中のBOOLEAN型のdata_itemは以下のようにフォーマットされます。
デフォルト
入力行の次の空白以外の文字から読み始めます。空白や行末を検出するまで読み続けます。
TRUEに対する有力な入力値にはTRUE、TRU、TR、T、ONがあります。FALSEに対する有効な入力値にはFALSE、
FALS、FAL、FA、F、OFF、OFがあります。読んだ文字列が有効なBOOLEANにならない場合、読み込み操作は失敗しま
す。
第一のフォーマット指定子
読み込む文字の数を示します。入力フィールドは全体が現在の行にある必要があります。先行する空白を含むことができ
るが、末尾の空白は含まれません。
第二のフォーマット指定子
BOOLEAN型のdata_itemでは無視されます。

表7.8.3(a)はBOOLEAN型の入力のdata_itemとフォーマット指定子の例のリストです。入力データとBOOLEAN型のdata_itemとし
て読み込んだ結果の値が表に含まれています([eol]は行の終了を示します。Xは入力行にある無関係なデータを示します)。

表7.8.3(a) BOOLEAN型の入力のdata_itemの例
data_item 入力データ 結果
bool_var FALSE[eol] FALSE
bool_var FAL 3... FALSE
bool_var T[eol] TRUE
bool_var::1 FXX FALSE ("F''のみを読む)
bool_var O[eol] フォーマットエラー (曖昧)
bool_var 1.2[eol] フォーマットエラー(BOOLEANでない)
bool_var::3 F [eol] フォーマットエラー(末尾の空白)
bool_var::6 TRUE[eol] フォーマットエラー(十分なデータが無い)

WRITE文中のBOOLEAN型のdata_itemは以下のようにフォーマットされます。
デフォルト
"TRUE"もしくは"FALSE"として書かれます (表中では、先行する空白とのデリミタとして二重引用符が用いられていま
す。しかしながら、二重引用符はKARELプログラムによって書かれません) 。
第一のフォーマット指定子
書き込まれる全文字数を含みます。これは空白を含みます(先行する空白は常に含まれます)。フォーマット指定子が
データに必要な分より大きい場合は、末尾の空白が加えられます。 必要な分より小さい場合には、右側で短くされます。
指定子はファイルに対しては1から127の範囲で、その他のデバイスでは1から126の範囲である必要があります。
第二のフォーマット指定子
左揃えか右揃えかを示します。フォーマット指定子が0ならば、出力フィールドで左揃えになります。先行する空白一つを
伴います。末尾の空白は必要に応じて加えられます。1ならば出力フィールドで右揃えになります。先行する空白が必要に
応じて加えられます。

表7.8.3(b)はBOOLEAN型の出力のdata_itemとフォーマット指定子の例のリストです。 BOOLEAN型のdata_itemの出力値も表に
含まれています。表中では、先行する空白とのデリミタとして二重引用符が用いられています。しかしながら、二重引用符は
KARELプログラムによって書かれません。

表7.8.3(b) BOOLEAN型data_itemの出力の例
data_item 出力 コメント
FALSE " FALSE" デフォルトは先行する空白を含みます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 52 of 412

TRUE " TRUE" TRUEはFALSEより短い


FALSE::8 " FALSE " 左揃え(デフォルト)
FALSE::8::1 " FALSE" 右揃え
TRUE::2 " T" 短くされます。

7.8.4 STRING型data_itemのフォーマット
READ文中のSTRING型のdata_itemは以下のようにフォーマットされます。
デフォルト
現在の(ファイル中の)位置から読み始め、行末まで続けます。もし取得してデータの長さがSTRINGの宣言されている長さ
より長いなら、右側で短くされます。もし短い場合には、STRING型の現在の長さが実際の長さに設定されます。
第一のフォーマット指定子
入力データの全フィールド長を示します。もしフィールド長がSTRINGの宣言されている長さより長い場合、入力データは
右側で短くされます。短い場合STRINGの現在の長さは実際の長さにセットされます。
第二のフォーマット指定子
入力文字列が単一引用符で囲まれているか否かを示します。フォーマット指定子が0に等しいなら、入力は引用符で囲まれ
ていません。

第二のフォーマット指定子が2なら、入力は引用符で囲まれている必要があります。入力から次の空白以外の文字を探します。
もしその文字が引用符で無いなら、その文字列は不正です。読み込み操作は失敗します。
その文字が引用符なら、残りの文字列からもう一つの引用符か行末を探します。もしもう一つの引用符が見つからなかった場
合、その文字列は不正です。読み込み操作は失敗します。
もし両方の引用符が発見された場合、間の全ての文字がSTRING型変数に読まれます。 但しSTRING型変数が短過ぎない限りで
す。短過ぎない場合は右側で短くされます。

表7.8.4(a)はSTRINGの入力のdata_itemとフォーマット指定子の例のリストです。ここでstr_varはSTRING[5]として宣言されてい
ます。 入力データとSTRING型のdata_itemとして読み込んだ結果の値が表に含まれています。 [eol]は行の終了を示します。X
は入力行にある無関係なデータを示します。

表7.8.4(a) STRING型の入力のdata_itemの例
data_item 入力データ 結果
str_var "ABC[eol]" "ABC"
"ABCDE"
str_var "ABCDEFG[eol]"
(FGは読まれましたが5文字に短くされます。)
" 'AB"
str_var " 'ABC'XX"
(空白と引用符もデータとして読まれる)
"'ABC'"
str_var::0::2 "'ABC'XX"
(読み込みは第二の引用符で終わっている)

WRITE文中のSTRING型のdata_itemは以下のようにフォーマットされます。
デフォルト
STRINGの内容が先行する空白、末尾の空白、引用符なしで書かれます。
ファイル中ではSTRINGは127バイトを超えてはなりません。他の出力デバイスでは126バイトを超えてはなりません。超え
た場合は"STRING TOO LONG"エラーでプログラムが終了します。
第一のフォーマット指定子
書き込まれる全文字数を示します。空白を含みます。 フォーマット指定子がデータに必要な分より長い場合は、データは
左揃えとなり末尾の空白が加えられます。 フォーマット指定子が必要な分より短い場合には、STRINGは右側で短くされ
ます。
指定子はファイルに対しては1から127の範囲で、その他のデバイスでは1から126の範囲である必要があります。
第二のフォーマット指定子
出力が左揃えか右揃えかを示します。そしてSTRINGが引用符で囲まれるかを示します。上記のことは以下の値を使って示
されます。

0 左揃え、引用符なし
1 右揃え、引用符なし

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 53 of 412

2 左揃え、引用符有り
3 右揃え、引用符有り

STRINGの値が引用符で囲まれる場合は、左揃えであっても、先行する空白が加えられます。引用符で囲まれてないSTRINGの
値は自動的には先行する空白が加えられません。
表7.8.4(b)はSTRING型の出力のdata_itemとフォーマット指定子の例を列挙しています。 STRING型のdata_itemの出力値も表に含
まれています。 表中では、先行する空白とのデリミタとして二重引用符が用いられています。しかしながら、二重引用符は
KARELプログラムによって書かれません。

表7.8.4(b) STRING型data_itemの出力の例
data_item 出力 コメント
'ABC' "ABC" 先行する空白なし
'ABC'::2 "AB" 右側で短くされる
'ABC'::8 "ABC " 左揃え
'ABC'::8::0 "ABC " 先と同様
'ABC'::8::1 " ABC" 右揃え
'ABC'::8::2 " 'ABC' " 先行する空白に注意
'ABC'::8::3 " 'ABC'" 右揃え
'ABC'::4::2 " 'A'" 短くされます。

STRING型data_itemのフォーマット指定子を使用することにより、出力結果を再度読み込んだ時に元々のSTRINGが短くなる可
能性や末尾に空白が加えられる可能性があります。STRINGの値を問題なく読み書き可能な必要があるなら、以下のガイドライ
ンが役に立ちます。長さが変化するSTRINGの値を同等の値として読み戻すことを保証する助けになるでしょう。
 文字列を読み込む変数は少なくとも実際に読む文字列の長さで宣言する必要があります。さもないと短くされてしまいま
す。
 STRINGのデータを同じ行の他のデータと分けるための何らかの対策をせねばなりません。一つの可能性としては、
STRINGとそれに先行する変数の間に' '(空白)を入れることです。
 フォーマット指定子を読み込みで用いていないなら、STRINGの値を各データ行の最後で書き込んで下さい(つまりCRが続
きます)。なぜならフォーマット無しのSTRING型変数は行末に到達するまで読まれるからです。
 文字列をファイルに書き込んで読み戻す最も一般的な手法は、読み書き双方にフォーマット::0::2を用いることです。

7.8.5 VECTOR型data_itemのフォーマット
VECTOR型data_itemはテキスト(ASCII)ファイルからは読めません。しかしながら、3個のREALを読み、それをVECTORの要素
に代入することは可能です。WRITE文中のVECTOR型data_itemは同一行中の三つのREALとしてフォーマットされます。
表7.8.5はVECTOR型の出力のdata_itemとフォーマット指定子の例のリストです。ここでvect.x=1.0, vect.y=2.0, vect.z=3.0です。
VECTOR型data_itemの出力値も表に含まれています。表中では、先行する空白とのデリミタとして二重引用符が用いられてい
ます。しかしながら、二重引用符はKARELプログラムによって書かれません。

REAL型data_itemのデフォルトの出力フォーマット、フォーマット指定子に関しては7.8.2項「REAL型data_itemのフォーマッ
ト」を参照して下さい。

表7.8.5 VECTOR型data_itemの出力の例
data_item 出力
vect " 1. 2. 3."
vect::6::2 " 1.00 2.00 3.00"
vect::12::-3 " 1.000E+00 2.000E+00 3.000E+00"

7.8.6 位置データのdata_itemのフォーマット
位置データのdata_itemはテキスト(ASCII)ファイルからは読めません。しかし6個のREALと1個のSTRINGを読み、XYZWPR型の
変数の要素に代入することは可能です。もしくはPOSITION型を生成するためにPOSビルトインを使用することができます。
CONV_STR_CONFIGビルトインを用いて、STRINGをCONFIGデータ型に変換可能です。
WRITE文中のPOSITION及びXYZWPR型のdata_itemは3行として出力されます。最初の行は位置(x,y,z)成分を含みます。第二の
行は姿勢(w,p,r)、第三の行はコンフィギュレーションの文字列を含みます。
位置と姿勢の成分は6個のREALの値のフォーマットとなります。POSITION中のREALのデフォルトのフォーマットはREALの
デフォルトです。7.8.2項を参照して下さい。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 54 of 412

コンフィギュレーションの文字列はCRで終了していません。これは同じ行に他のデータを続けることができるという意味で
す。
表7.8.6はPOSITION型のdata_itemの出力値とフォーマット指定子の例です。ここでp=POS(2.0,-4.0,8.0,0.0,90.0,0.0,config_var)で
す。 POSITION型data_itemの出力値も表に含まれています。表中では、先行する空白とのデリミタとして二重引用符が用いら
れています。しかし二重引用符はKARELプログラムによって書かれません。

表7.8.6 POSITION型data_itemの出力の例(p = POS(2.0,-4.0,8.0,0.0,90.0,0.0,config_var))


data_item 出力
" 2.000 -4.000 8.000"

" 0.000 90.000 0.000"


p

"N D B, 0, 0, 0"

" 2.00 -4.00 8.00"

" 0.00 90.00 0.00"


p::7::2

"N D B, 0, 0, 0"

WRITE文中のJOINTPOS型data_itemはPOSITION型と似たようなフォーマットとなります。3つの値が1つの行に出力されます。

REAL型data_itemのデフォルトの出力フォーマット、フォーマット指定子に関しては7.8.2項「REAL型data_itemのフォーマッ
ト」を参照して下さい。
POSビルトイン関数については付録Aを参照して下さい。

7.9 バイナリ入出力のフォーマット
この節はバイナリ(フォーマット無し)テキストの読み書きで用いられるフォーマット指定子を各データ型に関して説明します。
バイナリの入出力操作はしばしば「書式なし(unformatted)」と呼ばれます。対照的にテキスト(ASCII)入出力操作が「書式付き
(formatted)」と呼ばれます。
本節及び7.9.1項から7.9.9項ではdata_itemという単語が頻出します。data_itemについては7.5及び7.6節のREAD, WRITE文の構文
を参照して下さい。もしくは付録AのREAD文、WRITE文の構文を参照して下さい。
SET_FILE_ATRビルトインをATR_UF属性で用いてファイル変数をバイナリのオペレーションに指定します。 指定しないと
ASCIIテキストのファイル操作が使用されます。
READとWRITE中のdata_itemは以下の任意のデータ型に成り得ます。

INTEGER
REAL
BOOLEAN
STRING
VECTOR
POSITION
XYZWPR
XYZWPREXT
JOINTPOS

配列変数は添え字無しの形では読み書きできません。配列の要素は配列のデータ型に相当するフォーマットで読み書きされま
す。
KARELプログラムによってのみ読まれるファイルを生成する時に、バイナリの入出力はテキストの入出力よりも好まれます。
それは以下の理由によります。
 テキスト入力からは位置データ、VECTOR変数を直接は読めない。
 幾つかのフォーマットとデータの組み合わせは、書いた時と同じようには読めない。もしくは同じフォーマットで読むと
無効となる。
 バイナリのデータは一般的にはアスキーよりコンパクトで、サイズと入出力時間の双方を減少させる。
 REALのデータをアスキーの表現に変換し、元に戻す時に避けられない精度のロスがあるため。
一般的にはバイナリ入出力にはフォーマット指定子を使う必要がありません。この規則に従うならば、全ての入力データは書

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 55 of 412

かれた時と全く同じように読めます。
しかしながら、多くのINTEGERが書かれ、その値が小さいと分かっているならば、これらの値をフォーマット指定子付で書く
ことで容量と入出力時間の双方を節約可能です。
例えば、-128から127の範囲にあるINTEGERの値は1バイトの記憶容量しか必要としません。-32768から32767の範囲のINTEGER
なら2バイト必要です。これらの範囲にあるINTEGERの値を、それぞれ第一フォーマット指定子を1及び2として書くならば、
有効数字を失わずに記憶容量と入出力時間を節約できます。
表7.9はREAD及びWRITE文で使用可能な入出力のフォーマット指定子のまとめです。各データ型のデフォルトのフォーマット
も含まれています。7.9.1項から 7.9.9項がより詳細に各データ型のフォーマット指定子の効果を説明しています。

SET_FILE_ATRビルトインについては付録Aを参照して下さい。

表7.9 バイナリ入出力のフォーマット指定子
データ型 デフォルト 第一のフォーマット指定子 第二のフォーマット指定子
INTEGER 4バイトの読み書き 指定した数の最下位バイトが読
み書きされます。読み書きは最
無視されます
上位バイトから開始されます
(1-4)
REAL 4バイトの読み書き 無視されます 無視されます
BOOLEAN 4バイトの読み書き 指定した数の最下位バイトが読
み書きされます。読み書きは最
無視されます
上位バイトから開始されます
(1-4)
STRING 現在の文字列の長さ(1バイ 読み書きするバイト数
無視されます
ト)、続いてデータ部分
VECTOR 3個の4バイトのREALが読み 無視されます
無視されます
書きされる
POSITION 56バイトが読み書きされる 無視されます 無視されます
XYZWPR 32バイトが読み書きされる 無視されます 無視されます
XYZWPREXT 44バイトが読み書きされる。 無視されます 無視されます
4 + n*4バイトが読み書きされ
JOINTPOSn 無視されます 無視されます
る。

7.9.1 INTEGER型data_itemのフォーマット
INTEGER型data_itemのREAD及びWRITEは以下のようにフォーマットされます。

デフォルト
4バイトのデータが最上位バイトから読み書きされます。
第一のフォーマット指定子
INTEGERの指定した数の最下位バイトを読み書きします。それらのバイトの最上位バイトから読み書きします。 最上位バ
イトの符号が読まれなかったバイトに拡張されます。フォーマット指定子は1から4の範囲にある必要があります。
例えば、フォーマット指定子2でINTEGERを書き込むと、バイト3,4が書き込まれる(バイト1が最上位バイト)。 バイナリ
入出力でINTEGERの値にフォーマット指定した場合、最上位バイトが失われたか否かのチェックは行いません。


INTEGERをフォーマット指定すると高次の桁が知らないうちに失われる可能性があります。

第二のフォーマット指定子
INTEGER型のdata_itemでは無視されます。

7.9.2 REAL型data_itemのフォーマット
REAL型data_itemのREAD及びWRITEは以下のようにフォーマットされます。

デフォルト
4バイトのデータが最上位バイトから読み書きされます。
第一のフォーマット指定子

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 56 of 412

REAL型のdata_itemでは無視されます。
第二のフォーマット指定子
REAL型のdata_itemでは無視されます。

7.9.3 BOOLEAN型data_itemのフォーマット
BOOLEAN型data_itemのREAD及びWRITEは以下のようにフォーマットされます。

デフォルト
4バイトのデータが読み書きされます。読み込みの操作においては、ワードの残りの部分は(決して使われません)0となりま
す。
第一のフォーマット指定子
この指定子で指定されたバイト数、最下位バイトから読み書きします。読み書き対象となるバイトの内、最上位バイトか
ら読み書きします。フォーマット指定子は1から4の範囲にある必要があります。BOOLEAN型の値は常に0か1です。よって
フィールド幅1を使用するのは常に安全です。
第二のフォーマット指定子
BOOLEAN型のdata_itemでは無視されます。

7.9.4 STRING型data_itemのフォーマット
STRING型data_itemのREAD及びWRITEは以下のようにフォーマットされます。

デフォルト
現在のSTRINGの長さ(宣言した長さではない)が1バイトとして読み書きされます。 その後にSTRINGの内容が続きます。
フォーマット指定無しで書かれたSTRINGの値はその長さを出力の一部として持っています。 一方フォーマットありで書
かれた場合は持っていません。同様に、フォーマット指定子無しで読まれたSTRINGは長さがデータ中にあることを期待し
ています。フォーマット有りで読まれた場合、期待されていません。
つまりSTRINGを書いてから読む場合、フォーマット指定子の使用に一貫性があることを確認する必要があります。
第一のフォーマット指定子
読み書きする文字の数を示します。
第二のフォーマット指定子
STRING型のdata_itemでは無視されます。

読み込み操作では、第一のフォーマット指定子がSTRINGの宣言の長さより大きい場合、データは右側で短くされます。それが
宣言の長さより短い場合、STRINGの現在の長さが読まれたバイト数に設定されます。
書込み操作においては、第一のフォーマット指定子がSTRINGの現在の長さより短いフィールドを示しているなら、 STRINGの
データは右側で短くされます。もしそれがSTRINGの現在の長さより長いなら、右側に空白を詰めて出力されます。
STRINGの値をフォーマット指定子付で書くと、元々のSTRINGの値が短くなる可能性があります。また再度読み込んだ時に文
字列の後ろに空白が追加される可能性があります。

7.9.5 VECTOR型data_itemのフォーマット
VECTOR型data_itemのREAD及びWRITEは以下のようにフォーマットされます。

デフォルト データは4バイトのバイナリのREAL3個として読み書きされます。
第一のフォーマット指定子 VECTOR型のdata_itemでは無視されます。
第二のフォーマット指定子 VECTOR型のdata_itemでは無視されます。

7.9.6 POSITION型data_itemのフォーマット
POSITION型data_itemのREAD及びWRITEは以下のようにフォーマットされます。

デフォルト 制御装置の内部フォーマットで読み書きされます。長さは56バイトです。

7.9.7 XYZWPR型data_itemのフォーマット
XYZWPR型data_itemのREAD及びWRITEは以下のようにフォーマットされます。

デフォルト 制御装置の内部フォーマットで読み書きされます。長さは32バイトです。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 57 of 412

7.9.8 XYZWPREXT型data_itemのフォーマット
XYZWPREXT型data_itemのREAD及びWRITEは以下のようにフォーマットされます。

デフォルト 制御装置の内部フォーマットで読み書きされます。長さは44バイトです。

7.9.9 JOINTPOS型data_itemのフォーマット
JOINTPOS型data_itemのREAD及びWRITEは以下のようにフォーマットされます。

デフォルト 制御装置の内部フォーマットで読み書きされます。長さは4バイト+各軸毎に4バイトです。

7.10 ユーザインタフェースのTIPS
教示操作盤もしくはCRT/KBとの入出力は、KARELプログラム内ではREAD及びWRITEで実行されています。 現在選択中の画
面がユーザ画面で無い場合、入力はユーザ画面が表示されるまでペンディングされています。出力は「保存された」ウィンド
ウに書き込まれます。それはユーザ画面が選択された時に表示されます。8個までの「保存された」ウィンドウを持つことがで
きます。

7.10.1 教示操作盤上のユーザ画面
教示操作盤上でユーザ画面が選択された時にアクティブになるスクリーンは"t_sc"と呼ばれます。 表7.10.1は"t_sc"向けに定義さ
れたウィンドウの一覧です。

表7.10.1 "t_sc"向けに定義されたウィンドウ
ウィンドウ名 行数 定義済みファイル名 スクロールの有無 行
"t_fu" 10 TPDISPLAY yes 5-14
"t_pr" 1 TPPROMPT no 15
"t_st" 3 TPSTATUS no 2-4
"t_fk" 1 TPFUNC no 16
"err" 1 TPERROR no 1
"stat" 1 no 2
"full" 2 no 3-4
"motn" 1 no 3

デフォルトではユーザ画面は"err"、"stat"、"full"、"motn"、"t_fu"、"t_pr"、"t_fk"を"t_sc"スクリーンにアタッチします。 図7.10.1
(a)をご覧下さい

図7.10.1(a) "t_sc"スクリーン

以下のシステム変数が教示操作盤のユーザメニューに影響します。
 $TP_DEFPROG: STRING
教示操作盤の選択中のプログラムを同定します。教示操作盤のプログラム選択画面からプログラムが選択された時、自動
的に設定されます。
 $TP_INUSER: BOOLEAN

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 58 of 412

教示操作盤からユーザ画面が選択される時にTRUEに設定されます。
 $TP_LCKUSER: BOOLEAN
$TP_DEFPROGのプログラムが実行中で$TP_LCKUSERが真の間、教示操作盤をユーザ画面に固定します。
 $TP_USESTAT: BOOLEAN
このシステム変数がTRUEの間、ウィンドウ"t_st"(TPSTATUS)がユーザ画面にアタッチされるようにします。 "t_st"がア
タッチされている間、"stat"、"motn"、"full"はディタッチされます。 図7.10.1(b)をご覧下さい

図7.10.1(b) $TP_USESTAT=TRUEでの"t_sc" スクリーン

7.10.2 CRT/KBのユーザ画面
CRT/KB上でユーザ画面が選択された時にアクティブになるスクリーンは"c_sc"と呼ばれます。表7.10.2は"c_sc"向けに定義され
たウィンドウの一覧です。
表7.10.2 "c_sc"向けに定義されたウィンドウ
ウィンドウ名 行数 定義済みファイル名 スクロールの有無 行
"c_fu" 17 INPUT及びOUTPUT yes 5-21
"c_pr" 1 CRTPROMPT no 22
"c_st" 3 CRTSTATUS no 2-4
"c_fk" 2 CRTFUNC no 23-24
"err" 1 CRTERROR no 1
"ct01" 1 no 2
"uful" 2 no 3-4
"motn" 1 no 3

デフォルトではユーザ画面は"err"、"ct01"、"uful"、"motn"、"c_fu"、"c_fk"及び"uftn"を"c_sc"スクリーンにアタッチしま
す。"c_fk"ウィンドウはファンクションキーをラベル付けして補助キー及び画面選択キーをF9及びF10に示します。図7.10.2(a)
をご覧下さい。

図7.10.2(a) "c_sc" スクリーン

以下のシステム変数がCRT/KBのユーザメニューに影響します。
 $CRT_DEFPROG: STRING
CRTの選択中のプログラムを同定します。CRTのプログラム選択画面からプログラムが選択された時、自動的に設定され
ます。
 $CRT_INUSER: BOOLEAN
CRTからユーザ画面が選択される時にTRUEに設定されます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 59 of 412

 $CRT_LCKUSER: BOOLEAN
$CRT_DEFPROGのプログラムが実行中で$CRT_LCKUSERが真の間、CRTをユーザ画面に固定します。
 $CRT_USERSTAT: BOOLEAN
このシステム変数がTRUEの間、ウィンドウ"c_st"(CRTSTATUS)がユーザ画面にアタッチされるようにします。 "c_st"がア
タッチされている間、"ct01", "motn", and "uful" はディタッチされます。図7.10.2(b)をご覧下さい。

図7.10.2(b) $CRT_USERSTAT = TRUEでの"c_sc"スクリーン

8 ファイルシステム
8.1 概要
ファイルシステムはCMOS、RAM、FROM、もしくは外部記憶装置
にデータを保存する手段を提供します。データはファイ
ルを表す単位に分けられます。例えばファイルは以下
のものを含みます。
・ KARELプログラムのソースコード
・ コマンド処理のための一連のKCLコマンド
・ プログラムの変数データ
ファイルはファイルの指定子によって識別されます。ファ
イルの指定子は以下の物を含みます。
・ ファイルが格納されているデバイスの名前
・ ファイルの名前
・ ファイルに含まれるデータの種類
KARELのファイルシステムでは様々な記憶装置を利用でき
ます。詳細は8.2.1項を参照して下さい。
8.2 ファイルスペック
ファイルスペックはファイルを同定します。それは以下を
示すものです。
・ ファイルが格納されているデバイスの名前。8.2.1項を参
照して下さい。
・ ファイルの名前。8.2.2項を参照して下さい。
・ ファイルに含まれるデータの種類。8.2.3項を参照して下
さい。
ファイルスペックの一般的な書式は次の通りです。
device_name:file_name.file_type

8.2.1 デバイス名
デバイス名は少なくとも二つの文字からなります。それ
はファイルが格納されているデバイスを示します。デバ
イス名は常にコロン(:)で終わります。以下に有効な記憶
装置の一覧を示します。記憶装置については各アプリ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 60 of 412

ケーションの取扱説明書も参照して下さい。
・ メモリカード(MC:)
Flash ATA メモリカード、またはコンパクトフラッシュにPCMCIAア
ダプタを付けて使用することができます。メモリカード
スロットは、メインボード上にあります。
・ FROMディスク(FR:)
プログラム等のバックアップや、任意のファイルを格納
することができます。バックアップバッテリなしで、電源
断時に情報を保持することができます。
・ RAMディスク(RD:)
プログラム等のバックアップや、任意のファイルを格納
することができます。標準ではDRAM上に配置され、電源
断時に全てのファイルが消去されます。設定によりSRAM
上に配置することができ、この場合は、バックアップ
バッテリにより電源断時に情報を保持することができ
ます。スポットツールでは使用できません。
・ USBメモリ(UD1:)
操作パネル上のUSBポートに装着されたUSBメモリです。
・ USBメモリ(UT1:)
新型iPendantのUSBポートに装着されたUSBメモリです。
UT1:を使用するには、ソフトオプションA05B-2500-J957 iPendant内蔵USB
ポート対応が必要です。
・ メモリ デバイス(MD:)
メモリデバイスは、ロボットプログラムやKARELプログラム
等、制御装置のメモリ上のデータを、ファイルとして扱
うことが出来るデバイスです。詳細については8.5節を
参照して下さい。
・ MDB: (メモリデバイスバックアップ)
メモリデバイスバックアップ(MDB:)を使用してファイル画面
のバックアップと同じファイルをバックアップ可能です。
リモートで制御装置のバックアップが可能です。
・ コンソール(CONS:)
メンテナンス専用のデバイスです。内部情報のログ
ファイルを参照できます。診断とデバッグの目的で使
用されます。記憶装置としては使用されません。
・ MFディスク(MF:)
MFディスクは、FROMディスクとRAMディスクを合成したデバイ
スです。MFディスクのファイル一覧には、FROMディスクと
RAMディスクの両方のファイルが表示され、両方のファ
イルを読み出すことができます。MFディスクにバック
アップを行うと、保存先をFR:にするかRD:にするかの確認
メッセージが表示されます。
・ FTP(C1: ~ C8:)
イーサネットで接続された、PC等のFTPサーバに対して、
ファイルの読み書きを行います。ホスト通信画面でFTPク
ライアントの設定が行われている場合にのみ表示さ
れます。
8.2.2 ファイル名
ファイル名はファイルの識別子です。ファイルの内容を
表現するものにすることができます。
以下の規則がファイル名に適用されます。
・ ファイル名は36文字までです。
・ ファイル名は文字、数字、アンダースコアを含むこと
ができます。
・ ファイル名は次の文字を含むことができません。 .:*;\/”'
・ ファイル名の中に空白を入れることはできません。
・ 他の特殊文字は使用可能ですが注意して下さい。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 61 of 412

・サブディレクトリを使用可能です。 それは「パス」とも
呼ばれます。これは"\"の文字で始まります。 ファイル名
の規則がパスにもあてはまります。 以下にデバイス名
とパスを伴うファイル名の例を示します。
MC:\mypath\myfile.txt

8.2.3 ファイルタイプ
ファイルタイプはファイルの持つデータの種類を示す2文
字、もしくは3文字からなります。ファイルタイプは常にピ
リオド(.)から始まります。表8.2.3は利用可能なファイルタイ
プとその機能の一覧です。アルファベット順です。
表8.2.3ファイルタイプの説明
ファイルタイプ 説明
.BMP ビットマップ(Bit map)のの画像を格納しています。
.CF KCLコマンドファイル 一連のKCLのコマンドを格納しているASCIIファイルです。コマンドの実行
に用います。
.DF デフォルトファイル 教示操作盤のプログラミングに用いるで標準動作文を含むバイナリファイル
です。
.DG 診断ファイル 制御装置の様々な機能に関する状態や診断の情報を含むASCIIファイルです。
.DT KARELデータファイル ユーザに必要とされる任意のデータを含むASCIIもしくはバイナリのファ
イルです。
.IO バイナリファイルです。 I/Oの割付のデータを含みます。I/O画面が表示され、データがセーブされ
た時に生成されます。
.KL KARELソースコードファイル KARELプログラム用のKAREL言語の文を含むASCIIファイルです。
.MN ニーモニック プログラムファイルは以前のバージョンのKARELでサポートされていたファイルで
す。
.ML MLファイル(part model file) はビジョンシステムで使用されるモデルの情報を含んでいます。
.PC PCファイル(KAREL P-code file) はKLファイルをトランスレートした結果生成されたPコードを含
むバイナリファイルです。
.SV SVファイル はバイナリファイルです。ツール、ユーザ座標のデータ(SYSFRAME.SV)、システム
変数(SYSVARS.SV)、マスタリング(SYSMAST.SV)、サーボパラメータ(SYSSERVO.SV)及びマク
ロ(SYSMACRO.SV)のデータを含みます。
.TP TPファイル(Teach pendant program file) はバイナリファイルです。TPプログラムの命令を含みま
す。
.TX TXファイル(Text file) はシステムで定義済みの、もしくはユーザが定義した辞書ファイルです。
.VR VRファイル(Program variable file) はKARELプログラムの変数データを含むバイナリファイルで
す。
.VA VAファイル(ASCII variable file) は変数の一覧を含むファイルです。変数名、タイプ、内容も含ま
れます。
.LS LSファイル(Listing file) はASCII形式のTPプログラム、アラーム履歴等です。

8.3 記憶装置へのアクセス
システムはフォーマットされ、マウントされた記憶装
KAREL
置にのみアクセス可能です。通常マウントは自動的に
行われます。
記憶装置へのアクセスには以下の規則が適用されま
す。
・ デバイスのフォーマット
・ デバイス上に存在するあらゆるデータを削除しま
す。RD2:をフォーマットするなら、RD:からRD7:に存在する全
てのデータもフォーマットされます。
・ デバイスのディレクトリ情報を記録します。
・ KARELシステムに必要な他のデータを記録します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 62 of 412

・ ボリューム名を装置に割り当てます。
デバイスのフォーマットに関するより詳しい情報は、付
録A「KAREL言語アルファベット順解説」を参照して下さい。も
しくは付録C「KCLコマンドアルファベット順解説」のFORMATコマ
ンドを参照して下さい。
8.3.1 概要
以下の種類の記憶装置がプログラムやファイルの格納
に使用可能です。
・ メモリカード(MC:)
・ FROMディスク(FR:)
・ RAMディスク(RD:) (スポットツール+では存在しません)
・ FTP(C1: ~ C8:)
・ メモリデバイス(MD:)
・ メモリデバイスバックアップ(MDB:)
・ MF デバイス(MF:)
・ USBメモリ(UD1:)
・ USBメモリ(教示操作盤) (UT1:) ( iPendantにUSBポートがあり、A05B-2500-J957
iPendant内蔵USBポート対応がインストールされている場合に
限る)
この節では記憶装置に関して記述します。記憶装置の
種類により、以下の事柄が必要になる場合があります。
・ 制御装置上のポートの設定
・ デバイスの制御装置への接続
・ デバイスのフォーマット
メモリカード (MC:)
制御装置はメモリカードをサポートしています。メモリ
カードは8MBもしくはそれ以上の様々なサイズをサポート
しています。適切なアダプタを付けるなら、コンパクトフ
ラッシュカードもサポートされています。制御装置内部
のMAIN CPUボード上にあるインタフェースが必要です。
警告
電源に接続されている時は常に、制御装置中には致死電圧が存在します。 感電には十分注意して下さい。 コン
トローラが電源に接続されているときは、常時コントローラの入力側に高電圧が存在しています。ディスコネク
トまたは回路遮断器をOFF 位置にした場合でも、電源が切れるのは出力側だけです。

警告
メモリカードスロットは制御装置のキャビネットのMain CPUボード上にあります。ブレーカをOFFにした時、
制御装置の内側には電源が供給されています。メモリカードをメモリカードスロットに挿入する前にブレーカを
OFFにして下さい。さもないと負傷する恐れがあります。

注意
制御装置が読み書きしている間、メモリカードを取り除かないで下さい。そうするとカードにダメージを与え、
全ての情報を失う可能性があります。

メモリカードは制御装置でフォーマット可能です。そして
ソフトウェアをインストールするためのデバイスとして使
用可能です。

内部的なファイルデバイス、FR:、RD:、MD:はFlash ATAカードのような外部ファイルデバイスにバックアップ
されるべきです。

USBデバイス(UD1:)及び iPendant上のUSBデバイス (UT1:)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 63 of 412

は、操作パネルにUSBポートを備えており、USBメモリに
R-30iA
よって、ファイルの保存や読込みを行うことができます。
詳細については各アプリケーションの取扱説明書を参
照して下さい。

UTデバイスをiPendantで使用するには、iPendant内蔵USBポート対応オプション(J957) がインストールされて
いる必要があります。


USBメモリ製品の中には、R-30iAが正しく認識できない、あるいは正しくファイル操作を行うことができないも
のがあります。

USBメモリがセキュア機能を持ち、ドライブにアクセスする際にはパスワード認証を必要とするものは使用する
ことができません。

USBの書込み禁止ノッチは機能しない可能性があります。
動作確認済みのUSBメモリは以下の製品です。

バッファロー社 Clip Drive RUF-CL/U2 128MB/256MB/512MB/1GB


アイオーデータ機器社 ToteBag TB-BH 512MB/1GB
SanDisk社 CRUZER Mini、Micro 128MB/256MB

4GB以上のUSBメモリを使用するにはソフト版数がV7.20P/43 V7.30P/31 V7.40P/13 V7.50P/01以降のである必


要があります。ソフト版数がV7.20P/43 V7.30P/31 V7.40P/13 V7.50P/01以降では以下の製品の動作が確認済み
です。

バッファロー社 激速 RUF2 16GB Flash Drive RUF2 4GB フラッシュメモリ RUF 8GB
アイオーデータ機器社 ToteBag TB-BH2 16GB TB-ST 8GB
SanDisk社 Cruzer Contour 16GB ruzer Colors+ 8GB


1 上記のUSBメモリに関しては動作確認は行っておりますが、弊社は市
販されているUSBフラッシュメモリに対してなんらかの保証をするも
のではなく、これら市販品の固体不良、デバイス仕様変更等に伴う動
作不良等に対して一切の責任を負いません。UBSフラッシュメモリ購
入に際しては、お客様にて事前に動作確認されることをお勧めしま
す。
2 USBメモリ製品の中には、ロボット制御装置でフォーマットに失敗す
るものがあります。このような場合にはパソコンにてフォーマットし
て下さい。
3 USBメモリの準備にかかる時間は、USBメモリ製品により異なりま
す。特にUSBメモリがFAT32形式でフォーマットされている場合、準
備に時間がかかることがあります。このような場合、パソコンにて
FAT形式でフォーマットしてご使用下さい。

USBデバイスは制御装置に標準で付いているUSBのインタ
フェースが必要です。
USBメモリは制御装置上でフォーマット可能です。

注意
制御装置が読み書きしている間、取り除かないで下さい。そうするとUSBメモリにダメージを与え、全ての情報
を失う可能性があります。

FROMディスク (FR:)
ディスク記憶装置はFROMメモリの一部で、別の記憶装
FROM
置のように機能します。FROMディスクは(FR:)はバッテリバック
アップ無しで電源断時に情報を保持することができま

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 64 of 412

す。以下の情報をFROMディスクに格納できます。
・ プログラム
・ システム変数
・ ファイルとしてセーブできる任意のデータ
FROMディスクをフォーマットすることができます。FROMディス
クのサイズはソフトウェアのインストール時にシステムに
よって設定されています。
RAMディスク(スポットツールでは存在しません)
RAMディスクはSRAMもしくはDRAMの一部で、別の記憶装置の
ように機能します。RAMディスクには任意のファイルを記
憶できます。RAMディスクのファイルは永久記憶装置にコ
ピーされるべきです。
RAMディスクの場所とサイズはシステム変数$FILE_MAXSECの値
に依存します。$FILE_MAXSECの標準値はインストールされてい
るツールやオプションに依存します。
$FILE_MAXSECの値はRD:用にアロケートされるサイズを512バイト
単位で表しています。例えば、-128という値はRD:用にDRAM上
に64Kがアロケートされていることを意味します。
・ もし$FILE_MAXSEC > 0 ならば、RAMディスクはSRAMのパーマネント
プールに定義されます。RAMディスクがSRAMの一部なの
で、RAMディスクの全てを磁気ディスクに保存して下さ
い。これは永久記憶装置により、システムソフトウェア
のロードもしくはバッテリ切れにより情報が失われる
のを防ぐためです。
SRAMはバッテリでバックアップされている揮発性のメモリ
です。つまり制御装置の電源を再投入してもプログラ
ムを含むSRAMの全ての情報を保持しておくには、バック
アップバッテリが必要です。プログラムを書くと、TPプロ
グラムは自動的にSRAMのTPPプールに格納されます。
注意
SRAM中のデータは次のことにより失われます。それはバッテリの除去、バッテリ切れ、もしくは制御装置への
システムソフトウェアのロードです。データの消失を防ぐために、FR:やFLASH ATAカードのような永久記憶装
置に全てのファイルをバックアップもしくはコピーして下さい。

・ もし $FILE_MAXSEC < 0 ならば、RAMディスクはDRAMに定義されま


す。
DRAMはバッテリバックアップされない揮発性のメモリで
す。これは電源再投入するとDRAMの情報は全て失われ
ることを意味します。 基本的にはDRAMは一時的なデバ
イスです。 制御装置の電源を落とすとDRAM中に格納し
た情報は失われます。
注意
DRAM中のデータは制御装置の電源を落とすか、制御装置が電源供給を失ってしまった場合に失われてしまいま
す。 DRAM中には次の電源投入時まで保存しておきたいものを格納しないで下さい。さもないとそれを失いま
す。


揮発性であるとは電源供給が失われた時にメモリが失われると言うことです。 不揮発性のメモリはデータの保
持にバッテリを必要としません。

ファイルであるものは何でもRAMディスクに保存できます。
ディスクはフォーマット済みです。
RAM
ディスク上の情報は圧縮、非圧縮のどちらにも成り得
RAM
ます。デフォルトでは情報は圧縮されます。もし情報を
非圧縮のままにしたいなら、RDU: デバイスを指定できま

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 65 of 412

す。それにより非圧縮のファイルフォーマットで情報を
セーブすることを示せます。
FTP(C1:~C8:)
イーサネットで接続された、PC等のFTPサーバに対して、
ファイルの読み書きを行います。ホスト通信画面でFTPク
ライアントの設定が行われている場合のみ、ファイル画
面の装置で利用できます。詳細は「FANUC Robot series R-30iA/R-30iA Mate制
御装置 イーサネット機能取扱説明書」(B-82974JA/01)を参照して
下さい。
メモリデバイス(MD:)
メモリデバイスは、ロボットプログラムやKARELプログラム
等、制御装置のメモリ上のデータを、ファイルとして扱う
ことができるデバイスです。制御装置上にあるTPプログラ
ム、KARELプログラム、KAREL変数にアクセスできます。
メモリデバイスはデバイスのグループです (MD:, MDB:)。以下
のデバイスを提供します。
・ MD: ASCIIとバイナリのユーザ設定及びプログラムへのア
クセスを提供します。
・ MDB: ユーザ設定とプログラムのバイナリバージョンへの
アクセスを提供します。(ファイル画面のバックアップの
「全て保存」に似ています
メモリデバイスバックアップ(MDB:)
)

メモリデバイスバックアップでファイル画面のバックアッ
プ機能と同様のファイルをコピー可能です。このデバイ
スによりSMON,FTP,KCL等からリモートでバックアップすることが
可能です。例えば、MDB:デバイスから全てのTPプログラム
ファイルをメモリカードにコピーできるでしょう(KCL>copy MDB:*.tp TO
mc:)。
MFデバイス(MF:)
MF:は複数のデバイスが合成されたデバイスです。指定さ
れたファイルをRAMディスク(RD:)、FROMディスク(FR:)をこの順に探
します。MF:は指定したファイルが格納されているデバイ
スを知っている必要がありません。例えば"DIR MF:file.ext"を実
行すると、まずRD:からそのファイルがサーチされます。見
つからない場合、FR:上をサーチします。 また"COPY MC:file.ext to
MF"はRD:上にファイルを置きます。
ファイルがMF:デバイスにコピーされる時、RD:がSRAM($FILE_MAXSEC>0)
であれば、RD:がデフォルトで使用されます。もしRD:がDRAM
($FILE_MAXSEC<0)であれば、FROMディスクがデフォルトで使用され
ます。

MF:にファイルをバックアップする時、FR:とRD:のどちらを使うか選択を促されます。 ファイルは選択したデ
バイスにコピーされます。RDがDRAMにあっても同様です。

FRA:
制御装置のFROMには自動バックアップ機能のための特殊
な領域があります。自動バックアップ機能の使用には外
部装置は不要ですが、メモリカードを使用することもでき
ます。詳細は各アプリケーションの取扱説明書を参照し
て下さい。
8.3.2 メモリファイルディスク
RAMディスク及びFROMディスクにブロックを使ってファイル用
の領域を確保します。それぞれのブロックは512バイトで
す。
システム変数$FILE_MAXSECがRAMディスク上にアロケートするブ
ロックの数を指定します。0未満が指定されると、RAMディ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 66 of 412

スクはDRAMからアロケートされます。0より大きい場合、RAM
ディスクはSRAMからアロケートされます。RAMディスクに使用
するブロックの数を変更するにはKCLから以下の手順を
行って下さい。
1. RAMディスク上の全てのファイルをバックアップします。
ファイルのバックアップ方法に関する詳細は、各アプリ
ケーションの取扱説明書を参照して下さい。
2. DISMOUNT RD: を入力して下さい。

KCL>DISMOUNT RD:

3. を入力して下さい。
SET VAR $FILE_MAXSEC

KCL>SET VAR $FILE_MAXSEC = <new value>

4. FORMAT RD: を入力して下さい。


KCL>FORMAT RD:

フォーマットが行われると、RAMディスク上の全てのファ
イルが削除されます。
5. MOUNT RD: を入力して下さい。

KCL>MOUNT RD:

イニシャルスタートでRAMディスクは自動的に再フォーマッ
トされます。
FROMディスクはブートでのみフォーマット可能です。なぜな
らシステムソフトウェアもまたFROMに存在するからです。使
用可能なブロックはシステムによって設定されます。
メモリに関するより詳細な情報に関しては、 1.4.1項を参照
して下さい。
8.4 パイプファイル
PIP:デバイスを使って何個でもパイプファイルにアクセスで
きます。このアクセスは制御装置のメモリ上にあるファイ
ルへのアクセスのため、非常に効率的です。ファイルの
サイズと数は制御装置で利用できるメモリにより制限さ
れます。このためパイプファイルの最善の使用方法は
データのバッファリング、つまり一時的なデータの保存
です。
このファイルは水道管に似ています。データを書き込む
タスクにより片方のパイプの端からデータが注がれ、も
う片方の端へ流れて行き、データを読むタスクに入って
いく点でです。これがパイプという用語が用いられてい
る理由です。概念的には多くのパソコンのOSで実装され
ているパイプに非常に似ています。
PIP:デバイス上のファイルは限られたサイズしか持ちませ
んが、データはリングバッファ上に配置されます。8kバイ
トのパイプ(デフォルトのサイズです)はパイプに書かれた
最後の8kバイトのデータを含んでいます。ユーザが9kバイ
ト目のデータをパイプに書くと、最初の1kバイトが上書さ
れます。
パイプはデータをある場所から別の場所に転送するた

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 67 of 412

めに実際に使用されるものなので、何らかのアプリケー
ションがデータをパイプから読んでいると考えられます。
リードのモードには二つあります。
デフォルトのリードモードは「スナップショット」(snapshot)と呼ば
れるものです。これは現在のパイプの内容を読むモード
です。現在の内容が読まれると、リードする処理はend of file
を受け取ります(読み切った状態でREADしても書込みを待
ちません)。これはフライトレコーダのようなアプリケー
ションに適用可能です。特定の(エラー発生のような)イベ
ント発生に先立って情報を記録しておき、その後パイプ
に書かれた最後のセットのデバッグ情報を回収する事
ができます。スナップショットモードはリードの属性です。
SET_FILE_ATTRビルトインを用いて設定されます。デフォルトで
はリードはスナップショットモードです。
もう一方のモードではデータを読む処理は情報が書か
れるまでは待たされます。データがパイプ中で入手可能
になると、readが完了します。KARELのアプリケーションは
BYTES_AHEADを用いるかもしれません。パイプにreadできるデー
タの量を問い合わせるためです。これはデフォルトの
モードではありません。
典型的なパイプのアプリケーションにはパイプにデータ
を書くプロセスが有ります。そのデータはデバッグ情報、
何らかの処理のパラメータ、ロボットの位置等に成り得
ます。そのデータは別のアプリケーションにより読み出
し可能です。 読み出すアプリケーションはパイプから出
てくるデータを解析するKARELプログラム、KCL, 読み出した
データをアスキーでユーザに表示するweb serverかもしれませ
ん。
KARELでの使用
KARELでのパイプの使用に関して以下のことが言えます。
・ 二つのKARELのタスクがパイプを通してデータを共有し
ています。一つのKARELのタスクはデータをパイプに書く
一方、もう片方のタスクはパイプからデータを読みま
す。この場合はファイル属性ATR_PIPWAITをパイプからデー
タを読むタスクで使用できます。 この場合にはデータ
を読むタスクが、書くタスクのデータ書込みの終了を
待ちます。 デフォルトのパイプの操作ではパイプから
読み出すデータが無い場合にはend of fileを返します。
・ KARELアプリケーションはコンディションハンドラを非常に
高速に利用しているかもしれません。この場合にはコ
ンディションハンドラのルーチンが教示操作盤の画面
にデータを書き出すのは現実的では無いかもしれま
せん。何故ならそれはコンディションハンドラのパ
フォーマンスを阻害するからです。その場合にはデー
タをPIP:にコンディションハンドラのルーチンから書くこと
ができます。別のKARELタスクがPIP:からデータを読み、教
示操作盤に表示できるかもしれません。この場合には
教示操作盤の表示は厳密にはリアルタイムではあり
ません。PIP:デバイスはこの場合バッファのように機能し
ています。その結果コンディションハンドラは表示の完
了を待つ事無く本来の機能を進めることができます。
アプリケーションが書き込んでいる時にKCLからTYPEコマ
ンドを実行する事もできます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 68 of 412

は他のデバイスと以下の点で類似しています。
PIP:

・ パイプデバイスは幾つかの点でRD:デバイスに似てい
ます。RD:デバイスもまたファイルの内容をシステムのメ
モリ上に置きます。PIPデバイスは第一にreadとwriteで同時に
openできる点が異なります。
・ MC:やFR:デバイスと同様、PIP:デバイスはリアルタイムのソ
フトウェアをデバッグしたり診断したりする時に使用で
きます。パイプを利用すると書込み作業を阻害する事
無くデバッグ情報を見ることができます。あるタスクが
情報を書き、別のタスクがそれを読む事も可能にして
います。
・ PIP:デバイスの機能は制御装置上の他の全デバイスに
似ています。これはこのデバイスが全ての入出力操
作をサポートしている事を意味します。Chdir, mkdir, rmdirを除
き、全ての入出力機能が同様に機能します。
・ PIP:デバイスはメモリカードに直接書き込むのに似てい
ます。しかしながら、メモリカードへの書込みは書き込
むタスクの処理を遅らせますが、PIP:デバイスへの書込
みでの遅れはずっと小さいです。電源を再投入しても
データを保持する能力も持っています。
PIP:デバイスに関する規則
デバイスには以下の規則が適用されます。
PIP:

・ PIP:デバイスは設定変更可能なデバイスです。メモリの
使用量、メモリをCMOS(電源断で内容を保持)、DRAM(保持し
ない)のいずれにするかを設定できます。データの
フォーマットを指定してASCIIのデータを読み出すことも可
能です。設定はPIPE_CONFIGビルトインで行います。
インストール、設定、操作手順
一般的に言えば、PIP:デバイスは他のデバイスと同様に
操作します。 典型的な操作手順は以下の処理を含み
ます。
OPEN myfile ('PIP:/myfile.dat', 'RW',)
Write myfile ('Data that I am logging', CR)
Close myfile

デバイス上のファイルも設定が可能です。デフォルト
PIP:
では、パイプの設定は$PIPE_CONFIGに指定されています。 表8.4
「システム変数のメンバの解説」に列挙されたフィールド
は以下の意味を持ちます。
表8.4ファイルタイプの説明
メンバ デフォルト 定義
$sectors 8 パイプ中の1024バイトのセクションの数
$filedata 実際のパイプのデータへのポインタ(アクセス不可)
$recordsize 0 バイナリのレコードのサイズ。0ならばASCIIです。
$auxword 0 内部的に使用しています。
$memtyp 0 0以外はCMOSを使用します。
$format Undefined 内部的に使用しています。変更しないで下さい。
$formatter 内部的に使用しています。変更しないで下さい。

それぞれのパイプファイルをPIPE CONFIGビルトインで設定で

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 69 of 412

きます。 pipe_configビルトインはパイプファイルを書込みの為
にopenする前に呼び出します。PIPE_CONFIGビルトインの詳細は
付録Aを参照して下さい。

以下の例はあるKARELのルーチンからデータをパイプに書
き、別のルーチンで読み戻します。 これらのルーチンは
別々のタスクから呼び出すことが可能です。その結果一
つのタスクがデータを書き、別のタスクがデータを読む
ようにできます。
PROGRAM pipuform
%NOLOCKGROUP
VAR
pipe, in_file, mcfile, console:FILE
record: STRING[80]
STATUS: INTEGER
parm1, parm2: INTEGER
msg: STRING[127]
cmos_flag: BOOLEAN
n_sectors: INTEGER
record_size: INTEGER
form_dict: STRING[4]
form_ele: INTEGER
--
--ファイルの属性を初期化する
ROUTINE file_init (att_file :FILE)
BEGIN
SET_FILE_ATR(att_file, ATR_IA)
SET_FILE_ATR(att_file, ATR_FIELD)
SET_FILE_ATR(att_file, ATR_PASSALL)
SET_FILE_ATR(att_file, ATR_UF)
END file_init

ROUTINE write_pipe
BEGIN
--ファイルをオープンします
file_init (pipe)
OPEN FILE pipe ('rw', 'pip:example.dat')
STATUS = IO_STATUS(pipe)
WRITE console ('Open pipe status:',STATUS,CR)
-- write extra parameters to pipe
WRITE pipe (msg::8)
STATUS = IO_STATUS(pipe)
END write_pipe

ROUTINE read_pipe
VAR
record: STRING[128]
STATUS: INTEGER
entry: INTEGER
num_bytes: INTEGER
BEGIN
file_init (in_file)
OPEN FILE in_file ('ro', 'pip:example.dat')
BYTES_AHEAD(in_file, entry, STATUS)
STATUS = 0
READ in_file (parm1::4)
STATUS = IO_STATUS(in_file)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 70 of 412

WRITE console ('parm1 read',STATUS,CR)


-- ROBOGUIDEの場合
-- Param1は1835104325のはずです。それは16進数で0x6D617845です。
-- E x a m p l e (空白)
-- 45 78 61 6D 70 6C 65 20 -- 下段は16進数
-- Param1はExamにあたる4バイトをINTEGERとして読んでいます。
-- PC上(Little Endian)では0x6D617845になります。

-- 実機の場合
-- Param1は1165517165のはずです。それは16進数で0x4578616Dです。
WRITE console ('parm1',parm1,CR)
READ in_file (parm2::4)
-- ROBOGUIDEの場合
-- Param2は543517808のはずです。それは16進数で0x20656C70です。
-- Param1同様に'ple 'にあたる4バイトをINTEGERとして読んでいます。
-- PC上(Little Endian)では0x20656C70)です。

-- 実機の場合1886151968のはずです。それは16進数で0x706C6520です。
STATUS = IO_STATUS(in_file)
WRITE console ('parm2 read',parm2,STATUS,CR)
END read_pipe

BEGIN
SET_FILE_ATR(console, ATR_IA, 0) --ATR_IAはFLBT.KEに定義済み
OPEN FILE console ('RW','CONS:')
IF(UNINIT(msg)) THEN
msg = 'Example'
ENDIF
IF(UNINIT(n_sectors)) THEN
cmos_flag = TRUE
n_sectors = 16
record_size = 128
form_dict = 'test'
form_ele = 1
ENDIF
-- [in] pipe_name: STRING;
-- [in] cmos_flag: boolean;
-- [in] n_sectors: integer;
-- [in] record_size: integer;
-- [in] form_dict: string;
-- [in] form_ele: integer;
-- [out] status: INTEGER
PIPE_CONFIG('pip:example.dat',cmos_flag, n_sectors,
record_size,form_dict,form_ele,STATUS)
write_pipe
read_pipe
CLOSE FILE pipe
CLOSE FILE in_file
END pipuform

8.5 メモリデバイス
メモリデバイス(MD: )はプログラムや変数のメモリをファイ
ル装置であるかのように扱います。TPプログラム、KARELプ
ログラム、プログラムの変数、システム変数、アラーム
履歴がそれぞれファイルのように扱われます。このこと
により、通常のファイルデバイスと同様、通信装置に拡
張機能が提供されます。例えば以下の通りです。
1. FTPでMD: デバイスにPCファイルをコピーすれば、それを

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 71 of 412

ロードできます。
2. MD: デバイスからアラーム履歴を回収して解析すること
ができます。
3. TPプログラムのASCII形式のファイルをMD: から***. LSをコピー
することで取得できます。
4. SYSVARS.VAをMD: からコピーすることで、SYSVARS.SVに含まれる可
視のシステム変数をテキストファイルで見ることが出
来ます。
MD:デバイスで手に入るLSファイルと診断ファイルについて
は表8.5 (a)を参照して下さい。
表8.5(a) MD:デバイスのファイル一覧
ファイル名 説明
ACCNTG.DG OSのタスクの実行状況を示すファイル
AXIS.DG 軸とサーボの情報を示すファイル
CONSLOG.DG 試験端末のログのASCIIファイル
CONSTAIL.DG 試験端末のログのASCIIファイルの最後の部分
CURPOS.DG ロボットの現在位置を示すファイル
*.DF プログラム編集画面の標準動作文や標準命令のデータ
DIOCFGSV.IO I/O割付情報をバイナリデータで持っているファイル
DIOCFGSV.VA DIOCFGSV.IOのASCIIファイル
ERRACT.LS 発生中アラームのASCIIファイル
ERRALL.LS アラーム履歴のASCIIファイル
ERRAPP.LS アプリケーションエラーのASCIIファイル
ERRCOMM .LS 通信エラーを示すファイル
ERRCURR.LS システムの構成を示すファイル
ERRHIST.LS システムの構成を示すファイル
ERRMOT.LS 動作関連エラーのASCIIファイル
ERRPWD.LS パスワード機能関連エラーのASCIIファイル
ERRSYS.LS システムエラーのASCIIファイル
ETHERNET.DG Ethernetの構成を示すファイル
FRAME.DG 座標系の情報を示すファイル
FRAMEVAR.SV ユーザ座標系やツール座標系の情報を持つバイナリファイル
FRAMEVAR.VA FRAMEVAR.SV相当のASCIIファイル
HIST.LS レジスタダンプの履歴を示す。
IOCONFIG.DG このファイルはI/Oの構成と割付を示します。
IOSTATE.DG I/Oの状態の一覧のASCIIファイル。
IOSTATUS.CM I/Oを回復するために用いられるコマンドファイル
NUMREG.VA NUMREG.VRのASCIIファイル
NUMREG.VR (数値)レジスタを含むファイル
MACRO.DG マクロの割付を示すファイル
MEMORY.DG 現在のメモリの使用状況を示すファイル
PORT.DG シリアルポートの構成を示すファイル
POSREG.VA POSREG.VRのアスキーファイル
POSREG.VR 位置レジスタの情報を含むファイル
PRGSTATE.DG プログラムの状態一覧のASCIIファイル
RIPELOG.DG ロボットがオンライン、オフラインになった時間、その他の診断データ等の詳細情報を
含むファイル
RIPESTAT.DG ネットワークがどの程度うまく機能しているか決定するためのパフォーマンスのデータ
を含むファイル

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 72 of 412

SFTYSIG.DG 安全信号の状態の一覧を示すファイル
SUMMARY.DG 診断の要約
SYCLDINT.VA コールドスタートで初期化されたシステム変数の一覧を示すASCIIファイル
SYMOTN.VA モーション関連のシステム変数の一覧を示すASCIIファイル
SYNOSAVE.VA 保存されないシステム変数の一覧のASCIIファイル
SYSFRAME.SV このファイルは$MNUTOOL, $MNUFRAME, $MNUTOOLNUM、$MNUFRAMENUMを
含む。これらは7DA1系列以前ではSYSVARS.SVにあった。
SYSMACRO.SV マクロの定義のファイル
SYSMACRO.VA SYSMACRO.SVのASCIIファイル
SYSMAST.SV マスタリング情報のファイル
SYSMAST.VA SYSMAST.SVのASCIIファイル
SYSSERVO.SV サーボパラメータのファイル
SYSSERVO.VA SYSSERVO.SVのASCIIファイル
SYSTEM.VA このファイルはモーション関連以外のシステム変数の一覧のASCIIファイル
SYSVARS.SV 大部分のシステム変数を含むファイル
SYSVARS.VA SYSVARS.SVのASCIIファイル
SYS****.SV アプリケーションに特有のシステム変数を含む
SYS****.VA SYS****.VAのASCIIファイル
TASKLIST.DG システムタスクの情報を示すファイル
TESTRUN.DG テスト実行の状態を示すファイル
TIMERS.DG システムタイマ及びプログラムタイマを示すファイル
TPACCN.DG 画面表示に関する情報を示すファイル
VERSION.DG システム、ソフトウェア、サーボのバージョン情報を示すファイル
***.PC KARELのバイナリのプログラム
***.VA KAREL変数一覧のASCIIファイル
***.VR KAREL変数をバイナリで含んでいるファイル
***.LS TPプログラムのASCII listingファイル
***.TP TPプログラムのバイナリファイル
***.TX 辞書ファイル
***.HTM HTMLのWeb pageのファイル
***.STM iPendantコントロールやサーバサイドインクルードを使っているHTMLのWeb page
***.GIF GIF画像ファイル
***.JPG JPEGの画像ファイル

デバイスを使用する時の制限の一覧に関しては 表8.5 (b)


MD:
を参照して下さい。
表8.5(b) MD:デバイス使用上の制限
ファイル名もしくは コメント
READ WRITE DELETE
ファイルタイプ
***.DG 診断のテキストファイ
YES NO NO

***.PC NO YES YES
***.VR 参照がない場合に限り
YES YES YES
ます
***.LS YES NO NO
***.TP YES YES YES
***.LS YES NO NO
SYS***.SV 書込みはコントロール
YES YES NO
スタートのみ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 73 of 412

SYS***.VA YES NO NO
ERR***.LS YES NO NO
HISTX.LS YES NO NO
***REG.VR YES YES NO
***REG.VA YES NO NO
DIOCFGSV.IO 書込みはコントロール
YES YES NO
スタートのみ
DIOCFGSV.VA YES NO NO

9 辞書とフォーム
9.1 概要
辞書とフォームは教示操作盤もしくはCRT/KB上に操作者向けのインタフェースをKARELプログラムで作成するために用いら
れます。
この章は以下の事を説明します。
 ユーザ辞書ファイルの作成 (9.2節)
 フォームの作成と使用 (9.3節)
どちらの場合でも、テキストと画面のフォーマットはKARELプログラムの外部にあります。このことによりKARELプログラム
本体を修正せずに容易に画面の修正が可能です。

9.2 ユーザ辞書の作成
辞書ファイルを使用すると表示テキストをカスタマイズすることができます。例えばテキストの属性 (反転表示等)、テキスト
の画面上の位置指定が可能です。カスタマイズの際、プログラム自体を修正する必要がありません。
以下に辞書を使用するための手順を示します。

注意
基本的にROBOGUIDEを用いて辞書ファイルを作成して下さい。付録F「ROBOGUIDEを用いたトランスレート」を
参照下さい。

以下のようにKCLを使用することも可能です。
1 フォーマットに沿ってASCIIテキストの辞書ファイルを作成します。拡張子はUTXです
2 辞書をKCLのCOMPRESS DICTコマンドで圧縮します。この作業によりTXの拡張子を持つロード可能な辞書ファイルを作
成します。圧縮したならば、UTXファイルは削除可能です。圧縮した辞書ファイル(.TX)のみがロードされます。
3 KCL LOAD DICTコマンドもしくはKARELのADD_DICTビルトインで圧縮した辞書をロードします。
4 辞書のテキストを表示するためにKARELの辞書関連のビルトインを使います。詳細については9.2.12項を参照して下さ
い。

違うロボットで同じプログラムを実行するが、表示するテキストがロボットによって僅かに異なるとします。このような時に
辞書は役に立ちます。一つのロボットのみでプログラムを実行するならWRITE文でも良いでしょう。しかし辞書ファイルを使
うことにより、多くのロボットでのテキスト表示が単純化されます。複数の辞書を作成し、同じプログラムを使って表示させ
ればよいのです。


辞書ファイルは複数言語をサポートするプログラムで有用です。

9.2.1 辞書の構文
ユーザ辞書の構文は一つもしくは複数の辞書要素からなります。辞書要素は以下の特徴を持ちます。
 辞書要素に複数行の情報を含めることができます。画面全体の情報を持たせることも可能です。ユーザ辞書は以下の構文

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 74 of 412

を持ちます。

<*comment>
$n<,ele_name><@cursor_pos><&res_word><#chr_code><"Ele_text"><&res_wor d>
<#chr_code><+nest_ele>
<*comment>
<$n+1>


 ブラケット<>内の項目はオプションです。
 *comment は*から始まる任意の項目です。行末までの全てのテキストが無視されます。9.2.9項を参照して下さい。
$nは辞書要素番号を指定します。nは0以上の整数値です。9.2.2項を参照して下さい。
 ,ele_nameはコンマの後に辞書要素名を指定します。9.2.3項を参照して下さい。
 @cursor_posはカーソルの位置を指定します。二つの整数値をコンマで区切って指定します。カーソルの位置は@1,1か
ら始まります。9.2.4項を参照して下さい。
 &res_wordは 予約語を指定します。9.2.6項を参照して下さい。
 "Ele_text" は表示されるテキストを指定します。9.2.5項を参照して下さい。
 +nest_ele はネストした辞書要素を指定します。9.2.8項を参照して下さい。
 辞書要素は全てを一行に詰め込む必要はありません。空白が許されている任意の場所に改行を挿入することができます。
但し引用符で囲まれたテキストを除きます。引用符で囲まれたテキストは同じ行で始まり、終わる必要があります。
 辞書要素はテキスト、位置、そして表示属性の情報を含むことができます。表9.2.6「予約語」に辞書要素の属性一覧があ
ります。

9.2.2 辞書要素番号
辞書要素番号は辞書要素を同定するものです。辞書要素は”$”で始まり、辞書要素番号がそれに続きます。要素番号は以下の特
徴を持ちます。
 要素番号は0から始まり、連続的して順番に続きます。
 もし要素番号が飛ばされた場合、辞書圧縮ソフトは飛ばした番号毎に5バイトの余分なデータを加えます。それ故に多くの
番号を飛ばすべきではありません。
 もし辞書圧縮ソフトに自動的に辞書要素番号を連続的に生成させたいならば、”-“を番号の代わりに使って下さい。以下の
例では”-“が辞書要素番号7に相当します。
$1
$2
$3
$6
$-

9.2.3 辞書要素名
各辞書要素にオプションとして辞書要素名をつけることが可能です。この名称と辞書要素番号はコンマ及び0個以上の空白で区
切られています。辞書要素名は大文字と小文字を区別します。辞書要素名の最初の12文字だけが認識されます。
以下に辞書要素名の例を示します。
$1, KCMN_SH_LANG
$2, KCMN_SH_DICT

辞書要素は他の辞書要素を参照することができます。その際、要素番号の代わりに要素名で参照可能です。それに加え、辞書
要素名をKARELのCONSTとして定義したファイルを生成し、KARELプログラムでインクルードファイルとして使用可能で
す。

9.2.4 辞書のカーソル位置指定
辞書要素は指定されたウィンドウに現在のカーソル位置から表示されます。多くの場合、カーソルを特定の位置に移動し、辞
書要素の表示を開始します。
 カーソル位置属性"@"は画面上のカーソルをウィンドウ内部で移動するために用いられます。
 "@"記号にコンマで区切られた二つの数値が続きます。最初の数値がウィンドウ中での行、2番目の数値が列を示します。
例えば教示操作盤上では t_fuウィンドウはt_scスクリーンの5行目から始まります。10行で40列あります。
 カーソル位置"@1,1"はt_fuウィンドウの左上隅を指します。それはt_scスクリーンの5行目、1列目に相当します。
 右下の位置は"@10,40"です。それは"t_sc"スクリーンの15行目、40列目に相当します。
教示操作盤上のスクリーンとウィンドウに関しては7.10.1項を参照して下さい。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 75 of 412

例えばCRT/KB上では、"c_fu"ウィンドウは"c_sc"スクリーンの5行目から始まります。17行、80列あります。

 カーソル位置"@1,1"はc_fuウィンドウの左上隅を指します。それはc_scスクリーンの5行目、1列目に位置します。
 そのウィンドウの右下の位置は"@17,80"です。それは"c_sc"スクリーンの21行目、80列目に相当します。
CRT/KB上のスクリーンとウィンドウに関しては、7.10.2項を参照して下さい。
ウィンドウのサイズは辞書要素の表示の限界を決めます。

9.2.5 辞書要素のテキスト
要素テキスト、つまり引用符で囲まれたテキストは画面上に表示したい情報(テキスト)のことです。

 要素テキストは二重引用符で囲む必要があります。
 バックスラッシュを挿入するには\\ (二重のバックスラッシュ)を使って下さい。
 テキスト中に二重引用符を挿入するには\" (バックスラッシュ、二重引用符)を使って下さい。
 一つの辞書要素中に、予約語で区切られた一つ以上の要素テキストの文字列が存在できます。より詳しくは9.2.6項を参照
して下さい。
 KAREL変数の値を要素テキストに含めるにはKARELビルトインを使って下さい。WRITE_DICT_V 及び READ_DICT_Vで
変数の値を渡すことができます。
 KAREL変数の値を挿入する場所を指定するには テキスト中にフォーマット指定子を使って下さい。
 フォーマット指定子は%の次にオプションのフィールドと変換文字が続くものです。フォーマット指定子は以下の構文を
持ちます。
%<-><+><width><.precision>conversion_character<^argument_numbe r>

フォーマット指定子

 ブラケット<>内の項目はオプションです。
 "-"は表示値の左揃えを意味します
 "+"は引数が数値である場合、常に符号を表示することを意味します。
 widthフィールドはそのフィールドが占める最小の文字数を指定します。
 .precisionはピリオド" ." に数値が続くものです。それは変換文字に応じた意味を持ちます。
 conversion_characters は渡される引数のデータ型を識別します。表9.2.5が一覧です。
 ^argument_number は ^ (上向きキャレット)に数値が続きます。
変換文字
変換文字(conversion_character)は渡されたKAREL変数のデータ型を同定します。表9.2.5が変換文字の一覧です。

表9.2.5 変換文字
文字 引数の型:表記
d 整数値;10進数
o 整数値; 符号無し8進数(先行の0無し)
x, X 整数値;符号無し16進数(先行の0xもしくは0X無し).10から15をabcdefあるいはABCDEFで表す
u 整数値;符号無し10進数
s 文字列;文字列の終了もしくは精度として与えられた文字数まで文字列より文字を印字
実数値; < - > mmm.ddddのフォーマットで10進表記。dの数は精度で与えられる。標準値は6。0を指定
f
すると小数点の表示を抑制する。
実数値; < - > mmm.ddddのフォーマットで10進表記。dの数は精度で与えられる。標準値は6。0を指定
e, E
すると小数点の表示を抑制する。
実数値;指数部が-4以下か精度より大きいか等しい時には%e or %Eが用いられる。そうでなければ%fを
g, G
用いる。語尾の0及び小数点は印字されない。
% 引数は変換されない。%を印字。

 d, o, x, X, uは INTEGER,SHORT, BYTE及びBOOLEAN型と共に利用できます。BOOLEAN型の場合はFALSEを0,TRUEを1と
表示します。

 f, e, E, g, GはREAL型と共に利用できます。
 s はSTRING型と利用できます。

注意
渡される引数と変換文字の対応が正しいかよく確認して下さい。変換文字が引数の型と一致しない場合、予測し
ない結果が発生し得ます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 76 of 412

幅と精度
オプションのフィールドwidthは表示された変数が占める最小文字数を固定するために用います。これは数値の列を複数表示す
る際に有用です。
最大値より大きなwidthを設定すれば数値が揃って表示されます。
 もし表示された数が指定幅より少ない文字数の場合には左("-"が使われていれば右)に空白が詰められます。
 幅の指定が0から始まる場合、空白の代わりに0が挿入されます。
精度は指定した変換文字に応じて以下の意味を持ちます。
 d , o , x , X, u -印字する最小の幅です。表示された整数値が精度より小さい場合、先行する0が詰められます。 これは幅に
先行する0を使用した場合と同じです。
 s - 印字する最大の文字数となります。文字列が精度より長い場合には、残りの文字列は無視されます。
 f , e, E - 小数点の後に印字される桁数です。
 g 及び G - 有効数字の数です。
引数の順番
一つのテキスト文字列の要素に一つ以上のフォーマット指定子を入れることが可能です。最初のフォーマット指定子が最初の
引数に適用され、二つ目の指定子が二つ目の引数に適用されます。それ以降も同じです。場合によっては、フォーマット指定
子をその順番と異なるように適用する必要があるかもしれません。その状況は次のような場合に発生しえます。ある言語向け
にプログラムを開発し、それを別の言語の辞書に翻訳する場合です。
フォーマット指定子の順番を割り当て直すには、変換文字に”^”と引数の番号を続けます。 以下に例を示します。

$20, file_message "File %s^2 on device %s^1 not found" &new_line

2つ目の引数を最初のフォーマット指定子に用い、最初の引き数を2つ目の指定子に用いることを意味しています。

注意
SHORTとBYTE型の引数の割り当てを変更することはできません。これらの引数は他のデータ型とは異なる方法
で渡されるからです。SHORT, BYTE型の引数の割り当て変更は予期しない結果を引き起こす可能性がありま
す。

9.2.6 辞書の予約語
予約語は&から始まります。予約語は画面表示を制御するために用いられます。予約語はテキストがどのように表示される
か、もしくはどこに表示されるかに影響します。予約語を用いることで制御情報を辞書自体に簡単に記述できます。表9.2.6が
利用可能な予約語の一覧です。

表9.2.6予約語
予約語 機能
&bg_black 背景色黒
&bg_blue 背景色青
&bg_cyan 背景色シアン
&bg_dflt 背景色をデフォルトにする
&bg_green 背景色緑
&bg_magenta 背景色マゼンタ
&bg_red 背景色赤
&bg_white 背景色白
&bg_yellow 背景色黄色
&fg_black 前景色黒
&fg_blue 前景色青
&fg_cyan 前景色シアン
&fg_dflt 前景色をデフォルトにする
&fg_green 前景色緑
&fg_magenta 前景色マゼンタ
&fg_red 前景色赤
&fg_white 前景色白
&fg_yellow 前景色黄色
&clear_win ウィンドウクリア (#128)
&clear_2_eol 行末までクリア(#129)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 77 of 412

&clear_2_eow ウィンドウの最後までクリア(#130)
$cr 復帰(Carriage return) (#132)
$lf 改行/複行(Line feed) (#133)
&new_line 改行 (#135)
&bs バックスペース (#136)
&home ウィンドウのホームカーソル位置(#137)
&reverse 反転表示属性 (#139)
&standard 全属性を標準とする(#143)

9.2.7 文字コード
#の後に0から255の数値を続けると文字コードとなります。これはキーボード上で表現されていないが、特殊な印刷可能文字を
辞書に挿入する方法を提供します。ASCII文字コードについては付録Dを参照して下さい。

9.2.8 辞書要素のネスト
“+”属性を用いると辞書要素中で同じ辞書の別の辞書要素を参照できます。最大5レベルまで参照可能です。このネストされた
辞書要素は辞書要素名もしくは辞書要素番号で参照され、現在の辞書要素の前でも後ろでも使用可能です。ネストされた辞書
要素が表示された時、全ての要素がネストされた順に応じて、一つの辞書要素であるかのように表示されます。

9.2.9 辞書のコメント
アスタリスク(*)は行末までの全てのテキストがコメントであることを示します。全てのコメントは辞書を圧縮する際無視され
ます。コメントは、要素テキスト中を除く、空白を挿入可能な全ての場所に置くことが可能です。

9.2.10 KAREL定数ファイルの生成
辞書要素名と辞書要素番号の対応を記述したKARELプログラムのインクルードファイルを生成できます。 そのインクルード
ファイルはCONST宣言を持ち、名前をつけられた辞書要素のそれぞれに定数の宣言があります。

element_name = element_number

KARELプログラムでこのファイルをインクルードし、辞書要素を番号の代わりに名称で参照することができます。
KAREL インクルードファイルを生成するには、辞書の最初の行に”.kl”を指定して下さい。その後ろにファイル名を続けて下さ
い。KAREL インクルードファイルは辞書の圧縮時に自動的に生成されます。
以下の例は辞書の圧縮時にkcmn.klを生成します。

.kl kcmn
$-, move_home, "press HOME to move home"

生成されたkcmn.klは以下のようなファイルです。
-- WARNING: This include file generated by dictionary compressor.
--
-- Include File: kcmn.kl
-- Dictionary file: apkcmneg.utx
--CONST
move_home = 0


辞書要素番号を振り直すような辞書の変更をした場合、KARELプログラムを再度トランスレートする必要があ
ります。適切な辞書要素番号が使われることを保証するためです。

9.2.11 辞書の圧縮と制御装置へのロード

注意
基本的にROBOGUIDEを用いて辞書ファイルを圧縮して下さい。付録F「ROBOGUIDEを用いたトランスレート」を
参照下さい。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 78 of 412

以下、KCLでの圧縮について示します。

テキストエディタでユーザ辞書の編集を終了したらKCLのコマンドプロンプトで辞書を圧縮します。

KCL> COMPRESS DICT filename

拡張子.UTXをファイル名に含めないで下さい。圧縮ソフトがエラーを検出すると違反のある単語を指摘します。その際何が問
題か簡潔な説明が付いています。継続する前にユーザ辞書を編集し、問題を修正して下さい。
ロード可能な辞書ファイルが生成されます。同じファイル名で拡張子が.TXのファイルです。. klのシンボルを利用したなら、
KAREL インクルードファイルも生成されます。図9.2.11は圧縮過程を図示しています。

図9.2.11辞書圧縮ソフト及びユーザ辞書

KARELプログラムが辞書を使う前に、辞書を制御装置にロードする必要があります。辞書名は1文字から4文字の単語で、ロー
ド時に辞書に割り当てられます。辞書をロードするためにKCL LOAD DICTコマンドを使用して下さい。

KCL> LOAD DICT filename dictname <lang_name>

オプションのlang_nameは複数の辞書を同じ辞書名でロードすることを可能とします。プログラムによって利用される実際の辞
書は現在の$LANGUAGEによって決定されます。このシステム変数はKCL SET LANGUAGEコマンドもしくはSET_LANGビル
トインで設定されます。利用可能な言語はENGLISH、JAPANESE、FRENCH、GERMAN、 SPANISHもしくはDEFAULTです。
KARELプログラムで辞書をロードすることも可能です。ADD_DICTビルトインが辞書を指定の言語用の物としてロードし、 辞
書名を割り当てるために使用されます。

9.2.12 KARELプログラムから辞書要素へのアクセス
KARELプログラムは辞書名と辞書要素番号もしくは辞書要素名を用いて辞書要素にアクセス可能です。以下のKARELビルトイ
ンが辞書要素へのアクセスに使用されます。
 ADD_DICT - 指定の言語に辞書を追加します。
 REMOVE_DICT - 指定の言語から辞書を削除します。そしてファイルを閉じるか、辞書に使用しているメモリを開放しま
す。
 WRITE_DICT - 辞書要素をウィンドウに書きます。
 WRITE_DICT_V - KAREL変数のためのフォーマット指定子を持つ辞書要素をウィンドウに書きます。
 READ_DICT - 辞書要素をSTRING型の変数に読みます。
 READ_DICT_V - フォーマット指定子を持つ辞書要素をSTRING型の変数に読みます。
 CHECK_DICT - 辞書要素が存在するか否かチェックします。

9.3 ユーザフォームの作成
フォームとはR-30iA の画面のような外見と使い勝手を持つインタフェースを作成するために必要な辞書の一種のことです。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 79 of 412

以下にフォームを使うための手順を示します。

注意
基本的にROBOGUIDEを用いてユーザフォームを作成して下さい。付録F「ROBOGUIDEを用いたトランスレート」
を参照下さい。

以下のようにKCLを使用することも可能です。
1. ASCIIのフォームのテキストファイルを.FTXの拡張子で作成します。
2. フォームをKCL COMPRESS FORMコマンドを用いて圧縮します。この作業により拡張子TXのロード可能な辞書ファイル
が生成されます。関連する変数ファイル(.VR)ファイルも生成されます。
3. フォームをロードします。
 KCLから
KCL LOAD FORMコマンドを使用します。辞書ファイル(.TX)と関連する変数ファイル(.VR)がロードされます。
 KARELプログラムから
ADD_DICTビルトインを辞書(.TX)のロードに用います。関連する変数ファイル(.VR)のロードにLOADビルトインを使用
します。
4. DISCTRL_FORMビルトインを使用してフォームを表示します。DISCTRL_FORMビルトインは全ての入力操作を処理しま
す。これはカーソルの移動、スクロール、ページ送り, 入力の確認、選択操作を含みます。付録A「KAREL言語アルファ
ベット順解説」のDISCTRL_FORMビルトインを参照して下さい。

フォームはユーザがデータを入力する必要のあるプログラムで役立ちます。例えば、ユーザがデータを入力した時、データが
適切な形式であるか確認する必要があります。数値は正しい文字とフォーマットで入力され、特定の範囲に収まる必要があり
ます。テキスト文字列は特定の長さを超えてはならず、サブメニュー等からの選択は適切なものである必要があります。もし
不適切な値が入力されたなら、ユーザに通知し、新たな入力を促す必要があります。フォームは自動的に入力されたデータの
有効性をチェックする方法を提供します。フォームはKARELプログラムで表示した画面が他のシステムメニューに組み込まれ
ているかのように見せることを可能にします。馴染みのあるインタフェースをオペレータに提供することによってです。
フォームの使用にはユーザ2画面が選択されている必要があります。”t_sc”と”c_sc”スクリーンをTPとCRT/KBのそれぞれで使用
します。システムで予め定義されているウィンドウをテキストの表示に用います。どちらのスクリーンでも、このウィンドウ
は10行40列です。これはCRT/KB上では&double_highと&double_wide属性が使用されており、それを変更できないことを意味し
ます。

9.3.1 フォームの構文
フォームはTPもしくはCRT/KB上に表示されるユーザインタフェースを定義します。フォームは特殊な辞書要素です。多くの
フォームが同じ辞書に他の(フォームでない)辞書要素と共存できます。


フォームの辞書(.FTX)を作成する場合、ユーザ辞書ファイル(.UTX)を別に作成する必要はありません。 フォーム
と同じ辞書にユーザ辞書要素を置くことができます。

フォームを他の辞書要素と区別するために、シンボル”.form”が要素の前に置かれます。シンボル”.endform”が辞書要素の後に置
かれます。これらのシンボルは単独で行に書かれている必要があります。圧縮された辞書からはこれらのシンボルは削除され
ます。
フォームの構文は以下の通りです。
例9.3.1フォームの構文

.form <form_attributes>
$n, form_name<@cursor_pos><&res_word>"Menu_title"<&res_work>&new_line
<@cursor_pos><&res_word>"Menu_label"<&res_word>&new_line
<@cursor_pos><&res_word><"-Selectable_item"<&res_word>&new_line>
<@cursor_pos><&res_word><"-%Edit_item"<&res_word>&new_line>
<@cursor_pos><&res_word><"Non_selectable_text"<&res_word>&new_line>
<@cursor_pos><&res_word><"Display_only_item"<&res_word>&new_line>
<^function_key &new_line>
<?help_menu &new_line>
.endform
<$n,function_key
<"Key_name" &new_line>
<"Key_name" &new_line>

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 80 of 412

<"Key_name" &new_line>
<"Key_name" &new_line>
<"help_label" &new_line>
<"Key_name" &new_line>
<"Key_name" &new_line>
<"Key_name" &new_line>
<"Key_name" &new_line>
"Key_name"
>
<$n,help_menu
<"Help_text" &new_line>
<"Help_text" &new_line>
"Help_text">

制限事項

 ブラケット<>内の項目はオプションです。
 ここで定義されていないシンボルはユーザ辞書で標準の辞書要素シンボルです($n, @cursor_pos, &res_word, &new_line)。
 form_attributesはキーワード unnumber 及び unclear です。
 form_name はフォームを識別する辞書要素名を特定します。
 "Menu_title" 及び "Menu_label"は フォームの最初の2行を占めるテキストを指定します。これらは常に表示されます。
 "- Selectable_item" はカーソルを移動して選択できる要素テキストを指定します
 "-%Editable_item" はカーソルを移動して編集可能な要素テキストを指定します。
 "Non_selectable_text" は表示されるがカーソルを移動できない要素テキストを指定します。
 "%Display_only_item" はフォーマット指定子を使用している要素テキストを指定します。カーソルを移動できません。
 ^function_key はファンクションキーのラベルを辞書要素名を用いて指定します。
 ?help_menu はフォームと関連付けられたヘルプテキストのページを、辞書要素名を用いて定義します。
 "Key_name" にファンクションキーの上に表示される辞書要素を指定します。
 "Help_label" はファンクションキー5のための特殊なラベルです。どのようなラベルにもできますし、特殊な単語ヘルプでも
可能です。
 "Help_text" は40文字までの要素テキストです

 色の属性をフォーム中に指定可能です。iPendantは指定の色を表示します。モノクロ教示操作盤は色の属性を無視します。

9.3.2 フォームの属性
通常フォームを表示すると、カーソル移動可能な項目の前に行番号が表示されます。フォームが行番号を生成しないようにす
るには、シンボル”.form unnumber”を用います。
表示前にフォームにウィンドウをクリアさせないためには、シンボル”.form noclear”を用います。”noclear”と”unnumber”は順番
を問わず使用できます。
以下の例では、MH_TOOLDEFNが自動的に行番号を生成せず、ウィンドウのクリアを行わないフォームです。 MH_APPLIOは
行番号を生成するフォームです。
.form unnumber noclear
$1, MH_TOOLDEFN
.endform

$2, MH_PORT
$3, MH_PORTFKEY

.form
$6, MH_APPLIO
.endform

9.3.3 フォームのタイトルとメニューラベル
メニュータイトルはフォーム名に続く最初のテキストです。メニューラベルはメニュータイトルに続きます。それぞれが一行
からなり、スクロールしないウィンドウに表示されます。
 教示操作盤上
"full"ウィンドウの最初の行がメニュータイトルに用いられます。2行目がメニューラベルに用いられます。
 CRT/KB上
"cr05"ウィンドウの最初の行がメニュータイトルに用いられます。2行目がメニューラベルに用いられます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 81 of 412


 メニュータイトルは3行目、1-21列目に位置します
 メニューラベルは4行目、1-40列に位置します

"no clear"属性が指定されない限り、メニュータイトルとラベルはクリアされます。
予約語&homeをメニュータイトルの前に指定する必要があります。カーソルが正しい位置に置かれるのを保証するためです。
予約語&reveseもまたメニュータイトルの前に指定して下さい。&standartがメニュータイトルの直後に指定して下さい。これら
のことは、画面がR-30iAの画面と一貫性のある表示となるために必要です。予約語&new_lineをメニュータイトルとメニューラ
ベルの後に指定する必要があります。これはテキストの終了を示すためです。メニュータイトルとラベルの定義の例を以下に
示します。

.form
$1, mis_form
&home &reverse "Menu Title" &standard &new_line
"Menu Label" &new_line
.endform

メニューラベルを表示したくないなら、以下の例のように&new_lineをメニュータイトルの後に二回指定できます。
.form
$1,misc_form
&home &reverse " Menu Title" &standard &new_line &new_line
.endform

カーソル位置の属性を指定した場合は予約語&new_lineを指定する必要はありません。 以下の例ではカーソル位置をメニュータ
イトルについては行1,列2に設定しています。メニューラベルについては行2、列5に指定しています。

.form
$1,misc_form
@1,2 &reverse "Menu Title" &standard
@2,5 "Menu Label"
.endform

9.3.4 フォーム画面のテキスト
フォームの画面本体のテキストがメニュータイトルとラベルの後に続きます。行数に制限はありません。スクロール可能な10
行のウィンドウに表示されます。ウィンドウは教示操作盤では”fscr”、CRT/KBでは”ct06”です。このウィンドウは行5-14, 列1-
40に位置しています。"no clear"オプションが指定されていない限り、全行がフォーム表示前にクリアされます。
画面本体のテキストは以下の要素から構成されます。
 選択可能な項目
 編集可能なデータ項目。以下の型があります。
 INTEGER
 INTEGER型のI/O
 REAL
 SHORT (32768 to 32766)
 BYTE (0 to 255)
 BOOLEAN
 BOOLEAN型のI/O
 STRING
 プログラム名のSTRING
 ファンクションキー列挙型(enumeration type)
 サブウィンドウ列挙型
 変数を利用したサブウィンドウの列挙型
 I/Oの擬似
 選択できないテキスト
 フォーマット指定子を持つ表示専用データ項目
 カーソル位置属性
 予約語もしくはアスキーコード
 ファンクションキーの要素名もしくは要素番号
 ヘルプ要素名もしくは要素番号

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 82 of 412

各要素については以降の節で説明されています。

9.3.5 選択可能項目
選択可能項目には以下の特徴があります。
 選択可能項目は辞書中では2重引用符で囲まれた文字列として入力されます。
 その文字列の最初の文字は"-"でなくてはなりません。この文字は画面に表示されません。 例えば次の通りです。

"- Item 1 "


 選択可能項目が選択されている時、文字列全体が強調表示されます。
 自動行番号生成は最初の3列を使用します。そしてフォームのテキストをずらしません。それ故に、フォームのテキストは
その3列を見込んでおく必要があります。空白のテキストを追加するか、位置を指定する方法があります。例えば次の通り
です。

" " "- Item 1" &new_line


" " "- Item 2" &new_line
" " "- Item 3" &new_line
もしくは
@3,4"- Item 1 "
@4,4"- Item 2 "
@5,4"- Item 3 "

 スクロールするウィンドウの最初の行はフォームの3行目として定義されます。

 選択可能項目上で入力キーを押すと常にフォーム処理の関数から抜けてきます。DISCTRL_FORM のterm_charはky_selectと
なります。これはDISCTRL_FORMのterm_maskの設定によりません。選択された項目の番号が返されます。
 項目選択ハードキーを教示操作盤で押すことにより項目が選択された場合、その項目を強調表示するだけです。フォーム
処理を終了させません。
 数値キーによるショートカットの項目選択は自動的にはサポートされません。数値キーをDISCTRL_FORMのterm_maskに
設定することは可能にも関らずです。

9.3.6 編集可能データ項目
データ項目を編集することができます。以下の特徴があります。
 データ項目は辞書中では2重引用符で囲まれた文字列として入力されます。
 その文字列の最初の文字は"-"でなくてはなりません。この文字は画面に表示されません。
 第二の文字は'%'でなくてはなりません。この文字はフォーマット指定子の開始の印です。
 それぞれのフォーマット指定子は%で始まり変換文字で終了します。この2文字間のすべての文字はユーザ辞書と同じ意味
を持ちます。


フィールド幅をそれぞれのフォーマット指定子に提供して下さい。提供しない場合はデフォルトの設定が使用さ
れます。デフォルトではフォームが整然と表示されない可能性があります。

表9.3.6は編集可能データ項目の変換文字の一覧を示します。

表9.3.6変換文字
文字 引数の型:表記
d 整数値;10進数
o 整数値;符号無し8進数(先行の0無し)
x, X 整数値;符号無し16進数(先行の0xもしくは0X無し)。10から15をabcdefあるいはABCDEFで表す。
u 整数値;符号無し10進数
pu INTEGER型のI/O; 符号無し10進数
INTEGER型のI/O; 符号無しの16進数 (先行の0xもしくは0X無し)。10から15をabcdefあるいはABCDEFで表
px
す。
実数値; < - > mmm.ddddのフォーマットで10進表記。dの数は精度で与えられる。標準値は6。0を指定する
f
と小数点の表示を抑制する。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 83 of 412

実数値; < - > mmm.ddddもしくはm.ddddddE+-xxのフォーマットで10進表記。dの数は精度で与えられる。


e, E
標準値は6。0を指定すると小数点の表示を抑制する。
実数値;指数部が-4以下か精度より大きいか等しい時には%e or %Eが用いられる。そうでなければ%fを用い
g, G
る。 語尾の0及び小数点は印字されない。
h SHORT; 符号付のshort。
b BYTE; 符号無しのbyte。
B BOOLEAN; BOOLEAN型の値を列挙化した文字列の文字を印字
P BOOLEAN型のI/O; BOOLEAN型のI/Oの値を列挙化した文字列の文字を印字
S INTEGER型もしくは BOOLEAN 型のI/O; I/Oの擬似の状態を列挙化した文字列の文字を印字
k STRING; 文字列の終了もしくは精度として与えられた文字数までKAREL文字列を印字
STRING; プログラム名のKAREL文字列を印字。文字列の終了もしくは精度として与えられた文字数まで印
pk
字する。
INTEGER;ファンクションキーに表示した、INTEGERを列挙化した文字列の文字を表示。列挙化の文字列
n
の定義には辞書を用います。
INTEGER; サブウィンドウに表示した、INTEGERを列挙化した文字列の文字を印字。列挙化の文字列の定
w
義には辞書を用います。
INTEGER; サブウィンドウに表示した、INTEGERを列挙化した文字列の文字を印字。列挙化の文字列の定
v
義には変数を使用する。
% 引数は変換されない。%を印字。

フォーマット指定子の例を以下に示します。
"-%5d" or "-%-10s"

フォームプロセッサはvalue_arrayより値を取得し、順に表示します。全ての表示値は動的に更新されます。
編集可能データ項目: INTEGER, INTEGER型I/O, REAL, SHORT, BYTE
 各フォーマット指定子に”(最小値,最大値)”の形で最小値と最大値を指定することにより、許容範囲を指定可能です。最小
値と最大値を指定しない場合、どのような整数値もしくは実数値も入力可能です。例えば次の通りです。

"-%3d(1,255)" or "-%10.3f(0.,100000.)"

 編集可能データ項目が選択された時、フォームプロセッサは適切な入力ルーチンを呼び出します。入力ルーチンは新しい
値(反転表示された値)を読み、辞書要素に指定された最小値、最大値を用いて、新しい値が有効な範囲にあるか決定し
ます。
 新しい値が範囲外の場合、エラーメッセージがプロンプトラインに表示されます。現在の値は修正されません。
 新しい値が有効範囲内にあれば、現在値を上書します。
編集可能データ項目: BOOLEAN
 フォーマット指定子%BはBOOLEAN型の値に用いられます。F4、F5ファンクションキーに選択肢を表示し、選択を行うた
めに用います。ファンクションキーのラベルを含む辞書要素の名前は括弧で囲われ、%Bの後に指定されます。例えば次の
通りです。

"-%4B(enum_bool)"

ファンクションキーの表示を定義する辞書要素はFALSEの値を最初に(F5のラベル)、TRUEの値を二番目に(F4のラベル)定義し
ます。例えば、次の通りです。

$2,enum_bool
" NO" &new_line
" YES"

フォームプロセッサはカーソルが%Bの項目に移動した時にファンクションキーの表示を変更します。フィールドに表示される
値はファンクションキーのラベルと同じです。但し先行する空白は削除されています。

編集可能データ項目: BOOLEAN型のI/O

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 84 of 412

 フォーマット指定子%PはBOOLEAN型のI/Oの値に使用します。F4、F5ファンクションキーに選択肢を表示し、選択を行う
ために用います。ファンクションキーのラベルを含む辞書要素の名前は括弧で囲われ、%Pの後に指定されます。例えば次
の通りです。

"-%3P(enum_bool)"b

ファンクションキーの表示を定義する辞書要素は0の値を最初に(F5のラベル)、1の値を二番目に(F4のラベル)定義します。例え
ば次の通りです。

$2,enum_bool
" OFF" &new_line
" ON"b

フォームプロセッサはカーソルが%Pの項目に移動した時にファンクションキーの表示を変更します。フィールドに表示される
値はファンクションキーのラベルと同じです。但し先行する空白は削除されています。

編集可能データ項目: I/Oの擬似
 フォーマット指定子%SはI/O擬似に使用します。F4、F5ファンクションキーに選択肢を表示し、選択を行うために用いま
す。ファンクションキーのラベルを含む辞書要素の名前は括弧で囲われ、%Sの後に指定されます。 例えば次の通りです。

"-%1S(sim_fkey)"

ファンクションキーの表示を定義する辞書要素は0の値を最初に(F5のラベル)、1の値を二番目に(F4のラベル)定義します。例え
ば次の通りです。
$-, sim_fkey
" UNSIM " &new_line * F5 key label, port will be unsimulated
"SIMULATE" &new_line * F4 key label, port will be simulated

フォームプロセッサはカーソルが%Sの項目に移動した時にファンクションキーの表示を変更します。フィールドに表示される
値はファンクションキーのラベルと同じです。但し先行する空白は削除されています。そしてフィールド幅に合うように短く
されます。

編集可能データ項目: STRING
 文字列の内容を編集する前にクリアすることもできます。これを行うには、STRINGフォーマット指定子に括弧で囲ん
だ”clear”を続けます。もし”(clear)”を指定しない場合、デフォルトでは現在の文字列の修正となります。 例えば次の通りで
す。

"-%10k(clear)"

編集可能データ項目: プログラム名のSTRING
 %pkフォーマット指定子を使ってサブウィンドウにプログラム名を表示し、選択することができます。表示されるプログ
ラムのタイプは括弧で囲んで%pkの後に指定可能です。例えば次の通りです。

"-%12pk(1)" * TPプログラムを指定

"-%12pk(2)" * PC(KAREL)プログラムを指定

"-%12pk(6)" * TP, PC, VRを指定

"-%12pk(16)" *TP & PCを指定

指定したタイプと一致し、メモリ上に現在ある全てのプログラムがサブウィンドウに表示されます。プログラムが選択される
と、文字列が関連付けられた変数にコピーされます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 85 of 412

編集データ項目: ファンクションキーによる列挙
 フォーマット指定子%n(列挙型とした整数値向け)を用いて、ファンクションキーに選択肢を表示し、選択することが可能
です。有効な選択肢のリストを含む辞書要素は括弧に囲んで%nの後ろに指定されます。例えば、次の通りです。

"-%6n(enum_fkey)"

ファンクションキーを定義する辞書要素は一行に一つのファンクションキーラベルを指定します。もし指定したファンクショ
ンキーの左のファンクションキーがアクティブで無い場合、""を指定します。最大で5個のファンクションキーを使用可能で
す。例えば次の通りです。

$2,enum_fkey
"" &new_line *F1はアクティブでない
"JOINT" &new_line *F2を指定
"LINEAR" &new_line *F3を指定
"CIRC" *F4を指定

フォームプロセッサはカーソルが%nの項目に移動した時に適切なファンクションキーにラベルを表示します。ファンクション
キーが選択された時、対応するINTEGER変数に値が以下のように設定されます。

F1を押下, value = 1
F2を押下, value = 2
F3を押下, value = 3
F4を押下, value = 4
F5を押下, value = 5b

フィールドに表示される値はファンクションキーのラベルと同じです。但し先行する空白は削除されています。

編集可能データ項目: サブウィンドウによる列挙
 フォーマット指定子%w(列挙型とした整数値向け)を用いて、サブウィンドウに選択肢を表示し、選択することが可能で
す。有効な選択肢のリストを含む辞書要素は括弧に囲んで%wの後ろに指定されます。例えば、

"-%8w(enum_sub)"

サブウィンドウの選択肢一つの定義に一つの辞書要素が必要です。35の選択肢が使用可能です。35個未満の選択肢を用いる場
合、最後の選択肢の次に"\a" を含む辞書要素を続けて下さい。1ページにつき7つの選択肢が、2列に並んで表示されます。選択
肢が4個以下の場合、選択肢は1列に36文字幅で表示されます。以下に例を示します。

$2,enum_sub "Option 1"

$3 "Option 2"

$4 "Option 3"

$5 "\a"

フォームプロセッサはカーソルが%wの項目に移動した時にF4に"[CHOICE]"と表示します。F4[CHOICE]が選択された時、適切
な表示でサブウィンドウが表示されます。選択肢を選択すると、選択した番号が対応するINTEGER変数に設定されます。
フィールドに表示される値は辞書に定義したラベルと同じです。但し先行する空白は削除されています。
編集可能データ項目: 変数を利用したサブウィンドウによる列挙
 フォーマット指定子%v(列挙型とした整数値向け)を用いて、サブウィンドウに選択肢を表示し、選択することが可能で
す。しかしながら、選択肢を辞書に定義する代わりに、それらは変数に定義されます。プログラム名と変数名を含む辞書
要素の名前を、括弧に囲んで%vの後に指定します。例えば、

"-%8v(enum_var)"
$-,enum_var
"RUNFORM" &new_line * 使用する変数を持つプログラム名

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 86 of 412

"CHOICES" &new_line *選択肢を格納する変数名

[RUNFORM] CHOICESはSTRING型の配列として定義する必要があります。各配列要素がサブウィンドウの選択肢を定義しま
す。このフォーマット指定子は%wと似ています。しかし第一の要素は値0に相当し、決して使用されません。第二の要素が値1
に相当し、そこから使用されます。最後の値は配列の終わりか、最初の未初期化の値となります。

[RUNFORM] CHOICES:ARRAY[6] OF STRING[12] =


[1] *uninit*
[2] 'Red' <= value 1
[3] 'Blue' <= value 2
[4] 'Green' <= value 3
[5] *uninit*
[6] *uninit*

9.3.7 選択できないテキスト
選択できないテキストをフォーム中に指定できます。以下の特徴があります。
 選択できないテキストは二重引用符で囲まれた文字列として辞書に入力されます。
 選択できないテキストはフォーム中の任意の場所に定義可能です。しかしウィンドウの最大列数を超えてはなりません。

9.3.8 表示専用データ項目
表示専用データ項目をフォーム中に指定できます。以下の特徴があります。
 表示専用データ項目は辞書中では2重引用符で囲まれた文字列として入力されます。
 その文字列の最初の文字は"%"でなくてはなりません。この文字はフォーマット指定子の開始の印です。
 フォーマット指定子は編集可能データ項目と同様に定義されます。

9.3.9 カーソル位置属性
カーソル位置属性を使用して任意のテキストの行と列を定義可能です。常に行を最初に指定します。フォームが前の行や列に
戻ろうとすると、辞書圧縮ソフトウェアはエラーを発生させます。フォームタイトルとラベルは行1,2にあります。スクロール
するウィンドウは行3から始まります。以下に例を示します。
@3,4 "- Item 1"
@4,4 "- Item 2"
@3,4 "- Item 3" <- 3行目に戻っています。これは許されません。

スクロールするウィンドウは10行しか無いにもかかわらず、長いフォームは12を超える行を指定可能です。フォームを処理す
るソフトウェアはスクロール中も現在行の経緯を覚えています。

9.3.10 フォームの予約語及び文字コード
予約語及び文字コードを使用可能です。使用可能な全予約語の一覧については 表9.3.10(a)を参照して下さい。しかしスクロー
ルするウィンドウ中で使用可能な予約語は限られています。スクロールするウィンドウ中で利用可能な予約語の一覧について
は表9.3.10(b)を参照して下さい。

表9.3.10(a) 予約語
予約語 機能
&bg_black 背景色黒
&bg_blue 背景色青
&bg_cyan 背景色シアン
&bg_dflt 背景色をデフォルトにする
&bg_green 背景色緑
&bg_magenta 背景色マゼンタ
&bg_red 背景色赤
&bg_white 背景色白
&bg_yellow 背景色黄色
&fg_black 前景色黒

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 87 of 412

&fg_blue 前景色青
&fg_cyan 前景色シアン
&fg_dflt 前景色をデフォルトにする
&fg_green 前景色緑
&fg_magenta 前景色マゼンタ
&fg_red 前景色赤
&fg_white 前景色白
&fg_yellow 前景色黄色
&clear_win ウィンドウクリア (#128)
&clear_2_eol 行末までクリア(#129)
&clear_2_eow ウィンドウの最後までクリア(#130)
$cr 復帰(Carriage return) (#132)
$lf 改行/複行(Line feed) (#133)
&new_line 改行 (#135)
&bs バックスペース (#136)
&home ウィンドウのホームカーソル位置(#137)
&reverse 反転表示属性 (#139)
&standard 全属性を標準とする(#143)

表9.3.10(b)はスクロール可能なウィンドウ中で使用可能な予約語の一覧です。

表9.3.10(b) スクロール可能なウィンドウ中で使用可能な予約語
予約語 機能
&new_line 改行 (#135)
&reverse 反転表示属性 (#139)
&standard 全属性を標準とする(#143)

9.3.11 フォームのファンクションキーの辞書要素名もしくは番号
それぞれのフォームは一つの関連付けられたファンクションキーのメニューを持てます。あるファンクションキーのメニュー
は以下の特徴を持ちます。
 辞書の中でキャレット(^)で指定されます。キャレットの直後にファンクションキーの辞書要素もしくは番号が続きます。
例えば次の通りです。

^misc_fkey

 ファンクションキーを定義する辞書要素は一行に一つのファンクションキーラベルを指定します。もし指定したファンク
ションキーの左のファンクションキーがアクティブで無い場合、""を指定します。最大で10個のファンクションキーを使用
可能です。以下に例を示します。

$3,misc_fkey
" F1" &new_line
" F2" &new_line
" F3" &new_line
" F4" &new_line
" HELP >" &new_line
"" &new_line
"" &new_line
" F8" &new_line
" F9" &new_line

 フォームプロセッサは適切なファンクションキーを表示します。有効なキーが押されたならフォームプロセッサの処理か
らリターンします。DISCTRL_FORM( )のterm_charはky_f1 からky_f10に設定されます。

 ファンクションキーは列挙型のデータ項目が同じファンクションキーを使っている場合、一時的に無効になります。
 ファンクションキーF5がHELP(日本語の辞書は半角でヘルプ)と表示されると、ヘルプが存在する場合は自動的にフォームの
ヘルプを呼び出します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 88 of 412

9.3.12 変数を利用したフォームのファンクションキー
ファンクションキーメニューは変数に定義することも可能です。ファンクションキーの辞書はプログラムと変数名を持ちま
す。ファンクションキーと区別するために、先頭にアスタリスク(*)をつけます。例えば、

* 変数にファンクションキーを指定する。
*その変数の型は ARRAY[m] of STRING[n]とする。
$3,misc_fkey
"*RUNFORM" &new_line * 変数を持つプログラム名
"*FKEYS" &new_line * ファンクションキーを格納する変数名

[RUNFORM] FKEYSはSTRING型の配列として定義する必要があります。各配列要素がファンクションキーのラベルを定義しま
す。

[RUNFORM] FKEYS:ARRAY[10] OF STRING[12] =


[1] ‘ F1’
[2] ‘ F2’
[3] ‘ F3’
[4] ‘ F4’
[5] ‘ HELP >'
[6] ‘’
[7] ‘’
[8] ‘ F8’
[9] ‘ F9’
[10]‘ >’

9.3.13 フォームのヘルプ辞書要素名及び番号
各フォームは一つ関連付けられたヘルプ画面を持てます。ヘルプ画面は以下の特徴を持ちます。
 ヘルプ辞書要素名及び辞書要素番号は辞書中に?で指定されます。直後にヘルプ辞書要素の辞書要素名もしくは番号が続き
ます。例えば、
?misc_help

 ヘルプ画面を定義する辞書要素は48行のテキストに限定されます。

 フォームプロセッサはヘルプキーを処理すると定義済みのウィンドウにヘルプ辞書要素を表示します。定義済みウィンド
ウは40列の幅を持ち、3から14行目を占有します。
 ヘルプ画面は以下の入力に反応します。
 上下キーにより1行ずつスクロールします。
 シフト+上下キーで3/4ページずつスクロールします。
 前戻りキーでヘルプを終了します。ヘルプ画面は前の画面を復元してから戻ります。

9.3.14 教示操作盤上のフォーム
フォームが表示されている間に、他のアクティブな教示操作盤のウィンドウに書き込むことができます。フォーム表示のスク
リーン自体は”tpsc”と呼ばれます。図9.3.14にこのスクリーンにアタッチされている全ウィンドウの一覧を示します。noclearオ
プションが指定されていない限り、”full”、“fscr”、“prom”そして”ftnk”ウィンドウがフォーム表示前にクリアされます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 89 of 412

図9.3.14教示操作盤上のフォーム

9.3.15 CRT/KB上のフォーム
フォームが表示されている間に、他のアクティブなCRT/KBのウィンドウに書き込むことができます。フォーム表示のスクリー
ン自体は"ctsc"と呼ばれます。このスクリーンの全ての行は倍角の高さと幅に設定されます。図9.3.15にこのスクリーンにア
タッチされている全ウィンドウの一覧を示します。"noclear"オプションが指定されていない限り、``ct05,'' ``ct06,'' ``ct03,'' 及び
``ct04''ウィンドウがフォーム表示前にクリアされます。

図9.3.15 CRT/KB上のフォーム

9.3.16 ファイル名に関する慣習
圧縮していないフォーム辞書ファイルは以下の命名上の慣習に従う必要があります。
 辞書ファイル名の最初の二文字はアプリケーションを示す接頭辞に使用可能です。
 ファイル名が4文字以上の場合、フォームプロセッサは辞書名を決定しようとする時、最初の二文字を飛ばします。
 次の4文字はロードしようとするTXファイルの辞書名とする必要があります。さもないとフォームプロセッサが機能しま
せん。
 最後の2文字は任意ですが、言語を識別するために使います。
 ``EG'' は ENGLISH
 ``JP'' は JAPANESE
 ``FR'' は FRENCH
 ``GR'' はGERMAN
 ``SP'' は SPANISH
 フォームを持つ辞書ファイルはFTXの拡張子を持つ必要があります。FTXでない場合、辞書圧縮ソフトが機能しません。
圧縮した後は同じ辞書ファイルがTXの拡張子を持ちます。
非圧縮のフォーム辞書ファイル名の例を以下に示します。

MHPALTEG.FTX

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 90 of 412

MHはMaterial Handlingを意味します。PALT は辞書名です。それは辞書を制御装置にロードするために用いられます。EGは英


語を意味します。

9.3.17 フォームの圧縮と制御装置へのロード

注意
基本的にROBOGUIDEを用いてフォームを圧縮して下さい。付録F「ROBOGUIDEを用いたトランスレート」を参照
下さい。

以下、KCLでの圧縮について示します。

フォームの圧縮はユーザ辞書の圧縮に似ています。 KCLコマンドプロンプトから以下を入力します。

KCL> COMPRESS FORM filename

拡張子.FTXを含めないで下さい。圧縮ソフトがエラーを検出すると違反のある単語を指摘します。その際何が問題か簡潔な説
明が付いています。継続する前にフォームを編集し、問題を修正して下さい。


エラーが正しい行を指摘するためには、フォームは非圧縮のファイルでなくてはなりません。

圧縮ソフトにより二つのファイルが生成されます。一つはロード可能な辞書ファイルです。ファイル名は同じですが拡張子は
TXです。もう一つは変数ファイルで拡張子はVRとなります。ファイル名は4文字の辞書名となります。辞書名はファイル名か
ら先に述べたように抽出されます。もしKARELのインクルードファイルを生成するために".kl"のシンボルを使用したなら、三
つ目のファイルが生成されるかもしれません。図9.3.17が圧縮を図示しています。

図9.3.17辞書圧縮ソフトとフォーム辞書ファイル

フォームは三種類の変数を生成します。これらの変数はフォームプロセッサによって使用されます。辞書を圧縮する度にロー
ドする必要があります。変数は以下の通りです。
1. 項目変数の配列 - 変数名は辞書名の4文字となります。辞書要素番号が続き、更に_ITが続きます。
2. 行変数の配列 - 変数名は辞書名の4文字となります。辞書要素番号が続き、更に_LNが続きます。
3. 雑多な変数 - 変数名は辞書名の4文字となります。辞書要素番号が続き、更に_MSが続きます。
フォームを定義するデータがKAREL変数に生成されます。これらの変数は変数ファイルにセーブされ、制御装置にロードされ
ます。プログラム名は辞書名の前にアスタリスクが付いたものです。例えば、MNPALTEG.FTXは以下を含みます。
.form unnumber
$1, MH_TOOLDEFN
.endform

$2, MH_PORT
$3, MH_PORTFKEY

.form
$6, MH_APPLIO
.endform

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 91 of 412

ファイル命名規則の節で述べたよに、辞書名はファイル名から抽出され、"PALT"です。辞書要素1と6はフォームです。
PALT.VRという変数ファイルが生成されます。プログラム名は"*PALT"です。 それは以下の変数を含みます。

PALT1_IT, PALT1_LN, and PALT1_MS

PALT6_IT, PALT6_LN, and PALT6_MS


KCL CLEAR ALLはこれらの変数をクリアしません。 これらを表示もしくはクリアするには SET VAR
$CRT_DEFPROG = '*PALT' を実行し、SHOW VARS及びCLEAR VARSを使用して下さい。

フォームはKCL LOAD FORM コマンドを使ってロードされます。

KCL> LOAD FORM filename

filenameはロード可能な辞書ファイルのファイル名です。ファイルがロードされた後、ファイル名から辞書名が抽出され、変数
ファイルのロードに使われます。このKCLコマンドは以下のコマンドと同等です。

KCL> LOAD DICT filename dict_name DRAM

KCL> LOAD VARS dict_name

9.3.18 フォームの表示
DISCTRL_FORMビルトインが教示操作盤もしくはCRT/KB画面上にフォームを表示し、制御するために使用されます。全ての
キー入力はDISCTRL_FORMビルトイン内で処理されます。これはKARELプログラムの実行はDISCTRL_FORMがフォームから
抜けるようなキー入力を処理するまで中断するということです。KARELプログラムが中断されている間にもコンディションハ
ンドラはアクティブなままです。


DISCTRL_FORMはユーザ2画面が選択中の場合のみフォームを表示します。それゆえに、DISCTRL_FORMを呼
ぶ前に、FORCE_SPMENU(device_stat, SPI_TPUSER2,1)を用いてユーザ2画面を強制的に表示して下さい。

以下の画面はFORM.FTXの第一のテンプレートを教示操作盤上に表示したかのように示したものです。この例は4個の選択可能
な項目を含んでいます。

RUNFORM LINE 22 RUNNING


ここにタイトル JOINT 10%
ここにラベル 5/5
1 項目 1
2 項目 2
3 項目 3
4 項目 4
5 項目 5
図9.3.18(a) 選択可能な項目の例

FORM.FTXの辞書要素が例9.3.18(a)に示されています。これは図9.3.18(a)に示したフォームの作成に使用されました。

例9.3.18(a) 選択可能な項目のためのフォームの辞書の例

* Dictionary Form File: form.ftx


*
* Generate form.kl which should be included in your KAREL program
.kl form
.form
$-,form1
&home &reverse 'ここにタイトル' &standard &new_line
' ここにラベル ' &new_line
@3,10 '- 項目 1 '

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 92 of 412

@4,10 '- 項目 2 '


@5,10 '- 項目 3 '
@6,10 '- 項目 4 '
@7,10 '- 項目 5 '
* Add as many items as you wish.
* The form manager will scroll them.
^form1_fkey * specifies element which contains
* function key labels
?form1_help * element which contains help
.endform
$-,form1_fkey * function key labels
" F1" &new_line
" F2" &new_line
" F3" &new_line
" F4" &new_line
" ヘルプ>" &new_line * help must be on F5
" F6" &new_line
" F7" &new_line
" F8" &new_line
" F9" &new_line
" F10 >"

* you can have a maximum of 10 function keys labeled


$-, form1_help * help text
'ヘルプ 行1' &new_line
'ヘルプ 行2' &new_line
'ヘルプ 行3' &new_line
* You can have a maximum of 48 help lines

例9.3.18(b)のプログラムが 図9.3.18(a)のフォームの表示に使用されました。

例9.3.18(b) 選択可能な項目のためのプログラムの例
PROGRAM runform1
%NOLOCKGROUP
%INCLUDE form -- フォームの要素番号に要素名でアクセスできます
%INCLUDE klevccdf
%INCLUDE klevkeys
%INCLUDE klevkmsk
VAR
device_stat : INTEGER --tp_panel又はcrt_panel
value_array : ARRAY [1] OF STRING [1] --DISCTRL_FORM向けダミー変数
inact_array : ARRAY [1] OF BOOLEAN --未使用
change_array: ARRAY [1] OF BOOLEAN --未使用
def_item : INTEGER
term_char : INTEGER
status : INTEGER
BEGIN
device_stat = tp_panel
FORCE_SPMENU (device_stat, SPI_TPUSER2, 1)--TPにユーザ2画面を表示
def_item = 1 -- 項目1にカーソルがある状態で開始
--FORM1というフォームを表示
DISCTRL_FORM ('FORM', form1, value_array, inact_array,
change_array, kc_func_key, def_item, term_char, status)
IF STATUS <> 0 THEN
ABORT
ENDIF
WRITE TPERROR (CHR(cc_clear_win)) --TPのエラーウィンドウをクリア
IF term_char = ky_select THEN

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 93 of 412

WRITE TPERROR ('Menu item', def_item::1, 'was selected.')


ELSE
WRITE TPERROR ('Func key', term_char::1, ' was selected.')
ENDIF
END runform1

図9.3.18(b)はFORM.FTX中の第二のテンプレートをCRT/KB上に表示したかのように示しています。この例は全ての編集可能
データ項目の種類を含んでいます。

図9.3.18(b) 編集可能データ項目の例

FORM.FTXの辞書要素が例9.3.18(c)に示されています。これは図9.3.18(b)に示したフォームの作成に使用されました。

例9.3.18(c) 編集可能データ項目のための辞書の例
* Dictionary Form File: form.ftx
*
* Generate form.kl which should be included in your KAREL program
.kl form
.form
$-,form2
&home &reverse 'ここにタイトル' &standard &new_line
' ここにラベル ' &new_line
" Integer: " "-%10d" &new_line
" Integer: " "-%10d(1,32767)" &new_line
" Real: " "-%12f" &new_line
" Bolean: " "-%10B(bool_fkey)" &new_line
" String: " "-%-20k" &new_line
" String: " "-%12k(clear)" &new_line
" Byte: " "-%10b" &new_line
" Short: " "-%10h" &new_line
" DIN[1]: " "-%10P(dout_fkey)" &new_line
" AIN[1]: " "-%10pu" " " "-%1S(sim_fkey)" &new_line
" AOUT[2]: " "-%10px" " " "-%1S(sim_fkey)" &new_line
" Enum Type: " "-%8n(enum_fkey)" &new_line

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 94 of 412

" Enum Type: " "-%6w(enum_subwin)" &new_line


" Enum Type: " "-%6v(enum_var)" &new_line
' プログラム名(TP): ' "-%12pk(1)" &new_line
' プログラム名(PC): ' "-%12pk(2)" &new_line
' プログラム名(TP,PC,VR):' "-%12pk(6)" &new_line
' プログラム名(TP,PC): ' "-%12pk(16)" &new_line
^form2_fkey
.endform
$-,form2_fkey
"EXIT" &new_line
*Allows you to specify the labels for F4 and F5 function keys
$-,bool_fkey
"FALSE" &new_line * F5 key label, value will be set FALSE
"TRUE" &new_line * F4 key label, value will be set TRUE
* Allows you to specify the labels for F4 and F5 function keys
$-, dout_fkey
"オフ" &new_line * F5 key label, value will be set OFF
"オン" &new_line * F4 key label, value will be set ON
*Allows you to specify the labels for F4 and F5 function keys
$-, sim_fkey
" UNSIM " &new_line * F5 key label, port will be unsimulated
"SIMULATE" &new_line * F4 key label, port will be simulated
*Allows you to specify the labels for 5 function keys
$-, enum_fkey
"FINE" &new_line * F1 key label, value will be set to 1
"COARSE" &new_line * F2 key label, value will be set to 2
"NOSETTL" &new_line * F3 key label, value will be set to 3
"NODECEL" &new_line * F4 key label, value will be set to 4
"VARDECEL" &new_line * F5 key label, value will be set to 5
*Allows you to specify a maximum of 35 choices in a subwindow
$-,enum_subwin
'赤' * value will be set to 1
$-
'青' * value will be set to 2
$-
'緑'
$-
'黄色'
$-
"\a" * specifies end of subwindow list
* Allows you to specify the choices for the subwindow in a
* variable whose type is an ARRAY[m] of STRING[n].
$-,enum_var
"RUNFORM2" &new_line * program name of variable
"CHOICES" &new_line * Variable name containing choices

例9.3.18(d)のプログラムが 図9.3.18(b)のフォームの表示に使用されました。

例9.3.18(d) 編集可能データ項目のためのプログラム例
PROGRAM runform2
%NOLOCKGROUP
%INCLUDE form -- フォームの要素番号に要素名でアクセスできます
%INCLUDE klevccdf
%INCLUDE klevkeys
%INCLUDE klevkmsk
TYPE
mystruc = STRUCTURE
byte_var1: BYTE
byte_var2: BYTE

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 95 of 412

short_var: SHORT
ENDSTRUCTURE
VAR
device_stat: INTEGER --tp_panel又はcrt_panel
value_array: ARRAY [20] OF STRING [40]
inact_array: ARRAY [1] OF BOOLEAN
change_array: ARRAY[1] OF BOOLEAN
def_item: INTEGER
term_char: INTEGER
status: INTEGER
int_var1: INTEGER
int_var2: INTEGER
real_var: REAL
bool_var: BOOLEAN
str_var1: STRING[20]
str_var2: STRING[12]
struc_var: mystruc
color_sel1: INTEGER
color_sel2: INTEGER
prog_name1: STRING[12]
prog_name2: STRING[12]
Prog_name3: STRING[12]
prog_name4: STRING[12]
choices: ARRAY[5] OF STRING[12]
BEGIN
value_array [1] = 'int_var1'
value_array [2] = 'int_var2'
value_array [3] = 'real_var'
value_array [4] = 'bool_var'
value_array [5] = 'str_var1'
value_array [6] = 'str_var2'
value_array [7] = 'struc_var.byte_var1'
value_array [8] = 'struc_var.short_var'
value_array [9] = 'din[1]'
value_array [10] = 'ain[1]'
value_array [11] = 'ain[1]'
value_array [12] = 'aout[2]'
value_array [13] = 'aout[2]'
value_array [14] = '[*system*]$group[1].$termtype'
value_array [15] = 'color_sel1'
value_array [16] = 'color_sel2'
value_array [17] = 'prog_name1'
value_array [18] = 'prog_name2'
value_array [19] = 'prog_name3'
value_array [20] = 'prog_name4'
choices [1] = '' --未使用
choices [2] = 'Red' --color_sel12 = 1に相当
choices [3] = 'Blue' --color_sel12 = 2に相当
choices [4] = 'Green' --color_sel12 = 3に相当
choices [5] = 'Yellow' --color_sel12 = 4に相当
-- Initialize variables
int_var1 = 12345
-- int_var2は意図的に未初期化のまま
real_var = 0
bool_var = TRUE
str_var1 = 'This is a test'
-- str_var2は意図的に未初期化のまま
struc_var.byte_var1 = 10
struc_var.short_var = 30

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 96 of 412

color_sel1 = 3 --enum_subwinの3番目のitemに相当
color_sel2 = 1
--device_stat = crt_panel --CRT/KBを指定するならこのように
device_stat = TP_PANEL --TPを指定してフォームを表示
FORCE_SPMENU(device_stat, SPI_TPUSER2,1)
def_item = 1 -- 最初の項目にカーソルがある状態で開始
DISCTRL_FORM('FORM', form2, value_array, inact_array,
change_array, kc_func_key, def_item, term_char, status);
END runform2

図9.3.18(c)はFORM.FTX中の第三のテンプレートを教示操作盤上に表示したかのように示しています。この例は表示専用項目を
含んでいます。この例は自動的に辞書ファイル、変数ファイルをKARELプログラムからロードする方法を示しています。

図9.3.18(c) 表示専用データ項目の例

FORM.FTXの辞書要素が例9.3.18(e)に示されています。これは図9.3.18(c)に示したフォームの作成に使用されました。

例9.3.18(e) 表示専用データ項目の辞書の例
* Dictionary Form File: form.ftx
*
* Generate form.kl which should be included in your KAREL program
.kl form
.form
$-,form3
&home &reverse 'ここにタイトル' &standard &new_line
' ここにラベル ' &new_line
&new_line
"Int: " "%-10d" " Bool: " "%-10B(bool_fkey)" &new_line
"Real: " "%-10f" " Enum: " "%-10n(enum_fkey)" &new_line
"DIN[""%1d""]: " "%-10P(dout_fkey)" "%-12S(sim2_fkey)"
*You can have as many columns as you wish without exceeding * 40 columns.
*You can specify blank lines too.
.endform
$-,sim2_fkey
'擬似解除' &new_line * F5 key label, port will be unsimulated
' 擬似 ' &new_line * F4 key label, port will be simulated

例9.3.18(f)のプログラムが 図9.3.18(c)のフォームの表示に使用されました。

例9.3.18(f) 表示専用データ項目のプログラム例
PROGRAM runform3
%NOLOCKGROUP
%INCLUDE form -- フォームの要素番号に要素名でアクセスできます
%INCLUDE klevccdf
%INCLUDE klevkeys
%INCLUDE klevkmsk
VAR
device_stat: INTEGER --tp_panel又はcrt_panel
value_array: ARRAY [20] OF STRING [40]
inact_array: ARRAY [1] OF BOOLEAN -- 未使用
change_array: ARRAY[1] OF BOOLEAN -- 未使用

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 97 of 412

def_item: INTEGER
term_char: INTEGER
STATUS: INTEGER
loaded: BOOLEAN
initialized: BOOLEAN
int_var1: INTEGER
int_var2: INTEGER
real_var: REAL
bool_var: BOOLEAN
BEGIN
-- 辞書 'FORM' がロードされていることを確認
CHECK_DICT('FORM', form3, STATUS)
IF STATUS <> 0 THEN
WRITE TPPROMPT(CR,'Loading form.....')
KCL ('CD MF:',STATUS) --KCLのCDコマンドを使います
--ディレクトリをMF:に変更
KCL ( 'LOAD FORM', STATUS) --KCLのLOAD FORMコマンドを使用して
--フォームをロードします。
IF STATUS <> 0 THEN
WRITE TPPROMPT(CR,'loading from failed, STATUS=',STATUS)
ABORT --辞書無しにはこのプログラムを継続できません。
ENDIF
ELSE
WRITE TPPROMPT (CR,'FORM already loaded.')
ENDIF
value_array [1] = 'int_var1'
value_array [2] = 'bool_var'
value_array [3] = 'real_var'
value_array [4] = '[*system*]$group[1].$termtype'
value_array [5] = 'int_var2'
value_array [6] = 'din[1]'
value_array [7] = 'din[1]'
int_var1 = 12345
bool_var = TRUE
real_var = 0
int_var2 = 1
device_stat = TP_PANEL
FORCE_SPMENU(device_stat, SPI_TPUSER2,1)
def_item = 1 -- 最初の項目にカーソルがある状態で開始
DISCTRL_FORM('FORM', form3, value_array, inact_array,
change_array, kc_func_key, def_item, term_char, STATUS);
END runform3

10 KAREL COMMAND LANGUAGE (KCL)


KARELコマンド言語(KAREL command language:KCL)の環境を使うと、多くのコマンドを利用してシステムに指示を送ることが
可能です。KCLコマンドはプログラムの開発と実行、ファイルの処理、システムの情報の取得、そして多くの他の日常作業を
可能にします。
KCL環境はCRT/KB上でMENUS(F10)を押してKCLを選択することで表示可能です。
KCLプロンプトでのコマンド直接実行に加え、コマンドファイルからKCLコマンドを実行可能です。

10.1 コマンドフォーマット
コマンドの入力はコマンドのキーワードと、そのコマンドに関連した引数から成ります。幾つかのコマンドはコマンドの目的

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 98 of 412

を指定する識別子も必要です。
 KCL コマンドのキーワードは、LOAD、RUNのようなアクションを示す単語です。コマンドの引数は、キーワードが何を
対象として実行されることを期待しているか定義する助けとなります。
 多くのKCLコマンドは、コマンドに関連付けられたデフォルトの引数を持っています。これらのコマンドでは、キーワー
ドを入力するだけで、システムがデフォルトの引数を供給します。
 KCLはアスタリスク(*)をワイルドカードとしてサポートしています。ワイルドカードを用いることで、以下のKCLコマン
ドの引数として対象のグループを指定可能です。
 COPY
 DELETE FILE
 DIRECTORY
 KCLの識別子はKAREL言語の識別子と同じ規則に従います。
 KAREL言語でサポートされている全てのデータ型をKCLはサポートしています。 KCLで変数を作成、設定可能です。

2章「言語の要素」、8章「ファイルシステム」も参照して下さい。

10.1.1 デフォルトプログラム
あるプログラム名を、プログラム名の引数のデフォルト値及びファイル名の引数のデフォルト値として設定することが可能で
す。そうすることで、そのプログラム名をタイプすること無くKCLコマンドを発行可能となります。
KCLのデフォルトプログラムは以下の一つを行うことで設定可能です。
 KCLコマンドSET DEFAULTを使用する
 CRT/KB上の一覧画面でプログラムを選択する

10.1.2 変数及びデータ型
KCL>SET VARIABLEコマンドを用いると、変数に値を代入可能です。INTEGER、REAL BOOLEAN、STRING型の値を代入で
きます。変数には配列の要素を代入可能です。VECTOR型の変数は3個の実数(REAL型の値)として代入されます。POSITION
型の変数は6個の実数として代入されます。

付録C「KCLコマンドアルファベット順解説」のKCLコマンド、SET VARIABLE コマンドも参照して下さい。

10.2 コマンドの入力
KCLコマンドはCRT/KBのみから入力可能です。
KCLコマンドを入力するには、
1. CRT/KBでMENUS (F10)を押して下さい。
2. KCLを選択して下さい。
3. KCLプロンプトでコマンドを入力して下さい。
一つ以上のキーワードを必要とするKCLコマンドの、最初のキーワードを入力し、ENTERを押すことにより、追加され得る全
てのKCLキーワードが表示されます。
例えばKCLプロンプトでDELETE を入力すると、可能性のあるコマンドが表示されるでしょう。"FILE, NODE, or
VARIABLE."です。

上矢印キーを押すと最後に入力したコマンドを呼び出すことができます。

10.2.1 短縮形
任意のKCLコマンドは短縮できます。但し短縮形がKCLで固有なものである場合に限ります。例えば、TRAN はTRANSLATE
に固有です。

10.2.2 エラーメッセージ
KCLコマンドを不正確に入力したなら、KCLは適切なエラーメッセージを表示し、KCLプロンプトに戻ってコマンドを再入力
可能な状態にします。上矢印(^)は違反している文字や、違反している単語の開始を示します。

10.2.3 サブディレクトリ
メモリカードではサブディレクトリを使用可能です。全てのファイル関連のKCLコマンドをサブディレクトリ上で実行可能で

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 99 of 412

す。サブディレクトリを多くのレベルにネスト可能です。しかし8レベル以上のネストは推奨しません。

10.3 コマンドプロシージャ
コマンドプロシージャはCFファイルに書かれた一続きのKCLコマンドです。自動的に連続して実行可能です。
 コマンドプロシージャはコマンドを繰り返し何度も打ち込むこと無く、一続きのKCLコマンドの使用を可能にします。
 コマンドプロシージャはRUNCFコマンドを用いて実行されます。

10.3.1 コマンドプロシージャのフォーマット
RUNCFを除く全てのコマンドをコマンドプロシージャ内で使用可能です。確認が必要なコマンドに関しては、一つの行にコマ
ンドと確認を入力しておくことができます。 さもないとKCLは入力行で確認の入力を促します。例10.3.1では CLEAR
PROGRAM AA_01がKCLコマンドで、YES が確認です。

例10.3.1コマンドプロシージャ中の確認
CLEAR PROGRAM AA_01 YES

コマンドプロシージャのネスト
コマンドプロシージャをネストする時は以下のガイドラインに従って下さい。
 %INCLUDE ファイル名を使用してコマンドファイルをネストすることができます。
 コマンドプロシージャのネストは4レベルまでに制限されています。
もし4レベル以上のネストが試みられると、KCLはエラーを検出し、システム変数$STOP_ON_ERRに基づいて適切に対処
します。$STOP_ON_ERRに関しては10.3.3項を参照して下さい。

10.3.3項「エラー処理」も参照して下さい。

継続文字
KCL継続文字であるアンパサンド(&)を用いると、コマンドプロシージャ内でコマンドの入力を1行以上に渡って行うことがで
きます。
KCLコマンドをキーワードもしくは特殊文字の間で中断することができます。
例えばアンパサンド(&)を使って2行にまたがってコマンドを書くことが可能です。
SET VARIABLE &
[CFAMP01]int_var = 1

コメント
コマンドプロシージャに関して記録するために、コメント行を使用可能です。コマンドプロシージャでのコメントの使用には
以下の規則が適用されます。
 コメントの前に二つの連続したハイフン( -- )が付きます。
 コメントは単独の行とすることも、コマンド行の終わりに置くことも可能です。

10.3.2 コマンドプロシージャの生成
コマンドプロシージャはコマンドファイルにコマンドのリストを打ち込んでセーブすれば作成できます。コマンドに関しては
付録C「KCLコマンドアルファベット順解説」を参照して下さい。

10.3.3 エラー処理
KCLがコマンドプロシージャの実行中にエラーを検出した場合、システムのエラー処理の方法は二つ有り、どちらかで処理し
ます。どちらを使用するかは$STOP_ON_ERRの値に依存します。
 KCLエラーが検出された時、$STOP_ON_ERRがTRUEなら、コマンドプロシージャは終了し、KCL>プロンプトに戻りま
す。
 もし$STOP_ON_ERRがFALSEなら、KCLエラーは無視され、コマンドプロシージャは完了まで実行されます。

10.3.4 コマンドプロシージャの実行
コマンドプロシージャのそれぞれのコマンドは、SET VERIFY OFFコマンドが使用されていない限り、実行される時に表示され
ます。それぞれのコマンドの前にコマンドファイルでの行番号が表示されます。
コマンドプロシージャはKCL RUNCFコマンドを用いて実行可能です。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 100 of 412

11 入出力システム
入力/出力(I/O)システムはユーザが定義したI/O信号、システム定義のI/O、通信ポートへのアクセス(KAREL経由)を提供します。ユーザ
定義のI/O信号はKARELプログラムで制御され、周辺装置及びロボットのツールと通信することができます。システム定義のI/O信号は、
KARELシステムにより指定されている信号で、特定の目的用です。シリアル通信ポートの設定も存在します。
ユーザ定義のI/O信号の数は制御装置のハードウェアと選択したモジュールのタイプと数に依存します。

11.1 ユーザ定義信号
ユーザ定義信号は入力及び出力信号でその意味がKARELプログラムによって定義されるものです。ユーザ定義信号は以下の定義済
みポート配列(DOUT[1]等)を通してアクセス可能です。
 DIN (デジタル入力) 及び DOUT (デジタル出力)
 GIN (グループ入力) 及び GOUT (グループ出力)
 AIN (アナログ入力) 及び AOUT (アナログ出力)
ポート配列に加え、ロボットハンドの制御信号にOPEN HAND 及び CLOSE HAND文を通してアクセス可能です。

11.1.1 DIN 及び DOUT 信号


DIN 及び DOUT 信号はKARELプログラム中で単一の入力又は出力線上のデータへのアクセスを提供します。
プログラムはデータをBOOLEAN型として扱います。値はON(アクティブ)又はOFF(非アクティブ)です。信号の極性を定義することが可能
です。active-high (電圧が加えられた時にON)又はactive-low (電圧が加えられていない時にON)のどちらかに定義可能です。
入力信号はKARELプログラム中ではDIN[n]の名称でアクセスされます。ここでnは信号の番号です。
DIN信号を評価すると、システムは入力ポートを読みます。DINが擬似にされていない限り、DIN信号への値の割り当ては不正な操作で
す。DIN信号が擬似にされていない限り、これらはKARELプログラム中で決して設定されません。
DOUT信号を評価するとシステムは指定の出力信号から現在の出力値を返します。 DOUT信号に値を割り当てると、システムはその信
号をON又はOFFにします。

以下の記述でDOUTがONします。
DOUT[n] = TRUE 又は
DOUT[n] = ON

以下の記述でDOUTがOFFします。
DOUT[n] = FALSE 又は
DOUT[n] = OFF

デジタル信号をI/O装置のポートに割り当てるには、教示操作盤のI/O画面又はビルトインプロシージャSET_PORT_ASGを使用します。

11.1.2 GIN及びGOUT信号
GIN及びGOUT信号は、KARELプログラム中で複数のDIN及びDOUTを入力又は出力のグループとしてアクセスすることを可能にしま
す。1つのグループで1から16bitのサイズが使用可能です。各ビットは入力又は出力信号に相当します。グループのサイズ及び特定のグ
ループに関連付けるDIN又はDOUT信号を定義する必要があります。第一の(最も小さい番号の)ポートはグループの値の最下位ビットで
す。
プログラムはデータをINTEGER型として扱います。未使用のビットは0として解釈されます。
入力信号はKARELプログラム中ではGIN[n]の名前でアクセスされます。ここで"n"は信号番号です。
GIN信号を評価すると、システムは入力ポートを読みます。GINが擬似にされていない限り、GIN信号への値の割り当ては不正な操作で
す。GIN信号が擬似にされていない限り、これらはKARELプログラム中で決して設定されません。
GOUT信号を設定すると、システムは指定の出力ポートから現在の出力値を返します。GOUT信号へ値を割り当てると、システムは出力
操作を行います。
グループ出力を制御するためには、所望の2進数の出力に等しいINTEGERの値を用います。例えば、GOUT[n]=25は以下の2進数の出
力結果です。"0000000000011001"。ここで1は出力ONで、0は出力OFFです。最下位ビットは右側の最初のビットです。
グループ信号をI/O装置のポートに割り当てるには、教示操作盤のI/O画面又はビルトインプロシージャSET_PORT_ASGを使用します。

11.1.3 AIN 及び AOUT 信号

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 101 of 412

AIN及びAOUT信号は、KARELプログラム中でのアナログ電気信号へのアクセスを提供します。入力信号に関しては、アナログデータ
はシステムによってデジタル化され、KARELプログラムに16bitの2進数として渡されます。 そのうち意味のあるビット数はアナログモ
ジュールに依存し、14,12,8ビットのいずれかです。プログラムはデータをINTEGER型として扱います。出力信号に関しては、プログラム指
定のINTEGERに相当するアナログ電圧が出力されます。
入力信号はKARELプログラム中ではAIN[n]の名前でアクセスされます。ここで"n"は信号番号です。
AIN信号を評価すると、システムは入力ポートを読みます。AIN信号が擬似にされていない限り、教示操作盤でのAIN信号の設定は無
効な操作です。AIN信号が擬似にされていない限り、これらはKARELプログラム中で決して設定されません。
教示操作盤に表示される値、もしくはアナログ入力ポートから読まれる値は、ポートに供給される電圧と、アナログデジタル変換によって
供給される意味のあるデータのビット数に依存します。正の入力値に関しては、読まれる値は0から2**(N-1) -1の範囲にあります。ここで
Nは意味のあるデータのビット数です。12bitの装置(大部分のFANUCモジュール)では2**11–1、つまり2047となります。
負の入力値に関しては、電圧が最小の検出可能な負の電圧値から装置で処理できる最大の負の値に変わる時に、入力値が2**N - 1か
ら2**(N-1)の範囲となります。 12bitの装置では、4095 から 2048となります。
この入力値を電圧表示の実数値に変換するKARELのロジックの例を示します。ここでは+10Vから-10Vの範囲を扱う12bitの装置を使用
しています。

例11.1.3入力値を電圧表示の実数値に変換するKARELロジック
V: REAL
AINP: INTEGER
AINP = AIN[1]
IF (AINP <= 2047) THEN
V = AINP * 10.0 /2047.0
ELSE
V = (AINP - 4096) * 10.0 / 2047
ENDIF

TPプログラムでは、以下のロジックが使用されるでしょう。
R[1] = AI[1]
IF (R[1] > 2047) JMP LBL[1]
R[2] = R[1] * 10
R[2] = R[2] / 2047
JMP LBL[2]
LBL[1]:
R[2] = R[1] - 4096
R[2] = R[2] * 10
R[2] = R[2] / 2047
LBL[2]

R[2]が求める電圧です。
AOUT信号を評価するとシステムは指定の出力信号から現在の出力値を返します。AOUT信号へ値を割り当てると、システムは出力操
作を行います。
KARELプログラム中ではAOUT[n]=(整数値)でAOUTをONできます。AOUT信号線[n]に指定のINTEGERの値の電圧が出力されます。
例えば、AOUT[1] = 1000は+5Vの信号をアナログ出力線1番に出力するでしょう(12bit有効な出力モジュールを用いています)。
アナログ信号を割り当てるには、教示操作盤のI/O画面又はビルトインプロシージャSET_PORT_ASGを使用します。

11.1.4 ハンド信号
KAREL言語でロボットアーム先端のツールを制御するために使用する、一組のロボットハンド制御信号にアクセス可能です。アクセスは
ポート配列よりはKAREL言語のHAND文で行います。HAND信号はKARELプログラムが二つの出力信号にアクセス可能とします。そ
の信号は協調してツールを制御します。その信号はオープン線とクローズ線に指定されています。2つのHAND信号までサポートしてい
ます。
HAND[1]は物理的な出力としてRO[1]及びRO[2]を使用します。
HAND[2]はRO[3]及びRO[4]を用います。
以下のKAREL言語の文は信号の制御のために提供されています。ここで"n"は信号番号です。
OPEN HAND n オープン線をONとし、クローズ線をOFFとします。
CLOSE HAND n はオープン線をOFFとし、クローズ線をONとします。
RELAX HAND n は両方の線をOFFにします。

11.2 システム定義信号

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 102 of 412

システム定義のI/O信号は、KARELシステムにより指定されている信号で、特定の目的用です。特定のUOP信号を除き、システム定義
のI/O信号は再割付できません。
システム定義の信号には以下のポート配列を通じてアクセス可能です。
 ロボットデジタル入力(RI)及びロボットデジタル出力(RO)
 操作パネル入力(OPIN)及び操作パネル出力(OPOUT)
 教示操作盤入力(TPIN)及び教示操作盤出力(TPOUT)

11.2.1 ロボットデジタル入力及び出力信号(RI/RO)
ロボットI/Oは制御装置とロボットの間の入力及び出力です。これらの信号はロボット上にあるEE(エンドエフェクタ)コネクタに送られます。
ロボット入力とロボット出力(RI及びRO)の数はシステムの軸数に依存します。ロボットI/Oの構成に関しては、適当なアプリケーションの取
扱説明書を参照して下さい。
RI[1] から RI[8] はツールからの入力に使用可能です。これらの全て、もしくは幾つかを使用可能です。どれだけ使用可能かはロボットの
機種に依存します。詳細はロボットの機種に応じた保守説明書を参照して下さい。
RO[1] から RO[8] はツールの制御に使用可能です。これらの全て、もしくは幾つかを使用可能です。どれだけ使用可能かはロボットの機
種に依存します。詳細はロボットの機種に応じた保守説明書を参照して下さい。
RO[1] から RO[4] はOPEN, CLOSE,RELAX HANDで用いる信号セットと同じです。 11.1.4項をご覧下さい

11.2.2 操作パネル入力及び出力信号(OPIN/OPOUT)
操作パネル入力及び出力は標準操作パネル(SOP)及びユーザ操作パネル(UOP)の入力及び出力です(UOPは通常周辺機器I/Oの名が
ありますが、以下ユーザ操作パネルと表記します)。
操作パネル入力は以下のように割り当てられています。
 最初の16点、OPIN[0] - OPIN[15]は標準操作パネルに割り当てられています。
 次の18点、OPIN[16] - OPIN[33]は、ユーザ操作パネル(UOP)に割り当てられています。プロセスI/Oボードを持っているなら、これら
18のUOP信号はプロセスI/Oボードの最初の18の入力ポートに割り付けられます。
操作パネル出力は以下のように割り当てられています。
 最初の16点、OPOUT[0] - OPOUT[15]は標準操作パネルに割り当てられています。
 次の20点、OPOUT[16] - OPOUT[35]はユーザ操作パネル(UOP)に割り当てられています。プロセスI/Oボードを持っているなら、こ
れら20のUOPはそのプロセスI/Oボードの最初の20の出力ポートに割り付けられます。
標準操作パネル入力及び出力信号
標準操作パネル入力及び出力は、KARELシステムでは、OPIN[0]-OPIN[15]、OPOUT[0]-OPOUT[15]として認識されます。教示操作盤
の画面ではSI[0]-SI[15]及びSO[0]-SO[15]として認識されます。表11.2.2(a)は標準操作パネル入力信号の一覧です。表11.2.2(b)は標準
操作パネル出力信号の一覧です。詳細については各アプリケーションの取扱説明書を参照して下さい。

表11.2.2(a) 標準操作パネル入力信号
OPIN[n] SI[n] 機能 説明
OPIN[0] SI[0] 未使用 -
この信号は通常OFFになっています。それは
OPIN[1] SI[1] FAULT RESET FAULT RESETボタンが押されていないこと
示しています。
この信号は通常OFFになっています。それは
OPIN[2] SI[2] REMOTE 御装置がリモートに設定されていないことを
しています。
この信号は通常ONになっています。それは
OPIN[3] SI[3] ホールド HOLDボタンが押されていないことを示して
ます。
この信号は通常OFFになっています。それは
OPIN[6] SI[6] CYCLE START CYCLE STARTボタンが押されていないこと
示しています。
OPIN[7] - OPIN[15] SI[7], SI[10] – SI[15] 未使用 -
CE/CR 選択 b0(ビット0) この信号は2ビットでモード選択スイッチの状
SI[8] SI[9]
CE/CR 選択 b1(ビット1) 態を示します。

表11.2.2(b) 標準操作パネル出力信号
OPOUT[n] SOI[n] 機能 説明
この信号は制御装置がリモートにセットさ
OPOUT[0] SO[0] REMOTE LED
れていることを示します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 103 of 412

この信号はCYCLE STARTボタンが押され
OPOUT[1] SO[1] CYCLE START たか、プログラムが実行中であることを示
します。
この信号はHOLDボタンが押されたか、
OPOUT[2] SO[2] ホールド
HOLD条件が存在することを示します。
この信号はエラーが発生したことを示しま
OPOUT[3] SO[3] FAULT LED
す。
この信号はCMOSバッテリの電圧が低いこ
OPOUT[4] SO[4] BATTERY ALARM
とを示します。
ユーザLED#1 (Pシリーズのロ
OPOUT[5] SO[5] この信号はユーザにより定義されます。
ボットではパージ完了)
OPOUT[6] SO[6] USER LED#2 この信号はユーザにより定義されます。
この信号は教示操作盤が有効になっている
OPOUT[7] SO[7] 教示操作盤有効
ことを示します。
OPOUT[8] - OPOUT
SO[8] - SO[15] 未使用 -
[15]

ユーザ操作パネル入力及び出力信号
ユーザ操作パネル入力及び出力信号(周辺機器I/O)はKARELシステムでは、OPINT[16]-OPIN[33]及びOPOUT[16]-OPOUT[35]として
認識されます。教示操作盤上の画面ではUI[1]-UI[18]及びUO[1]-UO[20]として認識されます。プロセスI/Oボード上では、UOP入力信号
は最初の18点のデジタル入力信号として割り付けられます。UOP出力信号は最初の20のデジタル出力信号に割り付けられます。表
11.2.2(c)はユーザ操作パネル入力信号の一覧及び説明です。 表11.2.2(d)はユーザ操作パネル出力の一覧です。図11.2.2(a)及び図
11.2.2(b)はUOPのタイミングを図解しています。詳細については各アプリケーションの取扱説明書を参照して下さい。

表11.2.2(c) ユーザ操作パネル入力信号
OPIN[n] UI[n] 機能 説明
*IMSTPは瞬時停止信号(immediate stop software signal)です。 *IMSTPは通
常オンになっています。この信号がオフになると以下の処理を行います。
 アラームを発生させてサーボ電源を落とします。
 ロボットの動作を瞬時停止して、プログラムの実行を中断します。

警告
*IMSTP *IMSTPはソフトウェアによって制御され
OPIN[16] UI[1]
常時有効 ている信号で、安全目的のためには非常停
止と連動させるため、操作パネルプリント
板のEMGIN1, EMGIN2信号とともにお使い
下さい。これらの信号に関しては、保守説
明書を参照して下さい。

*HOLDは外部ホールド信号です。*HOLD入力は、通常オンになっています。
この信号がオフになると、以下の処理を行います。
*HOLD  実行中の動作を減速停止して、プログラムの実行を中断します。
OPIN[17] UI[2]
常時有効  一般事項の設定で、「一時停止でのサーボオフ」を有効に設定している
と、ロボットを停止した後、アラームを発生させてサーボ電源を落としま
す。
*SFSPDは安全速度信号(safety speed input signal)です。この信号は通常安全
防護柵の安全プラグに接続されています。*SFSPD入力は、通常オンになっ
ています。この信号がオフになると、以下の処理を行います。
 実行中の動作を減速停止して、プログラムの実行を中断します。この
時、速度オーバライドを$SCR.$FENCEOVRDで指定した値に落としま
す。
*SFSPD
OPIN[18] UI[3]  *SFSPD入力がオフの状態で、教示操作盤よりプログラムが起動された
常時有効
場合、 速度オーバライドを$SCR.$SFRUNOVLIMで指定された値に落と
します。又、ジョグ送りが実行された場合、$SCR.$SFJOGOVLIMで指定
された値に落とします。*SFSPDがオフの状態で、速度オーバライドをこ
の指定値以上に上げることはできません。

警告

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 104 of 412

*SFSPD信号はソフトウェアによって制御
されている信号です。安全目的のためには
非常停止と連動させる場合、操作パネルプ
リント板のFENCE1, FENCE2信号と共に
お使い下さい。これらの信号に関しては、
保守説明書を参照して下さい。
CSTOPIはサイクル停止信号(cycle stop input)です。 現在実行中のプログラ
ムを終了します。RSRによる待ち状態のプログラムを解除します。
 システム設定画面で、「CSTOPIでのプログラム強制終了」が無効なら
ば、 現在実行中のプログラムを最後まで実行した後で終了します。 RSR
によって待ち状態になっているプログラムを解除(クリア)します。
 システム設定画面で、「CSTOPIでのプログラム強制終了」が有効なら
ば、 現在実行中のプログラムを即座に終了します。 RSRによって待ち状
CSTOPI 態になっているプログラムを解除します。
OPIN[19] UI[4]
常時有効

警告
システム設定画面で「CSTOPIでのプログ
ラム強制終了」が無効ならば、CSTOPIは
実行が終了するまでそのプログラム実行を
停止しません。

FAULT_RESETは外部アラーム解除信号です。アラームを解除します。サー
FAULT_RESET ボ電源が落ちている時は、サーボ電源を立ち上げます。この時、サーボが立
OPIN[20] UI[5]
常時有効 ち上がるまでは、アラームは解除されません。この信号は、標準で立下りの
時に機能します。
STARTは外部起動信号(スタート)です。この信号は1度オンになってオフ
になる立ち下がりの時に機能します。この信号を受け取った時には、以下の
START 処理を行います。
ロボットがリモー  システム設定画面で「再開専用(外部START)」が無効ならば、教示操
OPIN[21] UI[6] ト条件にある時 作盤で選択されているプログラムの現在カーソルのある行番号から実行さ
(CMDENBL = れます。一時停止されていたプログラムもまた続行します。
ON)有効  システム設定画面で「再開専用(外部START)」が有効ならば、一時停
止しているプログラムを続行します。一時停止状態にないプログラムは起
動できません。
ENBLは動作許可信号(イネーブル)です。ロボットの動作を許可して、ロボッ
トを動作可能状態にします。この信号がオフである時、ジョグ送りによるロ
ENBL
OPIN[23] UI[8] ボットの動作や、動作(グループ)を含むプログラムの起動は禁止されま
常時有効
す。またプログラムが実行中の時は、この信号のオフによって一時停止しま
す。
RSR1/PNS1 RSR1-8 はロボット起動要求信号(robot service request )です。この信号の1
RSR2/PNS2 つを受け取った時には、その信号に対応するRSRプログラムが、自動運転
RSR3/PNS3, を行うために選択・起動されます。他のプログラムが実行中又は一時停止中
RSR4/PNS4, の時は、選択したプログラムを待ち行列に加えて、実行中のプログラムが終
RSR5/PNS5, 了した後に、起動します。RSR(ロボット起動要求)についてはアプリケー
OPIN[24]- UI[9]- UI RSR6/PNS6, ションの取扱説明書を参照して下さい。
OPIN[31] [16] RSR7/PNS7, PNS 1-8 はプログラム番号選択(program number select)信号です。
RSR8/PNS8 PNSTROBE 入力を受け取った時に、PNS1?8 入力を読み込んで、実行する
ロボットがリモー プログラムを選択します。他のプログラムが実行中又は一時停止中の時は、
ト条件にある時 この信号は無視されます。リモート条件が成立している時、PNSTROBE が
(CMDENBL = オンの間は、教示操作盤によるプログラム選択が禁止されます。PNS(プログ
ON)有効 ラム番号選択)についてはアプリケーションの取扱説明書を参照して下さい。
PNSTROBE。
ロボットがリモー
PNSTROBEはPNSストローブ信号(program number selct strobe)です。 PNS
OPIN[32] UI[17] ト条件にある時
の説明を参照して下さい。
(CMDENBL =
ON)有効

自動運転起動信号(プロダクションスタート)です。現在選択されているプ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 105 of 412

ログラムを1行目から起動します。この信号は1度オンになって、オフにな
PROD_START ロ
る立ち下がりの時に機能します。PNSと共に使われた場合は、PNSに
ボットがリモート
よって選択されたプログラムを第1行から実行します。PNSと共に使われ
OPIN[33] UI[18] 条件にある時
なかった場合は、教示操作盤によって選択されたプログラムを第1行から実
(CMDENBL =
行します。他のプログラムが実行中又は一時停止中の時は、この信号は無視
ON)有効
されます。図11.2.2 (b)をご覧下さい

表11.2.2(d) ユーザ操作パネル出力信号
OPOUT[n] UO[n] 機能 説明
CMDENBL(command enable)は入力受付可能信号です。以下の条件が成立
した時に出力します。この信号は、リモート制御装置から動作(グルー
プ)を含むプログラムの起動ができることを示しています。
OPOUT[16] UO[1] CMDENBL  動作可能条件が成立している
 リモート条件が成立している
 連続運転モードである(シングルステップ無効)

SYSRDY(system ready)はシステム準備完了信号です。システム準備完了
信号は、サーボ電源が立上がっている時に出力します。ロボットを動作可
能状態にします。動作可能状態において、ジョグ送りの実行や、動作(グ
OPOUT[17] UO[2] SYSRDY ループ)を含むプログラムの起動ができます。動作可能状態は、以下の動
作可能条件が成立する時です。
 周辺機器 I/O の ENBL 入力がオンである
 サーボ電源が立ち上がっている(アラーム状態でない)
プログラム実行中信号(プログラムランニング)は、プログラムが実行中
OPOUT[18] UO[3] PROGRUN の時に出力します。プログラムが一時停止中は、出力しません。 図11.2.2
(b)をご覧下さい
PAUSEDは一時停止中信号です。プログラムが一時停止中で、再開を待っ
OPOUT[19] UO[4] PAUSED
ている状態にある時に出力します。
HELDはホールド中信号です。ホールド中信号は、ホールドボタンが押さ
OPOUT[20] UO[5] HELD れている時や HOLD 信号を入力している時に出力します。ホールドボタ
ンが離されると、出力しません。
FAULTはアラーム信号です。 アラーム信号は、システムにアラームが発
OPOUT[21] UO[6] FAULT 生した時に出力します。FAULT_RESET 入力によってアラームは解除さ
れます。警告時( WARN アラーム)には、出力しません。
基準点信号(アットパーチ)です。ロボットが予め定義された基準位置に
いる時に出力します。基準点は最大3点まで定義できますが、この信号は
OPOUT[22] UO[7] ATPERCH ロボットが第1基準点にある時に出力されます。その他の基準点について
は、汎用信号を割り当てます。アプリケーションに応じた取扱説明書の
「基準点の設定」を参照して下さい。
TPENBL(teach pendant enable)は教示操作盤有効信号です。教示操作盤の
OPOUT[23] UO[8] TPENBL
有効スイッチがオンの時に出力されます。
BATALM(battery alarm)はバッテリ異常信号です。バッテリ異常信号は、
制御装置又は、ロボットのパルスコーダのバックアップバッテリ電圧低下
OPOUT[24] UO[9] BATALM
アラームを示します。制御装置の電源をオンにして、バッテリの交換を
行って下さい。
BUSYは処理中信号です。プログラムの実行中または教示操作盤での作業
OPOUT[25] UO[10] BUSY
の処理中に出力されます。プログラムが一時停止中は、出力しません。

ACK 1-8 はRSR受付確認信号(acknowledge)1番から8番です。RSR受付確


ACK1/SNO1, 認信号は、RSR機能が有効の時、組み合わせて使用します。RSR 入力を
ACK2/SNO2, 受付けた時に、確認として対応する信号がパルス出力されます。パルス幅
ACK3/SNO3, は指定することができます。RSR(ロボット起動要求)についてはアプリ
OPOUT[26] UO[11]- ACK4/SNO4, ケーションの取扱説明書を参照して下さい。 図11.2.2 (a)をご覧下さい。
OPOUT[33] UO[18] ACK5/SNO5, SNO 1-8 は選択プログラム番号信号です。選択プログラム番号信号は、
ACK6/SNO6, PNS機能が有効の時、組み合わせて使用します。現在選択されているプロ
ACK7/SNO7, グラム番号( PNS1?8 入力に対応する信号)を、確認としてバイナリコー
ACK8/SNO8 ドで常時出力します。新たなプログラムの選択によって SNO1?8 は書変
わります。PNS(プログラム番号選択)についてはアプリケーションの取扱

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 106 of 412

説明書を参照して下さい。 図11.2.2 (b)をご覧下さい。


SNACK(signal number acknowledge) はPNS受付確認信号です。PNS機能
が有効の時、組み合わせて使用します。PNS入力を受付けた時に、確認と
OPOUT[34] UO[19] SNACK してパルス出力されます。パルス幅は指定することができます。 PNS(プ
ログラム番号選択)についてはアプリケーションの取扱説明書を参照して下
さい。 図11.2.2 (b)をご覧下さい

図11.2.2(a) RSRタイミングチャート

図11.2.2(b) PNSタイミング チャート

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 107 of 412

11.2.3 教示操作盤入力及び出力信号(TPIN/TPOUT)
教示操作盤入力信号(TPIN)は教示操作盤のキーによって生成された入力信号を読み取るアクセスを提供します。教示操作盤入力は
TPINポート配列を通じてアクセス可能です。KARELプログラムは教示操作盤入力をBOOLEAN型として扱います。値はON(アクティブ--
キーが押されている)もしくはOFF(非アクティブ--キーが押されていない)のいずれかです。TPIN信号はKARELプログラム中ではTPIN[n]
の名前でアクセスされます。ここで"n"は信号番号です。番号は内部処理で割り付けられます。 教示操作盤入力信号の割付に関しては
表11.2.3を参照して下さい。
表11.2.3教示操作盤入力信号の割付
TPIN[n] 教示操作盤のキー
非常停止及びデッドマンスイッチ
TPIN[250] 非常停止
TPIN[249] ON/OFFスイッチ
矢印キー
TPIN[212] 上矢印
TPIN[213] 下矢印
TPIN[208] 右矢印
TPIN[209] 左矢印
TPIN[0] 左もしくは右のシフト
TPIN[204] シフト+上矢印
TPIN[205] シフト+下矢印
TPIN[206] シフト+右矢印
TPIN[207] シフト+左矢印
キーパッド(シフトの状態を問わない)
TPIN[13] 入力
TPIN[8] 取り消し
TPIN[48] 0
TPIN[49] 1
TPIN[50] 2
TPIN[51] 3
TPIN[52] 4
TPIN[53] 5
TPIN[54] 6
TPIN[55] 7
TPIN[56] 8
TPIN[57] 9
ファンクションキー
TPIN[128] 前戻り
TPIN[129] F1
TPIN[131] F2
TPIN[132] F3
TPIN[133] F4
TPIN[134] F5
TPIN[135] F→
TPIN[136] シフト+前戻り
TPIN[137] シフト+F1
TPIN[138] シフト+ F2
TPIN[139] シフト+ F3
TPIN[140] シフト+ F4
TPIN[141] シフト+ F5
TPIN[142] シフト+ F→
画面キー
TPIN[143] 一覧
TPIN[144] 画面選択
TPIN[145] 編集
TPIN[146] データ
TPIN[147] 補助
TPIN[148] 項目選択

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 108 of 412

TPIN[149] +%
TPIN[150] -%
TPIN[151] ホールド
TPIN[152] ステップ
TPIN[153] RESET
TPIN[240] ウィンドウ
TPIN[203] ヘルプ
TPIN[154] シフト+項目選択
TPIN[155] シフト+ +%
TPIN[156] シフト+ -%
TPIN[157] シフト+ステップ
TPIN[158] シフト+ホールド
TPIN[159] シフト+リセット
TPIN[227] シフト+ウィンドウ
TPIN[239] シフト+ヘルプ
ユーザキー
TPIN[173] ユーザキー1
TPIN[174] ユーザキー2
TPIN[175] ユーザキー3
TPIN[176] ユーザキー4
TPIN[177] ユーザキー5
TPIN[178] ユーザキー6
TPIN[210] ユーザキー7
TPIN[179] シフト+ユーザキー1
TPIN[180] シフト+ユーザキー2
TPIN[181] シフト+ユーザキー3
TPIN[182] シフト+ユーザキー4
TPIN[183] シフト+ユーザキー5
TPIN[184] シフト+ユーザキー6
TPIN[211] シフト+ユーザキー7
動作キー
TPIN[185] 前進
TPIN[186] 後退
TPIN[187] 手動送り座標系
TPIN[188] +X
TPIN[189] +Y
TPIN[190] +Z
TPIN[191] +X 回転
TPIN[192] +Y 回転
TPIN[193] +Z 回転
TPIN[194] -X
TPIN[195] -Y
TPIN[196] -Z
TPIN[197] -X 回転
TPIN[198] -Y 回転
TPIN[199] -Z 回転
TPIN[226] シフト+ FWD
TPIN[207] シフト+ BWD
TPIN[202] シフト+ COORD
動作キー の続き

TPIN[214] シフト+X
TPIN[215] シフト+Y
TPIN[216] シフト+Z
TPIN[217] シフト+ +X 回転
TPIN[218] シフト+ +Y 回転
TPIN[219] シフト+ +Z回転
TPIN[220] シフト+ -X
TPIN[221] シフト+ -Y

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 109 of 412

TPIN[222] シフト+ -Z
TPIN[223] シフト+ -X 回転
TPIN[224] シフト+ -Y回転
TPIN[225] シフト+ -Z 回転

3個の教示操作盤出力信号が使用可能です。
 TPOUT[6] - 教示操作盤のユーザLED#1を制御
 TPOUT[7] - 教示操作盤のユーザLED#2を制御
 TPOUT[8] - 教示操作盤のユーザLED#3を制御

11.3 シリアル入出力
11.3.1 シリアル入出力
シリアルI/Oは周辺シリアル装置との通信を可能とします。例えば、シリアルI/Oを通信ポートの一つから制御装置にケーブルで接続され
ているリモート端末にメッセージを書くために使用可能かもしれません。
シリアルI/Oを使うためには、シリアル装置と適切なケーブルを提供する必要があります。電気的な仕様に関しては保守説明書を参照し
て下さい。
シリアルデータを読み書きするために使用する通信ポートは、システムソフトウェアで定義されています。それぞれのソフトウェアのポート
は制御装置上の物理的なコネクタに関連付けられています。その物理的なコネクタに通信ケーブルを接続します。
図11.3.1は制御装置上のポートの位置を示しています。

図11.3.1 制御装置上のポートの位置
ポート

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 110 of 412

ポートの設定とは、制御装置のシリアルポートを指定の装置を使用するために初期化することです。指定の装置とは例えばCRT/KBで
す。ポートの初期化ではポートに特定の情報を設定します。設定はポートに接続する装置の種類に基づいて行われます。これは教示操
作盤のポート設定画面で行います。
制御装置は4個までのシリアルポートをサポートしています。これらのポートには数種類の異なる種類の装置を接続可能です。
4個までのポートが使用可能です。それはP1-P4と呼ばれます。表11.3.1(a)がポートの一覧です。P2からP4はあれば設定可能ですが、教
示操作盤用のポートP1は設定できません。

表11.3.1(a) ポートP1 - P4
ポート 画面上の項目名 ポートの種類 使用方法 標準設定のデバイス
教示操作盤

P1 RS-422 教示操作盤 教示操作盤
これは専用のポートで変更
できません。
P2 JRS16 RS-232–C RS-232-C 試験端末
P3 メインボード上のJD17 RS-232–C RS-232-C KCL
メインCPUボード上のJD17 このポート 任意の装置
P4 は$RS232_NPORT=4の場合に表示され RS-422 No use
ます。

装置
ポート1を除いて、各ポートの標準の通信設定を修正可能です。ポート1は教示操作盤(TP)専用です。表11.3.1(b)はポートに接続可能な
装置の標準設定です。

表11.3.1(b) 装置の標準通信設定
装置 通信速度(baud) パリティ ビット ストップ ビット 制限時間(sec)
センサ* 4800 奇数 1 bit 0
ホスト* 4800 奇数 1 bit 0
KCL/CRT 9600 無し 1 bit 0
試験端末 9600 無し 1 bit 0
ファクトリーターミナ
9600 無し 1 bit 0

表示端末 9600 無し 1 bit 0
未使用 9600 無し 1 bit 0
現在位置出力(現在位置
出力機能(オプション) 9600 無し 1 bit 0
向け)
PMC プログラマ 9600 無し 2 bit 0
タッチパネル 19200 奇数 1 bit 0
*3個の設定を調整することは可能です。しかし調整すると期待したように機能しない可能性があります。なぜならそれらは外部装置に接
続されているからです。
ハードウェアを接続し、適切なポートを設定し外部ポートが接続された後、KAREL言語のOPEN FILE , READ, WRITE文を使用して周辺
装置と通信を行うことが可能です。
高レベルの通信プロトコルもオプション機能としてサポートされています。

ポートの設定については各アプリケーションの取扱説明書を参照して下さい。
ビルトインについては付録A「KAREL言語アルファベット順解説」を参照して下さい。

12 マルチタスク
マルチタスクを使用すると、制御装置上で一つ以上のプログラムをタイムシェアリングで実行可能です。その結果複数のプログラムが同
時に実行されているかのように見えます。
マルチタスクは次のような場合に特に有効です。幾つかの系列の作業を実行していて、その間で相互に干渉する場合もあるが、基本的
には独立している場合です。例えば以下の通りです。
・ 入力信号を監視して出力信号を設定するプロセス

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 111 of 412

・次のことに気付いていることが重要です。複数のタスクが同時に動作しているように見えるが、同じプロセッサ上を使用していること。その
ログを生成し、セルの制御装置にそれを転送するプロセス。セルの制御装置からコマンドその他の入力データの受信も行う。

結果、実際にはある一瞬には一つのタスクしか実行されていないことです。割り込み可能な文の実行は例外ですが、ある文の実行が開
始されると、それが完了しないと他のタスクは実行できません。以下の文が割り込み可能です。
・ READ
・ DELAY
・ WAIT
・どのようにシステムが最初に実行するタスクを決定するかについては12.3節「タスクスケジューリング」を参照して下さい。
WAIT FOR

 マルチタスクの用語
この章では以下の用語及び表現を用います。
・ タスク又はユーザタスク
タスク又はユーザタスクとは、実行中もしくは一時停止中のユーザプログラムのことです。タスクは「インタプリタ」によって実行されま
す。タスクはプログラムが開始すると生成されます。そのタスクに割り当てられたインタプリタが別のタスクに割り当てられた時に消滅
します。
・ インタプリタ
インタプリタはユーザプログラムを実行するシステムの構成要素です。コールドスタート及びコントロールスタートで、(コントロールス
タートの最大数設定画面の「タスク」の設定値+2)個のインタプリタが生成されます。各インタプリタが(タイムシェアリングで見かけ上)
同時にタスクを実行可能です。
・ タスク名
タスク名はタスクが生成された時に指定されたプログラム名です。タスクを生成する時、実行すべきプログラム名をタスク名として指
定します。

タスクが生成されてしまうと、タスク名は変更されません。 それ故に、外部ルーチンが実行されている時、現
在実行しているプログラム名はタスク名と同じではありません。 タスクに何かを依頼する時は、現在のプログ
ラム名ではなくタスク名を使用して下さい。

 インタプリタの割り当て
タスクが開始されると、インタプリタに割り当てられます。タスクが割り当てられたインタプリタ(1,2,3......)がタスク番号を決定します。タスク
番号はコンディションハンドラのPAUSE PROGRAM, ABORT PROGRAM,CONTINUE PROGRAMアクションで使用されます。
GET_TSK_INFOビルトインを用いてあるタスクのタスク番号を決定することができます。
以下にタスクをインタプリタに割り当てる際の規則を示します。
・ もしタスクが既にインタプリタに割り当てられているなら、同じインタプリタを用います。
・ タスクは、タスクが割り当てられていない利用可能な最初のインタプリタに割り当てられます。
・ が新しいタスクに割り当てられます。
全てのインタプリタにタスクが割り当てられているとします。この場合、既に終了したタスクが割り当てられている最初のインタプリタ

・ 上記のいずれも行えないなら、タスクを開始することはできません。
 タスクスケジューリング
現在実行中(終了も一時停止もしていない)のタスクは以下のいずれかが発生するまで文(statement)を実行します。
・ 停止条件の発生
・ プライオリティの高いプログラムが実行可能になる
・ タイムスライスが切れた
・以下が停止条件の例です。
プログラムが終了もしくは一時停止する

・ 読み取り操作の終了を待っている
・あるタスクが(プログラムの実行状態として)実行中の状態にあり停止条件が成立していないなら、そのタスクは実行可能な状態にありま
WAIT, WAIT FOR, DELAY文の完了を待っている

す。ある時点に於いて、唯一つのタスクのみが実際に実行されています。一つ以上のタスクが実行可能な状態に有る時、どのタスクを実
行するかの決定に関し2つの規則があります。
・ プライオリティ(優先順位)
プライオリティの異なる2つ以上のタスクが実行可能状態にあるなら、高いプライオリティのタスクがまず実行されます。詳細は12.3.1
項「優先順位スケジューリング」を参照して下さい。
・ タイムスライス
同じプライオリティの2つ以上のタスクが実行可能状態にあるなら、それらタスクの実行はタイムスライスされます。詳細は12.3.2項

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 112 of 412

「タイムスライス」を参照して下さい。

12.3.1 優先順位スケジューリング
プライオリティ(優先順位)の異なる二つ以上のタスクが実行可能状態にあるなら、最も高いプライオリティのタスクが最初に実行されま
す。タスクのプライオリティはそのプライオリティ値によって決定されます。プライオリティ値は-8から143の間である必要があります。プライ
オリティ値が小さい程タスクのプライオリティは高いです。
例えば、TASK_Aのプライオリティ値が50、TASK_Bは60で共に実行可能状態にあるとします。この場合TASK_Aが実行可能状態にある
限り、TASK_Aが先に実行されます。
タスクのプライオリティは以下のいずれかで設定可能です。
・ 標準では、それぞれのユーザタスクはプライオリティ50を割り当てられています。
・ KARELプログラムは%PRIORITYトランスレータディレクティブを使用可能です。
・他のユーザタスクへの影響に加え、タスクのプライオリティはそれを実行しているインタプリタのプライオリティにも影響します。他のシステ
SET_TSK_ATTRビルトインを使うと任意のタスクの現在のプライオリティを設定可能です。

ムの機能のプライオリティにも相対的に影響します。ユーザタスクがシステムの機能より高いプライオリティ(小さいプライオリティ値)を
持っているなら、ユーザタスクが実行可能状態にある限り、システムの機能は実行されません。ユーザタスクのプライオリティの範囲は高
い側で制限されています。ユーザプログラムが動作の補間を妨げないようにするためです。動作の補間とは動作の完了に必要な更新を
指しています。
以下の表は他のシステム機能のプライオリティを幾つか示しています。

表12.3.1 システム機能のプライオリティ表
プライオリティ システム機能 機能の遅れの影響
-8 最大プライオリティ 新規動作の実行が遅れます。
-1 動作のプランニング 新規動作の実行が遅れます。
4 TPジョグ 教示操作盤からのジョグが遅れます。
54 エラーロガー アラーム履歴の更新が遅れます。
73 KCL KCLコマンドの実行が遅れます。
82 CRTマネージャ CRTのソフトキーの処理が遅れます。
88 TPマネージャ 一般的な教示操作盤の処理、操作が遅れます。
143 最低プライオリティ 上記のいずれも遅れません。

12.3.2 タイムスライス
プライオリティの同じ2つ以上のタスクが実行可能状態にあるなら、タイムスライスによりシステムのリソースを共有します。言い換えるな
ら、代わる代わるシステムを使用します。
タイムスライスはプライオリティの同じ他のタスクの実行を許しますが、低いプライオリティのタスクの実行は許しません。
あるタスクの標準のタイムスライスは256msecです。%TIMESLICEディレクティブやSET_TSK_ATTRビルトインを用いて他の値を設定可
能です。

 タスクの開始
タスクの開始には多くの方法があります。
・ KCL RUNコマンド:付録C「KCLコマンドアルファベット順解説」を参照して下さい。
・ 操作パネルのスタートキー:適切なアプリケーションの取扱説明書を参照して下さい。
・ ユーザ操作盤のスタート信号:適切なアプリケーションの取扱説明書を参照して下さい。
・ 教示操作盤のシフト+前進キー:適切なアプリケーションの取扱説明書を参照して下さい。
・ TPプログラムによるジッコウ命令の実行:適切なアプリケーションの取扱説明書と12.4.1項「子タスク」を参照して下さい。
・ KARELプログラムによるRUN_TASKビルトインの実行:詳細は12.4.1項「子タスク」を参照して下さい。
それぞれのケースで、必要な動作制御権が手に入らないなら、タスクは開始されません。

12.4.1 子タスク
タスクの実行により新しいタスクを生成することができます。この新しいタスクを子タスクと呼びます。その子タスクの生成を要求したタスク
は親タスクと呼ばれます。TPプログラムでは、ジッコウ命令を実行することにより新しいタスクが生成されます。KARELプログラムでは、
RUN_TASKビルトインを使用することで新しいタスクが生成されます。
親タスクと子タスクは同じ動作グループを持つ必要はありません。
子タスクが生成されてしまえば、それは親タスクと独立して実行されます。ただし以下の点は例外です。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 113 of 412

・ 親タスクが再開されて、子タスクが一時停止状態にあるなら、子タスクもまた再開されます。
・ 親タスクがSTEPモードになると、子タスクもまたSTEPモードになります。
もし子タスクを親タスクから完全に独立させたいなら、KARELプログラムは別のタスクをKCLもしくはKCL_NOWAITビルトインを用いて
KCL>RUN コマンドを出すことができます。

 タスクの制御と監視
タスクを制御し、監視する環境が3つあります。
1. TPプログラム (TPP) (12.5.1項)
2. KAREL プログラム (12.5.2項)
3. KCL コマンド (12.5.3項)

12.5.1 TPプログラムから
ジッコウ命令でタスクを起動できます。サイカイプログラム命令に関してはアークツールの取扱説明書を参照して下さい。

12.5.2 KARELプログラムから
他のタスクを制御及び監視するビルトインが複数あります。これらのビルトインの説明については付録Aを参照して下さい。
・ RUN_TASKはタスクを実行します。
・ CONT_TASKはPAUSEされたタスクの実行を再開します。
・ PAUSE_TASKはタスクを一時停止します。
・ ABORT_TASK はタスクを終了させます。
・ コンディションハンドラのCONTINUEアクションはタスクを再開させます。
・ コンディションハンドラのABORTアクションはタスクを終了させます。
・ コンディションハンドラのPAUSEアクションはタスクを一時停止します。
・ ているかを決定できます。
GET_TSK_INFOで指定のタスクが実行中か、一時停止中か、終了しているかを決定します。どのプログラムと行番号が実行され

12.5.3 KCLから
以下のKCLコマンドを用いてタスクの状態を制御及び監視可能です。 詳細は付録C「KCLコマンドアルファベット順解説」を参照して下さ
い。
・ RUN <task_name> はタスクを開始又は再開します。
・ CONT <task_name> はタスクを再開します。
・ PAUSE <task_name> はタスクを一時停止します。
・ ABORT <task_name> はタスクを終了します。
・ SHOW TASK <task_name> はあるタスクの状態を表示します。
・ SHOW TASKS は全タスクの状態を表示します。

 セマフォの使用とタスクの同期
優れた設計になっていれば、別々のタスクは幾分独立して動作可能なものとなります。しかし互いに影響しあうことも可能であるべきで
す。
KARELはセマフォのカウントをサポートしています。セマフォに関して以下の操作が可能です。
・ セマフォのクリア (KAREL: CLEAR_SEMAビルトイン): セマフォのカウントを0に設定します。
全てのセマフォはコールドスタートでクリアされます。セマフォを使用する前にクリアするのは良い習慣です。 複数のタスクがセマフォ
の共有を開始する前に、それらのタスクのうち一つだけが、セマフォをクリアすべきです。
・ セマフォのポスト (KAREL: POST_SEMAビルトイン): セマフォのカウントを一つ加算します。
セマフォのカウントが0以上なら、セマフォがポストされた時、セマフォのカウントが1増加します。そのセマフォを待っている次のタスク
がセマフォのカウントを減らし、実行を継続します。 図12.6を参照して下さい。
セマフォのカウントが負であるなら、セマフォがポストされた時、セマフォのカウントが1増加します。そのセマフォを最も長く待っていた
タスクが実行を継続します。 図12.6を参照して下さい。
・ セマフォの読み取り (KAREL: SEMA_COUNTビルトイン): 現在のセマフォのカウントを返します。
・ セマフォの待機 (KAREL: PEND_SEMAビルトイン、SIGNAL SEMAPHOREアクション):
セマフォのカウントが0より大きいなら、セマフォの待機が発生した時、セマフォのカウントは減り、タスクは実行を継続します。 図12.6
を参照して下さい。
セマフォのカウントが0以下の場合、セマフォの待機が発生するとセマフォのカウントが減少し、タスクはセマフォのポストによって開
放されるのを待ちます。 タスクはFIFOベースで開放されます。 例えば、task A がセマフォ1を待ち、その後task B がセマフォ1を待つ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 114 of 412

とします。task D がsemaphore 1をポストすると、task A だけが開放されます。図12.6を参照して下さい。

図12.6 セマフォを使用したタスクの同期

例: セマフォは要求を処理するサーバとなるタスクの実装に使用できます。以下の例では、メインタスクはサーバが操作を終えるのを
待っています。 Semaphore[4]が変数rqst_paramへのアクセスを制御するのに使用されています。Semaphore[5]はサーバタスクに
サービスが要求されたことを通知するために用いられています。 semaphore[6]はサーバが操作の完了を知らせるために使用されて
います。

メインタスクは以下のKARELを含んでいるでしょう。

例12.6(a) メインタスク
--KAREL
CLEAR_SEMA(4)
CLEAR_SEMA(5)
CLEAR_SEMA(6)
RUN TASK('server',0,TRUE,TRUE,1,STATUS)
PEND_SEMA(4,max_time,time_out)
rqst_param=10
POST_SEMA(5)
PEND_SEMA(6,max_time,time_out)

サーバタスクは以下のKARELコードを含んでいるでしょう。

例12.6(b) サーバタスク
--KAREL
POST_SEMA (4)
WHILE TRUE DO
PEND_SEMA(5,max_time,time_out)
IF rqst_param=10 THEN
do_something
ENDIF
POST_SEMA(4)
POST_SEMA(6)
ENDWHILE

 キューを利用したタスク間通信
キュー(待ち行列)はKARELでのみサポートされています。キューはINTEGERのFirst-in/first-outのリスト構造です。他のタスクに順番に

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 115 of 412

情報を渡すために使用されます。キューはQUEUE_TYPEとARRAY OF INTEGERのユーザ変数から構成されます。キューのエントリの
最大数は配列のサイズで決まります。
キューは以下の操作をサポートしています。
・ INIT_QUEUEがキューを初期化して空にします。
・ APPEND_QUEUEがキューのエントリのリストに整数値を加えます。
・これらのビルトイン及びキューに関する他のビルトイン(DELETE_QUEUE,
GET_QUEUEはキューの最も古いエントリ(top)を読み、それを削除します。
INSERT_QUEUE, COPY_QUEUE)は付録Aで説明されてい
ます。
QUEUE_TYPEデータ型はユーザがアクセス可能な要素、n_entries を持っています。これはキューに加えられて読み出されていないエン
トリの数です。キューと共に使用されるARRAY OF INTEGERは、キューのビルトインによって使用されます。プログラムから参照すべき
ではありません。
例: 以下の例はより強力な要求サーバの例です。 一つ以上のタスクが要求を出しており、リクエスタ(要求した処理)は要求の完了を待っ
ていません。
リクエスタは以下のコードを含んでいるでしょう。

例12.7(a) リクエスタ
--declarations
VAR
rqst_queue FROM server: QUEUE_TYPE
rqst_data FROM server: ARRAY[100] OF INTEGER
status: INTEGER
seq_no: INTEGER
--
-- (略)
-- キューへの追加
APPEND_QUEUE (req_code, rqst_queue, rqst_data, seq_no, status)

サーバタスクは以下のKARELコードを含んでいるでしょう。

例12.7(b) サーバ
PROGRAM server
VAR
rqst_queue: QUEUE_TYPE
rqst_data : ARRAY[100] OF INTEGER
status : INTEGER
seq_no : INTEGER
rqst_code : INTEGER
BEGIN
INIT_QUEUE(rqst_queue) --initialization
WHILE TRUE DO --serving loop
WAIT FOR rqst_queue.n_entries > 0
GET_QUEUE (rqst_queue, rqst_data, rqst_code, seq_no, STATUS)
SELECT rqst_code OF
CASE (1):
-- do_something
ENDSELECT
ENDWHILE
END server

A KAREL言語アルファベット順解説
A.1 概要

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 116 of 412

この付録ではアルファベット順にKAREL言語の要素を説明します。以下のものが含まれます。
 データ型
 実行可能文(statement)及び節(clause)
 コンディションハンドラのコンディション及びアクション
 ビルトインルーチン
 トランスレータディレクティブ

多くの説明に各要素の典型的な用法の簡潔な例が記載されています。


もしプログラム実行中にビルトインの引数に未初期化変数が使用されると、プログラムは一時停止してエラーが
表示されます。変数を初期化するか、プログラムを終了して下さい。

表記法
この節ではKAREL言語の標準的な各要素をアルファベット順に説明します。各要素の説明には以下の情報が記載されます。
 目的: KAREL言語内で果たす目的が示されます。
 構文:説明している要素をKAREL中で使用するための適切な構文を説明します。表A.1(a)は構文の表記法を説明していま
す。
表A.1(a) 構文の表記法
構文 意味 例 結果
<> AAA
囲まれている単語は省略可能です。 AAA <BBB>
AAA BBB
{} AAA
囲まれている単語は省略可能で、繰り返すことが AAA BBB
AAA {BBB}
できます。 AAA BBB BBB
AAA BBB BBB BBB
| AAA
同時に一つだけ使用できる項目を区切ります。 AAA | BBB
BBB
<|> AAA
同時に一つだけ使用できる項目を区切ります。使
AAA <BBB | CCC> AAA BBB
用しないか、一つだけ使用するかです。
AAA CCC
|| AAA BBB
どれか一つだけ使用する必要があります。 AAA || BBB | CCC ||
AAA CCC
{|} AAA
AAA BBB
AAA CCC
選択を任意に組み合わせて使用できます。 AAA {BBB | CCC}
AAA BBB CCC
AAA CCC BBB
AAA BBB CCC BBB BBB
<<|>> シンボルのネストが可能です。最も内側の表記法 AAA
を最初に注目しその記述内容を理解して下さい。 AAA BBB
AAA <BBB <CCC | DDD>>
その後その次に最も内側にある階層を見て記述内 AAA BBB CCC
容を理解して下さい。以下同様に続きます。 AAA BBB DDD

もしビルトインがファンクションならば、戻り値のデータ型を示すために以下の表記法が使用されます。
戻り値の型: data_typ

ファンクション及びプロシージャの入力及び出力パラメータのデータ型は以下のように識別されます。
[in] param_name: data_type
[out] param_name: data_type
ここで:
[in]はルーチンに渡されるパラメータ(入力)のデータ型を指定しています。
[out]はルーチンからプログラムに返されるパラメータ(出力)のデータ型を指定しています。
%ENVIRONMENT Groupはビルトインファンクション又はプロシージャの%ENVIRONMENTのグループです。オフラインのト
ランスレータにより使用されます。Groupとして有効な値は次の通りです。BYNAM、CTDEF、ERRS、FDEV、FLBT、
IOSETUP、KCL、MEMO、MIR、MOTN、MULTI、PATHOP、PBQMGR、REGOPE、STRNG、SYSDEF、TIM、TPE、
TRANS、UIF、VECTR。オフラインのトランスレータはSYSTEMグループを自動的に使用します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 117 of 412


 詳細: 説明している言語要素に当てはまる特有の規則を列挙します。
 参照: 更に情報が書かれている場所を案内しています。
 例: 説明している言語要素の簡潔な例と説明を示します。表A.1(b)から表A.1(h)はこの付録で記述されているKARELの言語
要素の種類別の一覧です。表A.1(i)はこれらの要素のアルファベット順の一覧です。

表A.1(b) アクション
ABORT アクション
代入(Assignment) アクション
CONTINUE アクション
DISABLE CONDITION アクション
ENABLE CONDITION アクション
NOABORT アクション
NOMESSAGE アクション
NOPAUSE アクション
PAUSE アクション
Port_Id アクション
PULSE アクション
SIGNAL EVENT アクション
SIGNAL SEMAPHORE アクション
UNPAUSE アクション

表A.1(c) 節(Clause)
EVAL 節
FROM 節
IN 節
WHEN 節
WITH 節

表A.1(d) コンディション(CONDITION)
ABORT コンディション
CONTINUE コンディション
ERROR コンディション
EVENT コンディション
PAUSE コンディション
Port_Id コンディション
関係(Relational) コンディション
SEMAPHORE コンディション

表A.1(e) データ型
ARRAY データ型
BOOLEAN データ型
BYTE データ型
CONFIG データ型
DISP_DAT_T データ型
FILE データ型
INTEGER データ型
JOINTPOS データ型
POSITION データ型
QUEUE_TYPE データ型
REAL データ型
SHORT データ型
STRING データ型
STRUCTURE データ型
VECTOR データ型
XYZWPR データ型
XYZWPREXT データ型

表A.1(f) ディレクティブ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 118 of 412

%ALPHABETIZE
%CMOSVARS
%CMOS2SHADOW
%COMMENT
%CRTDEVICE
%DEFGROUP
%DELAY
%ENVIRONMENT
%INCLUDE
%LOCKGROUP
%NOABORT
%NOBUSYLAMP
%NOLOCKGROUP
%NOPAUSE
%NOPAUSESHFT
%PRIORITY
%SHADOWVARS
%STACKSIZE
%TIMESLICE
%TPMOTION
%UNINITVARS

表A.1(g) KARELビルトインの要約
カテゴリ 識別子
PROG_LIST
%ENVIRONMENTがByname CALL_PROG CURR_PROG
VAR_INFO
であるもの CALL_PROGLIN FILE_LIST
VAR_LIST
DAQ_CHECKP DAQ_START DAQ_UNREG
DAQ
DAQ_REGPIPE DAQ_STOP DAQ_WRITE
エラーコード処理 ERR_DATA POST_ERR
CHECK_NAME MOUNT_DEV
COPY_FILE MOVE_FILE
ファイル及び装置の操作 DELETE_FILE PRINT_FILE
DISMOUNT_DEV PURGE_DEV
FORMAT_DEV RENAME_FILE
BYTES_AHEAD IO_STATUS
SET_FILE_ATR
BYTES_LEFT MSG_CONNECT
シリアル通信、ファイルの使 SET_FILE_POS
CLR_IO_STAT MSG_DISCO
用 SET_PORT_ATR
GET_FILE_POS MSG_PING
VOL_SPACE
GET_PORT_ATR PIPE_CONFIG
CLR_PORT_SIM
SET_PORT_CMT
GET_PORT_ASG GET_PORT_VAL
SET_PORT_MOD
I/Oの設定 GET_PORT_CMT IO_MOD_TYPE
SET_PORT_SIM
GET_PORT_MOD SET_PORT_ASG
SET_PORT_VAL
GET_PORT_SIM
KCLの操作 KCL KCL_NO_WAIT KCL_STATUS
CLEAR PROG_BACKUP
SAVE
メモリの操作 LOAD PROG_CLEAR
SAVE_DRAM
LOAD_STATUS PROG_RESTORE
MIRROR MIRROR
プログラムと動作の制御 CNCL_STP_MTN MOTION_CTL RESET
ABORT_TASK PAUSE_TASK
CLEAR_SEMA PEND_SEMA SET_TSK_ATTR
マルチプログラミング CONT_TASK POST_SEMA SET_TSK_NAME
GET_TSK_INFO RUN_TASK UNLOCK_GROUP
LOCK_GROUP SEMA_COUNT

ADD_BYNAMEPC ADD_STRINGPC

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 119 of 412

ADD_INTPC SEND_DATAPC
PCとの通信
ADD_REALPC SEND_EVENTPC
JOINT2POS
CHECK_EPOS CURJPOS
POS
CNV_JPOS_REL FRAME
位置 POS2JOINT
CNV_REL_JPOS IN_RANGE
SET_PERCH
CURPOS J_IN_RANGE
UNPOS
レジスタのコメントの操作 SET_PREG_CMT SET_REG_CMT
APPEND_QUEUE GET_QUEUE
キューの管理 COPY_QUEUE INIT_QUEUE MODIFY_QUEUE
DELETE_QUEUE INSERT_QUEUE
CLR_POS_REG GET_REG SET_INT_REG
GET_JPOS_REG GET_REG_CMT SET_JPOS_REG
レジスタの操作
GET_POS_REG POS_REG_TYPE SET_POS_REG
GET_PREG_CMT SET_EPOS_REG SET_REAL_REG
CNV_CONF_STR CNV_REAL_STR CNV_STR_INT
文字列操作
CNV_INT_STR CNV_STR_CONF CNV_STR_REAL
ABS EXP
SIN
ACOS GET_VAR
SQRT
ARRAY_LEN INDEX
STR_LEN
ASIN INV
システム SUB_STR
ATAN2 LN
TAN
BYNAME ORD
TRUNC
CHR ROUND
UNINIT
COS SET_VAR
CNV_STR_TIME GET_TIME GET_USEC_TIM
日付、時間
CNV_TIME_STR GET_USEC_SUB SET_TIME
GET_JPOS_TPE
AVL_POS_NUM GET_POS_FRM SET_ATTR_PRG
CLOSE_TPE GET_POS_TPE SET_EPOS_TPE
COPY_TPE GET_POS_TYP SET_JPOS_TPE
TPプログラム
CREATE_TPE GET_TPE_CMT SET_POS_TPE
DEL_INST_TPE GET_TPE_PRM SET_TPE_CMT
GET_ATTR_PRG OPEN_TPE SET_TRNS_TPE
SELECT_TPE
トランスレート TRANSLATE
DEF_WINDOW
DET_WINDOW
ACT_SCREEN DISCTRL_ALPH
ADD_DICT DISCTRL_FORM
PUSH_KEY_RD
ATT_WINDOW_D DISCTRL_LIST
READ_DICT
ATT_WINDOW_S DISCTRL_PLMN
READ_DICT_V
CHECK_DICT DISCTRL_SBMN
READ_KB
CNC_DYN_DISB DISCTRL_TBL
ユーザインタフェース REMOVE_DICT
CNC_DYN_DISE FORCE_SPMENU
SET_CURSOR
CNC_DYN_DISI INI_DYN_DISB
SET_LANG
CNC_DYN_DISP INI_DYN_DISE
WRITE_DICT
CNC_DYN_DISR INI_DYN_DISI
WRITE_DICT_V
CNC_DYN_DISS INI_DYN_DISP
DEF_SCREEN INI_DYN_DISR
INI_DYN_DISS
POP_KEY_RD
ベクトル APPROACH ORIENT

表A.1(h) 項目(Items)
CR 入出力項目

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 120 of 412

表A.1(i) 文(Statements)
ABORT 文
代入(Assignment) 文
CANCEL 文
CANCEL FILE 文
CLOSE FILE 文
CLOSE HAND 文
CONDITION..ENDCONDITION 文
CONNECT TIMER 文
DELAY 文
DISABLE CONDITION 文
DISCONNECT TIMER 文
ENABLE CONDITION 文
FOR..ENDFOR 文
GO TO 文
IF..ENDIF 文
OPEN FILE 文
OPEN HAND 文
PAUSE 文
PROGRAM 文
PULSE 文
PURGE CONDITION 文
READ 文
RELAX HAND 文
REPEAT...UNTIL 文
RETURN 文
ROUTINE 文
SELECT..ENDSELECT 文
SIGNAL EVENT 文
USING..ENDUSING 文
WAIT FOR 文
WHILE..ENDWHILE 文
WRITE 文

A.2 A

A.2.1 ABORT アクション


目的:
実行中又は一時停止中のタスクを終了させる
構文:
ABORT <PROGRAM[n]>
詳細:

 タスクが実行中又は一時停止中なら、ABORTアクションはタスクの実行を終了させます。
 ABORTアクションの次にPROGRAM[n]節を続けることができます。ここでn は終了するタスクの番号です。タスク番号の
取得はGET_TASK_INFOで行って下さい。
 PROGRAM[n]が指定されていない場合、自タスクが終了します。
参照:
GET_TSK_INFOビルトイン、6章「コンディションハンドラ」
例:
B.4節「位置データ設定及びモニタのプログラム (PTH_MOVE.KL)」を参照して下さい。詳細なプログラム例があります。

A.2.2 ABORTコンディション
目的:
タスクの実行の終了を監視します。
構文:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 121 of 412

ABORT <PROGRAM[n]>
詳細:

 ABORTコンディションはタスクが終了すると成立します。モニタで指定したアクションが実行されます。
 PROGRAM[n]が指定されていない場合、自タスクのタスク番号が使用されます。
 タスクの実行が終了するとルーチンコールのアクションは実行されません。
 ABORTコンディションの次にPROGRAM[n]節を続けることができます。ここでnは監視するタスク番号です。タスク番号
の取得はGET_TSK_INFOで行って下さい。
参照:
CONDITION ... ENDCONDITION 文、GET_TSK_INFOビルトイン、6章「コンディションハンドラ」、構文の情報に関しては付
録E「文法図」
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.4節「位置データ設定及びモニタのプログラム」 (PTH_MOVE.KL)
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)

A.2.3 ABORT文
目的:
タスクの実行を終了します。
構文:
ABORT
 ABORTの後でプログラムを再開できません。再起動する必要があります。
参照:
付録E「文法図」に構文の情報が記載されています。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.4節「位置データ設定及びモニタのプログラム」 (PTH_MOVE.KL)
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)

A.2.4 ABORT_TASK ビルトインプロシージャ


目的:
指定された実行中又は一時停止中のタスクを終了させる。
構文:
ABORT_TASK(task_name, force_sw, cancel_mtn_sw, status)
入出力パラメータ:
[in] task_name :STRING
[in] force_sw :BOOLEAN
[in] cancel_mtn_sw :BOOLEAN
[out] status :INTEGER
%ENVIRONMENT Group :MULTI
詳細:
 task_name は終了すべきタスク名です。タスク名が'*ALL*'なら、全ての実行中又は一時停止中のタスクが終了します。但
しNOABORTの属性が設定されているタスクは除きます。
 force_sw TRUEの場合、指定のタスクがNOABORTであっても終了させます。force_sw はタスク名が '*ALL*'の場合は無視
されます。
 cancel_mtn_sw 指定のタスクに属している全てのグループのモーションをキャンセルするかを指定します。


KARELは2つ以上の動作グループを使用しないで下さい。2つ以上の動作グループを使用する必要があるなら、
TPプログラムを使用する必要があります。

警告
2個以上の動作グループを持つKARELプログラムを実行しないで下さい。さもないと、ロボットが予期せぬ動作
を行い、人を負傷させたり設備が損害を受ける可能性があります。

 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 122 of 412

CONT_TASK、RUN_TASK、PAUSE_TASK ビルトインプロシージャ、NO_ABORT アクション、%NO_ABORTトランスレート


ディレクティブ、12章「マルチタスク」
例:
B.7節「動的な表示を行うビルトインの使用」 (DYN_DISP.KL)を参照して下さい。詳細なプログラム例があります。

A.2.5 ABSビルトインファンクション
目的:
引数xの絶対値を返します。xはINTEGERまたはREALの式が使用可能です。
構文:
ABS(x)
戻り値の型: INTEGERまたはREAL
入出力パラメータ:
[in] x :INTEGERまたはREALの式
%ENVIRONMENT Group :SYSTEM
詳細:
 xの絶対値をxと同じデータ型で返します。
例:
以下の例では整数、実数値でABSを実行し、結果を表示しています。

例A.2.5 ABS ビルトインファンクション


PROGRAM ex_abs
%NOLOCKGROUP

VAR
int_var : integer
real_var : real
BEGIN
int_var = abs(-1)
real_var = abs(-5.4)
WRITE('abs(-1):', int_var, CR)
WRITE('abs(-5.4):', real_var, CR)

END ex_abs

A.2.6 ACOS ビルトインファンクション


目的:
指定された引数のアークコサイン(cos-1) を度で返します。
構文:
ACOS(x)
戻り値の型: REAL
入出力パラメータ:
[in] x :REAL
%ENVIRONMENT Group :SYSTEM
詳細:

 xは-1.0と1.0の間である必要があります。さもないとプログラムはエラーで終了します。
 xのアークコサインを返します。
例:
以下の例はans_rに-1のアークコサインをセットし、その値を画面に表示します。出力は180度となります。

例A.2.6(a) ACOS ビルトインファンクション


PROGRAM takeacos
%NOLOCKGROUP
var
ans_r: real
begin
ans_r = acos (-1)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 123 of 412

WRITE ('acos -1 ', ans_r, CR)


END takeacos

第二の例ではプログラムが終了します。なぜなら入力値が-1より小さく、有効範囲内に無いからです。

例A.2.6(b) ACOS ビルトインファンクション


PROGRAM takeacos
%NOLOCKGROUP
var
ans_r: real
begin
ans_r = acos (-1.5)
WRITE ('acos -1.5 ', ans_r, CR)
END takeacos

A.2.7 ACT_SCREEN ビルトインプロシージャ


目的:
画面をアクティブにします。
構文:
ACT_SCREEN
入出力パラメータ:
[in] screen_name :STRING
[out] old_screen_n :STRING
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 スクリーンに関連付けられた表示装置をクリアし、その画面にアタッチされているウィンドウ全てが表示されるようにし
ます。
 screen_name は事前に定義されたスクリーンの名前を含んでいる必要があります。DEF_SCREENビルトインを参照して下
さい。

 このスクリーンに置き換えられるスクリーン名がold_screen_n に返ります。
 新しいスクリーンをアクティブにする前にユーザ又はユーザ2画面が選択されている必要があります。さもないとstatusに
9093がセットされます。
 スクリーンをアクティブにする前に教示操作盤に強制的にユーザ画面を表示するには、FORCE_SPMENU (tp_panel,
SPI_TPUSER, 1)を使用して下さい。
 スクリーンをアクティブにする前にCRT/KBに強制的にユーザ画面を表示するには、FORCE_SPMENU (crt_panel,
SPI_TPUSER, 1)を使用して下さい。
 ユーザ画面から抜けて再度ユーザ画面に戻った時、ACT_SCREENを呼んだタスクが実行中なら、スクリーンは再度アク
ティブになります。そのタスクが終了した時、システムのユーザ画面のスクリーンが再度アクティブになります。システ
ムのユーザ画面のスクリーンの詳細については7.10節「ユーザインタフェースのTIPS」を参照して下さい。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
DEF_SCREEN ビルトインプロシージャ
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)

A.2.8 ACT_TBLビルトインプロシージャ
目的:
教示操作盤に表を表示している最中にキーに応じて処理を行う
構文:
ACT_TBL(action, def_item, table_data, term_char, attach_wind, status)
入出力パラメータ:
[in,out] action :INTEGER
[in,out] def_item :INTEGER
[in,out] table_data :XWORK_T
[out] term_char :INTEGER

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 124 of 412

[out] attach_wind :BOOLEAN


[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:
 INIT_TBLとACT_TBLはDISCTRL_TBLの代わりに使用するのは、キーストローク毎に特殊処理が必要な場合や、ファンク
ションキーを表の画面から抜けずに処理する必要がある場合に限るべきです。
 本ビルトインを使用する前にビルトインINIT_TBLを呼ぶ必要があります。INIT_TBLでエラーが発生した場合は処理を継
続しないで下さい。
 actionはklevkeys.klに定義済みの定数の一つである必要があります。ACT_TBLはキーに対応する処理を行い、リターンしま
す。以下の値は特殊な意味を持ちます。
 ky_disp_updt (初期表示) – タイトル、ファンクションキーのラベルが表示されます。default itemが表示され1行目で強調
表示されます。残りの行が表示されます。全ての値に関して動的な表示データの更新処理が開始されます。このキー
はACT_TBLに渡される最初のキーであるべきです。
 ky_reissue (キーを読む) – ACT_TBLはキーを読み、それに応じた処理を行い、キーをactionに返します。
 ky_cancel(キャンセル) – 動的な表示データの更新処理がキャンセルされます。これはACT_TBLに渡される最後のキー
であるべきです(但しky_new_menuを除きます)。別画面が選択されたなら、ACT_TBLは既に動的な表示データの更新処
理をキャンセルしているので、ky_cancelを使用すべきではありません。
 def_itemはテーブル表示開始時に強調表示したいアイテムを含む行です。出力としては、終了文字 (termination character)が
入力された時に強調表示されているアイテムを含む行です。

 table_dataは表の表示と制御に使用されます。内部的に使用していますので変更しないで下さい。
 term_charは表の表示を終了させたキーコードやその他の条件です。終了条件のキーコードはincludeファイル
KLEVKEYS.KLに定義されています。通常返される定義済み定数は以下の通りです。
 ky_undef – 終了文字は押されていません。
 ky_select – 選択可能アイテムが選択されました。
 ky_new_menu – 新しい画面が選択されました。
 ky_f1からf10 – ファンクションキーが選択されました。
 attach_windはactionがky_disp_updtの場合にウィンドウをアタッチし、ky_cancelでディタッチされるべきならTRUEとして下
さい。すでにアタッチされているならFALSEに設定することが可能です。通常はTRUEにして下さい。
 statusは処理の状態を示します。0でないならば、エラーが発生しました。

例:
INIT_TBLの例を参照して下さい。

A.2.9 ADD_BYNAMEPC ビルトインプロシージャ


目的:
INTEGER,、REAL、STRINGの値を与えられたデータバッファに追加します。
構文:
ADD_BYNAMEPC(dat_buffer, dat_index, prog_name, var_name, status)
入出力パラメータ:
[in] dat_buffer :ARRAY OF BYTE
[in,out] dat_index :INTEGER
[in] prog_name :STRING
[in] var_name :STRING
[out] status :INTEGER
%ENVIRONMENT Group :PC
詳細:

 dat_buffer - 244バイトまでの配列です。
 dat_index - STRINGの値をバッファにセットする開始バイトです。
 prog_name - 指定の変数を含んでいるプログラム名を指定します。
var_name - 静的なプログラム変数を参照します。INTEGER、REAL、STRING型の変数のみサポートしています(配列や構造
体はサポートしていません)。
 status - は処理のステータスです。0でないなら、エラーが発生しました。データはバッファにセットされていません。
ADD_BYNAMEPC ビルトインはADD_INTPC、ADD_REALPC、ADD_STRINGPCと同じ方法でINTEGER、REAL、STRINGの値
をデータバッファに追加します。
参照:
ADD_BYNAMEPC、ADD_INTPC、ADD_REALPC、ADD_STRINGPC
例:
ADD_BYNAMEPCビルトインの例を以下に示します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 125 of 412

例A.2.9 ADD_BYNAMEPC ビルトインプロシージャ


PROGRAM TESTBYNM
%ENVIRONMENT PC
CONST
er_abort = 2
VAR
dat_buffer: ARRAY[100] OF BYTE
index: INTEGER
status: INTEGER
BEGIN
index = 1
ADD_BYNAMEPC(dat_buffer,index, 'TESTDATA','INDEX',status)
IF status<>0 THEN
POST_ERR(status,'',0,er_abort)
ENDIF
END testbynm

A.2.10 ADD_DICT ビルトインプロシージャ


目的:
指定の辞書を指定の言語に追加します。
構文:
ADD_DICT(file_name, dict_name, lang_name, add_option, status)
入出力パラメータ:
[in] file_name :STRING
[in] dict_name :STRING
[in] lang_name :STRING
[in] add_option :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:

 file_name 追加する辞書ファイルのデバイス、パス、ファイル名を指定します。ファイルタイプは'TX'と仮定されます。
 dict_name 辞書要素を読み書きする時に使用する辞書の名前を指定します。4文字だけが使用されます。
 lang_name 辞書を追加する言語を指定します。以下の定義済み定数の一つを使用して下さい。
dp_default
dp_english
dp_japanese
dp_french
dp_german
dp_spanish

 言語を一つしか必要としない場合はdefaultを使用して下さい。
 add_option にはdp_dramを指定して下さい。
 status は処理のステータスです。0以外なら辞書ファイルの追加でエラーが発生しました。
参照:
READ_DICT、WRITE_DICT、REMOVE_DICT ビルトインプロシージャ、9章「辞書とフォーム」
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)
B.9.1項「辞書ファイル」(DCALPHEG.UTX)

A.2.11 ADD_INTPC ビルトインプロシージャ


目的:
INTEGERの値(タイプ16 - 16進数で10)をBYTE型の配列のデータバッファに追加する。
構文:
ADD_INTPC(dat_buffer, dat_index, number, status)
入出力パラメータ:
[in] dat_buffer :ARRAY OF BYTE

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 126 of 412

[in,out] dat_index :INTEGER


[in] number :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PC
詳細:

 dat_buffer - 244バイトまでの配列です。
 dat_index - INTEGERの値をセットする開始バイトです。
 number - バッファにセットするINTEGERの値です。
 status - は処理のステータスです。0でないならエラーが発生しました。データはバッファにセットされていません。
ビルトインADD_BYNAMEPC、ADD_INTPC、ADD_REALPC、ADD_STRINGPCを使用してBYTEのバッファ特定のフォーマッ
トにすることができます。INTEGERはバッファに以下のように追加されます(バッファのバイトは16進数で表示されていま
す)。
開始index = dat_index
2 bytes - 変数のタイプ
4 bytes - 数値
2 bytes of zero (0) - バッファ終了のマーカ
以下はindex=1でINTEGERをバッファに追加する例です。
0 10 0 0 0 5 0 0
ここで:
0 10 = INTEGER型を示します
0 0 0 5 = INTEGERの数値、5
0 0 = バッファ中でのデータの終わり
ビルトインからリターンする時、index = 7です。
参照:
ADD_BYNAMEPC、ADD_INTPC、ADD_REALPC、ADD_STRINGPC
例:
SEND_DATAPCビルトインファンクションの例、TESTDATAを参照して下さい。

A.2.12 ADD_REALPC ビルトインプロシージャ


目的:
REALの値(タイプ17-16進数で11)をBYTE型の配列のデータバッファに追加する。
構文:
ADD_REALPC(dat_buffer, dat_index, number, status)
入出力パラメータ:
[in] dat_buffer :ARRAY OF BYTE
[in,out] dat_index :INTEGER
[in] number :REAL
[out] status :INTEGER
%ENVIRONMENT Group :PC
詳細:

 dat_buffer - 244バイトまでの配列です。
 dat_index - REALの値をバッファにセットする開始バイトです。
 number - バッファにセットするREALの値です。
 status - は処理のステータスです。0でないなら、エラーが発生しました。データはバッファにセットされていません。
ビルトインADD_BYNAMEPC、ADD_INTPC、ADD_REALPC、ADD_STRINGPCを使用してBYTEのバッファを特定のフォー
マットにすることができます。以下のようになります。
REAL型のデータはバッファに以下のように追加されます(バッファのバイトは16進数で表示されています)。
開始index = dat_index
2 bytes - 変数のタイプ
4 bytes - 数値
2 bytes of zero (0) - バッファ終了のマーカ
以下はindex=1でBYTEの配列にREALをセットする例です。
0 11 43 AC CC CD 0 0
ここで:
0 11 = REAL 型を示します。
43 AC CC CD = 実数値345.600006
0 0 = バッファ中でのデータの終わり
ビルトインからリターンする時、index = 7です。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 127 of 412

参照:
ADD_BYNAMEPC、ADD_INTPC、ADD_REALPC、ADD_STRINGPC
例:
SEND_DATAPCビルトインファンクションの例、TESTDATAを参照して下さい。

A.2.13 ADD_STRINGPC ビルトインプロシージャ


目的:
STRINGの値 (タイプ209 - 16進数でD1)をBYTE型の配列のデータバッファに追加する。
構文:
ADD_STRINGPC(dat_buffer, dat_index, item, status)
入出力パラメータ:
[in] dat_buffer :ARRAY OF BYTE
[in,out] dat_index :INTEGER
[in] item :string
[out] status :INTEGER
%ENVIRONMENT Group :PC
詳細:

 dat_buffer - 244バイトまでの配列です。
 dat_index - STRINGの値をバッファにセットする開始バイトです。
 item - バッファにセットするSTRINGです。
 status - は処理のステータスです。0でないなら、エラーが発生しました。データはバッファにセットされていません。
ビルトインADD_BYNAMEPC、ADD_INTPC、ADD_REALPC、ADD_STRINGPCを使用してBYTEのバッファを特定のフォー
マットにすることができます。以下のようになります。
STRING型のデータはバッファに以下のように追加されます。
開始index = dat_index
2 bytes - 変数のタイプ
1 byte - 文字列の長さ
テキスト本体
2 bytes of zero (0) - バッファ終了のマーカ
以下はindex=1でSTRINGをBYTEの配列に追加する例です。
0 D1 7 4D 48 53 48 45 4C 4C 0 0 0
ここで:
0 D1 = STRING型を示します。
7 = STRING'MHSHELL'には7文字あります。
4D 48 53 48 45 4C 4C 0 = 'MHSHELL' NULL文字(0)で終わる文字列です。
0 0 = バッファ中でのデータの終わり
ビルトインからリターンする時、index = 12です。
参照:
ADD_BYNAMEPC、ADD_INTPC、ADD_REALPC、ADD_STRINGPC
例:
SEND_DATAPCビルトインファンクションの例、TESTDATAを参照して下さい。

A.2.14 %ALPHABETIZE トランスレータディレクティブ


目的:
Pコードがロードされる時、静的変数がアルファベット順に生成されます。
構文:
%ALPHABETIZE
詳細:
 KARELプログラム中では静的変数は任意の順番で宣言可能です。%ALPHABETIZEを使うとデータ画面やKCL>SHOW
VARSの一覧で静的変数がアルファベット順に表示されます。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)
B.4節「位置データ設定及びモニタのプログラム」 (PTH_MOVE.KL)
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 128 of 412

A.2.15 APPEND_QUEUE ビルトインプロシージャ


目的:
キューが満杯でないならエントリをキューに追加します。
構文:
APPEND_QUEUE(value, queue, queue_data, sequence_no, status)
入出力パラメータ:
[in] value :INTEGER
[in,out] queue :QUEUE_TYPE
[in,out] queue_data :ARRAY OF INTEGER
[out] sequence_no :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBQMGR
詳細:
 value はキュー(待ち行列)にアペンドする値を指定します。

 queue はキューとして使う変数です。
 queue_data はキュー中のデータを保持する配列です。この配列の長さがキューの最大エントリ数を決定します。
 sequence_no アペンドしたエントリの通し番号が返ります。
 status はキューへのエントリの追加が成功したなら0が返ります。そうでないなら61001、"キューが一杯です"が返ります。
参照:
DELETE_QUEUE, INSERT_QUEUE ビルトインプロシージャ 詳細と例に関しては12.7節、「キューを利用したタスク間通信」
を参照して下さい。

A.2.16 APPROACH ビルトインファンクション


目的:
引数POSITIONのZ軸を表す単位ベクトル(VECTOR型)を返します。
構文:
APPROACH(posn)
戻り値の型: VECTOR
入出力パラメータ:
[in] posn :POSITION
%ENVIRONMENT Group :VECTR
詳細:
 引数posn のアプローチベクトル(Z+方向)を構成するVECTORを返します。


APPROACHは古いバージョンのKARELのために残してあります。現在はPOSITION型のベクトルに直接アクセ
スすべきです。つまり(posn. approach.)を使用して下さい。

A.2.17 ARRAY データ型


目的:
変数、ファンクションの戻り値の型、ルーチンのパラメータを配列(ARRAY)として定義します。
構文:
ARRAY<[size{,size}]> OF data_type
ここで:
size : INTEGERのリテラル又は定数
data_type : PATH以外の任意の型
詳細:

 size 配列の要素の数を示します。.
 size は1から32767の範囲にある必要があります。そして通常の配列変数の宣言で指定する必要があります。利用可能なメ
モリの量が配列の最大サイズを制限する可能性があります。
 各要素は配列の名称と添え字size で参照されます。例えば、table[1]は配列tableの最初の要素を参照します。

 配列全体を使用可能なのは、代入文とルーチンコールの引数としてのみです。代入文では両辺の配列変数は同じsize と
data_type である必要があります。size が異なると、プログラムのトランスレートは成功しますが、実行中にエラー12304
「配列サイズエラー」で終了します。
 size はルーチンのパラメータをARRAYとして宣言する時には指定されません。ルーチンのARRAYのパラメータとして任

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 129 of 412

意の長さの配列を渡すことができます。
 size はファンクションの戻り値をARRAYとして宣言する時には使用されません。しかしながら、返される配列はファンク
ション呼び出しにより代入する先の配列と同じサイズである必要があります。
 各要素はdata_type で指定されたのと同じデータ型となります。
 配列に有効な演算子は配列の要素に有効な演算子です。
 配列の各要素はARRAYのdata typeに相当するフォーマットでのみ読み書き(read 及び write)可能です。
 多次元配列を利用可能です。詳細は2章を参照して下さい。
 可変長配列を使用可能です。詳細は2章を参照して下さい。
参照:
ARRAY_LENビルトインファンクション、ルーチン呼び出しでARRAYの変数を引数として渡すことに関して5章「ルーチ
ン」、7章「ファイル入出力操作」
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.6節「ファイルとファイルデバイスのビルトインの使用」 (FILE_EX.KL)
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)
B.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)

A.2.18 ARRAY_LEN ビルトインファンクション


目的:
指定された配列の引数に含まれる要素の数を返します。
構文:
ARRAY_LEN(ary_var)
戻り値の型: INTEGER
入出力パラメータ:
[in] ary_var :ARRAY
%ENVIRONMENT Group :SYSTEM
 戻り値はary_var の宣言されている要素数であり、ary_var の初期化されている要素の数ではありません。
例:
詳細なプログラム例に関してはB.5節「ファイルとプログラムのリスト作成及び文字列操作」 (LIST_EX.KL)を参照して下さ
い。

A.2.19 ASIN ビルトインファンクション


目的:
指定された引数のアークサイン(sin-1)を度で返します。
構文:
ASIN(x)
戻り値の型: REAL
入出力パラメータ:
[in] x :REAL
%ENVIRONMENT Group :SYSTEM
詳細:

 xのアークサインを返します。
 x は-1と1の間である必要があります。さもないとプログラムはエラーで終了します。
例:
以下の例はans_rに-1のアークサインをセットし、その値を画面に表示します。出力は-90度となります。

例A.2.19(a) ASIN ビルトインファンクション


ROUTINE takeasin
VAR
ans_r: REAL
BEGIN
ans_r = ASIN (-1)
WRITE ('asin -1 ', ans_r, CR)
END takeasin

第二の例ではプログラムが終了します。なぜなら入力値が-1より小さく、有効範囲内に無いからです。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 130 of 412

例A.2.19(b) ASIN ビルトインファンクション


PROGRAM takeasin
%NOLOCKGROUP

VAR
ans_r : real
BEGIN
ans_r = ASIN(-1.5)
WRITE ('asin -1.5 ', ans_r, CR)
END takeasin

A.2.20 代入(Assignment) アクション


目的:
式を評価した結果を変数の値にセットします。
構文:
variable {[subscript{,subscript}]| . field} = expn
ここで:
variable : 任意のKAREL変数
subscript : INTEGERの式
expn : 有効なKARELの式
field : 任意の構造体の変数のフィールド
詳細:
 variable は任意のユーザ定義の変数、書き込み可能なシステム変数、書き込み可能な出力のポート配列 (DOUT[ ]等)が使
用可能です。
 subscript は配列の要素にアクセスするために使用されます。

 field は構造体のフィールドにアクセスするために使用されます。
 expn はvariable の変数又は要素と同じ型である必要があります。
 例外として、INTEGERの式はREALに代入可能です。任意の位置データ型は互いに代入可能です。
 システム変数はWriteアクセスを持つものだけを代入文の左辺に使用可能です。読み取り専用(RO:read only)又は読み書き可
能(RW:read write)アクセスのシステム変数を右辺に使用可能です。
 入力のポート配列(DIN[ ]等)は代入の左辺に使用できません。
参照:
3章「演算子の使用」:式とその評価の詳細が記述されています。6章「コンディションハンドラ」:代入アクションの使用方法に
関してはこちらを参照して下さい。
例:
以下の例ではEVENT[1]が発生した時、代入アクションを使用してDOUT[1]をOFFし、port_var をDOUT[2]に等しくします。
例A.2.20代入(Assignment) アクション
CONDITION[1]:
WHEN EVENT[1] DO
DOUT[1] = OFF
port_var = DOUT[2]
ENDCONDITION

A.2.21 代入文(Assignment Statement)


目的:
式を評価した結果を変数の値にセットします。
構文:
variable {[subscript{,subscript}]| . field} = expn
ここで:
variable : 任意のKAREL変数
subscript : INTEGERの式
expn : 有効なKARELの式
field : 任意の構造体の変数のフィールド
詳細:
 variable は任意のユーザ定義の変数、書き込み可能なシステム変数、書き込み可能な出力のポート配列変数(DOUT[1]等)が
使用可能です。
 subscript は配列の要素にアクセスするために使用されます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 131 of 412


 field は構造体のフィールドにアクセスするために使用されます。
 expn はvariable の変数又は要素と同じ型である必要があります。
 例外として、INTEGERの式はREALに代入可能です。任意の位置データ型は互いに代入可能です。INTEGER、SHORT、
BYTEは互いに代入可能です。
 variable が配列で添え字が無い場合、右辺の式は同じデータ型とサイズの配列で無ければなりません。トランスレートの間
に型の不一致が検出されます。サイズの不一致は実行中に検出され、エラー12304、「配列サイズエラー」でプログラムが
終了します。
 variable がユーザ定義の構造体で、フィールドが指定されない場合、右辺の式は同じ型の構造体である必要があります。

 システム変数はWriteアクセスを持つものだけを代入文の左辺に使用可能です。読み取り専用(RO:read only)又は読み書き可
能(RW:read write)アクセスのシステム変数を右辺に使用可能です。
ルーチンの引数として読み取り専用のシステム変数が渡されると、値渡しになります。ルーチン中で(代入文により)変更し
ようとしても効果はありません。
 入力のポート配列 (DIN[ ]等)は代入の左辺に使用できません。
参照:

 3章「演算子の使用」:式とその評価の詳細が記述されています。
 2章
 付録B「KARELプログラム例」:詳細なプログラム例があります。

例:
以下の例ではINTEGERのリテラルをINTEGERの変数に代入し、その値をリテラルと変数の値を使って増加させています。
例A.2.21(a) 代入文(Assignment Statement)
int_var = 5
int_var = 5 + int_var

例:
次の例ではシステム変数$SPEEDに実数値(REAL型)を掛けています。次に配列変数array_1 の要素loop_countに$SPEEDの新しい
値を代入しています。

例A.2.21(b) 代入文(Assignment Statement)


$SPEED = $SPEED * .25
array_1[loop_count] = $SPEED

例:
最後の例では配列array_1 の全ての要素を配列array_2 (の全要素)に代入しています。構造体struc_var_1 の全フィールドを
struc_var_2 (の全フィールド)に代入しています。
例A.2.21(c) 代入文(Assignment Statement)
array_2 = array_1
struc_var_2 = struc_var_1

A.2.22 ATAN2 ビルトインファンクション


目的:
REAL型の角度を返します。その角度はX軸の正方向から、引数X,Yで指定される点と原点を結ぶ線へ、反時計回りに測定した
角度です。
構文:
ATAN2(x1, y1)
戻り値の型: REAL
入出力パラメータ:
[in] x1 :REAL
[in] y1 :REAL
%ENVIRONMENT Group :SYSTEM
詳細:
 x1 及びy1 は位置のX,Y座標を指定します。

 x1 及びy1 が共に0なら、インタプリタはプログラムを終了します。
例:
以下の例では、x, y, and z をそれぞれ100、200、300としてorient(姿勢のうちorinetのこと)の成分direction を計算しています。位
置p1 はdirection をorientの成分として持つ位置と定義されます。
例A.2.22 ATAN2 ビルトインファンクション

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 132 of 412

PROGRAM p_atan2
%NOLOCKGROUP
VAR
p1 : POSITION
x, y, direction : REAL
BEGIN
x = 100
y = 200
direction = ATAN2(x, y) --63.4
WRITE('Direction:', direction, CR)
END p_atan2

A.2.23 ATT_WINDOW_D ビルトインプロシージャ


目的:
表示装置のスクリーンにウィンドウをアタッチする
構文:
ATT_WINDOW_D(window_name, disp_dev_nam, row, col, screen_name, status)
入出力パラメータ:
[in] window_name :STRING
[in] disp_dev_nam :STRING
[in] row :INTEGER
[in] col :INTEGER
[out] screen_name :STRING
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:

 指定の表示装置上で現在アクティブになっているスクリーンに、指定のウィンドウをアタッチします。
 window_name は事前に定義したウィンドウ名である必要があります。
 disp_dev_nam は定義済みの表示装置の一つである必要があります。
'CRT' CRTデバイス
'TP' 教示操作盤
 row 及びcol はスクリーン中での位置を示します。Row 1 は一番上の行、col 1は最も左の列を示します。指定した位置で、
スクリーン中にウィンドウ全体を表示可能である必要があります。例えばスクリーンが24行80列であるとします(関連付け
られた表示デバイスにより定義されている通り)。ウィンドウが2行80列であるとします。row は1から23の範囲である必要
があります。col は1とする必要があります。
 アクティブになったスクリーンの名称がscreen_name に返ります。この名称は後でウィンドウをディタッチする時に使用で
きます。

 ウィンドウが既にスクリーンにアタッチされているとエラーになります。
 status は処理のステータスです。0でないなら、エラーが発生しました。

A.2.24 ATT_WINDOW_Sビルトインプロシージャ
目的:
ウィンドウをスクリーンにアタッチする。
構文:
ATT_WINDOW_S(window_name, screen_name, row, col, status)
入出力パラメータ:
[in] window_name :STRING
[in] screen_name :STRING
[in] row :INTEGER
[in] col :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:

 指定のスクリーンの指定の行と列の位置に、指定のウィンドウをアタッチします。
 window_name 及びscreen_name は事前に定義したウィンドウ及びスクリーン名である必要があります。
 row 及びcol はスクリーン中での位置を示します。Row 1 は一番上の行、col 1は最も左の列を示します。スクリーンの指定
位置でウィンドウ全体が表示可能である必要があります。例えばスクリーンが24行80列であるとします(関連付けられた表

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 133 of 412

示デバイスにより定義されている通り)。ウィンドウが2行80列であるとします。row は1から23の範囲である必要がありま
す。col は1とする必要があります。
 スクリーンが現在アクティブなら、データは表示装置上に即座に表示されます。そうでなければ、表示されているデータ
には変化がありません。
 ウィンドウが既にスクリーンにアタッチされているとエラーになります。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
7.10節「ユーザインタフェースのTIPS」、DET_WINDOW ビルトイン。
例:
詳細なプログラム例に関してはB.9節「辞書ファイルからリストを表示する」(DCLST_EX.KL)を参照して下さい。

A.2.25 AVL_POS_NUMビルトインプロシージャ
目的:
TPプログラムで利用可能な最初の位置番号を返します。
構文:
AVL_POS_NUM(open_id, pos_num, status)
入出力パラメータ:
[in] open_id :INTEGER
[out] pos_num : INTEGER
[out] status : INTEGER
%ENVIRONMENT Group :TPE
詳細:
 open_id はOPEN済みのTPプログラムのものを指定します。このビルトインを呼ぶ前にプログラムをOPENしておく必要が
あります。

 pos_num に利用可能な最初の位置番号が設定されます。
 status は処理のステータスです。0でないならば、エラーが発生しました。
例:
詳細なプログラム例に関してはB.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)を参照して下さい。

A.3 B

A.3.1 BOOLEANデータ型
目的:
変数、関数の戻り値のタイプ、ルーチンのパラメータをBOOLEAN型として定義する。
構文:
BOOLEAN
詳細:
 BOOLEAN型は定義済みのBOOLEANの定数TRUE、FALSE、ON、OFFを表します。
表A.3.1はBOOLEANの定義済み定数を表現するために用いられる、有効なBOOLEAN及び無効なBOOLEANの値の一覧で
す。
表A.3.1 BOOLEANの有効な値と無効な値
有効 無効 理由
TRUE T 単語全体を使用する必要がある。
ON 1 INTEGERの値を使用できない。

 典型的にはTRUEとFALSEは論理的なフラグの表現に用います。ONとOFFは信号の状態の表現に用います。TRUEとONは
等価です。FALSEとOFFも同様です。
 有効なBOOLEANの演算子は以下の通りです。
 AND、OR、NOT
 関係演算子(>, >=, =, <>, <, and <=)
 以下に述べるものがBOOLEANの値を持ちます。
 定義済み、もしくはユーザ定義のBOOLEAN定数(例えば、ONは定義済みの定数です)
 BOOLEAN変数及び構造体のBOOLEAN型のフィールド
 BOOLEAN型の配列の要素
 定義済みもしくはユーザ定義のBOOLEAN型のファンクションからの戻り値(例えばIN_RANGE(pos_var) )
 関係演算子もしくはブール演算子を用いる式(例えばx>5.0)から生じた値

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 134 of 412


 デジタルポート(例えばDIN[2])の値
 BOOLEANの式だけがBOOLEAN型の変数に代入可能です。またBOOLEANの関数からの返すことが可能なのも、
BOOLEAN型のパラメータとして渡すことができるのもBOOLEANの式だけです。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.1節「デフォルトデバイスにデータをセーブする」 (SAVE_VR.KL)
B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)
B.5節「ファイルとプログラムのリスト作成及び文字列操作」 (LIST_EX.KL)
B.6節「ファイルとファイルデバイスのビルトインの使用」 (FILE_EX.KL)
B.7節「動的な表示を行うビルトインの使用」 (DYN_DISP.KL)
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)
B.11節「コピーしたTPプログラムにオフセットを加える」 (CPY_TP.KL)

A.3.2 BYNAME ビルトインファンクション


目的:
KARELプログラムがKARELルーチンに引数として変数を渡すことを可能にします。但しその変数の名前はSTRING型の変数に
入っています。つまり、プログラムの作成とトランスレートの段階で変数の名前を決定する必要が無いことになります。
構文:
BYNAME (prog_name, var_name, entry)
入出力パラメータ:
[in] prog_name :STRING
[in] var_name :STRING
[in,out] entry :INTEGER
%ENVIRONMENT Group :system
詳細:

 このビルトインはルーチンに引数を渡すためだけに使用します。
 entry :変数データテーブル内でのvar_name の位置を示すエントリ番号を返します。この変数を初期化する必要はありませ
ん。また修正してはいけません。
 prog_nameに指定の変数を含んでいるプログラム名を指定します。prog_name が''(引用符が二つ:文字列無し)の場合、実行中
のタスク名を使用します。
 var_nameは静的なプログラム変数を参照する必要があります。

 var_nameが有効な変数名で無い場合、又はルーチンの引数として期待されているデータ型で無い場合、プログラムは終了
します。
 システム変数はBYNAMEを使って渡せません。

A.3.3 BYTEデータ型
目的:
変数をBYTEデータ型として定義します。
構文:
BYTE
詳細:

 BYTEの範囲は (0 ?n ?255)です。BYTEに関しては未初期化のチェックは行われません。
 BYTEは配列内か構造体内でのみ使用可能です。
 BYTEはSHORTとINTEGERに代入できます。そしてSHORTとINTEGERをBYTEに代入できます。BYTEの範囲外にある値
を代入すると、プログラム実行中に検出されてプログラムが終了します。
例:
以下の例はBYTEの配列とBYTEを含む構造体を定義しています。

例A.3.3 BYTEデータ型
PROGRAM byte_ex
%NOLOCKGROUP
TYPE
mystruct = STRUCTURE
param1: BYTE
param2: BYTE
param3: SHORT
ENDSTRUCTURE

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 135 of 412

VAR
array_byte: ARRAY[10] OF BYTE
myvar: mystruct
BEGIN
array_byte[1] = 254
myvar.param1 = array_byte[1]
END byte_ex

A.3.4 BYTES_AHEAD ビルトイン プロシージャ


目的:
KARELのファイルの先読みバッファ(read-ahead buffer)に現在存在する入力データのバイト数を返す。シリアルポートから受信
し、KARELプログラムから読むことができる状態にあるデータがあるか否か、チェックすることができます。BYTES_AHEAD
はソケットメッセージ及びパイプでもサポートしています。
構文:
BYTES_AHEAD(file_id, n_bytes, status)
入出力パラメータ:
[in] file_id :FILE
[out] n_bytes :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :FLBT
詳細:
 file_id はオープンされているファイルを指定します。

 file_id はATR_READAHD属性を0より大きい値にしてオープンされている必要があります。
 n_byte は先読みバッファ中のバイト数です。
 status は処理のステータスです。0でないなら、エラーが発生しました。
 ファイルの用のシリアル通信装置以外のものに対しては、0以外のstatusが返されます。
参照:
7.3.1項「ファイル及びポートの属性設定」
例:
以下の例はポート2から、読まれずに残っているバイトをクリアします。

例A.3.4 BYTES_AHEAD ビルトイン プロシージャ


-- file variable fi must be declared in VAR section of PROGRAM level
ROUTINE purge_port
VAR
s1 : STRING[1]
n_try : INTEGER
n_bytes : INTEGER
stat : INTEGER
BEGIN
stat=SET_PORT_ATR (port_2, ATR_READAHD, 1) -- to have a read
-- ahead buffer of 128 bytes
OPEN FILE fi('RO', 'rdahd.tst')
REPEAT
BYTES_AHEAD (fi, n_bytes, stat)
--Get number of bytes ready
--to be read
if (n_bytes = 0) then --if there are no bytes then set stat
stat = 282
endif
IF (n_bytes >= 1) THEN --there are bytes to be read
read fi(s1::1) --read in one byte at a time
stat=io_status (fi) --get the status of the read operation
endif
UNTIL stat <> 0 --continue until no more bytes are left
END purge_port

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 136 of 412

A.3.5 BYTES_LEFTビルトインプロシージャ
目的:
現在の入力データレコードに残っているバイト数を返します。
構文:
BYTES_LEFT(file_id)
戻り値の型: INTEGER
入出力パラメータ:
[in] file_id :FILE
%ENVIRONMENT Group :FLBT
詳細:
 file_id はオープンされているファイルを指定します。

 読み書き操作が行われていないか、最後に行われた操作がREAD file_id(CR)なら、0が返ります。
 もしfile_id がOPENされたファイルに相当しないか、CRT/KB、教示操作盤、ビジョンウィンドウに開かれている定義済み
の「ファイル」であるなら、プログラムは終了します。


ENTERを押すと改行(LF:line feed)が生成され、BYTES_LEFTはそれをカウントします。

 このファンクションはデータが(ファイルやポートではなくキーボード(教示操作盤又はCRT/KB)から入力された時だけ0以
外の値を返します。

警告
このファンクションはもっぱらウィンドウからデータを読む時だけに使われます。更にデータが入力されたかど
うか決定するために用いられます。このファンクションを他のいかなるファイル装置にも使用しないで下さい。
さもないと人を負傷させたり、装置が損害を受ける可能性があります。

参照:
7.10.1項「教示操作盤上のユーザ画面」、7.10.2項「CRT/KBのユーザ画面」
例:
以下の例は最初に数値rqd_field を読み、その後BYTES_LEFTを使ってユーザが更に数字を入力したか判定します。入力があれ
ば、それらを読みます。

例A.3.5 BYTES_LEFTビルトインプロシージャ
PROGRAM bytleft
%NOLOCKGROUP
%NOPAUSESHFT
%ENVIRONMENT flbt
CONST
default_1 = 0
default_2 = -1
VAR
rqd_field, opt_field_1, opt_field_2: INTEGER
BEGIN
WRITE('Enter integer field(s): ')
READ(rqd_field)
IF BYTES_LEFT(TPDISPLAY) > 0 THEN
READ(opt_field_1)
ELSE
opt_field_1 = default_1
ENDIF
IF BYTES_LEFT(TPDISPLAY) > 0 THEN
READ(opt_field_2)
ELSE
opt_field_2 = default_2
ENDIF
END bytleft

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 137 of 412

A.4 C

A.4.1 CALL_PROGビルトインプロシージャ
目的:
KARELプログラムから外部のKARELプログラムやTPプログラムを呼ぶことを可能にします。実行時まで、プログラムが呼ば
れるか否かを決定する必要が無いことになります。
構文:
CALL_PROG(prog_name, prog_index)
入出力パラメータ:
[in] prog_name :STRING
[in,out] prog_index :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:

 prog_nameは実行するプログラムの名前です。呼び出す側のタスクで実行されます。
 prog_index :prog_nameのプログラムテーブル中のエントリ番号です。この変数を初期化する必要はありません。また修正し
てはいけません。
 CALL_PROG内部ルーチン又は外部ルーチンを呼び出すことはできません。
参照:
CURR_PROG 及び CALL_PROGLINビルトインファンクション

A.4.2 CALL_PROGLIN ビルトインプロシージャ


目的:
KARELプログラムから外部のKARELプログラムやTPプログラムを、指定行から呼び出すことを可能にします。作成やトラン
スレートの段階で、どのプログラムが呼ばれるかを知っている必要が無いことになります。実行時に決定可能なためです。
構文:
CALL_PROGLIN(prog_name, prog_line, prog_index, pause_entry)
入出力パラメータ:
[in] prog_name :STRING
[in] prog_line :INTEGER
[in,out] prog_index :INTEGER
[in] pause_entry :BOOLEAN
%ENVIRONMENT Group :BYNAM
詳細:

 prog_name は実行するプログラムの名前です。呼び出す側のタスクで実行されます。
 prog_line にはTPプログラムの場合に、実行を開始する行を指定します。プログラムの最初から開始するには0又は1を使用
します。

 KARELプログラムは常にプログラムの最初から実行します。
 prog_index :prog_name のプログラムテーブル中のエントリ番号です。この変数を初期化する必要はありません。また修正
してはいけません。

 pause_entry :プログラムに入ったところで一時停止するかどうかを指定します。
 CALL_PROGLINは内部ルーチン又は外部ルーチンを呼び出すことはできません。
参照:
CURR_PROG及びCALL_PROGビルトイン
例:
B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)を参照して下さい。詳細なプログラム例があります。

A.4.3 CANCEL文
目的:
実行中の動作を終了します。
構文:
CANCEL
詳細:
 一つまたはそれ以上の動作グループについて、現在進行中の動作またはペンディング(しかし停止されてはいない)動作

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 138 of 412

をキャンセルします。
 CANCELは既に停止された動作はキャンセルしません。
 そのタスクが制御しているグループ全てがキャンセルされます。特にCANCEL文を使用しているプログラムが%
NOLOCKGROUPディレクティブを含んでいる場合には、CANCEl文はどのグループもキャンセルしません。
 キャンセルされた動作が他のグループとの同期動作や協調動作の一部である場合、全てのグループがキャンセルされま
す。
 ロボット又は付加軸はスムーズに減速して停止します。動作の残りはキャンセルされます。
 キャンセルされた動作は完了したものと扱われ、再開できません。
 CANCELは停止された動作には影響しません。停止されている動作は再開可能です。
 割り込みルーチンがCANCEL文を実行し、割り込まれた文が動作文だとします。割り込まれたプログラムが再開される
時、動作文の次の文から通常通り実行が再開されます。
 CANCELはモニタによって呼ばれるルーチン内で使用すると期待した通り動作しない可能性があります。ルーチンが呼ば
れる前に、動作は既に停止された動作のキューに入っているかもしれません。動作をキャンセルするにはモニタ中で直接
CANCELアクションを使用して下さい。
 異なるタスクの動作はキャンセルできません。

警告
制御装置に2つ以上の動作グループが定義されているなら、動作を実行するKARELプログラムを実行しないで下
さい。2つ以上の動作グループがある場合、全ての動作はTPプログラムから実行されねばなりません。さもない
と、ロボットが予期せぬ動作を行い、人を負傷させたり設備が損害を受ける可能性があります。

参照:
付録E「文法図」に構文の情報が記載されています。

A.4.4 CANCEL FILE文


目的:
進行中のREAD又はWRITE文をキャンセルします。
構文:
CANCEL FILE [file_var]
ここで:
file_var :FILE変数
詳細:

 指定されたファイルの入力又は出力をキャンセルするために使用します。
 ビルトインIO_STATUSを使用してCANCEL_FILEの操作が成功したかどうか決定できます。もし失敗したならばその理由
も決定できます。
参照:
IO_STATUS ビルトインファンクション、7章「ファイル入出力操作」、付録E「文法図」に構文の情報が記載されています。
例:
以下の例はINTEGERを読みます(READします)。しかし前戻りキーが押された場合はREADをキャンセルします。

例A.4.4 CANCEL FILE文

PROGRAM cancfile
%ENVIRONMENT FLBT
%ENVIRONMENT UIF
%NOLOCKGROUP
%NOPAUSESHFT
VAR
int_var: INTEGER

ROUTINE cancel_read
BEGIN
CANCEL FILE TPDISPLAY
END cancel_read

BEGIN
CONDITION[1]:
WHEN TPIN[KY_PREV]+ DO

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 139 of 412

cancel_read
ENABLE CONDITION[1]
ENDCONDITION

ENABLE CONDITION[1]
REPEAT
-- INTEGERをREADします。しかし前戻り(prev)キーでキャンセルします。
-- (ループにより再度READします)
CLR_IO_STAT(TPDISPLAY)
WRITE(CR, 'Enter an integer: ')
READ(int_var)
UNTIL FALSE
end cancfile

A.4.5 CHECK_DICT ビルトインプロシージャ


目的:
指定の辞書の指定の要素をチェックします。
構文:
CHECK_DICT(dict_name, element_no, status)
入出力パラメータ:
[in] dict_name :STRING
[in] element_no :STRING
[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:

 dict_name はチェックする辞書名です。
 element_no はその辞書中の要素番号です。
 status は処理のステータスです。0でないならば、辞書要素が発見できなかった可能性があります。
参照:
ADD_DICT、READ_DICT、WRITE_DICT、REMOVE_DICTビルトインプロシージャ。プログラム例に関してはDISCTRL_LIST
ビルトインプロシージャのプログラム例と9章「辞書とフォーム」を参照して下さい。
例:
詳細なプログラム例に関してはB.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)を参照して下さい。

A.4.6 CHECK_EPOSビルトインプロシージャ
目的:
指定された位置が有効か、その位置に移動する時にエラーが発生しないかをチェックします。
構文:
CHECK_EPOS (eposn, uframe, utool, status <, group_no>)
入出力パラメータ:
[in] eposn :XYZWPREXT
[in] uframe :POSITION
[in] utool :POSITION
[out] status :INTEGER
[in] group_no :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:

 eposn はチェックする位置でXYZWPREXT型です。
 uframe はeposnと使用するユーザ座標です。
 utool はeposnと使用するツール座標です
 status はチェックの状態を示します。指定の位置に到達できる場合、statusは0になります。
 group_no はオプションです。指定された場合eposn のグループ番号となります。指定されていない場合、そのプログラム
が使用するデフォルトのグループとなります。
参照:
GET_POS_FRM

A.4.7 CHECK_NAMEビルトインプロシージャ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 140 of 412

目的:
指定のファイル名やプログラム名に不正な文字が無いかチェックします。
構文:
CHECK_NAME (name_spec, status)
入出力パラメータ:
[in] name_spec :STRING
[out] status :INTEGER
%ENVIRONMENT Group :FDEV
詳細:
 Name_specは不正な文字のチェックを行う文字列を指定します。文字列にファイル名やプログラム名を指定できます。
ファイルやプログラムの拡張子を含めないで下さい。このビルトインは*SYSTEM*のような特殊なファイル名を処理しま
せん。

A.4.8 CHRビルトインファンクション
目的:
数値(コード)に応じた文字を返します。
構文:
CHR (code)
戻り値の型: STRING
入出力パラメータ:
[in] code :INTEGER
%ENVIRONMENT Group :SYSTEM
詳細:

 code ASCII文字セットの文字の数値コードを表します。
 code の値に割り当てられている単一の文字を返します。
参照:
付録D「文字コード」
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.2節「標準ルーチン」 (ROUT_EX.KL)
B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)
B.4節「位置データ設定及びモニタのプログラム」 (PTH_MOVE.KL)
B.10節「DISCTRL_ALPHAビルトインの使用」 (DCALP_EX.KL)
B.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)

A.4.9 CLEARビルトインプロシージャ
目的:
指定のプログラムまたは変数、あるいは両方をメモリからクリアします。
構文:
CLEAR(file_spec, status)
入出力パラメータ:
[in] file_spec :STRING
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 file_spec はクリアするプログラム名とデータのタイプを指定します。以下のタイプが有効です。
拡張子無し:KAREL又はTPプログラムとその変数。TP :TPプログラム。PC :KARELプログラム。VR :KAREL変数
 status は処理のステータスです。0でないなら、エラーが発生しました。


不用意に使用すると必要なプログラムやシステムのプログラムを消してしまう恐れがあります。十分注意して使
用して下さい。

例:
以下の例はKARELプログラムをクリアし、プログラムの変数をクリアし、TPプログラムをクリアします。

例A.4.9 CLEARビルトインプロシージャ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 141 of 412

-- Clear KAREL program


CLEAR('test1.pc', status)
-- Clear KAREL variables
CLEAR('testvars.vr', status)
-- Clear Teach Pendant program
CLEAR('prg1.tp', status)

A.4.10 CLEAR_SEMAビルトインプロシージャ
目的:
指定のセマフォをカウントを0にすることによりクリアします。
構文:
CLEAR_SEMA(semaphore_no)
入出力パラメータ:
[in] semaphore_no :INTEGER
%ENVIRONMENT Group :MULTI
詳細:

 semaphore_no で示されたセマフォをクリアします。
 semaphore_no は1から制御装置で定義されたセマフォの数の範囲に無ければなりません。
 全てのセマフォはCOLDスタートでクリアされます。セマフォを使用する前にクリアするのは良い習慣です。複数のタス
クがセマフォの共有を開始する前に、ひとつのタスク、それらのタスクのうち一つだけが、セマフォをクリアすべきで
す。
参照:
POST_SEMA、PEND_SEMAビルトインプロシージャ、SEMA_COUNTビルトインファンクション、15章「マルチタスク」中の

A.4.11 CLOSE FILE文


目的:
FILE変数とデータファイル又は通信ポートの間の関連付けを解消します。
構文:
CLOSE FILE file_var
ここで:
file_var :a FILE variable
詳細:

 file_var はOPEN FILE文で使用した静的変数である必要があります。
 file_var に関してバッファされていたデータはファイル又はポートに出力されます。
 ビルトインファンクションIO_STATUS は常に0を返します。
参照:
IO_STATUS ビルトインファンクション、7章「ファイル入出力操作」、構文の詳細については付録E「文法図」。
例:
詳細なプログラム例に関してはB.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)を参照して下さい。

A.4.12 CLOSE HAND 文


目的:
指定のハンドを閉じます。
構文:
CLOSE HAND hand_num
ここで:
hand_num :INTEGERの式
詳細:

 この文の実際の効果はI/OシステムでHAND信号がどのように設定されているかに依存します。
 hand_num の有効な範囲は1-2です。さもないと、プログラムはエラーで終了します。
 hand_num が範囲内であってもハンドが接続されていないなら、この文は効果がありません。
 hand_num が範囲内にあってもその値で表現されるHAND信号が割り付けられていないなら、プログラムはエラーで終了し
ます。
参照:
11章「入出力システム」:ハンド信号に関する情報があります。付録E「文法図」:構文の情報が記載されています。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 142 of 412

例:
以下の例はhand_num で指定のハンドを閉じます。

例A.4.12 CLOSE HAND 文


CLOSE HAND hand_num

A.4.13 CLOSE_TPEビルトインプロシージャ
目的:
指定のTPプログラムをクローズします。
構文:
CLOSE_TPE(open_id, status)
入出力パラメータ:
[in] open_id :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 open_id はクローズするTPプログラムを示します。全てのOPEN済みのプログラムは実行する前にクローズされる必要があ
ります。クローズされていないプログラムはOPENしたKARELプログラムが終了するか最後まで実行されるまでオープン
されたままです。
 status は処理のステータスです。0でないならば、エラーが発生しました。
参照:
OPEN_TPEビルトインプロシージャ
例:
詳細なプログラム例に関してはB.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)を参照して下さい。

A.4.14 CLR_IO_STATビルトインプロシージャ
目的:
引数のfileに関して成された最後の操作の結果をクリアします。
構文:
CLR_IO_STAT(file_id)
入出力パラメータ:
[in] file_id :FILE
%ENVIRONMENT Group :PBCORE
詳細:
 file_id(のファイル)に関して行った最後のファイル操作の結果 (IO_STATUSで返されます)を0にクリアします。
参照:
IO_STATUSビルトインファンクション
例:
詳細なプログラム例に関してはB.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)を参照して下さい。

A.4.15 CLR_PORT_SIMビルトインプロシージャ
目的:
指定のポート (I/O)の擬似状態を解除します。
構文:
CLR_PORT_SIM(port_type, port_no, status)
入出力パラメータ:
[in] port_type :INTEGER
[in] port_no :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :iosetup
詳細:

 port_typeに擬似を解除するポートの種類を指定します。指定するコードはKLIOTYPS.KLに定義されています。
 port_no は擬似を解除するポートの番号を指定します。
 status は引数が有効で指定のポートの擬似状態が解除されたなら0となります。
参照:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 143 of 412

GET_PORT_SIM、SET_PORT_SIMビルトインプロシージャ

A.4.16 CLR_POS_REGビルトインプロシージャ
目的:
指定の位置レジスタの指定グループのデータを全て削除します。
構文:
CLR_POS_REG(register_no, group_no, status)
入出力パラメータ:
[in] register_no :INTEGER
[in] group_no :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :REGOPE
詳細:

 register_no :データをクリアする位置レジスタを指定します。
 group_no が0ならば、全グループのデータがクリアされます。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
SET_POS_REGビルトインプロシージャ、GET_POS_REGビルトインファンクション
例:
以下の例は最初の位置レジスタ100個をクリアします。

例A.4.16 CLR_POS_REGビルトインプロシージャ
FOR register_no = 1 to 100 DO
CLR_POS_REG(register_no, 0, status)
ENDFOR

A.4.17 %CMOSVARSトランスレータディレクティブ
目的:
KAREL変数のデフォルトの格納場所をパーマネントメモリとします。
構文:
%CMOSVARS
詳細:

 プログラムに%CMOSVARSが指定されると、全ての静的変数がデフォルトでパーマネントメモリに作成されます。
 %CMOSVARSが指定されないと、全ての静的変数はデフォルトでテンポラリプールに作成されます。
 プログラムに%CMOSVARSを指定したが全ての静的変数をパーマネントメモリに作成する必要が無い場合、必要なしと判
断した変数にIN DRAMを使用可能です。
参照:
A.10.2項「IN節」。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.7節「動的な表示を行うビルトインの使用」 (DCLST_EX.KL)

A.4.18 %CMOS2SHADOW トランスレータディレクティブ


目的:
全てのCMOS変数をshadowメモリに入れるようトランスレータに指示します。
構文:
%CMOS2SHADOW

A.4.19 CNC_DYN_DISBビルトインプロシージャ
目的:
指定ウィンドウ内でのBOOLEAN変数に基いた動的な表示をキャンセルします。
構文:
CNC_DYN_DISB (b_var, window_name, status)
入出力パラメータ:
[in] b_var :BOOLEAN

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 144 of 412

[in] window_name :STRING


[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:

 b_var は動的な表示がキャンセルされるBOOLEANの変数です。
 window_name は定義済みのウィンドウ名である必要があります。定義済みのウィンドウ名に関しては7.10.1項「教示操作盤
上のユーザ画面」及び7.10.2項「CRT/KBのユーザ画面」をご覧下さい。
 ウィンドウ中にこの変数のアクティブな表示が2つ以上有る場合、全ての表示がキャンセルされます。

 status :指定の変数とウィンドウに関して動的な表示が無い場合、エラーが返ります。0でないなら、エラーが発生しまし
た。
参照:
INI_DYN_DISBビルトインプロシージャ。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)
B.8節「動的に表示されている変数の操作」 (CHG_DATA.KL)

A.4.20 CNC_DYN_DISEビルトインプロシージャ
目的:
指定ウィンドウ内でのINTEGER変数に基いた動的な表示をキャンセルします。
構文:
CNC_DYN_DISe (e_var, window_name, status)
入出力パラメータ:
[in] e_var :INTEGER
[in] window_name :STRING
[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:
 e_var は動的な表示がキャンセルされるINTEGERの変数です。

 その他の引数についてはCYC_DYN_DISBビルトインプロシージャの記述を参照して下さい。
参照:
INI_DYN_DISEビルトインプロシージャ
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)
B.8節「動的に表示されている変数の操作」 (CHG_DATA.KL)

A.4.21 CNC_DYN_DISIビルトインプロシージャ
目的:
指定ウィンドウ内でのINTEGER変数の動的な表示をキャンセルします。
構文:
CNC_DYN_DISI(int_var, window_name, status)
入出力パラメータ:
[in] int_var :INTEGER
[in] window_name :STRING
[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:
 int_var は動的な表示がキャンセルされるINTEGERの変数です。

 その他の引数についてはCYC_DYN_DISBビルトインプロシージャの記述を参照して下さい。
参照:
INI_DYN_DISIビルトインプロシージャ
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)
B.8節「動的に表示されている変数の操作」 (CHG_DATA.KL)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 145 of 412

A.4.22 CNC_DYN_DISPビルトインプロシージャ
目的:
指定ウィンドウ内でのポート (I/O)の値に基いた動的な表示をキャンセルします。
構文:
CNC_DYN_DISP(port_type, port_no, window_name, status)
入出力パラメータ:
[in] port_type :INTEGER
[in] port_no :INTEGER
[in] window_name :STRING
[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:
 port_type 及びport_no は動的な表示をキャンセルするポートを指定する整数値です。

 その他の引数についてはCYC_DYN_DISBビルトインプロシージャの記述を参照して下さい。
参照:
INI_DYN_DISPビルトインプロシージャにport_type のコードに関する情報があります。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)
B.8節「動的に表示されている変数の操作」 (CHG_DATA.KL)

A.4.23 CNC_DYN_DISRビルトインプロシージャ
目的:
指定ウィンドウ内でのREAL変数の動的な表示をキャンセルします。
構文:
CNC_DYN_DISR(real_var, window_name, status)
入出力パラメータ:
[in] real_var :REAL
[in] window_name :STRING
[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:
 real_var は動的な表示がキャンセルされるREALの変数です。

 その他の引数についてはCYC_DYN_DISBビルトインプロシージャの記述を参照して下さい。
参照:
INI_DYN_DISRビルトインプロシージャ
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)
B.8節「動的に表示されている変数の操作」 (CHG_DATA.KL)

A.4.24 CNC_DYN_DISSビルトインプロシージャ
目的:
指定ウィンドウ内でのSTRING変数の動的な表示をキャンセルします。
構文:
CNC_DYN_DISS(str_var, window_name, status)
入出力パラメータ:
[in] str_var :STRING
[in] window_name :STRING
[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:

 str_var は動的な表示がキャンセルされるSTRINGの変数です。
 その他の引数についてはCYC_DYN_DISBビルトインプロシージャの記述を参照して下さい。
参照:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 146 of 412

INI_DYN_DISSビルトインプロシージャ
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)
B.8節「動的に表示されている変数の操作」 (CHG_DATA.KL)

A.4.25 CNV_CONF_STRビルトインプロシージャ
目的:
指定のCONFIGをSTRINGに変換します。
構文:
CNV_CONF_STR(source, target)
入出力パラメータ:
[in] source :CONFIG
[out] target :STRING
%ENVIRONMENT Group :STRNG
詳細:
 target はsource で指定の形態のSTRING形式となります。

 target は制御装置に取り付けられているロボットの形態の文字列を格納できる長さが必要です。さもないとプログラムはエ
ラーで終了します。
一般的に長さ25を用いるのは適切です。なぜならどんなロボットの形態の文字列でも最長で25文字であるためです。
参照:
CNV_STR_CONFビルトインプロシージャ
例:
以下の例では位置posn の形態をSTRINGに変換し、config_string に入れています。その後その文字列が画面上に表示されます。

例A.4.25 CNV_CONF_STRビルトインプロシージャ
CNV_CONF_STR(posn.pos_config, config_string)
WRITE('Configuration of posn: ', config_string, cr)

A.4.26 CNV_INT_STRビルトインプロシージャ
目的:
指定のINTEGERをフォーマットに沿ってSTRINGに変換します。
構文:
CNV_INT_STR(source, length, base, target)
入出力パラメータ:
[in] source :INTEGERの式
[in] length :INTEGERの式
[in] base :INTEGERの式
[out] target :STRINGの式
%ENVIRONMENT Group :PBCORE
詳細:
 source は指定フォーマットのSTRINGに変換するINTEGERです。

 length はtarget の最小の長さを指定します。source の内容と少なくとも1文字の先行する空白を含むために必要なら、target
の実際の長さはそれより長くなる可能性があります。

 baseは数値を表現する基数を示します。base は2から16、もしくは0の範囲にある必要があります。0は10進数を示します。
 length 又はbase の値が無効であるなら、target は未初期化となります。
 target がsource と少なくとも1文字の先行する空白を入れるには不十分な長さで宣言されているなら、一つの空白とその残
りに*が入った状態で返されます。
参照:
CNV_STR_INTビルトインプロシージャ
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.5節「ファイルとプログラムのリスト作成及び文字列操作」 (LIST_EX.KL)

A.4.27 CNV_JPOS_RELビルトインプロシージャ
目的:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 147 of 412

各軸データ形式の位置データの、各軸の値をREAL型として取り出します。
構文:
CNV_JPOS_REL(jointpos, real_array, status)
入出力パラメータ:
[in] joint_pos :JOINTPOS
[out] real_array :ARRAY [num_joints] OF REAL
[out] status :INTEGER
%ENVIRONMENT Group :SYSTEM
詳細:
 joint_pos はKARELの各軸データ形式のうちのひとつです。つまりJOINTPOSか、JOINTPOS1からJOINTPOS9までの一つで
す。
 num_joints はシステムの軸の数より小さい値でも可能です。実際の軸の数が不明ならば、9を使うことができます。軸番号
1がreal_array の要素1に格納されます。他も同様です。余分な配列要素は無視されます。

 real_array の要素の単位は度です。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
CNV_REL_JPOSビルトインプロシージャ
例:
詳細なプログラム例に関してはB.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)を参照して下さい。

A.4.28 CNV_REAL_STRビルトインプロシージャ
目的:
指定のREALをフォーマットに沿ってSTRINGに変換します。
構文:
CNV_REAL_STR(source, length, num_digits, target)
入出力パラメータ:
[in] source :REAL の式
[in] length :INTEGER の式
[in] num_digits :INTEGERの式
[out] target :STRING
%ENVIRONMENT Group :STRNG
詳細:

 source は指定フォーマットとするREAL型の値です。
 length はtarget の最小の長さを指定します。source の内容と少なくとも一文字の先行する空白を含むために必要なら、target
の実際の長さはそれより長くなる可能性があります。
 num_digits 小数点の右に表示する桁数を指定します。num_digits が負の数であるなら、source は科学的記数法となります
(ここでABS( num_digits )が小数点の右の桁数を表します)。num_digits が0なら、小数点の表示は抑制されます。
 length 又はnum_digits が不正ならば、target は未初期化で返ります。

 target の宣言長さがsource と一つの空白を入れるには不十分な長さであるなら、target には一つの先行する空白と、残りに*
が入った状態で返ります。
参照:
CNV_STR_REAL ビルトインプロシージャ
例:
以下の例はREAL型の数値(実数)cur_volts をSTRINGに変換し、volt_string に入れています。cur_volts の最小長は7文字が指定さ
れています。小数点以下は2文字が指定されています。その後volt_string の内容が画面上に表示されます。

例A.4.28 CNV_REAL_STRビルトインプロシージャ
cur_volts = AIN[2]
CNV_REAL_STR(cur_volts, 7, 2, volt_string)
WRITE('Voltage=',volt_string,CR)

A.4.29 CNV_REL_JPOSビルトインプロシージャ
目的:
REAL型の配列から各軸形式の位置データを作成します。
構文:
CNV_REL_JPOS(real_array, joint_pos, status)
入出力パラメータ:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 148 of 412

[in] real_array :ARRAY [num_joints] OF REAL


[out] joint_pos :JOINTPOS
[out] status :INTEGER
%ENVIRONMENT Group :SYSTEM
詳細:
 real_arrayはシステムの軸数かそれ以上のサイズで宣言されている必要があります。実際の軸の数が不明ならば、num_joints
として9を使うことができます。要素番号1が軸1に格納されます。他も同様です。余分な配列要素は無視されます。配列が
十分大きくない場合、プログラムは不正な引数のエラーで終了します。

 軸の角度に相当するreal_array の要素のどれかが未初期化であるなら、プログラムは未初期化変数のエラーで終了します。
 real_array の単位は度です。
 joint_pos はKARELの各軸データ形式のうちの一つです。つまりJOINTPOS又はJOINTPOS1からJOINTPOS9のうちの一つで
す。

 joint_pos はreal_arrayの各軸位置データ形式となります。
 status は処理のステータスです。0でないなら、エラーが発生しました。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.4節「位置データ設定及びモニタのプログラム」 (PTH_MOVE.KL)
B.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)

A.4.30 CNV_STR_CONFビルトインプロシージャ
目的:
指定の形態の文字列をCONFIGデータ型に変換します。
構文:
CNV_STR_CONF(source, target, status)
入出力パラメータ:
[in] source :STRING
[out] target :CONFIG
[out] status :INTEGER
%ENVIRONMENT Group :STRNG
詳細:

 target に、sourceで指定の形態の文字列をCONFIGデータ型の形式としたものを出力します。
 source は制御装置に取り付けられているロボットの有効な形態の文字列です。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
CNV_CONF_STRビルトインプロシージャ
例:
以下の例はposn の形態のデータをconfig_string で指定された形態に設定します。

例A.4.30 CNV_STR_CONFビルトインプロシージャ
CNV_STR_CONF(config_string, posn.pos_config, status)

A.4.31 CNV_STR_INTビルトインプロシージャ
目的:
指定のSTRINGをINTEGERに変換します。
構文:
CNV_STR_INT(source, target)
入出力パラメータ:
[in] source :STRING
[out] target :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:

 source がINTEGERに変換されてtarget に格納されます。
 source が有効なINTEGERの表現を含まない場合、target は未初期化となります。
参照:
CNV_INT_STRビルトインプロシージャ
例:
詳細なプログラム例に関しては以下の節を参照して下さい。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 149 of 412

B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)

A.4.32 CNV_STR_REAL ビルトインプロシージャ


目的:
指定のSTRINGをREALに変換します。
構文:
CNV_STR_REAL(source, target)
入出力パラメータ:
[in] source :STRING
[out] target :REAL
%ENVIRONMENT Group :PBCORE
詳細:
 source をREAL型の数値に変換し、結果をtarget に格納します。

 source が有効なREAL型の数値(実数)の10進数の表現で無い場合、target は未初期化になります。source は科学的記数法
(nn.nnEsnn ここでs は+または-記号)を使用することができます。
参照:
CNV_REAL_STRビルトインプロシージャ
例:
以下の例はSTRING str をREAL型に変換し、それをrate に入れます。

例A.4.32 CNV_STR_REAL ビルトインプロシージャ


REPEAT
WRITE('Enter rate:')
READ(str)
CNV_STR_REAL(str, rate)
UNTIL NOT UNINIT(rate)

A.4.33 CNV_STR_TIME ビルトインプロシージャ


目的:
時間を表現するSTRINGをINTEGERの表現に変換します。
構文:
CNV_STR_TIME(source, target)
入出力パラメータ:
[in] source :STRING
[out] target :INTEGER
%ENVIRONMENT Group :TIM
詳細:

 STRINGの引数、source のサイズはSTRING[20]です。
 source は「DD-MMM-YYY HH:MM:SS」フォーマットで入力されている必要があります。秒の指定子、「SS」はオプショ
ンです。秒が指定されていない場合、0が使用されます。source が不正な場合、target は0に設定されます。
 target はシステムの時間をリセットするためにSET_TIMEビルトインプロシージャで使用することができます。target が0な
ら、システムの時間は変更されません。
参照:
SET_TIMEビルトインプロシージャ
例:
以下の例はSTRING型の変数str_time を整数の表現int_time にCNV_STR_TIMEを使って変換しています。ユーザがstr_timeを
「DD-MMM-YYY HH:MM:SS」形式で入力するとの前提です。その後SET_TIMEを使ってシステム内の時間をint_time 指定の時
間に設定しています。

例A.4.33 CNV_STR_TIME ビルトインプロシージャ


WRITE('Enter the new time : ')
READ(str_time)
CNV_STR_TIME(str_time,int_time)
SET_TIME(int_time)

A.4.34 CNV_TIME_STRビルトインプロシージャ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 150 of 412

目的:
時間のINTEGERの表現をSTRINGに変換します。
構文:
CNV_TIME_STR(source, target)
入出力パラメータ:
[in] source :INTEGER
[out] target :STRING
%ENVIRONMENT Group :TIM
詳細:
 GET_TIMEビルトインプロシージャを使用して時間のINTEGERの表現を取得することができます。CNV_TIME_STRを使用
して source をtarget に変換します。後者は「DD-MMM-YYY HH:MM:」形式で表示されます。
参照:
GET_TIMEビルトインプロシージャ
例:
詳細なプログラム例に関してはB.6節「ファイルとファイルデバイスのビルトインの使用」 (FILE_EX.KL)を参照して下さい。

A.4.35 %COMMENT トランスレータディレクティブ


目的:
16までのコメントを指定します。
構文:
%COMMENT = 'ssssssssssssssss'
where ssssssssssssssss = space
詳細:

 コメントは最大16文字まで設定可能です。
 コメントはロード中にプログラムの属性として設定され、教示操作盤又はCRT/KB上に表示可能です。
 %COMMENTはPROGRAM文の後で使用する必要があります。更にCONST、TYPE、VARセクションの前である必要があ
ります。
参照:
SET_ATTR_PRG 及び GET_ATTR_PRG ビルトインプロシージャ
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.1節「デフォルトデバイスにデータをセーブする」 (SAVE_VR.KL)
B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)
B.4節「位置データ設定及びモニタのプログラム」 (PTH_MOVE.KL)
B.6節「ファイルとファイルデバイスのビルトインの使用」 (FILE_EX.KL)
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)
B.10節「DISCTRL_ALPHAビルトインの使用」 (DCALP_EX.KL)

A.4.36 CONDITION...ENDCONDITION文
目的:
グローバルモニタを定義する。
構文:
CONDITION[cond_hand_no]: [with_list]
WHEN cond_list DO action_list
{WHEN cond_list DO action_list}
ENDCONDITION
詳細:
 cond_hand_no モニタに関連付けられた数値を指定します。1から1000の範囲である必要があります。この範囲の外にあると
プログラムはエラーで終了します。

 指定の番号のモニタが既に存在する場合、古いものは新しいもので置き換えられます。
 オプションの[with_list]はモニタの動作に影響する修飾句の指定に使用されます。詳細はA.24.4項「WITH節」と6章「コン
ディションハンドラ」を参照して下さい。

 モニタがトリガするには、1つのWHEN節に列挙された全ての条件が同時に満たされる必要があります。
 複数の条件は全てAND演算子かOR演算子で分離されなくてはなりません。ANDとORの混合は許されません。
 WHEN節の条件が同時に満たされた時に、DOの後に列挙されているアクションが実行されます。
 複数のアクションはコンマか改行で区切られます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 151 of 412


 CONDITION文の中ではルーチンコールは使用できません。
 モニタは最初無効で、トリガすると常に再度無効になります。有効にするにはモニタの番号を指定してENABLE文か
ENABLEアクションを使用して下さい。
 モニタを無効にするにはDISABLE文かDISABLEアクションを使用して下さい。

 モニタは定義されたままであり、後でENABLE文又はアクションを用いて有効にできます。
 PURGE文を用いてモニタの定義を削除可能です。
 モニタはそれを定義したタスクでのみ認識されています。2つの異なるタスクが同じcond_hand_noを使用可能です。異なる
コンディションを指定しているにもかかわらずです。
参照:
6章「コンディションハンドラ」、付録E「文法図」:構文の情報が記載されています。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.4節「位置データ設定及びモニタのプログラム」 (PTH_MOVE.KL)

A.4.37 CONFIGデータ型
目的:
変数又は構造体のフィールドをCONFIGデータ型として定義する。
構文:
CONFIG
詳細:
 CONFIGは構造体のフィールド又は変数を構造体として定義します。その構造体はロボットの形態を定義しているフィー
ルドから構成されており、非常にコンパクトな物です。
 CONFIGは以下の定義済みのフィールドを含んでいます。
 CFG_TURN_NO1 :INTEGER
 CFG_TURN_NO2 :INTEGER
 CFG_TURN_NO3 :INTEGER
 CFG_FLIP :BOOLEAN
 CFG_LEFT :BOOLEAN
 CFG_UP :BOOLEAN
 CFG_FRONT :BOOLEAN

 変数及び構造体のフィールドをCONFIG型として宣言可能です。
 CONFIGデータ型のサブフィールドは通常の構造体のフィールドの記法でアクセス及び設定が可能です。
 CONFIG型として宣言される変数や構造体のフィールドは以下のことが可能です。
 互いへの代入
 引数としての使用
 バイナリファイルへの書き込み及びバイナリファイルからの読み出し
 CONFIG変数又は構造体のフィールドの、各サブフィールドはルーチンの引数に渡せます。しかし常に値渡し(by value)と
なります。
 CONFIGフィールドは全てのPOSITION及びXYZWPR型の変数及びフィールドの一部です。

 CONFIG型のサブフィールドに大きすぎる値を代入しようとするとアボートエラーとなります。
例:
以下の例はCONFIG構造体のサブフィールドに通常の構造体の記法を用いてどのようにアクセスし、設定するかを示していま
す。
例A.4.37 CONFIGデータ型
VAR
config_var1, config_var2: CONFIG
pos_var: POSITION
seam_path: PATH
i: INTEGER
BEGIN
config_var1 = pos_var.config_data
config_var1 = config_var2
config_var1.cfg_turn_no1 = 0
IF pos_var.config_data.cfg_flip THEN...
FOR i = 1 TO PATH_LEN(seam_path) DO
seam_path[i].node_pos.config_data = config_var1
ENDFOR

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 152 of 412

A.4.38 CONNECT TIMER文


目的:
INTEGER型の変数をミリ秒単位の時計として更新開始させます。
構文:
CONNECT TIMER TO clock_var
ここで:
clock_var :静的で、ユーザ定義のINTEGER型変数
詳細:
 clock_var はプログラムが実行されているか一時停止中である限り、$SCR.$COND_TIMEミリ秒毎に$SCR.$COND_TIMEず
つ増加します。それはDISCONNECTで更新を停止するか、プログラムが終了/強制終了するまで続きます。例えば
$SCR.$COND_TIME=32の場合、clock_var は32ずつ、32msec毎に増加します。
 clock_var をCONNECT TIMER文を使う前に初期化し、適切な開始値であることを保証して下さい。

 変数が未初期化の場合、短い期間(32msecまで)そのままです。その後非常に(絶対値の)大きな負の値 (-2.0E31 + 32 msec)と
なり、そこから増加します。
 clock_var がコネクトされている間、プログラムで任意の値にリセット可能です。

 0に初期化されたclock_var は約23日後に約20億から-20億になります。
 clock_var がシステム変数やルーチンのローカル変数なら、プログラムはトランスレートできません。


2つのCONNECT TIMER文が同じ変数を使用しており、異なるタスクで実行されると、タイマは2倍の速さで進
みます。例えばそのタイマは2*$SCR.$COND_TIME msecだけ、$SCR.$COND_TIME毎に増加します。しかし
ながら、二つ以上のCONNECT TIMERが同じ変数を使用しており同じタスクで実行されるなら、これは発生し
ません。

参照:
付録E「文法図」:構文の情報が記載されています。DISCONNECT TIMER 文。

A.4.39 CONTINUEアクション
目的:
一時停止されたタスクの実行を継続する。
構文:
CONTINUE <PROGRAM[n]>
詳細:
 CONTINUEアクションは一時停止された動作を再開しません。

 プログラム実行が一時停止されている場合、CONTINUEアクションはプログラム実行を継続します。
 CONTINUEアクションにPROGRAM[n]節を続けることができます。ここでnは実行を継続するタスク番号です。特定のタ
スク名に対するタスク番号を取得するには、GET_TSK_INFOを使用して下さい。
 CONTINUEを実行するとき、タスクは割り込みルーチンの中にいてもかまいません。しかしながら、以下の状況に注意す
べきです。というのはCONTINUEは現在の割り込みレベルにだけ影響するからです。そしてタスクの割り込みレベルは独
立して一時停止もしくは実行中になる可能性があるためです。
 もし割り込みルーチンとタスクが両方一時停止しているなら、CONTINEUは割り込みルーチンの実行を継続します
が、タスクは一時停止のままです。
 割り込みルーチンが実行中でタスクが一時停止しているなら、CONTINEUは実行中である割り込みルーチンを継続さ
せようとするため、効果が無いと思われます。

A.4.40 CONTINUEコンディション
目的:
プログラム実行が継続された時に満たされるコンディション
構文:
CONTINUE <PROGRAM[n]>
詳細:
 CONTINUE コンディションはプログラムの実行を監視します。
プログラム実行が一時停止に有り、CONTIINUEアクション、CRT/KBまたはCYCLE STARTが操作パネルから発行、プログ
ラム実行が継続されると、CONTINUEコンディションが満たされます。
 CONTINUEコンディションにはPROGRAM[n]節を続けることができます。ここでnは実行継続するタスクの番号です。特

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 153 of 412

定のタスク名に対するタスク番号を取得するには、GET_TSK_INFOを使用して下さい。
例:
以下のプログラムでは、プログラム実行が監視されています。プログラム実行が継続されると、デジタル出力がONになりま
す。
例A.4.40 CONTINUEコンディション
CONDITION[1]:
WHEN CONTINUE DO DOUT[1] = ON
ENDCONDITION

A.4.41 CONT_TASKビルトインプロシージャ
目的:
指定されたタスクを継続します。
構文:
CONT_TASK(task_name, status)
入出力パラメータ:
[in] task_name :STRING
[out] status :INTEGER
%ENVIRONMENT Group :MULTI
詳細:

 task_name は継続するタスク名です。タスクが一時停止されていない場合、statusにエラーが返ります。
 status は処理のステータスです。0でないなら、エラーが発生しました。
 CONT_TASKを実行する時、タスクは割り込みルーチンの中にいてもかまいません。しかしながら、以下の状況に注意す
べきです。というのはCONT_TASKは現在の割り込みレベルにだけ影響するからです。そしてタスクの割り込みレベルは独
立して一時停止もしくは実行中になる可能性があるためです。
 もし割り込みルーチンとタスクが両方一時停止しているなら、CONT_TASKは割り込みルーチンの実行を継続します
が、タスクは一時停止のままです。
 割り込みルーチンが実行中でタスクが一時停止しているなら、CONT_TASKは実行中である割り込みルーチンを継続
させようとするため、効果が無いと思われます。
参照:
RUN_TASK、ABORT_TASK、PAUSE_TASKビルトインプロシージャ、12章「マルチタスク」
例:
以下の例は変数task_strに指定のタスクの再開を試みます。未初期化の場合はAA_01の再開を試みます。

例A.4.41 CONT_TASKビルトインプロシージャ
PROGRAM conttsk
%ENVIRONMENT MULTI
VAR
task_str: STRING[12]
status: INTEGER
BEGIN
IF UNINIT(task_str) THEN
task_str = 'aa_01'
ENDIF
CONT_TASK(task_str, status)
END conttsk

A.4.42 COPY_FILEビルトインプロシージャ
目的:
一つのファイルの内容を別のファイルに上書オプションでコピーします。
構文:
COPY_FILE(from_file, to_file, overwrite_sw, nowait_sw, status)
入出力パラメータ:
[in] from_file :STRING
[in] to_file :STRING
[in] overwrite_sw :BOOLEAN
[in] nowait_sw :BOOLEAN
[out] status :INTEGER

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 154 of 412

%ENVIRONMENT Group :FDEV


詳細:
 from_fileにコピー元の装置、ファイル名、ファイルタイプを指定します。from_file はワイルドカード文字(*)を使って指定
可能です。デバイスの指定が無いなら、デフォルトのデバイスが使用されます。ファイル名とファイルタイプの両方を指
定する必要があります。しかしながら、これらにはワイルドカード文字を使用可能です。
 to_fileにコピー先の装置、ファイル名、ファイルタイプを指定します。to_file はワイルドカード文字(*)を使って指定可能で
す。デバイスの指定が無いなら、デフォルトのデバイスが使用されます。
 overwrite_sw ファイルが既に存在する場合に上書するか否かを指定します。

 もしnowait_sw がTRUEなら、コマンドを実行している間もプログラム実行は継続します。FALSEなら、操作が終了するま
でプログラムは停止します。コンディションハンドラも含まれます。もしタイムクリティカルなモニタがあるなら、それ
は別のタスクとして実行される別のプログラムに分離して下さい。

 コピー中にプログラムが終了させられると、コピーは終了の前に完了します。
 コピー中にコピー先の装置が一杯になると、エラーが返ります。


nowait_sw はこのリリースでは利用できません。FALSEに設定して下さい。

 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
RENAME_FILE、DELETE_FILEビルトインプロシージャ
例:
詳細なプログラム例に関してはB.6節「ファイルとファイルデバイスのビルトインの使用」 (FILE_EX.KL)を参照して下さい。

A.4.43 COPY_QUEUE ビルトインプロシージャ


目的:
キューからINTEGERの配列に、一つ以上の連続したエントリをコピーします。エントリは削除されるのではなく、コピーされ
ます。最古のエントリから最新のエントリに向けてコピーされます。最新までコピーするか、出力の配列が一杯になるまでコ
ピーされます。リストの先頭にあるエントリ(最も古いエントリ群)をいくつ飛ばすかをパラメータで指定します。
構文:
COPY_QUEUE(queue, queue_data, sequence_no, n_skip, out_data, n_got, status)
入出力パラメータ:
[in] queue_t :QUEUE_TYPE
[in] queue_data :ARRAY OF INTEGER
[in] n_skip :INTEGER
[in] sequence_no :integer
[out] out_data :ARRAY OF INTEGER
[out] n_got :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBQMGR
詳細:

 queue_tに値を読むキューに相当する変数を指定します。
 queue_dataに値を読むキューのデータを保持しているINTEGERの配列を指定します。
 sequence_no にコピーする最古のエントリの通し番号を指定します。もしsequence_no が0なら、コピーの開始ポイントはパ
ラメータn_skip で決定されます。
 n_skip :コピーの時に飛ばされる最古のエントリの数。0は最も古いエントリからのコピーを指示します。

 out_data :値がコピーされるINTEGERの配列です。配列のサイズが返される値の数の最大値となります。
 n_got :返されたエントリの数です。以下のいずれかになります。
 0:n_skip 以下のエントリしかキューに無いなら、0となります。
 (queue.n_entries - n_skip ):この値がARRAY_LEN(out_data)より小さい場合
 ARRAY_LEN(out_data):この値がqueue.n_entries - n_skip以下の場合
 status は0が返されます。
参照:
APPEND_QUEUE, DELETE_QUEUE, INSERT_QUEUE ビルトインプロシージャ, 12.7節「キューを利用したタスク間通信」。
例:
以下の例はjob_queueの一つの"page"を取得し、それをdisp_queueで表示します。そのpageにエントリが無いなら、このルーチン
はFALSEを返し、そうでないならTRUEを返します。

例A.4.43 COPY_QUEUE ビルトインプロシージャ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 155 of 412

PROGRAM copy_que
%environment PBQMGR
VAR
job_queue FROM globvars: QUEUE_TYPE
job_data FROM globvars: ARRAY[100] OF INTEGER
ROUTINE disp_queue(data: ARRAY OF INTEGER;
n_disp: INTEGER) FROM dispprog
ROUTINE disp_page(data_array: ARRAY OF INTEGER;
page_no: INTEGER): BOOLEAN
VAR
status: INTEGER
n_got: INTEGER
BEGIN
COPY_QUEUE(job_queue, job_data,
(page_no - 1) * ARRAY_LEN(data_array), 0,
data_array, n_got, status)
IF (n_got = 0) THEN
RETURN (FALSE)
ELSE
disp_queue(data_array, n_got)
RETURN (TRUE)
ENDIF
END disp_page
BEGIN
END copy_que

A.4.44 COPY_TPEビルトインプロシージャ
目的:
TPプログラムを別のTPプログラムにコピーします。
構文:
COPY_TPE(from_prog, to_prog, overwrite_sw, status)
入出力パラメータ:
[in] from_prog :STRING
[in] to_prog :STRING
[in] overwrite_sw :BOOLEAN
[out] status :INTEGER
%ENVIRONMENT Group :TPE
詳細:

 from_prog にコピー元のTPプログラム名を拡張子(tp)無しで指定します。
 to_prog :from_prog をコピーする先の新しいプログラム名を拡張子(tp)無しで指定します。
 overwrite_sw がTRUEなら、to_prog が存在し選択されていないなら自動的に上書します。FALSEならto_prog が既に存在し
ている場合、上書しません。
 status は処理のステータスです。0でないならば、コピーは発生しませんでした。
参照:
CREATE_TPEビルトインプロシージャ
例:
詳細なプログラム例に関してはB.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)を参照して下さい。

A.4.45 COSビルトインファンクション
目的:
引数の角度のコサインを返します。角度の単位は度です。
構文:
COS(angle)
戻り値の型: REAL
入出力パラメータ:
[in] angle :REAL の式
%ENVIRONMENT Group :SYSTEM

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 156 of 412

詳細:
 angle は±18000度の範囲にある角度を指定します。さもないとプログラムはエラーで終了します。
angleが90度の場合、非常に小さい値となります。完全に0にはなりません。0と見なすか否かは必要に応じて判断して下さ
い。
例:
TANビルトインファンクションの例を参照して下さい。

A.4.46 CR 入出力項目
目的:
READ又はWRITE文のdata_itemとして、復帰(carriage return)を示すために使用されます。
構文:
CR
詳細:
 READ文のdata_itemとしてCRを使用すると、同じ入力行の残りのデータは無視されます。
次のdata_itemは次の入力行の最初から読まれます。
 WRITE文中のdata_itemとしてCRを使用すると、それ以降の同じファイルへの出力は次の行に現れます。
参照:
付録E「文法図」:構文の情報があります。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.1節「デフォルトデバイスにデータをセーブする」 (SAVE_VR.KL)
B.2節「標準ルーチン」 (ROUT_EX.KL)
B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)
B.4節「位置データ設定及びモニタのプログラム」 (PTH_MOVE.KL)
B.5節「ファイルとプログラムのリスト作成及び文字列操作」 (LIST_EX.KL)
B.6節「ファイルとファイルデバイスのビルトインの使用」 (FILE_EX.KL)
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)
B.10節「DISCTRL_ALPHAビルトインの使用」 (DCALP_EX.KL)
B.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)

A.4.47 CREATE_TPEビルトインプロシージャ
目的:
指定された名称のTPプログラムを生成します。
構文:
CREATE_TPE(prog_name, prog_type, status)
入出力パラメータ:
[in] prog_name :STRING
[in] prog_type :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :TPE
詳細:

 prog_nameに作成するプログラムの名称を指定します。
 prog_typeに生成するプログラムのタイプを指定します。以下の定数がプログラムのタイプとして有効です。
PT_MNE_UNDEF :サブタイプ未定義のTPプログラム
PT_MNE_JOB :ジョブ
PT_MNE_PROC :プロセス
PT_MNE_MACRO :マクロ
 status は処理のステータスです。0でないならば、エラーが発生しました。可能性のあるエラーを幾つか以下に挙げます。
7015 「指定したプログラムが存在しています」
9030 「プログラム名を入れて下さい」
9031 「先頭に数字は使えません」
9032 「プログラム名に空白は使えません」
9036 「メモリが足りません」
9038 「プログラム名に不適当な文字があります」
 プログラムはシステム上の全グループを参照するように生成されます。プログラムはコメント及びその他の属性無しで生成
されます。プログラムが生成されればSET_ATTR_PRGでプログラムの属性を設定できます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 157 of 412

参照:
SET_ATTR_PRGビルトインプロシージャ

A.4.48 CREATE_VARビルトインプロシージャ
目的:
指定のKAREL変数を生成する。
構文:
CREATE_VAR(var_prog_nam, var_nam, typ_prog_nam, type_nam, group_num, inner_dim, mid_dim, outer_dim, status, <mem_pool>)
入出力パラメータ:
[in] var_prog_nam :STRING
[in] var_nam :STRING
[in] typ_prog_nam :STRING
[in] type_nam :STRING
[in] group_num :INTEGER
[in] inner_dim :INTEGER
[in] mid_dim :INTEGER
[in] outer_dim :INTEGER
[out] status :INTEGER
[in] mem_pool :INTEGER
%ENVIRONMENT Group :MEMO
詳細:
 var_prog_namに変数を生成する先のプログラム名を指定します。var_prog_namが' 'ならデフォルト、つまり現在実行中のプ
ログラム名が使用されます。

 var_namに作成する変数の名前を指定します。
 作成する変数がユーザ定義型ならば、そのユーザ定義型がシステム中に既に生成されていなければなりません。
typ_prog_nam はユーザ定義型のプログラム名を指定します。typ_prog_nam が' 'ならデフォルト、現在実行中のプログラム名
が使用されます。
 type_nam 生成する変数の型の名前を指定します。以下の型の名前が有効です。
'ARRAY OF BYTE'
'ARRAY OF SHORT'
'BOOLEAN'
'CAM_SETUP'
'CONFIG'
'FILE'
'INTEGER'
'JOINTPOS'
'JOINTPOS1'
'JOINTPOS2'
'JOINTPOS3'
'JOINTPOS4'
'JOINTPOS5'
'JOINTPOS6'
'JOINTPOS7'
'JOINTPOS8'
'JOINTPOS9'
'MODEL'
'POSITION'
'REAL'
'STRING[n]'、ここでnは文字列の長さです。指定しない場合のデフォルトは12です。
'VECTOR'
'VIS_PROCESS'
'XYZWPR'
'XYZWPREXT'
他の任意の名称はユーザ定義の型とみなされます。
 group_numに位置データ型で使用するグループ番号を指定します。

 inner_dimに最も内側の配列の次元を指定します。例えばARRAY[10,20,30] OF INTEGEに関してはinner_dim = 30です。変数
が配列で無いならば、inner_dim は0に設定して下さい。
 mid_dim は真ん中の配列の次元を指定します。例えばARRAY[10,20,30] OF INTEGERに関しては、mid_dim = 20 です。変数

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 158 of 412

が2次元配列で無いならば、mid_dim は0に設定して下さい。
 outer_dim は最も外側の配列の次元を指定します。例えばARRAY[10,20,30] OF INTEGEに関してはouter_dim = 10です。変数
が3次元配列で無いならば、outer_dim は0に設定して下さい。
 status は処理のステータスです。0でないなら、エラーが発生しました。
 mem_pool はオプションのパラメータです。変数を生成するメモリプールを指定します。指定されない場合、テンポラリメ
モリであるDRAMに生成されます。DRAM変数は電源投入するたびに再生成されねばならず、その値は常に未初期化にリ
セットされます。
 mem_pool = -1ならば、変数はパーマネントプールであるCMOSに生成されます。

注意
直接的にソースコードに存在しない変数の作成はデバッグを困難にします。またプログラムが意図した通りに機
能しなくなるケースも考えられます。絶対に必要な場合を除いて、使用しないで下さい。

参照:
CLEAR、RENAME_VARビルトインプロシージャ

A.4.49 %CRTDEVICEトランスレータディレクティブ
目的:
CRT/KB装置をデフォルトの装置とします。
構文:
%CRTDEVICE
詳細:
 READ及びWRITEのデフォルトのウィンドウが、TPDISPLAYの代わりにINPUT/TOUTPUTウィンドウになります。

A.4.50 CURJPOSビルトインファンクション
目的:
指定されたグループのツール先端点(TCP)の現在の各軸位置を返します。軸の一つがオーバトラベルであっても返します。
構文:
CURJPOS(axs_lim_mask, ovr_trv_mask <,group_no>)
戻り値の型: JOINTPOS
入出力パラメータ:
[out] axs_lim_mask :INTEGER
[out] ovr_trv_mask :INTEGER
[in] group_no :INTEGER
%ENVIRONMENT Group :SYSTEM
詳細:

 group_no が省略されると、プログラムのデフォルトのグループが想定されます。
 group_no が指定されると、制御装置に定義されている総グループ数と1の間の範囲にある必要があります。
 axs_lim_mask はどの軸が軸範囲の外にあるかを指定します。
 ovr_trv_mask はどの軸がオーバトラベルかを指定します。


axis_limit_mask 及びovr_trv_mask はこのリリースでは使用できません。0を設定可能です。

警告
制御装置に2つ以上の動作グループが定義されているなら、動作を実行するKARELプログラムを実行しないで下
さい。2つ以上の動作グループがある場合、全ての動作はTPプログラムから実行されねばなりません。さもない
と、ロボットが予期せぬ動作を行い、人を負傷させたり設備が損害を受ける可能性があります。

参照:
CURPOSビルトインファンクション
例:
以下の例はロボットの現在の各軸位置を取得します。

例A.4.50 CURJPOSビルトインファンクション
PROGRAM getpos

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 159 of 412

VAR
jnt: JOINTPOS
BEGIN
jnt=CURJPOS(0,0)
END getpos

A.4.51 CURPOSビルトインファンクション
目的:
指定されたグループのツール先端点(TCP)の現在の直交位置を返します。軸の一つがオーバトラベルであっても返します。
構文:
CURPOS(axis_limit_mask, ovr_trv_mask <,group_no>)
戻り値の型: XYZWPREXT
入出力パラメータ:
[out] axis_limit_mask :INTEGER
[out] ovr_trv_mask :INTEGER
[in] group_no :INTEGER
%ENVIRONMENT Group :SYSTEM
詳細:

 group_no が省略されると、プログラムのデフォルトのグループが想定されます。
 group_no が指定されると、制御装置に定義されている総グループ数と1の間の範囲にある必要があります。
 グループはキネマティクスを持つ必要があります。
 指定されたグループの$GROUP[ ].$UFRAMEに対するツール先端点(TCP)の現在位置を返します。
 axis_limit_mask はどの軸が軸範囲の外にあるかを指定します。
 ovr_trv_mask はどの軸がオーバトラベルかを指定します。


axis_limit_mask 及びovr_trv_mask はこのリリースでは使用できません。設定しても無視されます。

警告
制御装置に2つ以上の動作グループが定義されているなら、動作を実行するKARELプログラムを実行しないで下
さい。2つ以上の動作グループがある場合、全ての動作はTPプログラムから実行されねばなりません。さもない
と、ロボットが予期せぬ動作を行い、人を負傷させたり設備が損害を受ける可能性があります。

例:
詳細なプログラム例に関しては B.3節「レジスタ関連ビルトインの使用」を参照して下さい。
B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)

A.4.52 CURR_PROGビルトインファンクション
目的:
現在実行されているプログラムの名前を返します。
構文:
CURR_PROG
戻り値の型: STRING[12]
%ENVIRONMENT Group :BYNAM
詳細:
 CURR_RPOGに割り当てる変数は長さ12以上のSTRING変数である必要がある。

A.5 D

A.5.1 DAQ_CHECKPビルトインプロシージャ
目的:
パイプの状態と、パイプから読むことのできるバイト数をチェックします。
構文:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 160 of 412

DAQ_CHECKP(pipe_num, pipe_stat, bytes_avail)


入出力パラメータ:
[in] pipe_num :INTEGER
[out] pipe_stat :INTEGER
[out] bytes_avail :INTEGER
詳細:

 pipe_num はチェックするパイプの番号(1-5)です。
 pipe_stat は返されるパイプのステータスです。ステータスは以下のフラグの組み合わせです。
 DAQ_PIPREGはパイプが登録されている時(value=1)
 DAQ_ACTIVEはパイプがアクティブの時。即ち開始されている時(value=2)
 DAQ_CREATDはパイプが生成されている時(value=4)
 DAQ_SNAPSHはパイプがスナップショットモードの時(value=8)
 DAQ_1STRDはパイプの最初の読み出しが完了している時(value=16)
 DAQ_OVFLOWはパイプがオーバフローしている時(value=32)
 DAQ_FLUSHはパイプがフラッシュされている時(value=64)

 bytes_avail はパイプから読むことのできるバイト数です。
 返ってきたpipe_statと上記の定数でANDを取ることで、パイプが登録されているか、アクティブか等を決定可能です。例
えば、パイプに書き込む前にはアクティブであるかを確かめる必要があります。
 DAQ_OVFLOWフラッグはパイプに書き込むタスクがDAQ_CHECKPを呼ぶ時には決して設定されません。このフラグはパ
イプからリードするタスクにのみ当てはまります。

参照:
DAQ_WRITEビルトイン
例:
ビルトインファンクションDAQ_WRITEの例DAQ_WRITEを参照して下さい。


このビルトインはデータモニタオプションがロードされている時のみ使用可能です。

A.5.2 DAQ_REGPIPEビルトインプロシージャ
目的:
KARELで使用するためにパイプを登録します。
構文:
DAQ_REGPIPE(pipe_num, mem_type, pipe_size, prog_name, var_name, pipe_name, stream_size, and status)
入出力パラメータ:
[in] pipe_num :INTEGER
[in] mem_type :INTEGER
[in] pipe_size :INTEGER
[in] prog_name :STRING
[in] var_name :STRING
[in] pipe_name :STRING
[in] stream_size :INTEGER
[out] status :INTEGER
詳細:
 pipe_num pipe_numはチェックするパイプの番号(1-5)です。

 mem_type はこのパイプのために使用するメモリのアロケートを可能にします。以下の定数が利用可能です。
 DAQ_DRAMはDRAMメモリのアロケートを可能にします。
 DAQ_DRAMはCMOSメモリのアロケートを可能にします。
 pipe_size はパイプのサイズです。保持することのできるデータレコードの数で表現されます。データレコードのサイズは
var_nameのデータ型によって決定されます。
 prog_name はパイプへの書き込みに使用する変数を含むプログラムの名前です。空文字列が渡されると、現在のプログラ
ム名が使用されます。
 var_name はパイプへの書き込みに使用するデータ型を定義する変数の名前です。一旦登録されると、このデータ型の任意
の変数をパイプに書くことが可能です。
 pipe_name はパイプファイルの名前です。例えば、pipe名がfoo.datとして渡されると、そのパイプはファイル文字
列'PIP:FOO.DAT'を用いてアクセス可能になります。パイプがPCへの送信にのみ用いられているとしても、拡張子付きでユ
ニークなファイル名が必要とされます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 161 of 412

 stream_sizeはパイプがストリームパイプとして開始された場合に、自動的に出力ファイルに出力されるレコードの数で
す。指定された変数の単一のwriteがこのファイル中では単一のレコードを構成します。stream_sizeが0に設定されると、パ
イプは自動的にはストリームレコードをファイル装置に出力しません。全てのデータはパイプが読まれるまでパイプ中に
保持されます。パイプがPCにデータを送信するために使用されている時に、ネットワークの負荷を最適化するために
stream_sizeを使用して下さい。これが0又は1のなら、モニタリングタスクはパイプ中にデータレコードが発見されると直ぐ
にそれを送信します。この数が2以上なら、モニタタスクはパイプ中にその多くのデータレコードが存在するようになるま
で、それらを全てPCに送るのを待ちます。この方法だと、ネットワークパケットを送信するオーバヘッドを最小化できま
す。FRCPipe.StartMonitorメソッドで提供される引数FlushTimeで指定される時間より長くデータがパイプ中に留まることは
ありません。
 status は処理のステータスです。0でないなら、エラーが発生しパイプは登録されませんでした。

 パイプはそれを開始してデータを書き込む前に登録する必要があります。登録操作はシステムにそれを使う時にどのよう
に設定するかを伝えます。パイプを登録した後、レコードあたりある量のデータの書き込みを受け付けるように設定され
ます。指定された変数のサイズによってデータ量は支配されます。パイプの設定を変更するには、DAW_UNREGを用いて
先ず登録を抹消し、再度登録する必要があります。

参照:
DAQ_UNREGビルトイン

例:
以下の例はプログラム中でデータを書き込むためにpipe1を登録しています。

例A.5.2 DAQ_REGPIPEビルトインプロシージャ
PROGRAM DAQREG
%ENVIRONMENT DAQ
CONST
er_abort = 2
VAR
status: INTEGER
datavar: INTEGER
BEGIN
-- Register pipe 1 DRAM as kldaq.dat
-- It can hold 100 copies of the datavar variable
-- before the pipe overflows
DAQ_REGPIPE(1, DAQ_DRAM, 100, '', 'datavar', &
'kldaq.dat', 0, status)
IF status<>0 THEN
POST_ERR(status,' ',0,er_abort)
ENDIF
END DAQREG


このビルトインはデータモニタオプションがロードされている時のみ使用可能です。

A.5.3 DAQ_STARTビルトインプロシージャ
目的:
書き込みのためにパイプをアクティブにします。
構文:
DAQ_START(pipe_num, pipe_mode, stream_dev, status)
入出力パラメータ:
[in] pipe_num :INTEGER
[in] pipe_mode :INTEGER
[in] stream_dev :STRING
[out] status :INTEGER
詳細:

 pipe_num は開始するパイプの番号(1-5)です。パイプは事前に登録されている必要があります。
 pipe_mode はパイプで使用する出力モードです。以下の定数が使用されます。
 DAQ_SNAPSHTはスナップショットモードです(パイプを読む度にパイプの全ての内容が読まれます)。
 DAQ_STREAMはストリームモードです(同じパイプを読む度に前のリード以降に書かれたデータが読まれます)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 162 of 412

 stream_devはレコードが自動的にストリームされるデバイスです。登録時にstream sizeを0にしているとこのパラメータは無
視されます。
 status は処理のステータスです。0でないなら、エラーが発生しました。パイプの登録は抹消されていません。

 このビルトインは書き込みを行うのと同じタスク/プログラムから呼ぶことも、別のタスクから呼ぶこともできます。書き
込みを行うタスクはパイプを開始するまで休眠していることが可能です。開始時点でそのタスクがデータの書き込みを開
始します。
 PCアプリケーションがFRCPipe.startMonitorメソッドを発行する時にパイプは自動的に開始します。この場合、KARELアプ
リケーションがDAQ_STARTを呼んでパイプをアクティブにする必要はありません。

参照:
DAQ_REGPIPEビルトイン及びDAQ_STOPビルトイン

例:
以下の例ではパイプ1番をストリーミングモードで開始しています。

例A.5.3 DAQ_STARTビルトインプロシージャ
PROGRAM PIPONOFF
%ENVIRONMENT DAQ
CONST
er_abort = 2
VAR
status: INTEGER
tpinput: STRING[1]
BEGIN
-- prompt to turn on pipe
WRITE('Press 1 to start pipe')
READ (tpinput)
IF tpinput = '1' THEN
-- start pipe 1
DAQ_START(1, DAQ_STREAM, 'RD:', status)
IF status<>0 THEN
POST_ERR(status,' ',0,er_abort)
ELSE
-- prompt to turn off pipe
WRITE('Press any key to stop pipe')
READ (tpinput)
-- stop pipe 1
DAQ_STOP(1, FALSE, status)
IF status<>0 THEN
POST_ERR(status,' ',0,er_abort)
ENDIF
ENDIF
ENDIF
END PIPONOFF


このビルトインはデータモニタオプションがロードされている時のみ使用可能です。

A.5.4 DAQ_STOPビルトインプロシージャ
目的:
書き込みのパイプを停止します。
構文:
DAQ_STOP(pipe_num, force_off, status)
入出力パラメータ:
[in] pipe_num :INTEGER
[in] force_off :BOOLEAN
[out] status :INTEGER
詳細:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 163 of 412


 pipe_num は停止するパイプの番号(1-5)です。
 force_off がTRUEなら、他のアプリケーションがパイプの開始を要求していたとしても、パイプを強制的にオフにします。
FALSEなら、全ての開始要求が停止要求で処理されることになるならばパイプはOFFになります。そうでないなら、ONの
ままです。
 status は処理のステータスです。0でないなら、エラーが発生し、パイプは停止されていません。

 各パイプの開始/停止はリファレンスカウントで機能しています。パイプは第一に開始要求で開始され、その後の各開始要
求もカウントされています。そのパイプの停止要求を受けると、カウントが減ります。
 パイプが強制的にOFFにされないなら、そしてカウントが0でないなら、パイプはONのままです。force_offフラグをTRUE
にすることで、パイプはカウントによらずOFFにされます。カウントはリセットされます。
 PCアプリケーションによって発行されるFRCPipe.StopMonitorメソッドはDAQ_STOPの呼び出しと等価です。

参照:
DAQ_STARTビルトイン
例:
DAQ_STARTビルトインファンクションの例PIPONOFFを参照して下さい。


このビルトインはデータモニタオプションがロードされている時のみ使用可能です。

A.5.5 DAQ_UNREGビルトインプロシージャ
目的:
事前に登録されているパイプの登録を抹消します。そのパイプは他のデータのために使用されているかもしれません。
構文:
DAQ_UNREG(pipe_num, status)
入出力パラメータ:
[in] pipe_num :INTEGER
[out] status :INTEGER
詳細:

 pipe_num は登録を抹消するパイプの番号(1-5)です。
 status は処理のステータスです。0でないなら、エラーが発生しました。パイプの登録は抹消されていません。
 パイプの登録を抹消すると、異なるデータサイズ、パイプのサイズ、名称等を再度設定可能となります。DAQ_REGPIPE
を用いて再登録する前に、登録を抹消する必要があります。
参照:
DAQ_REGPIPEビルトイン。
例:
以下の例はパイプ1番の登録を抹消しています。

例A.5.5 DAQ_UNREGビルトインプロシージャ
PROGRAM DAQUNREG
%ENVIRONMENT DAQ
CONST
er_abort = 2
VAR
status: INTEGER
BEGIN
-- unregister pipe 1
DAQ_UNREG(1, status)
IF status<>0 THEN
POST_ERR(status,' ',0,er_abort)
ENDIF
END DAQUNREG


このビルトインはデータモニタオプションがロードされている時のみ使用可能です。

A.5.6 DAQ_WRITEビルトインプロシージャ
目的:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 164 of 412

パイプにデータを書き込みます。
構文:
DAQ_WRITE(pipe_num, prog_name, var_name, status)
入出力パラメータ:
[in] pipe_num :INTEGER
[in] prog_name :STRING
[in] var_name :STRING
[out] status :INTEGER
詳細:

 pipe_num はデータを書き込むパイプの番号(1-5)です。
 prog_name は書き込む変数を含んでいるプログラムの名称です。空文字列が渡されると、現在のプログラム名が使用され
ます。
 var_name は書き込む変数の名前です。

 status は処理のステータスです。0でないなら、エラーが発生しデータは書き込まれていません。
 パイプを登録した時と同じ変数を用いてデータを書き込む必要はありません。必要なことは、パイプの登録に使用した変
数のタイプと書き込む変数のデータ型が一致していることだけです。
 PCアプリケーションがパイプを監視しているなら、DAQ_WRITEを呼び出す度にFRPipe_Receiveイベントが発生します。
参照:
DAQ_REGPIPE及びDAQ_CHECKP
例:
以下の例はパイプ2番を登録し、そのパイプがアクティブになった時に書き込みを行っています。

例A.5.6 DAQ_WRITEビルトインプロシージャ
PROGRAM DAQWRITE
%NOLOCKGROUP
%ENVIRONMENT DAQ
%ENVIRONMENT SYSDEF
CONST
er_abort = 2
TYPE
daq_data_t = STRUCTURE
count: INTEGER
dataval: INTEGER
ENDSTRUCTURE
VAR
status: INTEGER
pipestat: INTEGER
numbytes: INTEGER
datavar: daq_data_t
BEGIN
-- 10KBのパイプ2をDRAMに登録。パイプファイル名はkldaq.datです。
DAQ_REGPIPE(2, DAQ_DRAM, 100, '', 'datavar', &
'kldaq.dat', 1, status)
IF status<>0 THEN
POST_ERR(status,' ',0,er_abort)
ENDIF
-- DAQ_CHECKPでモニタの状態を監視します。
DAQ_CHECKP(2, pipestat, numbytes)
datavar.count = 0
WHILE (pipestat AND DAQ_PIPREG) > 0 DO -- 登録されている間、ループします。
-- update data variable
datavar.count = datavar.count + 1
datavar.dataval = $FAST_CLOCK
-- パイプがアクティブかチェックします。
IF (pipestat AND DAQ_ACTIVE) > 0 THEN
-- パイプに書き込みます。
DAQ_WRITE(2, '', 'datavar', STATUS)
IF status<>0 THEN
POST_ERR(status,' ',0,er_abort)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 165 of 412

ENDIF
ENDIF
-- 負荷軽減のため時間待機を入れます。
DELAY(200)
DAQ_CHECKP(2, pipestat, numbytes)
ENDWHILE
END DAQWRITE


このビルトインはデータモニタオプションがロードされている時のみ使用可能です。

A.5.7 %DEFGROUPトランスレータディレクティブ
目的:
トランスレータによって使用されるデフォルトの動作グループを指定します。
構文:
%DEFGROUP = n
詳細:

 n は動作グループの番号です。
 範囲は1から制御装置のグループ数です。
 %DEFGROUPが指定されないとグループ1が使用されます。

警告
制御装置に2つ以上の動作グループが定義されているなら、動作を実行するKARELプログラムを実行しないで下
さい。2つ以上の動作グループがある場合、全ての動作はTPプログラムから実行されねばなりません。さもない
と、ロボットが予期せぬ動作を行い、人を負傷させたり設備が損害を受ける可能性があります。

A.5.8 DEF_SCREEN ビルトインプロシージャ


目的:
スクリーンを定義する。
構文:
DEF_SCREEN(screen_name, disp_dev_name, status)
入出力パラメータ:
[in] screen_name :STRING
[in] disp_dev_name :STRING
[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:
 指定された表示デバイスに関連付けられたスクリーンを定義します。そのスクリーンにウィンドウをアタッチしてアク
ティブにすることができます(表示されます)。

 screen_name: 1から4文字の有効な名前(文字列)で、固有の名前とする必要があります。
 disp_dev_name :定義済みの表示装置の一つである必要があります。さもないとエラーが返ります。定義済み表示装置は以
下の通りです。
 'TP' 教示操作盤
 'CRT' CRT/KB
 status は処理のステータスです。(0でないなら、エラーが発生しました。)
参照:
ACT_SCREEN ビルトインプロシージャ
例:
詳細なプログラム例に関してはB.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)を参照して下さい。

A.5.9 DEF_WINDOWビルトインプロシージャ
目的:
ウィンドウを定義する
構文:
DEF_WINDOW(window_name, n_rows, n_cols, options, status)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 166 of 412

入出力パラメータ:
[in] window_name :STRING
[in] n_rows :INTEGER
[in] n_cols :INTEGER
[in] options :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 ウィンドウを定義します。定義した後にスクリーンにアタッチすることができます。そのウィンドウはファイルをオープ
ン可能で、書き込みや入力をそのまま表示することが可能で、ダイナミックに情報を表示することが可能です。

 window_name :1から4文字の有効な名前(文字列)で、他のウィンドウと同じ名前にならない必要があります。
 n_rows 及びn_cols は標準的なサイズの文字でウィンドウのサイズを指定します。2倍角の文字を含む任意の行はこの数で指
定の文字の半分しか含んでいません。1行目及び1列目は1から始まります。
 options は以下のいずれかである必要があります。
0 :オプション無し
wd_com_cursr :共通カーソル
wd_scrolled :垂直スクロール
wd_com_cursr + wd_scrolled :共通カーソル + 垂直スクロール
 共通カーソルが指定されると、使用されているファイル変数に関わらず、ある書き込み終了時にカーソルが残った場所が
次の書き込みのカーソル位置になります。また、このウィンドウに関連付けられた任意のファイル変数で設定した表示属
性は、そのウィンドウと関連付けられた全てのファイル変数に適用されます。共通カーソルが指定されないなら、カーソ
ル位置と表示属性(文字サイズの属性は除きます。これは常にウィンドウの現在行に適用されます)はウィンドウのオープン
に使用したファイル変数毎に別々に保持されます。2つ以上のタスクが書き込む可能性があり、これらの書き込みが前の書
き込みの終了後にその位置から行われ、重ならないなら、共通カーソルの属性は役立ちます。例としてはログの表示があ
ります。
 垂直スクロールが指定され、行が下がるような文字(復帰(132)、改行/復行(133)、復帰及び改行/復行(135))が受信された時
にカーソルがウィンドウの最後の行にあるとします。この場合、最初の行以外の行が上に移動して最後の行がクリアされ
ます。行が上がるような文字(逆改行/復行:134)が書KARELと、最後の行以外の行が下がり、最初の行がクリアされます。
垂直スクロールの指定が無いと、最終行又は最初の行がクリアされますが他の行は影響を受けません。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
ATT _WINDOW_D、ATT_WINDOW_S ビルトインプロシージャ

A.5.10 %DELAYトランスレータディレクティブ
目的:
250msec毎に発生するプログラム実行の遅れの量を設定します。デフォルトでは250msec毎に各プログラムの実行には8msecの遅
れが発生します。このことによりCRT/KB及び教示操作盤のユーザインタフェースのような他の機能をCPUが実行可能になって
います。%DELAYはユーザインタフェースのようなシステムタスクにCPUの時間をより割けるようにデフォルト設定を変更す
る方法を提供しています。
構文:
%DELAY = n
詳細:
 n はmsec単位の遅れ時間です。

 DELAYが指定されない場合のデフォルトの遅れ時間は8msecです。
 n が0に設定するとプログラムは利用可能なCPU時間を100%使用します。これを行うと、教示操作盤やCRT/KBはプライオ
リティが低いので操作不能になる可能性があります。プログラムが動作やI/Oを待機しているなら遅れ時間0は許容できま
す。
 1つのプログラムの実行が遅延されている間、他のプログラムの実行は禁止されています。割り込みルーチン(モニタに
よって呼ばれるルーチン)の実行も遅延されます。

 非常に大きな遅れ時間を設定すると全てのプログラムの実行をひどく妨げます。
 あるプログラムを他のプログラムのために遅らせるためには%DELAYの代わりにDELAY文を使用して下さい。

A.5.11 DELAY文
目的:
ミリ秒で指定された時間、プログラムの実行を一時中断します。
構文:
DELAY time_in_ms

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 167 of 412

ここで:
time_in_ms :INTEGERの式
詳細:

 DELAYを実行した時に動作が実行中の場合、動作は継続します。
 time_in_msはmsec単位の時間です。実際の遅延時間は指定時間より短くなります。丸め後の時間より0から$SCR.$cond_time
ミリ秒の間だけ短くなった時間となります。

 0を指定すると効果がありません。
 DELAYを実行中にプログラムが一時停止しても、DELAYの時間は測定され続けます。
 プログラムがまだ一時停止している間にDELAYの遅れ時間が経過すると、再開時には遅れ無しにDELAYに続く文の実行
から継続されます。そうでないなら、再開時にプログラムは遅延を完了してから実行を継続します。

 プログラムを終了すると、又はプログラム一時停止中にCRT/KBからRUNを行うと、進行中の遅延が終了します。
 プログラムが遅延の時間切れを待機している間、KCL>SHOW TASKコマンドはDELAYによる待機であることを表示しま
す。
 一日を超える待機時間又は0以下の待機時間を指定するとプログラムはエラーで終了します。
参照:
付録E「文法図」:構文の情報があります。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.8節「動的に表示されている変数の操作」 (CHG_DATA.KL)

A.5.12 DELETE_FILEビルトインプロシージャ
目的:
指定されたファイルを削除します。
構文:
DELETE_FILE(file_spec, nowait_sw, status)
入出力パラメータ:
[in] file_spec :STRING
[in] nowait_sw :BOOLEAN
[out] status :INTEGER
%ENVIRONMENT Group :FDEV
詳細:
 file_specに削除するファイルの装置、ファイル名、ファイルタイプを指定します。file_spec はワイルドカード文字(*)を使用
して指定可能です。装置が指定されない場合、デフォルトの装置が使用されます。
 もしnowait_sw がTRUEなら、コマンドを実行している間もプログラム実行は継続します。FALSEなら、操作が終了するま
でプログラムは停止します。コンディションハンドラも含まれます。もしもタイムクリティカルなモニタがあるなら、そ
れは別のタスクとして実行される別のプログラムに分離して下さい。


nowait_sw はこのリリースでは利用できません。FALSEに設定して下さい。

 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
COPY_FILE、RENAME_FILEビルトインプロシージャ
例:
詳細なプログラム例に関してはB.1節「デフォルトデバイスにデータをセーブする」(SAVE_VRS.KL)を参照して下さい。

A.5.13 DELETE_QUEUE ビルトインプロシージャ


目的:
キューからエントリを削除します。
構文:
DELETE_QUEUE(sequence_no, queue, queue_data, status)
入出力パラメータ:
[in] sequence_no :INTEGER
[in,out] queue_t :QUEUE_TYPE
[in,out] queue_data :ARRAY OF INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBQMGR

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 168 of 412

詳細:

 COPY_QUEUEを使用して通し番号のリストを取得して下さい。
 sequence_no に削除するエントリの通し番号を指定します。COPY_QUEUEを使用して通し番号のリストを取得して下さ
い。

 queue_t はキューとして使う変数です。
 queue_data はキュー中のデータを保持する配列です。この配列の長さがキューの最大エントリ数を決定します。
 status 指定の通し番号がキューに無い場合、61003、"不正なシークエンスナンバーです"が返ります。
参照:
APPEND_QUEUE, COPY_QUEUE, INSERT_QUEUE ビルトインプロシージャ、12.7節「キューを利用したタスク間通信」。

A.5.14 DEL_INST_TPEビルトインプロシージャ
目的:
指定されたTPプログラムの指定された命令を削除します。
構文:
DEL_INST_TPE(open_id, lin_num, status)
入出力パラメータ:
[in] open_id :INTEGER
[in] lin_num :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :TPE
詳細:
 open_id はOPEN済みのTPプログラムのものを指定します。DEL_INST_TPEビルトインを呼ぶ前に、OPEN_TPEビルトイン
を使用してプログラムをread/writeアクセスでオープンしている必要があります。

 lin_num は命令を削除する行番号を指定します。
 status は処理のステータスです。0でないならば、エラーが発生しました。
参照:
CREATE_TPE、CLOSE_TPE、COPY_TPE、OPEN_TPE、SELECT_TPEビルトインプロシージャ

A.5.15 DET_WINDOWビルトインプロシージャ
目的:
スクリーンからウィンドウをディタッチします。
構文:
DET_WINDOW(window_name, screen_name, status)
入出力パラメータ:
[in] window_name :STRING
[in] screen_name :STRING
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:

 指定したウィンドウを指定したスクリーンから削除します。
 window_name 及びscreen_name は有効で定義済みである必要があります。
 このウィンドウで隠されている他のウィンドウの領域は再表示されます。このウィンドウで占められており他のウィンド
ウで占められていない領域はクリアされます。

 ウィンドウがスクリーンにアタッチされていない場合エラーが発生します。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
DEF_WINDOW、ATT_WINDOW_S、ATT_WINDOW_Dビルトインプロシージャ
例:
詳細なプログラム例に関してはB.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)を参照して下さい。

A.5.16 DISABLE CONDITIONアクション


目的:
モニタ中で使用され、他のモニタを無効にします。
構文:
DISABLE CONDITION [cond_hand_no]
ここで:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 169 of 412

cond_hand_no :INTEGERの式
詳細:
 モニタが定義されていないなら、DISABLE CONDITIONは効果がありません。

 モニタが定義されているが現在有効にされていないなら、DISABLE CONDITIONは効果がありません。
 モニタが無効にされると、そのコンディション(CONDITIONとWHENで指定した条件)は検証されません。それ故に再度有
効にされたなら、有効にした後で条件が満たされなければなりません。

 無効にされたモニタを再度有効にするにはENABLE CONDITION文又はアクションを使用して下さい。
 cond_hand_no は1-1000の範囲である必要があります。さもないとプログラムはエラーで終了します。
参照:
DISABLE CONDITIONのモニタ中での使用に関する詳細に関しては6章、「コンディションハンドラ」を参照して下さい。
例:
以下の例はモニタ1番がトリガした時にモニタ2番を無効にします。

例A.5.16 DISABLE CONDITIONアクション


CONDITION[1]:
WHEN EVENT[1] DO
DISABLE CONDITION[2]
ENDCONDITION

A.5.17 DISABLE CONDITION文


目的:
指定されたモニタを無効にします。
構文:
DISABLE CONDITION [cond_hand_no]
ここで:
cond_hand_no : INTEGERの式
詳細:
 モニタが定義されていないなら、DISABLE CONDITIONは効果がありません。

 モニタが定義されているが現在有効にされていないなら、DISABLE CONDITIONは効果がありません。
 モニタが無効にされると、そのコンディション(CONDITIONとWHENで指定した条件)は検証されません。それ故に、再度
有効にするならば、有効にした後で条件が満たされなければなりません。

 無効にされたモニタを再度有効にするにはENABLE CONDITION文又はアクションを使用して下さい。
 cond_hand_no は1-1000の範囲である必要があります。さもないとプログラムはエラーで終了します。
参照:
6章「コンディションハンドラ」:モニタ中でのDISABLE CONDITIONの使用に関する詳細。
付録E「文法図」:構文上の情報が記載されています。
例:
以下の例はオペレータにcount を見るかどうか選択可能にしています。
例A.5.17 DISABLE CONDITION文
PROGRAM disconds
VAR
count : INTEGER
answer : STRING[1]
ROUTINE showcount
BEGIN
WRITE ('count = ',count::10,CR)
END showcount
BEGIN
CONDITION[1]:
WHEN EVENT[1] DO -- Condition[1]がcountを表示
showcount
ENABLE CONDITION[1]
ENDCONDITION
ENABLE CONDITION[1]
count = 0
WRITE ('do you want to see count?')
READ (answer,CR)
IF answer = '0'

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 170 of 412

THEN DISABLE CONDITION[1] -- condition[1]を無効に


ENDIF -- Countは表示されません。
FOR count = 1 TO 13 DO
SIGNAL EVENT[1]
ENDFOR
END disconds

A.5.18 DISCONNECT TIMER文


目的:
事前にタイマとして接続されているクロック変数の更新を停止します。
構文:
DISCONNECT TIMER timer_var
ここで:
timer_var :静的でユーザ定義のINTEGER変数
詳細:
 timer_var が現在タイマとして接続されていない場合、DISCONNECT TIMER文は効果がありません。

 timer_var がシステム変数又はローカル変数であるなら、プログラムはトランスレートできません。
参照:
付録E「文法図」:構文の情報があります。CONNECT TIMER文
例:
以下の例はINTEGER型変数timevar を0に設定し、タイマに接続します。DO[1]がONになるのを待機し、タイマの接続を切断し
ます。
例A.5.18 DISCONNECT TIMER文
PROGRAM EX_DISC
%NOLOCKGROUP
VAR
timevar:INTEGER
BEGIN
timevar = 0
CONNECT TIMER TO timevar
WAIT FOR DOUT[1] = ON
DISCONNECT TIMER timevar
WRITE(' timevar:', timevar, CR)
END EX_DISC

A.5.19 DISCTRL_ALPHビルトインプロシージャ
目的:
指定されたウィンドウで英数字入力の制御と表示を行います。
構文:
DISCTRL_ALPH(window_name, row, col, str, dict_name, dict_ele, term_char, status)
入出力パラメータ:
[in] window_name :STRING
[in] row :INTEGER
[in] col :INTEGER
[in,out] str :STRING
[in] dict_name :STRING
[in] dict_ele :INTEGER
[out] term_char :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:
 window_name はstr が現在表示されているウィンドウを指示します。利用可能なウィンドウの一覧に関しては7.10.1項「教
示操作盤上のユーザ画面」又は7.10.2項「CRT/KBのユーザ画面」を参照して下さい。

 row はstr が表示されている行番号を指定します。
 col はstr が表示されている列番号を指定します。
 str は修正するKAREL文字列を指定します。それは現在window_name 上にrow 及びcolの位置に表示されています。
 dict_name 入力可能な単語を含んでいる辞書を指定します。dict_name は以下の定義済みの値を指定することも可能です。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 171 of 412

'PROG' :プログラム名の入力
'COMM' :コメントの入力
 dict_ele その単語の辞書要素を指定します。dict_ele は最大で5行のデータを持つことができます。最後の行に
は"&new_line"をつけてはなりません。

 dict_name に定義済みの値を使用したなら、dict_ele は無視されます。
 term_char に入力を終了した時の文字を示すコードが入ります。終了の条件となるキーのコードはインクルードファイル
KLEVKEYS.KLに定義されています。通常は以下の定義済み定数のキーが返されます。
ky_enter
ky_prev
ky_new_menu
 DISCTRL_ALPHは教示操作盤からの文字列の入力を制御し、その表示を行います。CRT/KB装置からの文字列入力を制御
及び表示するには、INTEGER型の変数device_statを生成し、それをcrt_panelに設定する必要があります。教示操作盤を制御
対象にするにはdevice_statをtp_panelに設定して下さい。
 status は処理のステータスです。0でないなら、エラーが発生しました。


DISCTRL_ALPHはユーザ又はユーザ2画面が選択されている場合のみ、文字列入力の制御と表示を行います。そ
れ故に、DISCTRL_ALPHを呼ぶ前にユーザメニューを強制的に表示するにはFORCE_SPMENU(device_stat,
SPI_TPUSER, 1)を使用して下さい。

参照:
ACT_SCREEN、DISCTRL_LISTビルトインプロシージャ
例:
詳細なプログラム例に関してはB.10節「DISCTRL_ALPHAビルトインの使用」(DCLAP_EX.KL)を参照して下さい。

A.5.20 DISCTRL_FORMビルトインプロシージャ
目的:
教示操作盤又はCRT/KB上にフォームを表示して制御します。
構文:
DISCTRL_FORM(dict_name, ele_number, value_array, inact_array, change_array, term_mask, def_item, term_char, status)
入出力パラメータ:
[in] dict_name : STRING
[in] ele_number : INTEGER
[in] value_array : ARRAY OF STRING
[in] inactive_array : ARRAY OF BOOLEAN
[out] change_array : ARRAY OF BOOLEAN
[in] term_mask : INTEGER
[in,out] def_item : INTEGER
[out] term_char : INTEGER
[out] status : INTEGER
%ENVIRONMENT Group :PBcore
詳細:

 dict_name はフォームを含む4文字の辞書名です。
 ele_number はフォームの辞書要素です。
 value_array はフォーム中の各編集可能データ項目又は表示専用データ項目に相当する変数名の配列です。各変数名
は'[prog_name]var_name'のように指定可能です。
 [prog_name] は指定された変数を含むプログラム名です。もし[prog_name]が指定されていない場合、現在実行中のプロ
グラム名が使われます。[*SYSTEM*]はシステム変数に対して使用して下さい。
 var_name はプログラムレベルでグローバルな(静的な)変数を参照する必要があります。
 var_name はノード番号、構造体のメンバ、配列の添え字を含めることが可能です。
 var_name はポート変数を添え字付で指定可能です。例えば'DIN[1]'です。
 inactive_array はフォーム中の項目に相当するブーリアンの配列です。
 各ブーリアンはデフォルトでFALSEです。これはアクティブであることを意味します。
 ブーリアンをTRUEに設定可能です。これはそのitemを非アクティブにします。選択できなくなります。
 配列のサイズはフォーム中の項目の数より多くも少なくもなり得ます。
 inactive arrayを使用しないなら配列のサイズを1にできます。配列を初期化する必要はありません。
 change_array はフォーム中の各編集可能データ項目又は表示専用データ項目に相当するブーリアンの配列です。
 値が設定されると対応するブーリアンがTRUEになります。そうでなければFALSEになります。この配列を初期化する

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 172 of 412

必要はありません。
 配列のサイズはフォーム中のdata itemの数より多くも少なくも成り得ます。
 change_arrayを使用しないならば、配列のサイズを1にできます
 term_mask はフォームが終了する条件を示すビットマスクです。これはインクルードファイルklevkmsk.klに定義された定数
のORとして下さい。
kc_func_key — ファンクションキー
kc_enter_key — 入力キー及び(CRT/KBの)リターンキー
kc_prev_key — 前戻りキー
選択可能項目もしくはnew menuが選択されると、term_maskによらずformは常に終了します。
 バージョン6.20及び6.21では、入力としてのdef_item はフォームを表示した時に強調表示させたい項目です。出力としての
def_item にはフォームを終了するキーが押された時に強調表示されていた項目が返ります。
 バージョン6.22以降では、入力としてのdef_item はフォームを表示した時に強調表示させたい項目です。def_item はフォー
ムの表示中継続的に更新され、現在強調表示されている項目になっています。
 term_char にはフォームを終了させたキーやその他の条件が入ります。終了条件となるキーコードはインクルードファイル
klevkeys.klに定義されています。通常出力されるキーは以下の定義済み定数です。
ky_undef — 終了文字は入力されていません。
ky_select — 選択可能項目が選択されました。
ky_new_menu — 新規画面表示が要求されました。
ky_f1 — ファンクションキー1が選択されました。
ky_f2 — ファンクションキー2が選択されました。
ky_f3 — ファンクションキー3が選択されました。
ky_f4 — ファンクションキー4が選択されました。
ky_f5 — ファンクションキー5が選択されました。
ky_f6 — ファンクションキー6が選択されました。
ky_f7 — ファンクションキー7が選択されました。
ky_f8 — ファンクションキー8が選択されました。
ky_f9 — ファンクションキー9が選択されました。
ky_f10 — ファンクションキー10が選択されました。
 DISCTRL_FORMは教示操作盤上にフォームを表示します。CRT/KBにフォームを表示するには、INTEGER型の変数
device_stat を定義し、それをcrt_panel に設定する必要があります。教示操作盤を制御対象にするにはdevice_stat をtp_panel
に設定して下さい。
 status は処理のステータスです。status が0以外の値を返したなら、エラーが発生しました。


DISCTRL_FORMはユーザ2画面が選択中の場合のみフォームを表示します。それゆえに、DISCTRL_FORMを呼
ぶ前に、FORCE_SPMENU(device_stat, SPI_TPUSER2,1)を用いてユーザ2画面を強制的に表示して下さい。

参照:
9章「辞書とフォーム」:詳細な例が記載されています。

A.5.21 DISCTRL_LISTビルトインプロシージャ
目的:
指定ウィンドウ中でリスト内での選択とカーソル移動の表示と制御を行います。
構文:
DISCTRL_LIST(file_var, display_data, list_data, action, status)
入出力パラメータ:
[in] file_ var :FILE
[in,out] display_data :DISP_DAT_T
[in] list_data :ARRAY OF STRING
[in] action :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 file_var はリストデータを表示するウィンドウに対してオープンされている必要があります。

 display_data はリストの表示に使用されます。詳細はDISP_DAT_Tデータ型を参照して下さい。
 list_data :表示するデータのリストを含みます。
 action は以下のいずれかである必要があります。
dc_disp : display_dataに帝位gされている通りにカーソル位置を決定します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 173 of 412

dc_up : カーソルを1行上に移動します。
dc_dn : カーソルを一行下に移動します。
dc_lf : カーソルを1フィールド分左に移動します。
dc_rt : カーソルを1フィールド分右に移動します。
 status は処理のステータスです。0でないなら、エラーが発生しました。

 ウィンドウ中で情報の表示及び制御を行うならばDISCTRL_FORMの方が望ましい方法です。
参照:
DISCTRL_FORMビルトインプロシージャ、7.10.1項「教示操作盤上のユーザ画面」、7.10.2項「CRT/KBのユーザ画面」、9章
「辞書とフォーム」
例:
詳細なプログラム例に関してはB.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)を参照して下さい。

注意
入力パラメータの有効性はチェックされません。入力パラメータが正しいか否か確認する必要があります。さも
ないとビルトインは適切に機能しない可能性があります。

A.5.22 DISCTRL_PLMNビルトインプロシージャ
目的:
プルアップメニューを作成し、カーソルの移動とメニューからの選択を制御します。
構文:
DISCTRL_PLMN(dict_name, element_no, ftn_key_no, def_item, term_char, status)
入出力パラメータ:
[in] dict_name :STRING
[in] element_no :INTEGER
[in] ftn_key_num :INTEGER
[in,out] def_item :INTEGER
[out] term_char :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group : UIF
詳細:
 辞書中のメニューのデータは列挙化された値のリストからなります。そのデータが教示操作盤上のプルアップメニューに
表示され選択されます。最大でも9個として下さい。各値は12文字までの文字列です。
element_no で始まる連続する一連の辞書要素が値を定義します。各値は別々の要素とする必要があります。&new_lineで終
わってはいけません。各文字列に順番に1から9の値が割り振られます。最後の辞書要素は""である必要があります。

 dict_name はメニューのデータを含んでいる辞書の名前です。
 element_no は最初の項目の辞書要素です。
 ftn_key_num はプルアップメニューを表示するファンクションキーです。
 def_item はメニューに入った時に最初に強調表示する項目です。1は最初の項目を指定します。リターン時にはdef_item は
終了文字が押された時に強調表示されていた項目です。
 term_char に入力を終了した時の文字を示すコードが入ります。終了条件となるキーコードはインクルードファイル
klevkeys.klに定義されています。通常出力されるキーは以下の定義済み定数です。
ky_enter — ある項目が選択されました。
ky_prev — 項目は選択されませんでした
ky_new_menu — 新規画面表示が要求されました。
ky_f1
ky_f2
ky_f3
ky_f4
ky_f5
 status は処理のステータスです。0でないなら、エラーが発生しました。
例:
この例では辞書ファイルTPEXAMEG.TXが制御装置に'EXAM' としてロードされています。TPPLMN.KLがDISCTRL_PLMNを呼
んでファンクションキー3上にプルアップメニューを表示、処理しています。

例A.5.22 DISCTRL_PLMNビルトインプロシージャ
----------------------------------------------
TPEXAMEG.TX
----------------------------------------------

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 174 of 412

$subwin_menu
"Option 1"
$
"Option 2"
$
"Option 3"
$
"Option 4"
$
"Option 5"
$
"......"
----------------------------------------------
TPPLMN.KL
----------------------------------------------
PROGRAM tpplmn
%ENVIRONMENT uif
VAR
def_item: INTEGER
term_char: INTEGER
status: INTEGER
BEGIN
def_item = 1
DISCTRL_PLMN('EXAM', 0, 3, def_item, term_char, status)
IF term_char = ky_enter THEN
WRITE (CR, def_item, ' was selected')
ENDIF
END tpplmn

A.5.23 DISCTRL_SBMNビルトインプロシージャ
目的:
サブメニューを作成し、カーソルの移動とメニューからの選択を制御します。
構文:
DISCTRL_SBMN(dict_name, element_no, def_item, term_char, status)
入出力パラメータ:
[in] dict_name :STRING
[in] element_no :INTEGER
[in,out] def_item :INTEGER
[out] term_char :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group : UIF
詳細:
 辞書中のメニューのデータは列挙化された値のリストからなります。そのデータが教示操作盤上の'subm'サブウィンドウに
表示され選択されます。5ページのサブウィンドウ、最大の35個の値を表示可能です。各値は16文字までの文字列です。4
個以下の値を使用するなら、各文字列は40文字まで使用可能です。
element_no で始まる連続する一連の辞書要素が値を定義します。各値は別々の要素とする必要があります。&new_lineで終
わってはいけません。各文字列に順番に1-35の値が割り当てられます。最後の辞書要素は""である必要があります。

 dict_name メニューのデータを含んでいる辞書の名前です。
 element_no 最初の項目の辞書要素です。
 def_item メニューに入った時に最初に強調表示する項目です。1は最初の項目を指定します。リターン時にはdef_item は終
了文字が押された時に強調表示されていた項目です。
 term_char に入力を終了した時の文字を示すコードが入ります。終了条件となるキーコードはインクルードファイル
FROM:klevkeys.klに定義されています。通常出力されるキーは以下の定義済み定数です。
ky_enter — ある項目が選択されました。
ky_prev — 項目は選択されませんでした
ky_new_menu — 新規画面表示が要求されました。
ky_f1
ky_f2

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 175 of 412

ky_f3
ky_f4
ky_f5
 status は処理のステータスです。0でないなら、エラーが発生しました。
例:
この例では辞書ファイルTPEXAMEG.TXが制御装置に'EXAM' としてロードされています。TPSBMN.KLがDISCTRL_SBMNを呼
んでサブメニューを表示、処理しています。

例A.5.23 DISCTRL_SBMNビルトインプロシージャ
----------------------------------------------
TPEXAMEG.TX
----------------------------------------------
$subwin_menu
"Red"
$
"Blue"
$
"Green"
$
"Yellow"
$
"Brown"
$
"Pink"
$
"Mauve"
$
"Black"
$
"Lime"
$
"Lemon"
$
"Beige"
$
"Blue"
$
"Green"
$
"Yellow"
$
"Brown"
$
"\a"
----------------------------------------------
TPSBMN.KL
----------------------------------------------
PROGRAM tpsbmn
%ENVIRONMENT uif
VAR
def_item: INTEGER
term_char: INTEGER
status: INTEGER
BEGIN
def_item = 1
DISCTRL_SBMN('EXAM', 0, def_item, term_char, status)
IF term_char = ky_enter THEN
WRITE (CR, def_item, ' was selected')
ENDIF

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 176 of 412

END tpsbmnbb

A.5.24 DISCTRL_TBLビルトインプロシージャ
目的:
教示操作盤上に表を表示して制御します。
構文:
DISCTRL_TBL(dict_name, ele_number, num_rows, num_columns, col_data, inact_array, change_array, def_item, term_char, term_mask,
value_array, attach_wind, status)
入出力パラメータ:
[in] dict_name :STRING
[in] ele_number :INTEGER
[in] num_rows :INTEGER
[in] num_columns :INTEGER
[in] col_data :ARRAY OF COL_DESC_T
[in] inact_array :ARRAY OF BOOLEAN
[out] change_array :ARRAY OF BOOLEAN
[in,out] def_item :INTEGER
[out] term_char :INTEGER
[in] term_mask :INTEGER
[in] value_array :ARRAY OF STRING
[in] attach_wind :BOOLEAN
[out] status :INTEGER
%ENVIRONMENT Group : UIF
詳細:
 DISCTRL_TBLはINIT_TBL及びACT_TBLに似ています。各キーストロークに関し特殊処理が必要ない場合には
DISCTRL_TBLを用いて下さい。

 dict_name はヘッダ部分を含む4文字の辞書名です。
 ele_number はヘッダ部分の辞書要素番号です。
 num_rows は表の行数です。
 num_columns は表の列数です。
 col_data は列を記述する構造体の配列です。表中の一列に対し一つの要素です。完全な記述に関しては付録AのINIT_TBL
ビルトインを参照して下さい。
 inact_array は表の各列に対応するBOOLEAN変数の配列です。
 各BOOLEAN変数をTRUEにして列を非アクティブの状態にできます。これはカーソルをその列に移動できないことを
意味します。
 配列のサイズは表中の項目の個数より多くも少なくも成り得ます。
 inact_array を使用しない場合、配列のサイズを1に設定可能です。配列を初期化する必要はありません。
 change_array はBOOLEAN変数の2次元配列です。変数は表中のフォーマット指定子を持つデータ項目に相当します。
 値が設定されると対応するブーリアンがTRUEになります。そうでなければFALSEになります。この配列を初期化する
必要はありません。
 配列のサイズは表中のデータ項目の個数より多くも少なくも成り得ます。
 change_array を使用しないならば、配列のサイズを1にできます。
 def_item は表が表示された時に強調表示したい項目を含む行です。returnに際してはdef_itemは終了文字が押された時点で
強調表示されていた項目を含む行です。
 term_char には表を終了させたキーやその他の条件が入ります。終了条件となるキーコードはインクルードファイル
klevkeys.klに定義されています。通常出力されるキーは以下の定義済み定数です。
ky_undef — 終了文字は入力されていません。
ky_select — 選択可能項目が選択されました。
ky_new_menu — 新規画面表示が要求されました。
ky_f1 — ファンクションキー1が選択されました。
ky_f2 — ファンクションキー2が選択されました。
ky_f3 — ファンクションキー3が選択されました。
ky_f4 — ファンクションキー4が選択されました。
ky_f5 — ファンクションキー5が選択されました。
ky_f6 — ファンクションキー6が選択されました。
ky_f7 — ファンクションキー7が選択されました。
ky_f8 — ファンクションキー8が選択されました。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 177 of 412

ky_f9 — ファンクションキー9が選択されました。
ky_f10 — ファンクションキー10が選択されました。
 term_mask は要求の終了する条件を示すビットマスクです。これはインクルードファイルklevkmsk.klに定義された定数の
ORとして下さい。
kc_display —表示可能キー
kc_func_key — ファンクションキー
kc_enter_key — 入力キー及び(CRT/KBの)リターンキー
kc_delete — 削除及び後退キー
kc_lr_arw — 左右の矢印キー
kc_ud_arw — 上下の矢印キー
kc_other — その他のキー(前戻り等)
 value_array は表中の各列のデータ項目に対応する変数名の配列です。各変数名は'[prog_name]var_name'として指定可能で
す。
 [prog_name] 指定の変数を含んでいるプログラム名を指定します。[prog_name]が指定されていない場合、現在実行中の
プログラム名が使用されます。
 var_name はプログラムレベルでグローバルな(静的な)変数を参照する必要があります。
 var_name はノード番号、構造体のメンバ、配列の添え字を含めることが可能です。
 attach_wind はテーブルマネージャが表示デバイスにウィンドウを貼り付ける必要がある時に1にして下さい。既にアタッチ
されているなら0に設定可能です。
 status は処理のステータスです。0でないなら、エラーが発生しました。
例:
辞書テキストの設定とパラメータの初期化の例に関してはINIT_TBLビルトインの例を参照して下さい。

A.5.25 DISMOUNT_DEVビルトインプロシージャ
目的:
指定された装置をディスマウントします。
構文:
DISMOUNT_DEV (device, status)
入出力パラメータ:
[in] device :STRING
[out] status :INTEGER
%ENVIRONMENT Group :FDEV
詳細:

 deviceにディスマウントする装置を指定します。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
MOUNT_DEV、FORMAT_DEVビルトインプロシージャ
例:
詳細なプログラム例に関してはB.6節「ファイルとファイルデバイスのビルトインの使用」 (FILE_EX.KL)を参照して下さい。

A.5.26 DISP_DAT_Tデータ型
目的:
DISCTRL_LISTビルトインで使用するデータ型を定義します。
構文:
disp_dat_t = STRUCTURE
win_start : ARRAY [4] OF SHORT
win_end : ARRAY [4] OF SHORT
curr_win : SHORT
cursor_row : SHORT
lins_per_pg : SHORT
curs_st_col : ARRAY [10] OF SHORT
curs_en_col : ARRAY [10] OF SHORT
curr_field : SHORT
last_field : SHORT
curr_it_num : SHORT
sob_it_num : SHORT
eob_it_num : SHORT

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 178 of 412

last_it_num : SHORT
menu_id : SHORT
ENDSTRUCTURE
詳細:
 disp_dat_t : 4個の異なるウィンドウでのリストの表示に使用可能です。リストは最大10個までのフィールドを持つことが可
能です。左右矢印キーでフィールド間を移動します。上下矢印キーでフィールド内を移動します。

 win_start は各ウィンドウの開始行です。
 win_end は各ウィンドウの終了行です。
 curr_win は表示するウィンドウを定義します。カウントは0から始まります (0が最初のウィンドウを表示します)。
 cursor_row は現在のカーソル行です。
 lins_per_pg ページ毎の行数です。
 curs_st_col 各フィールドのカーソルの開始列です。教示操作盤に関しては0-39の範囲です。
 curs_en_col は各フィールドのカーソル終了列です。教示操作盤に関しては0-39の範囲です。
 curr_field は現在カーソルが位置しているフィールドです。カウントは0から始まります(0はカーソルを最初のフィールドに
セットします)。

 last_field リスト中の最後のフィールドです。
 curr_it_num カーソルのある項目の番号です。
 sob_it_num 配列中の最初の項目の項目番号です。
 eob_it_num 配列中の最後の項目の項目番号です。
 last_it_num リスト中の最後の項目の項目番号です。
 menu_id は現在のメニューの識別子です。実装されていません。未初期化のままでかまいません。
例:
詳細なプログラム例に関してはB.9節「辞書ファイルからリストを表示する」 (DCLIST_EX.KL)を参照して下さい。

A.6 E

A.6.1 ENABLE CONDITIONアクション


目的:
指定されたモニタを有効にします。
構文:
ENABLE CONDITION [cond_hand_no]
ここで:
cond_hand_no :INTEGERの式
詳細:
 ENABLE CONDITIONは以下の場合には効果がありません。

 モニタが定義されていない。
 モニタが定義されているが、既に有効になっている。
 cond_hand_no は1-1000の範囲である必要があります。さもないとプログラムはエラーで終了します。

 モニタが有効にされると、モニタがスキャンされる度にそのコンディション(CONDITIONとWHENで指定した条件)が検査
されます。コンディションが満たされると、対応するアクションが実行されモニタは無効となります。有効にされたモニ
タを無効にするにはDISABLE文かアクションを実行して下さい。
 再度有効にするにはENABLE文かアクションを実行して下さい。

 モニタはそれを定義したタスクでのみ認識されています。あるタスクは別のタスクのモニタを有効にできません。
参照:
DISABLE CONDITIONアクション、6章「コンディションハンドラ」

A.6.2 ENABLE CONDITION文


目的:
指定されたモニタを有効にします。
構文:
ENABLE CONDITION [cond_hand_no]
ここで:
cond_hand_no : INTEGERの式
詳細:
 ENABLE CONDITIONは以下の場合には効果がありません。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 179 of 412


 モニタが定義されていない。
 モニタが定義されているが、既に有効になっている。
 cond_hand_no は1-1000の範囲である必要があります。さもないとプログラムはエラーで終了します。

 モニタが有効にされると、モニタがスキャンされる度にそのコンディション(CONDITIONとWHENで指定した条件)が検査
されます。条件が満たされると、対応するアクションが実行されモニタは無効となります。有効にされたモニタを無効に
するにはDISABLE文かアクションを実行して下さい。
 再度有効にするにはENABLE文かアクションを実行して下さい。

 モニタはそれを定義したタスクでのみ認識されています。あるタスクは別のタスクのモニタを有効にできません。
参照:
DISABLE CONDITION文、6章「コンディションハンドラ」、付録E「文法図」:構文の情報があります。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.4節「位置データ設定及びモニタのプログラム」(PTH_MOV.KL)

A.6.3 %ENVIRONMENTトランスレータディレクティブ
目的:
環境ファイルのロード
構文:
%ENVIRONMENT path_name
 オフラインのトランスレータによって使用され、バイナリファイルpath_name.evのロードを指定します。環境ファイルは定
義済み定数、ポート方、システム変数、ビルトインの情報を含みます。
 制御装置のソフトウェアのインストール時に全てのEVファイルがロードされています。それ故に、制御装置のトランス
レータは%ENVIRONMENT文を無視します。既にEVファイルがロードされているからです。
 path_name 以下のいずれか一つが可能です。
 BYNAM
 CTDEF (プログラムからCRT/KBのシステム変数へのアクセスを可能にします)
 ERRS
 FDEV
 FLBT
 IOSETUP
 KCLOP
 MEMO
 MIR
 MOTN
 MULTI
 PATHOP
 PBCORE
 PBQMGR
 REGOPE
 STRNG
 SYSDEF (プログラムから大部分のシステム変数へのアクセスを可能にします)
 SYSTEM
 TIM
 TPE
 TRANS
 UIF
 VECTR
 %ENVIRONMENT文が指定されていない場合、オフラインのトランスレータはTRMNEG.TXに指定されている全てのEV
ファイルをロードします。トランスレータがこれらのファイルを現在のディレクトリかPATHの通ったディレクトリの一つ
に発見できる必要があります。
 少なくとも1つ%ENVIRONMENT文が指定されていると、オフラインのトランスレータはプログラムに指定のファイルの
みをロードします。自分で%ENVIRONMENTを指定するとトランスレートに必要なメモリを節約し、トランスレートが早
くなります。特にシステム変数が必要で無い場合に当てはまります。SYSDEF.EVは最大のファイルだからです。
 SYSTEM.EV及びPBCORE.EVはトランスレータによって自動的にロードされます。プログラム中に指定しないで下さい。
オフラインのトランスレータはSYSTEM.EVが発見できないと"Continuing without system defined symbols" のメッセージを表
示します。このメッセージを無視しないで下さい。SYSTEM.EVファイルがロードされていることを確認して下さい。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 180 of 412

B.1節「デフォルトデバイスにデータをセーブする」 (SAVE_VR.KL)
B.4節「位置データ設定及びモニタのプログラム」 (PTH_MOVE.KL)

A.6.4 ERR_DATAビルトインプロシージャ
目的:
要求されたエラーをアラーム履歴から読んでエラーを返します。
構文:
ERR_DATA(seq_num, error_code, error_string, cause_code, cause_string, time_int, severity, prog_nam)
入出力パラメータ:
[in,out] seq_num :INTEGER
[out] error_code :INTEGER
[out] error_string :STRING
[out] cause_code :INTEGER
[out] cause_string :STRING
[out] time_int :INTEGER
[out] severity :INTEGER
[out] prog_nam :STRING
%ENVIRONMENT Group :ERRS
 seq_num は前回エラーを要求した時のシーケンス番号です。履歴中の最古のアラームを望むならseq_num を0として下さ
い。最も新しいアラームを望むなら、seq_num をMAXINTとして下さい。
 seq_num は返されたエラーのシーケンス番号になります。
 seq_num の初期値が、履歴中の最新のシーケンス番号より大きいならば、seq_num は0で返されて、他のデータは返さ
れません。
 seq_num の初期値が履歴中の最古のエラーのシーケンス番号より小さいなら、最古のエラーが返されます。
 error_code はエラーコードを返し、error_string はエラーメッセージを返します。error_string は少なくとも40文字の長さが必
要です。さもないとプログラムはエラーで終了します。
 cause_code はコーズコードが存在すればそれを返します。cause_string はそのメッセージを返します。cause_string は少なく
とも40文字の長さが必要です。さもないとプログラムはエラーで終了します。
 error_code 及び cause_code は以下のフォーマットです。
ffccc (10進数)
ここでffはエラーのファシリティコードです。
cccは指定のファシリティコード中のエラーコードです。
エラーのファシリティコードに関しては6章, 「コンディションハンドラ」を参照して下さい。
 time_int error_code が発生した時刻を返します。この時刻はエンコードされています。CNV_TIME_STRビルトインを使って
日付と時間の文字列に変換して下さい。
 severity は以下のerror_codes のいずれかを返します。
0 :WARNING
1 :PAUSE
2 :ABORT
 プログラム実行によって発生したなら、prog_nam がエラーが発生したプログラムを特定します。
 POST_ERRによりエラーがポストされたなら、又はエラーが特定のプログラムに関係しない(例えば非常停止)なら、
prog_nam は` "" 'で返されます。
 ERR_DATAをPOST_ERRの直後に呼び出すと、ポストしたばかりのエラーを返さないかもしれません。POST_ERRは実際
のアラーム履歴に加えられる前にリターンするためです。
参照:
POST_ERRビルトインプロシージャ

A.6.5 ERROR コンディション


目的:
エラーをコンディションとして指定します。
構文:
ERROR[n]
ここで:
n :an INTEGERの式又はアスタリスク(*)
詳細:

 n がINTEGERなら、それはエラーコード番号を示します。そのエラーが発生した時にコンディションは満たされます。
 n がアスタリスク(*)なら、それはワイルドカードを表します。任意のアラームが発生した時に条件が満たされます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 181 of 412

 このコンディションはEVENTコンディションです。つまりスキャンされた時にエラーが検出された時だけ条件が満たされ
ます。それ以降のスキャンではエラーは記憶されていません。
参照:
6章「コンディションハンドラ」:コンディションの使用の詳細。エラーコードの一覧に関しては、適切なアプリケーションの
取扱説明書

A.6.6 EVAL節
目的:
モニタの定義中で式の評価を可能にします。
構文:
EVAL(expression)
ここで:
expression :有効なKARELの式
詳細:

 expression はスキャン中に動的に評価されるのではなく、モニタが定義された時に評価されます。
 expression にはファンクションの呼び出しを含まない任意の有効な式を使用可能です。
参照:
6章「コンディションハンドラ」:コンディション使用の詳細

A.6.7 EVENTコンディション
目的:
あるイベントのイベント番号を指定します。そのイベント番号でSIGNAL EVENT文又はアクションが実行された時にコンディ
ションが成立します。
構文:
EVENT[event_no]
ここで:
event_no :is an INTEGER expression
詳細:

 イベント発生の通知があった時にTRUEになるユーザ定義のイベントとして使用可能です。
 SIGNAL_EVENT文又はアクションを使ってイベントの発生を通知します。
 event_no は-32768から32767の範囲にある必要があります。
参照:
SIGNAL EVENTアクション、CONDITION又はSIGNAL EVENT文

A.6.8 EXPビルトインファンクション
目的:
e (約2.71828)をREALの引数で累乗した値に等しいREALの値を返します。
構文:
EXP(x)
戻り値の型: REAL
入出力パラメータ:
[in] x :REAL
%ENVIRONMENT Group :SYSTEM
詳細:

 EXPはe (自然対数の低)をx 乗した値を返します。
 x は80より小さい必要があります。さもないと、プログラムはエラーで一時停止します。
例:
以下の例はeを(-6.44 + timevar/(timevar + 20))乗した値を求めます。

例A.6.8 EXPビルトインファンクション

PROGRAM ex_exp
%NOLOCKGROUP
VAR
timevar : real
distance : real
BEGIN

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 182 of 412

WRITE (CR, 'Enter time needed for move:')


READ (timevar)
distance = timevar *
EXP(-6.44 + timevar/(timevar + 20))
WRITE (CR, CR, 'Distance for move:', distance)
END ex_exp

A.7 F

A.7.1 FILEデータ型
目的:
変数をFILE型として定義します。
構文:
file
詳細:
 FILEを使用して静的変数をfile型として宣言できます。

 OPEN FILE、READ、WRITE、CANCEL FILE、CLOSE FILE文ではFILE変数を使用する必要があります。
 FILE変数をルーチンの引数として渡すことができます。
 幾つかのビルトインはFILE変数を引数として必要とします。そのようなビルトインにはBYTES_LEFT、CLR_IO_STAT、
GET_FILE_POS、IO_STATUS、SET_FILE_POSがあります。
 FILE変数は3個の制限があります。
 FILE変数は静的変数である必要があります。
 FILE変数はセーブされません。
 FILE変数はファンクションの戻り値になれません。
 FILE型は構造体の中では許されていません。しかし配列にすることは可能です。
 互いへの代入を含め、この型の変数の他の使用方法は許されていません。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)

A.7.2 FILE_LISTビルトインプロシージャ
目的:
指定のファイル名、ファイルタイプ、装置上のファイルのリストを作成します。
構文:
FILE_LIST(file_spec, n_skip, format, ary_nam, n_files, status)
入出力パラメータ:
[in] file_spec :STRING
[in] n_skip :INTEGER
[in] format :INTEGER
[out] ary_nam :ARRAY of STRING
[out] n_files :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :BYNAM
詳細:
 file_spec にはリストを作成するファイル名、ファイルタイプ、ファイルのデバイスを指定します。file_spec はワイルド
カード文字(*)を使用して指定可能です。
 n_skip はary_nam の宣言の長さより多くのファイルが存在する時に使用されます。最初にFILE_LISTを呼ぶ時は n_skip を0
に設定して下さい。もしary_nam が完全に変数名で満たされているなら、その配列を別のSTRINGの配列にコピーして下さ
い。そしてn_skip をn_files に設定してFILE_LISTをもう一度実行して下さい。2回目のFILE_LISTの呼び出しは最初の呼び出
しで発見されたファイルをスキップして残っているファイルのみを見つけます。
 format ファイル名とファイルタイプのフォーマットを指定します。以下の値がformat として有効です。
1 ファイル名のみ、空白無し
2 ファイルタイプのみ、空白無し
3 ファイル名.ファイルタイプ、空白無し
4 ファイル名.拡張子 サイズ 日付 時間全体で40文字

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 183 of 412


 ファイル名は文字1から始まります。
 ファイルタイプ (拡張子)は文字10から始まります。
 サイズは文字21から始まります。
 日付は文字26から始まります。
時間は文字36から始まります。
日付及び時間 はファイルデバイスがタイムスタンプをサポートしている場合のみ返されます。サポートしていない場
合、ファイル名.拡張子のみ格納されます。
 ary_nam はファイル名を格納するためのSTRINGの配列です。ary_namの文字列長がフォーマットに沿った情報を格納でき
るほど長くないなら、エラーが返ります。
 n_files はary_name に格納されたファイルの数です。

 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
VAR_LIST、PROG_LISTビルトインプロシージャ
例:
詳細なプログラム例に関してはB.5節「ファイルとプログラムのリスト作成及び文字列操作」 (LIST_EX.KL)を参照して下さ
い。

A.7.3 FOR...ENDFOR 文
目的:
INTEGER型のカウンタに基づいてループを構成する
構文:
FOR count = initial || TO | DOWNTO || final
DO{stmnt} ENDFOR
ここで:
[in]count :INTEGER variable
[in]initial :INTEGER expression
[in]final :INTEGER expression
[in]stmnt :実行可能なKARELの文(statement)
詳細:
 初めに、count がinitial の値に設定され、final が評価されます。反復処理の度に、count がfinalと比較されます。

 TOを使用するとcount はループの反復処理の度に増加します。
 DOWNTOを使用すると、count はループの反復処理の度に減少します。
 もしcount がfinal より大きく、かつTOを使用していると、stmnt は決して実行されません。
 もしcount がfinal より小さく、かつDOWNTOを使用していると、stmnt は決して実行されません。
 最初の繰り返しで比較に失敗しなければ、FORループはABS( final - initial) + 1回実行されます。
 もしfinal = initial なら、ループは一度実行されます。
 initial はループに入る前に評価されます。それ故に、initialとfinal をループの実行中にループ実行中に変更しても繰り返し
の回数には影響しません。

 count の値はループから抜けると未初期化になります。
 FORループ中でGOTO文を実行しないで下さい。GOTO文でFORループから抜けると、``Run time stack overflow''エラーで終
了する可能性があります。
 GO TOのラベルをFORループ中に含めないで下さい。GO TO文でFORループに入ると、通常はENDFOR文に到達したとこ
ろで"スタック アンダーフロー"が発生し、終了します。
 count がシステム変数や配列の要素なら、プログラムはトランスレートできません。
参照:
付録E「文法図」:構文の情報があります。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.5節「ファイルとプログラムのリスト作成及び文字列操作」 (LIST_EX.KL)
B.8節「動的に表示されている変数の操作」 (CHG_DATA.KL)
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)
B.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)

A.7.4 FORCE_SPMENUビルトインプロシージャ
目的:
指定された画面を強制的に表示します。
構文:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 184 of 412

FORCE_SPMENU(device_code, spmenu_id, screen_no)


入出力パラメータ:
[in] device_code :INTEGER
[in] spmenu_id :INTEGER
[in] screen_no :INTEGER
%ENVIRONMENT Group :pbcore
詳細:
 device_codeは表示装置を指定します。以下の定義済み定数のいずれかとして下さい。
tp_panel : 教示操作盤
crt_panel : CRT
 spmenu_id 及びscreen_no は強制的に表示する画面を指定します。

表A.7.4 FORCE_SPMENUのspmenu_idとscreen_no
spmenu_id screen_no 説明
SPI_TPHINTS 1 ユーティリティ ヒント
SPI_TPPRGADJ 1 ユーティリティ オンライン位置修正
SPI_TPMIRROR 1 ユーティリティミラーシフト
SPI_TPSHIFT 1 ユーティリティプログラムシフト
SPI_TPTSTRUN 1 テスト実行
SPI_TPMANUAL, SCR_MACMAN 手動操作
SPI_TPOTREL 1 OT開放
SPI_TPALARM SCR_ALM_ALL アラームアラーム
SPI_TPALARM SCR_ALM_MOT アラームドウサ
SPI_TPALARM SCR_ALM_SYS アラームシステム
SPI_TPALARM, SCR_ALM_APPL アラームアプリケーション
SPI_TPDIGIO 1 I/O デジタル
SPI_TPANAIO 1 I/O アナログ
SPI_TPGRPIO 1 I/O グループ
SPI_TPROBIO 1 I/O ロボット
SPI_TPUOPIO 1 I/O UOP
SPI_TPSOPIO 1 I/O SOP
SPI_TPSETGEN 1 設定 一般事項
SPI_TPFRAM 1 設定 座標系
SPI_TPPORT 1 設定 ポート設定
SPI_TPMMACRO, SCR_MACSETUP 設定 マクロ
SPI_TPREFPOS 1 設定 基準点
SPI_TPPWORD 1 設定 パスワード
SPI_TPHCCOMM 1 設定 ホスト通信
SPI_TPSYRSR 1 設定 プログラム選択
SPI_TPFILS 1 ファイル
SPI_TPSTATUS SCR_AXIS 状態 軸
SPI_TPMEMORY 1 状態 メモリ
SPI_TPVERSN 1 状態 ソフト版数
SPI_TPPRGSTS 1 状態 プログラム
SPI_TPSFTY 1 状態 安全信号
SPI_TPUSER 1 ユーザ
SPI_TPSELECT 1 一覧
SPI_TPTCH 1 編集
SPI_TPREGIS SCR_NUMREG データ レジスタ
SPI_SFMPREG SCR_POSREG データ 位置レジスタ
SPI_TPSYSV SCR_NUMVAR データ カレル変数
SPI_TPSYSV SCR_POSVAR データ カレル位置変数
SPI_TPPOSN 1 現在位置
SPI_TPSYSV SCR_CLOCK システム 時計

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 185 of 412

SPI_TPSYSV SCR_SYSVAR システム システム変数


SPI_TPMASCAL 1 システム 位置合わせ
SPI_TPAXLM 1 システム 軸範囲
SPI_TPUSER2 1 ユーザ2


表A.7.4に記載のない数値は使用しないで下さい。

参照:
ACT_SCREEN ビルトインプロシージャ
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.2節「標準ルーチン」(ROUT_EX.KL)
B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)
B.9節「辞書ファイルからリストを表示する」
B.10節「DISCTRL_ALPHAビルトインの使用」 (DCALP_EX.KL)

A.7.5 FORMAT_DEVビルトインプロシージャ
目的:
指定されたファイルデバイスに存在するあらゆる情報を削除し、ディレクトリその他の内部情報を記録します。
構文:
FORMAT_DEV(device, volume_name, nowait_sw, status)
入出力パラメータ:
[in] device :STRING
[in] volume_name :STRING
[in] nowait_sw :BOOLEAN
[out] status :INTEGER
%ENVIRONMENT Group :FDEV
詳細:
 device に初期化するファイルデバイスを指定します。

 volume_name は特定の記録メディアのラベルとして働きます。volume_name は最大11文字が使用可能です。それ以上が指
定されると11文字に短縮されます。
 もしnowait_sw がTRUEなら、コマンドを実行している間もプログラム実行は継続します。FALSEなら、操作が終了するま
でプログラムは停止します。コンディションハンドラも含まれます。もしもタイムクリティカルなモニタがあるなら、そ
れは別のタスクとして実行される別のプログラムに分離して下さい。


nowait_sw はこのリリースでは利用できません。FALSEに設定して下さい。

 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
MOUNT_DEV、DISMOUNT_DEVビルトインプロシージャ
例:
詳細なプログラム例に関してはB.6節「ファイルとファイルデバイスのビルトインの使用」 (FILE_EX.KL)を参照して下さい。

A.7.6 FRAMEビルトインファンクション
目的:
3個(又は4個)のPOSITION型の引数で指定された座標系への変換を表すPOSITIONデータ型の座標系を返します。
構文:
FRAME(pos1, pos2, pos3 <,pos4>)
戻り値の型: Position
入出力パラメータ:
[in]pos1 :POSITION
[in]pos2 :POSITION
[in]pos3 :POSITION
[in]pos4 :POSITION

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 186 of 412

%ENVIRONMENT Group :SYSTEM


詳細:
 戻り値は以下のように計算されます。

 pos1 はpos4 が提供されていない限り、原点位置と仮定されます。図A.7.6をご覧下さい。
 pos4 が提供されると、原点はpos4 にシフトします。そして新しい座標系は最初の座標系と同じ姿勢を保ちます。図
A.7.6をご覧下さい。
 x軸はpos1 からpos2 への直線に平行です。
 xy平面はpos1、pos2 、pos3 を含む平面として定義されます。pos3 が平面のプラス半分(Y+)側にあります。
 y軸はx軸に垂直でXY平面中にあります。
 Z軸はpos1を通りXY平面に垂直です。正の方向は右手の法則により決定されます。
 結果の形態はpos1 のものが設定されます。又は提供されていればpos4 のものになります。
 pos1 及びpos2 は少なくとも10mm離れている必要があります。pos3 はpos1とpos2 を含む直線から少なくとも10mm離れてい
る必要があります。
どちらかの条件を満たさない場合、プログラムはエラーで一時停止します。

図A.7.6
FRAMEビルトインファンクション

A.7.7 FROM節
目的:
変数やルーチンがプログラムの外部にあることを示し、データ及び/又はルーチンをプログラム間で共有することを可能にしま
す。
構文:
FROM prog_name
ここで:
prog_name : KAREL プログラム名
詳細:

 FROM節は型、変数、又はルーチンの宣言の一部にすることができます。
 型、変数、又はルーチンはprog_name で指定したプログラムに属します。
 型、変数、ルーチンが宣言されているプログラムも含め、任意のプログラム名をFROM節のprog_name に指定可能です。
 FROM節がルーチンの宣言で使用され、プログラム実行中に呼ばれると、その宣言の本体の部分が指定したプログラムに
存在し、そのプログラムがロードされている必要があります。
 FROM節はルーチンの宣言セクション中の変数宣言では使用できません。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.4節「位置データ設定及びモニタのプログラム」 (PTH_MOVE.KL)
B.5節「ファイルとプログラムのリスト作成及び文字列操作」 (LIST_EX.KL)
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)
B.8節「動的に表示されている変数の操作」 (CHG_DATA.KL)
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)

A.8 G

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 187 of 412

A.8.1 GET_ATTR_PRGビルトインプロシージャ
目的:
指定のTPプログラム又はKARELプログラムの属性を取得します。
構文:
GET_ATTR_PRG(program_name, attr_number, int_value, string_value, status)
入出力パラメータ:
[in] program_name :STRING
[in] attr_number :INTEGER
[out] int_value :INTEGER
[out] string_value :STRING
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:

 program_name は属性を取得するプログラム名を指定します。
 attr_number は値が返される属性です。以下の属性が有効です。
AT_PROG_TYPE : プログラムのタイプ
AT_PROG_NAME : プログラム名(string[12])
AT_OWNER : オーナ(String[8])
AT_COMMENT : コメント(String[16])
AT_PROG_SIZE : プログラムのサイズ
AT_ALLC_SIZE : アロケートされているメモリのサイズ
AT_NUM_LINE :行数
AT_CRE_TIME : 作成された(ロードされた)時間
AT_MDFY_TIME : 修正された時間
AT_SRC_NAME : ソースファイル名(またはオリジナルのファイル名) (String[128])
AT_SRC_VRSN : ソースファイルバージョン
AT_DEF_GROUP : デフォルトの動作グループマスク(タスクの属性となります)
AT_PROTECT : プロテクトコード;1 :プロテクトOFF; 2:プロテクトON
AT_STK_SIZE : スタックサイズ(タスクの属性となります)
AT_TASK_PRI : タスクプライオリティ(タスクの属性となります)
AT_DURATION : タイムスライス時間(タスクの属性となります)
AT_BUSY_OFF : ビジーランプオフ(タスクの属性となります)
AT_IGNR_ABRT : 終了無視(タスクの属性となります)
AT_IGNR_PAUS : 中断無視(タスクの属性となります)
AT_CONTROL : コントロールコード(タスクの属性となります)
 AT_PROG_TYPEで返されるプログラムのタイプは以下の定数のいずれかとなります。
PT_KRLPRG : KARELプログラム
PT_MNE_UNDEF : サブタイプ無しのTPプログラム
PT_MNE_JOB : ジョブプログラム(TPプログラム)
PT_MNE_PROC : プロセスプログラム(TPプログラム)
PT_MNE_MACRO : マクロプログラム(TPプログラム)
 属性のデータが数値であれば、int_value に返されます。string_value は変更されません。

 属性のデータが文字列であれば、string_value に返されます。int_value は変更されません。
 status は処理のステータスです。0以外ならばエラーが発生しました。可能性のあるエラーを幾つか以下に挙げます。
7073 program_name に指定したプログラムが存在しません。
17027 string_value が属性の文字列を格納するほどには長くありません。値はstring_valueに収まるように短縮されました。
17033 attr_number が不正な値です。
参照:
SET_ATTR_PRG、GET_TSK_INFO、SET_TSK_ATTRビルトインプロシージャ

A.8.2 GET_FILE_POSビルトインファンクション
目的:
指定ファイルの現在のファイル位置(次のREADやWRITE操作が起こる場所)を返します。
構文:
GET_FILE_POS(file_id)
戻り値の型: INTEGER

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 188 of 412

入出力パラメータ:
[in] file_id :FILE
%ENVIRONMENT Group :FLBT
詳細:

 GET_FILE_POSはファイルで次に読み書きされるバイトの前に存在するバイト数を返します。
 行の終了は戻り値にカウントされています。
 file_id に関連付けられたファイルはオープンされている必要があります。さもないと、プログラムはエラーで終了しま
す。
 file_id に関連付けられたファイルがREAD-ONLYでオープンされているなら、FROMディスクやRAMディスクの圧縮され
たファイルには使用できません。

警告
GET_FILE_POSはRAMディスク上でオープンされているファイルのみをサポートしています。GET_FILE_POS
をその他のデバイスに使用しないで下さい。さもないと、人を負傷させたり設備に損害を与える可能性がありま
す。

A.8.3 GET_JPOS_REGビルトインファクション
目的:
指定の位置レジスタからJOINTPOS型の値を取得します。
構文:
GET_JPOS_REG(register_no, status <,group_no>)
戻り値の型: JOINTPOS
入出力パラメータ:
[in] register_no :INTEGER
[out] status :INTEGER
[in] group_no :INTEGER
%ENVIRONMENT Group :REGOPE
詳細:

 register_no は取得する位置レジスタを指定します。
 group_no を省略すると、プログラムのデフォルトのグループが想定されます。
 group_noを指定する場合、1から総グループ数の間とする必要があります。
 GET_JPOS_REGは位置をJOINTPOS形式で返します。POS_REG_TYPEを用いて位置の表現を突き止めて下さい。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
GET_POS_REG、SET_JPOS_REG、SET_POS_REGビルトインプロシージャ
例:
詳細なプログラム例に関してはB.3節「レジスタ関連ビルトインの使用」(REG_EX.KL)を参照して下さい。

A.8.4 GET_JPOS_TPEビルトインファンクション
目的:
指定のTPプログラムの指定の位置からJOINTPOSの値を取得します。
構文:
GET_JPOS_TPE(open_id, position_no, status <, group_no>)
戻り値の型: JOINTPOS
入出力パラメータ:
[in] open_id :INTEGER
[in] position_no :INTEGER
[out] status :INTEGER
[in] group_no :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:

 open_id でTPプログラムを指定します。このビルトインを呼ぶ前にプログラムをOPENしておく必要があります。
 position_no で取得するプログラム中の位置を指定します。
 group_no を省略すると、プログラムのデフォルトのグループが想定されます。
 group_noを指定する場合、1から総グループ数の間とする必要があります。
 位置の表現の変換を行いません。位置データはJOINTPOS形式である必要があります。保存されている位置がJOINTPOSで

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 189 of 412

ない場合、エラーステータスが返ります。GET_POS_TYPを使用して位置の表現を取得して下さい。
 プログラムの指定位置が未初期化ならば、戻り値のJOINTPOSは未初期化です。statusは17038 「未教示位置データです」で
す。
 status は処理のステータスです。0でないならば、エラーが発生しました。
参照:
SET_JPOS_TPE、GET_POS_TPE、SET_POS_TPEビルトイン
例:
詳細なプログラム例に関してはB.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TPE.KL)を参照して下さい。

A.8.5 GET_PORT_ASGビルトインプロシージャ
目的:
I/Oの割り付け情報を取得します。指定の論理I/Oに割り当てられている物理I/Oを突き止めます。
構文:
GET_PORT_ASG(log_port_type, log_port_no, rack_no, slot_no, phy_port_type, phy_port_no, n_ports, status)
入出力パラメータ:
[in] log_port_type :INTEGER
[in] log_port_no :INTEGER
[out] rack_no :INTEGER
[out] slot_no :INTEGER
[out] phy_port_type :INTEGER
[out] phy_port_no :INTEGER
[out] n_ports :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :IOSETUP
詳細:
 log_port_type は割付にアクセスするI/Oの種類を指定します。種類に応じた数値の定数がKLIOTYPS.KLに定義されていま
す。

 log_port_no に割付にアクセスするI/Oの番号を指定します。
 rack_noにはモジュールを含んでいるラックが返ります。プロセスI/Oボートに関しては0です。Allen-Bradleyポートでは16
です。
 phy_port_type には割り付けられているI/Oの種類が返されます。これは多くの場合log_port_typeと同じです。例外は
log_port_typeがグループタイプ(io_gpin又はio_gpout)である場合です。又はI/Oがメモリメージやダミーポートに割り付けら
れている場合です。
 phy_port_noには割り付けられているI/O番号が返ります。log_port_typeがグループタイプなら、そのグループの最下位ビッ
トのI/O番号となります。
 n_ports には論理I/Oに割り付けられている物理I/Oの数が返ります。これはlog_port_typeがグループタイプの場合を除いて、
1となります。グループタイプの場合、n_portsはグループ中のビット数を示します。
 statusはパラメータが有効で指定のポートが割り付けられているなら0が返ります。さもなくば、エラーコードが返りま
す。
例:
以下の例は呼び出し側に、指定のグループ入力のラック番号、スロット番号、I/O番号、割り付けられているビットの数を返し
ます。そのI/OがDINに割り付けられているか否かを示すBOOLEANが返ります。割り付けられていない場合、0でないstatusが返
ります。

例A.8.5 GET_PORT_ASGビルトインプロシージャ
PROGRAM getpasg
%ENVIRONMENT IOSETUP
%INCLUDE kliotyps
VAR
rack : INTEGER
slot : INTEGER
frst_port: INTEGER
num_ports: INTEGER
to_din : BOOLEAN
stat : INTEGER

ROUTINE get_gin_asg(gin_port_no: INTEGER;


rack_no: INTEGER;

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 190 of 412

slot_no: INTEGER;
frst_port_no: INTEGER;
n_ports: INTEGER;
asgd_to_din: BOOLEAN): INTEGER
VAR
phy_port_typ: INTEGER
STATUS: INTEGER

BEGIN
GET_PORT_ASG(io_gpin, gin_port_no, rack_no, slot_no,
phy_port_typ, frst_port_no, n_ports, STATUS)
IF STATUS <> 0 THEN
RETURN (STATUS)
ENDIF
asgd_to_din = (phy_port_typ = io_din)
RETURN (STATUS)
END get_gin_asg
BEGIN
stat = get_gin_asg(1, rack, slot, frst_port, num_ports, to_din)
END getpasg

A.8.6 GET_PORT_ATRビルトインファンクション
目的:
指定ポートの属性を取得します。
構文:
GET_PORT_ATR(port_id, atr_type, atr_value)
戻り値の型: INTEGER
入出力パラメータ:
[in] port_id :INTEGER
[in] atr_type :INTEGER
[out] atr_value :INTEGER
%ENVIRONMENT Group :FLBT
詳細:
 port_id は問い合わせを行うポートを指定します。以下の定義済み定数のいずれかとして下さい。
port_1
port_2
port_3
port_4
port_5
 atr_type に現在の設定を取得する属性を指定します。以下の定義済み定数のいずれかとして下さい。
atr_readahd :先読みバッファ
atr_baud :ボーレート
atr_parity :パリティ
atr_sbits :ストップビット
atr_dbits :データ長
atr_xonoff :Xon/Xoff
atr_eol :行の終了(End of line)

 atr_value には指定属性の現在値が出力されます。
 GET_PORT_ATRはこのアクションのステータスをポートに返します。
参照:
SET_PORT_ATRビルトインファンクション、7章「ファイル入出力操作」
例:
以下の例はポートが望ましい設定で無い場合に、望ましい設定とします。

例A.8.6 GET_PORT_ATRビルトインファンクション
PROGRAM port_atr
%ENVIRONMENT FLBT
VAR

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 191 of 412

stat: INTEGER
atr_value: INTEGER
BEGIN
-- sets read ahead buffer to desired value, if not already correct
stat=GET_PORT_ATR(PORT_2,ATR_READAHD,atr_value)
IF(atr_value <> 2) THEN
stat=SET_PORT_ATR(PORT_2,ATR_READAHD,2) --set to 256 bytes
ENDIF
-- sets the baud rate to 9600, if not already set
stat=GET_PORT_ATR(PORT_2,ATR_BAUD,atr_value)
IF(atr_value <> BAUD_9600) THEN
stat=SET_PORT_ATR(PORT_2,ATR_BAUD,BAUD_9600)
ENDIF
-- sets parity to even, if not already set
stat=GET_PORT_ATR(PORT_2,ATR_PARITY,atr_value)
IF(atr_value <> PARITY_EVEN) THEN
stat=SET_PORT_ATR(PORT_2,ATR_PARITY,PARITY_EVEN)
ENDIF
-- sets the stop bit to 1, if not already set
stat=GET_PORT_ATR(PORT_2,ATR_SBITS,atr_value)
IF(atr_value <> SBITS_1) THEN
stat=SET_PORT_ATR(PORT_2,ATR_SBITS,SBITS_1)
ENDIF
-- sets the data bit to 5, if not already set
stat=GET_PORT_ATR(PORT_2,ATR_DBITS,atr_value)
IF(atr_value <> DBITS_5) THEN
stat=SET_PORT_ATR(PORT_2,ATR_DBITS,DBITS_5)
ENDIF
-- sets xonoff to not used, if not already set
stat=GET_PORT_ATR(PORT_2,ATR_XONOFF,atr_value)
IF(atr_value <> XF_NOT_USED) THEN
stat=SET_PORT_ATR(PORT_2,ATR_XONOFF,XF_NOT_USED)
ENDIF
-- sets end of line marker, if not already set
stat=GET_PORT_ATR(PORT_2,ATR_EOL,atr_value)
IF(atr_value <> 65) THEN
stat=SET_PORT_ATR(PORT_2,ATR_EOL,65)
ENDIF
END port_atr

A.8.7 GET_PORT_CMTビルトインプロシージャ
目的:
指定の論理I/Oのコメントを取得します。
構文:
GET_PORT_CMT(port_type, port_no, comment_str, status)
入出力パラメータ:
[in] port_type :INTEGER
[in] port_no :INTEGER
[out] comment_str :STRING
[out] status :INTEGER
%ENVIRONMENT Group :IOSETUP
詳細:
 port_typeにコメントを取得するI/Oの種類を指定します。種類に応じた数値の定数がKLIOTYPS.KLに定義されています。

 port_noにコメントを取得するI/O番号を指定します。
 comment_str には指定I/Oのコメントが返ります。少なくとも16文字のSTRINGとして宣言して下さい。
 status はパラメータが有効で指定のI/Oのコメントが返された時に0を返ります。
参照:
GET_PORT_VAL、GET_PORT_MOD、SET_PORT_CMT、SET_PORT_VAL、SET_PORT_MODビルトインプロシージャ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 192 of 412

A.8.8 GET_PORT_MODビルトインプロシージャ
目的:
指定の論理I/Oの特殊なモードの情報を取得します。
構文:
GET_PORT_MOD(port_type, port_no, mode_mask, status)
入出力パラメータ:
[in] port_type :INTEGER
[in] port_no :INTEGER
[out] mode_mask :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :IOSETUP
詳細:
 port_typeにモードを取得するI/Oの種類を指定します。種類に応じた数値の定数がKLIOTYPS.KLに定義されています。

 port_no にモードを設定するI/O番号を指定します。
 mode_mask には有効になっているモードを示すマスクが返されます。以下のモードが定義されています。

表A.8.8 mode_mask
mode_mask及びモード 説明
I/Oの意味が逆になります。I/OがTRUEになると物理的な出力はFALSEになります。I/Oが
1 :リバースモード(極性反転) FALSEになると、物理的な出力はTRUEになります。入力を読んだ時に物理的な入力がTRUEな
ら、FALSEが返ります。入力を読んだ時に物理的な入力がFALSEなら、TRUEが返ります。
値が補完的な2つの物理I/Oポートに論理I/Oポートが割り付けられています。この場合、port_no
は奇数である必要があります。I/O nがTRUEになるとI/O nがTRUEになり、I/O n+1はFALSEに
2 :二律背反モード
なります。I/O n がFALSEになると、I/O nがFALSEになり、I/O n+1はTRUEとなります。出力で
のみ効果があります。

例:
以下の例は指定のI/Oのモードを取得します。

例A.8.8 GET_PORT_MODビルトインプロシージャ

PROGRAM getpmod
%ENVIRONMENT IOSETUP
VAR
stat : INTEGER
do_index : INTEGER
rev_mode : BOOLEAN
comp_mode : BOOLEAN
ROUTINE get_mode( port_type: INTEGER;
port_no: INTEGER;
reverse: BOOLEAN;
comp: BOOLEAN): INTEGER
VAR
mode: INTEGER
STATUS: INTEGER
BEGIN
GET_PORT_MOD(port_type, port_no, mode, STATUS)
IF (STATUS <>0) THEN
RETURN (STATUS)
ENDIF
IF (mode AND 1) <> 0 THEN
reverse = TRUE
ELSE
reverse = FALSE
ENDIF
IF (mode AND 2) <> 0 THEN
comp = TRUE

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 193 of 412

ELSE
comp = FALSE
ENDIF
RETURN (status)
END get_mode
BEGIN
IF UNINIT(do_index) THEN
do_index = 1
ENDIF
stat = get_mode(2, do_index, rev_mode, comp_mode)
END getpmod

A.8.9 GET_PORT_SIMビルトインプロシージャ
目的:
I/Oの擬似の状態を取得します。
構文:
GET_PORT_SIM(port_type, port_no, simulated, status)
入出力パラメータ:
[in] port_type :INTEGER
[in] port_no :INTEGER
[out] simulated :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :IOSETUP
詳細:
 port_typeに取得するI/Oの種類を指定します。種類に応じた数値の定数がKLIOTYPS.KLに定義されています。

 port_noに擬似の状態を取得するI/Oの番号を指定します。
 simulatedにはI/Oが擬似になっているならTRUE、そうでないならFALSEが返ります。
 status にはI/Oが正当なら0が返ります。
参照:
GET_PORT_MOD、SET_PORT_SIM、SET_PORT_MODビルトインプロシージャ

A.8.10 GET_PORT_VALビルトインプロシージャ
目的:
KARELプログラムで指定の論理I/Oの値を突き止めることを可能にします。
構文:
GET_PORT_VAL(port_type, port_no, value, status)
入出力パラメータ:
[in] port_type :INTEGER
[in] port_no :INTEGER
[out] value :STRING
[out] status :INTEGER
%ENVIRONMENT Group :IOSETUP
詳細:
 port_typeに値を取得するI/Oの種類を指定します。種類に応じた数値の定数がKLIOTYPS.KLに定義されています。

 port_noに値を取得するI/O番号を指定します。
 valueには指定I/Oの現在の値(状態)が返ります。BOOLEAN型のI/Oなら(例えばDIN)、0(=OFF)又は1(=ON)が返ります。
 statusにはパラメータが有効で指定のI/Oの値が返された時に0が返ります。
参照:
GET_PORT_CMT、GET_PORT_MOD、SET_PORT_CMT、SET_PORT_VAL、SET_PORT_MODビルトインプロシージャ

A.8.11 GET_POS_FRMビルトインプロシージャ
目的:
指定のTPプログラムの指定の位置のユーザ座標系番号とツール座標系番号を取得します。
構文:
GET_POS_FRM(open_id, position_no, gnum, ufram_no, utool_no, status)
入出力パラメータ:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 194 of 412

[in] open_id :INTEGER


[in] position_no :INTEGER
[in] gnum :INTEGER
[out] ufram_no :INTEGER
[out] utool_no :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :pbcore
詳細:
 open_id はOPEN済みのTPプログラムのものを指定します。このビルトインを呼ぶ前にプログラムをOPENしておく必要が
あります。

 position_noにTPプログラムの位置を指定します。
 gnumに位置のグループ番号を指定します。
 ufram_noにはposition_noのユーザ座標系番号が返ります。
 utool_noにはposition_noのツール座標系番号が返ります。
 指定の位置position_no が未初期化の場合、status は17038、「未教示位置データです」。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
GET_POS_TYP、CHECK_EPOS.

A.8.12 GET_POS_REGビルトインファンクション
目的:
指定の位置レジスタからXYZWPRの値を取得します。
構文:
GET_POS_REG(register_no, status <,group_no>)
戻り値の型: XYZWPREXT
入出力パラメータ:
[in] register_no :INTEGER
[out] status :INTEGER
[in] group_no :INTEGER
%ENVIRONMENT Group :REGOPE
詳細:

 register_no は取得する位置レジスタを指定します。
 group_no を省略すると、プログラムのデフォルトのグループが想定されます。
 group_noを指定する場合、1から総グループ数の間とする必要があります。
 GET_POS_REGは位置をXYZWPREXT形式で返します。POS_REG_TYPEを用いて位置の表現を突き止めて下さい。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
GET_JPOS_REG、SET_JPOS_REG、SET_POS_REG、GET_REG ビルトインプロシージャ
例:
B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)を参照して下さい。詳細なプログラム例があります。

A.8.13 GET_POS_TPEビルトインファンクション
目的:
指定プログラムの指定位置からXYZWPREXT形式の値を取得します。
構文:
GET_POS_TPE(open_id, position_no, status <, group_no>)
戻り値の型: XYZWPREXT
入出力パラメータ:
[in] open_id : INTEGER
[in] position_no : INTEGER
[out] status : INTEGER
[in] group_no : INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 open_id はOPEN済みのTPプログラムのものを指定します。このビルトインを呼ぶ前にプログラムをOPENしておく必要が
あります。
 position_noに取得するプログラム中の位置を指定します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 195 of 412

 位置の表現の変換を行いません。位置データはXYZWPRかXYZWPREXTである必要があります。さもないとエラーステー
タスが返ります。GET_POS_TYPを使用して位置の表現を取得して下さい。

 指定の位置が未初期化なら、返されるXYZWPRの値は未初期化です。statusは「未教示位置データです」です。
 group_no を省略すると、プログラムのデフォルトのグループが想定されます。
 group_noを指定する場合、1から総グループ数の間とする必要があります。
 status は処理のステータスです。0でないならば、エラーが発生しました。
参照:
GET_JPOS_TPE、SET_JPOS_TPE、SET_POS_TPE、GET_POS_TYPビルトインプロシージャ
例:
詳細なプログラム例に関してはB.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)を参照して下さい。

A.8.14 GET_POS_TYPビルトインプロシージャ
目的:
指定のプログラムの指定の位置の位置の表現形式を取得します。
構文:
GET_POS_TYP(open_id, position_no, group_no, posn_typ, num_axs, status)
入出力パラメータ:
[in] open_id :INTEGER
[in] position_no :INTEGER
[in] group_no :INTEGER
[out] posn_typ :INTEGER
[out] num_axs :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 open_id はOPEN済みのTPプログラムのものを指定します。このビルトインを呼ぶ前にプログラムをOPENしておく必要が
あります。
 position_noにプログラム中の位置を指定します。

 group_noにグループ番号を指定します。
 位置の種類はposn_typに返ります。posn_typ は以下のように定義されます。
2 :XYZWPR
6 :XYZWPREXT
9 :JOINTPOS

 各軸形式ならば、軸数がnum_axs に返ります。
 プログラム中の指定位置が未初期化の場合、statusは17038、「未教示位置データです」です。
 status は処理のステータスです。0でないならば、エラーが発生しました。
例:
詳細なプログラム例に関してはB.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)を参照して下さい。

A.8.15 GET_PREG_CMTビルトインプロシージャ
目的:
指定の位置レジスタのコメントを取得します。
構文:
GET_PREG_CMT (register_no, comment_string, status)
入出力パラメータ:
[in] register_no: INTEGER
[out] comment_string: STRING
[out] status: INTEGER
%ENVIORNMENT group: REGOPE
詳細:
 Register_noでコメントを取得する位置レジスタを指定します。指定の位置レジスタのコメントがcomment_stringに返りま
す。

A.8.16 GET_QUEUEビルトインプロシージャ
目的:
指定のキューから最古のエントリを取得します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 196 of 412

構文:
GET_QUEUE(queue, queue_data, value, status, sequence_no)
入出力パラメータ:
[in,out] queue_t :QUEUE_TYPE
[in,out] queue_data :ARRAY OF INTEGER
[out] value :INTEGER
[out] sequence_no :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBQMGR
詳細:

 queue_t に値を取得するキューのキュー変数を指定します。
 queue_data にキューのデータを格納している配列変数を指定します。
 value に指定のキューから取得した最古のエントリが返ります。
 sequence_no は返されたエントリの通し番号が返ります。
 status はキューからのエントリの取得が成功したなら0が返ります。さもなくば61002、「キューが空です」が返ります。
参照:
MODIFY_QUEUEビルトインプロシージャ、12.7節「キューを利用したタスク間通信」
例:
以下の例ではルーチンget_nxt_err がエラーのキューの最古のエントリを返します。キューが空なら0を返します。
例A.8.16 GET_QUEUEビルトインプロシージャ
PROGRAM get_que
%environment PBQMGR
VAR
error_queue FROM globvars: QUEUE_TYPE
error_data FROM globvars: ARRAY[100] OF INTEGER

ROUTINE get_nxt_err: INTEGER


VAR
status: INTEGER
value: INTEGER
sequence_no: INTEGER

BEGIN
GET_QUEUE(error_queue, error_data, value, sequence_no, status)
IF (status = 0) THEN
RETURN (value)
ELSE
RETURN (0)
ENDIF
END get_nxt_err
BEGIN
END get_que

A.8.17 GET_REGビルトインプロシージャ
目的:
指定のレジスタからINTEGER又はREALの値を取得します。
構文:
GET_REG(register_no, real_flag, int_value, real_value, status)
入出力パラメータ:
[in] register_no :INTEGER
[out] real_flag :BOOLEAN
[out] int_value :INTEGER
[out] real_value :REAL
[out] status :INTEGER
%ENVIRONMENT Group :REGOPE
詳細:

 register_no に値を取得するレジスタを指定します。
 real_flag は指定のレジスタが実数値を持つ場合にTRUEとなり、real_value に内容が設定されます。さもなくば、real_flag は

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 197 of 412

FALSEとなりint_value にレジスタの内容が設定されます。
 status は処理のステータスです。0でないなら、エラーが発生しました。
例:
B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)を参照して下さい。詳細なプログラム例があります。

A.8.18 GET_REG_CMTビルトインプロシージャ
目的:
指定のレジスタのコメントを取得します。
構文:
GET_REG_CMT (register_no, comment_string, status)
入出力パラメータ:
[in] register_no: INTEGER
[out] comment_string: STRING
[out] status: INTEGER
%ENVIRONMENT group: REGOPE
詳細:
 Register_noはコメントを取得するレジスタを指定します。指定のレジスタのコメントがcomment_stringに返ります。

A.8.19 GET_SREG_CMTビルトインプロシージャ
目的:
指定の文字列レジスタのコメントを取得します。

文字列レジスタは7DA5系列以降でのみ使用可能です。

構文:
GET_SREG_CMT(register_no, comment, status)
入出力パラメータ:
[in] register_no :INTEGER
[out] comment:STRING
[out] status :INTEGER
%ENVIRONMENT Group :REGOPE
詳細:

 register_noにコメントを取得する文字列レジスタの番号を設定します。
 commentに文字列レジスタのコメントが返されます。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
GET_STR_REG、SET_STR_REG、SET_SREG_CMTビルトインプロシージャ

A.8.20 GET_STR_REGビルトインプロシージャ
目的:
指定の文字列レジスタの文字列を取得します。

文字列レジスタは7DA5系列以降でのみ使用可能です。

構文:
GET_STR_REG(register_no, value, status)
入出力パラメータ:
[in] register_no :INTEGER
[out] value :STRING
[out] status :INTEGER
詳細:

 register_noに文字列レジスタの番号を指定します。
 value に指定の文字列レジスタの値が返されます。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
GET_SREG_CMT、SET_STR_REG、SET_SREG_CMTビルトインプロシージャ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 198 of 412

A.8.21 GET_TIMEビルトインプロシージャ
目的:
システム内の現在時間を(整数値の表現で)取得します。
構文:
GET_TIME(i)
入出力パラメータ:
[out] i :INTEGER
%ENVIRONMENT Group :TIM
詳細:
 i にシステムに格納されている現在時間のINTEGERでの表現が出力されます。この値は以下のような32bitのINTEGERで表
現されます。
表A.8.21現在時刻のINTEGERの表現
ビット 意味
31–25 年
24–21 月
20–16 日付
15–11 時間
10–5 分
4–0 秒

 各フィールドの内容は以下の通りです。

 日付:
Bits 31-25 — 1980以降の年
Bits 24-21 —月(1-12)
Bits 20-16 — (1月の中の)日
 時間:
Bits 15-11 — 時間の数値(0-23)
Bits 10-5 — 分の数値(0-59)
Bits 4-0 — 2秒毎に増える数値(0-29)

 INTEGERの値を比較してある時刻が他の時刻より新しいかどうか決定できます。
 このINTEGERを「DD-MMM-YYY HH:MM:SS」形式のSTRINGに変換するにはCNV_TIME_STRビルトインプロシージャを
使用して下さい。
参照:
CNV_TIME_STRビルトインプロシージャ
例:
詳細なプログラム例に関してはB.6節「ファイルとファイルデバイスのビルトインの使用」 (FILE_EX.KL)を参照して下さい。

A.8.22 GET_TPE_CMTビルトインプロシージャ
目的:
TPプログラムの指定の位置のコメントを取得します。
構文:
GET_TPE_CMT(open_id, pos_no, comment, status)
入出力パラメータ:
[in] open_id :INTEGER
[in] pos_no :INTEGER
[out] comment :STRING
[out] status :INTEGER
%ENVIRONMENT Group :TPE
詳細:

 open_id にOPEN_TPEの呼び出しから返されたopen_idを指定します。
 pos_no にコメントを取得するTPプログラム中の位置番号を指定します。
 comment は指定位置のコメントに関連付けられます。コメントを持たない場合は長さが0となります。コメントを格納する
には短すぎるなら、エラーが返され文字列自体は変更されません。
 status には取得が成功したなら0が返ります。さもなくばエラーコードが設定されます。
参照:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 199 of 412

SET_TPE_CMT及びOPEN_TPEビルトインプロシージャ

A.8.23 GET_TPE_PRMビルトインプロシージャ
目的:
TPプログラムのヨビダシ命令やマクロ命令で引数が渡された時に、引数を取得します。
構文:
GET_TPE_PRM(param_no, data_type, int_value, real_value, str_value, status)
入出力パラメータ:
[in] param_no :INTEGER
[out] data_type :INTEGER
[out] int_value :INTEGER
[out] real_value :REAL
[out] str_value :STRING
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:

 param_no に引数の番号を指定します。最大で10個の引数が存在する可能性があります。
 data_type は以下のように引数のデータ型を示します。
 1 : INTEGER
 2 : REAL
 3 : STRING
 int_value はdata_typeがINTEGERの場合の引数の値です。

 real_value はdata_typeがREALの場合の引数の値です。
 str_value はdata_typeがSTRINGの場合の引数の値です。
 status は処理のステータスです。0でないならば、エラーが発生しました。
 param_noで指定された引数が存在しない場合、statusに17042「指定されたパラメータがありません」が返ります。このエ
ラーが返されたなら、param_noとTPプログラムのヨビダシ命令もしくはマクロ命令を確認して下さい。
参照:
各アプリケーションの取扱説明書:TPプログラムのヨビダシ命令又はマクロ命令での引数の使用に関する情報があります。
例:
以下の例ではTPプログラムからKARELプログラムWRTPPRMが呼び出されています。WRTPPRMはTPプログラムから3つの引
数を取得しています。順にSTRING, INTEGER, REAL型であることを期待しています。

例A.8.23 GET_TPE_PRMビルトインプロシージャ
TPプログラムからの呼び出し例
1: ヨビダシ WRTPPRM('AGM',5,15.7) ;

-----------------------
PROGRAM WRTPPRM
-----------------------
%NOLOCKGROUP

VAR
dummy_int : integer
dummy_real : real
dummy_str : string[10]
status : INTEGER
data_type : integer
int_value : integer
real_value : REAL
str_value : string[30]
BEGIN
-- Reat the 1st parameter of TP program CALL.
GET_TPE_PRM(1, data_type, dummy_int, dummy_real, str_value, status)
if status <> 0 then
write ('GET PARM(1) failed:', status, CR)
post_err(status, '',0,0)
else

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 200 of 412

if data_type <> 3 then -- The first param is dictionary name. It must be string.
write ('data type of param1 is NOT string:', data_type, CR)
else
-- Read the 2nd parameter of TP program CALL.
GET_TPE_PRM(2, data_type, int_value, dummy_real, dummy_str, status)
if status <> 0 then
write ('GET PARM(2) failed:', status, CR)
post_err(status,'',0,0)
else
if data_type <> 1 then --INTEGER?
write ('data type of param2 is NOT integer:', data_type, CR)
post_err(status,'',0,0)
else
-- Read the 3rd parameter.
GET_TPE_PRM(3, data_type, dummy_int, real_value, dummy_str, status)
if data_type <> 2 then -- real?
write('data type of param2 is NOT real:', data_type, CR)
post_err(status,'',0,0)
else
write ('1st parameter:', str_value,CR)
write ('2nd parameter:', int_value,CR)
write ('3rd parameter:', real_value,CR)
endif
endif
endif
endif
endif
END WRTPPRM

A.8.24 GET_TSK_INFOビルトインプロシージャ
目的:
指定されたタスクの属性値を取得します。
構文:
GET_TSK_INFO(task_name, task_no, attribute, value_int, value_str, status)
入出力パラメータ:
[in,out] task_name :STRING
[in,out] task_no :INTEGER
[in] attribute :INTEGER
[out] value_int :INTEGER
[out] value_str :STRING
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 task_name は興味のあるタスクの名称です。task_name が入力として使用されるのは、task_no が未初期化か0に設定されて
いる時だけです。さもなくば、task_name は出力のパラメータとみなされます。

 task_no は興味のあるタスクの番号です。task_no が未初期化か0の場合、それは出力パラメータとして返されます。
 attribute は返されるタスクの属性です。属性はvalue_int に返されます。但しそうでないように指定された場合を除きます。
以下の属性が有効です。
TSK_HOLDCOND : タスクホールドコンディション
TSK_LINENUM : 現在実行中の行番号
TSK_LOCKGRP : ロックしているグループ
TSK_MCTL : 制御対象のグループ
TSK_NOABORT : 終了無視の要請
TSK_NOBUSY : ビジーランプオフ
TSK_NOPAUSE : 中断無視の要請
TSK_NUMCLDS : 子タスクの数
TSK_PARENT : 親タスクの番号
TSK_PAUSESFT : シフトキー開放で一時停止するか

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 201 of 412

TSK_PRIORITY : タスクのプライオリティ
TSK_PROGNAME : value_strに返される現在のプログラム名。
TSK_PROGTYPE : プログラムのタイプ。後述します。そちらを参照して下さい。
TSK_ROUTNAME : value_strに返される現在のルーチン
TSK_STACK : スタックサイズ
TSK_STATUS : タスクの状態。後述します。そちらを参照して下さい。
TSK_STEP : シングルステップのタスクか否か
TSK_TIMESLIC : タイムスライスの長さ(msec)
TSK_TPMOTION : TP動作有効
TSK_TRACE : トレース有効
TSK_TRACELEN : トレース配列の長さ
 TSK_STATUSはタスクの状態です。返される値は以下の通りです。
PG_RUNACCEPT : 実行の要求が受け付けられた状態
PG_ABORTING : 終了(の要求)が受け付けられた状態
PG_RUNNING : タスクが実行中
PG_PAUSED : タスクが一時停止中
PG_ABORTED : タスクが終了している
 TSK_PROGTYPEはプログラムの種類です。返される値は以下の通りです。
PG_NOT_EXEC : プログラムは実行されていません。
PG_MNEMONIC : TPプログラムが実行中(だった)
PG_AR_KAREL : KARELプログラムが実行中(だった)
 status は処理のステータスです。0でないならば、エラーが発生しました。
参照:
12章「マルチタスク」
例:
次の章の例を見て下さい:12章「マルチタスク」

A.8.25 GET_USEC_SUBビルトインプロシージャ
目的:
経過時間をマイクロ秒単位で返します。
構文:
us_delta = GET_USEC_SUB(us2, us1)
戻り値の型: INTEGER
入出力パラメータ:
[in] us2: INTEGER
[in] us1: INTEGER
%ENVIRONMENT Group: TIM
詳細:
 us2はGET_USEC_TIMから返された第二の時間です。
 us1はGET_USEC_TIMから返された第一の時間です。
 戻り値は経過時間us2-us1をマイクロ秒の単位でINTEGERの表現とした値です。
 高速の操作を測定することを意図しています。2分立つと結果は有効ではありません。
例: 以下の例は数値の増加にかかる時間をマイクロ秒単位で測定しています。

例A.8.25 GET_USEC_SUBビルトインファンクション
i=0
us1 = GET_USEC_TIM
i=i+1
us_delta = GET_USEC_SUB(GET_USEC_TIM, us1)
WRITE ('Time to increment a number: ', us_delta, ' us', CR)

A.8.26 GET_USEC_TIMビルトインファンクション
目的:
システムの現在時刻をマイクロ秒の単位で示すINTEGERの値を返します。
構文:
us = GET_USEC_TIM
戻り値の型: INTEGER

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 202 of 412

入出力パラメータ:
無し
%ENVIRONMENT Group: TIM
詳細:
 戻り値はシステムの現在時間をマイクロ秒単位で表現している値です。
 このファンクションはある操作の経過時間をGET_USEC_SUBビルトインを用いて測定するために使用します。

A.8.27 GET_VARビルトインプロシージャ
目的:
指定の変数の値を取得します。
構文:
GET_VAR(entry, prog_name, var_name, value, status)
入出力パラメータ:
[in,out] entry :INTEGER
[in] prog_name :STRING
[in] var_name :STRING
[out] value :PATH以外の任意の有効なデータ型
[out] status :INTEGER
%ENVIRONMENT Group :SYSTEM
詳細:

 entryは内部データです。この変数を初期化する必要はありません。また修正してはいけません。
 prog_name に指定の変数を含んでいるプログラム名を指定します。prog_name が空であるなら、現在実行されているタスク
名となります。システム変数を取得するならprog_name を'*SYSTEM*'にして下さい。prog_nameはrobot ring中のロボットの
システム変数の取得にも使用可能です。
 var_name は静的なプログラム変数を参照する必要があります。

 var_name は構造体のメンバ、配列の添え字を含めることが可能です。
 var_name とvalueの両方が配列ならば、コピーされる要素の数は二つの配列のうち小さい方のサイズと同じです。
 var_name とvalueの両方がSTRINGならば、コピーされる文字数は小さい方のサイズと同じです。
 var_name とvalueの両方が同じ型の構造体ならば、value はvar_name の厳密なコピーです。
 value はvar_nameの値です。
 status は処理のステータスです。0でないなら、エラーが発生しました。
 var_name の値が未初期化ならば、value の値も未初期化となり、status は12311となります。
 全てのロボットの指定された名称がシステム変数$PH_MEMBERS[]にあります。この変数はロボットの状態の情報も含ん
でいます。Ringのindexがシステム変数のindexです。ロボットの名称自体を使用するのではなく、このシステム変数の名称
及びその他の情報を参照することで一般的に使用可能なプログラムを作成可能です。
参照:
SET_VARビルトインプロシージャ、「FANUC Robot series R-30iA/R-30iA Mate 制御装置 イーサネット機能 取扱説明書」(B-
82974JA/01):Robot ringのシステム変数へのアクセスに関する情報があります。

注意
GET_VARを使用してシステム変数を変更すると予期せぬ結果を生む可能性があります。

例1:
robot ringのロボットMHROB03のシステム変数 $TP_DEFPROGにアクセスするには、例A.8.27(a)を参照して下さい。

例A.8.27(a) MHROB03の$TP_DEFPROGへのアクセス
GET_VAR(entry, ‘\\MHROB03\*system*’, ‘$TP_DEFPROG’, strvar, status)

例2:
例A.8.27(b) は二つのプログラムgetvar01と getvar02を示しています。プログラムgetvar01はFORループを使用してINTEGER変数
num_of_partsの値を増加させています。getvar01 は値の配列part_array への代入も行っています。プログラムgetvar02は二つの
GET_VAR文を使って num_of_parts とpart_array[3] の値を取得しています。num_of_parts の値はINTEGER変数count に代入されて
います。part_array[3] はSTRING変数part_name に代入されています。最後のGET_VAR文はcountの値を別のINTEGER変数
newcountに設定しています。

例A.8.27(b) GET_VARビルトインプロシージャ

PROGRAM getvar01

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 203 of 412

%NOLOCKGROUP
VAR
j, num_of_parts : INTEGER
part_array : ARRAY[5] OF INTEGER
BEGIN
num_of_parts = 0

FOR j = 1 to 20 DO
num_of_parts = num_of_parts + 1
ENDFOR
part_array[1] = 10
part_array[2] = 20
part_array[3] = 30
part_array[4] = 40
part_array[5] = 50

END getvar01

PROGRAM getvar02
%NOLOCKGROUP
VAR
entry, status : INTEGER
count, new_count : INTEGER
part_name : INTEGER
BEGIN
GET_VAR(entry, 'getvar01', 'part_array[3]', part_name, status)
WRITE('Part Name is Now....>', part_name, cr)

GET_VAR(entry, 'getvar01', 'num_of_parts', count, status)


WRITE('COUNT Now Equals....>', count, cr)

GET_VAR(entry, 'getvar02', 'count', new_count, STATUS)

END getvar02

A.8.28 GO TO 文
目的:
制御を指定の文に移動します。
構文:
|| GO TO | GOTO || stmnt_label
ここで:
stmnt_label : 有効なKARELの識別子
詳細:

 stmnt_label はGOTO文と同じルーチンもしくはプログラムの本文中で定義されている必要があります。
 ラベルの識別子の後には二つのコロン(::)が続きます。実行可能文は同じ行にあっても無くても良いです。
 WHILE, REPEAT, FORループのような通常の制御構造では扱いにくい又は実装が困難な、特殊な環境でのみ使うべきで
す。
参照:
2.1.5項「ラベル」:ラベルに関するより詳細な情報があります。付録E「文法図」: 構文上の情報があります。
例:
以下の例では、DI[1]及びDI[2]の状態に応じてメッセージが変わります。
例A.8.28 GO TO 文
PROGRAM ex_goto
%NOLOCKGROUP
BEGIN
IF NOT DIN[1] THEN

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 204 of 412

GO TO end_it
ENDIF
IF NOT DIN[2] THEN
GO TO end_it
ENDIF
WRITE('Both DIN[1] and DIN[2] are ON',CR)
ABORT
END_IT::
WRITE('Either DIN[1] or DIN[2] is not ON',CR)
END ex_goto

A.9 H
「H」から始まる記述はありません。

A.10 I

A.10.1 IF ... ENDIF文


目的:
あるBOOLEANの式がTRUEならば一連の文を実行します。FALSEならば、代わりとなる一連の文を実行できます。
構文:
IF bool_exp THEN
{ true_stmnt } < ELSE
{ false_stmnt } >ENDIF
ここで:
bool_exp : BOOLEAN
true_stmnt : 実行可能なKARELの文
false_stmnt : 実行可能なKARELの文
詳細:
 bool_exp がTRUEと評価されるなら、true_stmnt に含まれる文が実行されます。その後ENDIFの後の最初の文に続きます。

 bool_exp がFALSEと評価され、ELSE節が指定されていないなら、ENDIF後の最初の文に直接スキップします。
 bool_expがFALSEと評価されELSE節が指定されているなら、false_stmnt に含まれる文が実行されます。その後ENDIFの後
の最初の文に続きます。
 IF文はtrue_stmnt 又はfalse_stmnt 中でネスト可能です。
参照:
付録E「文法図」:構文の情報があります。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.1節「デフォルトデバイスにデータをセーブする」 (SAVE_VR.KL)
B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)
B.4節「位置データ設定及びモニタのプログラム」 (PTH_MOVE.KL)
B.5節「ファイルとプログラムのリスト作成及び文字列操作」 (LIST_EX.KL)
B.6節「ファイルとファイルデバイスのビルトインの使用」 (FILE_EX.KL)
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)
B.10節「DISCTRL_ALPHAビルトインの使用」 (DCALP_EX.KL)
B.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)

A.10.2 IN節
目的:
変数が生成される場所を指定します。
構文:
IN (CMOS | DRAM | SHADOW)
詳細:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 205 of 412


 IN節は変数宣言の一部とすることができます。FROM節の前に指定して下さい。
 IN CMOSは変数をパーマネントプールに生成する指定です。
 IN DRAMは変数をテンポラリプールに生成するよう指定します。
 IN SHADOWは変数に加えられたあらゆる変更がCMOSに保持されるよう指定します。この種類の変数への書き込みは遅い
ですが、読み取りはずっと早いです。

 IN UNINIT_DRAMはDRAM変数が電源投入時に必ず未初期化になるよう指示します。
 IN節が指定されていないならば、全ての変数はテンポラリプールに生成されます。但し%CMOSVARS又は%SHADOWディ
レクティブが指定されていない場合に限ります。これらのディレクティブを使用すると全ての変数をパーマネントプール
に作成します。
 IN節はルーチンの宣言セクションで宣言されている変数には使用できません。
参照:
1.4.1項「メモリ」、%CMOSVARSトランスレータディレクティブ、%SHADOWトランスレータディレクティブ、%
SHADOWCMOSトランスレータディレクティブ。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL) 又は B.8節「動的に表示されている変数の操作」
(CHG_DATA.KL)

A.10.3 %INCLUDEトランスレータディレクティブ
目的:
トランスレート時にプログラムにファイルを挿入します。
構文:
%INCLUDE file_spec
詳細:
 file_spec はインクルードするファイルの名前です。

 指定するファイル名は12文字を超えてはいけません。
 ファイルタイプはデフォルトで.KLとなります。ファイルタイプはディレクティブ中には現れません。

 %INCLUDEディレクティブはそれだけの行に記述する必要があります。
 指定されたファイルは(以下includeファイル)通常、CONSTやVARのような宣言を含みます。しかしながら、それはプログ
ラムの任意の部分を含むことができます。実行可能文や他の%INCLUDEディレクティブさえも含めることができます。
 includeファイルはそれ自身他のファイルをinclude可能です。最大で3レベルまでネスト可能です。includeファイルの行数に
関しては制限がありません。
 トランスレータがトランスレート中に%INCLUDEディレクティブに出くわすと、includeファイルが元のファイルの一部で
あるかのように、includeファイルのトランスレートを開始します。ファイル全体がincludeされると、元のファイルのトラ
ンスレートを再開します。
 付録Aのいくつかの例は以下のincludeファイルを参照しています。
%INCLUDE klevkmsk
%INCLUDE klevkeys
%INCLUDE klevccdf
%INCLUDE kliotyps
これらのファイルはKARELプログラムで使用可能な定数を含んでいます。インストール処理の一部としてハードディスク
にコピーされています。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)
B.10節「DISCTRL_ALPHAビルトインの使用」 (DCALP_EX.KL)

A.10.4 INDEXビルトインファンクション
目的:
STRINGの引数で指定した文字列が、もう一つのSTRINGの引数中で最初に見つかった場所の、最初の文字のindexを返します。
発見されない場合、0が返ります。
構文:
INDEX(main, find)
戻り値の型: INTEGER
入出力パラメータ:
[in] main :STRING
[in] find :STRING

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 206 of 412

%ENVIRONMENT Group :SYSTEM


詳細:
 戻り値はmain 中でfind が最初に現れる箇所の、最初の文字の(main中での)位置のindexの値です。もしfind がmain 中に見つ
からない場合は0が返ります。
例:
以下の例はINDEXビルトインファンクションを使って、part_desc 中で最初に現れる'Old'を探しています。

例A.10.4 INDEXビルトインファンクション
class_key = 'Old'
part_desc = 'Refurbished Old Part'
IF INDEX(part_desc, class_key) > 0 THEN
in_class = TRUE
ENDIF

A.10.5 INI_DYN_DISBビルトインプロシージャ
目的:
BOOLEAN変数の動的な表示を開始します。このプロシージャはBOOLEAN変数の現在値に応じてSTRING配列の要素を表示し
ます。
構文:
INI_DYN_DISB (b_var, window_name, field_width, attr_mask, char_size, row, col, interval, strings, status)
入出力パラメータ:
[in] b_var :BOOLEAN
[in] window_name :STRING
[in] field_width :INTEGER
[in] attr_mask :INTEGER
[in] char_size :INTEGER
[in] row :INTEGER
[in] col :INTEGER
[in] interval :INTEGER
[in] strings :ARRAY OF STRING
[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:
 b_var の値に基いた動的な表示を開始します。b_var がFALSEなら、strings[1] が表示されます。b_var がTRUEなら、strings
[2] が表示されます。b_var が未初期化なら、文字列'*'が表示されます。b_var 及びstrings の両方が静的(ローカルではない)
変数である必要があります。
 window_name は定義済みのウィンドウ名である必要があります。定義済みのウィンドウ名に関しては7.10.1項「教示操作盤
上のユーザ画面」及び7.10.2項「CRT/KBのユーザ画面」を参照して下さい。
 field_width が0でなく、strings[n] が指定幅より短いならば、空白で拡張した表示となります。動的な表示がキャンセルされ
た時にその領域はクリアされます。
 attr_mask は文字表示属性を示すビットマスクです。以下の定数のうちの一つとして下さい。
0 :通常表示
8 :反転表示

 複数の表示属性を持つには、OR演算子を使用して定数の属性値を組み合わせて下さい。
 char_size はデータを通常サイズ、倍角高さ、倍角幅のどれで表示するかを指定します。以下の定数のうちの一つとして下
さい。
0 :通常表示
1 :倍角幅(CRTでのみサポート)
2 :倍角高さ、倍角幅

 row 及びcol はデータを表示するウィンドウ中の位置を指定します。
 interval 表示更新のインターバルをミリ秒単位で指示します。0より大きい必要があります。実際の時間はもっと大きいか
もしれません。なぜなら表示を整えるタスクはプライオリティが低いためです。

 strings[n] は表示されるテキストを含みます。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
CNC_DYN_DISBビルトインプロシージャ
例:
B.7節「動的な表示を行うビルトインの使用」 (DYN_DISP.KL)を参照して下さい。詳細なプログラム例があります。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 207 of 412

A.10.6 INI_DYN_DISEビルトインプロシージャ
目的:
INTEGER変数の動的な表示を開始します。このプロシージャはINTEGER変数の現在値に応じてSTRING配列の要素を表示しま
す。
構文:
INI_DYN_DISE (e_var, window_name, field_width, attr_mask, char_size, row, col, interval, strings, status)
入出力パラメータ:
[in] e_var :INTEGER
[in] window_name :STRING
[in] field_width :INTEGER
[in] attr_mask :INTEGER
[in] char_size :INTEGER
[in] row :INTEGER
[in] col :INTEGER
[in] interval :INTEGER
[in] strings :ARRAY OF STRING
[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:
 e_var の値に基いた動的な表示を開始します。e_var が値nならば、strings[n+1] が表示されます。e_var が負の値、又は
strings の配列の長さ以上の値ならば、文字列'?'が表示されます。e_var とstring s の両方が静的(ローカルではない)変数であ
る必要があります。
 上記のその他の引数についてはINI_DYN_DISBビルトインプロシージャの記述を参照して下さい。
参照:
CNC_DYN_DISEビルトインプロシージャ
例:
B.7節「動的な表示を行うビルトインの使用」 (DYN_DISP.KL)を参照して下さい。詳細なプログラム例があります。

A.10.7 INI_DYN_DISIビルトインプロシージャ
目的:
指定ウィンドウでのINTEGER変数の動的な表示を開始します。
構文:
INI_DYN_DISI(i_var, window_name, field_width, attr_mask, char_size, row, col, interval, buffer_size, format, status)
入出力パラメータ:
[in] i_var :INTEGER
[in] window_name :STRING
[in] field_width :INTEGER
[in] attr_mask :INTEGER
[in] char_size :INTEGER
[in] row :INTEGER
[in] col :INTEGER
[in] interval :INTEGER
[in] buffer_size :INTEGER
[in] format :STRING
[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:

 i_var は動的な表示を開始するINTEGER変数です。
 field_width が0でなく、i_var が指定幅より短いならば、空白で拡張した表示となります。動的な表示がキャンセルされた
時にその領域はクリアされます。

 buffer_size は実装されていません。
 format は変数の印字に使用されます。これは単一引用符で囲んだリテラルで渡すことができます。フォーマット文字列
は%で始まり変換文字で終わります。%と変換文字の間には、以下のものがこの順で存在する可能性があります。
 以下のフラグ(順番を問いません)。これは仕様を修正します。
- : このフィールドを左揃えにします。
+ : 数値が常に符号付で印字されます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 208 of 412

数値のフィールドが先行する0を詰めます。
 最小のフィールド幅を指定する数値
変換された引数は少なくともこの幅で表示されます。必要なら、フィールド幅を調整するために左側に詰め物をします
(左詰を要求したなら、右側)。

 小数点。幅と精度を分けます。
 精度と呼ばれる数値。文字列から印字する最大の文字数、又は実数で小数点の後の桁数、又は整数値の最小の桁数で
す。

フォーマット指定子は表A.10.7中の変換文字を一つ含む必要があります。

表A.10.7変換文字
文字 引数の型;表記
d 整数値;10進数
o 整数値; 符号無し8進数(先行の0無し)
x,X 整数値;符号無し16進数(先行の0xもしくは0X無し).10から15をabcdefあるいはABCDEFで表す
u 整数値;符号無し10進数
s 文字列;文字列の終了もしくは精度として与えられた文字数まで文字列より文字を印字
実数値; [- ]mmm.ddddのフォーマットで10進表記。dの数は精度で与えられる。標準値は6。0を指定すると小数点の表示
f
を抑制する。
実数値; [-]m.dddddde+-xx または [-]m.ddddddE+-xxのフォーマットで10進表記。dの数は精度で与えられる。標準値は
e,E
6。0を指定すると小数点の表示を抑制する。
実数値;指数部が-4以下か精度より大きいか等しい時には%e または %Eが用いられる。そうでなければ%fを用いる。語尾
g,G
の0及び小数点は印字されない。
% 引数は変換されない。%を印字。

 上記のその他の引数についてはINI_DYN_DISBビルトインプロシージャの記述を参照して下さい。
参照:
CNC_DYN_DISI、DEF_WINDOW ビルトインプロシージャ
例:
B.7節「動的な表示を行うビルトインの使用」 (DYN_DISP.KL)を参照して下さい。詳細なプログラム例があります。

A.10.8 INI_DYN_DISPビルトインプロシージャ
目的:
指定ウィンドウ内でのI/Oの値の動的な表示を開始します。I/Oの種類(引数port_type)と番号(同port_no)に基いて行います。
構文:
INI_DYN_DISP (port_type, port_no, window_name, field_width, attr_mask, char_size, row, col, interval, strings, status)
入出力パラメータ:
[in] port_type :INTEGER
[in] port_no :INTEGER
[in] window_name :STRING
[in] field_width :INTEGER
[in] attr_mask :INTEGER
[in] char_size :INTEGER
[in] row :INTEGER
[in] col :INTEGER
[in] interval :INTEGER
[in] strings :ARRAY OF STRING
[out] status :INTEGER
詳細:
 port_type 表示するI/Oの種類を指定します。コードはKLIOTYPS.KLに定義されています。.

 port_type がBOOLEAN型のI/O(例えばDIN)でFALSEなら、string[1]が表示されます。TRUEならstring[2]が表示されま
す。
 port_type がINTEGER型のI/O(例えばGIN)でその値がnなら、strings[n+1 ]が表示されます。I/Oの値がstringの配列の長さ
以上ならば、文字列'?'が表示されます。
 port_no は表示するI/Oの番号を指定します。

 上記のその他の引数についてはINI_DYN_DISBビルトインプロシージャの記述を参照して下さい。
参照:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 209 of 412

CNC_DYN_DISPビルトインプロシージャ
例:
B.7節「動的な表示を行うビルトインの使用」 (DYN_DISP.KL)を参照して下さい。詳細なプログラム例があります。

A.10.9 INI_DYN_DISRビルトインプロシージャ
目的:
指定ウィンドウでのREAL変数の動的な表示を開始します。
構文:
INI_DYN_DISR(r_var, window_name, field_width, attr_mask, char_size, row, col, interval, buffer_size, format, status)
入出力パラメータ:
[in] r_var :REAL
[in] window_name :STRING
[in] field_width :INTEGER
[in] attr_ mask :INTEGER
[in] char_size :INTEGER
[in] row :INTEGER
[in] col :INTEGER
[in] interval :INTEGER
[in] buffer_size :INTEGER
[in] format :STRING
[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:

 r_var は動的な表示を開始するREAL変数です。
 field_width が0でなく、r_var が指定幅より短いならば、空白で拡張した表示となります。動的な表示がキャンセルされた
時にその領域はクリアされます。
 上記のその他の引数についてはINI_DYN_DISIビルトインプロシージャの記述を参照して下さい。
参照:
CNC_DYN_DISRビルトインプロシージャ
例:
B.7節「動的な表示を行うビルトインの使用」 (DYN_DISP.KL)を参照して下さい。詳細なプログラム例があります。

A.10.10 INI_DYN_DISSビルトインプロシージャ
目的:
指定ウィンドウ内でのSTRING変数の動的な表示を開始します。
構文:
INI_DYN_DISS(s_var, window_name, field_width, attr_mask, char_size, row, col, interval, buffer_size, format, status)
入出力パラメータ:
[in] s_var :STRING
[in] window_name :STRING
[in] field_width :INTEGER
[in] attr_ mask :INTEGER
[in] char_size :INTEGER
[in] row :INTEGER
[in] col :INTEGER
[in] interval :INTEGER
[in] buffer_size :INTEGER
[in] format :STRING
[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:
 s_var は動的な表示を開始するSTRING変数です。

 field_width が0でなく、s_var が指定幅より短いならば、空白で拡張した表示となります。動的な表示がキャンセルされた
時にその領域はクリアされます。
 上記のその他の引数についてはINI_DYN_DISIビルトインプロシージャの記述を参照して下さい。
参照:
CNC_DYN_DISS、INI_DYN_DISI ビルトインプロシージャ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 210 of 412

例:
B.7節「動的な表示を行うビルトインの使用」 (DYN_DISP.KL)を参照して下さい。詳細なプログラム例があります。

A.10.11 INIT_QUEUEビルトインプロシージャ
目的:
キュー変数のエントリーを、キュー中にエントリが無いように設定します。
構文:
INIT_QUEUE(queue)
入出力パラメータ:
[out] queue_t :QUEUE_TYPE
%ENVIRONMENT Group : PBQMGR
詳細:
 queue_tは初期化するキュー変数です。
参照:
GET_QUEUE、MODIFY_QUEUE ビルトインプロシージャ、QUEUE_TYPEデータ型、12.7節「キューを利用したタスク間通
信」
例:
以下の例はjob_queueと呼ばれるキューを初期化します。

例A.10.11 INIT_QUEUEビルトインプロシージャ
PROGRAM init_que
%environment PBQMGR
VAR
job_queue FROM globvars: QUEUE_TYPE
BEGIN
INIT_QUEUE(job_queue)
END init_que

A.10.12 INIT_TBLビルトインプロシージャ
目的:
教示操作盤上への表の表示の初期化処理
構文:
INIT_TBL(dict_name, ele_number, num_rows, num_columns, col_data, inact_array, change_array, value_array, vptr_array, table_data,
status)
入出力パラメータ:
[in] dict_name :STRING
[in] ele_number :INTEGER
[in] num_rows :INTEGER
[in] num_columns :INTEGER
[in] col_data :ARRAY OF COL_DESC_T
[in] inact_array :ARRAY OF BOOLEAN
[in] change_array :ARRAY OF ARRAY OF BOOLEAN
[in] value_array :ARRAY OF STRING
[out] vptr_array :ARRAY OF ARRAY OF INTEGER
[in,out] table_data :XWORK_T
[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:
 INIT_TBLはACT_TBLビルトインを使用する前に呼ぶ必要があります。DISCTRL_TBLビルトインを使用するならば
INIT_TBLを呼ぶ必要がありません。
 INIT_TBLとACT_TBLをDISCTRL_TBLの代わりに使用するのは、各キーストローク毎に特殊処理が必要な場合や、ファン
クションキーを表の画面から抜けずに処理する必要がある場合に限るべきです。

 dict_name はヘッダ部分を含む4文字の辞書名です。
 ele_number はヘッダ部分の辞書要素番号です。
 num_rows は表の行数です。
 num_columns は表の列数です。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 211 of 412

 col_data は列を記述する構造体の配列です。表中の一列に対し一つの要素です。以下のフィールドを含みます。

 item_type : この列の値のデータ型です。以下のデータ型の定数が定義されています。
TPX_INT_ITEM — INTEGER型
TPX_REL_ITEM — REAL型
TPX_FKY_ITEM — ファンクションキー列挙型
TPX_SUB_ITEM — サブウィンドウ列挙型
TPX_KST_ITEM — KAREL文字列型
TPX_KSL_ITEM — KAREL文字列のラベル型(選択できるが編集できない)
TPX_KBL_ITEM — BOOLEAN型
TPX_BYT_ITEM — BYTE型
TPX_SHT_ITEM — SHORT型
TPX_PBL_ITEM — BOOLEAN型のI/O
TPX_PIN_ITEM — INTEGER型のI/O
 start_col : この列の表示フィールド開始列(1..40)
 field_width : この列の表示フィールドの幅
 num_ele : ある種のデータ型の表示値に使用する辞書要素。これらのデータ型のための辞書要素のフォーマットは以下の
通りです。
 TPX_FKY_ITEM: 列挙化した値がファンクションキーのラベルに表示されます。2ページまでのファンクション
キーラベル、最大10のラベルを使用可能です。各ラベルの文字列は最大8文字までです。しかしながら、ラベルの
後に別のラベルが続くならば、最後の文字は空白にして下さい。そうしないと二つのラベルがつながって見えま
す。
 一つの辞書要素が全てのラベルの値を定義します。各値は&new_lineを使用して別の行に置かれます。その値に
ファンクションキーF1......F5、F6......F10及び数値1......10が順番に割り当てられます。ラベルをつけないファンク
ションキーは空のままにして下さい。2ページ目(F6......F10)に一つでもラベルが有るならば、F5とF10のラベルの8
列目は">"として下さい。F6......F10にラベルが無いならば、最後の空で無いラベルの後には行を指定する必要があ
りません。
例:
$ example_fkey_label_c
"" &new_line
"F2" &new_line
"F3" &new_line
"F4" &new_line
"F5 >" &new_line
"F6" &new_line
"F7" &new_line
"" &new_line
"" &new_line
" >"

 TPX_SUB_ITEM: 列挙化した値を表示デバイス上のサブウィンドウから選択します。5ページのサブウィンドウ、
最大の35個の値を表示可能です。各値は16文字までの文字列です。
 enum_dictから始まる連続した辞書要素が値を決定します。各値は別々の要素とする必要があります。&new_lineで
終わってはいけません。文字列には1-35の値が順番に割り当てられます。最後の辞書要素は "\a"である必要があり
ます。
例:
$ example_sub_win_enum_c
"Red"
$
"Blue"
$
"Green"
$
"Yellow"
$
"\a"

 TPX_KBL_ITEM, TPX_PBL_ITEM: TRUEとFALSEの値がファンクションキーのラベルF4,F5にこの順で表示されま


す。各ラベルの文字列は最大8文字までです。しかしTRUEのラベルの最後の文字は空白として下さい。さもない
と二つのラベルが結合して見えます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 212 of 412

 一つの辞書要素がラベルの値を決定します。&new_lineを用い、それぞれの値を別々の行とする必要があります。
FALSEの値を最初にする必要があります。
例:
$ example_boolean_c
"OFF" &new_line
"ON"

 enum_dict :次のデータ型の表示に用いる辞書名です。TPX_FKY_ITEM、TPX_SUB_ITEM、TPX_KBL_ITEM又は
TPX_PBL_ITEM
 format_spec : データの表示に用いるフォーマットの文字列です。フォーマットの文字列はフォーマット指定子を含みま
す。フォーマットの文字列はフォーマット指定子の前後に望ましい文字を指定することができます。フォーマット指
定子自体は%で始まり、変換文字で終了します。%と変換文字の間には以下の物を、この順番に指定できます。
 以下のフラグ(順番を問いません)。これは仕様を修正します。
- : このフィールドを左揃えにします。
+ : 数値が常に符号付で印字されます。
space : 最初の文字が符号で無いならば、空白が付きます。
0 : 数値にフィールドに先行する0を詰めます。
 最小のフィールド幅を指定する数値
変換された引数は少なくともこの幅で表示されます。必要なら、フィールド幅を調整するために左側に詰め物を
します(左詰を要求したなら、右側)。
 小数点。幅と精度を分けます。
 精度と呼ばれる数値。文字列から印字する最大の文字数、又は実数で小数点の後の桁数、又は整数値の最小の桁
数です。
 フォーマット指定子は以下の表にある変換文字を一つ含む必要があります。

表A.10.12変換文字
文字 引数の型;表記
d 整数値;10進数
o 整数値; 符号無し8進数(先行の0無し)
x,X 整数値;符号無し16進数(先行の0xもしくは0X無し).10から15をabcdefあるいはABCDEFで表す
u 整数値;符号無し10進数
s 文字列;文字列の終了もしくは精度として与えられた文字数まで文字列より文字を印字
実数値; [- ]mmm.ddddのフォーマットで10進表記。dの数は精度で与えられる。標準値は6。0を指定すると小数点の表示を
f
抑制する。
実数値; [-]m.dddddde+-xx または [-]m.ddddddE+-xxのフォーマットで10進表記。dの数は精度で与えられる。標準値は6。0
e,E
を指定すると小数点の表示を抑制する。
実数値;指数部が-4以下か精度より大きいか等しい時には%e または %Eが用いられる。そうでなければ%fを用いる。語尾の
g,G
0及び小数点は印字されない。
% 引数は変換されない。%を印字。

例:
"%d"
"%-10s"

col_data のitem_typeに指定したデータタイプと共に使用可能なフォーマット指定子は以下の通りです。
TPX_INT_ITEM %d, %o, %x, %X, %u
TPX_REL_ITEM %f, %e, %E, %g, %G
TPX_FKY_ITEM %s
TPX_SUB_ITEM %s
TPX_KST_ITEM %s
TPX_KSL_ITEM %s
TPX_KBL_ITEM %s
TPX_BYT_ITEM %d, %o, %x, %X, %u, %c
TPX_SHT_ITEM %d, %o, %x, %X, %u
TPX_PBL_ITEM %s
TPX_PIN_ITEM %d, %o, %x, %X, %u
 max_integer : データタイプがTPX_INT_ITEM、TPX_BYT_ITEM、又はTPX_SHT_ITEMの場合の最大値

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 213 of 412


 min_integer : データタイプがTPX_INT_ITEM、TPX_BYT_ITEM、TPX_SHT_ITEMの場合の最小値
 max_real : 実数値の最大値
 min_real : 実数値の最小値
 clear_flag : データ型がTPX_KST_ITEMならば、1だと入力前にフィールドがクリアされます。0ならクリアされませ
ん。
 lower_case : データ型がTPX_KST_ITEMなら、1は大文字と小文字両方の入力を許します。0なら大文字に制限されま
す。
 inact_array は表の各列に対応するBOOLEAN変数の配列です。
 各BOOLEAN変数をTRUEにして列を非アクティブの状態にできます。非アクティブの状態ではカーソルをその列に移
動できません。
 配列のサイズは表中の項目の個数より多くも少なくも成り得ます。
 inact_array を使用しない場合、配列のサイズを1に設定可能です。配列を初期化する必要はありません。
 change_array は表中の書式付けされたデータ項目に相当するブーリアン変数の2次元配列です。
 値が設定されると対応するブーリアンがTRUEになります。そうでなければFALSEになります。この配列を初期化する
必要はありません。
 配列のサイズは表中のデータ項目の個数より多くも少なくも成り得ます。
 change_array を使用しないならば、配列のサイズを1にできます。
 value_array は表中のデータの列に相当する変数名の配列です。各変数名は'[prog_name]var_name'として指定可能です。
 [prog_name] 指定の変数を含んでいるプログラム名を指定します。[prog_name]が指定されていない場合、現在実行中の
プログラム名が使用されます。
 var_name はプログラムレベルでグローバルな(静的な)変数を参照する必要があります。
 var_name はノード番号、構造体のメンバ、配列の添え字を含めることが可能です。
 これらの変数それぞれが、num_rows の長さを持つ配列である必要があります。そのデータ型と値は該当する列の
col_data のitem_typeの値と一致すべきです。以下のようになります。
 TPX_INT_ITEM: 望ましい値を持つARRAY OF INTEGER
 TPX_REL_ITEM: 望ましい値を持つARRAY OF REAL
 TPX_FKY_ITEM: col_data のenum_eleに指定された辞書要素の項目を参照する値のARRAY OF INTEGER 最大2ペー
ジのファンクションキー、つまり列挙化したファンクションキーの値を10個まで使用可能です。
 TPX_SUB_ITEM: col_data のenum_eleに指定された辞書要素の項目を参照する値のARRAY OF INTEGER。最大28
個、列挙化した値を使用可能です。
 TPX_KST_ITEM: 望ましい値を持つARRAY OF STRING。
 TPX_KST_ITEM: 望ましい値を持つARRAY OF STRING。
 TPX_KSL_ITEM: 望ましい値を持つARRAY OF STRING。ユーザは値を編集できません。選択されるとACT_TBL
がreturnします。
 TPX_KBL_ITEM: 望ましい値を持つARRAY OF BOOLEAN。col_data のenum_eleで指定された辞書要素は二つの辞
書要素を持つべきです。FALSEの項目が最初、TRUEの項目が2番目です。
 TPX_BYT_ITEM: 望ましい値を持つARRAY OF BYTE 。
 TPX_SHT_ITEM: 望ましい値を持つARRAY OF SHORT。
 TPX_PBL_ITEM: I/Oの名前を持つARRAY OF STRING。例えば 「DIN[5]」です。
 TPX_PIN_ITEM: I/Oの名前を持つARRAY OF STRING。例えば「GOUT[3]」です。
 vptr_array はvalue_array 中の変数名に相当するINTEGERの配列 です。データを変更しないで下さい。内部的に使用してい
ます。

 table_data は表の表示と制御に用いています。データを変更しないで下さい。内部的に使用しています。
 status は処理のステータスです。0でないなら、エラーが発生しました。
例:
この例ではTPXTABEG.TXが制御装置に'XTAB'としてロードされています。TPEXTBLはINIT_TBLを呼んで5列4行の表を初期化
します。押下された各キーを処理するためにループ中でACT_TBLを呼んでいます。
例A.10.12(b)はKARELプログラムの例です。A.10.12(a)はA.10.12(b)で使用する辞書の例です。

例A.10.12(a) INIT_TBLビルトインプロシージャの辞書の例
*----------------------------------------------
*TPXTABEG.TX
*----------------------------------------------
.kl tpxtab
$-, title
&reverse "DATA Test Schedule" &standard &new_line
"E1: " &new_line
" W(mm) TEST C(%%) G(123456) COLOR"
^function_keys

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 214 of 412

?help_text
$-, function_keys
"f1" &new_line
"f2" &new_line
"f3" &new_line
"f4" &new_line
" HELP >" &new_line
"f6" &new_line
"f7" &new_line
"f8" &new_line
"f9" &new_line
"f10 >"
$-, help_text "Help text goes here..."
$-, enum1
"" &new_line
"" &new_line
"TRUE" &new_line
"FALSE" &new_line
""
$-, enum2
"Red"
$-
"Blue"
$-
"Green"
$-
"Yellow"
$-
"Brown"
$-
"Pink"
$-
"Mauve"
$-
"Black"
$-
"......"

例A.10.12(b) INIT_TBLビルトインプロシージャ
----------------------------------------------
-- TPEXTBL.KL
----------------------------------------------
PROGRAM tpextbl
%NOLOCKGROUP
%NOPAUSESHFT
%ENVIRONMENT uif
%INCLUDE klevccdf
%INCLUDE klevkeys
%INCLUDE tpxtab
VAR
dict_name: STRING[6]
ele_number: INTEGER
num_rows: INTEGER
num_columns: INTEGER
col_data: ARRAY[5] OF COL_DESC_T
inact_array: ARRAY[5] OF BOOLEAN
change_array: ARRAY[4,5] OF BOOLEAN
value_array: ARRAY[5] OF STRING[26]
vptr_array: ARRAY[4,5] OF INTEGER

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 215 of 412

table_data: XWORK_T
STATUS: INTEGER
action: INTEGER
def_item: INTEGER
term_char: INTEGER
attach_sw: BOOLEAN
save_action: INTEGER
done: BOOLEAN
value1: ARRAY[4] OF INTEGER
value2: ARRAY[4] OF INTEGER
value3: ARRAY[4] OF REAL
value4: ARRAY[4] OF STRING[10]
value5: ARRAY[4] OF INTEGER
BEGIN
def_item = 1
value_array[1] = 'value1'
value_array[2] = 'value2'
value_array[3] = 'value3'
value_array[4] = 'value4'
value_array[5] = 'value5'
value1[1] = 21
value1[2] = 16
value1[3] = 1
value1[4] = 4
value2[1] = 3
value2[2] = 2
value2[3] = 3
value2[4] = 2
value3[1] = -13
value3[2] = 4.1
value3[3] = 23.9
value3[4] = -41
value4[1] = 'XXX---'
value4[2] = '--X-X-'
value4[3] = 'XXX-XX'
value4[4] = '-X-X--'
value5[1] = 1
value5[2] = 1
value5[3] = 2
value5[4] = 3
inact_array[1] = FALSE
inact_array[2] = FALSE
inact_array[3] = FALSE
inact_array[4] = FALSE
inact_array[5] = FALSE
col_data[1].item_type = TPX_INT_ITEM
col_data[1].start_col = 6
col_data[1].field_width = 4
col_data[1].format_spec = '%3d'
col_data[1].max_integer = 99
col_data[1].min_integer = -99
col_data[2].item_type = TPX_FKY_ITEM
col_data[2].start_col = 12
col_data[2].field_width = 5
col_data[2].format_spec = '%s'
col_data[2].enum_ele = enum1 -- 辞書要素番号。辞書で定義した要素enum1(=3)。
col_data[2].enum_dict = 'XTAB'
col_data[3].item_type = TPX_REL_ITEM
col_data[3].start_col = 18

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 216 of 412

col_data[3].field_width = 5
col_data[3].format_spec = '%3.1f'
col_data[4].item_type = TPX_KST_ITEM
col_data[4].start_col = 26
col_data[4].field_width = 6
col_data[4].format_spec = '%s'
col_data[5].item_type = TPX_SUB_ITEM
col_data[5].start_col = 34
col_data[5].field_width = 6
col_data[5].format_spec = '%s'
col_data[5].enum_ele = enum2 -- 辞書要素番号。辞書で定義したenum2(=4)
col_data[5].enum_dict = 'XTAB'
dict_name = 'XTAB'
ele_number = title -- タイトルの辞書要素番号、title(=0)
num_rows = 4
num_columns = 5
def_item = 1
attach_sw = TRUE
INIT_TBL(dict_name, ele_number, num_rows, num_columns, col_data,
inact_array, change_array, value_array, vptr_array,
table_data, STATUS)
IF STATUS <> 0 THEN
WRITE('INIT_TBL status = ', STATUS, CR);
ELSE
def_item = 1
-- テーブルの初期表示
ACT_TBL(KY_DISP_UPDT, def_item, table_data, term_char,
attach_sw, STATUS)
IF STATUS <> 0 THEN
WRITE(CR, 'ACT_TBL status = ', STATUS)
ENDIF
ENDIF
IF STATUS = 0 THEN
-- 終了文字(termination key)が押されるまでループ
done = FALSE
action = KY_REISSUE -- キーを読め
WHILE NOT done DO
-- 新しいキーを読み、それに応じた処理を行い、リターンする
ACT_TBL(action, def_item, table_data, term_char,
attach_sw, STATUS)
save_action = action
action = KY_REISSUE -- 新しいキーを読む
-- デバッグ用
WRITE TPERROR (CHR(cc_home) + CHR(cc_clear_win))
-- 終了キー(termination keys)に応じた処理
SELECT (term_char) OF
CASE (KY_SELECT, KY_NEW_MENU):
done = TRUE;
CASE (KY_F1):
-- F1
SET_CURSOR(TPERROR, 1, 1, STATUS)
WRITE TPERROR ('F1 pressed')
CASE (KY_F2):
-- F2
SET_CURSOR(TPERROR, 1, 1, STATUS)
WRITE TPERROR ('F2 pressed')
CASE (KY_F3):
-- F3
SET_CURSOR(TPERROR, 1, 1, STATUS)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 217 of 412

WRITE TPERROR ('F3 pressed')


CASE (KY_F4):
-- F4
SET_CURSOR(TPERROR, 1, 1, STATUS)
WRITE TPERROR ('F4 pressed')
CASE (KY_F5):
-- F5 Help
action = KY_HELP
CASE (KY_F6):
-- F6
SET_CURSOR(TPERROR, 1, 1, STATUS)
WRITE TPERROR ('F6 pressed')
CASE (KY_F7):
-- F7
SET_CURSOR(TPERROR, 1, 1, STATUS)
WRITE TPERROR ('F7 pressed')
CASE (KY_F8):
-- F8
SET_CURSOR(TPERROR, 1, 1, STATUS)
WRITE TPERROR ('F8 pressed')
CASE (KY_F9):
-- F9
SET_CURSOR(TPERROR, 1, 1, STATUS)
WRITE TPERROR ('F9 pressed')
CASE (KY_F10):
-- F10
SET_CURSOR(TPERROR, 1, 1, STATUS)
WRITE TPERROR ('F10 pressed')
CASE (KY_UNDEF):
-- 特殊キーの処理
SELECT (save_action) OF
CASE (KY_F1_S):
-- シフト+F1
SET_CURSOR(TPERROR, 1, 1, STATUS)
WRITE TPERROR ('F1 shifted pressed')
ELSE:
ENDSELECT
ELSE:
action = term_char -- このキーに応じた処理を行う
ENDSELECT
ENDWHILE
IF term_char <> KY_NEW_MENU THEN
-- 動的な表示更新をキャンセルする
ACT_TBL(KY_CANCEL, def_item, table_data, term_char,
attach_sw, STATUS)
ENDIF
ENDIF
END tpextbl

A.10.13 IN_RANGEビルトインファンクション
目的:
引数で指定した位置に到達可能か否かを示すBOOLEANの値を返します。
構文:
IN_RANGE(posn)
戻り値の型: BOOLEAN
入出力パラメータ:
[in] posn : XYZWPREXT
%ENVIRONMENT Group :SYSTEM

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 218 of 412

詳細:

 もしposn が動作可能範囲内であるならば、TRUEを返します。さもなくばFALSEを返します。
 現在の$GROUP[ ].$UFRAME及び$GROUP[ ].$UTOOLがposnに適用されます。
参照:
CHECK_EPROSビルトインプロシージャ
例:
以下の例では新しい位置が動作可能範囲にあるか否かチェックしています。

例A.10.13 IN_RANGEビルトインファンクション
IF IN_RANGE(pallet : part_slot) THEN
WRITE('I can get there!',CR)
ELSE
WRITE('I can't get there!',CR)
ENDIF

A.10.14 INSERT_QUEUE ビルトインプロシージャ


目的:
キューが一杯で無いなら、エントリをキューに挿入します。
構文:
INSERT_QUEUE(value, sequence_no, queue, queue_data, status)
入出力パラメータ:
[in] value :INTEGER
[in] sequence_no :INTEGER
[in,out] queue_t :QUEUE_TYPE
[in,out] queue_data :ARRAY OF INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBQMGR
詳細:

 value にキューqueue_tに挿入する値を指定します。
 sequence_no で指定の通し番号のエントリの前に、新しいエントリが挿入されます。
 queue_t はキューとして使う変数です。
 queue_data はキュー中のデータを保持する配列です。この配列の長さがキューの最大エントリ数を決定します。
 status キューが一杯の場合、61002、「キューが一杯です」が返ります。指定の通し番号がキューに無い場合、61003、「不
正なシークエンスナンバーーです」が返ります。
参照:
MODIFY_QUEUE, APPEND_QUEUE, DELETE_QUEUE ビルトインプロシージャ、12.7節「キューを利用したタスク間通信」。
例:
以下の例では、ルーチン ins_in_queue がエントリ(value) をキュー( queue_t 及び queue_data )に追加します。追加場所は
sequence_no 指定のエントリの前です。このルーチンは追加が成功すればTRUEを、失敗すればFALSEを返します。
例A.10.14 INSERT_QUEUE ビルトインプロシージャ
PROGRAM ins_que
%ENVIRONMENT PBQMGR
ROUTINE ins_in_queue(value: INTEGER;
sequence_no: INTEGER;
queue_t: QUEUE_TYPE;
queue_data: ARRAY OF INTEGER): BOOLEAN
VAR
STATUS: INTEGER
BEGIN
INSERT_QUEUE(value, sequence_no, queue_t, queue_data, STATUS)
RETURN (STATUS = 0)
END ins_in_queue
BEGIN
END ins_que

A.10.15 INTEGERデータ型

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 219 of 412

目的:
変数、ファンクションの戻り値の型、ルーチンのパラメータをINTEGERデータ型として定義する。
構文:
INTEGER
詳細:

 INTEGER型の変数又はパラメータは整数値が-2147483648から+2147483646の範囲にあることを仮定できます。
 INTEGERのリテラルは、一連の数字と、オプションで先行するプラス又はマイナス記号から構成されます。小数点、コン
マ、空白、ドル記号($)、または他の句読文字を含むことはできません。(表A.10.15をご覧下さい)

表A.10.15 INTEGERの有効な値と無効な値
有効 無効 理由
1 1.5 小数点は使用できません(整数値である必要があります)
–2500450 –2,500,450 コンマは使用できません。
+65 +6 5 空白は使用できません。


 REALのパラメータを期待しているルーチンにINTEGERを実引数を渡すと、それは値渡しのREALとして扱われます。
 INTEGERの式のみがINTEGERの変数に代入可能です。またINTEGERの関数から返すことが可能なのも、INTEGER型の引
数として渡すことが可能なのもINTEGERの式のみです。
 有効なINTEGERの演算子は
 算術演算子(+, -, *, /, DIV, MOD)
 関係演算子(>, >=, =, <>, <, <=)
 ビット演算子 (AND, OR, NOT)
参照:
5章「ルーチン」:値渡しに関する詳細。7章「ファイル入出力操作」:フォーマット指定子に関する詳細。
例:
詳細なプログラム例に関しては付録B「KARELプログラム例」を参照して下さい。

A.10.16 INVビルトインファンクション
目的:
あるPOSITIONの、そのPOSITIONが記録された時と異なる座標系中での座標値を決定するために、相対位置演算子(:)と組み合
わせて座標系の変換で使用します。
構文:
INV(pos) 戻り値の型: POSITION
入出力パラメータ:
[in] pos :POSITION
%ENVIRONMENT Group :SYSTEM
詳細:

 戻り値は引数pos の逆変換です。
 戻り値のPOSITIONの形態は引数 pos の形態となります。
例:
以下の例はINVビルトインを使用して、part_pos の位置の、原点をrack_pos に持つ座標系を基準としたPOSITIONを決定してい
ます。part_pos とrack_pos の両方が元々はユーザ座標系で教示されています。

例A.10.16 INVビルトインファンクション
PROGRAM inv01
%NOLOCKGROUP
VAR
rack_pos, part_pos : POSITION
p1 : POSITION
BEGIN
-- rack_posとpart_posは初期化の必要があります。
p1 = INV(rack_pos):part_pos
END inv01

A.10.17 IO_MOD_TYPEビルトインプロシージャ
目的:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 220 of 412

指定のラック/スロットにあるモジュールのタイプを突き止めます。
構文:
IO_MOD_TYPE(rack_no, slot_no, mod_type, status)
入出力パラメータ:
[in] rack_no :INTEGER
[in] slot_no :INTEGER
[out] mod_type :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :IOSETUP
詳細:

 rack_no はI/Oモジュールを含んでいるラックです。プロセスI/Oボードでは0です。Allen-DradleyとGenius I/Oでは16です。
 slot_no はI/Oモジュールを含んでいるスロットです。プロセスI/OボードではSLC-2 chainで中のボードの位置です。
 mod_type はモジュールの種類です。
6 A16B-2202-470
7 A16B-2202-472
8 A16B-2202-480
 status はパラメータが有効で指定のラック/スロット番号のモジュール又はボードが存在すれば0を返します。
例:
以下の例は指定のラック及びスロットにあるモジュールを呼び出し側に返します。

例A.10.17 IO_MOD_TYPEビルトインプロシージャ
PROGRAM iomodtyp
%NOLOCKGROUP
%ENVIRONMENT IOSETUP
ROUTINE get_mod_type(rack_no: INTEGER;
slot_no: INTEGER;
mod_type: INTEGER): INTEGER
VAR
status: INTEGER
BEGIN
IO_MOD_TYPE(rack_no, slot_no, mod_type, status)
RETURN (status)
END get_mod_type
BEGIN
END iomodtyp

A.10.18 IO_STATUSビルトインファンクション
目的:
引数のファイルに関する最後の操作の成功や失敗の種類を示すINTEGERの値を返します。
構文:
IO_STATUS(file_id)
戻り値の型: INTEGER
入出力パラメータ:
[in] file_id :FILE
%ENVIRONMENT Group :PBCORE
詳細:
 IO_STATUSはOPEN FILE、READ、WRITE、CANCEL FILE、又はCLOSE FILE文の後に使用可能です。その操作によっ
て、成功すれば0を返しますし、さもなくばエラーの一つが返ります。よく起こるエラーを幾つか表A.10.18に示します。
表A.10.18 IO_STATUSエラー
エラーコード 説明
0 指定ファイルに関する最後の操作は成功しました。
2021 RAMディスク装置で、ファイルの終端(End of file)です。
10006 フロッピーで、ファイルの終端(End of file)です。
12311 未初期化変数です。
12324 Openのモードが不正な文字列です。
12325 ファイルの文字列が不正です。
12326 ファイル変数が既に使用されています。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 221 of 412

12327 Open fileが失敗しました。


12328 ファイルがOpenされていません。
12329 変数へ書き込めません。
12330 ファイルへの書き込みが失敗しました。
12331 変数を読めません。
12332 読んだデータが短すぎます。
12333 ファイルから読んだ文字列が誤っています。
12334 ファイルのreadに失敗しました。
12335 定義済みファイルをOpenできません。
12336 定義済みファイルをcloseできません。
12338 ファイルのcloseに失敗しました。
12347 信号のreadに失敗しました。
12348 信号の書き込みに失敗しました。
12358 read要求がタイムアウトしました。
12359 Readの要求がネストされています。
12367 フォーマット中の基数が間違っています。

 あらゆるIO_STATUSエラーをクリアするにはREAD file_id(cr)を使用して下さい。

 Openされているファイルにfile_id が相当しない場合、またはfile_idがCRT/KB、教示操作盤に開かれている定義済みの
「ファイル」に相当しない場合、プログラムはエラーで終了します。
例:
詳細なプログラム例に関してはB.9節「辞書ファイルからリストを表示する」 (DCLIST_EX.KL)を参照して下さい。

A.11 J

A.11.1 J_IN_RANGEビルトインファンクション
目的:
指定された各軸形式の位置に到達可能か否かを示すBOOLEANの値を返します。
構文:
J_IN_RANGE(posn)
戻り値の型: BOOLEAN
入出力パラメータ:
[in] posn :JOINTPOS
%ENVIRONMENT Group :SYSTEM
詳細:
 もしposn が動作可能範囲内であるならば、TRUEを返します。さもなくばFALSEを返します。
参照:
IN_RANGEビルトインファンクション、CHECK_EPROSビルトインプロシージャ

A.11.2 JOINTPOSデータ型
目的:
変数、ファンクションの戻り値の型、ルーチンのパラメータをJOINTPOSデータ型として定義する。
構文:
JOINTPOS<n> <IN GROUP[m]>
詳細:
 JOINTPOSはグループの各軸の位置のREALの表現から構成されます。各軸の位置は度又はミリメートル(mm)単位で表され
ています。

 n は軸の数を指定します。デフォルトは9です。サイズは4 + 4 * nバイトです。
 JOINTPOSの後にIN GROUP[m]を続けることができます。ここでmはデータを使用する動作グループを示します。デフォル
トのグループは%DEFGROUPディレクティブで指定のグループか、1です。
 CNV_REL_JPOS 及びCNV_JPOS_RELビルトインを使用して実数値にアクセス可能です。

 JOINTPOSは他の位置データ型に代入可能です。例えば単一軸のポジショナのように、XYZWPR座標系を持たない動作グ
ループもあります。そのようなグループでJOINTPOSをXYZWPRやPOSITIONに代入しようとすると実行時エラーが発生し

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 222 of 412

ます。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.3節「レジスタ関連ビルトインの使用」(REG_EX.KL)
B.4節「位置データ設定及びモニタのプログラム」 (PTH_MOVE.KL)
B.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)

A.11.3 JOINT2POSビルトインファンクション
目的:
順変換ルーチンを呼ぶことにより、軸の角度(in_jnt)を直交位置(outpos)に変換するために使用されます。
構文:
JOINT2POS (in_jnt, uframe, utool, config_ref, out_pos, wjnt_cfg, ext_ang, and status).
入出力パラメータ:
[in] in_jnt :JOINTPOS
[in] uframe :POSITION
[in] utool :POSITION
[in] config_ref :INTEGER
[out] out_pos :POSITION
[out] wjnt_cfg :CONFIG
[out] ext_ang :ARRAY OF REAL
[out] status :INTEGER
%ENVIRONMENT Group :MOTN
詳細:
 入力in_jnt は直交位置に変換しようとする(複数の)軸の角度として定義されます。

 入力uframe は直交位置のためのユーザ座標系です。
 入力utool は対応するツール座標として定義されます。
 入力config_ref は望みのsolutionの種類を表すINTEGERです。以下に挙げる値が有効です。また、カッコ内の定義済みの定
数を使用可能です。その値を必要に応じて加えることが可能です。一つの例としては、config_ref = HALF_SOLN +
CONFIG_TCPです。
 0 :(FULL_SOLN) = デフォルト
 1 : (HALF_SOLN) = Wrist joint (xyz456). WPRを計算/使用しません。
 2 :(CONFIG_TCP) = 手首軸の形態(up/down)は姿勢固定とします。
 4 :(APPROX_SOLN) = Approximate solution. この値を使用すると計算時間が減少するロボットがあります。
 8 :(NO_TURNS) = 手首軸の回転数を無視します。軸4、5及び6に関して最短のパスを使用します(ref_jntを使用)
 16 :(NO_M_TURNS) = 基本軸の回転数(J1のみ)を無視します。最短のパスを使用します。

 出力out_pos は入力の各軸値に対応する直交位置です。
 出力wjnt_cfg は手首軸の形態です。config_ref がHALF_SOLNに相当する時に出力されます。
 出力ext_ang は(存在する場合)付加軸の各軸の値を含んでいます。
 出力status は処理のステータスです。0以外ならばエラーが発生しました。

A.12 K

A.12.1 KCLビルトインプロシージャ
目的:
KCLに引数のSTRINGで指定されたKCLのコマンドを送ります。
構文:
KCL (command, status)
入出力パラメータ:
[in] command :STRING
[out] status :INTEGER
%ENVIRONMENT Group :kclop
詳細:
 command は有効なKCLのコマンドを含んでいる必要があります。

 command は126文字を超えることはできません。
 プログラムの実行はKCLコマンドの実行が完了するか、エラーが検出されるまで待ちます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 223 of 412

 全てのKCLコマンドは、コマンドレベルで入力されたかのように実行されます。但しCLEAR ALLのような破壊的なコマン
ドで確認が必要ない点は例外です。

 status はコマンド実行が成功したか否かを示します。
 もしKCLコマンドファイルが実行されて、$STOP_ON_ERRがFALSEの場合、KCLビルトインは実行が完了するまで走り続
けます。最初に発見されたエラーが返されるか、エラーがなければ0が返ります。
参照:
KCL_NO_WAIT、KCL_STATUSビルトインプロシージャ
例:
以下の例はプログラムの一覧を表示し、その完了を待ちます。statusはこの操作の結果です。

例A.12.1 KCLビルトインプロシージャ
PROGRAM kcl_test
VAR
command :STRING[20]
status :INTEGER
BEGIN
command = 'SHOW PROGRAMS'
KCL (command, status)
END kcl_test

他の例に関しては例9.3.18(f)を参照して下さい。

A.12.2 KCL_NO_WAITビルトインプロシージャ
目的:
KCLに引数のSTRINGで指定されたKCLのコマンドを送ります。しかしコマンド実行の完了を待たずにプログラムの実行を継続
します。
構文:
KCL_NO_WAIT (command, status)
入出力パラメータ:
[in] command :STRING
[out] status :INTEGER
%ENVIRONMENT Group :kclop
詳細:
 command は有効なKCLのコマンドを含んでいる必要があります。

 status はKCLがコマンドを受け付けたか否かを示します。
 プログラム実行はKCLがコマンドを受け付けるまで待ちます。受け付けない場合はエラーが検出されます。
参照:
KCL、KCL_STATUSビルトインプロシージャ
例:
以下の例はプログラムをロードします。しかしプログラムがロードされるのを待たずにreturnします。statusはコマンドが受け付
けられたか否かを示します。

例A.12.2 KCL_NO_WAITビルトインプロシージャ
PROGRAM kcl_test
VAR
command :STRING[20]
status :INTEGER
BEGIN
command = 'Load prog test_1'
KCL_NO_WAIT (command, status)
delay 5000
status = KCL_STATUS
END kcl_test

A.12.3 KCL_STATUSビルトインプロシージャ
目的:
KCLやKCL_NO_WAITビルトインで最後に実行されたコマンドのstatusを返します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 224 of 412

構文:
KCL_STATUS
戻り値の型: INTEGER
%ENVIRONMENT Group :kclop
詳細:

 KCL又はKCL_NO_WAITビルトインから実行された最後のコマンドのstatus を返します。
 プログラム実行はKCLがstatusを返すのを待ちます。
参照:
KCL_NO_WAIT、KCLビルトインプロシージャ

A.13 L

A.13.1 LNビルトインファンクション
目的:
指定されたREALの引数の自然対数を返します。
構文:
LN(x)
戻り値の型: REAL
入出力パラメータ:
[in] x : REAL
%ENVIRONMENT Group :SYSTEM
詳細:

 戻り値はx の自然対数です。
 x は0より大きい必要があります。さもないとプログラムはエラーで終了します。
例:
以下の例は入力された変数real_varの自然対数をln_valueに代入します。

例A.13.1 LNビルトインファンクション
PROGRAM ln01
%NOLOCKGROUP
%NOPAUSESHFT
VAR
real_var : real
ln_value : real
BEGIN
WRITE(CR, CR, 'enter a number =')
READ(real_var)
ln_value = LN(real_var)
WRITE('LN(',real_var,') is ', ln_value, CR)
END ln01

A.13.2 LOADビルトインプロシージャ
目的:
指定されたファイルをロードします。
構文:
LOAD (file_spec, option_sw, status)
入出力パラメータ:
[in] file_spec :STRING
[in] option_sw :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 file_spec にロードするファイルのファイルデバイス、ファイル名、ファイルタイプを指定します。以下のタイプが有効で
す。
.TP TPプログラム

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 225 of 412

.PC KARELプログラム
.VR KAREL変数
.SV システム変数
.IO I/O割付データ
拡張子無し KARELプログラム及び変数
 option_sw にロードの間に適用されるオプションの種類を指定します.
.TPファイルでは以下の値が有効です。
 1 プログラムが既に存在する場合に上書します。1以外なら、プログラムが既に存在するとエラーが返ります。
.SVファイルでは以下の値が有効です。
 1 システム変数を変換します。

 option_sw は他の全てのファイルタイプでは無視されます。
 status は処理のステータスです。0でないなら、エラーが発生しました。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.5節「ファイルとプログラムのリスト作成及び文字列操作」 (LIST_EX.KL)
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)

A.13.3 LOAD_STATUSビルトインプロシージャ
目的:
指定のKARELプログラム及び変数がメモリにロードされているかを突き止めます。
構文:
LOAD_STATUS(prog_name, loaded, initialized)
入出力パラメータ:
[in] prog_name :STRING
[out] loaded :BOOLEAN
[out] initialized :BOOLEAN
%ENVIRONMENT Group :PBCORE
詳細:

 prog_name はプログラムである必要があります。ルーチンは使用できません。
 loaded はprog_name が現在メモリにロードされているならTRUEを返します。prog_name がロードされていないなら、
FALSEが返ります。
 initialized にはprog_name 中の変数のいずれかが初期化されているならTRUEが返ります。prog_name 中の全ての変数が未初
期化であるならFALSEが返ります。
 loaded 又はinitialized のいずれかがFALSEなら、LOADビルトインを使用してprog_name とその変数をロードして下さい。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.5節「ファイルとプログラムのリスト作成及び文字列操作」 (LIST_EX.KL)
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)

A.13.4 %LOCKGROUPトランスレータディレクティブ
目的:
このプログラム又はこのプログラムのルーチンを呼ぶ時にロックする動作グループを指定します。
構文:
%LOCKGROUP = n, n ,...
詳細:

 n はロックする動作グループの番号です。
 n は1から制御装置のグループ数の範囲です。
 プログラム又はルーチンを呼ぶとき、タスクは指定された全グループの動作制御権を既にロックしていないなら、ロック
しようとします。動作制御権を取得できないならタスクは一時停止します。
 もし%LOCKGROUPが指定されていないなら、全てのグループがロックされます。

 %NOLOCKGROUPディレクティブを使用して一つもグループをロックしないよう指示できます。

警告
制御装置に2つ以上の動作グループが定義されているなら、動作を実行するKARELプログラムを実行しないで下
さい。2つ以上の動作グループがある場合、全ての動作はTPプログラムから実行されねばなりません。さもない
と、ロボットが予期せぬ動作を行い、人を負傷させたり設備が損害を受ける可能性があります。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 226 of 412

参照:
%NOLOCKGROUPディレクティブビルトインプロシージャ

A.14 M

A.14.1 MIRRORビルトインファンクション
目的:
指定の位置変数のミラーイメージを決定します。
構文:
MIRROR (old_pos, mirror_frame, orientation_flag)
戻り値の型: XYZWPREXT
入出力パラメータ:
[in] old_pos :POSITION
[in] mirror_frame :POSITION
[in] orient_flag :BOOLEAN
%ENVIRONMENT Group :MIR
詳細:
 old_pos 及びmirror_frame は共に同じユーザ座標に対して定義されている必要があります。

 old_posに指定した位置のミラーイメージが生成されます。
 mirror_frame に指定した値のxz平面越しにイメージが生成されます。
 orient_flag がTRUEならば、old_pos の位置成分と姿勢成分の両方のミラーイメージが生成されます。FALSEならば、位置
のみがミラーイメージ作成の対象となります。ミラーイメージの位置の姿勢はold_posの姿勢と同じになります。
 返されるミラーイメージ位置が到達可能な位置で有ることは保証されていません。なぜならミラーイメージの位置はロ
ボットの動作範囲の外にある可能性があるからです。
参照:
適切なアプリケーションの取扱説明書の「ミラーシフト」の節

A.14.2 MODIFY_QUEUE ビルトインプロシージャ


目的:
キューのエントリの値を置き換えます。
構文:
MODIFY_QUEUE(value, sequence_no, queue_t, queue_data, status)
入出力パラメータ:
[in] value :INTEGER
[in] sequence_no :INTEGER
[in,out] queue_t :QUEUE_TYPE
[in,out] queue_data :ARRAY OF INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBQMGR
詳細:

 value にキューのエントリの修正後の値を指定します。
 sequence_no に値を修正するエントリの通し番号を指定します。
 queue_t はキューとして使う変数です。
 queue_data はキュー中のデータを保持する配列です。この配列の長さがキューの最大エントリ数を決定します。
 status : 指定の通し番号がキューに無い場合、61003、"不正なシークエンスナンバーーです"が返ります。
参照:
COPY_QUEUE, GET_QUEUE, DELETE_QUEUE ビルトインプロシージャ12.7節「キューを利用したタスク間通信」
例:
以下の例では、ルーチンupdate_queueがキュー( queue 及びqueue_data の指定のエントリ( sequence_no )の値を新しい値( value )に
置き換えます。

例A.14.2 MODIFY_QUEUE ビルトインプロシージャ

PROGRAM mod_que
%NOLOCKGROUP

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 227 of 412

%ENVIRONMENT PBQMGR
ROUTINE update_queue(value: INTEGER;
sequence_no: INTEGER;
queue_t: QUEUE_TYPE;
queue_data: ARRAY OF INTEGER)
VAR
status: INTEGER
BEGIN
MODIFY_QUEUE(value, sequence_no, queue_t, queue_data, status)
return
END update_queue
BEGIN
END mod_que

A.14.3 MOTION_CTLビルトインファンクション
目的:
指定グループの動作制御権をKARELプログラムが持っているかを突き止めます。
構文:
MOTION_CTL<(group_mask)>
戻り値の型: BOOLEAN
入出力パラメータ:
[in] group_mask :INTEGER
%ENVIRONMENT Group :MOTN
詳細:
 group_mask が省略されると、プログラムのデフォルトのグループマスクが仮定されます。

 デフォルトのgroup_mask は%LOCKGROUP及び%NOLOCKGROUPディレクティブで決定されます。
 group_mask は望みのグループに対応するビットを設定することで指定します。

表A.14.3 Group_maskの設定
グループ 10進数 ビット
グループ1 1 1
グループ2 2 2
グループ3 4 3

複数のグループを指定するには、望みのグループに対応する、表A.14.3に示されている十進数の値を選択して下さい。その
後それらをOR演算子でつなげて下さい。例えばグループ1,3を指定するには"1 OR 4"を入力して下さい。

警告
制御装置に2つ以上の動作グループが定義されているなら、動作を実行するKARELプログラムを実行しないで下
さい。2つ以上の動作グループがある場合、全ての動作はTPプログラムから実行されねばなりません。さもない
と、ロボットが予期せぬ動作を行い、人を負傷させたり設備が損害を受ける可能性があります。

 KARELプログラムが指定されたグループの動作制御権を持っているとTRUEが返ります。

A.14.4 MOUNT_DEVビルトインプロシージャ
目的:
指定のデバイスをマウントします。
構文:
MOUNT_DEV (device, status)
入出力パラメータ:
[in] device : STRING
[out] status :INTEGER
%ENVIRONMENT Group :FDEV
詳細:
 device にマウントする装置を指定します。

 status は処理のステータスです。0でないならば、エラーが発生しました。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 228 of 412

参照:
DISMOUNT_DEV及びFORMAT_DEV。
例:
詳細なプログラム例に関してはB.6節「ファイルとファイルデバイスのビルトインの使用」 (FILE_EX.KL)を参照して下さい。

A.14.5 MOVE_FILEビルトインプロシージャ
目的:
指定のファイルをあるファイルデバイスから別のデバイスに移動します。
構文:
MOVE_FILE (file_spec, status)
入出力パラメータ:
[in] file_spec : string
[out] status : integer
%ENVIRONMENT Group :FDEV
詳細:
 file_spec に移動するファイルのファイルデバイス、ファイル名、ファイルタイプを指定します。FR又はRAMディスクに存
在べきです。

 file_spec がFR上のファイルならば、そのファイルはRAMディスクに移動します。逆も同様です。
 ファイル名全体、ファイル名の最初の部分、ファイル名の最後の部分、ファイル名の最初と最後の部分をワイルドカード
文字(*)を使って置き換えることができます。ファイルタイプでもワイルドカードを同様に使用可能です。fiel_specが複数の
ファイルを指定するなら、それらは全てもう一方のディスクに移動します。
 status は処理のステータスです。0でないなら、エラーが発生しました。
例:
以下の例では、RAMディスク上の全ての.KLファイルがFR:ディスクに移動されます。

例A.14.5 MOVE_FILEビルトインプロシージャ
PROGRAM movefiles
%NOLOCKGROUP
%ENVIRONMENT FDEV
VAR
status: INTEGER
BEGIN
MOVE_FILE('RD:\*.KL', status)
IF status <> 0 THEN
POST_ERR(status, '', 0, 0)
ENDIF
END movefiles

A.14.6 MSG_CONNECTビルトインプロシージャ
目的:
クライアントもしくはサーバのポートをソケットメッセージで使用するために、他のPCのポートに接続します。
構文:
MSG_CONNECT (tag, status)
入出力パラメータ:
[in] tag :STRING
[out] status :INTEGER
%ENVIRONMENT Group :FLBT
詳細:
 tagはクライアントポート(C1:-C8)もしくはサーバポート(S1:S8)の名前です。

 statusは処理のステータスです。0でないならば、エラーが発生しました。
参照:
「FANUC Robot series R-30iA/R-30iA Mate 制御装置 イーサネット機能 取扱説明書」(B-82974JA/01)のソケットメッセージ

例:
以下の例はS8:に接続し、メッセージを読みます。メッセージは教示操作盤の画面上に表示されます。

例A.14.6 MSG_CONNECTビルトインプロシージャ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 229 of 412

PROGRAM tcpserv8
VAR
file_var : FILE
tmp_int : INTEGER
tmp_int1 : INTEGER
tmp_str : string [128]
tmp_str1 : string [128]
status : integer
entry : integer
BEGIN
SET_FILE_ATR (file_var, ATR_IA)
-- Set up S8 server tag
DISMOUNT_DEV('S8:',status)
MOUNT_DEV('S8:',status)
write (' Mount Status = ',status,cr)
status = 0
IF status = 0 THEN
-- Connect the tag
write ('Connecting ..',cr)
MSG_CONNECT ('S8:',status)
write ('Connect Status = ',status,cr)
IF status < > 0 THEN
MSG_DISCO('S8:',status)
write (' Connecting..',cr)
MSG_CONNECT('S8:',status)
write (' Connect Status = ',status,cr)
ENDIF
IF status = 0 THEN
-- OPEN S8:
write ('Opening',cr)
OPEN FILE file_var ('rw','S8:')
status = io_status(file_var)
FOR tmp_int 1 TO 1000 DO
write ('Reading',cr)
BYTES_AHEAD(file_var, entry, status)
-- Read 10 bytes
READ file_var (tmp_str::10)
status = i/o_status(file_var)
--Write 10 bytes
write (tmp_str::10,cr)
status = io_status(file_var)
ENDFOR
CLOSE FILE file_var
write ('Disconnecting..',cr)
MSG_DISCO('S8:',status)
write ('Done.',cr)
ENDIF
ENDIF
END tcpserv8

A.14.7 MSG_DISCOビルトインプロシージャ
目的:
クライアント又はサーバポートと他のコンピュータとの接続を切断します。
構文:
MSG_DISCO (tag, status)
入出力パラメータ:
[in] tag :STRING
[out] status :INTEGER

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 230 of 412

%ENVIRONMENT Group :FLBT


詳細:
 tagはクライアントポート(C1:-C8)もしくはサーバポート(S1:S8)の名前です。

 statusは処理のステータスです。0でないならば、エラーが発生しました。
参照:
「FANUC Robot series R-30iA/R-30iA Mate 制御装置 イーサネット機能 取扱説明書」(B-82974JA/01)のソケットメッセージ
例:
例に関してはMSG_CONNECTビルトインプロシージャを参照して下さい。

A.14.8 MSG_PINGビルトインプロシージャ
構文:
MSG_PING (host name, status)
入出力パラメータ:
[in] host name :STRING
[out] status :INTEGER
%ENVIRONMENT Group :FLBT
詳細:
 host nameはチェックを行うホストの名前です。ホストエントリーテーブルにそのホストが存在している必要があります(又
はDNSオプションがロードされており、設定されている必要があります)。
 statusは処理のステータスです。0でないならば、エラーが発生しました。
参照:
「FANUC Robot series R-30iA/R-30iA Mate 制御装置 イーサネット機能 取扱説明書」(B-82974JA/01)のPING。
例:
以下の例はホスト名"fido"にPINGのチェックを行います。結果を教示操作盤上に書きます。

例A.14.8 MSG_PINGビルトインプロシージャ
PROGRAM pingtest
VAR
Tmp_int : INTEGER
Status : integer
BEGIN
WRITE('pinging..',cr)
MSG_PING('fido',status)
WRITE('ping Status = ',status,cr)
END pingtest

A.15 N

A.15.1 NOABORTアクション
目的:
プログラムが外部のエラー発生により終了しないようにします。
詳細:

 NOABORTは通常ERROR[n]に対応します。
 プログラムが自分自身で終了した場合(即ちABORT文、実行時エラー)、NOABORTアクションは無視され、プログラム実
行は終了します。
例:
以下の例はグローバルモニタを使用してエラー番号11038、「パルスカウント不一致」を検査しています。このエラーが発生す
ると、NOABORTアクションがプログラムが終了するのを防ぎます。

例A.15.1 NOABORTアクション
PROGRAM noaborta
%NOLOCKGROUP
BEGIN
--Pulse Mismatch condition handler
CONDITION[801]:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 231 of 412

WHEN ERROR[11038] DO
NOABORT
ENDCONDITION
ENABLE CONDITION[801]
END noaborta

A.15.2 %NOABORTトランスレータディレクティブ
目的:
プログラム終了に関するマスクを設定します
構文:
%NOABORT = ERROR + COMMAND
詳細:
 ERROR及びCOMMANDは以下のように定義されます。

 ERROR : アラーム重度のABORTを無視します。
 COMMAND : ABORTコマンドを無視します。

 ERRORとCOMMANDの任意の組み合わせが指定可能です。

 プログラムが自分自身で終了した場合(例えば、ABORT文を実行、実行時エラー)、%NOABORTディレクティブは無視さ
れ、プログラム実行が終了します。
 このディレクティブは%NOLOCKGROUPを持つプログラムでのみ有効です。プログラムが動作制御権を持っていると、%
NOABORTディレクティブは無視され、プログラム実行は終了します。

A.15.3 %NOBUSYLAMPトランスレータディレクティブ
目的:
プログラム実行中にビジーランプがOFFとなります。
構文:
%NOBUSYLAMP
詳細:
 タスクの実行中にSET_TSK_ATTRビルトインを使用して、busy lampを設定可能です。

A.15.4 %NOLOCKGROUPトランスレータディレクティブ
目的:
このプログラムを呼ぶ時、このプログラム中で定義されているルーチンを呼ぶ時に動作グループをロックする必要が無いこと
の指定です。
構文:
%NOLOCKGROUP
詳細:

 プログラム又はルーチンが呼ばれるとき、タスクは動作制御権を取得しようとしません。
 %NOLOCKGROUPが使用されないなら、プログラム又はルーチンが呼ばれる時に全てのグループがロックされ、タスクは
動作制御権を取得しようとします。動作制御権を取得できないならタスクは一時停止します。
 タスクはプログラム又はルーチンを実行している間、動作制御権をキープします。プログラム又はルーチンから抜ける
時、タスクは全ての動作グループを自動的にアンロックします。
 タスクが実行中又は停止中の動作を持っているなら、タスクの実行は動作が完了するまでホールドされます。停止された
動作は再開されるか、完了するか、キャンセルされなくてはなりません。
 動作制御権を持っているプログラムが、%NOLOCKGROUPのプログラム又はルーチンを呼ぶならば、そのプログラムは動
作制御権を持ち続けます。必要無いにもかかわらずです。
 %NOLOCKGROUPディレクティブを持つプログラム内で動作文に出くわしたならば、タスクは必要な全グループの動作制
御権を取得しようとします(持っていなければ)。動作制御権を取得できないならタスクは一時停止します。

注意
KARELのタスクが開始されると、$GROUPの多くのフィールドがデフォルト値に初期化されます。%
NOLOCKGROUPが指定されると、この初期化は発生しません。それ故に動作が出されると、これらのフィール
ドの現在値が使用されます。これは予期せぬ動作を引き起こす可能性があります。

警告

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 232 of 412

制御装置に2つ以上の動作グループが定義されているなら、動作を実行するKARELプログラムを実行しないで下
さい。2つ以上の動作グループがある場合、全ての動作はTPプログラムから実行されねばなりません。さもない
と、ロボットが予期せぬ動作を行い、人を負傷させたり設備が損害を受ける可能性があります。

参照:
%LOCKGROUPトランスレータディレクティブ
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.1節「デフォルトデバイスにデータをセーブする」 (SAVE_VR.KL)
B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)
B.8節「動的に表示されている変数の操作」 (CHG_DATA.KL)
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)
B.10節「DISCTRL_ALPHAビルトインの使用」 (DCALP_EX.KL)

A.15.5 NOMESSAGEアクション
目的:
エラーメッセージの表示と記録を抑制します。
構文:
NOMESSAGE
詳細:

 対応するコンディションで指定したエラー番号に限って、エラーメッセージの表示と記録が抑制されます。
 全てのエラーメッセージを抑制するにはワイルドカード(*)を使用して下さい。
 NOMESSAGEが使用されていても、ABORTエラーのメッセージは表示、記録されます。

A.15.6 NOPAUSEアクション
目的:
プログラム実行が一時停止された時に一時停止を妨げます。
構文:
NOPAUSE
詳細:

 NOPAUSEアクションは通常ERROR[n]又はPAUSEコンディションに対応づけられます。
 プログラムが自分自身で一時停止した場合、NOPAUSEアクションは無視され、プログラム実行は一時停止します。
例:
以下の例はグローバルモニタを使ってエラー番号12311を検査します。このエラーが発生すると、NOPAUSEアクションがプロ
グラム実行の一時停止を防ぎます。そしてNOMESSAGEアクションは通常エラー12311に対して表示されるメッセージを抑制し
ます。このことにより、ルーチンuninit_error は妨げられること無く実行可能になっています。
例A.15.6 NOPAUSEアクション
ROUTINE uninit_error
BEGIN
WRITE ('Uninitialized operand',CR)
WRITE ('Use KCL> SET VAR to initialize operand',CR)
WRITE ('Press Resume at Test/Run screen to ',cr)
WRITE ('continue program',cr)
PAUSE --pauses program (undoes NOPAUSE action)
END uninit_error
CONDITION[1]:
WHEN ERROR[12311] DO
NOPAUSE, NOMESSAGE, uninit_error
ENDCONDITION

A.15.7 %NOPAUSE トランスレータディレクティブ


目的:
一時停止に関するマスクを指定します。
構文:
%NOPAUSE = ERROR + COMMAND + TPENABLE

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 233 of 412

詳細:
 マスクで使用するBitは以下の通りです。

 ERROR: PAUSE重度のエラーを無視します。
 COMMAND : PAUSEコマンドを無視します。
 TPENABLE : TPが有効になった時の一時停止要求を無視します。
 ERROR、COMMAND及びTPENABLEの任意の組み合わせが指定可能です。

 プログラムが自分自身で一時停止した場合、NOPAUSEディレクティブは無視され、プログラム実行は一時停止します。
 このディレクティブは%NOLOCKGROUPを持つプログラムでのみ有効です。プログラムが動作制御権を持っていると、%
NOPAUSEディレクティブは無視され、プログラム実行は一時停止します。

A.15.8 %NOPAUSESHFTトランスレータディレクティブ
目的:
教示操作盤のシフトキーが離されても一時停止しない指定です。
構文:
%NOPAUSESHFT
詳細:
 タスクの実行中にSET_TSK_ATTRビルトインを使用して、この属性を設定可能です。

A.16 O

A.16.1 OPEN FILE文


目的:
データファイル又は通信ポートをファイル変数と関連付けます。
構文:
OPEN FILE file_var ( usage_string, file_string)
ここで:
file_var : FILE
usage_string : STRING
file_string : STRING
詳細:

 file_var は静的変数である必要があります。他のOPEN FILE文によって既に使用されている変数であってはなりません。
 usage_string は以下の文字列から構成されます。
`RO' :Read only
`RW' :Read write
`AP' :Append
`UD' :Update
 file_string にオープンする対象を指定します。データファイル名及びファイルタイプ、ウィンドウ又はキーボード、または
通信ポートです。

 SET_FILE_ATRビルトインルーチンを使用してファイルの属性を設定可能です。
 プログラムが終了するとオープンされたファイルはクローズされます。プログラムが一時停止したときはファイルはク
ローズされません。
 IO_STATUSビルトインファンクションを使ってオープンが成功したか否か確認して下さい。
参照:
IO_STATUSビルトインファンクション、SET_FILE_ATRビルトインプロシージャ、7章「ファイル入出力操作」、8章「ファイ
ルシステム」、構文の情報に関しては付録E「文法図」。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)

A.16.2 OPEN HAND 文


目的:
ロボットのハンドを開く
構文:
OPEN HAND hand_num

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 234 of 412

ここで:
hand_num : INTEGERの式
詳細:
 この文の実際の効果はI/OシステムでHAND信号がどのように設定されているかに依存します。11章「入出力システム」を
参照して下さい。

 hand_num は1から2の範囲の値で無ければなりません。さもないと、プログラムはエラーで終了します。
 hand_num が範囲内であってもハンドが接続されていないなら、この文は効果がありません。
 hand_num が範囲内にあっても、その値で表現されるHAND信号が割り付けられていないなら、プログラムはエラーで終了
します。
参照:
付録E「文法図」:構文上の情報があります。
例:
以下の例はTCPをp2 の位置に移動し、INTEGER型変数hand_num で指定のハンドを開きます。

例A.16.2 OPEN HAND 文


OPEN HAND hand_num

A.16.3 OPEN_TPEビルトインプロシージャ
目的:
指定のTPプログラムをオープンします。
構文:
OPEN_TPE(prog_name, open_mode, reject_mode, open_id, status)
入出力パラメータ:
[in] prog_name :STRING
[in] open_mode :INTEGER
[in] reject_mode :INTEGER
[out] open_id :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:

 prog_name にオープンするTPプログラム名を指定します。prog_name は全て大文字である必要があります。
 prog_name を実行する前にCLOSE_TPEでprog_nameをクローズする必要があります。
 open_mode プログラムへのアクセスを決定するコードです。以下のコードが定義されています。
0 : 無し
TPE_RDACC : 読み取り専用
TPE_RWACC : 読み書き可能
 reject_mode でプログラムに対するリジェクトコードを決定します。リジェクトコードを持つプログラムは他のプログラム
によってオープンすることができません。リジェクトコードは以下の通り定義されています。
TPE_NOREJ : 無し
TPE_RDREJ : 読み取り拒否
TPE_WRTREJ : 書き込み拒否
TPE_RWREJ : 読み書き拒否
TPE_ALLREJ : 全て拒否

 open_id はオープンしたプログラムのidを示します。
 status は処理のステータスです。0でないならば、エラーが発生しました。
 KARELプログラムが終了すると全てのオープンしたプログラムは自動的にクローズされ、通常の状態となります。
参照:
CREATE_TPEビルトインプロシージャ、COPY_TPEビルトインプロシージャ、AVL_POS_NUMビルトインプロシージャ。
例:
詳細なプログラム例に関してはB.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)を参照して下さい。

A.16.4 ORDビルトインファンクション
目的:
引数のSTRING中の文字に相当する数値のASCIIコードを返します。文字の指定は引数のindexで行います。
構文:
ORD(str, str_index)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 235 of 412

戻り値の型: INTEGER
入出力パラメータ:
[in] str :STRING
[in] str_index :INTEGER
%ENVIRONMENT Group :SYSTEM
詳細:

 戻り値は指定された文字のASCIIコードの数値です。
 str_index は引数str 中の文字の位置をindexで指定します。1は最初の文字を指示します。
 str_index が1より小さいか、str の現在の長さより大きいならば、プログラムはエラーで一時停止します。
参照:
付録D「文字コード」
例:
詳細なプログラム例に関してはB.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)を参照して下さい。

A.16.5 ORIENTビルトインファンクション
目的:
引数で指定されたPOSITIONのY軸(orient vector)を示す単位ベクトルを返します。
構文:
ORIENT(posn)
戻り値の型: VECTOR
入出力パラメータ:
[in] posn : POSITION
%ENVIRONMENT Group :VECTR
詳細:

 このビルトインを使用する代わりに、POSITIONのOrient Vectorを直接アクセスできます。
 戻り値はposn のorient vectorです。
 Orient vectorはツール座標系のYプラスの方向です。

A.17 P

A.17.1 PAUSEアクション
目的:
実行中のタスクの実行を一時中断します。
構文:
PAUSE <PROGRAM[n]>
詳細:
 PAUSEアクションはタスクの実行を以下のように一時停止します。

 ファイルはオープンされたままになります。
 全ての接続されているタイマは増加し続けます。
 実行中の全てのPULSE文は実行を継続します。
 モニタで指定されたコンディションのスキャンは継続します。
 ルーチン呼び出しを除くアクションは完了されます。ルーチン呼び出しはプログラム再開時に行われます。

 PAUSEアクションにPROGRAM[n]節を続けることができます。ここでnは一時停止するタスク番号です。
 GET_TSK_INFOを使ってタスク番号を手に入れて下さい。
参照:
UNPAUSEアクション

A.17.2 PAUSEコンディション
目的:
プログラム実行の一時停止を監視します。
構文:
PAUSE < PROGRAM [n] >
詳細:
 PAUSEコンディションはプログラムが一時停止した時に成立します。例えばエラー、PAUSE文、又はPAUSEアクションに
よってです。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 236 of 412

 もしPAUSEコンディションに対応するアクションの一つがルーチン呼び出しならば、ルーチンの実行を可能にするには
NOPAUSEアクションを指定する必要があります。
また呼ばれるルーチンはPAUSE文を含む必要があります。元々の一時停止の原因をシステムが完全に処理可能とするため
です。

 PAUSEコンディションにPROGRAM[n]節を続けることができます。ここでnは一時停止されるタスク番号です。
 GET_TSK_INFOを使ってタスク番号を手に入れて下さい。
例:
以下の例はグローバルモニタでPAUSEコンディションをスキャンしています。成立すると、DOUT[1]がONになります。
ENABLEはモニタを再度有効にします。

例A.17.2 PAUSEコンディション
CONDITION[1]:
WHEN PAUSE DO
DOUT[1] = TRUE
ENABLE CONDITION[1]
ENDCONDITION

A.17.3 PAUSE文
目的:
KARELプログラムの実行を一時中断します。
構文:
PAUSE
詳細:
 PAUSE文はプログラム実行を以下のように中断します。

 ファイルはオープンされたままになります。
 全ての接続されているタイマは増加し続けます。
 実行中の全てのPULSE文は実行を継続します。
 モニタで指定されたコンディションのスキャンは継続します。
 あらゆるアクション(ルーチン呼び出しを除く)が完了されます。ルーチン呼び出しはプログラム再開時に行われます。
参照:
付録E「文法図」:構文の情報があります。
例:
DIN[1]がTRUEならば、以下の例はPAUSE文を使用してKARELプログラムを一時停止します。メッセージ「Program is paused.
Press RESUME function key to continue」がユーザ画面に表示されます。

例A.17.3 PAUSE文
PROGRAM pauses03
%NOLOCKGROUP
BEGIN
IF DIN[1] THEN
WRITE ('Program is Paused. ',CR)
WRITE ('Press RESUME function key to continue', CR)
PAUSE
ENDIF
END pauses03

A.17.4 PAUSE_TASKビルトインプロシージャ
目的:
指定された実行中のタスクを一時停止します。
構文:
PAUSE_TASK(task_name, force_sw, stop_mtn_sw, status)
入出力パラメータ:
[in] task_name :STRING
[in] force_sw :BOOLEAN
[in] stop_mtn_sw :BOOLEAN
[out] status :INTEGER
%ENVIRONMENT Group :MULTI

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 237 of 412

詳細:
 task_name は一時停止するタスク名です。task_nameが'*ALL*'ならば、「中断無視」属性を持っているタスクを除く、全て
のタスクが一時停止されます。
 force_sw はタスクが「中断無視」属性であっても一時停止すべきかを指定します。task_nameが'*ALL*'ならば、このパラ
メータは無視されます。

 stop_mtn_sw に指定されたタスクに属する全ての動作グループを停止するか否かを指定します。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
RUN_TASK、CONT_TASK、ABORT_TASKビルトインプロシージャ、12章「マルチタスク」
例:
以下の例はユーザが指定したタスクとあらゆる動作を一時停止します。更なる例については12章「マルチタスク」を参照して
下さい。
例A.17.4 PAUSE_TASKビルトインプロシージャ
PROGRAM pause_ex
%ENVIRONMENT MULTI
VAR
task_str: STRING[12]
status : INTEGER
BEGIN
WRITE('Enter task name to pause:')
READ(task_str)
PAUSE_TASK(task_str, TRUE, TRUE, status)
END pause_ex

A.17.5 PEND_SEMA ビルトインプロシージャ


目的:
セマフォの値が0より大きくなるかmax_timeが経過するまで、タスクの実行を一時中断します。
構文:
PEND_SEMA(semaphore_no, max_time, time_out)
入出力パラメータ:
[in] semaphore_no :INTEGER
[in] max_time :INTEGER
[out] time_out :BOOLEAN
%ENVIRONMENT Group :MULTI
詳細:

 PEND_SEMA は指定のセマフォの値を減少させます。
 semaphore_no に使用するセマフォの番号を指定します。
 semaphore_no は1から制御装置で定義されたセマフォの数の範囲に無ければなりません。
 max_time に有効期限(待ち時間)をmsecで指定します。max_timeが-1ならば、必要なら永遠に待機します。
 プログラム実行の継続時に、もしセマフォが0以外になる前にmax_timeが経過していたならtime_out にTRUEが設定されま
す。そうでないならFALSEが設定されます。
参照:
POST_SEMA, CLEAR_SEMAビルトインプロシージャ、SEMA_COUNT ビルトインファンクション、12章「マルチタスク」
例:
次の章の例を見て下さい:12章「マルチタスク」

A.17.6 PIPE_CONFIG ビルトインプロシージャ


目的:
特殊な用途向けにパイプを設定します。
構文:
PIPE_CONFIG(pipe_name, cmos_flag, n_sectors, record_size, form_dict, form_ele, status)
入出力パラメータ:
[in] pipe_name :STRING
[in] cmos_flag :BOOLEAN
[in] n_sectors :INTEGER
[in] record_size :INTEGER
[in] form_dict :STRING

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 238 of 412

[in] form_ele :INTEGER


[out] status :INTEGER
%ENVIRONMENT Group :FLBT
詳細:
 pipe_nameはパイプファイルの名称です。 ファイルが存在しないならば、生成されます。

 CMOS_flagをTRUEにするとパイプのデータがCMOSに置かれます。 デフォルトではパイプのデータはDRAMにありま
す。

 n_sectorsはパイプにアロケートされる1024バイトのセクションの数です。 デフォルトは8です。
 record_sizeはパイプ中のバイナリレコードのサイズです。 0とするとパイプはASCIIとして扱われます。
 form_dictは内部開発者向けです。’’として下さい。
 form_eleは内部開発者向けです。0として下さい。
 statusは試みた操作の状態を説明します。 0で無いならば、エラーが発生しました。

参照:
8章「ファイルシステム」

A.17.7 POP_KEY_RDビルトインプロシージャ
目的:
キーボード装置からの入力を再開する
構文:
POP_KEY_RD(key_dev_name, pop_index, status)
入出力パラメータ:
[in] key_dev_name :STRING
[in] pop_index :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:

 指定されたキーボード装置上の中断されたread要求を再開します。
 一時中断された時にアクティブなread要求がなかったならば、pop_key_rdは入力を再開しません。これはエラーではありま
せん。
 key_dev_name は定義済みのキーボード装置の1つとして下さい。
'TPKB' :教示操作盤のキーボード装置
'CRKB' :CRTキーボード装置

 pop_index はPUSH_KEY_RDから返されます。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
PUSH_KEY_RD、READ_KBビルトイン
例:
READ_KBビルトインプロシージャの例を参照して下さい。

A.17.8 Port_Idアクション
目的:
式の評価結果をポート配列の要素 (DOUT[1]等)に設定します
構文:
port_id[n] = expression
ここで:
port_id :出力のポート配列 (例えばデジタル出力信号ならDOUT)
n :INTEGER
expression :変数、定数、又はEVAL節
詳細:

 expression の値がポート配列の要素n に代入されます。
 ポート配列はKARELプログラムで書き込み可能な出力のポート配列として下さい。2章「言語の要素」を参照して下さ
い。

 expression はユーザ定義の静的変数、KARELで読めるシステム変数、又はEVAL節を使用可能です。
 expression が変数ならば、アクションが発生する時点での変数の値が使用されます。モニタを定義した時の値ではありませ
ん。
 expression がEVAL節ならば、それはモニタを定義した時に評価され、その値がアクション実行時に代入されます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 239 of 412


 式はport_id の型と同じである必要があります。
 ポート配列の要素をポート配列の要素に直接代入できません。
 モニタが有効になった時にexpressionが未初期化変数ならば、プログラムはエラーで終了します。
参照:
6章「コンディションハンドラ」、7章「ファイル入出力操作」、関係コンディション、付録A「KAREL言語アルファベット順
解説」

A.17.9 Port_Idコンディション
目的:
デジタルポートの信号を監視します。
構文:
<NOT> port_id[n] < + | - >
ここで:
port_id :ポート配列(例えばデジタル出力信号ならDOUT)
n :INTEGER
詳細:

 n に監視するポート配列の信号を指定します。
 port_id はReadアクセスのある、定義済みのBOOLEAN型のポート配列の一つとして下さい。2章「言語の要素」を参照して
下さい。

 イベントコンディションに関しては、オプションの内+又は-付のみが使用されます。
 状態コンディションではオプションのうちNOTのみが使用されます。
参照:
6章「コンディションハンドラ」、7章「ファイル入出力操作」、関係コンディション、付録A「KAREL言語アルファベット順
解説」

A.17.10 POSビルトインファンクション
目的:
指定された位置の引数(x,y,z)、姿勢の引数(w,p,r)、及び形態の引数(c)から構成されるXYZWPR型を返します。
構文:
POS(x, y, z, w, p, r, c)
戻り値の型: XYZWPR
入出力パラメータ:
[in] x, y, z, w, p, and r :REAL
[in] c :CONFIG
%ENVIRONMENT Group :SYStem
詳細:
 c は制御装置に接続されているロボットで有効な形態で無ければなりません。CNV_STR_CONFを使用してSTRINGを
CONFIG型の変数に変換可能です。
 x 、y 、そしてz は位置の直交値です(単位はmm)。各引数は±10000000 mm (±10 km)の範囲内である必要があります。さも
なくばプログラムはエラーで一時停止します。
 w 、p 、そしてr はヨー、ピッチ、ロールの姿勢の値です(単位は度)。各引数は±180度の範囲にある必要があります。さも
なくばプログラムはエラーで一時停止します。

A.17.11 POS2JOINTビルトインファンクション
目的:
このルーチンは逆変換ルーチンを呼んで直交位置(in_pos)を各軸位置(out_jnt)に変換するために用いられます。
構文 POS2JOINT (ref_jnt, in_pos, uframe, utool, config_ref, wjnt_cfg, ext_ang, out_jnt, and status).
入出力パラメータ:
[in] ref_jnt :JOINTPOS
[in] in_pos :POSITION
[in] uframe :POSITION
[in] utool :POSITION
[in] config_ref :INTEGER
[in] wjnt_cfg :CONFIG
[in] ext_ang :ARRAY OF REAL
[out] out_jnt :JOINTPOS

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 240 of 412

[out] status :INTEGER


%ENVIRONMENT Group :MOTN
詳細:

 入力ref_jnt はロボットが現在の位置に移動する直前の位置を表す、参照用の軸角度です。
 入力in_pos は各軸位置に変換するロボットの直交位置です。
 入力uframe は直交位置のためのユーザ座標系です。
 入力utool は対応するツール座標系です。
 入力config_ref は望みのsolutionの種類を表すINTEGERです。以下に挙げる値が有効です。また、カッコ内の定義済みの定
数を使用可能です。その値を必要に応じて加えることが可能です。一つの例としては、config_ref = HALF_SOLN +
CONFIG_TCPです。
 0 :(FULL_SOLN) = デフォルト
 1 : (HALF_SOLN) = Wrist joint (XYZ456). WPRを計算/使用しません。
 2 :(CONFIG_TCP) =手首軸の形態(up/down)は姿勢固定とします。
 4 :(APPROX_SOLN) = Approximate solution. 使用すると計算時間が減少するロボットがあります。
 8 :(NO_TURNS) = 手首軸の回転数を無視します。軸4、5及び6に関して最短のパスを使用します(ref_jntを使用)
 16 :(NO_M_TURNS) = 基本軸の回転数(J1のみ)を無視します。最短のパスを使用します。

 入力wjnt_cfg は手首軸の形態です。config_ref がHALF_SOLNに相当する時に入力される必要があります。
 入力ext_ang には(存在すれば)付加軸の角度を入れます。
 出力out_jnt は直交位置に相当する各軸位置です。
 出力status は処理のステータスです。0以外ならばエラーが発生しました。

A.17.12 POS_REG_TYPEビルトインプロシージャ
目的:
指定された位置レジスタの位置の表現形式を返します。
構文:
POS_REG_TYPE (register_no, group_no, posn_type, num_axes, status)
入出力パラメータ:
[in] register : INTEGER
[in] group_no : INTEGER
[out] posn_type : INTEGER
[out] num_axes : INTEGER
[out] status : INTEGER
%ENVIRONMENT Group :REGOPE
詳細:

 register_no で位置レジスタを指定します。
 group_noは1から総グループ数の間とする必要があります。
 posn_type に位置の種類が返ります。posn_typeは以下のように定義されます。
 1 :POSITION
 2 :XYZWPR
 6 :XYZWPREXT
 9 :JOINTPOS
 num_axes には位置のタイプがJOINTPOSの場合に軸数が返ります。位置のタイプがXYZWPREXTならば、num_axesには付
加軸の数のみが返ります。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
GET_POS_REG、GET_JPOS_REG、SET_POS_REG、SET_JPOS_REGビルトインプロシージャ
例:
以下の例はレジスタの位置の種類を突き止めます。そして適切なビルトインを使用してデータを取得します。

例A.17.12 POS_REG_TYPEビルトインプロシージャ
PROGRAM posregty
%NOLOCKGROUP
%ENVIRONMENT REGOPE
VAR
entry: INTEGER
group_no: INTEGER
jpos: JOINTPOS
maxpregnum: integer

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 241 of 412

num_axes: INTEGER
posn_type: INTEGER
register_no: INTEGER
status: INTEGER
xyz: XYZWPR
xyzext: XYZWPREXT
BEGIN
group_no = 1
GET_VAR(entry, '*POSREG*' ,'$MAXPREGNUM', maxpregnum, status)
-- Loop for each register
FOR register_no = 1 to 10 DO
-- Get the position register type
POS_REG_TYPE(register_no, group_no, posn_type, num_axes, status)
-- Get the position register
WRITE('PR[', register_no, '] of type ', posn_type, CR)
SELECT posn_type OF
CASE (2):
xyz = GET_POS_REG(register_no, status)
CASE (6):
xyzext = GET_POS_REG(register_no, status)
CASE (9):
jpos = GET_JPOS_REG(register_no, status)
ELSE:
ENDSELECT
ENDFOR
END posregty

A.17.13 POSITIONデータ型
目的:
変数、ファンクションの戻り値の型、ルーチンのパラメータをPOSITIONデータ型として定義します。
構文:
POSITION <IN GROUP[n]>
詳細:
 A POSITIONはnormal、orient、approachベクトルからなる行列、位置のベクトル、そして形態を示す文字列から構成されま
す。全体で56バイトです。
 形態の文字列は軸の配置と回転数を示します。これはロボットが特定の位置にある時のロボットの形態を記述していま
す。

 POSITIONは常に特定の座標系に関して参照されます。
 POSITIONデータ型は座標系を表現するために使用可能です。その場合形態は無視されます。
 相対位置演算子を使って座標系の変換が可能です。
 POSITIONは他の位置データ型に代入可能です。
 有効なPOSITIONの演算子は以下の通りです。
 相対位置演算子(:)
 近似演算子(>=<)
 POSITIONにGROUP[n]を続けることができます。ここでnはデータを使用する動作グループです。デフォルトは%
DEFGROUPで指定のグループか1です。
 POSITION変数の構成要素は例A.17.13の様な定義であるかのようにアクセス及び設定可能です。

例A.17.13 POSITION Data Type


POSITION = STRUCTURE
NORMAL: VECTOR -- read-only
ORIENT: VECTOR -- read-only
APPROACH: VECTOR -- read-only
LOCATION: VECTOR -- read-write
CONFIG_DATA: CONFIG -- read-write
ENDSTRUCTURE

参照:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 242 of 412

POS、UNPOSビルトインファンクション

A.17.14 POST_ERRビルトインプロシージャ
目的:
エラーコードとコーズコードをポストし、エラーをシステムに報告し、表示し、エラーの履歴を保存します。
構文:
POST_ERR(error_code, parameter, cause_code, severity)
入出力パラメータ:
[in] error_code :INTEGER
[in] parameter :STRING
[in] cause_code :INTEGER
[in] severity :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:

 error_code はポストするエラーコードです。
 parameter はerror_code のメッセージに%sが含まれていると、エラーメッセージに含まれます。必要ないならば、’’(空の文
字列)を入力して下さい。
 cause_code はコーズコードです。エラーの理由を示します。コーズコードを使用しない場合、0を使用可能です。
 error_code 及びcause_code は以下のフォーマットです。
ffccc (十進数)

ここで
ff はエラーのファシリティコードです。
ccc は指定のファシリティコード中のエラーコードです。
 severity は以下の通り定義されています。
0 : WARNING, タスクの実行には変化ありません。
1 : PAUSE, 全てのタスクとロボットの動作が停止します。
2 : ABORT, 全てのタスクが終了し、動作がキャンセルされます。
参照:
ERR_DATAビルトインプロシージャ、適切なアプリケーションの取扱説明書「アラームコード」
例:
詳細なプログラム例に関してはB.10節「DISCTRL_ALPHAビルトインの使用」 (DCALP_EX.KL)を参照して下さい。

A.17.15 POST_SEMA ビルトインプロシージャ


目的:
指示されたセマフォの値に1を加えます。
構文:
POST_SEMA(semaphore_no)
入出力パラメータ:
[in] semaphore_ no : INTEGER
%ENVIRONMENT Group : MULTI
詳細:

 semaphore_no で指示されたセマフォを1増やします。
 semaphore_no は1から制御装置で定義されたセマフォの数の範囲に無ければなりません。
参照:
PEND_SEMA, CLEAR_SEMA ビルトインプロシージャ, SEMA_COUNT ビルトインファンクション、12章「マルチタスク」,
例:
次の章の例を見て下さい:12章「マルチタスク」

A.17.16 PRINT_FILEビルトインプロシージャ
目的:
ASCIIファイルの内容をデフォルトのデバイスにプリントします。
構文:
PRINT_FILE(file_spec, nowait_sw, status)
入出力パラメータ:
[in] file_spec :STRING

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 243 of 412

[in] nowait_sw :BOOLEAN


[out] status :INTEGER
%ENVIRONMENT Group : FDEV
詳細:
 file_spec にプリントするファイルのファイルデバイス、ファイル名、ファイルタイプを指定します。

 もしnowait_sw がTRUEなら、コマンドを実行している間もプログラム実行は継続します。FALSEなら、コンディションハ
ンドラも含め、処理が終了するまでプログラムは停止します。もしもタイムクリティカルなモニタがあるなら、それは別
のタスクとして実行される別のプログラムに分離して下さい。


nowait_sw はこのリリースでは利用できません。FALSEに設定して下さい。

 status は処理のステータスです。0でないなら、エラーが発生しました。

A.17.17 %PRIORITYトランスレータディレクティブ
目的:
タスクのプライオリティを指定します。
構文:
%PRIORITY = n
詳細:
 n はプライオリティです。以下のように定義されます。

 1 から89 : 動作より低く、ユーザインタフェースより高い。
 90 から99 : ユーザインタフェースより低い

 値が小さい程、タスクのプライオリティは高いです。
 デフォルトのプライオリティは50です。指定されたプライオリティがどのようにシステムのプライオリティに変換される
かの詳細に関しては、12.3節「タスクスケジューリング」を参照して下さい。
 プライオリティはタスクの実行中にSET_TSK_ATTRビルトインで設定可能です。

A.17.18 PROG_BACKUPビルトインプロシージャ
目的:
指定したプログラムと、呼ばれているプログラムの全てをメモリから記憶装置に保存します。呼ばれているプログラムが別プ
ログラムを呼んでいるなら、それらも再帰的に保存されます。関連するプログラムの変数の保存も指定可能です。
構文:
PROG_BACKUP (file_spec, prog_type, max_size, write_prot, status)
Input/Output Parameters
[in] file_spec :STRING
[in] prog_type :INTEGER
[in] max_size: INTEGER
[in] write_prot: BOOLEAN
[out] status :INTEGER
%ENVIRONMENT Group: CORE
詳細:
 file_spec は保存する装置とプログラムを指定します。ファイルタイプが指定されると、それは無視されます。

 prog_type は保存するプログラムのタイプを指定します。有効なタイプは以下の通りです。
PBR_VRTYPE :VR - 変数を持つプログラム
PBR_MNTYPE :JB, PR, MR, TP
PBR_JBTYPE :JB - ジョブプログラムのみ
PBR_PRTYPE :PR - プロセスプログラムのみ
PBR_MRTYPE :MR - マクロプログラムのみ
PBR_PCTYPE : VR - VRを保存しますが、PCは保存しません。
PBR_ALLTYPE :全てのプログラム。VR, JB, PR, MR, TP
PBR_NVRTYPE :VRを除く全てのプログラム
PBR_NMRTYPE :JB, PR, TP (マクロを除く全てのTPプログラム)
 max_size はプログラムのバックアップに必要な最大のディスク容量を指定します。記憶装置で必要な容量が利用できない
場合、プログラムはバックアップされません。statusは2002、「デバイスに空きがありません」となります。
 プログラムのバックアップに必要なディスク容量がmax_sizeを超えているならば、バックアップは継続します。それでも

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 244 of 412

全てのプログラムを保存する程の容量がないならバックアップは失敗する可能性があります。statusには2002、「デバイスに空
きがありません」が返ります。この場合は部分的なバックアップが存在します。このエラーを防ぐには、max_sizeがこのエ
ラーを防げる程大きいことを確認して下さい。
 write_prot がTRUEならば、ライトプロテクトされているプログラムも保存する指定です。FALSEならライトプロテクトさ
れているプログラムは保存されません。
 status は処理のステータスです。0でないなら、エラーが発生しました。
 エラーが発生しても、システムはループ処理を継続して可能な限り多くのプログラムを処理しようとします。例えば、8個
の内1個のプログラムが無いなら、他の7個は保存されます。この場合、「指定したプログラムは存在しません」が返りま
す。この場合、各プログラムについて、エラーにプログラム名が入った形でエラーがポストされます。コーズコードはsave
のルーチンから返された任意のコードとなります。
 記憶装置のサブディレクトリが指定されたなら、それが存在しない場合は作成されます。全てのプログラムがそのサブ
ディレクトリにセーブされます。
 ファイルが既に存在し、かつ変更されていないなら、上書されません。
 ファイルが既に存在し、かつプログラムが変更されているなら、上書されます。エラーは返りません。
 呼ばれているプログラムと同じ名前のKAREL又はTPプログラムがメモリ中に存在する必要があります。さもないとVRが
セーブされません。
 PROG_BACKUP、PROG_CLEAR、及びPROG_RESTOREビルトインはマクロを除き、全てのプログラムへの参照を考慮し
ます。これは以下の文でのプログラムの参照を含みます。CALL、RUN、ERROR_PROG、RESUME_PROG、MONITOR。

例:
以下の例はFR:のGMX_211サブディレクトリに、ANS00003を適切な拡張子でセーブします。ANS0003から再帰的に呼ばれてい
る全プログラムを、プログラムのタイプによらずセーブします。KAREL変数はセーブしません。FR:に200k未満の空き容量し
か無いと失敗します。

VAR status: INTEGER BEGIN PROG_BACKUP(‘FR:\GMX_211\ANS00003’, PBR_NVRTYPE, 200, TRUE, status)

例:
以下の例はFR:のGMX_211サブディレクトリに、ANS00003を適切な拡張子でセーブします。ANS0003から再帰的に呼ばれてい
るJB、PR、MR、又はTPプログラムをセーブします。ライトプロテクトされているプログラムはセーブしません。FR:に100k未
満の空き容量しか無いと失敗します。
VAR status: INTEGER BEGIN PROG_BACKUP(‘FR:\GMX_211\ANS00003’, PBR_MNTYPE, 100, FALSE, status)

例:
以下の例はMC:にMAINを適切な拡張子で保存します。MAINによって再帰的に呼ばれている全てのプログラムをセーブしま
す。MC:上に300未満の空き容量しか無いと失敗します。
VAR status: INTEGER BEGIN PROG_BACKUP(‘MC:\MAIN’, PBR_ALLTYPE, 300, TRUE, status)

A.17.19 PROG_CLEARビルトインプロシージャ
目的:
指定されたプログラムと、呼ばれているプログラムの全てをメモリからクリアします。呼ばれているプログラムが別プログラ
ムを呼んでいるなら、それらも再帰的にクリアされます。関連する変数もまたクリアするように指定可能です。他のプログラ
ムから参照されている変数はクリアされません。
構文:
PROG_CLEAR (prog_name, prog_type, status)
入出力パラメータ:
[in] prog_name :STRING
[in] prog_type :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group: CORE
詳細:

 prog_name にクリアする(ルート)プログラムを指定します。
 prog_type にクリアするプログラムのタイプを指定します。有効なタイプは以下の通りです。
PBR_VRTYPE :VR - 変数を持つプログラム
PBR_MNTYPE :JB, PR, MR, TP
PBR_JBTYPE :JB - ジョブプログラムのみ
PBR_PRTYPE :PR - プロセスプログラムのみ
PBR_MRTYPE :MR - マクロプログラムのみ
PBR_PCTYPE : VR - VRを保存しますが、PCは保存しません。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 245 of 412

PBR_ALLTYPE :全てのプログラム。VR, JB, PR, MR, TP


PBR_NVRTYPE :VRを除く全てのプログラム
PBR_NMRTYPE :JB, PR, TP (マクロを除く全てのTPプログラム)
 status は処理のステータスです。0でないなら、エラーが発生しました。

 エラーが発生しても、システムはループ処理を継続して可能な限り多くのプログラムをクリアしようとします。呼ばれて
いるプログラムのうちの一つが無くても、エラーではありません。しかしながら、この欠けているプログラムが他のプロ
グラムを呼んでいるなら、それらのプログラムも見つけられないので、削除されません。クリアされなかった各プログラ
ムについて、エラーにプログラム名が入った形でエラーがポストされます。コーズコードはclearのルーチンから返された
任意のコードとなります。
 あらゆるVRの削除は他のプログラムによる参照に制限されます。あらゆるVRのクリア操作において、このエラーは無視
されます。
 クリア対象とされたプログラムが選択されたプログラムなら、クリアされません。この場合、エラー「このプログラムは
他で使用されています」が返されます。対策としては、クリア対象でないプログラムをSELECT_TPE( )ビルトインで選択す
る必要があります。
 PROG_BACKUP、PROG_CLEAR、及びPROG_RESTOREビルトインはマクロを除き、全てのプログラムへの参照を考慮し
ます。これは以下の文でのプログラムの参照を含みます。CALL、RUN、ERROR_PROG、RESUME_PROG、MONITOR。
例:
以下の例はANS00003.TPをメモリから削除します。ANS00003によって再帰的に呼ばれている全てのプログラムを、プログラム
のタイプによらずクリアします。ライトプロテクトされているプログラムはクリアされません。KAREL変数はクリアされませ
ん。
VAR status: INTEGER BEGIN PROG_CLEAR(‘ANS00003.TP’, PBR_NVRTYPE, status)

例:
以下の例はANS00003.TPをメモリから削除します。ANS00003から再帰的に呼ばれているJB、PR、MR、及びTPプログラムのみ
を削除します。ライトプロテクトされているプログラムはクリアされません。
VAR status: INTEGER BEGIN PROG_CLEAR(‘ANS00003.TP’, PBR_MNTYPE, status)

A.17.20 PROG_RESTOREビルトインプロシージャ
目的:
指定されたプログラムと、呼ばれているプログラムの全てをリストア(ロード)します。呼ばれているプログラムが別プログラム
を呼んでいるなら、それらも再帰的にロードされます。VRファイルが存在すれば、関連する変数もロードされます。
構文:
PROG_RESTORE (file_spec, status)
入出力パラメータ:
[in] file_spec :STRING
[out] status :INTEGER
%ENVIRONMENT Group: CORE
詳細:
 file_spec に記憶装置とロードするプログラムを指定します。ファイルタイプが指定されると、それは無視されます。

 status は処理のステータスです。0でないなら、エラーが発生しました。
 エラーが発生しても、システムはループ処理を継続して可能な限り多くのプログラムを処理しようとします。例えば、8個
の内1個のプログラムが無いなら、他の7個はロードされます。この場合、「指定したプログラムは存在しません」が返り
ます。この場合、各プログラムについて、エラーにプログラム名が入った形でエラーがポストされます。コーズコードは
loadのルーチンから返された任意のコードとなります。
 サブディレクトリが指定されたなら、呼ばれているプログラムはそのサブディレクトリからロードされます。そのサブ
ディレクトリに存在する余分なファイルは自動的にはロードされません。

 プログラムが既に存在する場合、それはリストアされません。エラーは発生しません。
 呼ばれているプログラムと同じ名前のKAREL又はTPプログラムがメモリ中に存在する必要があります。さもないとVRが
ロードされません。
 VRは既に変数が存在していてもリストアされます。あらゆる既存の変数をVRファイルにセーブされている値で上書する
ということです。

 アスキープログラム(.LS)はリストアできません。
 十分なメモリが利用できない場合、エラーが発生します。リストアは未完了です。
 PROG_BACKUP、PROG_CLEAR、及びPROG_RESTOREビルトインはマクロを除き、全てのプログラムへの参照を考慮し
ます。これは以下の文でのプログラムの参照を含みます。CALL、RUN、ERROR_PROG、RESUME_PROG、MONITOR。
例:
以下の例はFR:のサブディレクトリGMX_211からANS00003.TPをリストアします。ANS0003から再帰的に呼ばれている全プロ
グラムを、プログラムのタイプによらずリストアします。リストアするディレクトリにVRファイルがあれば、それらはリスト

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 246 of 412

アされます。
VAR status: INTEGER BEGIN PROG_RESTORE(‘FR:\GMX_211\ANS00003.TP’, status)

例:
以下の例はFR:のサブディレクトリGMX_211からANS00003.TPをリストアします。ANS00003によって再帰的に呼ばれているTP
プログラムのみがリストアされます。
VAR status: INTEGER BEGIN PROG_RESTORE(‘FR:\GMX_211\ANS00003’, status)

例:
以下の例は、ファイルタイプを探してMC:のMAINをリストアします。MAINによって再帰的に呼ばれている全てのプログラム
と変数をリストアします。
VAR status: INTEGER BEGIN PROG_RESTORE(‘MC:\MAIN’, status)

A.17.21 PROG_LISTビルトインプロシージャ
目的:
プログラム名のリストを返します。
構文:
prog_list(prog_name, prog_type, n_skip, format, ary_name, n_progs <,f_index>)
入出力パラメータ:
[in] prog_name :STRING
[in] prog_type :INTEGER
[in] n_skip :INTEGER
[in] format :INTEGER
[out] ary_name :ARRAY of string
[out] n_progs :INTEGER
[out] status :INTEGER
[in,out] f_index :INTEGER
%ENVIRONMENT Group :BYNAM
詳細:
 prog_name にary_name に返されるべき(複数の)プログラム名を指定します。ワイルドカード(*)を使用して、prog_typeに該
当する全プログラムがany_nameに返るように指定可能です。
 prog_type に取得するプログラムのタイプを指定します。有効なタイプは以下の通りです。
1 :VR - 変数のみを持つプログラム
2 :JB, PR, MR, TP3 :JB - ジョブプログラムのみ
4 :PR - プロセスプログラムのみ
5 :MR - マクロプログラムのみ
6 :PC - KARELプログラムのみ
7 :全てのプログラム。VR, JB, PR, MR, TP, PC
8 :VRを除く全てのプログラム
 n_skip はary_nameの宣言の長さより多くのプログラムが存在する時に使用されます。最初にPROG_LISTを呼ぶ時はn_skip
を0に設定して下さい。もしary_name が完全にプログラム名で満たされているなら、その配列を別のSTRINGの配列にコ
ピーして下さい。そしてn_skip をn_skip + n_progs としてPROG_LISTをもう一度実行して下さい。PROG_LISTの呼び出し
は、それ以前に発見済みのプログラムをスキップして残りのプログラムのみを見つけます。
 format にプログラム名のフォーマットを指定します。以下の値がformat として有効です。
1 :プログラム名のみ、空白なし。
2 :'プログラム名 プログラムタイプ'
トータルの長さ=15文字
 prog_name = 12文字の後に空白

 prog_type = 2文字
 ary_name はプログラム名を格納するSTRINGの配列です。
 n_progs はary_name に格納されたプログラムの数です。
 status は成功したら0を返します。
 f_index は高速でindex付けを行うためのオプションのパラメータです。複雑なワイルドカード(単純に*だけを指定する以外
の使用法)でprog_nameを指定したなら、このパラメータを使用して下さい。最初のPROG_LIST呼び出しでf_index 及び
n_skip は共に0に設定されます。その後f_index は内部的に次のprog_nameを素早く発見するために使用されます。一旦特定
のprog_name のリスト作成が始まったら、f_index を変更しないで下さい。
参照:
VAR_LISTビルトインプロシージャ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 247 of 412

例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.5節「ファイルとプログラムのリスト作成及び文字列操作」 (LIST_EX.KL)
B.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)

A.17.22 PROGRAM文
目的:
KARELプログラムのソース中でプログラム名を識別します。
構文:
PROGRAM prog_name
ここで:
prog_name : 有効なKARELの識別子
詳細:
 プログラム中の最初の有効な文である必要があります(コメントは除きます)。

 プログラムの命名に使用した識別子は、そのプログラム中では他のいかなる目的でも使用できません。例えば変数名や定
数名には使用できません。
 prog_name はEND文にも現れる必要があります。END文はプログラムの実行可能セクションの終わりの印となるもので
す。
 プログラム名はあるプログラムからプログラムを呼ぶために使用可能です。ルーチン名をプロシージャルーチンを呼び出
す時に使用するのと同じように呼べます。
例:
PROGRAM文の使用方法に関する詳細なプログラム例については付録B「KARELプログラム例」を参照して下さい。

A.17.23 PULSEアクション
目的:
デジタル出力ポートを指定時間パルス出力します。
構文:
PULSE DOUT[port_no] FOR time_in_ms
ここで:
port_no : an INTEGER variable or literal
time_in_ms : an INTEGER
詳細:
 port_no は有効なデジタル出力信号の番号として下さい。

 time_in_ms にパルスの持続時間を指定します。単位はミリ秒です。
 time_in_ms が0なら、パルスは発生しません。それ以外の場合、この持続時間は次の8の倍数に切り上げられます。
実際のパルスの持続時間は切り上げられた時間よりも0から8msec短くなります。

そのポートが「常時ON」ならば、ポートの極性を反転することにより負のパルスを実現できます。以下のシーケンスでも
実現できます。
DOUT[n] = FALSE
DELAY x
DOUT[n] = TRUE


 NOWAITはPULSEアクションでは使用できません。
 プログラムがパルスの進行中に一時停止されると、パルスは正しい時間に出力を終了します。
 パルスの進行中にプログラムが終了すると、ポートはプログラムが終了した時点の状態のままとなります
 time_in_ms が負であるか、86,400,000 (24時間)より大きいなら、プログラムはエラーで終了します。
参照:
6章「コンディションハンドラ」、7章「ファイル入出力操作」

A.17.24 PULSE文
目的:
デジタル出力ポートを指定時間パルス出力します。
構文:
PULSE DOUT[port_no] FOR time_in_ms < NOWAIT >
ここで:
port_no :INTEGERの変数またはリテラル

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 248 of 412

time_in_ms : INTEGER
詳細:
 port_no は有効なデジタル出力信号の番号である必要があります。

 time_in_ms にパルスの持続時間を指定します。単位はミリ秒です。
 time_in_ms が0なら、パルスは発生しません。それ以外の場合、この持続時間は次の8の倍数に切り上げられます。
例えば、100が指定されたなら、104(次の8の倍数)msecに切り上げられます。実際の持続時間は96から104msecの間です。
 実際のパルスの持続時間は切り上げられた時間よりも0から8msec短くなります。
 そのポートが「常時ON」ならば、ポートの極性を反転することにより負のパルスを実現できます。以下のシーケンスでも
実現できます。
DOUT[n] = FALSE
DELAY x
DOUT[n] = TRUE


 PULSE文にNOWAITが指定されると、次の文はパルスと同時に実行されます。
 NOWAITが指定されないなら、パルスが終了するまで次の文は実行されません。

参照:
付録E「文法図」:構文の情報があります。
例:
以下の例ではデジタル出力がパルス出力されています。その後でもう一つのデジタル出力もパルス出力されています。
NOWAITを指定しているので、DOUT[start_air] はDOUT[5] の出力が完了する前に実行されます。

例A.17.24 PULSE文
PULSE DOUT[5] FOR (seconds * 1000) NOWAIT
PULSE DOUT[start_air] FOR 50 NOWAIT

A.17.25 PURGE CONDITION文


目的:
モニタの定義を削除します。
構文:
PURGE CONDITION[cond_hand_no]
ここで:
cond_hand_no : INTEGERの式
詳細:

 指定の番号のモニタが存在しない場合はPURGE CONDITIONは効果がありません。
 PURGE CONDITION文はグローバルモニタにのみ使用されます。
 PURGE CONDITION文は有効にされているモニタを削除(パージ)します。
 もし指定の番号のモニタが既に定義されているなら、その番号を別のモニタに使用する前にパージする必要があります。
参照:
ENABLE CONDITION文、6章「コンディションハンドラ」、付録E「文法図」:構文の情報があります。
例:
以下の例では、BOOLEAN変数ignore_cond がTRUEならば、グローバルモニタCONDITION[1]がPURGE文で削除されます。
FALSEならば、CONDITION[1]が有効になります。

例A.17.25 PURGE CONDITION文


IF ignore_cond THEN
PURGE CONDITION[1]
ELSE
ENABLE CONDITION[1]
ENDIF

A.17.26 PUSH_KEY_RDビルトインプロシージャ
目的:
キーボード装置からの入力を一時中断します。
構文:
PUSH_KEY_RD(key_dev_name, key_mask, pop_index, status)
入出力パラメータ:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 249 of 412

[in] key_dev_name :STRING


[in] key_mask :INTEGER
[out] pop_index :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 (accept_mask又はterm_maskとして)指定されたキークラスの何れかを使用している指定のキーボード装置の全てのread要求
を一時中断します。
 アクティブなread要求が無いなら、一時中断中として記録される入力はありません。これはエラーではありません。

 key_dev_name は定義済みのキーボード装置の1つとして下さい。
'TPKB' :教示操作盤のキーボード装置
'CRKB' :CRTキーボード装置
 key_mask は中断される文字(キー)のクラスを示すビットマスクです。これはインクルードファイルklevkmsk.klに定義され
た定数のORとして下さい。
kc_display :表示可能キー
kc_func_key :ファンクションキー
kc_enter_key :入力キー及び(CRT/KBの)リターンキー
kc_delete :削除及び後退キー
kc_lr_arw — 左右の矢印キー
kc_ud_arw — 上下の矢印キー
kc_other — その他のキー(前戻り等)
 pop_id には、read要求を再度アクティブにするためにPOP_KEY_RDを呼ぶ時に使用すべき値が返ります。

 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
POP_KEY_RDビルトインプロシージャ
例:
例に関してはREAD_KBビルトインプロシージャを参照して下さい。

A.18 Q

A.18.1 QUEUE_TYPEデータ型
目的:
QUEUE関連のビルトインで使用するデータ型を定義する。
構文:
queue_type = STRUCTURE
n_entries : INTEGER
sequence_no : INTEGER
head : INTEGER
tail : INTEGER
ENDSTRUCTURE
詳細:
 queue_type はQUEUE関連ビルトインで使用するキューのデータの初期化と維持に使用されます。データを変更しないで下
さい。内部的に使用しています。
参照:
APPEND_QUEUE、DELETE_QUEUE、INSERT_QUEUE、COPY_QUEUE、GET_QUEUE、INIT_QUEUE、MODIFY_QUEUEビ
ルトインプロシージャ

A.19 R

A.19.1 READ文
目的:
シリアルI/O装置又はファイルからデータを読みます。
構文:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 250 of 412

READ < file_var > (data_item {,data_item})


ここで:
file_var : FILE型変数
data_item : 変数の識別子とオプションのフォーマット指定子、又は予約語CR
詳細:
 file_var がREAD文に指定されていないと、デフォルトのTPDISPLAYが使用されます。%CRTDEVICEディレクティブを使
用するとデフォルトがINPUTになります。
 file_var が指定されたなら、それは入力デバイス(INPUT、CRTPROMPT、TPDISPLAY、TPPROMPT)の一つか、OPEN FILE
文で設定された変数である必要があります。
 ATR_UF属性が設定されていると、データはバイナリで送られます。そうでなければデータはASCIIテキストとして送られ
ます。
 data_item はRWアクセスを持つシステム変数又はユーザ定義の変数を使用可能です。

 READ文が実行されると、次の空白でない入力文字から読み始めます。次の空白か、行末か、ファイル終端の前の空白以
外の文字列まで読みます。これはSTRING以外の全てに当てはまります。
 data_item が配列ならば添え字を提供する必要があります。

 オプションのフォーマット指定子を利用して、各data_item で読むデータの量を制御可能です。フォーマット指定子の効果
は読み込むデータの種類と、データがテキスト(ASCII)かバイナリ(フォーマット無し)かに依存します。
 予約語CR(data itemとして使用可能)は現在の入力行に残っているあらゆるデータを無視するよう指示します。次のdata_item
は次の入力行の最初から読まれます。
 ファイルから読み込みを行い、エラーが発生すると、読み込んでいた変数とデータリスト中のその後の変数(CRまで)は未
初期化となります。
 もしfile_var がウィンドウデバイスならば、間違ったdata_itemを示すメッセージが表示されます。無効なdata itemの代わり
となる入力、それ以降のitemの再入力を促されます。
 IO_STATUS(file_var)を使って読み取り操作が成功したか否か確認して下さい。


バイナリモードではRead CR を決して行わないで下さい。

参照:
7章「ファイル入出力操作」:READのフォーマット指定子の詳細があります、IO_STATUSビルトインファンクション、付録E
「文法図」:構文上の情報があります。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)
B.10節「DISCTRL_ALPHAビルトインの使用」 (DCALP_EX.KL)
B.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)

A.19.2 READ_DICTビルトインプロシージャ
目的:
辞書から情報を読みます。
構文:
READ_DICT(dict_name, element_no, ksta, first_line, last_line, status)
入出力パラメータ:
[in] dict_name : STRING
[in] element_no : INTEGER
[out] ksta : ARRAY OF STRING
[in] first_line : INTEGER
[out] last_line : INTEGER
[out] status : INTEGER
%ENVIRONMENT Group :PBCORE
詳細:

 dict_name に読む辞書の名前を指定します。
 element_no に読む要素番号を指定します。辞書ファイル中では要素番号は$付で指定されています。
 ksta は辞書ファイルからの情報を格納するSTRINGの配列です。
 ksta が小さすぎてデータを格納できない場合、データは短縮されます。statusに33008、「テキストが切詰められました」が設定
されます。
 first_line は情報の格納を開始するksta の要素番号を指示します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 251 of 412


 last_line にはksta の最後に使用した要素を示す値が返ります。
 status は処理のステータスです。0でないならば、辞書から要素を読む最中にエラーが発生しました。
 &new_lineはREAD_DICTを使って辞書テキストから読める唯一の(辞書の予約語による)属性値です。READ_DICTは他の全
ての予約語による属性値を無視します。
参照:
ADD_DICT、WRITE_DICT、REMOVE_DICTビルトインプロシージャ、9章「辞書とフォーム」。
例:
詳細なプログラム例に関してはB.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)を参照して下さい。

A.19.3 READ_DICT_Vビルトインプロシージャ
目的:
書式に従い変数を使って辞書から情報を読みます。
構文:
READ_DICT_V(dict_name, element_no, value_array, ksta, status)
入出力パラメータ:
[in] dict_name : STRING
[in] element_no : INTEGER
[in] value_array : ARRAY OF STRING
[out] ksta : ARRAY OF STRING
[out] status : INTEGER
%ENVIRONMENT Group :UIF
詳細:

 dict_name に読む辞書の名前を指定します。
 element_no に読む要素番号を指定します。この数値は辞書ファイル中で$付で指定されています。
 value_array は変数名の配列です。各変数は辞書中のフォーマット付きの各データ項目に相当します。各変数名
は'[prog_name]var_name'として指定可能です。
 [prog_name] 指定の変数を含んでいるプログラム名を指定します。指定しないと、現在実行中のプログラムが使用され
ます。
 var_name は静的変数を参照する必要があります。
 var_name は構造体のメンバ、配列の添え字を含めることが可能です。

 ksta 辞書ファイルから読まれている情報を格納するために使用するSTRINGの配列です。
 つまり辞書中で"%d"等となっている部分にvalue_arrayで指定した変数の内容を入れたテキストをkstaに出力するビルトイン
です。
 ksta が小さすぎてデータを格納できない場合、データは短縮されます。statusに33008、「テキストが切詰められました」が設定
されます。
 status は処理のステータスです。0でないならば、辞書から要素を読む最中にエラーが発生しました。

 &new_lineはREAD_DICT_Vを使って辞書テキストから読める唯一の(辞書の予約語による)属性値です。READ_DICT_Vは
他の全ての予約語による属性値を無視します。
参照:
WRITE_DICT_Vビルトインプロシージャ、9章「辞書とフォーム」
例:
以下の例では、TPTASKEG.UTX がシステム変数を表示する辞書テキストの情報を含んでいます。この情報は辞書の最初の要素
にあります。要素番号は0から始まります。readdicvはREAD_DICTVを使ってテキストを読み、教示操作盤に表示します。
例A.19.3 READ_DICT_Vビルトインプロシージャ
*----------------------------------------------
*TPTASKEG.UTX
*----------------------------------------------
$- "Value of $KAREL_ENB = %d"

----------------------------------------------
--UTILITY PROGRAM:
----------------------------------------------
PROGRAM readdicv
%ENVIRONMENT uif

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 252 of 412

VAR
ksta: ARRAY[1] OF STRING[40]
status: INTEGER
value_array: ARRAY[1] OF STRING[30]
BEGIN
value_array[1] = '[*system*]$KAREL_ENB'
--DP_DEFAULTを使っている。これは一つしか言語が無い場合の例。
ADD_DICT('TPTASKEG', 'TASK', DP_DEFAULT, DP_OPEN, STATUS)
READ_DICT_V('TASK', 0, value_array, ksta, STATUS)
WRITE(ksta[1], CR)
END readdicv

A.19.4 READ_KBビルトインプロシージャ
目的:
キーボード装置からのreadを行い、その終了を待ちます。
構文:
READ_KB(file_var, buffer, buffer_size, accept_mask, term_mask, time_out, init_data, n_chars_got, term_char, status)
入出力パラメータ:
[in] file_var : FILE
[out] buffer : STRING
[in] buffer_size : INTEGER
[in] accept_mask : INTEGER
[in] time_out : INTEGER
[in] term_mask : INTEGER
[in] init_data : STRING
[out] n_chars_got : INTEGER
[out] term _char : INTEGER
[out] stat us : INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 終了条件が満たされるかバッファが一杯になるまで、ユーザの提供したバッファに指定の文字クラスからのデータを格納
します。readが終了した時に呼び出し側に返ります。
 READ_KBをCRT/KBに使用しているなら、「生の」CRTの文字を取得することになります。教示操作盤と同等のキーコー
ドを取得するには、以下を行う必要があります。
tp_key = $CRT_KEY_TBL[crt_key + 1]

このマッピングによりCRT/KBと教示操作盤で共通のソフトウェアを使用することができます。
 READ_KB及び幾つかの他のビルトインはプログラム中のdevice_statという変数を使用します。これはKARELプログラムと
ユーザインタフェース表示の間の関連性を確立するためです。例えばREAD_KBを呼ぶタスク、[MAINUIF]があるとしま
す。上記の関連性を持たせるために用いられる変数は[MAINUIF]device_statです。もしdevice_statを設定しないなら、一画
面モードもしくは左の画面(left pane)でしか文字を読めません。
 device_statにはアプリケーションを実行している画面のpane IDを設定する必要があります。標準の1画面モード/モノクロTP
ではdevice_stat=1です。右の画面(right pane:pane ID=2)ならばdevice_stat=2として下さい。右下の画面(lower right pane:pane
ID=3)ならば、device_stat=3として下さい。外部のInternet Explorerとの接続 では4-9を使って下さい。CRT/KBでは
device_stat=255と設定して下さい。
 READ_KBと結びつけるキーボード装置をopenする前に[MAINUIF]device_statを正しいpaneIDに設定する必要があります。
iPendantのpane IDは1,2または3です。
 Pane ID 1で実行されているアプリケーションは$TP_CURSCRNに格納されています。Pane ID 2は$UI_CURSCRN[1]に格納
されています。一般的には$UI_CURSCRN[device_stat-1]に格納されます。CRTのアプリケーションは$CT_CURSCRNを使用
します。
 file_var はキーボード装置に対してopenされている必要があります。file_var がウィンドウにも関連付けられているなら、
文字はwindowにエコーされます。
 文字はbuffer に格納されます。最大buffer_size かbufferのサイズの小さい方までです。

 accept_mask は入力として受け付ける文字のクラスを示すビットマスクです。これはインクルードファイルklevkmsk.klに定
義された定数のORとして下さい。
kc_display :表示可能キー
kc_func_key :ファンクションキー
kc_enter_key :入力キー及び(CRT/KBの)リターンキー

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 253 of 412

kc_delete :削除及び後退キー
kc_lr_arw — 左右の矢印キー
kc_ud_arw — 上下の矢印キー
kc_other — その他のキー(前戻り等)
 accept_mask を0にすることには意味があります。これはどんな文字も入力として受け付けないということです。これは単
一のキー入力を待つ際に用いられます。そのキーはterm_charに返されます。この場合、buffer_size は0になります。
 accept_mask がkc_displayを含むなら、それは以下の文字に該当します。受け付けられたなら以下の意味を持ちます。
 削除文字 - カーソルが最初の位置にいないなら、カーソルの左にある文字が削除されました。
 左右の矢印キー - カーソルを現在の位置から一文字分左または右に位置させます。既に最初の位置や最後の位置にい
ないことが前提です。
 上下の矢印キー - 同じファイルに前に入力された文字を取ってきます。
 term_mask は要求を終了する条件を示すビットマスクです。これはインクルードファイルklevkmsk.klに定義された定数の
ORとして下さい。
kc_display :表示可能キー
kc_func_key :ファンクションキー
kc_enter_key :入力キー及び(CRT/KBの)リターンキー
kc_delete :削除及び後退キー
kc_lr_arw — 左右の矢印キー
kc_ud_arw — 上下の矢印キー
kc_other — その他のキー(前戻り等)

 time_out に入力操作が自動的にキャンセルされる時間をmsecで指定します。-1はタイムアウトしないことを意味します。
 init_data_p に入力フィールドに初期値として表示される文字列を指します。これはbuffer_sizeより長くしてはいけません。
 n_chars_got にはreadが終了した時に入力バッファにある文字の数を設定します。
 term_char にはフォームを終了させたキーやその他の条件が入ります。終了条件となるキーコードはインクルードファイル
klevkeys.klに定義されています。通常出力されるキーは以下の定義済み定数です。
ky_up_arw
ky_dn_arw
ky_rt_arw
ky_lf_arw
ky_enter
ky_prev
ky_f1
ky_f2
ky_f3
ky_f4
ky_f5
ky_next
 status は処理のステータスです。0でないなら、エラーが発生しました。
例:
以下の例はあらゆる教示操作盤のreadを一時中断します。その後READ_KBを使用してキー入力を一つ読みます。その後中断し
ていたreadを再開します。

例A.19.4 READ_KBビルトインプロシージャ
PROGRAM readkb
%NOLOCKGROUP
%ENVIRONMENT flbt
%ENVIRONMENT uif
%INCLUDE klevkmsk
VAR
file_var: FILE
key: INTEGER
n_chars_got: INTEGER
pop_index: INTEGER
status: INTEGER
str: STRING[1]

BEGIN
-- Suspend any outstanding TP Keyboard reads
PUSH_KEY_RD('TPKB', 255, pop_index, status)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 254 of 412

IF (status = 0) THEN
WRITE (CR, 'pop_index is ', pop_index)
ELSE
WRITE (CR, 'PUSH_KEY_RD status is ', status)
ENDIF
-- Open a file to TP Keyboard with PASALL and FIELD attributes
-- and NOECHO
SET_FILE_ATR(file_var, ATR_PASSALL)
SET_FILE_ATR(file_var, ATR_FIELD)
OPEN FILE file_var ('RW', 'KB:TPKB')
-- Read a single key from the TP Keyboard
READ_KB(file_var, str, 1, 0, kc_display+kc_func_key+
kc_enter_key+kc_lr_arw+kc_ud_arw+kc_other, 0, '',
n_chars_got, key, STATUS)
IF (status = 0) THEN
WRITE (CR, 'key is ', key, ', n_chars_got = ', n_chars_got)
ELSE
WRITE (CR, 'READ_KB status is ', status)
ENDIF
CLOSE FILE file_var
-- Resume any outstanding TP Keyboard reads
POP_KEY_RD('TPKB', pop_index, status)
IF (status <> 0) THEN
WRITE (CR, 'POP_KEY_RD status is ', status)
ENDIF
END readkb

A.19.5 REALデータ型
目的:
小数点と端数を含む数値、または科学的記数法で表現された数、変数、ファンクションの戻り値の型、ルーチンのパラメータ
をREAL型として定義します
構文:
REAL
詳細:
 REAL型の変数及び式は-3.4028236E+38から-1.175494E-38、0.0、+1.175494E-38から+3.4028236E+38までの範囲にある値を
とれます。有効桁数は大体7桁です。そうでなければ、プログラムは「Real overflow」で終了します。
 REALの定数やリテラルを定義する時、小数点が必要です(科学的記数法を使う場合を除きます) REAL変数として宣言され
ている限りは、REAL変数の値を定義する時には小数点が強制されません。
 科学的記数法が許されており、以下の規則に従います。
 小数点は、整数部分に一桁しか残らないように左にシフトされます。
 端数部分の次に文字E(大文字、小文字共に可)と±整数値が続きます。この部分がREAL型の値(実数)の大きさを指定し
ます。例えば、123.5は1.235E2と表されます。
 端数部分と小数点は省略可能です。例えば、100.0は1.000E2、1.E2、1E2として表現可能です。

 -1.175494E- 38 と+1.175494E-38の間にある全てのREAL型変数は0として扱われます。
 REAL型又はINTEGER型の式のみがREAL型の変数に代入可能です。またREALの関数から返すことが可能なのも、REAL
型の引数として渡すことが可能なのもREAL型の式のみです。
 INTEGER型の式がこれらの場合のいずれかに使用されると、それはREAL型の値として扱われます。INTEGER型の変数が
REAL型の引数として使用されると、それは常に値渡しです。参照渡しではありません。
 REAL型の有効な演算子は以下の通りです(表A.19.5を参照して下さい)。
 算術演算子(+, +, *, /)
 関係演算子(>, >=, =, < >, <, <=)

表A.19.5 REAL型の有効な値と無効な値
有効 無効 理由
1.5 15 小数点が必要です(15はINTEGERでありREALではありません)
1. . 整数部分又は端数部分を含む必要があります。
+2500.450 +2,500.450 コンマは使用できません。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 255 of 412

1.25E-4 1.25E –4 空白は使用できません。

例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)
B.8節「動的に表示されている変数の操作」 (CHG_DATA.KL)
B.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)

A.19.6 関係(Relational)コンディション
目的:
二つの被演算子の関係を吟味するために使用されます。
構文:
variable <[subscript]> rel_op expression
ここで:
variable : 静的なINTEGER又はREAL変数又はBOOLEAN型のポート配列の要素
subscript : INTEGERの式 (ポート配列でのみ使用されます)
rel_op : 関係演算子
expression : 静的な変数、定数、またはEVAL節
詳細:

 関係コンディションは状態コンディションです。これは関係がスキャン毎に検査されることを意味します。
 以下の関係演算子が使用可能です。
= :等しい
<> :等しくない
< :より小さい
=< :以下
> :より大きい
>= :以上
 双方の被演算子は同じデータ型とする必要があります。INTEGER, REAL、もしくはBOOLEANだけが使えます。INTEGER
の値はREALの値が必要とされる場所で使えます。そしてREALの値として扱われます。
 variable にはポート配列の信号、ユーザ定義の静的変数、KARELプログラムで読めるシステム変数のいずれかが使用可能
です。
 expression にはユーザ定義の静的変数、KARELプログラムで読めるシステム変数、任意の定数、またはEVAL節を使用可能
です。
 モニタを有効にする前に、関係コンディションで使用されている変数を初期化する必要があります。

A.19.7 RELAX HAND 文


目的:
一本の信号で制御されるツールのオープン線をOFFする。もしくはペアの信号で制御されるツールのオープン線、クローズ線
をOFFする。
構文:
RELAX HAND hand_num
ここで:
hand_num : an INTEGER expression
詳細:
 この文の実際の効果はI/OシステムでHAND信号がどのように設定されているかに依存します。14章、「入出力システム」
を参照して下さい。

 hand_num は1から2の範囲の値で無ければなりません。さもないと、プログラムはエラーで終了します。
 hand_num が範囲内であってもハンドが接続されていないなら、この文は効果がありません。
 hand_num が範囲内にあっても、その値で表現されるHAND信号が割り付けられていないなら、プログラムはエラーで終了
します。
参照:
11章「入出力システム」、付録D「文法図」:構文の情報があります。
例:
以下の例では、変数gripper で指定したロボットハンドがRELAX HAND文により緩められます。

例A.19.7 RELAX HAND 文

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 256 of 412

PROGRAM relaxhnd
%NOLOCKGROUP
%NOPAUSESHFT
VAR
gripper : INTEGER
BEGIN
gripper = 1
RELAX HAND gripper
WAIT FOR DIN[1]=ON
CLOSE HAND gripper
END relaxhnd

A.19.8 REMOVE_DICTビルトインプロシージャ
目的:
指定された辞書を指定された言語、又は全ての存在する言語から削除します。
構文:
REMOVE_DICT(dict_name, lang_name, status)
入出力パラメータ:
[in] dict_name : STRING
[in] lang_name : STRING
[out] status : INTEGER
%ENVIRONMENT Group :UIF
詳細:

 dict_name は削除する辞書名を指定します。
 lang_name にはどの言語から辞書を削除するかを指定します。以下の定義済み定数の一つを使用して下さい。
dp_default
dp_english
dp_japanese
dp_french
dp_german
dp_spanish
lang_name が''ならば、存在する全ての言語から削除されます。
 status は処理のステータスです。0でないなら、辞書ファイルの削除でエラーが発生しました。
参照:
ADD_DICTビルトインプロシージャ、9章「辞書とフォーム」
例:
詳細なプログラム例に関してはB.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)を参照して下さい。

A.19.9 RENAME_FILEビルトインプロシージャ
目的:
指定されたファイル名をリネームします。
構文:
RENAME_FILE(old_file, new_file, nowait_sw, status)
入出力パラメータ:
[in] old_file : STRING
[in] new_file : STRING
[in] nowait_sw : BOOLEAN
[out] status : INTEGER
%ENVIRONMENT Group :FDEV
詳細:
 old_file にはリネームするファイルのファイルデバイス、ファイル名、ファイルタイプを指定します。

 new_file にはリネーム後のファイル名とファイルタイプを指定します。
 もしnowait_sw がTRUEなら、コマンドを実行している間もプログラム実行は継続します。FALSEなら、コンディションハ
ンドラも含め、処理が終了するまでプログラムは停止します。もしもタイムクリティカルなモニタがあるなら、それは別
のタスクとして実行される別のプログラムに分離して下さい。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 257 of 412


nowait_sw はこのリリースでは利用できません。FALSEに設定して下さい。

 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
COPY_FILE、DELETE_FILEビルトインプロシージャ

A.19.10 RENAME_VARビルトインプロシージャ
目的:
指定されたプログラムの指定された変数を新しい変数名にリネームします。
構文:
RENAME_VAR(prog_nam, old_nam, new_nam, status)
入出力パラメータ:
[in] prog_nam : STRING
[in] old_nam : STRING
[in] new_nam : STRING
[out] status : INTEGER
%ENVIRONMENT Group :MEMO
詳細:

 prog_nam にはリネームする変数が含まれているプログラム名を指定します。
 old_nam はリネームする変数の現在の変数名です。
 new_nam はリネーム後の変数名です。
 status は処理のステータスです。0でないなら、エラーが発生しました。

注意
誤ってシステムのKARELプログラムの変数をリネームすると システムが機能しなくなる可能性があります。絶
対に必要な場合を除いて、使用しないで下さい。

参照:
CREATE_VAR、SET_VARビルトインプロシージャ

A.19.11 REPEAT ... UNTIL文


目的:
BOOLEANの式の評価がTRUEになるまで(複数の)文を繰り返します。
構文:
REPEAT
{ statement }
UNTIL boolean_exp
ここで:
statement : 有効なKARELの実行可能な文
boolean_exp : BOOLEANの式
詳細:
 boolean_exp はREPEATループの本体部分の実行後に評価されます。評価によりstatementの部分が再度実行されるべきかを
決定します。

 statement はboolean_exp がTRUEになるまで実行され続けます。boolean_expの評価もTRUEになるまで繰り返されます。
 statement は常に少なくとも一度は実行されます。

注意
REPEAT文がある条件により変更されるBOOLEANのフラグを含み、UNTIL文がループを停止することを確認し
て下さい。そうでないと、プログラムは永遠にループする可能性があります。

参照:
付録E「文法図」:構文の情報があります。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.5節「ファイルとプログラムのリスト作成及び文字列操作」 (LIST_EX.KL)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 258 of 412

B.6節「ファイルとファイルデバイスのビルトインの使用」(FILE_EX.KL)
B.8節「動的に表示されている変数の操作」 (CHG_DATA.KL)
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)
B.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)

A.19.12 RESETビルトインプロシージャ
目的:
制御装置をリセットします。
構文:
RESET(successful)
入出力パラメータ:
[out] successful : BOOLEAN
%ENVIRONMENT Group :MOTN
詳細:

 successful には制御装置のリセットを妨げる条件が存在したとしてもTRUEが返ります。
 リセットが成功したか否か突き止めるには、少し待機してからOPOUT[3] (FAULT LED)をチェックして下さい。FALSEな
らリセット操作が成功しました。
 RESET文の後に続く文はresetの失敗か完了まで実行されません。CRT又は教示操作盤はresetの間一時停止を示します。

 resetが行われている間、制御装置は一時停止状態(PAUSE)に有るように見えます。しかし、この間にPAUSEコンディショ
ンはトリガしません。

A.19.13 RETURN文
目的:
ルーチン/プログラムから呼び側のルーチン/プログラムに制御を返します。オプションで結果を返します。
構文:
RETURN < (value) >
詳細:
 value はファンクションから返る時は必要です。しかしプロシージャから返る時は許されていません。value のデータ型は
ファンクションの宣言で使われている型と同じである必要があります。

 メインプログラムがRETURN文を実行すると、実行が終了し再開することはできません。
 RETURN文が指定されていないならば、ENDがreturnとしての役割を果たします。
 ファンクションルーチンがRETURN文の代わりにEND文で返ると、プログラムがエラー「RETURN文がありません」で終
了します。
参照:
付録E「文法図」:構文の情報があります。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.5節「ファイルとプログラムのリスト作成及び文字列操作」 (LIST_EX.KL)
B.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)

A.19.14 ROUNDビルトインファンクション
目的:
指定のREALの引数に最も近いINTEGERの値を返します。
構文:
ROUND(x)
戻り値の型: INTEGER
入出力パラメータ:
[in] x :REAL
%ENVIRONMENT Group :SYStem
詳細:
 戻り値はREALの値xに最も近いINTEGERの値です。以下の規則で決定されます。

 x >= 0ならば、nはn <= x <= n + 1を満たす正の整数値です。
 x >= n + 0.5ならば、n + 1が返ります。そうでなければnが返ります。
 x <= 0ならば、nはn >= x >= n - 1を満たすような負の整数値です。
 x <= n - 0.5ならば、n - 1が返ります。そうでなければnが返ります。
 x は -2147483648から+2147483646の範囲にある必要があります。さもないとプログラムはエラーで終了します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 259 of 412

参照:
TRUNCビルトインファンクション
例:
以下の例では入力値のROUNDを行い、結果を表示しています。

例A.19.14 ROUNDビルトインファンクション
PROGRAM round01
%NOLOCKGROUP
VAR
int_value : integer
real_value : real
BEGIN
WRITE ('input real value to round:',CR)
READ (real_value,CR)
int_value = round(real_value)
WRITE ('rounded value:', int_value,CR)
END round01

A.19.15 ROUTINE文
目的:
ルーチン名を、パラメータとその型、ファンクションルーチンの戻り値の型と共に指定します。
構文:
ROUTINE name < param_list > <: return_type >
ここで:
name : 有効なKARELの識別子
param_list : パラメータのリスト。詳細は後述します。
return_type : ファンクションから返せる任意のデータ型。つまり、FILE以外の任意の型。
詳細:

 name にルーチンの名前を指定します。
 param_list は( name_group { ; name_group } )の形式です。
 name_group はparam_name : param_type の形式です。
 param_name は、ルーチンの本体でデータ型param_typeの変数であるかのように使えるパラメータです。
 param_type 又はreturn_type が配列なら、サイズは除外されます。param_type がSTRINGならば、文字列長は除外されま
す。
 ルーチンの本体がROUTINE文に続く時、param_list 中の名称は、渡された実引数をルーチン本体中での仮引数(パラメータ)
への参照と関連付けるために使用されます。
 ルーチンが他のプログラムからのものである時、パラメータのリストは重要ではありません。しかしパラメータの数と
データ型を指定するために存在する必要があります。
 ROUTINE文がreturn_typeを含むならば、そのルーチンはファンクションルーチンです。値を返します。そうでなければ、
それはプロシージャルーチンです。
 ROUTINE文にはルーチン本体かFROM節が続く必要があります。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.2節「標準ルーチン」 (ROUT_EX.KL)
B.3節「位置データ設定及びモニタのプログラム」 (PTH_MOVE.KL)
B.5節「ファイルとプログラムのリスト作成及び文字列操作」 (LIST_EX.KL)
B.6節「ファイルとファイルデバイスのビルトインの使用」 (FILE_EX.KL)
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)
B.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)

A.19.16 RUN_TASKビルトインプロシージャ
目的:
指定されたプログラムを子タスクとして実行します。
構文:
RUN_TASK (task_name, line_number, pause_on_sft, tp_motion, lock_mask, status)
入出力パラメータ:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 260 of 412

[in] task_name : STRING


[in] line_number : INTEGER
[in] pause_on_sft : BOOLEAN
[in] tp_motion : BOOLEAN
[in] lock_mask : INTEGER
[out] status : INTEGER
%ENVIRONMENT Group :MULTI
詳細:
 task_name は実行するタスクの名前です。これが子タスクを作成します。このビルトインを実行したタスクは親タスクと呼
ばれます。

 既に指定のタスクが存在し、一時停止されていると、再開されます。新しいタスクは生成されません。
 line_number に実行が開始する行番号を指定します。プログラムの最初から開始するには0を指定して下さい。これはTPプ
ログラムに関してのみ有効です。

 pause_on_sft がTRUEなら、タスクは教示操作盤のシフトキーが離されると一時停止します。
 tp_motion がTRUEなら、タスクは教示操作盤が有効の間は動作を実行可能です。tp_motion がTRUEなら、TPは有効でなけ
ればなりません。
 tp_motion がTRUEで教示操作盤が有効になっていると、lock_mask に指定された動作グループの制御権は、親タスクから子
タスクに転送されます。グループ番号は1から制御装置で定義されている総グループ数の範囲にある必要があります。Bit 1
はグループ1を指定します。Bit2はグループ2を指定します。以下同様に続きます。

表A.19.16 Group_maskの設定
グループ 10進数 ビット
グループ1 1 1
グループ2 2 2
グループ3 4 3

複数のグループを指定するには、望みのグループに対応する、表A.19.16に示されている十進数の値を選択して下さい。そ
の後それらをOR演算子でつなげて下さい。例えばグループ1と3を指定するには"1 OR 4"を入力して下さい。

警告
制御装置に2つ以上の動作グループが定義されているなら、動作を実行するKARELプログラムを実行しないで下
さい。2つ以上の動作グループがある場合、全ての動作はTPプログラムから実行されねばなりません。さもない
と、ロボットが予期せぬ動作を行い、人を負傷させたり設備が損害を受ける可能性があります。

 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
CONT_TASK、PAUSE_TASK、ABORT_TASKビルトインプロシージャ、12章「マルチタスク」。
例:
B.7節「動的な表示を行うビルトインの使用」 (DYN_DISP.KL)を参照して下さい。詳細なプログラム例があります。

A.20 S

A.20.1 SAVEビルトインプロシージャ
目的:
プログラム又は変数を指定したファイルにセーブします。
構文:
SAVE (prog_nam, file_spec, status)
入出力パラメータ:
[in] prog_nam :STRING
[in] file_spec :STRING
[out] status :INTEGER
%ENVIRONMENT Group :MEMO
詳細:
 prog_nam はプログラム名を指定します。プログラム名が'*'ならば、指定されたタイプの全てのプログラム又は変数がセー
ブされます。全てのシステム変数をセーブするにはprog_nameを"*SYSTEM*" とする必要があります。
 file_spec はセーブするファイルのファイルデバイス、ファイル名、そしてファイルタイプを指定します。ファイルタイプ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 261 of 412

は、プログラム又は変数のどちらがセーブされるかも暗示しています。
以下のタイプが有効です。
.TP : TPプログラム
.VR : KAREL変数
.SV : システム変数
.IO : I/O 割付データ
 file_spec が既に指定のデバイスに存在するならば、エラーが返されてセーブされません。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
CLEAR、LOADビルトインプロシージャ
例:
詳細なプログラム例に関してはB.1節「デフォルトデバイスにデータをセーブする」(SAVE_VRS.KL)を参照して下さい。

A.20.2 SAVE_DRAMビルトインプロシージャ
目的:
RAM変数の内容をFlashROMにセーブします。
構文:
SAVE_DRAM (prog_nam, status)
入出力パラメータ:
[in] prog_nam: STRING
[out] status: INTEGER
%ENVIRONMENT Group: MEMO
詳細:
 prog_namはプログラム名を指定します。この操作は指定のプログラムに関し、DRAMに存在するあらゆる変数の内容を
FlashROMにセーブします。電源投入時に、これらのセーブされた値はDRAMに自動的にロードされます。
 statusは試みた操作の状態を説明します。0でないなら、エラーが発生しました。

A.20.3 SELECT ... ENDSELECT文


目的:
INTEGERの式の値に応じて、複数の連続した文のブロックのうちの一つを実行することを可能にします。
構文:
SELECT case_val OF
CASE(value{,value}):
{statement}
{ CASE(value{, value}):
{statement} }
<ELSE:
{ statement }>
ENDSELECT
ここで:
case_val : INTEGERの式
value : INTEGERの定数またはリテラル
statement : 有効なKARELの実行可能な文
詳細:
 case_val とCASEに続く値(value)が比較されます。それらのうちの一つと等しいならば、そのCASEと次の節の間のstatement
が実行されます。

 SELECT文中では1000個までのCASE節が使えます。
 同じINTEGERの値が2つ以上のCASEに有る場合は、最初に一致したCASEに続くstatementのみが実行されます。
 ELSE節が使われており、case_val がCASE節のいずれの値とも一致しないならば、ELSEとENDSELECTの間のstatementが実
行されます。
 ELSE節が使われておらず、case_val がCASE節のいずれの値とも一致しないならば、プログラムは「相当するケースがありま
せん」エラーで終了します。
参照:
付録E「文法図」:構文の情報があります。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.1節「デフォルトデバイスにデータをセーブする」 (SAVE_VR.KL)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 262 of 412

B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)
B.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)

A.20.4 SELECT_TPEビルトインプロシージャ
目的:
指定された名前のプログラムを選択します。
構文:
SELECT_TPE(prog_name, status)
入出力パラメータ:
[in] prog_name :STRING
[out] status : :INTEGER
%ENVIRONMENT Group :TPE
詳細:
 prog_name はデフォルトの教示操作盤のプログラムとして選択するプログラム名を指定します。これは教示操作盤によっ
て「使用中」のプログラムです。これはCYCCLE STARTボタンや教示操作盤のFWDキーが押された時に実行されるプログ
ラムでもあります。
 status は処理のステータスです。0以外ならばエラーが発生しました。
参照:
OPEN_TPEビルトインプロシージャ
例:
詳細なプログラム例に関してはB.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)を参照して下さい。

A.20.5 SEMA_COUNTビルトインプロシージャ
目的:
指定されたセマフォの現在の値を返します。
構文:
SEMA_COUNT (semaphore_no)
戻り値の型: INTEGER
入出力パラメータ:
[in] semaphore_no : INTEGER
%ENVIRONMENT Group :MULTI
詳細:

 semaphore_no で指示されたセマフォの値が返されます。
 この値は同じsemaphore_no を指定しているPOST_SEMAの呼びだし及びSIGNAL_SEMAPHOREアクションの実行の度に増
加します。PEND_SEMAを呼び出す度に減少します。
 SEMA_COUNTが0より大きいならば、PEND_SEMAは即座に「落下」します(次行が即座に実行されます)。-n (マイナス
n)ならば、n 個のタスクがこのセマフォ待ちです。
参照:
POST_SEMA、PEND_SEMA、CLEAR_SEMAビルトインプロシージャ、12章「マルチタスク」
例:
次の章の例を見て下さい:12章「マルチタスク」

A.20.6 SEMAPHOREコンディション
目的:
指定のセマフォの値を監視します。
構文:
SEMAPHORE[semaphore_no]
詳細:

 semaphore_no に使用するセマフォの番号を指定します。
 semaphore_no は1から制御装置で定義されたセマフォの数の範囲に無ければなりません。
 指示されたセマフォの値が0より大きいならば、コンディションは満たされます(TRUE)。

A.20.7 SEND_DATAPC ビルトインプロシージャ


目的:
イベントメッセージやその他のデータをPCに送信します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 263 of 412

構文:
SEND_DATAPC(event_no, dat_buffer, status)
入出力パラメータ:
[in] event_no :INTEGER
[in] dat_buffer :ARRAY OF BYTE
[out] status :INTEGER
%ENVIRONMENT Group :PC
詳細:

 event_no - GEMMイベント番号。有効な値は0から255です。
 dat_buffer - 244バイトまでの配列です。ビルトインADD_BYNAMEPC、ADD_INTPC、ADD_REALPC、ADD_STRINGPCを
使用してBYTEのバッファを特定のフォーマットにすることができます。実際のデータバッファのフォーマットはPC側の要
求に依存します。制御装置ではデータバッファのフォーマットに関するチェックは行いません。
 status - は処理のステータスです。0でないなら、エラーが発生しました。event requestはPCに送信されていません。
参照:
ADD_BYNAMEPC、ADD_INTPC、ADD_REALPC、ADD_STRINGPC
例:
以下の例はイベント12をデータバッファと共にPCに送信します。

例A.20.7 SEND_DATAPC ビルトインプロシージャ


PROGRAM TESTDATA
%ENVIRONMENT PC
CONST
er_abort = 2
VAR
dat_buffer: ARRAY[100] OF BYTE
index: INTEGER
status: INTEGER
BEGIN
index = 1
ADD_INTPC(dat_buffer,index,55,status)
ADD_REALPC(dat_buffer,index,123.5,status)
ADD_STRINGPC(dat_buffer,index,'YES',status)

-- send event 12 and data buffer to PC


SEND_DATAPC(12,dat_buffer,status)
IF status<>0 THEN
POST_ERR(status,'',0,er_abort)
ENDIF
END testdata

A.20.8 SEND_EVENTPCビルトインプロシージャ
目的:
イベントメッセージをPCに送信します。
構文:
SEND_EVENTPC(event_no, status)
入出力パラメータ:
[in] event_no :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PC
詳細:

 event_no - GEMMイベント番号。有効な値は0から255です。
 status - は処理のステータスです。0でないなら、エラーが発生しました。event requestはPCに送信されていません。
例:
以下の例はイベント12をPCに送ります。.
例A.20.8 SEND_EVENTPCビルトインプロシージャ
PROGRAM TESTEVT
%ENVIRONMENT PC
CONST

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 264 of 412

er_abort = 2
VAR
status: INTEGER
BEGIN
-- send event 12 to PC
SEND_EVENTPC(12,status) -- call built-in here
IF status<>0 THEN
POST_ERR(status,'',0,er_abort)
ENDIF
END testevt

A.20.9 SET_ATTR_PRGビルトインプロシージャ
目的:
指定されたTPプログラム又はKARELプログラムの属性データを設定します。
構文:
SET_ATTR_PRG(program_name, attr_number, int_value, string_value, status)
入出力パラメータ:
[in] program_name : STRING
[in] attr_number : INTEGER
[in] int_value : INTEGER
[in] string_value : STRING
[out] status : INTEGER
%ENVIRONMENT Group :TPE
詳細:

 program_name に属性データを設定するプログラムを指定します。
 attr_number は値を設定する属性です。以下の属性が有効です。
AT_PROG_TYPE : (#) プログラムのタイプ
AT_PROG_NAME : プログラム名(string[12])
AT_OWNER : オーナ(String[8])
AT_COMMENT : コメント(String[16])
AT_PROG_SIZE : (#) プログラムのサイズ
AT_ALLC_SIZE : (#) アロケートしたメモリのサイズ
AT_NUM_LINE : (#) 行数
AT_CRE_TIME : (#) 生成された(ロードされた)時間
AT_MDFY_TIME : (#) 修正時間
AT_SRC_NAME : ソースファイル名(またはオリジナルのファイル名) (String[128])
AT_SRC_VRSN ソースファイル:バージョン番号
AT_DEF_GROUP : デフォルトモーショングループ(タスクの属性となります)
AT_PROTECT : プロテクトコード; 1 :プロテクト OFF; 2 : プロテクト ON
AT_STK_SIZE : スタックサイズ(タスクの属性となります)
AT_TASK_PRI : タスクプライオリティ(タスクの属性となります)
AT_DURATION : タイムスライス時間(ファスクの属性となります)
AT_BUSY_OFF : ビジーランプオフ(タスクの属性となります)
AT_IGNR_ABRT : 終了無視(タスクの属性となります)
AT_IGNR_PAUS : 中断無視(タスクの属性となります)
AT_CONTROL : コントロールコード(タスクの属性となります)
(#) --- 設定できません

 属性データが数値ならば int_value に設定します。string_value は無視されます。
 属性データが文字列ならばstring_value に設定します。int_value は無視されます。
 status は処理のステータスです。0以外ならばエラーが発生しました。可能性のあるエラーを幾つか以下に挙げます。
7073 program_name に指定したプログラムが存在しません。
7093 プログラムの属性はそれが実行されている間は設定できません。
17033 attr_number は不正な値であるか、設定できませんでした。

A.20.10 SET_CURSORビルトインプロシージャ
目的:
ウィンドウ中でのカーソル位置を設定します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 265 of 412

構文:
SET_CURSOR(file_var, row, col, status)
入出力パラメータ:
[in] file_var : FILE
[in] row : INTEGER
[in] col : INTEGER
[out] status : INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 ウィンドウに対してオープンされている指定のファイルの現在のカーソル位置を設定します。その後のwriteが指定位置か
ら始まるようにします。
 file_var はウィンドウに対してオープンされている必要があります。

 row を1とするとウィンドウの先頭行の指定です。col を1とするとウィンドウの最も左の列の指定です。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
DEF_WINDOWビルトインプロシージャ
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.4節「位置データ設定及びモニタのプログラム」 (PTH_MOVE.KL)
B.10節「DISCTRL_ALPHAビルトインの使用」 (DCALP_EX.KL)

A.20.11 SET_EPOS_REGビルトインプロシージャ
目的:
XYZWPREXTの値を指定の位置レジスタに設定します。
構文:
SET_EPOS_REG(register_no, posn, status <, group_no>)
入出力パラメータ:
[in] register_no : INTEGER
[in] posn : XYZWPREXT
[out] status : INTEGER
[in] group_no :INTEGER
%ENVIRONMENT Group :REGOPE
詳細:

 register_no に値を設定する位置レジスタを指定します。
 posnのデータはXYZWPREXTの表現で設定されます。
 status は処理のステータスです。0でないならば、エラーが発生しました。
 group_no が省略されると、プログラムのデフォルトのグループが想定されます。他のグループのデータは変更されませ
ん。
 group_noを指定する場合、1から総グループ数の間とする必要があります。
参照:
SET_POS_REG、SET_JPOS_REGビルトインプロシージャ、GET_POS_REG、GET_JPOS_REGビルトインファンクション
例:
以下の例は指定されたレジスタに付加軸を含む位置データを設定します。

例A.20.11 SET_EPOS_REGビルトインプロシージャ
PROGRAM spe
%environment REGOPE
VAR
cur_pos: XYZWPREXT
posget: XYZWPREXT
status: INTEGER
v_mask, g_mask: INTEGER
reg_no: INTEGER
BEGIN
reg_no = 1
cur_pos = CURPOS(v_mask,g_mask)
SET_EPOS_REG(reg_no,cur_pos,status)
posget = GET_POS_REG(reg_no,status)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 266 of 412

END spe

A.20.12 SET_EPOS_TPEビルトインプロシージャ
目的:
XYZWPREXTの値を指定されたTPプログラムの位置に設定します。
構文:
SET_EPOS_TPE (open_id, position_no, posn, status <,group_no>)
入出力パラメータ:
[in] open_id : INTEGER
[in] position_no : INTEGER
[in] posn : XYZWPREXT
[out] status : INTEGER
[in] group_no : INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 open_id はOPEN済みのTPプログラムのものを指定します。このビルトインを呼ぶ前にプログラムをOPENしておく必要が
あります。
 position_no に値の格納先となるプログラム中の位置(イチ)を指定します。

 position_no を使用する動作文が既に教示されている必要があります。さもないとその位置はTPプログラムによって使用さ
れません。
 位置データは変換無しでXYZWPREXTの表現で設定されます。

 status は処理のステータスです。0でないならば、エラーが発生しました。
 group_no が省略されると、プログラムのデフォルトのグループが想定されます。他のグループのデータは変更されませ
ん。
 group_noを指定する場合、1から総グループ数の間とする必要があります。

A.20.13 SET_FILE_ATRビルトインプロシージャ
目的:
ファイルの属性をオープンする前に設定します。
構文:
SET_FILE_ATR(file_id,atr_type <,atr_value>)
入出力パラメータ:
[in] file_id: FILE
[in] atr_type : INTEGER expression
[in] atr_value : INTEGER expression
%ENVIRONMENT Group :PBCORE
詳細:

 file_id はOPEN FILE, WRITE, READ及び/またはCLOSE FILE文で使用されるファイル変数です。
 atr_type は設定する属性の種類を指定します。表7.3.1(a)に指定の定義済みの属性を指定して下さい。
 atr_value は指定した属性に応じたオプションのパラメータです。
参照:
SET_PORT_ATR ビルトインファンクション、7.3.1項「ファイル及びポートの属性設定」。

A.20.14 SET_FILE_POSビルトインプロシージャ
目的:
指定ファイルで次のREAD又はWRITEが発生するファイル位置を、新しく指定されたファイル位置に設定します。
構文:
SET_FILE_POS(file_id, new_file_pos, status)
入出力パラメータ:
[in] file_id : FILE
[in] new_file_pos : INTEGERの式
[out] status : INTEGER
%ENVIRONMENT Group :FLBT
詳細:
 file_id と関連付けられたファイルはオープンされている必要があります。FROMまたはRAMディスク上の非圧縮のファイ
ルである必要があります。さもないと、プログラムはエラーで終了します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 267 of 412

 new_file_pos は-1からファイル中のバイト数の範囲にある必要があります。at_eofを指定するとファイル位置がEnd of fileの


位置となります。at_sof とするとファイル位置がファイルの先頭となります。
 その他の値はファイル先頭から指定バイトの位置に設定します。
 status は、new_file_pos が-1からファイル中のバイト数の間にあり、ファイル位置の設定が成功したなら、0となります。0
でないなら、エラーが発生しました。
参照:
7章「ファイル入出力操作」

A.20.15 SET_INT_REGビルトインプロシージャ
目的:
整数値を指定のレジスタに設定します。
構文:
SET_INT_REG(register_no, int_value, status)
入出力パラメータ:
[in] register_no : INTEGER
[in] int_value : INTEGER
[out] status : INTEGER
%ENVIRONMENT Group :REGOPE
詳細:
 register_no にint_value を設定するレジスタを指定します。

 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
GET_INT_REG、GET_REAL_REG、SET_REAL_REGビルトインプロシージャ。
例:
詳細なプログラム例に関しては、B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)を参照して下さい。

A.20.16 SET_JPOS_REGビルトインプロシージャ
目的:
JOINTPOS型の値を指定の位置レジスタに格納します。
構文:
SET_JPOS_REG(register_no, jpos, status<, group_no>)
入出力パラメータ:
[in] register_no : INTEGER
[in] jpos : JOINTPOS
[out] status :INTEGER
[in] group_no :INTEGER
%ENVIRONMENT Group :REGOPE
詳細:

 register_no に位置jpos を設定する位置レジスタを指定します。
 位置データは変換無しでJOINTPOSの表現で設定されます。
 status は処理のステータスです。0でないなら、エラーが発生しました。
 group_no を省略すると、プログラムのデフォルトのグループが想定されます。他のグループのデータは変更されません。
 group_noを指定する場合、1から総グループ数の間とする必要があります。
参照:
GET_JPOS_REG、GET_POS_REG、SET_POS_REG、POS_REG_TYPEビルトインプロシージャ。
例:
B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)を参照して下さい。詳細なプログラム例があります。

A.20.17 SET_JPOS_TPEビルトインプロシージャ
目的:
JOINTPOS型の値を指定のTPプログラムの指定の位置に格納します。
構文:
SET_JPOS_TPE(open_id, position_no, posn, status<, group_no>)
入出力パラメータ:
[in] open_id : INTEGER
[in] position_no : INTEGER

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 268 of 412

[in] posn : JOINTPOS


[out] status : INTEGER
[in] group_no :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 open_id はOPEN済みのTPプログラムのものを指定します。このビルトインを呼ぶ前に、そのプログラムをOPEN_TPEビル
トインでRWアクセスでオープンしておく必要があります。

 position_no に値の格納先となるプログラム中の位置を指定します。
 位置データは変換無しでJOINTPOSの表現で設定されます。
 status は処理のステータスです。0でないならば、エラーが発生しました。
 group_no を省略すると、プログラムのデフォルトのグループが想定されます。他のグループのデータは変更されません。
 group_noを指定する場合、1から総グループ数の間とする必要があります。
参照:
GET_JPOS_TPE, GET_POS_TPE, SET_POS_TPE, GET_POS_TYPビルトインプロシージャ。
例:
詳細なプログラム例に関しては、B.11節「コピーしたTPプログラムにオフセットを加える」(CPY.TP.KL)を参照して下さい。

A.20.18 SET_LANGビルトインプロシージャ
目的:
現在の言語を変更します。
構文:
SET_LANG(lang_name, status)
入出力パラメータ:
[in] lang_name :STRING
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 lang_name 辞書を読み書きすべき言語を指定します。以下の定義済み定数の一つを指定して下さい。
dp_default
dp_english
dp_japanese
dp_french
dp_german
dp_spanish
 Read onlyのシステム変数$LANGUAGE が現在使用中の言語を示します。

 status は処理のステータスです。0でないなら、言語の設定でエラーが発生しました。
 指定の言語の辞書がロードされていないなら、エラー33003、「その言語の辞書が存在しません」が返ります。KCLのコマ
ンド「SHOW LANGS」を使ってシステムに生成されている言語を見ることができます。
参照:
9章「辞書とフォーム」
例:
詳細なプログラム例に関してはB.10節「DISCTRL_ALPHAビルトインの使用」 (DCALP_EX.KL)を参照して下さい。

A.20.19 SET_PERCHビルトインプロシージャ
目的:
あるグループの基準点の位置及びトレランスを設定します。
構文:
SET_PERCH(jpos, tolerance, indx)
入出力パラメータ:
[in] jpos : JOINTPOS
[in] tolerance : ARRAY[6] of REAL
[in] indx : INTEGER
%ENVIRONMENT Group :SYSTEM
詳細:

 jpos の値はラジアンに変換され、システム変数$REFPOS1[indx ].$perch_posに設定されます。
 tolerance の配列は度に変換され、システム変数$REFPOS1[indx ].$perchtolに設定されます。toleranceの配列が未初期化な
ら、エラーが発生します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 269 of 412

 indx は$REFPOS1の設定対象となる要素番号を指定します。

 軸のグループは指定の位置jpos で暗黙的に指定されます。JOINTPOSがグループ1でないならば、システム変数$REFPOSn
が使用されます。ここでnはjpos のグループ番号に相当します。indx は1である必要があります。

警告
制御装置に2つ以上の動作グループが定義されているなら、動作を実行するKARELプログラムを実行しないで下
さい。2つ以上の動作グループがある場合、全ての動作はTPプログラムから実行されねばなりません。さもない
と、ロボットが予期せぬ動作を行い、人を負傷させたり設備が損害を受ける可能性があります。

参照:
適切なアプリケーションの取扱説明書の基準点の設定を参照して下さい。
例:
以下の例では、$REFPOS1[2].$perchpos及び$REFPOS1[2].$perchtolがperch_pos 及びtolerance[i]に従って設定されています。
例A.20.19 SET_PERCHビルトインプロシージャ
PROGRAM SETPERCH
%NOLOCKGROUP
VAR
perch_pos: JOINTPOS IN GROUP[1]
idx : INTEGER
tolerance:ARRAY[6] OF REAL
BEGIN
perch_pos = CURJPOS(0,0,1)
FOR idx = 1 TO 6 DO
tolerance[idx] = 0.01
ENDFOR
SET_PERCH (perch_pos, tolerance, 2)
END SETPERCH

A.20.20 SET_PORT_ASGビルトインプロシージャ
目的:
I/Oの割り付けを設定します。1つまたはそれ以上の論理I/Oポートを指定の物理I/Oポートに割り当てます。
構文:
SET_PORT_ASG(log_port_type, log_port_no, rack_no, slot_no, phy_port_type, phy_port_no, n_ports, status)
入出力パラメータ:
[in] log_port_type : INTEGER
[in] log_port_no : INTEGER
[in] rack_no : INTEGER
[in] slot_no : INTEGER
[in] phy_port_type : INTEGER
[in] phy_port_no : INTEGER
[in] n_ports : INTEGER
[out] status : INTEGER
%ENVIRONMENT Group :IOSETUP
詳細:
 log_port_type に割付を行う論理I/Oポートの種類のコードを指定します。コードはKLIOTYPS.KLに定義されています。

 log_port_no に割付を行う論理I/Oの番号を指定します。
 rack_no にI/Oモジュールのラックを指定します。プロセスI/Oボード、メモリメージ、ダミーポートに関しては0です。
Allen-Bradley、Genius I/Oでは16です。
 slot_no にI/Oモジュールを含んでいるスロットを指定します。プロセスI/Oボードに関しては、SLC-2チェーン中での順番で
す。メモリメージ、ダミーポートに関しては0です。Allen-Bradley及びGeniusI/Oでは1です。
 phy_port_type に割付先となる物理I/Oポートの種類を指定します。これは多くの場合log_port_type と同じです。例外は
log_port_type がグループタイプ(io_gpin 又はio_gpout )である場合です。又はI/Oがメモリメージやダミーポートに割り付け
られる場合です。
 phy_port_no に割付先となる物理I/Oポートの番号を指定します。log_port_type がグループタイプなら、そのグループの最下
位ビットのI/O番号となります。
 n_ports に論理I/Oポートが割り付けられる物理I/Oポートの数を指定します。log_port_type がグループタイプの場合、
n_ports はグループ中のビット数を示します。デジタルI/Oの設定の場合、n_ports は設定している点数です。多くの場合これ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 270 of 412

は8です。しかし1から8が許されています。
 status はパラメータが有効なら0が返ります。さもなくば、エラーコードが返ります。もし指定されたポートが存在しない
か、log_port_type の phy_port_type への割付が認められていない場合、割付は不正です。

例えば、GINはDOUTに割付できません。log_port_type と phy_port_type のどちらもシステムI/Oポート(例えばSOPIN)にできませ


ん。


次の電源投入まで割付は効果がありません。

例:
以下の例では、DOUT[1]から[48]の割り付けを消去したのち、メモリメージに割りつけています。

例A.20.20 SET_PORT_ASGビルトインプロシージャ
PROGRAM setpasg
%ALPHABETIZE
%NOLOCKGROUP
%INCLUDE KLIOTYPS

CONST
SUCCESS = 0
UNASIGNED = 13007

VAR
port_n : INTEGER
STATUS :INTEGER
BEGIN
-- デジタル出力1から48の割り付けを削除します。
FOR port_n = 0 TO 5 DO
-- 0から5のindex付けは明白ではないかもしれません。
-- TPのデジタル出力の割付を見て下さい。8点のデジタル出力が
-- 一まとまりで割付されていることが分かるでしょう。
SET_PORT_ASG(IO_DOUT, port_n*8+1, 0, 0, 0, 0, 0, STATUS)
IF (STATUS <> SUCCESS) AND (STATUS <> UNASIGNED) THEN
-- SET_PORT_ASGによる削除が成功したことを確認(したが失敗している)。
WRITE ('SET_PORT_ASG built-in for DOUT (deletion) failed',CR)
WRITE ('Status = ',STATUS,CR)
ENDIF
ENDFOR
-- デジタル出力ポート1から48をメモリメージとして割付
FOR port_n = 0 TO 5 DO
SET_PORT_ASG(IO_DOUT, port_n*8+1, 0, 0, io_mem_boo, port_n*8+1, 8, STATUS)
IF (STATUS <> 0 ) THEN -- SET_PORT_ASGが成功したか確認
WRITE ('SET_PORT_ASG built-in for DOUT (assignment) failed',CR)
WRITE ('Status = ',STATUS,CR)
ENDIF
ENDFOR
-- DOUT[1]を二律背反とします。
-- DOUT[1]が二律背反モードになると、DOUT[1]とDOUT[2]は常に互いに反対の値を示します。
SET_PORT_MOD(io_dout, 1, 2, STATUS)
IF (STATUS <> SUCCESS) THEN
WRITE ('SET_PORT_MODE Failed on port ',1,CR)
WRITE ('With Status = ',STATUS,CR)
ENDIF
-- DOUT[3]を極性反転とします。
SET_PORT_MOD(io_dout, 3, 1, STATUS)
IF (STATUS <> SUCCESS) THEN
WRITE ('SET_PORT_MODE Failed on port ',3,CR)
WRITE ('With Status = ',STATUS,CR)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 271 of 412

ENDIF

-- DOUT[1]にコメントを設定します。
SET_PORT_CMT(IO_DOUT, 1, 'Equip-READY ',STATUS)
IF (STATUS <> 0 ) THEN -- SET_PORT_CMTが成功したか確認
WRITE ('SET_PORT_CMT built-in failed',CR)
WRITE ('Status = ',STATUS,CR)
ENDIF
-- TPのユーザ画面をクリアします。
-- デフォルトでTPDISPLAYがクリアされます。
WRITE (CHR(128),CHR(137))
-- TPの表示をユーザ画面とします。
FORCE_SPMENU(TP_PANEL,SPI_TPUSER,1)
-- メッセージを表示します。
WRITE ('PORT SETUP IS COMPLETE',CR)
WRITE ('AT THIS POINT YOU NEED TO COLD START',CR)
WRITE ('Configuration changes of PORTs will not',CR)
WRITE ('take effect until after a COLD START.',CR,CR)
WRITE ('Once the controller is ready after',CR)
WRITE ('COLD START, re-load this program',CR)
WRITE ('rerun.',CR)
ABORT
END setpasg

A.20.21 SET_PORT_ATRビルトインファンクション
目的:
ポートの属性を設定します。
構文:
SET_PORT_ATR(port_id, atr_type, atr_value)
戻り値の型: INTEGER
入出力パラメータ:
[in] port_id : INTEGER
[in] atr_type : INTEGER
[in] atr_value : INTEGER
%ENVIRONMENT Group :FLBT
詳細:
 port_id は以下の定義済みの定数のいずれかです。
port_1
port_2
port_3
port_4
 atr_type は設定する属性の種類を設定します。以下の定義済み定数の一つを使用して下さい。
atr_readahd :先読みバッファ
atr_baud :ボーレート
atr_parity :パリティ
atr_sbits :Stop bits
atr_dbits :データ長
atr_xonoff :XON/XOFF
atr_eol :行の終了(End of line)
 atr_value は設定する属性値を指定します。許容される定義済みの属性タイプと対応する値に関しては、以下の表A.20.21を
ご覧下さい。

表A.20.21属性値
ATR_TYPE ATR_VALUE
atr_readahd 任意の変数。128バイトの倍数を表します。(例えば、atr_value=1はバッファ長128バイトです)

atr_baud baud_9600
baud_4800

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 272 of 412

baud_2400
baud_1200
parity_none
atr_parity parity_even
parity_odd
sbits_1
atr_sbits sbits_15
sbits_2
dbits_5
dbits_6
atr_dbits
dbits_7
dbits_8
xf_not_used
atr_xonoff
xf_used
atr_eol ASCIIコードの値。付録D「文字コード」を参照して下さい。

 戻り値のINTEGERはポートに対するアクションのstatusです。
参照:
SET_FILE_ATRビルトインプロシージャ、7.3.1項「ファイル及びポートの属性設定」。
例:
GET_PORT_ATRビルトインファンクションの例を参照して下さい。

A.20.22 SET_PORT_CMTビルトインプロシージャ
目的:
教示操作盤に表示される、指定の論理I/Oポートのコメントを設定します。
構文:
SET_PORT_CMT(port_type, port_no, comment_str, status)
入出力パラメータ:
[in] port_type : INTEGER
[in] port_no : INTEGER
[in] comment_str : STRING
[out] status : INTEGER
%ENVIRONMENT Group :IOSETUP
詳細:

 port_type にコメントを設定するI/Oポートの種類を指定します。コードはKLIOTYPS.KLに定義されています。
 port_no にコメントを設定するI/O番号を指定します。
 comment_str は指定のI/Oポートに設定するコメントです。16文字を超えてはなりません。
 status はパラメータが有効で指定のI/Oポートにコメントが設定できたなら0が返ります。
参照:
SET_PORT_VALUE、SET_PORT_MOD、GET_PORT_CMT、GET_PORT_VALUE、GET_PORT_MODビルトインプロシー
ジャ。
例:
SET_PORT_ASGビルトインプロシージャの例を参照して下さい。

A.20.23 SET_PORT_MODビルトインプロシージャ
目的:
KARELプログラムで指定の論理I/Oポートの特殊なモードを設定(またはリセット)可能とします。
構文:
SET_PORT_MOD(port_type, port_no, mode_mask, status)
入出力パラメータ:
[in] port_type : INTEGER
[in] port_no : INTEGER
[in] mode_mask : INTEGER
[out] status : INTEGER
%ENVIRONMENT Group :IOSETUP
詳細:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 273 of 412


 port_type にモードを設定するI/Oポートの種類を指定します。コードはKLIOTYPS.KLに定義されています。
 port_no にモードを設定するI/O番号を指定します。
 mode_mask はどのモードが有効になるか指定するマスクです。以下のモードが定義されています。

表A.20.23 mode_mask
mode_mask及びモード 説明
I/Oの意味が逆になります。I/OがTRUEになると物理的な出力はFALSEになります。I/Oが
1 :リバースモード(極性反転) FALSEになると、物理的な出力はTRUEになります。入力を読んだ時に物理的な入力がTRUEな
ら、FALSEが返ります。入力を読んだ時に物理的な入力がFALSEなら、TRUEが返ります。
値が補完的な2つの物理I/Oポートに論理I/Oポートが割り付けられています。この場合、port_no
は奇数である必要があります。I/O nがTRUEになるとI/O nがTRUEになり、I/O n+1はFALSEに
2 :二律背反モード
なります。I/O n がFALSEになると、I/O nがFALSEになり、I/O n+1はTRUEとなります。出力で
のみ効果があります。


モードの設定は次の電源投入まで効果がありません。

 status にはパラメータが有効で指定のI/Oポートにモードを設定できたなら0が返ります。
例:
SET_PORT_ASGビルトインプロシージャの例を参照して下さい。

A.20.24 SET_PORT_SIMビルトインプロシージャ
目的:
I/Oポートを擬似とします。
構文:
SET_PORT_SIM(port_type, port_no, value, status)
入出力パラメータ:
[in] port_type : INTEGER
[in] port_no : INTEGER
[in] value : INTEGER
[out] status : INTEGER
%ENVIRONMENT Group :IOSETUP
詳細:

 port_type に擬似とするI/Oポートの種類をコードで指定します。コードはKLIOTYPS.KLに定義されています。
 port_no に擬似とするI/Oポートの番号を指定します。
 value に設定する初期値を指定します。
 status にはI/Oポートが擬似になったら0が返ります。
参照:
SET_PORT_ASG、GET_PORT_ASG、GET_PORT_SIMビルトインプロシージャ

A.20.25 SET_PORT_VALビルトインプロシージャ
目的:
指定の出力信号(又は擬似となった入力信号)の値を設定します。
構文:
SET_PORT_VAL(port_type, port_no, value, status)
入出力パラメータ:
[in] port_type : INTEGER
[in] port_no : INTEGER
[in] value : INTEGER
[out] status : INTEGER
%ENVIRONMENT Group :IOSETUP
詳細:

 port_type に設定するI/Oポートの種類を指定します。コードはKLIOTYPS.KLに定義されています。
 port_no に設定するI/O番号を指定します。
 value に設定する値を指定します。port_type がBOOLEAN型(即ちDOUTの様な信号)ならば、0( = OFF)または1( = ON)として
下さい。擬似になっていれば、このフィールドは入力信号でも使用可能です。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 274 of 412

 status にはパラメータが有効で指定のI/Oポートが設定できたなら0が返ります。
参照:
SET_PORT_VALUE、SET_PORT_MOD、GET_PORT_CMT、GET_PORT_VALUE、GET_PORT_MODビルトインプロシージャ
例:
以下の例は指定のI/Oポートに値を設定しています。

例A.20.25 SET_PORT_VALビルトインプロシージャ
PROGRAM setpval
%ENVIRONMENT IOSETUP
%INCLUDE kliotyps

VAR
stvl_stat:INTEGER
ROUTINE set_value(port_type: INTEGER;
port_no: INTEGER;
g_value: BOOLEAN): INTEGER
VAR
value: INTEGER
status: INTEGER
BEGIN
IF g_value THEN
value = 1
ELSE
value = 0;
ENDIF
SET_PORT_VAL (port_type, port_no, value, status)
RETURN (status)
END set_value
BEGIN
-- Turn ON DOUT[5]
stvl_stat = set_value(io_dout,5, ON)
END setpval

A.20.26 SET_POS_REGビルトインプロシージャ
目的:
XYZWPR型の値を指定の位置レジスタに設定します。
構文:
SET_POS_REG(register_no, posn, status<, group_no>)
入出力パラメータ:
[in] register_no : INTEGER
[in] posn : XYZWPR
[out] status : INTEGER
[in] group_no : INTEGER
%ENVIRONMENT Group :REGOPE
詳細:

 register_no に値を格納する位置レジスタを指定します。
 位置データは変換無しでXYZWPRの表現で設定されます。
 status は処理のステータスです。0でないなら、エラーが発生しました。
 group_no を省略すると、プログラムのデフォルトのグループが想定されます。他のグループのデータは変更されません。
 group_noを指定する場合、1から総グループ数の間とする必要があります。
例:
B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)を参照して下さい。詳細なプログラム例があります。

A.20.27 SET_POS_TPEビルトインプロシージャ
目的:
XYZWPRの値を指定されたTPプログラムの位置に設定します。
構文:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 275 of 412

SET_POS_TPE(open_id, position_no, posn, status<, group_no>)


入出力パラメータ:
[in] open_id : INTEGER
[in] position_no : INTEGER
[in] posn : XYZWPR
[out] status : INTEGER
[in] group_no : INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 open_id はOPEN済みのTPプログラムのものを指定します。このビルトインを呼ぶ前に、そのプログラムをOPEN_TPEビル
トインでRWアクセスでオープンしておく必要があります。

 position_no は値の格納先となるプログラム中の位置を指定します。
 position_no を使用する動作文が既に教示されている必要があります。さもないとその位置はTPプログラムによって使用さ
れません。

 位置データは変換無しでXYZWPRの表現で設定されます。
 status は処理のステータスです。0でないならば、エラーが発生しました。
 group_no を省略すると、プログラムのデフォルトのグループが想定されます。他のグループのデータは変更されません。
 group_noを指定する場合、1から総グループ数の間とする必要があります。
例:
詳細なプログラム例に関してはB.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)を参照して下さい。

A.20.28 SET_PREG_CMTビルトインプロシージャ
目的:
指定の番号の位置レジスタにコメントを設定します。
構文:
SET_PREG_CMT (register_no, comment_string, status)
入出力パラメータ:
[in] register_no: INTEGER
[in] comment_string: STRING
[out] status: INTEGER
%ENVIRONMENT group: REGOPE

A.20.29 SET_REAL_REGビルトインプロシージャ
目的:
REALの値を指定のレジスタに設定します。
構文:
SET_REAL_REG(register_no, real_value, status)
入出力パラメータ:
[in] register_no : INTEGER
[in] real_value : REAL
[out] status : INTEGER
%ENVIRONMENT Group :REGOPE
詳細:

 register_no にreal_value を格納するレジスタを指定します。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
SET_INT_REG、GET_REAL_REG、GET_INT_REGビルトインプロシージャ

A.20.30 SET_REG_CMTビルトインプロシージャ
目的:
指定の番号のレジスタにコメントを設定します。
構文:
SET_REG_CMT (register_no, comment_string, status
入出力パラメータ:
[in] register_no: INTEGER
[in] comment_string: STRING

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 276 of 412

[out] status: INTEGER


%ENVIRONMENT group REGOPE
詳細:

 Register_noにコメントを設定するレジスタを指定します。
 comment_stringに設定するコメントを指定します。
 comment_stringが16文字を超えると、このビルトインはその文字列を短縮します。

A.20.31 SET_SREG_CMTビルトインプロシージャ
目的:
指定の文字列レジスタのコメントを設定します。

文字列レジスタは7DA5系列以降でのみ使用可能です。

構文:
GET_STR_REG(register_no, value, status)
入出力パラメータ:
[in] register_no :INTEGER
[in] value :STRING
[out] status :INTEGER
詳細:

 register_noにコメントを設定する文字列レジスタの番号を指定します。
 commentに文字列レジスタのコメントを設定します。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
GET_SREG_CMT、SET_STR_REG、SET_SREG_CMTビルトインプロシージャ

A.20.32 SET_STR_REGビルトインプロシージャ
目的:
指定の文字列レジスタの文字列を設定します。

文字列レジスタは7DA5系列以降でのみ使用可能です。

構文:
SET_STR_REG(register_no, value, status)
入出力パラメータ:
[in] register_no :INTEGER
[in] value :STRING
[out] status :INTEGER
詳細:

 register_noに文字列レジスタの番号を指定します。
 value に文字レジスタに入れる文字列を設定します。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
GET_STR_REG、GET_SREG_CMT、SET_SREG_CMTビルトインプロシージャ

A.20.33 SET_TIMEビルトインプロシージャ
目的:
システムの時間を設定します。
構文:
SET_TIME(i)
入出力パラメータ:
[in] i : INTEGER
%ENVIRONMENT Group :TIM
詳細:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 277 of 412

 i にはシステム内の時間に相当するINTEGERの値を設定する必要があります。この値は以下のような32bitのINTEGERで表
現されます。
表A.20.33時刻の32bit整数の表現
ビット 意味
31–25 年
24–21 月
20–16 日付
15–11 時間
10–5 分
4–0 秒

 各フィールドの内容は以下の通りです。

 日付:
Bits 15-9 — 1980以降の年
Bits 8-5 —月(1-12)
Bits 4-0 — (1月の中の)日
 時間:
Bits 31-25 — 時間の数値(0-23)
Bits 24-21 — 分の数値(0-59)
Bits 20-16 — 2秒毎に増える数値(0-29)

 この値はGET_TIME及びCNV_STR_TIMEビルトインを用いて決定できます。
 i が0なら、システムの時間は変更されません。
 INTEGERの値を比較してある時刻が他の時刻より新しいかどうか決定できます。
参照:
CNV_STR_TIME、GET_TIMEビルトインプロシージャ
例:
以下の例はユーザが「DD-MMM-YYY HH:MM:SS」形式で入力したSTRING変数str_time を、INTEGERでの時間の表現int_time
に、CNV_STR_TIMEビルトインを使って変換します。その後SET_TIMEを使ってシステム内の時間をint_time 指定の時間に設定
しています。

例A.20.33 SET_TIMEビルトインプロシージャ
WRITE('Enter the new time : ')
READ(str_time)
CNV_STR_TIME(str_time,int_time)
SET_TIME(int_time)

A.20.34 SET_TPE_CMTビルトインプロシージャ
目的:
TPプログラムの指定の位置のコメントを設定します。
構文:
SET_TPE_CMT(open_id, pos_no, comment, status)
入出力パラメータ:
[in] open_id :INTEGER
[in] pos_no :INTEGER
[in] comment :STRING
[out] status :INTEGER
%ENVIRONMENT Group :TPE
詳細:
 open_id にOPEN_TPEの呼び出しから返されたopen_idを指定します。OPEN_TPEの呼び出しではオープンモード
TPE_RWACCを使用する必要があります。

 pos_id にコメントを設定するTPプログラム中の位置番号を指定します。指定の位置は記録されている必要があります。
 comment は指定の位置に関連付けるコメントです。長さ0の文字列を使って確実に位置がコメントを持たないようにできま
す。文字列が16文字を超えると、それは短縮されて使用されwarningエラーが返ります。
 status 操作が成功したなら0が返ります。さもなくばエラーコードが設定されます。
参照:
GET_TPE_CMT及びOPEN_TPE ビルトインプロシージャ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 278 of 412

A.20.35 SET_TRNS_TPEビルトインプロシージャ
目的:
POSITION型の位置を指定のTPプログラムの指定の位置に設定します。
構文:
SET_TRNS_TPE(open_id, position_no, posn, status<, group_no>)
入出力パラメータ:
[in] open_id : INTEGER
[in] position_no : INTEGER
[in] posn : POSITION
[out] status : INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 open_id はOPEN済みのTPプログラムのものを指定します。このビルトインを呼ぶ前にプログラムをOPENしておく必要が
あります。
 position_no にposn で指定された値を格納するプログラム中の位置を指定します。他のグループのデータは変更されませ
ん。
 位置データは変換無しでPOSITIONの表現で設定されます。

 status は処理のステータスです。0でないならば、エラーが発生しました。
 group_no を省略すると、プログラムのデフォルトのグループが想定されます。他のグループのデータは変更されません。
 group_noを指定する場合、1から総グループ数の間とする必要があります。

A.20.36 SET_TSK_ATTRビルトインプロシージャ
目的:
指定された実行中のタスクの属性値を指定します。
構文:
SET_TSK_ATTR(task_name, attribute, value, status)
入出力パラメータ:
[in] task_name : STRING
[in] attribute : INTEGER
[in] value : INTEGER
[out] status : INTEGER
%ENVIRONMENT Group :PBCORE
詳細:

 task_name は指定された実行中のタスクの名前です。空白のtask_name は呼び出しているタスクを指定します。
 attribute は値を設定するタスクの属性です。以下の属性が有効です。
TSK_PRIORITY :プライオリティ。値の情報については%PRIORITYをご覧下さい。
TSK_TIMESLIC :タイムスライス時間。値の情報については%TIMESLICEをご覧下さい。
TSK_NOBUSY :ビジーランプオフ。%NOBUSYLAMPをご覧下さい。
TSK_NOABORT :終了無視の要請
Pg_np_error :エラーで終了しない
Pg_np_cmd :コマンドで終了しない。
TSK_NOPAUSE :中断無視の要請
pg_np_error :エラーで中断しない
pg_np_end :コマンドで中断しない。
pg_np_tpenb :TP有効で中断しない
TSK_TRACE :トレース有効
TSK_TRACELEN :トレース時に格納できる最大の行数
TSK_TPMOTION :TP動作有効。値の情報については%TPMOTIONをご覧下さい。
TSK_PAUSESFT :シフト(の開放)で中断します。%NOPAUSESHFTの反対です。

 value は設定する属性に依存します。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
GET_TSK_INFOビルトインプロシージャ
例:
12章「マルチタスク」の例を参照して下さい。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 279 of 412

A.20.37 SET_TSK_NAMEビルトインプロシージャ
目的:
指定のタスクのタスク名を設定します。
構文:
SET_TSK_NAME(old_name, new_name, status)
入出力パラメータ:
[in] old_name : STRING
[in] new_name : STRING
[out] status : INTEGER
%ENVIRONMENT Group :MULTI
詳細:
 old_name は興味のあるタスクの名称です。空白のold_name は呼び出しているタスクを指定します。

 new_name が新しいタスク名になります。
 status は処理のステータスです。0でないなら、エラーが発生しました。
参照:
GET_ATTR_PRGビルトインプロシージャ


タスク名は通常起動されたプログラム名です。SET_TSK_NAMEでの変更はデバッグを困難にする可能性、トラ
ブルを招く可能性が高いです。使用しないで下さい。

A.20.38 SET_VARビルトインプロシージャ
目的:
KARELプログラムで指定の変数の値を設定することを可能とします。
構文:
SET_VAR(entry, prog_name, var_name, value, status)
入出力パラメータ:
[in,out] entry : INTEGER
[in] prog_name : STRING
[in] var_name : STRING
[in] value : PATH以外の任意の有効なデータ型
[out] status : INTEGER
%ENVIRONMENT Group :SYSTEM
詳細:
 entry にはvar_name が存在しているデバイス中での、変数データテーブル中のvar_name のエントリー番号が返ります。こ
の変数を修正しないで下さい。
 prog_name に指定の変数を持つプログラム名を指定します。prog_name が''なら、現在実行されているタスク名となりま
す。prog_nameはrobot ring中のロボットのシステム変数にもアクセス可能です。

 システム変数を設定するならprog_name を'*SYSTEM*' に設定して下さい。
 var_name は静的変数を参照する必要があります。
 var_name は構造体のメンバ、配列の添え字を含めることが可能です。
 var_name とvalueの両方が配列ならば、コピーされる要素の数は二つの配列のうち小さい方のサイズと同じです。
 var_name とvalueの両方がSTRINGならば、コピーされる文字数は小さい方のサイズと同じです。
 var_name とvalueの両方が同じ型の構造体ならば、value はvar_name の厳密なコピーです。
 var_name の変数にvalue が設定されます。
 value が未初期化ならば、var_name の値は未初期化となりstatus は12311に設定されます。value は呼び出しているプログラ
ム中の静的変数である必要があります。
 status は処理のステータスです。0でないなら、エラーが発生しました。

注意
SET_VARを使用してシステム変数を修正すると予期せぬ結果を生む可能性があります。

例:
例A.20.38はSET_VARを用いて他のプログラムの変数を設定しています。

例A.20.38 SET_VARビルトインプロシージャ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 280 of 412

--
-- SET_VARの例。
-- DO[1]がONなら[STVAR01A]int_valを1とします。
-- DO[1]がOFFなら[STVAR01B]int_valを0とします。
PROGRAM STVAR01
%NOLOCKGROUP
CONST
SUCCESS = 0
VAR
entry : INTEGER
int_val : INTEGER
status : INTEGER
prog_name: STRING[MAX_PROG_NAM]
BEGIN
IF DOUT[1] = ON then
prog_name = 'STVAR01A'
int_val = 1
ELSE
prog_name = 'STVAR01B'
int_val = 0
ENDIF
SET_VAR(entry, prog_name, 'int_val', int_val, status)
if status <> SUCCESS then
POST_ERR(status, '',0,0)
ENDIF
END STVAR01

A.20.39 %SHADOWVARSトランスレータディレクティブ
目的:
このディレクティブは全ての変数をデフォルトでSHADOWに作成するよう指定します。
構文:
%SHADOWVARS

A.20.40 SHORTデータ型
目的:
変数をSHORTデータ型として定義します。
構文:
SHORT
詳細:
 SHORTは(-32768 <= n >= 32766)の範囲の2バイトとして定義されます。(32767)を代入されたSHORT は未初期化とみなされ
ます。

 SHORTは配列や構造体の中でのみ許されます。
 SHORTはBYTE、INTEGERに代入可能です。BYTEとINTEGERをSHORTに代入可能です。SHORTの範囲外に有る値が代入
されると実行中に検出され、プログラムが終了します。

A.20.41 SIGNAL EVENTアクション


目的:
指定番号のイベントの発生を通知します。モニタのコンディションを満たす可能性やプログラムの待機を解除する可能性があ
ります。
構文:
SIGNAL EVENT[event_no]
ここで:
event_no : INTEGERの式
詳細:
 SIGNAL_EVENTアクションを使用して、ユーザが定義したイベントの発生したことを示すこと可能です。

 event_no にイベント番号を指定します。イベントの発生は記憶されません。あるWHEN節の唯一の監視条件がそのイベン

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 281 of 412

トである場合、対応するアクションが実行されます。
 他の条件が指定されていて、イベント通知時に満たされていないと、アクションは実行されません。別の時間に他の条件
が成立したとしてもです。
 event_no は-32768から32767の範囲にある必要があります。さもないと、プログラムはエラーで終了します。
参照:
EVENTコンディション
例:
以下の例はCONDITION[1]でDOUT[1]=ONを検出します。そのアクションによりEVENT[1]を発生させています。

例A.20.41 SIGNAL EVENTアクション


PROGRAM SIG_EV
%NOLOCKGROUP

BEGIN
DOUT[1] = OFF
DOUT[3] = OFF
CONDITION[1]:
WHEN DOUT[1]=ON DO
SIGNAL EVENT[1]
ENDCONDITION

CONDITION[2]:
WHEN EVENT[1] DO
DOUT[3] = ON
ENDCONDITION

ENABLE CONDITION[1]
ENABLE CONDITION[2]

WAIT FOR DOUT[3] = ON


-- TPの表示をユーザ画面とします。
FORCE_SPMENU(TP_PANEL,SPI_TPUSER,1)
WRITE('SIG_EV FINISHED',CR)
END SIG_EV

A.20.42 SIGNAL EVENT文


目的:
指定番号のイベントの発生を通知します。モニタのコンディションを満たす可能性やプログラムの待機を解除する可能性があ
ります。
構文:
SIGNAL EVENT [event_no]
ここで:
event_no : INTEGER
詳細:
 SIGNAL_EVENT文を使用して、ユーザが定義したイベントの発生したことを示すこと可能です。

 event_no にイベント番号を指定します。イベントの発生は記憶されません。あるWHEN節の唯一の監視条件がそのイベン
トである場合、対応するアクションが実行されます。
 他の条件が指定されていて、イベント通知時に満たされていないと、アクションは実行されません。別の時間に他の条件
が成立したとしてもです。
 event_no は-32768から32767の範囲にある必要があります。さもないと、プログラムはエラーで終了します。
参照:
付録E「文法図」(構文の情報があります)、EVENT コンディション
例:
DISABLE CONDITION文のプログラム例を参照して下さい。

A.20.43 SIGNAL SEMAPHOREアクション


目的:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 282 of 412

指示されたセマフォの値に1を加えます。
構文:
SIGNAL SEMAPHORE[semaphore_no]
ここで:
semaphore_no : INTEGERの式
詳細:

 semaphore_no で指示されたセマフォを1増やします。
 semaphore_no は1から制御装置で定義されたセマフォの数の範囲に無ければなりません。
参照:
12.7節「タスク間通信」:詳細と例が記載されています。

A.20.44 SINビルトインファンクション
目的:
指定された引数の角度のサインを返します。
構文:
SIN(angle)
戻り値の型: REAL
入出力パラメータ:
[in] angle : REAL
%ENVIRONMENT Group :SYSTEM
詳細:

 angle に角度を度で指定します。
 angle は± 18000度の範囲にある必要があります。さもないとプログラムはエラーで終了します。
 0,180度相当の値で非常な小さい値となり、0とならない場合があります。0とみなすか否かは必要に応じて判断して下さ
い。
例:
TANビルトインファンクションの例を参照して下さい。

A.20.45 SQRTビルトインファンクション
目的:
指定されたREALの引数の正の平方根の値を返します。
構文:
SQRT(x)
戻り値の型: REAL
入出力パラメータ:
[in] x : REAL
%ENVIRONMENT Group :SYSTEM
詳細:
 x は負であってはなりません。さもないとプログラムはエラーで終了します。
例:
以下の例は式(a*a+b*b)の平方根を計算し、これが三角形の三角形の斜辺であると示します。

例A.20.45 SQRTビルトインファンクション
c = SQRT(a*a+b*b)
WRITE ('The hypotenuse of the triangle is ',c::6::2)

A.20.46 %STACKSIZEトランスレータディレクティブ
目的:
スタックサイズをロングワードで指定します。
構文:
%STACKSIZE = n
詳細:

 n はスタックサイズです。
 n のデフォルト値は300(1200バイト)です。
参照:
5.1.6項「スタックの使用量」:スタックサイズの計算の情報が記載されています。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 283 of 412

A.20.47 STRINGデータ型
目的:
変数、またはルーチンのパラメータをSTRINGデータ型として定義します。
構文:
STRING[length]
ここで:
length : INTEGERのリテラル又は定数
詳細:

 length は文字列の物理的な長さです。STRING変数向けにアロケートされている空間の最大文字数を示します。
 length は1から254の範囲にある必要があります。STRING変数の宣言で指定されている必要があります。
 length の値はSTRINGのルーチンパラメータを宣言する時には使いません。任意の長さのSTRINGをパラメータに渡すこと
ができます。
 STRING変数に、その変数の長さよりも長いSTRINGの代入を試みるとします。この場合STRINGの値は右側で短縮され
て、STRING変数の長さになります。

 STRINGの式のみがSTRING変数に代入可能で、STRINGのパラメータに渡すことができます。
 STRINGはファンクションから返すことはできません。
 有効なSTRINGの演算子は以下の通りです。
 関係演算子(>, >=, =, <>, <, <=)
 連結演算子(+)
 STRINGのリテラルは、単一引用符(アポストロフィ)で囲まれた一連のASCII文字からなります。以下の表に例を示しま
す。
表A.20.47 STRINGのリテラルの例
有効 無効 理由
`123456' 123456 引用符無しでは123456はINTEGERのリテラルです。

例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.1節「デフォルトデバイスにデータをセーブする」 (SAVE_VR.KL)
B.5節「ファイルとプログラムのリスト作成及び文字列操作」 (LIST_EX.KL)
B.6節「ファイルとファイルデバイスのビルトインの使用」 (FILE_EX.KL)
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)
B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)
B.10節「DISCTRL_ALPHAビルトインの使用」 (DCALP_EX.KL)
B.11節「コピーしたTPプログラムにオフセットを加える」(CPY_TP.KL)

A.20.48 STR_LENビルトインファンクション
目的:
引数で指定されたSTRINGの現在の長さを返します。
構文:
STR_LEN(str)
戻り値の型: INTEGER
入出力パラメータ:
[in] str : STRING
%ENVIRONMENT Group :SYSTEM
詳細:
 戻り値は引数str に現在格納されているSTRINGの長さです。そのSTRINGの宣言にある、最大長ではありません。
例:
詳細なプログラム例に関しては、B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)を参照して下さい。

A.20.49 STRUCTUREデータ型
目的:
ユーザ定義の構造体としてデータ型を定義します。
構文:
new_type_name = STRUCTURE
field_name_1: type_name_1

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 284 of 412

field_name_2: type_name_2
...
ENDSTRUCTURE
詳細:
 ユーザ定義の構造体は構成要素のフィールドのリストからなるデータ型です。各フィールドには標準的なデータ型、定義
済みの別のユーザデータ型のいずれも使用可能です。
 ユーザ定義型の変数を持つプログラムがロードされる時、これらの型の定義が以前に作成された定義に対してチェックさ
れます。存在しない場合は、生成されます。
 以下のデータ型は構造体の一部としては許されていません。
 STRUCTUREの定義(構造体として宣言されているデータ型は許されます)
 FILE型
 可変長配列
 データ型それ自身、もしくは直接間接を問わずそれを含む型
 変数は構造体(STRUCTURE)として定義できません。しかし構造体として定義済みのデータ型としては定義可能です。
参照:
2.4.2項「ユーザ定義構造体」

A.20.50 SUB_STRビルトインファンクション
目的:
引数で指定されたSTRINGの一部のコピーを返します。
構文:
SUB_STR(src, strt, len)
戻り値の型: STRING
入出力パラメータ:
[in] src : STRING
[in] strt : INTEGER
[in] len : INTEGER
%ENVIRONMENT Group :SYSTEM
詳細:

 このファンクションはsrc の部分文字列を返します。
 部分文字列の長さは文字列の数です。それはlen で指定されます。strt によりインデックスで指定される位置から始まりま
す。
 strt は正である必要があります。さもないと、プログラムはエラーで終了します。strt がsrc の長さより大きいなら、空の文
字列が返ります。
 len は正である必要があります。さもないと、プログラムはエラーで終了します。len が戻り値を格納するSTRINGの宣言長
より長いならば、戻り値のSTRINGはそれに収まるように短縮されます。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.5節「ファイルとプログラムのリスト作成及び文字列操作」 (LIST_EX.KL)
B.6節「ファイルとファイルデバイスのビルトインの使用」 (FILE_EX.KL)

A.21 T

A.21.1 TANビルトインファンクション
目的:
引数で指定のREALのタンジェントの値を返します。
構文:
TAN(angle)
戻り値の型: REAL
入出力パラメータ:
[in] angle : REAL
%ENVIRONMENT Group :SYSTEM
詳細:
 angle の値は± 18000 度の範囲にある必要があります。さもないとプログラムはエラーで終了します。
例:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 285 of 412

以下の例はTANビルトインファンクションを使って変数angle のタンジェントを特定しています。そのタンジェントはSIN
( angle )をCOS( angle )で割ったものと等しいはずです。

例A.21.1 TANビルトインファンクション
PROGRAM ex_tan
%NOLOCKGROUP
VAR
angle : real
ratio : real
sin_value : real
cos_value : real

BEGIN
WRITE ('enter an angle:')
READ (angle,CR)

sin_value = SIN(angle)
cos_value = COS(angle)
ratio = sin_value/cos_value
WRITE ('Angle is ', angle,CR)
WRITE ('Sin(angle) is ', sin_value, CR)
WRITE ('Cos(angle) is ', cos_value, CR)
IF ratio = TAN(angle) THEN
WRITE ('ratio is correct',CR)
ENDIF
END ex_tan

A.21.2 %TIMESLICEトランスレータディレクティブ
目的:
同じプライオリティのタスクの間でラウンドロビン方式のタイムスライスをサポートします。
構文:
%TIMESLICE = n
詳細:
 n は1つのスライスでのタスクの実行時間をmsec単位で指定します。デフォルトの値は256msecです。

 タイムスライスの値は0より大きい必要があります。
 同じプライオリティの他のタスクが実行可能状態にあるならば、この値はタスクを継続的に実行できる最大の持続時間で
す。

 この機能は2つ以上のKARELのタスクが同じプライオリティで同時に実行されている時にのみ効果があります。
 タイムスライス時間はタスクの実行中にSET_TSK_ATTRビルトインで設定可能です。

A.21.3 %TPMOTIONトランスレータディレクティブ
目的:
TPが有効の時にタスクが動作を実行可能であることを指定します。
構文:
%TPMOTION
詳細:
 この属性はタスクの実行中にSET_TSK_ATTRビルトインを使用して設定可能です。

A.21.4 TRANSLATEビルトインプロシージャ
目的:
KARELのソースファイル(ファイルタイプ.KL)をトランスレートしてPコード(ファイルタイプ.PC)とします。PCファイルはロー
ドして実行可能です。
構文:
TRANSLATE(file_spec, listing_sw, status)
入出力パラメータ:
[in] file_spec : STRING

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 286 of 412

[in] listing_sw : BOOLEAN


[out] status : INTEGER
%ENVIRONMENT Group :trans
詳細:
 file_spec にはトランスレートするファイルのファイルデバイス、ファイル名、ファイルタイプを指定します。デバイスの
指定が無いなら、デフォルトのデバイスが使用されます。ファイルタイプを指定すると、それは無視されます。KLが代わ
りに使用されます。
 Pコードファイルがデフォルトのファイルデバイス上に作成されます。デフォルトのデバイスはRAMディスクに設定して
下さい。
 listing_sw は.LSファイルが生成されるべきかを指定します。.LSファイルはソース行と発生した可能性のあるエラーのリス
トを含んでいます。.LSファイルはデフォルトデバイス上に作成されます。
 KARELプログラムはTRANSLATEビルトインの実行中待機します。KARELプログラムが一時停止されると、トランスレー
トは完了するまで継続されます。KARELプログラムが終了させられると、トランスレートも終了します。PCファイルは生
成されません。
 KARELプログラムがトランスレーションの間実行を継続する必要があるなら、KCL_NO_WAITビルトインを代わりに使用
して下さい。
 status は処理のステータスです。0が返ったならば、トランスレートは成功しました。そうでないなら、エラーが発生しま
した。statusのコードを以下に幾つか示します。
0 トランスレートは成功しました。
268 トランスレータのオプションがインストールされていません。
35084 ファイルをオープン又は生成できません。KLファイルを発見できなかったか、デフォルトのデバイスがRAMディス
クではありません。
-1 トランスレートが失敗しました(詳細は.LSファイルをご覧下さい)。
 基本的にはTRANSLATEは使用せず、ROBOGUIDE上でトランスレートして下さい。
例:
以下のプログラム例はhelloと呼ばれる別プログラムを生成、トランスレート、ロード、そして実行します。

例A.21.4 TRANSLATEビルトインプロシージャ
OPEN FILE util_file ('RW', 'hello.kl')
WRITE util_file ('PROGRAM hello', CR)
WRITE util_file ('%NOLOCKGROUP', CR)
WRITE util_file ('BEGIN', CR)
WRITE util_file (' WRITE (''hello world'', CR)', CR)
WRITE util_file ('END hello', CR)
CLOSE FILE util_file
TRANSLATE('hello', TRUE, status)
IF status = 0 THEN
LOAD('hello.pc', 0, status)
ENDIF
IF status = 0 THEN
CALL_PROG('hello', prog_index)
ENDIF

A.21.5 TRUNCビルトインファンクション
目的:
REALの引数の端数部分を取り除き、INTEGERの値に変換します。
構文:
TRUNC(x)
戻り値の型: INTEGER
入出力パラメータ:
[in] x : REAL
%ENVIRONMENT Group :SYStem
詳細:

 戻り値は、端数部分を取り除いたx の値です。例えば、x=2.3ならば、.3が削除され、2が返ります。
 x は-2147483648から+2147483583の範囲にある必要があります。さもないと、プログラムはエラーで終了します。
 ROUNDとTRUNCは両方共、REALからINTEGERへの変換に使えます。
参照:
ROUNDビルトインファンクション。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 287 of 412

例:
以下の例はTRUNCビルトインを使用して、miles をhours で割った値の整数値を決定し、mphを得ています。

例A.21.5 TRUNCビルトインファンクション
PROGRAM ex_trnc
%NOLOCKGROUP
VAR
miles : real
hours : real
mph : integer
BEGIN
WRITE ('enter miles driven, hours used: ')
READ (miles,hours,CR)
mph = TRUNC(miles/hours)
WRITE ('miles per hour=',mph::5)
END ex_trnc

A.22 U

A.22.1 UNINITビルトインファンクション
目的:
指定された引数が未初期化か否かを示すBOOLEANの値を返します。
構文:
UNINIT(variable)
戻り値の型: BOOLEAN
入出力パラメータ:
[in] variable :任意のKAREL変数
%ENVIRONMENT Group :SYSTEM
詳細:
 variable が未初期化ならばTRUEが返ります。そうでなければFALSEが返ります。

 variable には添え字無しのARRAY、構造体を除く任意のデータ型を使用可能です。
例:
詳細なプログラム例に関しては、B.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)を参照して下さい。

A.22.2 %UNINITVARSトランスレータディレクティブ
目的:
このディレクティブはデフォルトで全ての変数が未初期化となるように指示します。
構文:
%UNINITVARS

A.22.3 UNPAUSEアクション
目的:
ルーチン呼び出しのアクションの実行に十分な時間、プログラム実行を再開する。
構文:
UNPAUSE
詳細:
 プログラムが一時停止している状態でルーチン呼び出しがアクションとして実行されるならば、実行はルーチン実行の時
間のみ再開され、再度一時停止します。

 一つ以上のルーチンが呼ばれるならば、再度実行が一時停止される前に全てのルーチンが実行されます。
 UNPAUSEによって発生する一時停止はPAUSEコンディションを満たすことはありません。.
参照:
PAUSEアクション

A.22.4 UNPOSビルトインプロシージャ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 288 of 412

目的:
指定されたREAL型変数に、指定されたXYZWPR変数の位置(x,y,.z)及び姿勢(w,p,r)の成分を設定します。また指定された
CONFIG型変数に、そのXYZWPRの形態を設定します。
構文:
UNPOS(posn, x, y, z, w, p, r, c)
入出力パラメータ:
[in] posn :XYZWPR
[out] x, y, z :REAL
[out] w, p, r :REAL
[out] c :CONFIG
%ENVIRONMENT Group :SYSTEM
詳細:
 x、y、z、w、p 、及びr の引数はposn の位置(x,y,z)及びヨー、ピッチ、ロールの姿勢の角度に設定されます。

 c にはposn の形態が返ります。

A.22.5 USING ... ENDUSING文


目的:
あるSTRUCTURE型変数のフィールドに変数名を繰り返すこと無くアクセス可能な、実行可能文の範囲を定義します。
構文:
USING struct_var{,struct_var} DO
{statement} ENDUSING
ここで:
struct_var : STRUCTURE の変数
statement : 実行可能なKARELの文
詳細:

 実行可能文の中では、フィールド名と変数名が同じ場合、フィールド名と仮定されます。
 もし一つ以上の変数で同じフィールド名が現れた場合、USING文中で最も右の変数が使用されます。
 トランスレータがフィールドを調べる時、USING文中にリストされている構造体変数を左から右にサーチします。

A.23 V

A.23.1 V_CAM_CALIB iRVisionビルトインプロシージャ


目的:
カメラのキャリブレーションを実行します。
構文:
V_CAM_CALIB (cal_name, func_code, status)
[in] cal_name : STRING
[in] func_code : INTEGER
[out] status : INTEGER
%ENVIRONMENT Group: CVIS
詳細:

 cal_name にはカメラキャリブレーションの名前を指定します。
 func_code には処理番号を指定します。指定する値はキャリブレーションのタイプによって異なります。詳細は 表A.23.1を
ご覧下さい
表A.23.1ファンクションコードの値
キャリブレーションタイプ ファンクションコード
検出するキャリブレーション面の番号を指定します。第1面を検出するには1
ドットパターンキャリブレーション
を、第2面を検出するには2を指定します。
検出するキャリブレーション面の番号を指定します。第1面を検出するには1
立体センサキャリブレーション
を、第2面を検出するには2を指定します。
検出するキャリブレーション点毎に異なる番号を指定します。広視野キャリ
ブレーションの場合、このビルトインと同じ機能を提供するTPプログラム
命令を使ったTPプログラムが自動生成されますので、通常このビルトイン
広視野キャリブレーション
を広視野キャリブレーションで使用することはありません。詳細は
「FANUC Robot series R-30iA/R-30iA Mate 制御装置 iRVision基本操作説明
書 (B-82774JA/03)」 の「11.3 広視野キャリブレーション」を参照下さい。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 289 of 412

ビジュアルトラッキングキャリブレーション この命令に対応していません。
簡易2次元キャリブレーション この命令に対応していません。

 status には処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。

 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)が必要です。
例:
------------------------------------------------------------------
PROGRAM calib
------------------------------------------------------------------
%NOLOCKGROUP
%ENVIRONMENT CVIS
%ALPHABETIZE
%COMMENT = 'iRVision Built-in'
%NOPAUSE = ERROR + COMMAND + TPENABLE

VAR
status : INTEGER

BEGIN
-- Find calibration plane one
V_CAM_CALIB('CAL1', 1, status)

-- Success if status is zero


IF status <> 0 THEN
WRITE('V_CAM_CALIB failed - ERROR ', status, CR)
ABORT
ENDIF
END calib

A.23.2 V_FIND_VIEW iRVisionビルトインプロシージャ


目的:
画像レジスタに格納されている画像を使って検出を実行します。
構文:
V_FIND_VIEW(vp_name, camera_view, imreg_num, status)
[in] vp_name : STRING
[in] camera_view : INTEGER
[in] imreg_num : INTEGER
[out] status : INTEGER
詳細:

 vp_name にはビジョンプログラムの名前を指定します。
 camera_view にはカメラビューの番号を指定します。V_RUN_FINDビルトインのように0を指定して全てのカメラビューを
一度に実行することはできません。1?4のいずれかの値を指定します。
 imreg_num には画像レジスタの番号を指定します。

 status には処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。
 このビルトインは、ビジョンプログラムが画像レジスタの読み出しを完了した時点で次の行へ進み、ビジョンプログラム
が行う画像処理はバックグラウンドで継続します。従って、KARELプログラムの実行と画像処理を並列に実行することが
できます。画像処理の完了はV_GET_OFFSETビルトイン、またはV_GET_PASSFLビルトインで待機します。

 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)が必要です。
 画像レジスタについては、「FANUC Robot series R-30iA/R-30iA Mate 制御装置 iRVision基本操作説明書」 (B-82774JA/03)の
「10.4.3 IRVSNAPとIRVFIND」を参照して下さい。

A.23.3 V_GET_OFFSET iRVision ビルトインプロシージャ


目的:
ビジョンプログラムが検出したワークの情報を取得し、指定されたビジョンレジスタに格納します。
構文:
V_GET_OFFSET(vp_name, vreg_num, status)
[in] vp_name: STRING

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 290 of 412

[in] vreg_num: INTEGER


[out] status: INTEGER
% ENVIRONMENT GROUP: CVIS
詳細:

 vp_name にはビジョンプログラムの名前を指定します。
 vreg_num には取得したワークの情報を格納するビジョンレジスタの番号を指定します。
 status には処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。
 V_RUN_FINDビルトインの後で使用します。V_GET_OFFSETビルトインが実行された時点で、V_RUN_FINDビルトインが
実行した画像処理が完了していなかった場合は、画像処理の完了を待ってからデータを取得します。
 ビジョンプログラムが2つ以上のワークを検出した時には、このビルトインをstatusが0でなくなるまで繰り返し呼びます。
取得可能なワークが無くなるとstatus に117151が格納されます。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)が必要です。
例:
------------------------------------------------------------------
PROGRAM vision1
------------------------------------------------------------------
%NOLOCKGROUP
%ENVIRONMENT cvis
%ALPHABETIZE
%COMMENT = 'iRVision Built-in'
%NOPAUSE = ERROR + COMMAND + TPENABLE

VAR
status : INTEGER

BEGIN
-- Snap an image and find parts
V_RUN_FIND('VP1', 0, status)

-- Success if status is zero


IF status <> 0 THEN
WRITE('V_RUN_FIND FAILED with ERROR CODE ', status, CR)
ABORT
ENDIF

-- Get the first offset and put it into VR[1]


V_GET_OFFSET('VP1', 1, status)

-- Success if status is zero


IF status <> 0 THEN
WRITE('V_GET_OFFSET FAILED with ERROR CODE ', STATUS, CR)
ABORT
ENDIF
END vision1

A.23.4 V_GET_PASSFL iRVisionビルトインプロシージャ


目的:
ビジョンプログラムが判定したOK/NG結果を取得し、指定されたレジスタに格納します。
構文:
V_GET_PASSFL (vp_name, reg_num, status)
[in] vp_name : STRING
[in] reg_num : INTEGER
[out] status : INTEGER
%ENVIRONMENT GROUP: CVIS
詳細:

 vp_name にはビジョンプログラムの名前を指定します。
 reg_num にはOK/NGを格納するレジスタの番号を指定します。レジスタには以下のいずれかの値が格納されます。
 0 - NGと判定されました。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 291 of 412


 1 - OKと判定されました。
 2 - 判定できませんでした。
 status には処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。

 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)が必要です。
例:
------------------------------------------------------------------
PROGRAM vision2
------------------------------------------------------------------
%NOLOCKGROUP
%ENVIRONMENT CVIS
%ALPHABETIZE
%COMMENT = 'iRVision Built-in'
%NOPAUSE = ERROR + COMMAND + TPENABLE

VAR
status : INTEGER

BEGIN
-- Run a vision process 'VP2'
V_RUN_FIND('VP2', 0, status)

-- Success if status is zero


IF status <> 0 THEN
WRITE('V_RUN_FIND FAILED with ERROR CODE ', status, CR)
ABORT
ENDIF

-- Get the OK/NG result and put it into R[1]


V_GET_PASSFL('VP2', 1, status)

-- Success if status is zero


IF status <> 0 THEN
WRITE('V_GET_PASSFL FAILED with ERROR CODE ', status, CR)
ABORT
ENDIF
END vision2

A.23.5 V_OVERRIDE iRVisionビルトインプロシージャ


目的:
ビジョン変数に値を設定します。
構文:
V_OVERRIDE(vo_name, value, status)
[in] vo_name : STRING
[in] value : REAL
[out] status: INTEGER
詳細:
 vo_name にはビジョン変数の名前を指定します。
 value にはビジョン変数に設定する値を指定します。
 status には処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。
 ビジョン変数を使うと、ビジョンプログラムに教示されているパラメータの一部を書き換えてプログラム実行を行うことが
できます。ビジョン変数については「FANUC Robot series R-30iA/R-30iA Mate 制御装置 iRVision基本操作説明書 (B-
82774JA/03)」の「9.1 ビジョン変数」を参照下さい。
 V_RUN_FINDビルトインの直前で使います。
 V_OVERRIDEビルトインで設定した値は一時的なもので、ビジョンプログラムの教示内容そのものを書き換えてしまうわ
けではありません。V_OVERRIDEビルトインで設定した値は、V_OVERRIDEビルトインの直後に実行されたV_RUN_FIND
ビルトインでのみ有効となります。すなわち、V_OVERRIDEビルトインで設定した値は、V_RUN_FINDビルトインを実行
すると、全て(検出を実行したビジョンプログラムとは別のビジョンプログラムに関連付けられたビジョン変数について
も)クリアされます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 292 of 412

 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)が必要です。

A.23.6 V_RUN_FIND iRVisionビルトインプロシージャ


目的:
ビジョンプログラムを実行します。
構文:
V_RUN_FIND(vp_name,camera_view,status)
[in] vp_name: STRING
[in] camera_view: INTEGER
[out] status: INTEGER
%ENVIRONMENT GROUP: CVIS
詳細:

 vp_name にはビジョンプログラムの名前を指定します。
 camera_view にはカメラビューの番号を指定します。0を指定すると、全てのカメラビューを実行します。
 status には処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。
 このビルトインは、ビジョンプログラムが画像の取り込みを完了した時点で次の行へ進み、ビジョンプログラムが行う画
像処理はバックグラウンドで継続します。従って、KARELプログラムの実行と画像処理を並列に実行することができま
す。画像処理の完了はV_GET_OFFSETビルトイン、またはV_GET_PASSFLビルトインで待機します。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)が必要です。
例:
------------------------------------------------------------------
PROGRAM vision1
------------------------------------------------------------------
%NOLOCKGROUP
%ENVIRONMENT cvis
%ALPHABETIZE
%COMMENT = 'iRVision Built-in'
%NOPAUSE = ERROR + COMMAND + TPENABLE

VAR
status : INTEGER

BEGIN
-- Snap an image and find parts
V_RUN_FIND('VP1', 0, status)

-- Success if status is zero


IF status <> 0 THEN
WRITE('V_RUN_FIND FAILED with ERROR CODE ', status, CR)
ABORT
ENDIF

-- Get the first offset and put it into VR[1]


V_GET_OFFSET('VP1', 1, status)

-- Success if status is zero


IF status <> 0 THEN
WRITE('V_GET_OFFSET FAILED with ERROR CODE ', STATUS, CR)
ABORT
ENDIF
END vision1

A.23.7 V_SET_REF iRVisionビルトインプロシージャ


目的:
ビジョンプログラムに基準位置を設定します。
構文:
V_SET_REF(vp_name, status)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 293 of 412

[in] vp_name: STRING


[out] status: INTEGER
%ENVIRONMENT GROUP: CVIS
詳細:

 vp_name にはビジョンプログラムの名前を指定します。
 status には処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。
 V_RUN_FINDビルトインを実行することでビジョンプログラムが見つけたワークの内、最もスコアが高かったワークの検
出位置が基準位置として記憶されます。
 間違った位置が基準位置として記憶されないよう、カメラ視野内にはワークを一個だけ置いて実行することをお勧めしま
す。
 このビルトインを実行した時に、教示用PCでそのビジョンプログラムの教示ウィンドウが開かれたままになっていると、
基準位置をビジョンプログラムに書き込めずエラーになります。教示ウィンドウを閉じて、再度実行して下さい。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)が必要です。

A.23.8 V_SNAP_VIEW iRVisionビルトインプロシージャ


目的:
画像をスナップし、スナップした画像を画像レジスタに格納します。
構文:
V_SNAP_VIEW(vp_name, camera_view, imreg_num, status)
[in] vp_name : STRING
[in] camera_view : INTEGER
[in] imreg_num : INTEGER
[out] status: INTEGER
詳細:
 vp_name にはビジョンプログラムの名前を指定します。
 camera_view にはカメラビューの番号を指定します。V_RUN_FINDビルトインのように0を指定して全てのカメラビューを
一度に実行することはできません。1?4のいずれかの値を指定します。
 imreg_num には画像レジスタの番号を指定します。
 status には処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)が必要です。
 画像レジスタについては、「FANUC Robot series R-30iA/R-30iA Mate 制御装置 iRVision基本操作説明書 (B-82774JA/03)」の
「10.4.3 IRVSNAPとIRVFIND」を参照して下さい。

A.23.9 VAR_INFOビルトインプロシージャ
目的:
プログラムの内部/外部の変数に関する数値の情報とデータ型を突き止めることを可能とします。
構文:
VAR_INFO(prog_name, var_name, uninit, type_nam, type_value, dims, slen, status)
入出力パラメータ:
[in] prog_name: STRING
[in] var_name: STRING
[out] uninit_b :BOOLEAN
[out] type_nam :STRING
[out] dims:ARRAY[3] OF INTEGER
[out] type_value :INTEGER
[out] status :INTEGER
[out] slen :INTEGER
%ENVIRONMENT Group :BYNAM
詳細:
 prog_name に指定の変数を含んでいるプログラム名を指定します。prog_name が空白ならば、現在実行されているプログラ
ムとなります。

 var_name は静的な変数を参照する必要があります。
 var_name には構造体のメンバ、配列の添え字を含めることが可能です。
 uninit_b : var_name に指定された変数が未初期化ならばTRUEが返ります。var_name に指定された変数が初期化されていれ
ばFALSEが返ります。
 type_nam にはvar_name の型の名前を特定する文字列が返ります。

 type_value にはvar_nameのデータ型に相当するINTEGERが返ります。以下の表は有効なデータ型とそれを表すINTEGERの

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 294 of 412

値の一覧です。
表A.23.9有効なデータ型
データ型 値
POSITION 1
XYZWPR 2
XYZWPREXT 6
INTEGER 16
REAL 17
BOOLEAN 18
VECTOR 19
SHORT 23
BYTE 24
JOINTPOS1 25
CONFIG 28
FILE 29
PATH(内部的に使用している型) 31
JOINTPOS2 41
JOINTPOS3 57
JOINTPOS4 73
JOINTPOS5 89
JOINTPOS6 105
JOINTPOS7 121
JOINTPOS8 137
JOINTPOS9 153
JOINTPOS 153
STRING 209
ユーザ定義型 210

 dims : もしあれば、配列の次元が返ります。配列dims のサイズは3として下さい。



 dims[1] = 0 ならば配列ではありません。
 dims[2] = 0 ならば二次元配列ではありません。
 dims[3] = 0 ならば三次元配列ではありません。

 slen var_name で指定された変数がSTRINGであれば、その宣言長が返ります。
 status は処理のステータスです。0でないなら、エラーが発生しました。
例:
以下の例はプログラムvarinf01の変数counter に関する情報を、プログラムvarinf02で取得しています。

例A.23.9 VAR_INFOビルトインプロシージャ
PROGRAM varinf01
VAR
counter, i : INTEGER
BEGIN
counter = 0
FOR i = 1 TO 10 DO
counter = counter + 1
ENDFOR
END varinf01

PROGRAM varinf02
VAR
uninit_b : BOOLEAN
type_name : STRING[12]
type_code : INTEGER
slen, status : INTEGER
alen : ARRAY[3] OF INTEGER

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 295 of 412

BEGIN
VAR_INFO('varinf01', 'counter', uninit_b, type_name, type_code,
alen, slen, status)
WRITE('counter : ', CR)
WRITE('UNINIT : ', uninit_b, ' TYPE : ', type_name, cr)
END varinf02

A.23.10 VAR_LISTビルトインプロシージャ
目的:
指定された名前とデータ型の変数を指定されたプログラムから探します。
構文:
VAR_LIST(prog_name, var_name, var_type, n_skip, format, ary_nam, n_vars, status)
入出力パラメータ:
[in] prog_name : STRING
[in] var_name : STRING
[in] var_type : INTEGER
[in] n_skip : INTEGER
[in] format : INTEGER
[out] ary_nam : ARRAY of STRING
[out] n_vars : INTEGER
[out] status : INTEGER
%ENVIRONMENT Group :BYNAM
詳細:
 prog_name に指定された変数を含んでいるプログラム名を指定します。prog_name はワイルドカード文字(*)を使って指定
可能です。これは全てのロードされているプログラムを指定します。
 var_name は見つける変数の名前です。var_name はワイルドカード文字(*)を使って指定可能です。それはprog_name の全て
の変数を発見する指定です。
 var_type は見つけ出す変数のデータ型を表します。以下は有効なデータ型の一覧です。

表A.23.10有効なデータ型
データ型 値
全ての変数の型 0
POSITION 1
XYZWPR 2
INTEGER 16
REAL 17
BOOLEAN 18
VECTOR 19
VIS_PROCESS 21
MODEL 22
SHORT 23
BYTE 24
JOINTPOS1 25
CONFIG 28
FILE 29
PATH 31
CAM_SETUP 32
JOINTPOS2 41
JOINTPOS3 57
JOINTPOS4 73
JOINTPOS5 89
JOINTPOS6 105
JOINTPOS7 121
JOINTPOS8 137
JOINTPOS9 153

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 296 of 412

JOINTPOS 153
STRING 209
ユーザ定義型 210

 n_skip はary_nam の宣言長よりも多くの変数が存在する時に使用されます。最初にVAR_LISTを呼ぶ時は n_skip を0に設定


して下さい。もしary_nam が完全に変数名で満たされているなら、その配列を別のSTRINGの配列にコピーして下さい。そ
してn_skip をn_varsに設定してVAR_LISTをもう一度実行して下さい。VAR_LISTの呼び出しは最初の呼び出しで発見され
た変数をスキップして残っている変数のみを見つけます。
 format はプログラム名と変数名のフォーマットを指定します。以下の値がformat として有効です。
 1=prog_nameのみ、空白無し
 2 =var_nameのみ、空白無し
 3 =[prog_name]var_name、空白無し
 4 ='prog_name var_name ', 全長27文字です。prog_nameは文字1から始まります。var_nameは文字16から始まります。
 ary_nam は変数名を格納するためのSTRINGの配列です。ary_nam の宣言長がフォーマットに沿ったデータを格納できるほ
ど長くないなら、エラーでリターンします。

 n_vars はary_nameに格納された変数の数です。
 status は成功したら0を返します。
参照:
FILE_LIST、PROG_LISTビルトインプロシージャ

A.23.11 VECTORデータ型
目的:
変数、ファンクションの戻り値の型、ルーチンのパラメータをVECTORデータ型として定義します。
構文:
VECTOR
詳細:
 VECTORは3次元直交座標系での位置または方向を示す3個のREAL型の値(実数)から構成されます。

 VECTOR型の式だけがVECTOR型の変数に代入可能です。またVECTOR型の関数から返すことが可能なのも、VECTOR型
のパラメータとして渡すことができるのもVECTOR型の式だけです。
 有効なVECTORの演算子は
 加算(+)及び減算(-)の算術演算子
 等しい (=)及び等しくない (<>)の関係演算子
 外積 (#)及び内積(@)演算子
 乗算(*) 及び除算(÷)演算子
 相対位置演算子(:)
 VECTOR型変数の成分のフィールドは、以下の通り定義されているかのようにアクセス、設定可能です。
例:
例A.23.11(a) VECTOR データ型
VECTOR = STRUCTURE
X: REAL
Y: REAL
Z: REAL
ENDSTRUCTURE
注: 全フィールドがRead-writeアクセスです。

例:
以下の例は変数宣言、ルーチンのパラメータ、戻り値の型としてのVECTOR型の例を示しています。

例A.23.11(b) VECTORデータ型
VAR
direction, offset : VECTOR
ROUTINE calc_offset(offset_vec:VECTOR):VECTOR FROM util_prog

A.23.12 VOL_SPACEビルトインプロシージャ
目的:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 297 of 412

指定されたデバイスの全容量、空き容量(共にバイト)、ボリューム名を返します。
構文:
VOL_SPACE(device, total, free, volume)
入出力パラメータ:
[in] device :STRING
[out] total :INTEGER
[out] free :INTEGER
[out] volume :STRING
%ENVIRONMENT Group :FLBT
詳細:
 device は以下のものが使用できます。
デバイス 説明
RAMディスクは三個全てのパラメータを返します。しかしvolumeはサポートしていません。問い
RD:
合わせを行うにはRAMディスクをマウントしておく必要があります。
FR:は三個全てのパラメータを返します。しかしvolumeはサポートしていません。問い合わせを行
FR:
うにはFROMディスクをマウントしておく必要があります。
FROM: FROMのサイズ。パラメータtotal のみが設定されます。
DRAM DRAMのサイズ。パラメータtotal のみが設定されます。
CMOS CMOSのサイズ。パラメータtotal のみが設定されます。
TPP TPプログラムが格納されるシステムメモリの領域。volumeはサポートしていません。
システム変数と(CMOSへの作成を選択した)KAREL変数が格納されているCMOS RAMのパーマネ
PERM
ントメモリ領域。volumeはサポートしていません。
ロードされたKARELプログラム及び変数、プログラム実行情報、及びシステムの動作に使用され
TEMP
るDRAMのテンポラリプール。volumeはサポートしていません。


全てのデバイス名はコロン(:)で終わる必要があります。


 total は元々のメモリのサイズです。単位はバイトです。
 free は利用可能なメモリの量です。単位はバイトです。
 volume は指定されたデバイスで使用されている名称です。
参照:
1.4.1項「メモリ」、適切なアプリケーションの取扱説明書の「状態表示」の章のメモリ使用状態。
例:
以下の例は異なるデバイスについての情報を取得しています。

例A.23.12 VOL_SPACEビルトインプロシージャ
PROGRAM volspc3
%NOLOCKGROUP
%ENVIRONMENT FLBT
%INCLUDE klevccdf
VAR
console :FILE
STATUS:INTEGER
ROUTINE cl_vol_space (dev:STRING)
VAR
total: INTEGER
free: INTEGER
volume: STRING [30]
BEGIN
free = 0
total = 0
volume=''
VOL_SPACE(dev, total, free, volume)
WRITE console (dev, 'total;', total, ',free:', free, CR)
WRITE console ('volume:', volume,CR)
END cl_vol_space

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 298 of 412

BEGIN
OPEN FILE console('RW', 'CONS:')
STATUS = IO_STATUS(console)
IF STATUS <> 0 THEN
POST_ERR(STATUS,'',0,0)
ABORT
ENDIF
cl_VOL_SPACE('rd:')
cl_VOL_SPACE('fr:')
cl_VOL_SPACE('from:')
cl_VOL_SPACE('dram:')
cl_VOL_SPACE('cmos:')
cl_VOL_SPACE('tpp:')
cl_VOL_SPACE('perm:')
cl_VOL_SPACE('temp:')
END volspc3

A.23.13 VREG_FND_POS iRVisionビルトインプロシージャ


目的:
ビジョンレジスタに格納されている検出したワークの情報から、検出位置を位置レジスタにコピーします。
構文:
VREG_FND_POS (vreg_num, camera_view, preg_num, status)
[in] vreg_num : INTEGER
[in] camera_view : INTEGER
[in] preg_num : INTEGER
[out] status : INTEGER
%ENVIRONMENT GROUP: CVIS
詳細:

 vreg_num にはワークの情報が格納されたビジョンレジスタの番号を指定します。
 camera_view にはカメラビューの番号を指定します。
 preg_num には検出位置を格納する位置レジスタの番号を指定します。
 statusには処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)が必要です。

A.23.14 VREG_OFFSET iRVisionビルトインプロシージャ


目的:
ビジョンレジスタに格納されている検出したワークの情報から、補正データを位置レジスタにコピーします。
構文:
VREG_OFFSET(vreg_num, preg_num, status)
[in] vreg_num : INTEGER
[in] preg_num : INTEGER
[out] status : INTEGER
%ENVIRONMENT GROUP: CVIS
詳細:
 vreg_num には検出したワークの情報が格納されているビジョンレジスタの番号を指定します。
 preg_num には補正データを格納する位置レジスタの番号を指定します。
 status には処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)が必要です。

A.23.15 VT_ACK_QUEUE iRVisionビルトインプロシージャ


目的:
ビジュアルトラッキング用のビルトインです。VT_GET_QUEUEで分配されたワークをどう処理したかをワークエリアに通知し
ます。
構文:
VT_ACK_QUEUE(area_num, vreg_num, ack, status)
[in] area_num : INTEGER

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 299 of 412

[in] vreg_num : INTEGER


[in] ack : INTEGER
[out] status : INTEGER
%ENVIRONMENT GROUP: CVIS
詳細:
 area_numにはワークエリアの番号を指定します。VT_GET_AREIDを使ってワークエリア名からここで指定するarea_numを
得ることができます。
 vreg_numにはワークの情報が格納されているビジョンレジスタの番号を指定します。
 ackには以下のいずれかの値を指定します。
 1 - 正常に対象物を取り扱った場合に指定します。たとえば、ワークをコンベヤからピックアップした、またはコンベ
ヤにワークを置いた等がこれに相当します。
 2 - 対象物を予定通りには取り扱わなかった場合に指定します。例えば、分配されたワークの位置や種類番号などをロ
ボットのプログラムで評価して、意図的にワークをピックアップするのをやめた場合がこれに相当します。この場
合、このワークが下流のロボットで処理されるようキューに戻されます。
 3 - ワークの取り扱いに失敗した場合に指定します。例えば、ワークを落としてしまって吸着確認でNGになった場合
などがこれに相当します。この場合、ロボットがワークを動かしてしまっているので、下流のロボットがこのワーク
を処理することができないのでキューに戻されません。
 statusには処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)と iRVisionトラッキングキューオプ
ション(J874)が必要です。

A.23.16 VT_CLR_QUEUE iRVisionビルトインプロシージャ


目的:
ビジュアルトラッキング用のビルトインです。指定したワークエリア内のワークの情報をクリアします。その時点でワークエ
リア内にあるワークの情報は全て消去されます。通常、システム起動時に1回だけ呼び出します。
構文:
VT_CLR_QUEUE(area_num, status)
[in] area_num : INTEGER
[out] status : INTEGER
%ENVIRONMENT GROUP: CVIS
詳細:
 area_numにはワークエリアの番号を指定します。VT_GET_AREIDを使ってワークエリア名からここで指定するarea_numを
得ることができます。

 statusには処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)と iRVisionトラッキングキューオプ
ション(J874)が必要です。

A.23.17 VT_GET_AREID iRVisionビルトインプロシージャ


目的:
ビジュアルトラッキング用のビルトインです。指定されたワークエリア名のワークエリアの番号を返します。
構文:
VT_GET_AREID(area_name)
戻り値の型: INTEGER
[in] area_name : STRING
%ENVIRONMENT GROUP: CVIS
詳細:

 area_nameにはワークエリアの名前を指定します。
 戻り値は、VT_ACK_QUEUEなどのビジュアルトラッキング用ビルトインの引数として指定するarea_numです。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)と iRVisionトラッキングキューオプ
ション(J874)が必要です。

A.23.18 VT_GET_FOUND iRVisionビルトインプロシージャ


目的:
ビジュアルトラッキング用のビルトインです。ビジョンプログラムが検出したワークの情報を取得します。
構文:
VT_GET_FOUND(vp_name, model_id, enc_count, offset, found_pos, meas_val, status)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 300 of 412

[in] vp_name : STRING


[out] model_id : INTEGER
[out] enc_count : INTEGER
[out] offset : XYZWPR
[out] found_pos : ARRAY[4] OF XYZWPR
[out] meas_val : ARRAY[10] : OF REAL
[out] status : INTEGER
%ENVIRONMENT GROUP: CVIS
詳細:

 vp_nameにはビジョンプログラムの名前を指定します。
 model_idには検出したワークの種類番号が格納されます。
 enc_countには検出したワークの画像をスナップした瞬間のエンコーダの値が格納されます。
 offsetには検出したワークの補正データが格納されます。
 found_pos[1-4]にはカメラビュー1?4が検出したワークの検出位置が格納されます。
 meas_val[1-10]には検出したワークの計測値が格納されます。計測値はビジョンプログラムの計測値出力ツールで指定され
た値です。

 statusには処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。
 このビルトインはV_RUN_FINDビルトインの後で使います。
 ビジョンプログラムが2つ以上のワークを検出した時には、このビルトインをstatusが0でなくなるまで繰り返し呼びます。
取得可能なワークが無くなるとstatusに117151が格納されます。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)が必要です。

A.23.19 VT_GET_LINID iRVisionビルトインプロシージャ


目的:
ビジュアルトラッキング用のビルトインです。指定されたライン名のラインの番号を返します。
構文:
VT_GET_LINID(line_name)
戻り値の型: INTEGER
[in] line_name : STRING
%ENVIRONMENT GROUP: CVIS
詳細:
 line_nameにはラインの名前を指定します。

 戻り値は、VT_PUT_QUEUEなどのビジュアルトラッキング用ビルトインの引数として指定するline_numです。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)と iRVisionトラッキングキューオプ
ション(J874)が必要です。

A.23.20 VT_GET_QUEUE iRVisionビルトインプロシージャ


目的:
ビジュアルトラッキング用のビルトインです。指定したワークエリアからワークを1個取得します。分配されたワークの情報は
ビジョンレジスタに格納されます。また、分配されたワークのエンコーダ値がトラッキング動作のトリガとして設定されま
す。ワークエリア内に分配できるワークがない場合は、ワークがワークエリアに流れてくるまで指定した時間だけ待機しま
す。
構文:
VT_GET_QUEUE(area_num, vreg_num, timeout, consecutive, model_id, work_id, status)
[in] area_num : INTEGER
[in] vreg_num : INTEGER
[in] timeout : INTEGER
[in] consecutive : INTEGER
[in] model_id : INTEGER
[in] work_id : INTEGER
[out] status : INTEGER
%ENVIRONMENT GROUP: CVIS
詳細:
 area_numにはワークエリアの番号を指定します。VT_GET_AREIDを使ってワークエリア名からここで指定するarea_numを
得ることができます。

 vreg_numには分配されたワークの情報を格納するビジョンレジスタの番号を指定します。
 timeoutには分配待ちをする最長待機時間を指定します。単位はミリ秒です。ここで指定した時間内にワークがワークエリ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 301 of 412

ア内に流れてこなかった場合は、statusにアラームコード117249が格納されます。負数を指定すると無限待ちになります。

 consecutiveには通常1を指定します。ラインの設定で指定したロードバランスに関係なく連続してワークを分配してほしい
場合は、2以上の値を指定します。詳細は「FANUC Robot series R-30iA/R-30iA Mate 制御装置 iRVisionビジュアルトラッキ
ング立ち上げ手順書(B-82774JA-2/03)」 の「4.3.3.2 取り動作を行うプログラム」を参照して下さい。
 model_idには、特定の種類番号のワークだけを分配してほしい場合に種類番号を指定します。通常は指定しません。指定
しない場合は未初期化の変数を渡します。使用例を 「FANUC Robot series R-30iA/R-30iA Mate 制御装置 iRVisionビジュア
ルトラッキング立ち上げ手順書(B-82774JA-2/03)」 の「5 バリエーション」で紹介しています。
 work_idには、分配してほしいワークのwork_idが既知の場合に指定します。work_idはVT_PUT_QUEUEビルトインでワーク
につけた固有の識別子です。通常は指定しません。指定しない場合は未初期化の変数を渡します。
 statusには処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)と iRVisionトラッキングキューオプ
ション(J874)が必要です。

A.23.21 VT_GET_TIME iRVisionビルトインプロシージャ


目的:
ビジュアルトラッキング用のビルトインです。指定したワークエリアに対して次に分配可能なワークが到達するまでの予想時
間(分配予想時間)を計算します。
構文:
VT_GET_TIME(area_num, consecutive, model_id, work_id, time, status)
[in] area_num : INTEGER
[in] consecutive : INTEGER
[in] model_id : INTEGER
[in] work_id : INTEGER
[out] time : INTEGER
[out] status : INTEGER
%ENVIRONMENT GROUP: CVIS
詳細:
 area_numにはワークエリアの番号を指定します。VT_GET_AREIDを使ってワークエリア名からここで指定するarea_numを
得ることができます。
 consecutiveには通常1を指定します。ラインの設定で指定したロードバランスに関係なく分配可能なワークに対する分配予
想時間を知りたい場合は、2以上の値を指定します。
 model_idには、特定の種類番号のワークの分配予想時間を知りたい場合に種類番号を指定します。通常は指定しません。
指定しない場合は未初期化の変数を渡します。
 work_idには、分配予想時間を知りたいワークのwork_idが既知の場合に指定します。work_idはVT_PUT_QUEUEビルトイン
でワークにつけた固有の識別子です。通常は指定しません。指定しない場合は未初期化の変数を渡します。
 timeには計算された予想時間が格納されます。次に作業可能なワークがまだワークエリアに到達していない場合は正の数
値が格納されます。単位はミリ秒です。例えば、1000が格納された場合、次のワークが分配されるまでに約1000ミリ秒掛
かると予想されることを示します。ワークエリア内に既に作業可能なワークがある場合は負の値が格納されます。

 statusには処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)と iRVisionトラッキングキューオプ
ション(J874)が必要です。

A.23.22 VT_GET_TRYID iRVisionビルトインプロシージャ


目的:
ビジュアルトラッキング用のビルトインです。指定されたトレイ名のトレイの番号を返します。
構文:
VT_GET_TRYID(tray_name)
戻り値の型: INTEGER
[in] tray_name : STRING
%ENVIRONMENT GROUP: CVIS
詳細:

 tray_nameにはトレイの名前を指定します。
 戻り値は、VT_PUT_QUEUEのビジュアルトラッキング用ビルトインの引数として指定するtray_numです。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)と iRVisionトラッキングキューオプ
ション(J874)が必要です。

A.23.23 VT_PUT_QUEUE iRVisionビルトインプロシージャ

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 302 of 412

目的:
ビジュアルトラッキング用のビルトインです。ワークの情報をトラッキングキューに投入します。
構文:
VT_PUT_QUEUE(line_num, work_id, tray_num, enc_count, model_id, offset, found_pos, meas_val, status)
[in] line_num : INTEGER
[in] work_id : INTEGER
[in] tray_num : INTEGER
[in] enc_count : INTEGER
[in] model_id : INTEGER
[in] offset : XYZWPR
[in] found_pos : ARRAY[4] OF XYZWPR
[in] meas_val : ARRAY[10] OF REAL
[out] status : INTEGER
%ENVIRONMENT GROUP: CVIS
詳細:
 line_numにはラインの番号を指定します。ワークの情報は、指定したラインの最上流のワークエリアのキューに投入され
ます。VT_GET_LINIDを使ってライン名からここで指定するline_numを得ることができます。
 work_idにはワークに付ける固有の識別子を指定します。キューに投入したワークが全て異なる識別子を持つようにプログ
ラムして下さい。
 tray_numにはトレイ番号を指定します。トレイを使用しない場合は0を指定します。VT_GET_TRYIDを使ってトレイ名か
らここで指定するtray_numを得ることができます。
 enc_countには検出したワークの画像をスナップした瞬間のエンコーダの値を指定します。

 model_idにはワークの種類番号を指定します。
 offsetにはワークの補正データを指定します。
 found_pos[1-4]にはワークの検出位置を指定します。
 meas_val[1-10]にはワークの計測値を指定します。
 通常enc_count?meas_valには、VT_GET_FOUNDビルトインで取得した値をそのまま渡します。
 statusには処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)と iRVisionトラッキングキューオプ
ション(J874)が必要です。

A.23.24 VT_SET_FLAG iRVisionビルトインプロシージャ


目的:
ビジュアルトラッキング用のビルトインです。指定されたラインやワークエリアに関する複数の機能の有効・無効を一度に切
り替えます。
構文:
VT_SET_FLAG (line_num, line_bit2enb, line_bit2dab, area_bit2enb, area_bit2dab, status)
[in] line_num : INTEGER
[in] line_bit2enb : INTEGER
[in] line_bit2dab : INTEGER
[in] area_bit2enb : ARRAY[32] OF INTEGER
[in] area_bit2dab : ARRAY[32] OF INTEGER
[out] status : INTEGER
%ENVIRONMENT GROUP: CVIS
詳細:
 line_numにはラインの番号を指定します。VT_GET_LINIDを使ってライン名からここで指定するline_numを得ることができ
ます。
 line_bit2enbには、ライン用の機能のうち有効にしたいものを表す値(フラグ)を指定します。有効になる機能は、
line_bit2enbに指定する値により以下のようになります。
1 : ロードバランス機能が有効になります。
2 : 下流から分配機能が有効になり、ワークが下流から分配されます。
なお、同時に複数の機能を有効にすることもできます。例えば、1 + 2 = 3 を指定すると、ロードバランス機能と下流から
分配機能とが同時に有効になります。
 line_bit2dabには、ライン用の機能のうち無効にしたいものを表す値(フラグ)を指定します。無効になる機能は、
line_bit2dabに指定する値により以下のようになります。
1 : ロードバランス機能が無効になります。
2 : 下流から分配機能が無効になり、ワークが上流から分配されます。
なお、同時に複数の機能を無効にすることもできます。例えば、1 + 2 = 3 を指定すると、ロードバランス機能と下流から

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 303 of 412

分配機能とが同時に無効になります。
 line_bit2enbとline_bit2dabに対して同時に値を指定することはできません。line_bit2enbかline_bit2dabのどちらか一方にのみ
値を指定し、他方には0を指定して下さい。
 area_bit2enbには、ワークエリア用の機能のうち有効にしたいものを表す値(フラグ)を指定します。area_bit2enb[1]は指定し
たラインの最上流のワークエリア用です。area_bit2enb[2]は指定したラインの2番目のワークエリア用です。
有効になる機能は、area_bit2enb[n]に指定する値により以下のようになります。
1 : スキップエリアが有効になります。
2 : Y方向での並べ替えが有効になります。
4 : Y方向での並べ替えが大きい順になります。
8 : ストップコンベヤが有効になります。
16 : DOをOFFにしてコンベヤを止めます。
なお、同時に複数の機能を有効にすることもできます。例えば、1 + 2 = 3 を指定すると、スキップエリアとY方向での並べ
替えとが同時に有効になります。
 area_bit2dabには、ワークエリア用の機能のうち無効にしたいものを表す値(フラグ)を指定します。area_ bit2dab [1]は指定
したラインの最上流のワークエリア用です。area_ bit2dab[2]は指定したラインの2番目のワークエリア用です。無効になる
機能は、area_bit2dab[n]に指定する値により以下のようになります。
1 : スキップエリアが無効になります。
2 : Y方向での並べ替えが無効になります。
4 : Y方向での並べ替えが小さい順になります。
8 : ストップコンベヤが無効になります。
16 : DOをONにしてコンベヤを止めます。
なお、同時に複数の機能を無効にすることもできます。例えば、1 + 2 = 3 を指定すると、スキップエリアとY方向での並べ
替えとが同時に無効になります。
 area_bit2enb[n]とarea_bit2dab[n]に対して同時に値を指定することはできません。area_bit2enb[n]かarea_bit2dab[n]のどちらか
一方にのみ値を指定し、他方には0を指定して下さい。
 statusには処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)と iRVisionトラッキングキューオプ
ション(J874)が必要です。

A.23.25 VT_SET_LDBAL iRVisionビルトインプロシージャ


目的:
ビジュアルトラッキング用のビルトインです。指定されたラインのロードバランスを変更します。
構文:
VT_SET_LDBAL (line_num, model_id, n2pick, n2pass, status)
[in] line_num : INTEGER
[in] model_id : INTEGER
[in] n2pick : ARRAY[32] OF INTEGER
[in] n2pass : INTEGER
[out] status : INTEGER
%ENVIRONMENT GROUP: CVIS
詳細:
 line_numにはラインの番号を指定します。VT_GET_LINIDを使ってライン名からここで指定するline_numを得ることができ
ます。
 model_idにはロードバランスを変更するワークの種類番号を指定します。ロードバランスのモードが「種類番号に共通」
の場合は、0を指定して下さい。
 n2pickには各ワークエリアが処理するワークの割合を指定します。n2pick[1]には指定したラインの最上流のワークエリアが
処理するワークの割合を指定します。n2pick[2]には2番目のワークエリアが処理するワークの割合を指定します。
 n2passには見逃しの割合を指定します。

 statusには処理のステータスが格納されます。処理が正常終了すれば0、そうでなければアラームコードが格納されます。
 このビルトインを使用するには、iRVision KARELインタフェースオプション(J870)と iRVisionトラッキングキューオプ
ション(J874)が必要です。

A.24 W

A.24.1 WAIT FOR文

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 304 of 412

目的:
条件が成立するまで待機します。
構文:
WAIT FOR cond_list
ここで:
cond_list: 一つまたは複数の条件
詳細:
 実行を継続するには、1つのWAIT FOR文の全ての条件が同時に成立する必要があります。
参照:
6章「コンディションハンドラ」、付録E「文法図」:構文の情報があります。
以下のプログラムは変数doneがTRUEになるのを待ちます。実行を開始すると無限に待機します。

例A.24.1 WAIT FOR文


PROGRAM WAIT01
%NOLOCKGROUP
VAR
done :BOOLEAN
BEGIN
done = FALSE
WAIT FOR done = TRUE
END WAIT01

A.24.2 WHEN節
目的:
モニタでコンディション/アクションのペアを指定するために使用します。
構文:
WHEN cond_list DO action_list
ここで:
cond_list : 1つ又はそれ以上のコンディション
action_list : 1つ又はそれ以上のアクション
詳細:
 モニタがトリガするには、一つのWHEN節のcond_list の全てのコンディションが同時に満たされる必要があります。

 action_list はWHEN節の対応する条件が同時に成立した時に実行される全てのアクションのリストです。
 ルーチンの呼びだしはCONDITION文中では許されていません。それ故に、WHEN節中でも使用できません。
 CONDITION文は複数のWHEN節を含むことができます。
参照:
6章「コンディションハンドラ」、付録E「文法図」:構文の情報があります。
例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.4節「位置データ設定及びモニタのプログラム」 (PTH_MOVE.KL)
B.7節「動的な表示を行うビルトインの使用」(DYN_DISP.KL)

A.24.3 WHILE...ENDWHILE文
目的:
あるBOOLEANの式がTRUEである限り、処理を繰り返します。
構文:
WHILE boolean_exp DO{ statement }ENDWHILE
ここで:
boolean_exp : BOOLEANの式
statement : 有効なKARELの実行可能な文
詳細:
 boolean_exp は各繰り返しの前に評価されます。

 boolean_exp がTRUEである限り、ループ中の文(statement)が実行されます。
 boolean_exp がFALSEなら、制御はENDWHILEに続く文に移ります。そしてループ本体中の文は実行されません。
参照:
付録E「文法図」:構文の情報があります。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 305 of 412

A.24.4 WITH節
目的:
モニタ中でモニタの修飾語句を指定するために使用します。
構文:
WITH param_spec {, param_spec}
ここで:
param_specは次の形式です。sys_var = value または sys_var[n] = value
sys_var : WITH節中で使用可能なシステム変数の一つ
n : グループ番号を指定します。
value : システム変数の型に相当する型の式
詳細:

 INTEGER型の値はREAL型の値が期待されているところで使えます。
 $PRIORITY及び$SCAN_TIMEはモニタの修飾語句です。これらはモニタの一部であるWITH節中でのみ使用可能です。
参照:
6章「コンディションハンドラ」

A.24.5 WRITE文
目的:
シリアル装置やファイルにデータを書きます。
構文:
WRITE <file_var> (data_item { ,data_item })
ここで:
file_var : FILE変数
data_item : 式とオプションのフォーマット指定子、又は予約語CR
詳細:
 file_var がWRITE文に指定されていないと、デフォルトのTPDISPLAYが使用されます。%CRTDEVICEディレクティブを使
用するとデフォルトがOUTPUTになります。
 file_var が指定されると、それは出力デバイスの一つか、それらの一つと等価とされた変数である必要があります。

 file_var 属性がUFオプションで設定されていたなら、指定のファイル又は装置にバイナリ形式で送られます。そうでなけれ
ばデータはASCIIテキストとして送られます。
 data_item は任意の有効なKARELの式です。

 data_item が配列ならば添え字を提供する必要があります。
 各data_item で各データの量を制御するためにオプションのフォーマット指定子を使用可能です。
 予約語CR(data_itemとして使用可能)はfile_varへの次のdata_itemの書き込みは次行の最初からとなるように指定します。
 IO_STATUSビルトインを使用して書込み操作が成功したか否か突き止めて下さい。
参照:
7章「ファイル入出力操作」(フォーマット指定子とファイル変数に関する詳細)。付録E「文法図」(構文の情報)
例:
詳細なプログラム例に関しては、付録B「KARELプログラム例」を参照して下さい。

A.24.6 WRITE_DICTビルトインプロシージャ
目的:
辞書から情報を書き込みます。
構文:
WRITE_DICT(file_var, dict_name, element_no, status)
入出力パラメータ:
[in] file_var :FILE
[in] dict_name :STRING
[in] element_no :INTEGER
[out] status :INTEGER
%ENVIRONMENT Group :PBCORE
詳細:
 file_var は辞書テキストが表示されるウィンドウにオープンされている必要があります。

 dict_name に書き込む要素番号を指定します。
 element_no に書き込む要素番号を指定します。この数値は辞書ファイル中で$付で指定されています。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 306 of 412

 status は処理のステータスです。0でないならば、辞書ファイルからの要素の書き込み中にエラーが発生しました。
参照:
READ_DICT、REMOVE_DICTビルトインプロシージャ、9章「辞書とフォーム」
例:
詳細なプログラム例に関してはB.9節「辞書ファイルからリストを表示する」 (DCLST_EX.KL)を参照して下さい。

A.24.7 WRITE_DICT_Vビルトインプロシージャ
目的:
書式に従い変数を使って辞書からの情報を書き込みます。
構文:
WRITE_DICT_V(file_var, dict_name, element_no, value_array, status)
入出力パラメータ:
[in] file_var :FILE
[in] dict_name :STRING
[in] element_no :INTEGER
[in] value_array :ARRAY OF STRING
[out] status :INTEGER
%ENVIRONMENT Group :UIF
詳細:
 file_var は辞書テキストが表示されるウィンドウにオープンされている必要があります。

 dict_name に書き込む要素番号を指定します。
 element_no に書き込む要素番号を指定します。この数値は辞書ファイル中で$付で指定されています。
 value_array は変数名の配列です。各変数は辞書中のフォーマット付きの各データ項目(%d等)に相当します。各変数名
は'[prog_name]var_name'として指定可能です。
 [prog_name] 指定の変数を含んでいるプログラム名を指定します。指定しないと、現在実行中のプログラムが使用され
ます。
 var_name はプログラムレベルでグローバルな(静的な)変数を参照する必要があります。
 var_name は構造体のメンバ、配列の添え字を含めることが可能です。
 status は処理のステータスです。0でないならば、辞書ファイルからの要素の書き込み中にエラーが発生しました。
参照:
READ_DICT_Vビルトインプロシージャ、9章「辞書とフォーム」
例:
以下の例では、TPTASKEG.UTX がシステム変数を表示する辞書テキストの情報を含んでいます。この情報は辞書の最初の要素
にあります。要素番号は0から始まります。writdicv はWRITE_DICT_Vを使ってテキストを教示操作盤上に表示します。

例A.24.7 WRITE_DICT_Vビルトインプロシージャ
----------------------------------------------
TPTASKEG.UTX
----------------------------------------------
$- "Value of $KAREL_ENB = %d"

----------------------------------------------
--UTILITY PROGRAM:
----------------------------------------------
PROGRAM writdicv
%ENVIRONMENT uif
VAR
status: INTEGER
value_array: ARRAY[1] OF STRING[30]
BEGIN
value_array[1] = '[*system*]$KAREL_ENB'
--DP_DEFAULTを使っている。これは一つしか言語が無い場合の例。
ADD_DICT('TPTASKEG', 'TASK', dp_default, dp_open, status)
WRITE_DICT_V(TPDISPLAY, 'TASK', 0, value_array, status)
END writdicv

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 307 of 412

A.25 X

A.25.1 XYZWPRデータ型
目的:
変数、ファンクションの戻り値の型、ルーチンのパラメータをXYZWPR型として定義する。
構文:
XYZWPR <IN GROUP [n]>
詳細:
 XYZWPRは直交位置(x,y,z)を指定する3個のREALと姿勢(w,p,r)を指定する3個のREAL、そして形態を指定するCONFIGデー
タ型からなります。全体で32バイトです。
 形態の文字列は軸の配置と回転数を示します。これはロボットが特定の位置にあるときのロボットの形態を記述していま
す。

 位置は常に特定の座標系に関して参照されます。
 XYZWPR型変数の成分には、それが以下のように定義されているかのようにアクセス、設定可能です。

例A.25.1 XYZWPR データ型


XYZWPR = STRUCTURE
X: REAL
Y: REAL
Z: REAL
W: REAL
P: REAL
R: REAL
CONFIG_DATA: CONFIG
ENDSTRUCTURE
全フィールドがRead-Writeアクセスです

例:
詳細なプログラム例に関しては以下の節を参照して下さい。
B.3節「レジスタ関連ビルトインの使用」 (REG_EX.KL)
B.4節「位置データ設定及びモニタのプログラム」 (PTH_MOVE.KL)

A.25.2 XYZWPREXTデータ型
目的:
変数、ファンクションの戻り値の型、ルーチンのパラメータをXYZWPREXT型として定義する。
構文:
XYZWPREXT <IN GROUP [n]>
詳細:
 XYZWPRは直交位置(x,y,z)を指定する3個のREALと姿勢(w,p,r)を指定する3個のREAL、そして形態の文字列を指定する要
素からなります。さらに3個の付加軸も含みます。全体で44バイトです。
 形態の文字列は軸の配置と回転数を示します。これはロボットが特定の位置にあるときのロボットの形態を記述していま
す。

 位置は常に特定の座標系に関して参照されます。
 XYZWPREXTの成分には、それが以下のように定義されているかのようにアクセス、設定可能です。

例A.25.2 XYZWPREXT データ型


XYZWPRext = STRUCTURE
X: REAL
Y: REAL
Z: REAL
W: REAL
P: REAL
R: REAL
CONFIG_DATA: CONFIG
EXT1: REAL

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 308 of 412

EXT2: REAL
EXT3: REAL
ENDSTRUCTURE
--注: 全フィールドがRead-Writeアクセスです

A.26 Y
「Y」から始まる記述はありません。

A.27 Z
「Z」から始まる記述はありません。

B KARELプログラム例
この付録はKARELのプログラム例をいくつか掲載しています。これらのプログラムは付録A「KAREL言語アルファベット順解説」に記載
のビルトインの使用方法を示すことを意図した物です。
この節はプログラム中でKARELビルトインの使用方法の例を掲載しています。各KARELビルトインの詳細については付録Aを参照して
下さい。
表B(a)はこのセクション中のプログラム、その主な機能、各プログラムで使用しているビルトイン、そしてソースのセクション一覧です。
表記法
この付録の各プログラムは5つのセクションに分けられています。
セクション 0 - プログラム例で使用しているKAREL言語の各要素の一覧
セクション 1 - プログラムと環境宣言
セクション 2 - 定数、変数、データ型の宣言
セクション 3 - ルーチンの宣言
セクション 4 - プログラム本体
表B(a) KARELプログラム例
プログラム名 プログラムの機能 使用されているビルトイン 参照する節
DELETE_FILE
SAVE_VRS.KL デフォルトデバイスへのデータのセーブ B.1節
SAVE
プログラム例全体を通して使用される標準的な CHR
ROUT_EX.KL B.2節
ルーチンを含みます。 FORCE_SPMENU
CALL_PROGLIN
CHR
CURPOS
GET_JPOS_REG
GET_POS_REG
REG_EX.KL レジスタのビルトインを使用します GET_REG B.3節
POS_REG_TYP
SET_INT_REG
SET_JPOS_REG
SET_POS_REG
FORCE_SPMENU
CHR
TPプログラムの位置データを設定し、そのプロ CNV_REL_JPOS
PTH_MOVE.KL B.4節
グラムを呼び出します。モニタも使用します。 PATH_LEN
SET_CURSOR
ABS
ARRAY_LEN
ファイルとプログラムのリストを作成します。 CNV_INT_STR
LIST_EX.KL B.5節
文字列を扱います。 FILE_LIST
LOAD
LOAD_STATUS

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 309 of 412

PROG_LIST
ROUND
SUB_STR
CNV_TIME_STR
COPY_FILE
DISMOUNT_DEV
ファイルとファイルデバイスのビルトインを使
FILE_EX.KL FORMAT_DEV B.6節
用します。
GET_TIME
MOUNT_DEV
SUB_STR
ABORT_TASK
CNC_DYN_DISB
CNC_DYN_DISE
CNC_DYN_DISP
CNC_DYN_DISS
CNC_DYN_DISI
CNC_DYN_DISR
INI_DYN_DISB
DYN_DISP.KL 動的な表示を行うビルトインを使用します。 B.7節
INI_DYN_DISE
INI_DYN_DISP
INI_DYN_DISS
INI_DYN_DISI
INI_DYN_DISR
LOAD
LOAD_STATUS
RUN_TASK
動的に表示された変数を処理し、値を変更しま
CHG_DATA.KL B.8節
す。
ADD_DICT
ACT_SCREEN
ATT_WINDOW_S
CHECK_DICT
CLR_IO_STAT
CNV_STR_INT
DEF_SCREEN
DISCTRL_LIST
FORCE_SPENU
DCLST_EX.KL 辞書ファイルからリストの表示を行います。 B.9節
IO_STATUS
ORD
READ_DICT
REMOVE_DICT
SET_FILE_ATR
SET_WINDOW
STR_LEN
UNINIT
WRITE_DICT
DCLISTEG.UTX 辞書ファイル N/A B.9.1項
ADD_DICT
CHR
DISCTRL_ALPH
DCALP_EX.KL DISCTRL_ALPHAビルトインを使用します。 FORCE_SPEMU B.10節
POST_ERR
SET_CURSOR
SET_LANG
DCALPHEG.UTX 辞書ファイル N/A B.10.1項
CPY_TP.KL AVL_POS_NUM B.11節
CHR
CLOSE_TPE

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 310 of 412

CNV_JPOS_REL
CNV_REL_JPOS
COPY_TPE
GET_JPOS_TYP
GET_POS_TPE
TPプログラムにオフセットを適用します。 GET_POS_TYP
OPEN TPE
PROG_LIST
SELECT_TPE
SET_JPOS_TPE
SET_POS_TPE

B.1 デフォルトデバイスにデータをセーブする
このプログラムは変数またはTPプログラムをデフォルトデバイスにセーブします。 ユーザがファイルの上書を指定した場合、セーブを行う
前にファイルが削除されます。
例B.1(a) データ保存プログラム - 概略
-----------------------------------------------------------------------------
---- SAVE_VRS.KL
-----------------------------------------------------------------------------
---- Section 0: SAVE_VRS.KLの詳細
-----------------------------------------------------------------------------
---- カバーしているKAREL言語の要素: In Section:
---- アクション:
---- 節(Clauses):
---- コンディション:
---- データ型:
---- BOOLEAN Sec 2
---- INTEGER Sec 2
---- STRING Sec 2
---- ディレクティブ:
---- COMMENT Sec 1
---- ENVIRONMENT Sec 1
---- NOLOCKGROUP Sec 1
---- ビルトインファンクション & プロシージャ:
---- DELETE_FILE Sec 4-B
---- SAVE Sec 4-B
---- 文(Statements):
---- IF, THEN, ENDIF Sec 4-B
---- SELECT, CASE, ENDSELECT Sec 4-A
---- WRITE Sec 4-B
---- 予約語:
---- BEGIN Sec 4
---- CONST Sec 2
---- CR Sec 4-B
---- END Sec 4-B
---- PROGRAM Sec 1
---- VAR Sec 2

例B.1(b) データ保存プログラム - 宣言セクション

--------------------------------------------------------------------------
---- Section 1: プログラムと環境の宣言
--------------------------------------------------------------------------
PROGRAM SAVE_VRS
%NOLOCKGROUP
%COMMENT = 'Save .vr, .tp, .sv'
%ENVIRONMENT MEMO
%ENVIRONMENT FDEV

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 311 of 412

--------------------------------------------------------------------------
---- Section 2: 定数、変数、データ型の宣言
--------------------------------------------------------------------------
CONST
DO_VR = 1 -- 変数ファイルのセーブ
DO_TP = 2 -- TPプログラムのセーブ
DO_SYS = 3 -- システム変数のセーブ
SUCCESS = 0 -- 全ビルトインの呼び出して期待される値
VAR
sav_type : INTEGER -- 実行するセーブのタイプを指定します。
prog_name : STRING[12] -- セーブするプログラム名
STATUS : INTEGER -- ビルトインから返るstatus
file_spec : STRING[30] -- SAVEするファイルスペックを生成します。
dev : STRING[5] -- セーブ先のデバイス
del_vr : BOOLEAN -- file_spec をSAVEする前に削除します
--------------------------------------------------------------------------
---- Section 3: ルーチン宣言
--------------------------------------------------------------------------

例B.1(c) データ保存プログラム - ファイルスペックの作成


--------------------------------------------------------------------------
---- Section 4: メインプログラム
--------------------------------------------------------------------------
BEGIN -- SAVE_VRS
--------------------------------------------------------------------------
---- Section 4-A: ファイルスペックを作成します。セーブするファイルデバイス、
---- ファイル名、ファイルタイプを含みます。
---------------------------------------------------------------------------
IF UNINIT(sav_type) THEN
sav_type = DO_TP --未初期化の場合はTPのセーブとします。
ENDIF
IF UNINIT(dev) THEN
dev = 'MC:' --未初期化の場合はMC:へのセーブとします。
ENDIF
IF UNINIT(prog_name) THEN
prog_name = '*' --プログラム名未初期化の場合は
--全プログラムを対象とします。
ENDIF
IF UNINIT(del_vr) THEN
del_vr = TRUE --未初期化ならSAVE前の削除を有効に
ENDIF
SELECT (sav_type) OF
CASE (DO_VR):
-- prog_nameが'*'ならば、全てのPCの変数が正しいプログラム名で
-- セーブされます。file_specのファイル名部分によらず。
file_spec = dev+prog_name+'.VR' -- 変数ファイル名を作成します。
CASE (DO_TP):
-- prog_nameが'*'ならば、全てのTPプログラムが正しいプログラム名で
-- セーブされます。file_specのプログラム名部分によらず。
file_spec = dev+prog_name+'.TP' -- TPプログラム名を作成します。
CASE (DO_SYS):
prog_name = '*SYSTEM*'
file_spec = dev+'ALLSYS.SV' -- 全てのシステム変数が
-- この一つのファイルにセーブされます。
ENDSELECT

例B.1(d) データ保存プログラム – 削除/上書き


---------------------------------------------------------------------------
---- Section 4-B: セーブ前にファイルを削除して、その後セーブするか否かを

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 312 of 412

---- 決定します。
---------------------------------------------------------------------------
-- ユーザがセーブの前にファイルを削除することを指定したならば、
-- ファイルを削除し、削除が成功したか確認します。
-- 削除が以下のステータスを返す可能性があります。
-- 10003 : "file does not exist", (FLPY:)
-- OR
-- 85014 : "file not found", (全てのRD:, FR:デバイス)
-- ファイルが存在しないならば気にしないので、
-- これらのエラーは無視します。
IF (del_vr = TRUE) THEN
DELETE_FILE (file_spec, FALSE, STATUS) -- ファイルを削除
IF (STATUS <> SUCCESS) AND (STATUS <> 10003) AND
(STATUS <> 85014) THEN
WRITE ('Error ', STATUS,' in attempt to delete ',CR, file_spec,CR)
ENDIF
ENDIF
-- prog_nameが.TPまたは.vrのいずれかに関して、'*'で指定されると
-- SAVEビルトインはファイル/プログラムを適切な名前で
-- 保存します。
SAVE (prog_name, file_spec, STATUS) -- 変数/プログラムをセーブ
IF (STATUS <> SUCCESS) THEN -- セーブの成功を確認
WRITE ('error saving ', file_spec, 'variables', STATUS, CR)
ENDIF
END SAVE_VRS

B.2 標準ルーチン
このプログラムはプログラム例を通して使用される幾つかのルーチンから構成されています。以下にこのファイル中のルーチンの一覧を
示します。
・ CRT_CLS CRT/KBユーザ画面をクリアします。
・ TP_CLS 教示操作盤のユーザ画面をクリアします。

例B.2(a) 標準ルーチン - 概略
-------------------------------------------------------------------------
---- ROUT_EX.KL
-------------------------------------------------------------------------
---- Section 0: ROUT_EX.klの詳細
-------------------------------------------------------------------------
---- カバーしているKAREL言語の要素: In Section:
---- アクション:
---- 節(Clauses):
---- Conditions:
---- データ型:
---- ビルトインファンクション&プロシージャ
---- CHR Sec 3-A,B
---- FORCE_SPMENU Sec 3-A,B
---- 文:
---- ROUTINE Sec 3-A,B
---- WRITE Sec 3-A,B
----
---- 予約語:
---- BEGIN Sec 3-A,B; 4
---- CR Sec 3-B
---- END Sec 3-A,B; 4
---- PROGRAM Sec 1
---- 定義済みファイル名:
---- CRTERROR Sec 3-A
---- CRTFUNC Sec 3-A

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 313 of 412

---- CRTPROMPT Sec 3-A


---- CRTSTATUS Sec 3-A
---- OUTPUT Sec 3-A
---- TPERROR Sec 3-B
---- TPFUNC Sec 3-B
---- TPSTATUS Sec 3-B
---- TPPROMPT Sec 3-B

例B.2(b) 標準ルーチン - 宣言セクション


-----------------------------------------------------------------------
---- Section 1: プログラムと環境の宣言
-----------------------------------------------------------------------
PROGRAM ROUT_EX
%NOLOCKGROUP ---- 動作グループをロックしません
%COMMENT = 'MISC_ROUTINES'
-----------------------------------------------------------------------
---- Section 2: 定数及び変数宣言
-----------------------------------------------------------------------
---------------------s--------------------------------------------------
---- Section 3: ルーチン宣言
-----------------------------------------------------------------------
-----------------------------------------------------------------------
---- Section 3-A: CRT_CLS 宣言
---- 定義済みのウィンドウをクリアします。
---- CRTPROMPT, CRTSTATUS, CRTFUNC, CRTERROR, OUTPUT
---- CRT/KBのユーザ画面を強制的に表示します
-----------------------------------------------------------------------
ROUTINE CRT_CLS
BEGIN ---- CRT_CLS
--定義済みウィンドウ名の詳細に関しては7.10.2章をご覧下さい。
WRITE CRTERROR (CHR(128),CHR(137)) -- ウィンドウクリア、カーソルをホーム位置へ
WRITE CRTSTATUS (CHR(128),CHR(137)) -- ウィンドウクリア、カーソルをホーム位置へ
WRITE CRTPROMPT (CHR(128),CHR(137)) -- ウィンドウクリア、カーソルをホーム位置へ
WRITE CRTFUNC (CHR(128),CHR(137)) -- ウィンドウクリア、カーソルをホーム位置へ
WRITE OUTPUT (CHR(128),CHR(137)) -- ウィンドウクリア、カーソルをホーム位置へ
FORCE_SPMENU(CRT_PANEL,SPI_TPUSER,1) -- CRTユーザ画面を強制表示します。
-- これは最後に行われています。このことにより
-- 画面が点滅するのを防いでいます。
-- 画面が表示された時には綺麗になっています。
END CRT_CLS

例B.2(c) 標準ルーチン - 画面のクリア及び表示


------------------------------------------------------------------------
---- Section 3-B: TP_CLS 宣言
---- 定義済みのウィンドウをクリアします。
---- TPERROR, TPSTATUS, TPPROMPT, TPFUNC TPDISPLAY
---- TPのユーザ画面を強制的に表示します。
------------------------------------------------------------------------
ROUTINE TP_CLS
BEGIN
WRITE (CHR(128),CHR(137)) -- デフォルトでTPDISPLAYがクリアされます。
WRITE TPERROR (CR,' ',CR)
WRITE TPSTATUS(CR,' ',CR)
WRITE TPPROMPT(CR,' ',CR)
WRITE TPFUNC (CR,' ',CR)
FORCE_SPMENU(TP_PANEL,SPI_TPUSER,1) -- ユーザ画面を強制表示します。
-- これは最後に行われています。このことにより
-- 画面が点滅するのを防いでいます。
-- 画面が表示された時には綺麗になっています。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 314 of 412

END TP_CLS
------------------------------------------------------------------------
---- Section 4: Main Program
------------------------------------------------------------------------
BEGIN -- ROUT_EX
END ROUT_EX

B.3 レジスタ関連ビルトインの使用
このプログラムはレジスタ関連のビルトインの使用方法のデモです。REG_EX.KLは現在位置を取得してPR[1]に格納します。その後
PROG_VAL.TPを実行します。PROG_VALはPR[1]の値を修正します。
PROG_VALの完了後、REG_EX.KLがPR[1]の値を取得します。その位置を操作してPR[2]に格納します。その後INTEGERの数値をR
[1]に格納します。別のTPプログラム、PROG_1.TPが実行されます。このプログラムは幾つかの位置でループ処理を行い、ある値をR[2]
に格納します。ループの回数はR[1]に依存します(R[1]は元々KARELプログラムによって設定されたものです)。
PROG_1.TPの完了後、KARELプログラム(REG_EX)がR[2]を取得し、それが期待された値であることを確かめます。
TPプログラムPROG_VAL.TPは以下のようなプログラムとして下さい。

PROG_VAL.TPは以下のことを行います。
・ P[1]に各軸で移動します。
・ PR[1](KARELプログラムで設定されました)の'Y'の位置を変更します。
・ 新しいPR[1]の位置に移動します。
・ 最後にP[1]に戻ります。
TPプログラムPROG_1.TPは以下のようなプログラムとして下さい。

PROG_1.TPは以下のことを行います。
・ R[1]の値をチェックします。
・ R[1]が0でないならば、P[1]及びP[2]へ各軸で移動し、R[1]の値を1減らします。 PROG_1.TPはR[1]が0になるまでループを継続しま
す。
・ ループ完了後、PROG_1.TPはR[2]に1を格納します。KARELプログラムはこれをチェックします。

例B.3(a) レジスタ関連ビルトインの使用 - 概略
--------------------------------------------------------------------------
---- REG_EX.Kl
--------------------------------------------------------------------------
---- カバーしているKAREL言語の要素: In Section:
---- アクション:
---- 節(Clauses):
---- コンディション:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 315 of 412

---- データ型:
---- BOOLEAN Sec 2
---- JOINTPOS Sec 2
---- REAL Sec 2
---- XYZWPR Sec 2
---- ディレクティブ:
---- ALPHABETIZE Sec 1
---- COMMENT Sec 1
---- NOLOCKGROUP Sec 1
---- ビルトインファンクション&プロシージャ:
---- CALL_PROGLIN Sec 4-A, 4-C
---- CHR Sec 4
---- CURPOS Sec 4-A
---- FORCE_SPMENU Sec 4
---- GET_POS_REG Sec 4-B
---- GET_JPOS_REG Sec 4-B
---- GET_REG Sec 4-C
---- POS_REG_TYP Sec 4-B
---- SET_JPOS_REG Sec 4-B
---- SET_INT_REG Sec 4-B
---- SET_POS_REG Sec 4-A
---- 文(Statements):
---- WRITE Sec 4, 4-A,B,C
---- IF..THEN..ELSE..ENDIF Sec 4-A,B,C
---- SELECT...CASE...ENDSELECT Sec 4-B
---- 予約語:
---- BEGIN Sec 4
---- CONST Sec 2
---- CR Sec 4-A,B,C
---- END Sec 4-C
---- PROGRAM Sec 4
---- VAR Sec 2b

例B.3(b) レジスタ関連ビルトインの使用 - 宣言セクション


-------------------------------------------------------------------------
---- Section 1: プログラムと環境の宣言
-------------------------------------------------------------------------
PROGRAM reg_ex
%nolockgroup
%comment = 'Reg-Ops'
%alphabetize
-------------------------------------------------------------------------
---- Section 2: 定数、変数、データ型の宣言
-------------------------------------------------------------------------
CONST
cc_success = 0 -- 成功を意味するstatus
cc_xyzwpr = 2 -- 位置レジがXYZWPRの位置を持つ
cc_jntpos = 9 -- 位置レジがJOINTPOSの位置を持つ
VAR
xyz :XYZWPR
jpos :JOINTPOS
r_val :REAL
prg_indx,
i_val,
pos_type,
num_axes,
STATUS :INTEGER
r_flg :BOOLEAN
------------------------------------------------------------------------

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 316 of 412

---- Section 3: ルーチン宣言


------------------------------------------------------------------------
------------------------------------------------------------------------
---- Section 4: メインプログラム
------------------------------------------------------------------------
BEGIN -- REG_EX
WRITE(CHR(137),CHR(128)); -- TPのユーザ画面をクリアします。
FORCE_SPMENU(TP_PANEL,SPI_TPUSER,1) -- TPのユーザ画面を強制的に表示します

例B.3(c) レジスタ関連ビルトインの使用 - 位置の格納と操作


----------------------------------------------------------------------------
---- Section 4-A: 現在位置をPR[1]に格納し、PROG_VAL.TPを実行
----------------------------------------------------------------------------
WRITE('Getting Current Position',CR)
xyz = CURPOS(0,0) -- 現在位置を取得する
WRITE('Storing Current position to PR[1]',CR)
SET_POS_REG(1,xyz, STATUS) -- PR[1]に位置を格納する
IF (STATUS = cc_success) THEN -- SET_POS_REGが成功したことを確認
WRITE('Executing "PROG_VAL.TP"',CR)
CALL_PROGLIN('PROG_VAL',2,prg_indx, FALSE)
--'PROG_VAL.TP'を2行目から実行する。
-- PROG_VALに入ったところで一時停止しない(第三引数FALSE)
----------------------------------------------------------------------------
---- Section 4-B: 新しい位置をPR[1]から取得。操作してPR[2]に格納
----------------------------------------------------------------------------
WRITE('Getting Position back from PR[1]',CR)
-- PR[1]に格納されている位置のタイプを突き止めます。
POS_REG_TYPE(1, 1, pos_type, num_axes, STATUS)
IF (STATUS = cc_success) THEN
-- 正しいビルトインを使ってPR[1]から位置を取得します。
-- この位置はPROG_VAL.TPで修正されました。
SELECT pos_type OF
CASE (cc_xyzwpr):
xyz= GET_POS_REG(1, STATUS)
CASE (cc_jntpos):
jpos = GET_JPOS_REG(1, STATUS)
xyz = jpos
ELSE:
WRITE ('The position register set to invalid type', pos_type,CR)
STATUS = -1 -- 実行を続けられないようstatusを設定します
ENDSELECT
IF (STATUS = cc_success) THEN -- GET_POS_REG/GET_JPOS_REGが
-- 成功したことを確認
xyz.x = xyz.x+10 -- 位置を操作します。
xyz.z = xyz.z-10
jpos = xyz -- JOINTPOSに変換します。
WRITE('Setting New Position to PR[2]',CR)
SET_JPOS_REG(2,jpos,STATUS) -- そのJOINTPOSをPR[2]に設定します。
IF (STATUS = cc_success) THEN -- SET_JPOS_REGが成功したことを確認します。
WRITE('Setting Integer Value to R[1]',CR)
SET_INT_REG(1, 10, STATUS) -- R[1]に10を設定します。b

例B.3(d) レジスタ関連ビルトインの使用 - プログラムの実行及びレジスタのチェック


----------------------------------------------------------------------
---- Section 4-C: PROG_1.TPを実行しR[2]をチェックします。
----------------------------------------------------------------------
IF (STATUS=cc_success) THEN --SET_INT_REGが成功したことを確認します。
WRITE('Executing "PROG_1.TP"',CR)
CALL_PROGLIN('PROG_1',1, prg_indx, FALSE)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 317 of 412

--PROG_1.TPを1行目から実行します。
--PROG_1に入ったところで一時停止しないこと
WRITE('Getting Value from R[2]',CR)
GET_REG(2,r_flg, i_val, r_val, STATUS) --R[2]の値を取得
IF (STATUS = cc_success) THEN --GET_REGが成功したことを確認
IF (r_flg) THEN --レジスタにはREALの値が入っています。
WRITE('Got REAL value from R[2]',CR)
IF (r_val <> 1.0) THEN --PROG_1.TPによって値が設定されたことを確認
WRITE ('PROG_1 failed to set R[2]',CR)
WRITE ('PROG_1 failed to set R[2]',CR)
ENDIF
ELSE --レジスタにはINTEGERの値が入っています。
WRITE('Got INTEGER value from R[2]',CR)
IF (i_val <> 1) THEN --PROG_1.TPによって値が設定されたことを確認
WRITE ('PROG_1 failed to set R[2]',CR)
ENDIF
ENDIF
ELSE --GET_REGが失敗
WRITE('GET_REG Failed',CR,' Status = ',STATUS,CR)
ENDIF
ELSE --SET_INT_REGが失敗
WRITE('SET_INT_REG Failed, Status = ',STATUS,CR)
ENDIF
ELSE --SET_JPOS_REGが失敗
WRITE('SET_JPOS_REG Failed, Status = ',STATUS,CR)
ENDIF
ELSE -- GET_POS_REGが失敗
WRITE('GET_POS_REG Failed, Status = ',STATUS,CR)
ENDIF
ELSE
WRITE ('POS_REG_TYPE Failed, Status =', STATUS, CR)
ENDIF
ELSE -- SET_POS_REGが失敗
WRITE('SET_POS_REG Failed, Status = ',STATUS,CR)
ENDIF
IF (STATUS = cc_success) THEN
WRITE ('Program Completed Successfully',CR)
ELSE ; WRITE ('Program Aborted due to error',CR)
ENDIF
END reg_ex

B.4 位置データ設定及びモニタのプログラム
このプログラムはTPプログラムPTH_SUBの位置データを設定します。またPTH_SUBを呼び出します。
この例は2つのグローバルモニタも設定します。
・ 最初のモニタはユーザが教示操作盤のキーを押したか否かをチェックします。押したならプログラムを強制終了します。
・ 第二のモニタはプログラムが終了した時に変数を設定します。

例B.4(a) 位置データ設定及びモニタのプログラム - 概略
----------------------------------------------------------------------
---- PTH_MOVE.Kl
----------------------------------------------------------------------
----------------------------------------------------------------------
---- Section 0: PTH_MOVE.klの詳細
----------------------------------------------------------------------
---- カバーしているKAREL言語の要素: In Section:
---- アクション:
---- ABORT Sec 4-A
---- 節(Clauses):

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 318 of 412

---- WHEN Sec 4-A


---- FROM Sec 3-A
---- コンディション:
---- ABORT Sec 4-A
---- データ型:
---- ARRAY OF REAL Sec 2
---- BOOLEAN Sec 2
---- INTEGER Sec 2
---- JOINTPOS6 Sec 2
---- XYZWPR Sec 2
---- ディレクティブ:
---- ALPHABETIZE Sec 1
---- COMMENT Sec 1
---- ENVIRONMENT Sec 1
---- ビルトインファンクション&プロシージャ:
---- CHR Sec 3-B; 4-B,D
---- CNV_REL_JPOS Sec 4-D
---- SET_CURSOR Sec 4-B
---- OPEN_TPE Sec 4-D
---- CLOSE_TPE Sec 4-D
---- SET_JPOS_TPE Sec 4-D
---- SET_POS_TPE Sec 4-D
---- CALL_PROG Sec 4-D

例B.4(b) 位置データ設定及びモニタのプログラム - 概略(続き)


---- 文(Statements):
---- Abort Sec 4-C
---- CONDITION...ENDCONDITION Sec 4-A
---- FOR...ENDFOR Sec 4-D
---- ROUTINE Sec 3-A, B
---- WAIT FOR Sec 3-B
---- WRITE Sec 3-B; 4-B,C,D
---- 予約語:
---- BEGIN Sec 3-A,B, 4
---- CONST Sec 2
---- END Sec 3-A,B: 4-D
---- VAR Sec 2
---- PROGRAM Sec 1
---- 定義済みファイル名:
---- TPDISPLAY Sec 4-B

例B.4(c) 位置データ設定及びモニタのプログラム - 宣言セクション


-----------------------------------------------------------------------------
---- Section 1: プログラムと環境の宣言
-----------------------------------------------------------------------------
PROGRAM PTH_MOVE -- プログラム名を定義します。
%ALPHABETIZE -- 変数をアルファベット順で生成します。
%COMMENT = 'MOVE using TP'
%ENVIRONMENT UIF -- SET_CURSORに必要
%NOPAUSESHFT
-----------------------------------------------------------------------------
---- Section 2: 定数及び変数宣言
-----------------------------------------------------------------------------
CONST
CH_ABORT = 1 -- ABORTのモニタに関連付けられている番号
CH_ONE = 2 -- F1キーのモニタに関連付けられている番号

VAR
STATUS :INTEGER -- ビルトインからのstatus

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 319 of 412

node_ind :INTEGER -- PATHに沿って移動する時のindex


loop_pth :INTEGER -- FORループのカウンタ
prg_abrt :BOOLEAN -- プログラムの終了時に設定されます。
open_id :INTEGER -- PTH_SUB.TP のopenに使用します。
prog_index:INTEGER -- PTH_SUB.TPのCALLに使用します。
strt_jnt :JOINTPOS6 -- 動作の開始位置
via_pos :XYZWPR -- 円弧動作の経由点
des_pos :XYZWPR -- 目標点
real_ary :ARRAY[6] OF REAL -- 6軸の各軸位置の作成に
-- 使用されます。
INDEX :INTEGER -- FORループのカウンタ

例B.4(d) 位置データ設定及びモニタのプログラム - ルーチン宣言


-----------------------------------------------------------------------------
---- Section 3: ルーチン宣言
-----------------------------------------------------------------------------
---- Section 3-A: TP_CLS 宣言
ROUTINE TP_CLS FROM ROUT_EX -- ROUT_EXがロードされている必要があります。
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
---- Section 3-B: YES_NO 宣言
---- TPのファンクションキーの行に選択肢を表示します。
---- ユーザにレスポンスを求めます。
---- 数値キーの1キーはグローバルモニタ
---- [CH_ONE]で関されます。数値キー2(訳注:TPIN[131] )はここで監視されます。
---- 1が押されるとプログラムは終了します。
---- 2が押されるとプログラムは続きます。
---- 例として使っていますが、数値キーは通常このように
---- 使用しません。
-----------------------------------------------------------------------------
ROUTINE YES_NO
BEGIN
TP_CLS -- ルーチン呼びだし。TPのユーザ画面をクリアし、
-- 強制的に表示します
--- 見出しは反転表示します。その後反転表示をOFFします。
WRITE (CHR(139),' PLEASE READ ',CHR(143),CR)
WRITE (CR,' Press key 1 to abort ')
WRITE (CR,' Press key 2 to continue ',CR)

WAIT FOR TPIN[50] -- ユーザの反応を待ってから処理を継続


-- ユーザがF1(ABORT)を押した場合、
-- モニタCH_ABORTがプログラムを
-- 強制終了します。
TP_CLS -- TPのユーザ画面をクリア
WRITE (CHR(139),' PLEASE READ ',CHR(143),CR)
WRITE (CR,' Press key 1 to abort ',CR)
END YES_NO

例B.4(e) 位置データ設定及びモニタのプログラム - モニタの宣言


-----------------------------------------------------------------------------
---- Section 4: メインプログラム
-----------------------------------------------------------------------------
BEGIN -- PTH_MOVE
-----------------------------------------------------------------------------
---- Section 4-A: グローバルモニタの宣言
-----------------------------------------------------------------------------
-- 以下のようなTPプログラムPTH_SUB.tpが存在していることが前提です。
-- 本プログラムからイチ[1],[2],[3]のデータを設定し、
-- PTH_SUBを呼び出して動作を実行します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 320 of 412

--
-- 1:カクジク イチ[1] 100% イチギメ ;
-- 2:カクジク イチ[2] 100% イチギメ ;
-- 3:カクジク イチ[3] 100% イチギメ ;
--
-- 該当位置の動作文が無いと設定した位置データが使われません。
--
-- *****************************************************
-- 注意:ROUT_EXがロードされていないとエラーになります。
-- Appendix Bにソースがあります。
-- *****************************************************
--

CONDITION[CH_ABORT]:
WHEN ABORT DO -- プログラムが終了する時に、prg_abrtフラグを設定します
-- プログラムが自分自身で終了する時、または外部から
-- 終了させられる時にトリガします。
prg_abrt = TRUE -- prg_abrtが設定されたことを検出し、操作の停止処理を行う
-- 別のタスクを作ることもできます。
-- (即ちDOUT/GOUTの設定、PLCへの通知。)
ENDCONDITION
CONDITION[CH_ONE]:
WHEN TPIN[49] DO -- TPの'1'キーを監視します。1が押されると
ABORT -- プログラムを終了します。
ENDCONDITION
prg_abrt = FALSE -- プログラム終了時にCH_ABORTが有効になっている
-- 場合のみ設定される変数を初期化します。
ENABLE CONDITION[CH_ABORT] -- 終了監視のモニタのスキャンを開始します。
ENABLE CONDITION[CH_ONE] -- F1キー監視のモニタのスキャンを開始します。
-----------------------------------------------------------------------------
---- Section 4-B: バナーメッセージを表示し、ユーザの反応を待ちます。
-----------------------------------------------------------------------------
TP_CLS -- ルーチン呼びだし。TPのユーザ画面をクリアし、
-- 強制的に表示します。
SET_CURSOR(TPDISPLAY,2,13, STATUS) -- TPのユーザ画面のカーソルの位置を設定
IF (STATUS <> 0 ) THEN -- SET_CURSORが成功したかチェック
WRITE ('SET_CURSOR built-in failed with status = ',STATUS,CR)
YES_NO -- エラーのため、終了するか否か聞きます。
ENDIF
YES_NO -- ユーザの反応を待ちます。

例B.4(f) 位置データ設定及びモニタのプログラム - 位置データの設定と呼びだし


----------------------------------------------------------------------------
---- Section 4-D: 位置を生成し、TPプログラムのイチに設定し、呼び出します
----------------------------------------------------------------------------
FOR INDEX = 1 TO 6 DO -- 全ての各軸値を0とします。
real_ary[INDEX] = 0.0
ENDFOR
real_ary[5] = 90.0 -- 確実に特異点でない位置となるように
-- しています。
CNV_REL_JPOS(real_ary, strt_jnt, STATUS) -- real_aryの値を各軸位置strt_jnt
-- に変換します。
IF (STATUS <> 0 ) THEN -- 各軸位置の変換が
-- 成功しませんでした。
WRITE ('CNV_REL_JPOS built-in failed with status = ',STATUS,CR)
YES_NO -- 継続したいかどうかユーザに聞きます。
ELSE
-- 各軸位置への変換は成功しました。
-- 開始位置strt_jntが生成されました。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 321 of 412

-- 軸1-4は0度。軸5が90度。軸6は0です。
via_pos = strt_jnt -- strt_jntをvia_posにコピー
via_pos.x = via_pos.x +200 -- 位置xにオフセットを加えます。
via_pos.y = via_pos.y +200 -- 位置yにオフセットを加えます。
-- 経由点via_posが生成されました。
-- その位置はxとyに200mmのオフセットを加えた点以外は、
-- strt_jntと同じです。
des_pos = strt_jnt -- strt_jntをdest_posにコピー
des_pos.x = des_pos.x + 400 -- 位置xにオフセットを加えます。
-- 目標点dest_posが生成されました。
-- その位置はxに400mmのオフセットを加えた点以外は
-- strt_jntと同じです。

例B.4(g) 位置データ設定及びモニタのプログラム - 位置データの設定


OPEN_TPE('PTH_SUB',TPE_RWACC, TPE_WRTREJ, open_id, STATUS)
IF STATUS <> 0 THEN
WRITE (CR,'Open PTH_SUB failed:',STATUS,CR)
ABORT
ENDIF
SET_JPOS_TPE(open_id, 1, strt_jnt, STATUS,1)
IF STATUS <> 0 THEN
WRITE (CR,'Write strt_pos to P[1] of PTH_SUB failed:',STATUS,CR)
ABORT
ENDIF
SET_POS_TPE(open_id, 2, via_pos, STATUS,1)
IF STATUS <> 0 THEN
WRITE (CR,'Write via_pos to P[2] of PTH_SUB failed:',STATUS,CR)
ABORT
ENDIF
SET_POS_TPE(open_id, 3, des_pos, STATUS,1)
WRITE (CR,'Moving to Destination Position',CR)
IF STATUS <> 0 THEN
WRITE (CR,'Write des_pos to P[3] of PTH_SUB failed:',STATUS,CR)
ABORT
ENDIF
CLOSE_TPE(open_id, STATUS)
CALL_PROG('pth_sub', prog_index)
ENDIF

WRITE ('pth_move Successfully Completed',CR)


END PTH_MOVE

B.5 ファイルとプログラムのリスト作成及び文字列操作
このプログラムはMC:上のファイルのリストを表示します。そして制御装置にロードされているプログラムのリストを作成します。基本的な
STRINGの操作能力、文(statement)のセパレータとしてのセミコロン(;)の使用、IF文のネストも示します。
例B.5(a) ファイルとプログラムのリスト作成及び文字列操作 - 概略

-----------------------------------------------------------------------------
---- LIST_EX.Kl
-----------------------------------------------------------------------------
---- Section 0: LIST_EX.klの詳細
-----------------------------------------------------------------------------
---- カバーしているKAREL言語の要素: In Section:
---- アクション:
---- 節(Clauses):
---- FROM Sec 3-B
----
---- コンディション:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 322 of 412

---- データ型:
---- ARRAY OF STRING Sec 2
---- BOOLEAN Sec 2, 3
---- INTEGER Sec 2, 3
---- STRING Sec 2
---- ディレクティブ:
---- %COMMENT Sec 1
---- %NOLOCKGROUP Sec 1
---- ビルトインファンクション&ルーチン:
---- ABS Sec 4-A
---- ARRAY_LEN Sec 4-C&D
---- CNV_INT_STR Sec 4-A
---- FILE_LIST Sec 4-C
---- LOAD Sec 4-B
---- LOAD_STATUS Sec 4-B
---- PROG_LIST Sec 4-D
---- ROUND Sec 4-A
---- SUB_STR Sec 4-A

例B.5(b) ファイルとプログラムのリスト作成及び文字列操作 - 概略(続き)


---- 文(Statements):
---- FOR .... ENDFOR Sec 3-B
---- IF...THEN...ENDIF Sec 4-A,B,C,D
---- ROUTINE Sec 3-A,B,C
---- REPEAT...UNTIL Sec 4-C,D
---- RETURN Sec 3-A
---- WRITE Sec 3-B; 4-A,B
---- 予約語:
---- BEGIN Sec 3-A,B; 4
---- CONST Sec 2
---- CR Sec 3-B; 4-A,B
---- END Sec 3-A,B, 4-B
---- PROGRAM Sec 1
---- VAR Sec 2
----
---- 演算子:
---- MOD Sec 3-A
---- / Sec 3-A
---- * Sec 3-A
---- ファイルデバイス:
---- MC: Sec 4-C
---- 基本的な概念:
---- 文(statement)のセパレータとしてのセミコロン(;)
---- IF..THEN..ELSE..IF..THEN..ELSE..ENDIF..ENDIFの構造のネスト
---- '+'を用いたSTRINGの連結
----

例B.5(c) ファイルとプログラムのリスト作成及び文字列操作 - 宣言セクション


-----------------------------------------------------------------------------
---- Section 1: プログラムと環境の宣言
------------------------------------------------------------------------------
PROGRAM LIST_EX
%NOLOCKGROUP -- 動作グループをロックしません
%COMMENT = 'FILE_LIST'
-----------------------------------------------------------------------------
---- Section 2: 定数及び変数宣言
------------------------------------------------------------------------------
CONST
INCREMENT = 13849

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 323 of 412

MODULUS = 65536
MULTIPLIER = 25173
VAR
pr_cases :STRING[6] -- 文字列に変換された擬似乱数
prg_nm :STRING[50] -- 文字列をつなげて作ったプログラム名
loaded :BOOLEAN -- プログラムがロードされたかの確認に使用
initi :BOOLEAN -- 変数が初期化されているかの確認に使用
indx1 :INTEGER -- FOR loopのindex
cases, -- 返される乱数
max_number, -- 乱数の最大値
seed :INTEGER -- 乱数を生成するためのシード
file_spec :STRING[20] -- FILE_LIST向けのファイルスペック
n_files :INTEGER -- FILE_LISTから返されるファイル数
n_skip :INTEGER -- FILE_LIST及びPROG_LISTでスキップする数
format :INTEGER -- 返される名前のフォーマット
-- FILE_LIST & PROG_LIST向け
ary_nam :ARRAY[9] OF STRING[20] -- FILE_LIST及びPROG_LISTから
-- 返される名前
prog_name :STRING[10] -- PROG_LISTへのプログラム名
prog_type :INTEGER -- PROG_LISTへのプログラムタイプ
n_progs :INTEGER -- PROG_LISTから返されるプログラムの数
STATUS :INTEGER -- Status

例B.5(d) ファイルとプログラムのリスト作成及び文字列操作 - ルーチン宣言


-----------------------------------------------------------------------------
---- Section 3: ルーチン宣言
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
---- Section 3-A: RANDOM 宣言
---- 擬似乱数を生成し、それを返します。
-----------------------------------------------------------------------------
ROUTINE random(seed : INTEGER) : REAL
BEGIN
seed = (seed * MULTIPLIER + INCREMENT) MOD MODULUS
RETURN(seed/65535.0)
END random
-----------------------------------------------------------------------------
---- Section 3-B: DISPL_LIST 宣言
---- 配列ary_namの引数maxnum個の要素を表示します。
-----------------------------------------------------------------------------
ROUTINE displ_list(maxnum :INTEGER)
BEGIN
FOR indx1 = 1 TO maxnum DO ; WRITE (ary_nam[indx1],CR); ENDFOR
-- セミコロンを使っている点に注目して下さい。これで一行に
-- 複数の文を書けます。
END displ_list
-----------------------------------------------------------------------------
---- Section 3-C: TP_CLS 宣言
---- このルーチンはROUT_EV.KLからのものです(FROM rout_ex)
---- TPのユーザ画面をクリアし、強制的に表示します。
-----------------------------------------------------------------------------
ROUTINE tp_cls FROM rout_ex

例B.5(e) ファイルとプログラムのリスト作成及び文字列操作 - メインプログラム


-----------------------------------------------------------------------------
---- Section 4: メインプログラム
------------------------------------------------------------------------------
BEGIN -- LIST_EX

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 324 of 412

tp_cls -- rout_ex.klからのルーチンを使用します。
-----------------------------------------------------------------------------
---- Section 4-A: 擬似乱数を生成し、INTEGERからSTRINGに変換します。
------------------------------------------------------------------------------
max_number = 255 ; -- よって乱数は0から255です。
seed = 259 ;
WRITE ('Manupulating String',CR)
cases = ROUND(ABS((random(seed)*max_number)))-- RANDOMを呼び、返された値の
-- 絶対値を取り、
-- その数を丸めます。
CNV_INT_STR(cases, 1, 0, pr_cases) -- casesをASCIIの表現に
-- 変換します。
pr_cases = SUB_STR(pr_cases, 2,3) -- 2文字目から、多くて3文字を
-- 取得します。というのは最初の
-- 文字が空白であるからです。

例B.5(f) ファイルとプログラムのリスト作成及び文字列操作 - プログラム名の生成とロード


-----------------------------------------------------------------------------
---- Section 4-B: 数字からプログラム名を作成し、ロードしようとします。
------------------------------------------------------------------------------
--- STRINGとINTEGERの操作を示すため、ランダムなプログラム名を
--- 作成します。
prg_nm = 'MYPROG' + pr_cases + '.PC' -- STRINGを連結し、
-- プログラム名を生成します。
--- そのプログラムが既にロードされていないことを確認
WRITE ('Checking load status of ',prg_nm,CR)
LOAD_STATUS(prg_nm, loaded, initi)
IF (NOT loaded) THEN -- プログラムはロードされていません。
WRITE ('Loading ',prg_nm,CR)
LOAD(prg_nm, 0 , STATUS) -- プログラムをロードします。
IF (STATUS = 0 ) THEN -- ロードの成功を確認
WRITE ('Loading ','MYPROG' + pr_cases + '.VR',CR)
LOAD('MYPROG' + pr_cases + '.VR', 0, STATUS) -- VRファイルをロード
IF (STATUS <> 0 ) THEN -- VRファイルのロード失敗
WRITE ('Loading of ', 'MYPROG' + pr_cases + '.VR', ' failed',CR)
WRITE ('Status = ',STATUS);
ENDIF
ELSE -- プログラムのロードは失敗
IF (STATUS = 10003) THEN -- ファイルが存在しません。
WRITE (prg_nm, ' file does not exist',CR)
ELSE
WRITE ('Loading of ',prg_nm, ' failed',CR,'Status = ',STATUS);
ENDIF
ENDIF
ELSE -- プログラムは既にロード済みです。
IF (NOT initi) THEN -- 変数が未初期化
WRITE ('Loading ','MYPROG' + pr_cases + '.VR',CR)
LOAD('MYPROG' + pr_cases + '.VR', 0, STATUS) -- 変数をロード
IF (STATUS <> 0 ) THEN -- 変数ファイルのロードに失敗
WRITE ('Loading of ', 'MYPROG' + pr_cases + '.VR', ' failed',CR)
WRITE ('Status = ',STATUS);
ENDIF
ENDIF
ENDIF

例B.5(g) ファイルとプログラムのリスト作成及び文字列操作 - プログラムのリスト作成


-----------------------------------------------------------------------------
---- Section 4-C: MC:のファイルのリストをチェックし、表示。
------------------------------------------------------------------------------

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 325 of 412

--- MC:上のファイルのリストを表示
file_spec = 'MC:*.*' -- MC:上の全ファイル
n_skip = 0 -- 最初はファイルをスキップしません。
format = 3 -- filename.filetype の書式でリストを取得します。
WRITE ('Doing File list',CR)
REPEAT -- 全てのファイルがリストされるまで
FILE_LIST(file_spec, n_skip, format, ary_nam, n_files, STATUS)
IF (STATUS <>0 ) THEN -- エラー発生
WRITE ('FILE_LIST builtin failed with Status = ',STATUS,CR)
ELSE
displ_list(n_files) -- TPのユーザ画面に名前を書きます。
n_skip = n_skip + n_files -- 既に取得したファイルをスキップします。
ENDIF
UNTIL (ARRAY_LEN(ary_nam) <> n_files) -- n_filesがary_nameの宣言長と等しくないなら、
-- 全てのファイルがリストされました。(未発見の
-- ものが残っていないので、ary_namを使い切らなかった)
-----------------------------------------------------------------------------
---- Section 4-D: 制御装置にロードされているプログラムを示します。
-----------------------------------------------------------------------------
--- 制御装置にロードされているプログラムのリストを表示します。
prog_name = '*' -- 全プログラム名をリストします。
prog_type = 6 -- PCファイルのみをリストします。
n_skip = 0 -- 最初はファイルをスキップしません。
format = 2 -- filename.filetype の書式でリストを取得します。
WRITE ('Doing Program list',CR)
REPEAT -- 全てのプログラムがリストされるまで
PROG_LIST(prog_name, prog_type, n_skip, format, ary_nam, n_progs, STATUS)
-- プログラム名はary_namに格納されます。
-- n_progsはary_namに格納されたプログラム名の数です。
IF (STATUS <>0 ) THEN
WRITE ('PROG_LIST builtin failed with Status = ',STATUS,CR)
ELSE
displ_list(n_progs) -- 現在のリストを表示します。
n_skip = n_skip + n_progs -- 既に取得したプログラムをスキップします。
ENDIF
UNTIL (ARRAY_LEN(ary_nam) <> n_progs) -- n_filesがary_nameの宣言長と等しくないなら、
-- 全プログラムがリストされました。
END LIST_EX

B.6 ファイルとファイルデバイスのビルトインの使用
このプログラムはファイルとファイルデバイスのビルトインの使い方を示します。このプログラムはRAMディスクをFORMAT(フォーマット)
し、MOUNT(マウント)します。その後MC:からRD:へファイルをコピーします。 RAMディスクが一杯になると、RAMディスクのサイズを変
更し、再フォーマットします。 このプログラムは全ファイルのがコピーされるか、ビルトインが失敗するまで続きます。
例B.6(a) ファイルとファイルデバイスのビルトインの使用 - 概略
-----------------------------------------------------------------------------
---- FILE_EX.Kl
-----------------------------------------------------------------------------
---- Section 0: FILE_EX.klの詳細
-----------------------------------------------------------------------------
---- カバーしているKAREL言語の要素: In Section:
---- アクション:
---- 節(Clauses):
---- FROM Sec 3
---- コンディション:
---- データ型:
---- BOOLEAN Sec 2
---- INTEGER Sec 2
---- STRING Sec 2

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 326 of 412

---- ディレクティブ:
---- COMMENT Sec 1
---- NOLOCKGROUP Sec 1
---- ビルトインファンクション & プロシージャ:
---- CNV_TIME_STR Sec 4-A
---- COPY_FILE Sec 4-B
---- DISMOUNT_DEV Sec 4-B
---- FORMAT_DEV Sec 4-B
---- GET_TIME Sec 4-A
---- MOUNT_DEV Sec 4-B
---- PURGE_DEV Sec 4-B
---- SUB_STR Sec 4-A
---- 文(Statements):
---- IF...THEN...ELSE...ENDIF Sec 4-B
---- REPEAT...UNTIL Sec 4-A
---- ROUTINE Sec 3
---- SELECT...ENDSELECT Sec 4-B
---- WRITE Sec 4-A,B

例B.6(b) ファイルとファイルデバイスのビルトインの使用 - 概略(続き)


---- 予約語:
---- BEGIN Sec 4
---- CONST Sec 2
---- CR Sec 4-A,B
---- END Sec 4-B
---- PROGRAM Sec 4
---- VAR Sec 2
---- 使用されているデバイス:
---- FLPY Sec 4-B
---- MF3 Sec 4-B
---- RD Sec 4-B
---- FR Sec 4-B

例B.6(c) ファイルとファイルデバイスのビルトインの使用 - 宣言セクション、ルーチン宣言


-----------------------------------------------------------------------------
---- Section 1: プログラムと環境の宣言
-----------------------------------------------------------------------------
PROGRAM FILE_EX
%nolockgroup
%comment = 'COPY FILES'
-----------------------------------------------------------------------------
---- Section 2: 定数及び変数宣言
-----------------------------------------------------------------------------
CONST
SUCCESS = 0 -- ビルトインからの成功を示すstatus
FINISHED = TRUE -- コピー終了
TRY_AGAIN = FALSE -- もう一度コピーして
RD_FULL = 85020 -- RAMディスクが一杯です
NOT_MOUNT = 85005 -- デバイスがマウントされていません。
FR_FULL = 85001 -- FROMディスクが一杯です。
MNT_RD = 85004 -- RAMをマウントする必要があります。

VAR
time_int : INTEGER
time_str : STRING[30]
STATUS : INTEGER
cpy_stat : BOOLEAN
to_dev : STRING[5]
-----------------------------------------------------------------------------

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 327 of 412

---- Section 3: ルーチン宣言


-----------------------------------------------------------------------------
ROUTINE tp_cls FROM ROUT_EX
-----------------------------------------------------------------------------
---- Section 4: メインプログラム
-----------------------------------------------------------------------------
BEGIN -- FILE_EX
tp_cls -- rout_exのルーチン
-----------------------------------------------------------------------------
---- Section 4-A: 時間を取得し、RAMディスクをフォーマットします。
-----------------------------------------------------------------------------
GET_TIME(time_int) -- システム時間を取得します。
CNV_TIME_STR(time_int, time_str) -- INTEGERの時間を読めるフォーマット
-- に変換します。
WRITE ('Today is ', SUB_STR(time_str, 2,8),CR) -- 日付部分を表示します。
WRITE ('Time is ', SUB_STR(time_str, 11,5),CR) -- 時間部分を表示します。

例B.6(d) ファイルとファイルデバイスのビルトインの使用 - RAMディスクのマウントと、そこへのコピー


-----------------------------------------------------------------------------
---- Section 4-B: RAMディスクをマウントし、MCからMF3へのコピーを開始します。
-----------------------------------------------------------------------------
to_dev = 'MF3:'
REPEAT -- 全ファイルがコピーされるまで
cpy_stat = FINISHED
WRITE('COPYing......',CR)
-- MC:からto_devへファイルをコピーします。既にファイルがあれば
-- 上書します。
COPY_FILE('MC:*.kl', to_dev, TRUE, FALSE, STATUS)
SELECT (STATUS) OF
CASE (RD_FULL, 2002): -- RAMディスクが一杯です。
-- RAMディスクをディスマウントしてサイズを変更します。
WRITE ('DISMOUNTing RD: ....',CR)
DISMOUNT_DEV('RD:', STATUS)
-- ディスマウントが成功したか、または既にマウントされていなかったか
-- を確認します。
IF (STATUS = SUCCESS) OR (STATUS = NOT_MOUNT) THEN
-- RD:のサイズを増やします。
WRITE('Increasing RD: size...',CR)
$FILE_MAXSEC = ROUND($FILE_MAXSEC * 1.2)
-- RAMディスクのサイズを増やし
-- RAMディスクをフォーマットします。
WRITE('FORMATTING RD:......',CR)
FORMAT_DEV('RD:','' ,FALSE, STATUS) -- RAMディスクをフォーマットします。
IF (STATUS <> SUCCESS) THEN
WRITE ('FORMAT of RD: failed, status:', STATUS,CR)
WRITE ('Copy incomplete',CR)
ELSE
cpy_stat = TRY_AGAIN
ENDIF
WRITE('MOUNTing RD:......',CR)
MOUNT_DEV ('RD:', STATUS)
IF (STATUS <> SUCCESS) THEN
WRITE ('MOUNTing of RD: failed, status:', STATUS,CR)
WRITE ('Copy incomplete',CR)
ELSE
cpy_stat = TRY_AGAIN
ENDIF
ELSE
WRITE ('DISMOUNT of RD: failed, status:', STATUS,CR)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 328 of 412

WRITE ('Copy incomplete',CR)


ENDIF

例B.6(e) ファイルとファイルデバイスのビルトインの使用 - RAMディスクのマウントと、そこへのコピー (続き)


CASE (FR_FULL): -- FROMディスクが一杯です。
WRITE ('FROM disk is full',CR, 'PURGING FROM.....', CR)
PURGE_DEV ('FR:', STATUS) -- FROMをパージ
IF (STATUS <> SUCCESS) THEN
WRITE ('PURGE of FROM failed, status:', STATUS, CR)
WRITE ('Copy incomplete', CR)
ELSE
cpy_stat = TRY_AGAIN
ENDIF
CASE (NOT_MOUNT, MNT_RD): -- デバイスがマウントされていません。
WRITE ('MOUNTing ',to_dev,'.....',CR)
MOUNT_DEV(to_dev, STATUS)
IF (STATUS <> SUCCESS) THEN
WRITE ('MOUNTing of ',to_dev,': failed, status:', STATUS, CR)
WRITE ('Copy incomplete', CR)
ELSE
cpy_stat = TRY_AGAIN
ENDIF
CASE (SUCCESS):
WRITE ('Copy completed successfully!',CR)
ELSE:
WRITE ('Copy failed, status:', STATUS,CR)
ENDSELECT
UNTIL (cpy_stat = FINISHED)
END file_ex

B.7 動的な表示を行うビルトインの使用
このプログラムは動的な表示を行うビルトインの使用方法を実証します。このプログラムは様々なデータ型の動的な表示を開始します。
その後別タスクCHG_DATAを実行します。そのタスクが動的に表示される変数の値を変更します。
このプログラムを抜ける前に動的な表示はキャンセルされ、もう一方のタスクが終了します。DYNDISPが終了するときに変数dynd_abrt
が設定され、それをCHG_DATAが検出します。このことにより、DYN_DISPが終了するとCHG_DATAが実行を継続できないようになっ
ています。

例B.7(a) 動的な表示を行うビルトインの使用 - 概略

-----------------------------------------------------------------------------
---- DYN_DISP.Kl
-----------------------------------------------------------------------------
---- Section 0: DYN_DISP.KLの詳細
-----------------------------------------------------------------------------
---- カバーしているKAREL言語の要素: In Section:
---- アクション:
---- 節(Clauses):
---- FROM Sec 3-C
---- IN CMOS Sec 2
---- WHEN Sec 4
---- コンディション:
---- ABORT Sec 4
---- データ型:
---- BOOLEAN Sec 2
---- INTEGER Sec 2
---- REAL Sec 2
---- STRING Sec 2
---- ディレクティブ:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 329 of 412

---- ALPHABETIZE Sec 1


---- COMMENT Sec 1
---- NOLOCKGROUP Sec 1

例B.7(b) 動的な表示を行うビルトインの使用 - 概略(続き)


---- ビルトインファンクション & プロシージャ:
---- ABORT_TASK Sec 4-C
---- CNC_DYN_DISI Sec 4-C
---- CNC_DYN_DISR Sec 4-C
---- CNC_DYN_DISB Sec 4-C
---- CNC_DYN_DISE Sec 4-C
---- CNC_DYN_DISP Sec 4-C
---- CNC_DYN_DISS Sec 4-C
---- INI_DYN_DISI Sec 3-A, 4-A
---- INI_DYN_DISR Sec 3-B, 4-A
---- INI_DYN_DISB Sec 3-C, 4-A
---- INI_DYN_DISE Sec 3-D, 4-A
---- INI_DYN_DISP Sec 3-E, 4-A
---- INI_DYN_DISS Sec 3-F, 4-A
---- LOAD_STATUS Sec 4-B
---- LOAD Sec 4-B
---- RUN_TASK Sec 4-B
----
---- 文(Statements):
---- CONDITION...ENDCONDITION Sec 4
---- IF...THEN...ENDIF Sec 4-A,B,C
---- READ Sec 4-C
---- ROUTINE Sec 3-A,B,C
---- WRITE Sec 4-A,B,C
----
---- 予約語:
---- BEGIN Sec 3-A,B; 4
---- CR Sec 4-A
---- CONST Sec 2
---- END Sec 3-A,B; 4-C
---- PROGRAM Sec 4
---- VAR Sec 2
---- 定義済みファイル変数:
---- TPPROMPT Sec 4-B,C
---- 定義済みウィンドウ:
---- T_FU Sec 3-A,B

例B.7(c) 動的な表示を行うビルトインの使用 - 宣言セクション


-----------------------------------------------------------------------------
---- Section 1: プログラムと環境の宣言
-----------------------------------------------------------------------------
PROGRAM DYN_DISP
%nolockgroup
%comment = 'Dynamic Disp'
%alphabetize
%INCLUDE KLIOTYPS
-----------------------------------------------------------------------------
---- Section 2: 定数及び変数宣言
-----------------------------------------------------------------------------
CONST
cc_success = 0 -- 成功を示すstatusです
cc_clear_win = 128 -- ウィンドウのクリア
cc_clear_eol = 129 -- 行末までクリア
cc_clear_eow = 130 -- ウィンドウの終わりまでクリア

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 330 of 412

CH_ABORT = 1 -- プログラムの終了を検出するモニタ
VAR
Int_wind :STRING[10]
Rel_wind :STRING[10]
Field_Width :INTEGER
Attr_Mask :INTEGER
Char_Size :INTEGER
Row :INTEGER
Col :INTEGER
Interval :INTEGER
Buffer_Size :INTEGER
Format :STRING[7]
bool_names :ARRAY[2] OF STRING[10]
enum_names :ARRAY[4] OF STRING[10]
pval_names :ARRAY[2] OF STRING[10]
bool1 IN CMOS :BOOLEAN
enum1 IN CMOS :INTEGER
port_type :INTEGER
port_no :INTEGER
Str1 IN CMOS :STRING[10]
Int1 IN CMOS :INTEGER -- IN CMOSを使うと変数をCMOS RAMに作成します。
Real1 IN CMOS :REAL -- それはパーマネントメモリです。
STATUS :INTEGER
loaded,
initialized :BOOLEAN
dynd_abrt :BOOLEAN -- プログラムが終了するとTRUEとなります。

例B.7(d) 動的な表示を行うビルトインの使用 - ルーチン宣言


-----------------------------------------------------------------------------
---- Section 3: ルーチン宣言
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
---- Section 3-A: SET_INT 宣言
---- INI_DYN_DISIの呼び出しに必要な全てのパラメータを設定します。
-----------------------------------------------------------------------------
ROUTINE Set_Int
Begin
-- 有効な定義済みのウィンドウは7.10.1節、「教示操作盤上のユーザ画面」
-- に記述されています。
-- エラー行 --> 'ERR' 1行
-- ステータス行--> 'T_ST' 3行
-- 表示ウィンドウ --> 'T_FU' 10行
-- プロンプト行 --> 'T_PR' 1行
-- ファンクションキー --> 'T_FK' 1行
Int_Wind = 'T_FU' -- 定義済みのウィンドウを使用します。
Field_Width = 0 -- 必要な最小の幅を使用します。
Char_Size = 0 -- 通常サイズ
Row = 1 -- 動的に表示される
Col = 16 -- 'T_FU'中の位置を指定します。
Interval = 250 -- 更新間隔は250ms
Buffer_Size = 10 -- Minimum value required.
Format = '%-8d' -- 最小フィールド幅8文字
--- この指定ではINTEGERは以下のように表示されます。
--- --------
--- |xxxxxxxx|
--- --------
--- ここでINTEGERの値は左詰になります。
--- INTEGERの値が8文字以下で無い限り、xはINTEGERの値となります。
--- 右側は全体で8文字になるまで空白となります。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 331 of 412

--- INTEGERの値が8文字より大きいならば、幅は動的に増やされて数値全体が表示されます。
---
End Set_Int

例B.7(e) 動的な表示を行うビルトインの使用 - ルーチン宣言(続き)


-----------------------------------------------------------------------------
---- Section 3-B: SET_REAL 宣言
---- INI_DYN_DISRの呼び出しに必要な全てのパラメータを設定します。
-----------------------------------------------------------------------------
ROUTINE Set_Real
Begin
Rel_Wind = 'T_FU' -- 定義済みのウィンドウを使用します。
Field_Width = 10 -- 表示の最大幅
Char_Size = 0 -- 通常サイズ
Row = 2 -- 動的に表示される
Col = 16 -- 'T_FU'中の位置を指定します。
Interval = 200 -- 更新間隔は200ms
Buffer_Size = 10 -- Minimum value required.
Format = '%2.2f'
--- このフォーマットとフィールド幅の指定では、
--- REALは以下のように表示されます。
--- ----------
--- |xxxx.xx |
--- ----------
--- ここでREALの値は左詰となります。
--- 小数点の後に常に2桁表示されます。
--- 最大の表示幅は10文字です。
--- 実数値(REALの値)が10文字以下の場合、右側は全体で10文字の幅になるまで空白が
--- 詰められます。
--- 実数値が10文字をける場合は、表示幅は拡張されません。
--- 最後の文字として">"が表示されます。これは値全体が表示されて
--- いないことを示しています。
---
End Set_Real

例B.7(f) 動的な表示を行うビルトインの使用 - ルーチン宣言(続き)


-----------------------------------------------------------------------------
---- Section 3-C: SET_BOOL宣言
---- INI_DYN_DISB呼び出しに必要な全てのパラメータを設定します。
-----------------------------------------------------------------------------
ROUTINE Set_Bool
Begin
-- 有効な定義済みのウィンドウは7.10.1節、「教示操作盤上のユーザ画面」
-- に記述されています。
-- エラー行 --> 'ERR' 1行
-- ステータス行--> 'T_ST' 3行
-- 表示ウィンドウ --> 'T_FU' 10行
-- プロンプト行 --> 'T_PR' 1行
-- ファンクションキー --> 'T_FK' 1行
Int_Wind = 'T_FU' -- 定義済みのウィンドウを使用します。
Field_Width = 10 -- 10文字表示します
Char_Size = 0 -- 通常サイズ
Row = 3 -- 動的に表示される
Col = 16 -- 'T_FU'中の位置を指定します。
Interval = 250 -- 更新間隔は250ms
Buffer_Size = 10 -- Minimum value required
bool_names[1] = 'YES' -- bool_varがFALSEの時の表示
bool_names[2] = 'NO' -- bool_varがTRUEの時の表示
--- この指定ではBOOLEANは以下のように表示されます

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 332 of 412

--- --------
--- |xxxxxxxx|
--- --------
--- ここでbooleanの値は左詰で表示されます。
--- bool1の値に応じてxはYESとNOのうちの一つとなります。
END Set_Bool

例B.7(g) 動的な表示を行うビルトインの使用 - ルーチン宣言(続き)


-----------------------------------------------------------------------------
---- Section 3-D: SET_ENUM 宣言
---- INI_DYN_DISEの呼び出しに必要な全てのパラメータを設定します。
-----------------------------------------------------------------------------
ROUTINE Set_Enum
Begin
-- 有効な定義済みのウィンドウは7.10.1節、「教示操作盤上のユーザ画面」
-- に記述されています。
-- エラー行 --> 'ERR' 1行
-- ステータス行--> 'T_ST' 3行
-- 表示ウィンドウ --> 'T_FU' 10行
-- プロンプト行 --> 'T_PR' 1行
-- ファンクションキー --> 'T_FK' 1行
Int_Wind = 'T_FU' -- 定義済みのウィンドウを使用します。
Attr_Mask = 8 -- REVERSED
Field_Width = 10 -- Display to characters
Char_Size = 0 -- 通常サイズ
Row = 4 -- 動的に表示される
Col = 16 -- 'T_FU'中の位置を指定します。
Interval = 250 -- 更新間隔は250ms
Buffer_Size = 10 -- Minimum value required
enum_names[1] = 'Enum-0' -- enum_var=0の場合に表示される値
enum_names[2] = 'Enum-1' -- enum_var=1の場合に表示される値
enum_names[3] = 'Enum-2' -- enum_var=2の場合に表示される値
enum_names[4] = 'Enum-3' -- enum_var=3の場合に表示される値
--- この指定ではenum_varは以下のように表示されます。
--- --------
--- |xxxxxxxx|
--- --------
--- enum_namesの文字列の一つが、INTEGERの値enum1に応じて表示されます。
--- もしenum1が0-3の範囲外に有るなら、'?'が10個表示されます。
--- 文字列は反転表示されます。
---
End Set_Enum

例B.7(h) 動的な表示を行うビルトインの使用 - ルーチン宣言(続き)


-----------------------------------------------------------------------------
---- Section 3-E: SET_PORT宣言
---- INI_DYN_DISPの呼び出しに必要な全てのパラメータを設定します。
-----------------------------------------------------------------------------
ROUTINE Set_Port
Begin
-- 有効な定義済みのウィンドウは7.10.1節、「教示操作盤上のユーザ画面」
-- に記述されています。
-- エラー行 --> 'ERR' 1行
-- ステータス行--> 'T_ST' 3行
-- 表示ウィンドウ --> 'T_FU' 10行
-- プロンプト行 --> 'T_PR' 1行
-- ファンクションキー --> 'T_FK' 1行
Int_Wind = 'T_FU' -- 定義済みのウィンドウを使用します
Field_Width = 10 -- Display to characters

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 333 of 412

Char_Size = 0 -- 通常サイズ
Row = 5 -- 動的に表示される
Col = 16 -- 'T_FU'中の位置を指定します。
Interval = 250 -- 更新間隔は250ms
Buffer_Size = 10 -- Minimum value required.
pval_names[1] = 'RELEASED' -- keyが押されていない場合に表示されるテキスト
pval_names[2] = 'PRESSED' -- keyが押されている場合に表示されるテキスト
port_type = io_tpin -- 信号のタイプはTP key
port_no = 175 -- ユーザキー3
--- この指定ではPRESSEDまたはRELEASEDは以下のように表示されます。
--- --------
--- |xxxxxxxx|
--- --------
--- 文字列は左詰となります。
--- xは'RELEASED' か 'PRESSED'です。
--- 文字列は通常の表示となります。
End Set_Port

例B.7(i) 動的な表示を行うビルトインの使用 - ルーチン宣言(続き)


-----------------------------------------------------------------------------
---- Section 3-F: SET_STR宣言
---- INI_DYN_DISSの呼び出しに必要な全てのパラメータを設定します。
-----------------------------------------------------------------------------
ROUTINE Set_Str
Begin
-- 有効な定義済みのウィンドウは7.10.1節、「教示操作盤上のユーザ画面」
-- に記述されています。
-- エラー行 --> 'ERR' 1行
-- ステータス行--> 'T_ST' 3行
-- 表示ウィンドウ --> 'T_FU' 10行
-- プロンプト行 --> 'T_PR' 1行
-- ファンクションキー --> 'T_FK' 1行
Int_Wind = 'T_FU' -- 定義済みのウィンドウを使用します。
Field_Width = 10 -- 必要な最小の幅を使用します。
Char_Size = 0 -- 通常サイズ
Row = 6 -- 動的に表示される
Col = 16 -- 'T_FU'中の位置を指定します。
Interval = 250 -- 更新間隔は250ms
Buffer_Size = 10 -- Minimum value required.
Format = '%10s' -- 最小フィールド幅10文字
--- この指定ではSTRINGは以下のように表示されます
--- --------
--- |xxxxxxxx|
--- --------
--- 文字列は左詰となります。
--- xはstringの値となります。
End Set_Str
-----------------------------------------------------------------------------
---- Section 3-G: TP_CLS 宣言
---- TPのユーザ画面を表示して、強制的に表示します。
-----------------------------------------------------------------------------
ROUTINE tp_cls FROM rout_ex

例B.7(j) 動的な表示を行うビルトインの使用 - 動的な表示の起動


-----------------------------------------------------------------------------
---- Section 4: メインプログラム
-----------------------------------------------------------------------------
BEGIN --- DYN_DISP
dynd_abrt = FALSE

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 334 of 412

CONDITION[CH_ABORT]:
WHEN ABORT DO -- プログラムが終了する時にフラグdynd_abrtを設定します。
-- このプログラムが自分自身で終了する時、または外部の
-- メカニズムがこのプログラムを終了させる時にトリガします。
dynd_abrt = TRUE -- CHG_DATAがこれを検出し、実行を終了します。
ENDCONDITION
ENABLE CONDITION [CH_ABORT]
-----------------------------------------------------------------------------
---- Section 4-A: 変数の設定。動的な表示の起動
-----------------------------------------------------------------------------
TP_CLS -- TPのユーザ画面をクリア
-- TPのユーザ画面を強制的に表示
STATUS = cc_success -- status変数の初期化
-- 動的に表示される変数の初期化
Int1 = 1
Real1 = 1.0
Bool1 = FALSE
Enum1 = 0
Str1 = ''
-- TPのユーザ画面にメッセージを表示
WRITE ('Current INT1 =',CR)
WRITE ('Current REAL1=',CR)
WRITE ('Current BOOL1=',CR)
WRITE ('Current ENUM1=',CR)
WRITE ('Current PORT =',CR)
WRITE ('Current STR1 =',CR)
Set_Int -- INTEGERの動的な表示のためのパラメータ設定
INI_DYN_DISI(Int1,Int_Wind,Field_Width,Attr_Mask,Char_Size,
Row,Col, Interval, Buffer_Size, Format ,Status)
IF Status <> cc_success THEN -- ステータスをチェック
WRITE(' INI_DYN_DISI failed, Status=',status,CR)
ENDIF
Set_Bool -- BOOLEANの動的な表示のためのパラメータ設定
INI_DYN_DISB(Bool1,Int_Wind,Field_Width,Attr_Mask,Char_Size,
Row,Col, Interval, bool_names,Status)
IF Status <> cc_success THEN -- ステータスをチェック
WRITE(' INI_DYN_DISB failed, Status=',status,CR)
ENDIF

例B.7(k) 動的な表示を行うビルトインの使用 - 動的な表示の起動


Set_Enum -- 列挙化したINTEGERの動的な表示のためのパラメータ設定
INI_DYN_DISE(Enum1,Int_Wind,Field_Width,Attr_Mask,Char_Size,
Row,Col, Interval, enum_names,Status)
IF Status <> cc_success THEN -- ステータスをチェック
WRITE(' INI_DYN_DISE failed, Status=',status,CR)
ENDIF
Set_Port -- I/Oポートの動的な表示のためのパラメータ設定
INI_DYN_DISP(port_type, port_no ,Int_Wind,Field_Width,Attr_Mask,Char_Size,
Row,Col, Interval, pval_names, Status)
IF Status <> cc_success THEN -- ステータスをチェック
WRITE(' INI_DYN_DISP failed, Status=',status,CR)
ENDIF
Set_Real -- REALの動的な表示のためのパラメータ設定
INI_DYN_DISR(Real1,Rel_Wind,Field_Width,Attr_Mask,Char_Size,
Row,Col, Interval, Buffer_Size, Format ,Status)
IF Status <> cc_success THEN -- ステータスをチェック
WRITE(' INI_DYN_DISR failed, Status=',status,CR)
ENDIF
Set_Str -- STRINGの動的な表示のためのパラメータ設定

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 335 of 412

INI_DYN_DISS(Str1,Int_Wind,Field_Width,Attr_Mask,Char_Size,
Row,Col, Interval, Buffer_Size, Format ,Status)
IF Status <> cc_success THEN -- ステータスをチェック
WRITE(' INI_DYN_DISS failed, Status=',status,CR)
ENDIF

例B.7(l) 動的な表示を行うビルトインの使用 - 下位のタスクの実行


-----------------------------------------------------------------------------
---- Section 4-B: 下位のプログラムをチェックし、実行します
-----------------------------------------------------------------------------
-- 変数の値を変更する他のプログラムの状態をチェックします
--
LOAD_STATUS('chg_data', loaded, initialized)
IF (loaded = FALSE ) THEN
WRITE TPPROMPT(CHR(cc_clear_win)) -- プロンプト行のクリア
WRITE TPPROMPT('CHG_DATA is not loaded. Loading now...')
LOAD('chg_data.pc',0,status)
IF (status = cc_success) THEN -- ステータスをチェック
RUN_TASK('CHG_DATA',1,false,false,1,status)
IF (Status <> cc_success) THEN -- ステータスをチェック
WRITE ('Changing the value of the variables',CR)
WRITE ('by another program failed',CR)
WRITE ('BUT you can try changing the values',CR)
WRITE ('from KCL',CR)
ENDIF
ELSE
WRITE ('LOAD Failed, status = ',status,CR)
ENDIF
ELSE
RUN_TASK('CHG_DATA',1,false,false,1,status)
IF (Status <> cc_success) THEN -- ステータスをチェック
WRITE ('Changing the value of the variables',CR)
WRITE ('by another program failed',CR)
WRITE ('BUT you can try changing the values',CR)
WRITE ('from KCL',CR)
ENDIF
ENDIF

例B.7(m) 動的な表示を行うビルトインの使用 - ユーザの反応で動的な表示をキャンセル


-----------------------------------------------------------------------------
---- Section 4-C: ユーザのレスポンスを待ち、動的な表示をキャンセル
-----------------------------------------------------------------------------
WRITE TPPROMPT(CHR(cc_clear_win)) -- プロンプト行のクリア
WRITE TPPROMPT('Enter a number to cancel DYNAMIC display: ')
READ (CR) -- 1文字だけREADします。
-- 7.8.1章See Chapter 7.7.1,
-- 「INTEGER型データ項目のフォーマット」をご覧下さい。
ABORT_TASK('CHG_DATA',TRUE, TRUE,status) -- CHG_DATAを終了させます
IF (status <> cc_success) THEN -- ステータスをチェック
WRITE(' ABORT_TASK failed, Status=',status,CR)
ENDIF
CNC_DYN_DISI(Int1, Int_Wind,Status) -- Int1の表示をキャンセルします
IF Status <> 0 THEN -- ステータスをチェック
WRITE(' CND_DYN_DISI failed, Status=',status,CR)
ENDIF
CNC_DYN_DISR(Real1,Rel_Wind,Status) -- Real1の表示をキャンセルします
IF Status <> 0 THEN -- ステータスをチェック
WRITE(' CND_DYN_DISR failed, Status=',status,CR)
ENDIF

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 336 of 412

CNC_DYN_DISB(Bool1, Int_Wind,Status) -- Bool1の表示をキャンセルします


IF Status <> 0 THEN -- ステータスをチェック
WRITE(' CND_DYN_DISB failed, Status=',status,CR)
ENDIF
CNC_DYN_DISE(Enum1, Int_Wind,Status) -- Enum1の表示をキャンセルします
IF Status <> 0 THEN -- ステータスをチェック
WRITE(' CND_DYN_DISE failed, Status=',status,CR)
ENDIF
CNC_DYN_DISP(port_type, Port_no, Int_Wind,Status) -- I/Oポートの表示をキャンセルします
IF Status <> 0 THEN -- ステータスをチェック
WRITE(' CND_DYN_DISP failed, Status=',status,CR)
ENDIF
CNC_DYN_DISS(Str1, Int_Wind,Status) -- Stringの表示をキャンセルします。
IF Status <> 0 THEN -- ステータスをチェック
WRITE(' CND_DYN_DISS failed, Status=',status,CR)
ENDIF
END DYN_DISP

B.8 動的に表示されている変数の操作
CHG_DATA.KLはDYN_DISPによって呼ばれます。DYN_DISPが実際に変数を動的に表示しています。このプログラムはそれらの変数
の値を変更しています。

例B.8(a) 動的に表示されている変数の操作 - 概略
----------------------------------------------------------------------------
---- CHG_DATA.KL
----------------------------------------------------------------------------
----------------------------------------------------------------------------
---- Section 0: CHG_DATA.KLの詳細
----------------------------------------------------------------------------
---- カバーしているKAREL言語の要素: In Section:
---- アクション:
---- 節(clause):
---- FROM Sec 2
---- コンディション:
---- データ型:
---- INTEGER Sec 2
---- REAL Sec 2
----
---- ディレクティブ:
---- ビルトインファンクション&プロシージャ:
---- 文(statement):
---- DELAY Sec 4
---- FOR....ENDFOR Sec 4
---- REPEAT...UNTIL Sec 4
----
---- 予約語:
---- BEGIN Sec 4
---- END Sec 4
---- PROGRAM Sec 1
---- VAR Sec 2
----------------------------------------------------------------------------
---- Section 1: プログラムと環境の宣言
----------------------------------------------------------------------------
PROGRAM CHG_DATA
%NOLOCKGROUP
%COMMENT = 'Dynamic Disp2'

例B.8(b) 動的に表示されている変数の操作 - 宣言セクション

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 337 of 412

-----------------------------------------------------------------------------
---- Section 2: 変数宣言
-----------------------------------------------------------------------------
VAR
-- 以下の変数がIN CMOSを持っていない場合、 このプログラムをロードする時に
-- 以下のアラームが発生するでしょう。
-- VARS-012 変数INT1の作成に失敗しました VARS-038 変数のメモリタイプが異なります
-- VARS-012 変数REAL1の作成に失敗しました VARS-038 変数のメモリタイプが異なります
-- これはDYNDISPとCHG_DATAの間で矛盾があることを示しています。
-- あるプログラムが変数をDRAMに作成することを指定し、もう一つのプログラムが
-- CMOSを指定しているからです。
Int1 IN CMOS FROM dyn_disp :INTEGER -- 動的に表示される変数
Real1 IN CMOS FROM dyn_disp :REAL -- 動的に表示される変数
Bool1 IN CMOS FROM dyn_disp :BOOLEAN -- 動的に表示される変数
Enum1 IN CMOS FROM dyn_disp :INTEGER -- 動的に表示される変数
Str1 IN CMOS FROM dyn_disp :STRING[10] -- 動的に表示される変数
indx :INTEGER
dynd_abrt FROM dyn_disp :BOOLEAN -- dyn_dispが終了する時にdyn_disp
-- 中で設定されます。
-----------------------------------------------------------------------------
---- Section 3: ルーチン宣言
-----------------------------------------------------------------------------

例B.8(c) 動的に表示されている変数の操作 - メインプログラム


-----------------------------------------------------------------------------
---- Section 4: メインプログラム
-----------------------------------------------------------------------------
BEGIN -- CHG_DATA
-- このタスクCHG_DATAからの(dyn_dispの)変数を変更する実例です。
-- タスクDYN_DISPで起動された動的な表示により、これらの変数の更新された値
-- が正しく表示され続けます。
-- 実際のアプリケーションの処理を行って下さい。
-- ここではFORループでシュミレーションしています。
REPEAT
FOR indx = -9999 TO 9999 DO
int1 = (indx DIV 2) * 7
real1 = (indx DIV 3)* 3.13
bool1 = ((indx AND 4) = 0)
enum1 = (ABS(indx) DIV 5) MOD 5
Str1 = SUB_STR('123456789A', 1, (ABS(indx) DIV 6) MOD 7 + 1)
DELAY 200 -- 処理が進んでいるかのように1/5秒の遅れを入れています。
ENDFOR
UNTIL (DYND_ABRT) -- このタスクはDYNDISPから終了させられます。しかしながら、
-- もしDYN_DISPが異常終了する場合(即ちKCL> ABORT)、 it
-- DYN_DISPはDYND_ABRTをセットします。これがCHD_DATAが
-- 処理を完了することを可能とします。
END CHG_DATA

B.9 辞書ファイルからリストを表示する
このプログラムはリストの表示を制御します。そのリストは辞書ファイルDCLISTEG.UTXから読まれたものです。 DCLISTEG.UTXに関す
る詳細に関してはB.9.1項を参照して下さい。 DCLST_EX.KLは各コマンドに対して行われるアクションに沿ってカーソルの位置を制御し
ます。

情報の表示方法としてはDISCTRL_FORMの使用が好ましいです。 DISCTRL_FORMは自動的に全てのキー入力
の処理します。ずっと使うのが簡単です。 詳細については9章を参照して下さい。
例B.9(a) 辞書ファイルからリスト表示 – 概略
----------------------------------------------------------------------------

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 338 of 412

---- DCLST_EX.KL
----------------------------------------------------------------------------
---- Section 0: DCLST_EX.KLの詳細
----------------------------------------------------------------------------
---- カバーしているKAREL言語の要素: In Section:
---- アクション:
---- 節(clause):
---- FROM Sec 3-E
---- コンディション:
---- データ型:
---- ARRAY OF STRING Sec 2
---- BOOLEAN Sec 2
---- DISP_DAT_T Sec 2
---- FILE Sec 2
---- INTEGER Sec 2
---- STRING Sec 2
---- ディレクティブ:
---- ALPHABETIZE Sec 1
---- COMMENT Sec 1
---- INCLUDE Sec 1
---- NOLOCKGROUP Sec 1
---- ビルトインファンクション&プロシージャ:
---- ADD_DICT Sec 3-B
---- ACT_SCREEN Sec 4-I
---- ATT_WINDOW_S Sec 4-C
---- CHECK_DICT Sec 3-B
---- CLR_IO_STAT Sec 3-A,C
---- CNV_STR_INT Sec 4-E
---- DEF_SCREEN Sec 4-B
---- DET_WINDOW Sec 4-I
---- DISCTRL_LIST Sec 4-G,H
---- FORCE_SPMENU Sec 4-A,B,C
---- IO_STATUS Sec 3-A,
---- ORD Sec 4-H
---- READ_DICT Sec 4-E,F

例B.9(b) 辞書ファイルからリスト表示- 概略(続き)


---- REMOVE_DICT Sec 4-I
---- SET_FILE_ATR Sec 4-G
---- STR_LEN Sec 4-F
---- UNINIT Sec 3-C
---- WRITE_DICT Sec 4-D,H,I
---- 文(statement):
---- ABORT Sec 3-B
---- CLOSE FILE Sec 4-I
---- FOR...ENDFOR Sec 4-F
---- IF...THEN...ENDIF Sec 3-A,B,C,D; 4-F,H,I
---- OPEN FILE Sec 3-A; 4-H
---- READ Sec 4-A,B,H
---- REPEAT...UNTIL Sec 4-H
---- ROUTINE Sec 3-A,B,C,D,E
---- SELECT...ENDSELECT Sec 4-H
---- WRITE Sec 3-A,B,C,D;4-A,I
---- 予約語:
---- BEGIN Sec 3-A,B,C,D;4
---- CR Sec 4-A,B,C
---- END Sec 3-A,B,C,D; 4-I
---- PROGRAM Sec 1
---- VAR Sec 2

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 339 of 412

---- 定義済みファイル名:
---- TPDISPLAY Sec 4-D,G,H,I
---- TPFUNC Sec 4-D,H
---- TPPROMPT Sec 4-D,H,I
---- TPSTATUS Sec 4-D,I
---- 使用されているデバイス:
---- RD2U Sec 3-B
---- 定義済みウィンドウ:
---- ERR Sec 4-C
---- T_ST Sec 4-C
---- T_FU Sec 4-C
---- T_PR Sec 4-C
---- T_FR Sec 4-C

例B.9(c) 辞書ファイルからリスト表示- 宣言セクション


-----------------------------------------------------------------------------
---- Section 1: プログラムと環境の宣言
-----------------------------------------------------------------------------
PROGRAM DCLST_EX
%COMMENT='DISCTRL_LIST '
%ALPHABETIZE
%NOLOCKGROUP
%INCLUDE DCLIST -- 辞書ファイルDCLISTEG.UTXから生成されたincludeファイル
-----------------------------------------------------------------------------
---- Section 2: 定数及び変数宣言
-----------------------------------------------------------------------------
VAR
exit_Cmnd : INTEGER
act_pending : INTEGER -- ペンディングになっているアクションが存在するか決定
display_data : DISP_DAT_T -- DICTRL_LISTに必要な情報
done : BOOLEAN -- 実行をいつ完了するか決定する
Kb_file : FILE -- TPKBにオープンされているファイル
i : INTEGER -- 単なるカウンタ
key : INTEGER -- どのキーが押されたか
last_line : INTEGER -- 情報の最後の行の数字
list_data : ARRAY[20] OF STRING[40] -- exact string information
num_options : INTEGER -- リスト中の項目の数
old_screen : STRING[4] -- 前にアタッチしたスクリーン
STATUS : INTEGER -- ビルトインのstatus
str : STRING[1] -- TPからREADするSTRING
Err_file : FILE -- エラーログファイル
Opened : BOOLEAN -- エラーログがOpenされているか否か

例B.9(e) 辞書ファイルからリスト表示- ルーチン宣言


-----------------------------------------------------------------------------
---- Section 3: ルーチン宣言
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
---- Section 3-A: Op_Err_File宣言
---- エラーログファイルのオープン
-----------------------------------------------------------------------------
Routine Op_Err_File
Begin
Opened = false
Write TPPROMPT(CR,'Creating Auto Error File ..............')
OPEN FILE Err_File ('RW','RD:\D_LIST.TXT') -- 出力用にOPEN
IF (IO_STATUS(Err_File) <> 0 ) THEN
CLR_IO_STAT(Err_File)
Write TPPROMPT('*** USE USER WINDOW FOR ERROR OUTPUT ***',CR)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 340 of 412

ELSE
Opened = TRUE
ENDIF
End Op_Err_File
-----------------------------------------------------------------------------
---- Section 3-B: Chk_Add_Dct宣言
---- 辞書がロードされているかどうかチェック
---- ロードされていないなら、辞書をロードする
-----------------------------------------------------------------------------
Routine Chk_Add_Dct
Begin -- Chk_Add_Dct
-- 辞書'DLST'がロードされているか確かめる
CHECK_DICT('DLST',TPTSSP_TITLE,STATUS)
IF STATUS <> 0 THEN
WRITE TPPROMPT(CR,'Loading Required Dictionary.............')
ADD_DICT('RD2U:\DCLISTEG','DLST',DP_DEFAULT,DP_DRAM,STATUS)
IF STATUS <> 0 THEN
WRITE TPPROMPT('ADD_DICT failed, STATUS=',STATUS,CR)
ABORT -- 辞書なしではこのプログラムは継続できません。
ENDIF
ELSE
WRITE TPPROMPT ('Dictionary already loaded in system. ')
ENDIF
End Chk_Add_Dct

例B.9(f) 辞書ファイルからリスト表示- エラールーチン宣言


-----------------------------------------------------------------------------
---- Section 3-C: Log_Errors宣言
---- 検出されたエラーを後でレビューするファイルにログする
-----------------------------------------------------------------------------
ROUTINE Log_Errors(Out: FILE; Err_Str:STRING;Err_No:INTEGER)
BEGIN
IF NOT Opened THEN -- エラーログファイルがOPENされていないなら
-- 画面にWRITEします。
WRITE (Err_Str,Err_No,CR)
ELSE
IF NOT UNINIT(Out) THEN
CLR_IO_STAT(Out)
WRITE Out(Err_Str,Err_No,CR,CR)
ELSE
WRITE (Err_Str,Err_No, CR)
ENDIF
ENDIF
END Log_Errors
-----------------------------------------------------------------------------
---- Section 3-D: Chk_Stat 宣言
---- グローバル変数statusをチェック。
---- 0でないなら、入力パラメータerr_strをエラーログファイルに記録
-----------------------------------------------------------------------------
ROUTINE Chk_Stat ( err_str: STRING)
BEGIN -- Chk_Stat
IF( status <> 0) then
Log_Errors(Err_File, err_str,Status)
ENDIF
END Chk_Stat
-----------------------------------------------------------------------------
---- Section 3-E: TP_CLS の宣言
-----------------------------------------------------------------------------
ROUTINE TP_CLS FROM ROUT_EX

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 341 of 412

例B.9(g) 辞書ファイルからリスト表示- スクリーンの設定と定義


-----------------------------------------------------------------------------
---- Section 4: メインプログラム
-----------------------------------------------------------------------------
BEGIN -- DCLST_EX
-----------------------------------------------------------------------------
---- Section 4-A: Perform Setup operations
-----------------------------------------------------------------------------
TP_CLS -- TPのユーザ画面をクリアして強制的に表示するルーチンの呼び出し
WRITE (' ***** Starting DISCTRL_LIST Example *****', CR, CR)
Chk_Add_Dct -- 辞書をチェックしてロードするルーチンの呼び出し
Op_Err_File -- エラーログファイルをopenするルーチンの呼び出し
-----------------------------------------------------------------------------
---- Section 4-B: スクリーンを定義してアクティブにする
-----------------------------------------------------------------------------
DEF_SCREEN('LIST', 'TP', STATUS) -- LISTと呼ばれるスクリーンを作成/定義する
Chk_Stat ('DEF_SCREEN LIST') -- DEF_SCREENが成功したか確かめる
ACT_SCREEN('LIST', old_screen, STATUS) -- 定義したばかりのスクリーンLISTを
-- アクティブにする
Chk_Stat ('ACT_SCREEN LIST') -- ACT_SCREENが成功したか確かめる
-----------------------------------------------------------------------------
---- Section 4-C: ウィンドウをスクリーンにアタッチする
-----------------------------------------------------------------------------
-- 必要なウィンドウをLISTスクリーンにアタッチする
-- 定義済みのウィンドウの詳細については
-- Chapter 7.10.1 「教示操作盤上のユーザ画面」を参照して下さい。
ATT_WINDOW_S('ERR', 'LIST', 1, 1, STATUS) -- エラーウィンドウのアタッチ
Chk_Stat('Attaching ERR')
ATT_WINDOW_S('T_ST', 'LIST', 2, 1, STATUS) -- ステータスウィンドウのアタッチ
Chk_Stat('T_ST not attached')
ATT_WINDOW_S('T_FU', 'LIST', 5, 1, STATUS) -- fullウィンドウのアタッチ
Chk_Stat('T_FU not attached')
ATT_WINDOW_S('T_PR', 'LIST', 15, 1, STATUS)-- promptウィンドウのアタッチ
Chk_Stat('T_PR not attached')
ATT_WINDOW_S('T_FK', 'LIST', 16, 1, STATUS)-- functionウィンドウのアタッチ
Chk_Stat('T_FK not attached')

例B.9(h) 辞書ファイルからリスト表示-スクリーンに要素を書く
-----------------------------------------------------------------------------
---- Section 4-D: 辞書要素をウィンドウに書く
-----------------------------------------------------------------------------
-- 辞書DLSTの辞書要素TPTSSP_TITLEを書きます。
-- statusウィンドウをクリアし、メッセージを反転表示で表示します。
WRITE_DICT(TPSTATUS, 'DLST', TPTSSP_TITLE, STATUS)
Chk_Stat( 'TPTSSP_TITLE not written')
-- 辞書DLSTの辞書要素TPTSSP_FK1を書きます。
-- ファンクションキーの行のウィンドウに"[TYPE]"を表示します。
WRITE_DICT(TPFUNC, 'DLST', TPTSSP_FK1, STATUS)
Chk_Stat( 'TPTSSP_FK1 not written')
-- 辞書DLSTの辞書要素TPTSSP_CLRSCを書きます。
-- メインのウィンドウ(TPDISPLAY)をクリアします。
WRITE_DICT(TPDISPLAY, 'DLST', TPTSSP_CLRSC, STATUS)
Chk_Stat( 'TPTSSP_CLRSC not written')
-- 辞書DLSTの辞書要素TPTSSP_INSTRを書きます。
-- prompt行のウィンドウに指示を書きます。
WRITE_DICT(TPPROMPT, 'DLST', TPTSSP_INSTR, STATUS)
Chk_Stat( 'TPTSSP_INSTR not written')
-----------------------------------------------------------------------------

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 342 of 412

---- Section 4-E: メニューの選択肢の数を決定


-----------------------------------------------------------------------------
-- 辞書DLSTの辞書要素、TPTSSP_NUMをlist_dataの最初の要素に読みます。
-- list_data[1]はメニューの選択肢の数のASCIIの表現となります。
-- last_lineにはlist_dataで使われている行/要素の数が帰ります。
READ_DICT('DLST', TPTSSP_NUM, list_data, 1, last_line, STATUS)
Chk_Stat( 'TPTSSP_NUM not read')
-- その文字列(STRING)をINTEGER, num_optionsに変換します。
CNV_STR_INT(list_data[1], num_options)

例B.9(i) 辞書ファイルからリスト表示- 表示データの初期化


-----------------------------------------------------------------------------
---- Section 4-F: データ構造display_dataを初期化します。
---- display_datasはメニューの選択肢のリストを表示するために使用されます。
-----------------------------------------------------------------------------
-- 表示データのデータ構造を初期化します。
-- この例ではwindow 1のみ扱います。
display_data.win_start[1] = 1 -- Window 1の開始行
display_data.win_end[1] = 10 -- Window 1の終了行
display_data.curr_win = 0 -- 表示中のウィンドウ。ここで0は
-- 最初のウィンドウの指定となります。
display_data.cursor_row = 1 -- 現在カーソルがある行
display_data.lins_per_pg = 10 -- ユーザがシフト+上下を押した時に
-- スクロールする行数。
-- 通常ウィンドウのサイズと同じ
display_data.curs_st_col[1] = 0 -- フィールド1の開始列
display_data.curs_en_col[1] = 0 -- フィールド1の終了列。
-- これは後に更新されます。
display_data.curr_field = 0 -- 現在のフィールド。ここで0は
-- 最初のフィールドの指定となります。
display_data.last_field = 0 -- リストの最後のフィールド(この例では
-- フィールドを一つしか使用していません)
display_data.curr_it_num = 1 -- カーソルのある項目番号
display_data.sob_it_num = 1 -- 開始項目番号
display_data.eob_it_num = num_options -- 終了項目番号
-- これは読み込まれた選択肢の数です。
display_data.last_it_num = num_options-- 最後の項目番号。これは
-- 読み込まれた選択肢の数でもあります。
-- ウィンドウの末尾がリスト中の要素の総数を超えないことを確認して下さい。
IF display_data.win_end[1] > display_data.last_it_num THEN
display_data.win_end[1] = display_data.last_it_num --reset to last item
ENDIF
-- 辞書DLSTの辞書要素、TPTSSP_MENUを読みます。
-- list_dataにはメニューのリストの情報が入ります。
-- list_data[1]はTPTSSP_MENUの一行目の情報が含まれます。
-- list_data[last_line]は最後の行の情報が含まれます。
READ_DICT('DLST', TPTSSP_MENU, list_data, 1, last_line, STATUS)
Chk_Stat('Reading menu list failed')
-- 最も長い要素を決定し、
-- 最初のフィールドの終了列をリセットします。
FOR i = 1 TO last_line DO
IF (STR_LEN(list_data[i]) > display_data.curs_en_col[1]) THEN
display_data.curs_en_col[1] = STR_LEN(list_data[i])
ENDIF
ENDFOR

例B.9(j) 辞書ファイルからリスト表示- カーソル移動の制御


-----------------------------------------------------------------------------
---- Section 4-G: リストを表示する。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 343 of 412

-----------------------------------------------------------------------------
-- リストの初期表示
DISCTRL_LIST(TPDISPLAY, display_data, list_data, DC_DISP, STATUS)
Chk_Stat('Error displaying list')
-- Open a file to the TPDISPLAY window with PASSALL and FIELD attributes
-- and NOECHO
SET_FILE_ATR(kb_file, ATR_PASSALL) -- 生のTPからの入力を取得します。
SET_FILE_ATR(kb_file, ATR_FIELD) -- 単一のキーストロークでREADが完了するように
SET_FILE_ATR(kb_file, ATR_NOECHO) -- 画面に入力を表示しません。
OPEN FILE Kb_file ('RW', 'KB:TPKB') -- TPのキーボードをOpen
STATUS = IO_STATUS(Kb_file)
Chk_Stat('Error opening TPKB')
act_pending = 0
done = FALSE
-----------------------------------------------------------------------------
---- Section 4-H: リスト中のカーソルの動きを制御する
-----------------------------------------------------------------------------
REPEAT -- キー入力を待ちます。
READ Kb_file (str::1)
key = ORD(str,1)
key = key AND 255 -- keyを正しい値に変換します。
SELECT key OF -- キー入力をどう扱うか決定します。
CASE (KY_UP_ARW) : -- 上矢印キー
IF act_pending <> 0 THEN -- 項目が選択されていたなら...
-- promptの確認メッセージをクリアします。
WRITE_DICT(TPPROMPT, 'DLST', TPTSSP_CLRSC, STATUS)
-- ファンクションキーの確認用の表示をクリアします。
WRITE_DICT(TPFUNC, 'DLST', TPTSSP_CLRSC, STATUS)
ENDIF
DISCTRL_LIST(TPDISPLAY, display_data, list_data, DC_UP, STATUS)
Chk_Stat ('Error displaying list')
CASE (KY_DN_ARW) : -- 下矢印キー
IF act_pending <> 0 THEN -- 項目が選択されていたなら...
-- promptの確認メッセージをクリアします。
WRITE_DICT(TPPROMPT, 'DLST', TPTSSP_CLRSC, STATUS)
-- ファンクションキーの確認用の表示をクリアします。
WRITE_DICT(TPFUNC, 'DLST', TPTSSP_CLRSC, STATUS)
ENDIF
DISCTRL_LIST(TPDISPLAY, display_data, list_data,
DC_DN, STATUS)
Chk_Stat ('Error displaying list')

例B.9(k) 辞書ファイルからリスト表示- カーソル移動の制御(続き)


CASE (KY_ENTER) :
-- 後で処理します。
CASE (KY_F4) : -- ファンクションキー"YES"
IF act_pending <> 0 THEN -- 項目が選択されていたなら...
-- promptの確認メッセージをクリアします。
WRITE_DICT(TPPROMPT, 'DLST', TPTSSP_CLRSC, STATUS)
-- ファンクションキーの確認用の表示をクリアします。
WRITE_DICT(TPFUNC, 'DLST', TPTSSP_CLRSC, STATUS)
IF act_pending = num_options THEN
-- ルーチンを終了します。
done = TRUE
ENDIF
-- action pendingをクリア
act_pending = 0
ENDIF
CASE (KY_F5) : -- ファンクションキー"NO"

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 344 of 412

-- promptの確認メッセージをクリアします。
WRITE_DICT(TPPROMPT, 'DLST', TPTSSP_INSTR, STATUS)
-- ファンクションキーの確認用の表示をクリアします。
WRITE_DICT(TPFUNC, 'DLST', TPTSSP_CLRSC, STATUS)
-- action pendingをクリア
act_pending = 0
ELSE : -- その他です。項目の番号を入力しました場合はここに含まれます。
-- カーソルがどの行にあるべきか計算し、リストを再表示します。
IF ((key > 48) AND (key <= (48 + num_options))) THEN
-- 数値を行に変換
key = key - 48
display_data.cursor_row = key
DISCTRL_LIST(TPDISPLAY,display_data,list_data,DC_DISP,STATUS)
Chk_Stat ('Error displaying list')
key = KY_ENTER
ENDIF
ENDSELECT
IF key = KY_ENTER THEN -- ユーザがアクションを指定しました
-- prompt行に確認メッセージを表示します。
WRITE_DICT (TPPROMPT, 'DLST',
(TPTSSP_CNF1 - 1 + display_data.cursor_row), STATUS)
-- 確認用のファンクションキーを表示します。
WRITE_DICT(TPFUNC, 'DLST', TPTSSP_FK2, STATUS)
-- action pendingを選択した項目に設定します。
act_pending = display_data.cursor_row -- これが選択した項目です。
ENDIF
UNTIL done -- exitを選択するまで繰り返します。

例B.9(l) 辞書ファイルからリスト表示- 後始末とプログラムの終了


-----------------------------------------------------------------------------
---- Section 4-I: プログラム終了の前に後片付けをします。
-----------------------------------------------------------------------------
-- Clear the TP USER menu windows
WRITE_DICT(TPDISPLAY, 'DLST', TPTSSP_CLRSC, STATUS)
WRITE_DICT(TPSTATUS, 'DLST', TPTSSP_CLRSC, STATUS)
-- Close the file connected to the TP keyboard.
CLOSE FILE Kb_file
-- Close the error log file if it is open.
IF opened THEN
CLOSE FILE Err_File
ENDIF
WRITE TPPROMPT (CR,'Example Finished ')
REMOVE_DICT ( 'LIST', DP_DEFAULT, STATUS) -- remove the dictionary
WRITE ('remove dict', STATUS,CR)
Chk_Stat ('Removing dictionary')
ACT_SCREEN(old_screen, old_screen, STATUS) -- activate the previous screen
Chk_stat ('Activating old screen')
DET_WINDOW('ERR', 'LIST', STATUS) -- Detach all the windows that were
Chk_stat ('Detaching ERR window')
DET_WINDOW('T_ST', 'LIST', STATUS) -- previously attached.
Chk_stat ('Detaching T_ST window')
DET_WINDOW('T_FU', 'LIST', STATUS)
Chk_stat ('Detaching T_FU window')
DET_WINDOW('T_PR', 'LIST', STATUS)
Chk_stat ('Detaching T_PR window')
DET_WINDOW('T_FK', 'LIST', STATUS)
Chk_stat ('Detaching T_FK window')
END DCLST_EX

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 345 of 412

B.9.1 辞書ファイル
この辞書ファイルはDCLST_EX.KLを用いてTPの画面を作成するために使用されます。DCLST_EX.KLの詳細についてはB.9節を参照
して下さい。
例B.9(m) 辞書ファイル
.kl dclist
*
$-,TPTSSP_TITLE &home &reverse "Karel DISCTRL_LIST Example
"
&standard
$-,TPTSSP_CLRSC &home &clear_2_eow
$-,TPTSSP_FK1 &home" [TYPE] "
$-,TPTSSP_FK2 &home" YES NO "
$-,TPTSSP_INSTR &home "Press 'ENTER' or number key to select." &clear_2_eol
* Add menu options here, "Exit" must be last option
* TPTSSP_NUM specifies the number of menu options
$-,TPTSSP_NUM "14"
$-,TPTSSP_MENU
" 1 Test Cycle 1" &new_line
" 2 Test Cycle 2" &new_line
" 3 Test Cycle 3" &new_line
" 4 Test Cycle 4" &new_line
" 5 Test Cycle 5" &new_line
" 6 Test Cycle 6" &new_line
" 7 Test Cycle 7" &new_line
" 8 Test Cycle 8" &new_line
" 9 Test Cycle 9" &new_line
" 10 Test Cycle 10" &new_line
" 11 Test Cycle 11" &new_line
" 12 Test Cycle 12" &new_line
" 13 Test Cycle 13" &new_line
" 14 EXIT"
* Confirmations must be in order
$-,TPTSSP_CNF1 &home"Perform test cycle 1? [NO]" &clear_2_eol
$-,TPTSSP_CNF2 &home"Perform test cycle 2? [NO]" &clear_2_eol
$-,TPTSSP_CNF3 &home"Perform test cycle 3? [NO]" &clear_2_eol
$-,TPTSSP_CNF4 &home"Perform test cycle 4? [NO]" &clear_2_eol
$-,TPTSSP_CNF5 &home"Perform test cycle 5? [NO]" &clear_2_eol
$-,TPTSSP_CNF6 &home"Perform test cycle 6? [NO]" &clear_2_eol
$-,TPTSSP_CNF7 &home"Perform test cycle 7? [NO]" &clear_2_eol
$-,TPTSSP_CNF8 &home"Perform test cycle 8? [NO]" &clear_2_eol
$-,TPTSSP_CNF9 &home"Perform test cycle 9? [NO]" &clear_2_eol
$-,TPTSSP_CNF10 &home"Perform test cycle 10? [NO]" &clear_2_eol
$-,TPTSSP_CNF11 &home"Perform test cycle 11? [NO]" &clear_2_eol
$-,TPTSSP_CNF12 &home"Perform test cycle 12? [NO]" &clear_2_eol
$-,TPTSSP_CNF13 &home"Perform test cycle 13? [NO]" &clear_2_eol
$-,TPTSSP_CNF14 &home"Exit? [NO]" &clear_2_eol

B.10 DISCTRL_ALPHAビルトインの使用
このプログラムはDISCTRL_ALPHビルトインの3つの異なる使用方法を示します。 DISCTRL_ALPHビルトインは指定ウィンドウ中での
アルファベット及び数値の文字列の表示および入力を制御します。詳細は付録A「KAREL言語アルファベット順解説」を参照して下さい。
方法1は(DISCTRL_ALPHの第五引数の)辞書名として定義済みの'PROG'を使用してプログラム名の入力を行います。 例B.10(c)の
Section 4-Aを参照して下さい。
方法2は辞書名として定義済みの'COMM'を使用してコメントの入力を行います。例B.10(c)のSection 4-Bを参照して下さい。
方法3はユーザ指定の辞書名と辞書要素を用いてプログラム名を入力します。例B.10(d)のSection 4-Cを参照して下さい。
このプログラムではすべてのエラーをポストしています。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 346 of 412

例B.10(a) DISCTRL_ALPHAビルトインの使用 – 概略
-----------------------------------------------------------------------------
---- DCALP_EX.KL
-----------------------------------------------------------------------------
---- カバーしているKAREL言語の要素: In Section:
---- アクション:
---- 節:
---- コンディション:
---- データ型:
---- INTEGER Sec 2
---- STRING Sec 2
---- ディレクティブ:
---- COMMENT Sec 1
---- INCLUDE Sec 1
---- NOLOCKGROUP Sec 1
---- ビルトインファンクション&ルーチン:
---- ADD_DICT Sec 4-C
---- CHR Sec 4-A,B,C
---- DISCTRL_ALPH Sec 4-A,B,C
---- FORCE_SPMENU Sec 4-A,B,C
---- POST_ERR Sec 4-A,B,C
---- SET_CURSOR Sec 4-A,B,C
---- SET_LANG Sec 4-C
---- 文(Statements):
---- READ Sec 4-A,B
---- WRITE Sec 4-A,B,C
---- IF...THEN...ENDIF Sec 4-A,B,C
---- 予約語:
---- BEGIN Sec 4
---- CONST Sec 2
---- CR Sec 4-A,B,C
---- END Sec 4-C
---- PROGRAM Sec 1
---- VAR Sec 2
---- 定義済みファイル名:
---- OUTPUT Sec 4-C
---- TPDISPLAY Sec 4-A,B
---- 定義済みウィンドウ:
---- T_FU Sec 4-A,B
---- C_FU Sec 4-Cb

例B.10(b) DISCTRL_ALPHAビルトインの使用- 宣言セクション

-----------------------------------------------------------------------------
---- Section 1: プログラムと環境の宣言
-----------------------------------------------------------------------------
PROGRAM DCALP_EX
%COMMENT = 'Display Alpha'
%NOLOCKGROUP
%INCLUDE KLEVKEYS -- KY_ENTERに必要
%INCLUDE DCALPH -- 辞書要素ALPH_PROGに必要。section 4-Cを参照
-----------------------------------------------------------------------------
---- Section 2: 定数及び変数宣言
-----------------------------------------------------------------------------
CONST
cc_home = 137
cc_clear_win = 128
cc_warn = 0 -- ワーニングのみの表示のためにPOST_ERRに渡す値
cc_pause = 1 -- プログラムを一時停止するようにPOST_ERRに渡す値

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 347 of 412

VAR
status : INTEGER
device_stat : INTEGER
term_char : INTEGER
window_name : STRING[4]
prog_name : STRING[12]
comment : STRING[40]
-----------------------------------------------------------------------------
---- Section 3: ルーチン宣言
-----------------------------------------------------------------------------

例B.10(c) DISCTRL_ALPHAビルトインの使用- 教示操作盤からのデータ入力


-----------------------------------------------------------------------------
---- Section 4: メインプログラム
-----------------------------------------------------------------------------
BEGIN -- DCALP_EX
-----------------------------------------------------------------------------
---- Section 4-A: 教示操作盤のユーザメニューからプログラム名を入力
-----------------------------------------------------------------------------
WRITE (CHR(cc_home), CHR(cc_clear_win)) -- TPのユーザメニューをクリア
FORCE_SPMENU(tp_panel, SPI_TPUSER, 1) -- ユーザメニューを強制的に表示
SET_CURSOR(TPDISPLAY, 12, 1, status) -- カーソル位置を変更
WRITE ('prog_name: ')
prog_name = '' -- initialize program name
DISCTRL_ALPH('t_fu', 12, 12, prog_name, 'PROG', 0, term_char, status)
IF status <> 0 THEN
POST_ERR(status, '', 0, cc_warn)
ENDIF
IF term_char = ky_enter THEN -- ENTERキーが押された
WRITE (CR, 'prog_name was changed:', prog_name, CR)
ELSE
WRITE (CR, 'prog_name was not changed')
ENDIF
WRITE (CR, 'Press enter to continue')
READ (CR)
-----------------------------------------------------------------------------
---- Section 4-B: 教示操作盤からコメントを入力
-----------------------------------------------------------------------------
WRITE (CHR(cc_home) + CHR(cc_clear_win)) -- TPのユーザメニューをクリア
SET_CURSOR(TPDISPLAY, 12, 1, status) -- カーソル位置を変更
comment = ' ' -- Initialize the comment
WRITE ('comment: ') -- メッセージを表示
DISCTRL_ALPH('t_fu', 12, 10, comment, 'COMM', 0, term_char, status)
IF status <> 0 THEN -- DISCTRL_ALPHが成功したことを確認
POST_ERR(status, '', 0, cc_warn) -- statusをワーニングとしてポスト
ENDIF
IF term_char = ky_enter THEN
WRITE (CR, 'comment was changed:', comment, CR) -- 新コメントを表示
ELSE
WRITE (CR, 'comment was not changed', CR)
ENDIF
WRITE (CR, 'Press enter to continue')
READ (CR)

例B.10(d) DISCTRL_ALPHAビルトインの使用- CRT/KBからのデータ入力


-----------------------------------------------------------------------------
---- Section 4-C:
-----このセクションでは
---- 利用可能な定義済みの辞書名を使用する代わりに、

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 348 of 412

---- ここでは辞書名と要素の値が明示的に宣言されています。
-----------------------------------------------------------------------------
-- 言語を英語とします。
-- これは複数言語で同じコードを使用したい時に役立ちます。
-- 辞書をロードするときは常に現在の言語$LANGUAGEをチェックし、
-- 正しい辞書をロードするようにして下さい。
-- 例えば日本語辞書DCALPHJP.TXがあるとします。
-- 現在の言語$LANGUAGEがJAPANESEに設定されていたなら、
-- 日本語向けのその辞書をロードするでしょう。
SET_LANG ( dp_english, status)
IF (status <> 0) THEN
POST_ERR (STATUS, '', 0,cc_warn) -- statusをワーニングとしてポスト
ENDIF
-- dcslpheg.txを、辞書名ALPHを使用して英語の言語にロードします。
-- 第四引数optionは常にdp_dramです。
ADD_DICT ('DCALPHEG', 'ALPH', dp_english, dp_dram, status)
IF (status <> 0 ) THEN
POST_ERR (STATUS, '', 0, cc_pause) -- statusをポストしてプログラムを
-- 一時停止します。継続するには辞書が
ENDIF -- ロードされている必要があります。
WRITE(CHR(cc_home) + CHR(cc_clear_win)) --ユーザメニューをクリア
SET_CURSOR(TPDISPLAY, 12, 1, STATUS) -- カーソル位置を設定しなおす
WRITE ('prog_name: ')
prog_name = ' ' -- Initialize program name
DISCTRL_ALPH('t_fu',12,12,prog_name,'ALPH',alpha_prog,term_char,STATUS)
--DISCTRL_ALPHAは辞書ALPHとその辞書要素ALPH_PROGを用います。
IF STATUS <> 0 THEN -- DISCTRL_ALPHが成功したことを
-- 確認します。
POST_ERR(STATUS, '', 0, cc_warn) -- statusをワーニングとしてポスト
ENDIF
IF term_char = ky_enter THEN
WRITE (CR, 'prog_name was changed:', prog_name, CR)
ELSE
WRITE (CR, 'prog_name was NOT changed.', CR)
ENDIF
END DCALP_EX

B.10.1 辞書ファイル
この辞書ファイルはテキストを指定のスクリーンに書くために使用されます。DCALPH_EG.UTXはDCAL_EX.KLでも使用します。
DCAL_EX.KLに関する詳細はB.10節を参照して下さい。

例B.10(e) 辞書ファイルDCALPHEG.UTX
.KL DCALPH
$0, alpha_prog
*1234567812345678123456781234567812345678
" PRG MAIN SUB TEST >"&new_line
" PROC JOB MACRO >"&new_line
" TEST1 TEST2 TEST3 TEST4 >"


例B.63の「>」はNEXTキーで複数の行を切り替えることを示すための印です。&new_lineが最初の2行にしか出
てこないことにも注意して下さい。適切な切り替えのために必要なことです。

B.11 コピーしたTPプログラムにオフセットを加える
このプログラムはTPプログラムをコピーし、新しく作成したプログラム内で位置データにオフセットを加えます。 これはオフラインでTPプロ
グラムを作成した後で、全ての位置データがある確定量だけずれていると分かった時には有用です。しかしながら、オンライン位置修正

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 349 of 412

の方がずっと適切な対処です。

例B.11(a) コピーしたTPプログラムにオフセットを加える - 概要
-----------------------------------------------------------------------------
---- CPY_TP.KL
------------------------------------------------------------------------------
---- カバーしているKAREL言語の要素: In Section:
---- アクション:
----
---- 節(Clauses):
---- FROM Sec 3-F
----
---- コンディション:
----
---- データ型:
---- ARRAY OF REAL Sec 2
---- ARRAY OF STRING Sec 2
---- BOOLEAN Sec 2
---- INTEGER Sec 2; 3-B,C,D,E
---- JOINTPOS Sec 2
---- REAL Sec 2
---- STRING Sec 2
---- XYZWPR Sec 2
---- ディレクティブ:
---- ENVIRONMENT Sec 1
---- ビルトインファンクション&ルーチン:
---- AVL_POS_NUM Sec 3-E
---- CHR Sec 3-B, 4
---- CLOSE_TPE Sec 3-E
---- CNV_REL_JPOS Sec 3-E
---- CNV_JPOS_REL Sec 3-E
---- COPY_TPE Sec 3-E
---- GET_JPOS_TPE Sec 3-E
---- GET_POS_TYP Sec 3-E
---- GET_POS_TPE Sec 3-E
---- OPEN_TPE Sec 3-E
---- PROG_LIST Sec 3-B
---- SELECT_TPE Sec 3-E
---- SET_JPOS_TPE Sec 3-E
---- SET_POS_TPE Sec 3-E

例B.11(b) コピーしたTPプログラムにオフセットを加える - 概要の続き


---- 文(Statements):
---- FOR...ENDFOR Sec 3-B,D,E
---- IF ...THEN...ELSE...ENDIF Sec 3-A,B,C,E
---- READ Sec 3-B,C,D
---- REPEAT...UNTIL Sec 3-B,C,D
---- RETURN Sec 3-E
---- ROUTINE Sec 3-A,B,C,D,E,F
---- SELECT...ENDSELECT Sec 3-E
---- WRITE Sec 3-B,C,D,E,4
----
---- 予約語:
---- BEGIN Sec 3-A,B,C,D,E,4
---- CONST Sec 2
---- CR Sec 3-B,C,D,E
---- END Sec 3-A,B,C,D,E,4
---- PROGRAM Sec 1
---- VAR Sec 2

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 350 of 412

例B.11(c) コピーしたTPプログラムにオフセットを加える - 宣言セクション


-----------------------------------------------------------------------------
---- Section 1: プログラムと環境の宣言
------------------------------------------------------------------------------
PROGRAM CPY_TP
%NOLOCKGROUP
%NOPAUSESHFT
%ENVIRONMENT TPE -- necessary for all xxx_TPE built-ins
%ENVIRONMENT BYNAM -- necessary for PROG_LIST built-in
-----------------------------------------------------------------------------
---- Section 2: 定数及び変数宣言
------------------------------------------------------------------------------
CONST
ER_WARN = 0 -- POST_ERRに渡す、ワーニングを意味する定数
SUCCESS = 0 -- statusが0(エラーなし)を示す定数
JNT_POS = 9 -- GET_POS_TYP向けの定数
XYZ_POS = 2 -- GET_POS_TYP向けの定数
MAX_AXS = 9 -- JOINTPOSの持つ最大軸数
VAR
from_prog: STRING[13] -- コピー元のTPプログラム名
to_prog : STRING[13] -- コピー先のTPプログラム名
over_sw : BOOLEAN -- COPY_TPEを行う時に、既に存在するプログラムを
-- 上書きするかどうか決定する。
status : INTEGER -- ビルトインからのstatusを保持する
off_xyz : XYZWPR -- XYZWPR型のオフセット量
jp_off : ARRAY [9] of REAL -- JOINT型のオフセット量
new_xyz : XYZWPR -- オフセットを適用したXYZWPR
org_xyz : XYZWPR -- to_progのオリジナルのXYZWPR
new_jpos : JOINTPOS -- オフセットを適用したJOINTPOS
org_jpos : JOINTPOS -- to_progのオリジナルのJOINTPOS
open_id : INTEGER -- OPENしたto_progの識別子
jp_org : ARRAY [9] of REAL -- org_jposのREAL型による表現
jp_new : ARRAY [9] of REAL -- jp_newのREAL型による表現

例B.11(d) コピーしたTPプログラムにオフセットを加える - ルーチン宣言


-----------------------------------------------------------------------------
---- Section 3: ルーチン宣言
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
---- Section 3-A: CHK_STATの宣言
---- statusが成功か否かを検査します。
---- 成功でない場合、statusをポストします。
------------------------------------------------------------------------------
ROUTINE chk_stat (rec_stat: integer)
begin
IF (rec_stat <> SUCCESS) THEN -- rec_statがSUCCESSでないなら
-- エラーをポストします(エラーを発生させます)。
POST_ERR (rec_stat, '', 0, ER_WARN) -- システムにエラーをポスト
ENDIF
END chk_stat
-----------------------------------------------------------------------------
---- Section 3-B: GetFromPrgの宣言
---- ロードされているTPプログラムのリストを生成します。
---- ユーザにこれらのプログラムからコピーするプログラム、
---- つまりfrom_progを選択させます。
------------------------------------------------------------------------------
ROUTINE GetFromPrg
VAR

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 351 of 412

tp_type : INTEGER -- プログラムリストのタイプ


n_skip : INTEGER -- プログラムのリストのindex
format : INTEGER -- プログラム名のフォーマット
n_progs : INTEGER -- prg_nameに返ってきたプログラムの数
prg_name : ARRAY [8] OF STRING[20] --PROG_LISTから返されるプログラム名
STATUS : INTEGER -- PROG_LISTのstatus
f_index : INTEGER -- PROG_LISTが高速でプログラムのindex付けを行うために引数として渡す
arr_size : INTEGER -- prg_nameの配列のサイズ
prg_select: INTEGER -- どのプログラムをコピーするかのユーザの選択
indx : INTEGER -- prg_nameの表示のFORループのカウンタ

例B.11(e) コピーしたTPプログラムにオフセットを加える - ユーザに見せるためのプログラムのリストを作成


BEGIN
f_index = 0 -- f_indexの初期化
n_skip = 0 -- n_skipの初期化
tp_type = 2 -- 任意のTPプログラムを対象とする
format = 1 -- prg_nameのプログラム名のみ返す
n_progs = 0 -- n_progsの初期化
arr_size = 8 -- prg_nameの宣言と同じサイズとします。
prg_select = 0 -- プログラム選択の変数の初期化
REPEAT
WRITE (CHR(128),CHR(137)) -- 教示操作盤のユーザ画面をクリアします。
-- "TEST"から始まる全TPプログラムのリストを取得します。
PROG_LIST('TEST*',tp_type,n_skip,format,prg_name,n_progs,status,f_index)
chk_stat (STATUS) --PROG_LISTのstatusをチェック
FOR indx = 1 to n_progs DO
WRITE (indx,':',prg_name[indx], CR) -- プログラムのリストを書き出します。
ENDFOR
IF (n_skip > 0) OR ( n_progs >0) THEN
WRITE ('select program to be copied:',CR)
WRITE ('PRESS -1 to get next page of programs:')
REPEAT
READ (prg_select) -- 選択結果を取得します。
UNTIL ((prg_select >= -1) AND (prg_select <= n_progs) AND (prg_select <> 0))
ELSE
WRITE ('no TP programs to COPY', CR)
WRITE ('Aborting program, since need',CR)
WRITE ('at least one TP program to copy.',CR)
ABORT
ENDIF
-- 一覧作成が完了したか、ユーザが選択をしていないかをチェックします。
IF ((prg_select = -1) AND (n_progs < arr_size)) THEN
f_index = 0 --リストを再度作成するためf_indexをリセットします。
n_progs = arr_size --REPEAT/UNTILが続くように設定
ENDIF
-- ユーザが選択したかをチェック
IF (prg_select <> -1) then
from_prog = prg_name[prg_select]-- from_progを選択された名前とします。
n_progs = 0 -- n_progを設定してループを止めます。
ENDIF
UNTIL (n_progs < arr_size)
END GetFromPrg

例B.11(f) コピーしたTPプログラムにオフセットを加える - 上書きするか決定


-----------------------------------------------------------------------------
---- Section 3-C: GetOvrSwの宣言
---- コピーされたプログラム、to_progが存在した場合、
---- 上書きするかユーザに尋ねます。
------------------------------------------------------------------------------

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 352 of 412

ROUTINE GetOvrSw
VAR
yesno : INTEGER
BEGIN
WRITE (CR, 'If Program already exists do you want',CR)
WRITE ('to overwrite the file Yes:1, No:0 ? ')
REPEAT
READ (yesno)
UNTIL ((yesno = 0) OR( yesno = 1))
IF yesno = 1 then --over_swを上書きするように設定します(有れば)
over_sw = TRUE
ELSE -- over_swを上書きしないように設定します(有れば)
over_sw = FALSE
ENDIF
END GetOvrSw

例B.11(g) コピーしたTPプログラムにオフセットを加える - 位置のオフセットを入力


------------------------------------------------------------------------------
---- Section 3-D: GetOffsetの宣言
---- ユーザにXYZWPR及びJOINTPOSのオフセットを入力させます。
------------------------------------------------------------------------------
ROUTINE GetOffset
VAR
yesno : INTEGER
indx : INTEGER
BEGIN
--XYZWPR型のオフセット、off_xyzを取得します。
REPEAT
WRITE ( 'Enter offset for XYZWPR positions',CR)
WRITE (' X = ')
READ (off_xyz.x)
WRITE (' Y = ')
READ (off_xyz.y)
WRITE (' Z = ')
READ (off_xyz.z)
WRITE (' W = ')
READ (off_xyz.w)
WRITE (' P = ')
READ (off_xyz.p)
WRITE (' R = ')
READ (off_xyz.r)
--ユーザが入力したオフセットの値を表示します。
WRITE (' Offset XYZWPR position is',CR, off_xyz,CR)
WRITE ('Is this offset correct? Yes:1, No:0 ? ')
READ (yesno)
UNTIL (yesno = 1) -- ユーザが満足するまでオフセット量の
-- 入力を行います。
--JOINTPOS型のオフセット、jp_offを取得します。
REPEAT
WRITE ( 'Enter offset for JOINT positions',CR)
FOR indx = 1 TO 6 DO -- ロボット軸の数だけループします(単純化のため6軸固定)
WRITE (' J',indx,' = ')
READ (jp_off[indx])
ENDFOR
WRITE ('JOINT position offset is', CR)
FOR indx = 1 TO 6 DO
write ( jp_off[indx],CR) -- ユーザの入力を表示します。
ENDFOR
WRITE ('Is this offset correct? Yes:1, No:0 ? ')

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 353 of 412

READ (yesno)
UNTIL (yesno = 1) -- ユーザが満足するまでオフセット量の
-- 入力を行います。
END GetOffset

例B.11(h) コピーしたTPプログラムにオフセットを加える - オフセットを位置に適用


-----------------------------------------------------------------------------
---- Section 3-E: ModifyPrgの宣言
---- TPプログラム内の各位置にオフセットを適用します。
------------------------------------------------------------------------------
ROUTINE ModifyPrg
VAR
pos_typ : INTEGER -- GET_POS_TYPから返される位置のタイプ
num_axs : INTEGER -- JOINTPOSの場合、軸数
indx_pos: INTEGER -- FORループのカウンタ。TPの位置に関するループ
group_no: INTEGER -- グループ番号の指定
num_pos : INTEGER -- TPプログラム内で次に手に入るイチ番号
indx_axs: INTEGER -- FORループのカウンタ。REALの配列に関するループ
BEGIN
SELECT_TPE ('CPY_TP', STATUS) -- to_progが現在選択されていないことを保証するため
to_prog = 'MDFY_TP' -- to_progを望みの名前に設定
------ from_progからto_progへのコピー
COPY_TPE (from_prog, to_prog, over_sw, status)
chk_stat(status) -- COPY_TPEのstatusをチェック
--- ユーザがプログラムを上書きしないように指定し、かつ
--- リターンstatusが7015(指定したプログラムが存在しています)なら
--- プログラムを終了します。つまり既存のto_progを変更しません。
IF ((over_sw = FALSE) AND (status = 7015)) THEN
WRITE ('ABORTING:: PROGAM ALREADY EXISTS!',CR)
RETURN
ENDIF
--- to_progをRead/WriteアクセスでOpenします
OPEN_TPE (to_prog, TPE_RWACC, TPE_RDREJ, open_id, status)
chk_stat(status) -- OPEN_TPEのstatusをチェックします。
group_no = 1
--- 次に利用可能な位置番号を取得します。
AVL_POS_NUM(open_id, num_pos, status)
chk_stat(status) -- AVL_POS_NUMのstatusをチェックします。
WRITE('avl_pos_num status', status,cr)
if status = SUCCESS then
WRITE('num_pos:', num_pos, CR)
endif
--- to_prog内の各位置にオフセットを適用します
--- TPプログラムが持っている位置の数は num_pos -1としています。
--- 位置番号が1から始まる連続した番号ではない場合、これは正しくないです。
--- 例えば イチ[1],イチ[3], イチ[100]が教示されている場合
--- num_posは2となります(AVL_POS_NUMの出力)。
--- 本プログラムを使う前に
--- コピー元のプログラムをプログラム編集画面でrenumber(番号変更)
--- すればこの状況を避けられます。
FOR indx_pos = 1 to num_pos-1 DO
--to_progの各位置のデータタイプを取得します。
--JOINTPOSならば、軸の数も取得します。
GET_POS_TYP (open_id, indx_pos, group_no, pos_typ, num_axs, status)
chk_stat (status)
WRITE('get_pos_typ status', status,cr)

例B.11(i) コピーしたTPプログラムにオフセットを加える - オフセットを位置に適用(続き)


--index_posのイチがJOINTPOS,XYZWPRのどちらかを決定します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 354 of 412

SELECT pos_typ OF
CASE (JNT_POS): -- JOINTPOSです
FOR indx_axs = 1 TO MAX_AXS DO -- デフォルト値で初期化します。
jp_org[indx_axs] = 0.0 -- これはCNV_REL_JPOSでの
jp_new[indx_axs] = 0.0 -- 問題を避けるためです。
ENDFOR
-- JOINTPOS型であるイチ[indx_pos]をto_progから取得します。 -----
org_jpos = GET_JPOS_TPE (open_id, indx_pos, status)
chk_stat( status)
-- オフセットを行うため、JOINTPOSをREAL型の配列に変換します。
CNV_JPOS_REL (org_jpos, jp_org, status)
chk_stat (status)
-- REAL型の配列にオフセットを適用します。
FOR indx_axs = 1 to num_axs DO
jp_new[indx_axs] = jp_org[indx_axs] + jp_off[indx_axs]
ENDFOR
-- 変換してJOINTPOS型に戻します。
-- 入力の配列、jp_newは未初期化の値を含んではいけません。
-- さもないとエラー12311「変数が設定されていません」がポストされます。
-- 全て0に初期化した理由がこれです。
CNV_REL_JPOS (jp_new, new_jpos, status)
chk_stat(status)
-- indx_posの位置に新しいオフセットした位置、new_jposを設定します。
SET_JPOS_TPE (open_id, indx_pos, new_jpos, status)
chk_stat(status)
WRITE ('indx_pos', indx_pos, ' new_jpos',CR, new_jpos,CR)
CASE (XYZ_POS): -- The position is a XYZWPR
-- XYZWPR型のイチ[indx_pos]をto_progから取得します。
org_xyz = GET_POS_TPE (open_id , indx_pos, status)
chk_stat( status) -- GET_POS_TPEのstatusをチェックします。
-- オフセットをXYZWPRに適用します。
new_xyz.x = org_xyz.x + off_xyz.x
new_xyz.y = org_xyz.y + off_xyz.y
new_xyz.z = org_xyz.z + off_xyz.z
new_xyz.w = org_xyz.w + off_xyz.w
new_xyz.p = org_xyz.p + off_xyz.p
new_xyz.r = org_xyz.r + off_xyz.r
--indx_posの位置に新しいオフセットした位置、new_xyzを設定します。
SET_POS_TPE (open_id, indx_pos, new_xyz, status)
chk_stat (status) -- SET_POS_TPEのstatusをチェックします。
ENDSELECT
ENDFOR
---プログラムを終了する前にTPプログラムをcloseします。
CLOSE_TPE (open_id, status)
chk_stat (status) --CLOSE_TPEのstatusをチェック
END ModifyPrg

例B.11(j) オフセットを位置に適用 - ユーザメニューのクリア及びメイン


-----------------------------------------------------------------------------
---- Section 3-F: TP_CLSの宣言
---- 教示操作盤のユーザメニューをクリアし、強制的に表示します。
---- 実際のコードはROUT_EX.KLにあります。
-----------------------------------------------------------------------------
ROUTINE TP_CLS FROM rout_ex
-----------------------------------------------------------------------------
---- Section 4: メインプログラム
-----------------------------------------------------------------------------
BEGIN -- CPY_TP
tp_cls -- 教示操作盤のユーザ画面をクリアします。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 355 of 412

GetFromPrg -- コピー元のTPプログラムを取得します。
GetOvrSw -- コピー先のプログラムを上書きするか決定します。
GetOffset -- 修正のオフセットを取得します。
-- TPプログラムを修正します。
ModifyPrg -- コピーしたプログラムをオフセット分だけ修正します。
END CPY_TP

C KCLコマンドアルファベット順解説
この付録では各KCLコマンドをアルファベット順に解説します。各解説にはコマンドの目的、その構文、使い方の詳細が記載されていま
す。各コマンドの例も提供されています。
KCLコマンドの構文の解説には以下の表記法を使用しています。
・ < > はコマンドへのオプションの引数です。
・ | はどれか選ばなくてはならない選択です。
・ { } は繰り返し可能な項目です。
・ <device_name:><\\host_name\>`host_specific_name'
ファイルスペック: <device_name:><\\host_name\><path_name\>file_name.file_type |

・ path_name: <file_name\><dir\dir\. . .>


・ file_name: 最大36文字、ファイルタイプ無し
device_name: は2から5文字のオプションのフィールドです。コロンが続きます。 最初の文字はアルファベットで、残りの文字は英数字で
す。このフィールドが空白ならば、システム変数$DEVICEのデフォルトデバイスが使用されます。
host_name: は1文字から8文字のオプションのフィールドです。host_nameでコマンドを受けるネットワークのノードを選択します。二つの
バックスラッシュが先行し、他のフィールドとバックスラッシュで分ける必要があります。
path_name : file_name\<path_name> - は再帰的に定義されるオプションのフィールドです。各フィールドは最大36文字からなります。サブ
ディレクトリの選択に用います。ルート(もしくはソース)ディレクトリは特殊ケースとして扱われます。それは長さ0のファイル名で指定されま
す。例えば、ルートからリンクされたサブディレクトリSYSのpath_nameは'\SYS'となります。このpath_nameを用いたフルパスは
`C1:\HOST\SYS\FILE.KL'のような記述となります。
file_name: 1から36文字です。
file_type: 0から3文字です。
KCLコマンドは短縮できます。これにより少ない文字数を打ち込むだけで済みますが、短縮形が全てのキーワードを通してユニークであ
る場合に限ります。 例えば、"ABORT''は"AB"とできます。しかし"CONTINUE"は"CONDITION"と区別するために"CONT"とする必要が
あります。
単一引用符の内側に、host_specific_nameとしてpath_name, file_name、そしてfile_typeを指定できます。その場合はpah_name、
file_name、file_typeに特殊文字を含めること、数値で始めることが可能です。FR:\'00\'は有効です。FR:\'00\test.kl'も有効です。しかし
FR:\'00'\test.klは不正です。host_specific_nameは最後とする必要があります。
<prog_name>をコマンドの構文の一部として持つKCLコマンドは、<prog_name>の指定が無い場合はデフォルトのプログラムを使用しま
す。<file_name>をコマンドの構文として持つKCLコマンドは<file_name>の指定が無い場合はデフォルトのプログラムを使用します。
 ABORTコマンド
構文:
ABORT < ( prog_name ) | ALL) > <FORCE>
ここで:
prog_name : タスクになっている、任意のKARELまたはTPプログラム
ALL : 全ての実行中または一時停止中のプログラムを強制終了します。
FORCE : タスクにNOABORT属性が設定されていても強制終了します。FORCEはABORT prog_nameでのみ機能します。FORCEは
ABORT ALLでは機能しません。
目的:
指定された実行中または一時停止中のタスクを強制終了します。prog_ name が指定されない場合、デフォルトのプログラムが使用されま
す。
現在のプログラム文の実行はタスクが強制終了する前に完了します。但し動作文、DELAY、WAIT、またはREAD文は除きます。これら
はキャンセルされます。
例:
KCL> ABORT test_prog FORCE
KCL> ABORT ALL
 APPEND FILEコマンド

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 356 of 412

構文:
APPEND FILE input_file_spec TO output_ file_spec
ここで:
input_file_spec : 有効なファイルスペック
output_file_spec : 有効なファイルスペック
目的:
指定された入力ファイルの内容を指定された出力ファイルの最後に付け足します。input_file_spec とoutput_file_spec は共にファイル名と
ファイルタイプを含む必要があります。
例:
KCL> APPEND FILE flpy:test.kl TO productn.kl
KCL> APPEND FILE test.kl TO productn.kl
 CHDIRコマンド
構文:
CHDIR < device_name >\< path_name >\ 又は CD < device_name >\< path_name >
ここで:
device_name : 指定されたデバイス
path_name : mkdirコマンドを使ってメモリカード上に作成済みのサブディレクトリ。
二つのドット(..)を使って現在のディレクトリの1レベル上のディレクトリを表現できます。
目的:
デフォルトのデバイスを変更する。device_name が指定されないなら、デフォルトのデバイスが表示される。
例:
KCL> CHDIR rd:\
KCL> CD
KCL> CD mc:\a
KCL> CD ..
 CLEAR ALLコマンド
構文:
CLEAR ALL <YES>
ここで:
YES : 確認が行われません。
目的:
全てのKARELおよびTPプログラムおよび変数データがメモリからクリアされます。

内部的に使用しているプログラムも削除されます。使用しないで下さい。

例:
KCL> CLEAR ALL
Are you sure? YES
KCL> CLEAR ALL Y
 CLEAR BREAK CONDITIONコマンド
構文:
CLEAR BREAK CONDITION < prog_name > ( brk_pnt_no | ALL)
ここで:
prog_name : メモリにある任意のKARELプログラムの名前
brk_pnt_no : 特定のconditionブレークポイント
ALL : 全てのconditionブレークポイントをクリアします。
目的:
指定されたconditionブレークポイントを指定プログラムまたはデフォルトのプログラムからクリアします。
conditionブレークポイントはそれが設定されているプログラムにのみ影響します。
例:
KCL> CLEAR BREAK CONDITION test_prog 3
KCL> CLEAR BREAK COND ALL
 CLEAR BREAK PROGRAMコマンド
構文:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 357 of 412

CLEAR BREAK PROGRAM < prog_name > ( brk_pnt_no | ALL)


ここで:
prog_name : メモリにある任意のKARELプログラムの名前
brk_pnt_no : 特定のprogramブレークポイント
ALL : 全てのブレークポイントをクリアします。
目的:
指定されたブレークポイントを指定プログラムまたはデフォルトのプログラムからクリアします。
ブレークポイントはそれが設定されているプログラムにのみ影響します。
例:
KCL> CLEAR BREAK PROGRAM test_prog 3
KCL> CLEAR BREAK PROG ALL
 CLEAR DICTコマンド
構文:
CLEAR DICT dict_name <( lang_name | ALL)>
ここで:
dict_name : クリアする辞書の名前
lang_name : 言語の名前 使用可能な選択肢はENGLISH、JAPANESE、FRENCH、GERMAN、SPANISHまたは DEFAULTです。
ALL : 全ての言語から辞書をクリアします。
目的:
指定された言語または全ての言語から辞書をクリアします。言語が指定されないなら、DEFAULT言語のみクリアされます。
例:
KCL> CLEAR DICT tpsy ENGLISH
KCL> CLEAR DICT tpsy
 CLEAR PROGRAMコマンド
構文:
CLEAR PROGRAM < prog_name > <YES>
ここで:
prog_name : メモリにある任意のKARELまたはTPプログラムの名前
YES : 確認を促しません。
目的:
指定されたプログラムまたはデフォルトのプログラムのデータをメモリからクリアします。
例:
KCL> CLEAR PROGRAM test_prog
Are you sure? YES
KCL> CLEAR PROG test_prog Y
 CLEAR VARSコマンド
構文:
CLEAR VARS < prog_name > <YES>
ここで:
prog_name : 変数を持つ任意のKARELまたはTPプログラムの名前
YES : 確認を促しません。
目的:
指定されたプログラムまたはデフォルトのプログラムに関連付けられた変数とデータ型をメモリからクリアします。
ロードされたプログラムによって参照されている変数とデータ型はクリアされません。
例:
KCL> CLEAR VARS test_prog
Are you sure? YES
KCL> CLEAR VARS test_prog Y
 COMPRESS DICTコマンド
構文:
COMPRESS DICT file_name
ここで:
file_name : 圧縮したいユーザ辞書のファイル名
目的:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 358 of 412

デフォルトの記憶装置の辞書ファイルを指定された辞書名を使って圧縮します。ユーザ辞書のファイルタイプは".UTX"である必要があり
ます。圧縮された辞書ファイルはユーザ辞書と同じファイル名をもち、ファイルタイプは".TX"となります。
9章「辞書とフォーム」も参照して下さい。
例:
KCL> COMPRESS DICT tphcmneg
 COMPRESS FORMコマンド
構文:
COMPRESS FORM < file_name >
ここで:
file_name : 圧縮したいフォームのファイル名
目的:
デフォルトの記憶装置のフォームファイルを圧縮します。フォームのファイルタイプは".FTX"である必要があります。圧縮された辞書ファイ
ルと変数ファイルが生成されます。圧縮された辞書ファイルはフォームファイルと同じファイル名をもち、ファイルタイプは".TX"となります。
変数ファイルは4文字のファイル名を持ちます。それはフォームファイル名から抽出されます。そしてファイルタイプは".VR"です。フォーム
ファイル名が指定されないなら、"FORM"が使われます。
9章「辞書とフォーム」も参照して下さい。
例:
KCL> COMPRESS FORM
KCL> COMPRESS FORM mnpalteg
 CONTINUEコマンド
構文:
CONTINUE <( prog_name ) | ALL)>
ここで:
prog_name : : タスクになっている、任意のKARELまたはTPプログラム
ALL : 一時停止中の全てのタスクを再開します。
目的:
ホールド等で一時停止されている指定タスクの実行を継続します。プログラムが強制終了されていたなら、最初の実行可能行からの実
行となります。
タスクが一時停止している時、操作パネルのスタートボタンはKCL>CONTINUEと同じ効果があります。
CONTINUEは動作コマンドです。それ故に、それを発行する装置は動作制御権を持っている必要があります。
例:
KCL> CONTINUE test_prog
KCL> CONT ALL
 COPY FILEコマンド
構文:
COPY <FILE> from_file_spec TO to_file_spec <OVERWRITE>
ここで:
from_file_spec : 有効なファイルスペック
to_file_spec : 有効なファイルスペック
OVERWRITE : 存在するファイルの上書コピーを指定します。
目的:
あるファイルの内容を別のファイルにコピーします。オプションで上書コピーを指定できます。異なるファイルデバイス、異なる制御装置や
ホスト間のファイル転送が可能です。
from_file_spec のファイル名全体、ファイル名の最初の部分、ファイル名の最後の部分をワイルドカード文字を(*)使って置き換えることが
できます。ファイルタイプでもワイルドカードを同様に使用可能です。to_file_spec 中のワイルドカードはファイル名全体か、ファイルタイプ
全体のみを置き換えることができます。
例:
KCL> COPY flpy:\test.kl TO rdu:newtest.kl
KCL> COPY mc:\test_dir\test.kl TO mc:\test_dir\newtest.kl
KCL> COPY MC:*.DF TO RD:
KCL> COPY *.* TO fr:
KCL> COPY FILE *.kl TO rd:\*.bak OVERWRITE
KCL> COPY mdb:*.tp TO mc:
 DELETE FILEコマンド

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 359 of 412

構文:
DELETE FILE file_spec <YES>
ここで:
file_spec : 有効なファイルスペック
YES : 確認を促しません。
目的:
指定された記憶装置から指定されたファイルを削除します。ファイル名全体、ファイル名の最初の部分、ファイル名の最後の部分、ファイ
ル名の最初と最後の部分をワイルドカード文字(*)を使って置き換えることができます。ファイルタイプでもワイルドカードを同様に使用可
能です。
例:
KCL> DELETE FILE testprog.pc
Are you sure? YES
KCL> DELETE FILE rd:\testprog.pc YES
KCL> DELETE FILE rd:\*.* Y
 DIRECTORYコマンド
構文:
DIRECTORY < file_spec >
ここで:
file_spec : 有効なファイルスペック
目的:
記憶装置上にあるファイルのリストを表示します。file_spec が指定されない場合、指定されたデバイス上にある全ファイルのディレクトリ
情報が表示されます。表示されたディレクトリ情報には以下が含まれます。
デバイスのボリューム名(デバイスの初期化時に指定されたならば)
利用可能であれば、サブディレクトリ名
デバイスに現在格納されているファイル名とファイルタイプ、ファイルのサイズ(バイト単位)
情報が手に入れば、ファイル数、空き容量、総容量
ファイル名全体、ファイル名の最初の部分、ファイル名の最後の部分をワイルドカード文字(*)を使って置き換えることができます。ファイ
ルタイプでもワイルドカードを同様に使用可能です。
例:
KCL> DIRECTORY rd:
KCL> DIR *.kl
KCL> CD MC: \test_dir
サブディレクトリを表示するには、DIRコマンドを使う前に、KCL>CDコマンドを使用して下さい。もしくはKCL> DIR \test_dir\*.*を使用して
下さい。CDコマンドを使わずにサブディレクトリの内容が表示されます。
 DISABLE BREAK PROGRAMコマンド
構文:
DISABLE BREAK PROGRAM < prog_name > brk_pnt_no
ここで:
prog_name : メモリにある任意のKARELプログラムの名前
brk_pnt_no : 特定のprogramブレークポイント
目的:
指定されたプログラムまたはデフォルトプログラムの指定されたブレークポイントを無効とします。
例:
KCL> DISABLE BREAK PROGRAM test_prog 3
KCL> DISABLE BREAK PROG 3
 DISABLE CONDITIONコマンド
構文:
DISABLE CONDITION < prog_name > condition_no
ここで:
prog_name : メモリにある任意のKARELプログラムの名前
condition_no : モニタの番号(CONDITION[ ]で使用した番号)
目的:
指定されたプログラムまたはデフォルトプログラムの指定されたモニタ(CONDITION[condition_no])を無効とします。
例:
KCL> DISABLE CONDITION test_prog

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 360 of 412

KCL> DISABLE COND 3


 DISMOUNTコマンド
構文:
DISMOUNT device_name:
ここで:
device_name : ディスマウントするデバイス
目的:
マウントされた記憶装置をディスマウントし、もはや記憶装置を読み書きできないことを制御装置に示します。
例:
KCL> DISMOUNT rd:
 ENABLE BREAK PROGRAMコマンド
構文:
ENABLE BREAK PROGRAM < prog_name > brk_pnt_no
ここで:
prog_name : メモリにある任意のKARELプログラムの名前
brk_pnt_no : 特定のprogramブレークポイント
目的:
指定されたプログラムまたはデフォルトプログラムのブレークポイントを有効にします。
例:
KCL> ENABLE BREAK PROGRAM test_prog 3
KCL> ENABLE BREAK PROG 3
 ENABLE CONDITIONコマンド
構文:
ENABLE CONDITION < prog_name > condition_no
ここで:
prog_name : メモリにある任意のKARELプログラムの名前
condition_no : モニタの番号(CONDITION[ ]で使用した番号)
目的:
指定されたプログラムまたはデフォルトのプログラムの指定されたモニタ(CONDITION[condition_no])を有効にします。
例:
KCL> ENABLE CONDITION test_prog
KCL> ENABLE COND 3
 FORMATコマンド
構文:
FORMAT device_name: < volume_name > <YES>
ここで:
device_name : 初期化するデバイス
volume_name : デバイスのラベル
YES : 確認を促しません。
目的:
指定されたデバイスをフォーマットします。デバイスはファイルを格納する前にフォーマットする必要があります。
例:
KCL> FORMAT rd:
Are you sure? YES
KCL> FORMAT rd: Y
 HELPコマンド
構文:
HELP < command_name >
ここで:
command_name : KCLコマンド
目的:
KCLコマンドのオンラインヘルプを表示します。引数command_nameを指定すると、指定されたコマンドで必要な構文と簡単な説明が表示
されます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 361 of 412

例:
KCL> HELP LOAD PROG
KCL> HELP
 HOLDコマンド
構文:
HOLD <( prog_name | ALL)>
ここで:
prog_name : 任意のKARELまたはTPプログラムの名前
ALL : 実行中の全プログラムをホールドします。
目的:
実行中の指定されたプログラムまたはデフォルトプログラムを一時停止し、動作を現在の位置でホールドします(通常の減速の後に停止
します)。
KCL> CONTINUEコマンドまたは操作パネルのスタートボタンでプログラムを再開して下さい。
例:
KCL> HOLD test_prog
KCL> HO ALL
 LOAD ALLコマンド
構文:
LOAD ALL < file_name > <CONVERT>
ここで:
file_name : 有効なファイル名
CONVERT : 変数をシステムの定義に変換します。
目的:
PCファイルと変数ファイルをデフォルトの記憶装置とデフォルトのディレクトリからメモリにロードします。指定されたファイル名またはデ
フォルトのファイル名を使用します。PCファイルと変数ファイルのファイルタイプはそれぞれ".PC"と".VR"と仮定されます。
file_name が指定されない場合、デフォルトのプログラムが使用されます。デフォルトが設定されていない場合、メッセージ"Default
program name not set"が表示されます。
例:
KCL> LOAD ALL test_prog
KCL> LOAD ALL
 LOAD DICTコマンド
構文:
LOAD DICT file_name dict_name < lang_name >
ここで:
file_name : ロードするファイルの名前
dict_name : ロードする辞書の名前。名前は4文字に短縮されます。
lang_name : 特定の言語。使用可能な選択肢はENGLISH、JAPANESE、FRENCH、GERMAN、SPANISHまたは DEFAULTです。
目的:
指定されたファイル名を使って、辞書ファイルをデフォルトデバイスのデフォルトディレクトリからロードします。 ファイルタイプは".TX"と仮
定されます。
9章「辞書とフォーム」も参照して下さい。
例:
KCL> LOAD DICT tpaleg tpal FRENCH
KCL> LOAD DICT tpaleg tpal
 LOAD FORMコマンド
構文:
LOAD FORM < form_name >
ここで:
form_name : ロードするフォームの名前
目的:
指定されたフォームをデフォルトの記憶装置からメモリにロードします。フォームは圧縮された辞書ファイルと変数ファイルから構成されま
す。名前を指定しない場合、'FORM.TX'と'FORM.VR'がロードされます。
指定されたform_name が4文字を超える場合、最初の2文字は辞書名や変数名に使用されません。
フォームの生成と使用に関する詳細に関しては、9章「辞書とフォーム」も参照して下さい。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 362 of 412

例:
KCL> LOAD FORM
FORM.TXを辞書名FORMでロード
FORM.VRをロード
KCL> LOAD FORM tpexameg
TPEXAMEG.TXを辞書名EXAMでロード
EXAM.VRをロード
 LOAD MASTERコマンド
構文:
LOAD MASTER < file_name > <CONVERT>
ここで:
file_name : 有効なファイル名
CONVERT : 変数をシステムの定義に変換します。
目的:
指定したファイル名またはデフォルトのファイル名を使用して、マスタリングデータをデフォルトの装置及びデフォルトのディレクトリからメ
モリにロードします。ファイルタイプは".SV"が仮定されます。
file_name が指定されない場合、デフォルトのファイル名"SYSMAST.SV"が使用されます。
例:
KCL> LOAD MASTER
 LOAD PROGRAMコマンド
構文:
LOAD PROGRAM < file_name >
ここで:
file_name : 有効なファイル名
目的:
PCファイルをメモリにロードします。デフォルトの記憶装置、デフォルトのディレクトリからロードします。指定されたファイル名またはデフォ
ルトのファイル名を使用します。ファイルタイプは".PC"が仮定されます。
file_spec が指定され無い場合、デフォルトのプログラムが使用されます。デフォルトが設定されていない場合、メッセージ"Default
program name not set"が表示されます。
例:
KCL> LOAD PROGRAM test_prog
KCL> LOAD PROG
 LOAD SERVOコマンド
構文:
LOAD SERVO < file_name > <CONVERT>
ここで:
file_name : 有効なファイル名
CONVERT : 変数をシステムの定義に変換します。
目的:
サーボパラメータをメモリにロードします。デフォルトの記憶装置、デフォルトのディレクトリからロードします。指定されたファイル名または
デフォルトのファイル名を使用します。ファイルタイプは".SV"が仮定されます。
file_name が指定されない場合、デフォルトのファイル名、"SYSSERVO.SV"が使用されます。
例:
KCL> LOAD SERVO
 LOAD SYSTEMコマンド
構文:
LOAD SYSTEM < file_name > <CONVERT>
ここで:
file_name : 有効なファイル名
CONVERT : 変数をシステムの定義に変換します。
目的:
指定されたシステム変数ファイルをメモリにロードします。セーブされているシステム変数の値が設定されます。デフォルトの記憶装置及
びデフォルトのディレクトリ、指定されたファイル名またはデフォルトのファイル名が使用されます。ファイルタイプは".SV"が仮定されま
す。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 363 of 412

file_name が指定されない場合、デフォルトのファイル名、"SYSVARS.SV"が使用されます。
例:
KCL> LOAD SYSTEM awdef
KCL> LOAD SYSTEM CONVERT
以下の規則がシステム変数に適用されます。
・ 用され内容がロードされます。エラーはポストされません。
SVファイルロード時点で、既存のプログラムによって参照されていないシステム変数の配列が有る場合、SVファイルのサイズが使

・ の方が大きいとします。この場合、SVファイル中のサイズは無視され、配列の値は一つもロードされません。以下のエラーがポストさ
SVファイルロード時点で、既存のプログラムによって参照されているシステム変数の配列が有り、ロードしたファイルの配列サイズ

れます。「var_name memory not updated」、「Array len creation mismatch」。


・ の方が小さいとします。この場合、SVファイル中のサイズは無視されますが、配列の値は全てロードされます。エラーはポストされま
SVファイルロード時点で、既存のプログラムによって参照されているシステム変数の配列が有り、ロードしたファイルの配列サイズ

せん。
・ されます。「Create
型の定義の異なるSVファイルがロードされた場合、SVファイルのロードは停止し、エラーが検出されます。 以下のエラーがポスト
type - var_name failed」、「Duplicate creation mismatch」。
・ 型の定義の異なるSVファイルがロードされたがCONVERTオプションが指定されている場合、可能な限りロードしようとします。
 LOAD TPコマンド
構文:
LOAD TP < file_name > <OVERWRITE>
ここで:
file_name : 有効なファイル名
OVERWRITE : 指定すると同名のTPプログラムが既にロードされていても上書します。
目的:
TPプログラムをロードします。デフォルトの記憶装置、デフォルトのディレクトリからロードします。指定されたファイル名またはデフォルト
のファイル名を使用します。ファイルタイプは".TP"が仮定されます。
file_name が指定されない場合、デフォルトのプログラムが使用されます。デフォルトが設定されていない場合、メッセージ"Default
program name not set"が表示されます。
例:
KCL> LOAD TP testprog
KCL> LOAD TP
 LOAD VARSコマンド
構文:
LOAD VARS < file_name > <CONVERT>
ここで:
file_name : 有効なファイル名
CONVERT : 変数をシステムの定義に変換します。
目的:
指定された変数データファイルまたはデフォルトのそれをメモリにロードします。デフォルトの記憶装置及びデフォルトのディレクトリから
ロードします。ファイルタイプは".VR"と仮定されます。
file_name が指定されない場合、デフォルトのプログラムが使用されます。デフォルトが設定されていない場合、メッセージ"Default
program name not set"が表示されます。
例:
KCL> LOAD VARS test_prog
KCL> LOAD VARS

配列の変数には以下の規則が適用されます。
・ 内容がロードされます。エラーはポストされません。
VRファイルロード時点で、既存のプログラムによって参照されていない配列変数が有る場合、VRファイル中のサイズが使用され

・ す。以下のエラーがポストされます。「var_name
プログラムのロード時点で既に配列変数が存在する場合、PCファイル中のサイズは無視され、とにかくプログラムはロードされま
PC array length ignored」及び「Array len creation mismatch」。
・ いとします。この場合、VRファイル中のサイズは無視され、配列の値は一つもロードされません。
VRファイルロード時点で、既存のプログラムによって参照されている配列変数が有り、ロードしたファイルの配列サイズの方が大き
以下のエラーがポストされます。
「var_name memory not updated」、「Array len creation mismatch」。
・ いとします。この場合、VRファイル中のサイズは無視されますが、配列の値は全てロードされます。
VRファイルロード時点で、既存のプログラムによって参照されている配列変数が有り、ロードしたファイルの配列サイズの方が小さ
以下のエラーがポストされます。
「var_name array length updated」、「Array len creation mismatch」。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 364 of 412

KARELプログラム中のユーザ定義型には以下の規則が適用されます。
・ 除されると、型もまた削除されます。
型が一旦生成されると、プログラムの参照があるか否かに関わらず、決して変更できません。その型を参照している変数が全て削
その後は新しいバージョンをロード可能です。
・ がポストされます。「Create
型の定義既に存在する状態で、その型の定義が異なるプログラムをロードすると、PCファイルはロードされません。以下のエラー
type - var_name failed」、「Duplicate creation mismatch」
・ 下のエラーがポストされます。「Create
型の定義が既に存在する状態で、その型の定義が異なるVRファイルをロードすると、エラー検出時点でロードが停止します。 以
type - var_name failed」、「Duplicate creation mismatch」。
 LOGOUTコマンド
構文:
LOGOUT
目的:
現在のユーザがKCLからログアウトします。パスワードレベルは生産レベルに戻ります。パスワード機能が有効になっていないならば、
「No user currently logged in」のようなエラーメッセージがKCLに表示されます。
例:
KCL>LOGOUT
(アラームメッセージ「Logout (SAM) SETUP from KCL」)
KCL Username>
 MKDIRコマンド
構文:
MKDIR <device_name>\path_name
ここで:
device_name : 有効な記憶装置
path_name :サブディレクトリ
目的:
MKDIRはメモリカード(MC:)にサブディレクトリを作成します。サブディレクトリのネストは8レベルまでにすることを推奨します。
例:
KCL> MKDIR mc:\test_dir
KCL> MKDIR mc:\prog_dir\tpnx_dir
 MOUNTコマンド
構文:
MOUNT device_name
ここで:
device_name : 有効な記憶装置
目的:
MOUNTは記憶装置が読み書きできることを制御装置に示します。
マウントを成功させるにはKCL>FORMATでフォーマットしておく必要があります。
例:
KCL> MOUNT rd:
 MOVE FILEコマンド
構文:
MOVE <FILE> file_spec
ここで:
file_spec : 有効なファイルスペック
目的:
指定されたファイルをあるファイルデバイスから別のデバイスに移動します。FROMまたはRAMディスクに存在すべきです。file_specが
FROMディスク上のファイルならば、そのファイルはRAMディスクに移動します。逆も同様です。
ファイル名全体、ファイル名の最初の部分、ファイル名の最後の部分、ファイル名の最初と最後の部分をワイルドカード文字(*)を使って
置き換えることができます。ファイルタイプでもワイルドカードを同様に使用可能です。 fiel_specが複数のファイルを指定するなら、それら
は全てもう一方のディスクに移動します。
例:
KCL> MOVE FILE fr:*.kl
KCL> MOVE rd:*.*
 PAUSEコマンド

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 365 of 412

構文:
PAUSE <( prog_name | ALL)> <FORCE>
ここで:
prog_name : タスクになっている、任意のKARELまたはTPプログラム
ALL : 実行中のタスク全てを一時停止します。
FORCE : NOPAUSE属性が設定されていたとしても、タスクを一時停止します。
目的:
指定された実行中のタスクを一時停止します。prog_name が指定されていない場合、デフォルトプログラムが使用されます。
モニタはアクティブなままです。モニタのアクションがNOPAUSEで条件が満たされたなら、タスクの実行が再開されます。
現在の文がWAIT FORで一時停止中に条件が満たされた場合、タスクの再開時にWAIT FOR文に続く文が即座に実行されます。
現在の文がDELAYの場合、タスクが一時停止している間も遅延時間の測定は続きます。タスクが一時停止している間に遅延時間が終
了すると、タスクの再開時にDELAYに続く文が即座に実行されます。現在の文がREADの場合、タスクが一時停止中であるにもかかわ
らず、入力を受け付けます。
KCL>CONTINUEコマンドが一時停止されたタスクの実行を再開します。タスクが一時停止している時、操作パネルのスタートボタンは
KCL>CONTINUEと同じ効果があります。
例:
KCL> PAUSE test_prog FORCE
KCL> PAUSE ALL

 PRINTコマンド
構文:
PRINT file_spec
ここで:
file_spec : 有効なファイルスペック
目的:
ASCIIファイルの内容をデフォルトのデバイスにプリントできます。
例:
KCL> PRINT testprog.kl
 RECORDコマンド
構文:
RECORD <[ prog_name ]> var_name
ここで:
prog_name : 任意のKARELまたはTPプログラムの名前
var_name : 任意のPOSITION、XYZWPR、またはJOINTPOS型の変数の名前
目的:
TCP及び/または付加軸の位置を記録します。RobotはRECORDコマンドが実行される前に位置合わせされている必要があります。 メモリ
に存在するシステム変数またはプログラム変数を使用可能です。位置はユーザ座標系を基準として記録されます。
記録した位置を恒久的に割り当てたいならば、KCL>SAVEコマンドを入力する必要があります。
例:
KCL> RECORD [paint_prog]start_pos
KCL> RECORD $GROUP[1].$uframe
 RENAME FILEコマンド
構文:
RENAME FILE old_file_spec TO new_file_ spec
ここで:
old_file_spec : 有効なファイルスペック
new_file_spec : 有効なファイルスペック
目的:
old_file_spec をnew_file_spec に変更します。old_file_spec のファイルは存在しなくなります。old_file_spec 及びnew_file_spec は共にファ
イル名とファイルタイプを含む必要があります。両者は同じファイルタイプを使う必要がありますが、同じファイルにはできません。
ファイルの装置名を変更するにはKCL> COPY FILEコマンドを使用して下さい。
例:
KCL> RENAME FILE test.kl TO productn.kl
KCL> RENAME FILE mycmd.cf TO yourcmd.cf
 RESETコマンド

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 366 of 412

構文:
RESET
目的:
エラーをリセットします
RESETコマンドは実行中のプログラムには影響ありません。操作パネルのリセットボタン、教示操作盤のRESET画面のRESETファンク
ションキーと同じ効果です。
例:
KCL> RESET
 RMDIRコマンド
構文:
RMDIR <device_name>\path_name
ここで:
device_name : 有効な記憶装置
path_name : mkdirコマンドを使って事前にメモリカード上に生成されているサブディレクトリ
目的:
RMDIRはメモリカード(MC:)のサブディレクトリを削除します。削除する前にディレクトリが空である必要があります。
例:
KCL> RMDIR mc:\test_dir
KCL> RMDIR mc:\test_dir\prog_dir
 RUNコマンド
構文:
RUN < prog_name >
ここで:
prog_name : 任意のKARELまたはTPプログラムの名前
目的:
指定されたプログラムを実行します。プログラムはメモリにロードされている必要があります。プログラムが指定されない場合、デフォルト
のプログラムが実行されます。未初期化変数が発見されると、プログラム実行は一時停止します。
実行は最初の実行可能行から開始します。RUNは動作コマンドです。それ故に、それを発行する装置は動作制御権を持っている必要が
あります。RUNコマンドがコマンドファイル中で発行されると、NOWAITコマンドとして実行されます。それ故に、RUNコマンドに続くコマン
ドがRUNコマンドの発行直後に実行されます。RUNコマンドで指定されたプログラムの完了を待ちません。
例:
KCL> RUN test_prog
 RUNCFコマンド
構文:
RUNCF input_file_spec < output_file_spec >
ここで:
input_file_spec : 有効なファイルスペック
output_file_spec : 有効なファイルスペック
目的:
指定された入力ファイルに格納されているKCLコマンドプロシージャを実行し、結果を指定されたファイルに出力します。入力ファイルのタ
イプは.CFと仮定されます。出力ファイルのタイプは、ファイルタイプが提供されないなら、LSが仮定されます。
output_file_spec が指定されない場合、KCLのOUTPUTウィンドウに出力されます。
RUNCFコマンドはコマンドファイル内で最大4レベルまでネスト可能です。%INCLUDE input_file_spec を使ってコマンドプロシージャ中に
別のCFファイルをインクルードして下さい。RUNCFコマンド自体はコマンドプロシージャ内では許されていません。
詳細については10.3節「コマンドプロシージャ」を参照して下さい。
例:
KCL> RUNCF startup output
KCL> RUNCF startup
 SAVE MASTERコマンド
構文:
SAVE MASTER < file_name >
ここで:
file_name : 有効なファイル名
目的:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 367 of 412

マスタリングデータファイルをセーブします。デフォルトの記憶装置、デフォルトのディレクトリにセーブします。指定されたファイル名または
デフォルトのファイル名を使用します。ファイルタイプは".SV"となります。
file_name が指定されない場合、デフォルトのファイル名"SYSMAST.SV"が使用されます。
例:
KCL> SAVE MASTER
 SAVE SERVOコマンド
構文:
SAVE SERVO < file_name >
ここで:
file_name : 有効なファイル名
目的:
サーボパラメータをデフォルトの記憶装置に、指定されたファイル名またはデフォルトのファイル名でセーブします。ファイルタイプ
は".SV"となります。
file_name が指定されない場合、デフォルトのファイル名、"SYSSERVO.SV"が使用されます。
例:
KCL> SAVE SERVO
 SAVE SYSTEMコマンド
構文:
SAVE SYSTEM < file_name >
ここで:
file_name : 有効なファイル名
目的:
システム変数の値をセーブします。デフォルトの記憶装置、デフォルトのディレクトリに指定されたシステム変数ファイル(.SV)にセーブしま
す。file_spec が指定されない場合、デフォルトのファイル名、"SYSVARS.SV"が使用されます。例えば以下の通りです。
SAVE SYSTEM file_1
この場合、システム変数のデータはfile_1.SV と呼ばれる変数ファイルにセーブされます。
SAVE SYSTEM
この場合、システム変数のデータはシステム変数ファイル"SYSVARS.SV"にセーブされます。
例:
KCL> SAVE SYSTEM file_1
KCL> SAVE SYSTEM
 SAVE TPコマンド
構文:
SAVE TP < file_name > <= prog_name >
ここで:
file_name : 有効なファイル名
prog_name : 任意のTPプログラムの名前
目的:
指定されたTPプログラムを指定されたファイル(.TP)にセーブします。file_name またはprog_name を指定しない場合、デフォルトのプログ
ラム名が使用されます。file_name のみが指定されると、その名前はprog_name にも使用されます。例えば以下の通りです。

SAVE TP file_1

この場合、TPプログラムfile_1 がfile_1.TP と呼ばれるファイルにセーブされます。

SAVE TP = prog_1

この場合、TPプログラムprog_1 がデフォルトプログラムの名前を持つファイルにセーブされます。
プログラム名を指定するならば、その前に等号(=)を付ける必要があります。
例:
KCL> SAVE TP file_1 = prog_1
KCL> SAVE TP file_1
KCL> SAVE TP = prog_1
KCL> SAVE TP
 SAVE VARSコマンド

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 368 of 412

構文:
SAVE VARS < file_name > <= prog_name >
ここで:
file_name : 有効なファイル名
prog_name : 任意のKARELまたはTPプログラムの名前
目的:
指定されたプログラムから変数データを指定されたファイルにセーブします。現在代入されている値も含めてセーブします。file_name ま
たはprog_name を指定しない場合、デフォルトのプログラム名が使用されます。file_name のみが指定されると、その名前はprog_name に
も使用されます。例えば以下の通りです。

SAVE VARS file_1

この場合、プログラムfile_1 の変数データはfile_1.VRと呼ばれる変数ファイルにセーブされます。

SAVE VARS = prog_ 1

この場合、prog_1 の変数データはデフォルトプログラムの名前を持つ変数ファイルにセーブされます。
プログラム名を指定するならば、その前に等号(=)を付ける必要があります。
セーブされていない変数データは制御装置のイニシャルスタートを行うと失われます。
例:
KCL> SAVE VARS file_1 = prog_1
KCL> SAVE VARS file_1
KCL> SAVE VARS = prog_1
KCL> SAVE VARS
 SET BREAK CONDITIONコマンド
構文:
SET BREAK CONDITION < prog_name > condition_no
ここで:
prog_name : 実行中または一時停止中の任意のKARELプログラム名
condition_no : モニタの番号(CONDITION[ ]で使用した番号)
目的:
指定されたプログラム、またはデフォルトプログラム中の指定されたモニタ(CONDITION[condition_no])へのブレークポイントの設定を可
能とします。指定のモニタが存在しなければなりません。よってプログラムは実行中または一時停止中である必要があります。ブレークポ
イントがトリガすると、メッセージがアラーム履歴に載り、ブレークポイントはクリアされます。
例:
KCL> SET BREAK CONDITION test_prog 1
KCL> SET BREAK COND 2
 SET BREAK PROGRAMコマンド
構文:
SET BREAK PROGRAM < prog_name > brk_pnt_no line_no <(PAUSE | DISPLAY | TRACE ON | TRACE OFF)>
ここで:
prog_name : メモリにある任意のKARELプログラムの名前
brk_pnt_no : 特定のブレークポイント
line_no : 行番号
PAUSE : ブレークポイントが実行されるとタスクが一時停止します。
DISPLAY : ブレークポイントが実行されると教示操作盤のユーザ画面にメッセージが表示されます。
TRACE ON : ブレークポイントが実行されるとトレースが有効になります。
TRACE OFF : ブレークポイントが実行されるとトレースが無効になります。
目的:
指定されたプログラム、またはデフォルトプログラムの指定された行へのブレークポイントの設定を可能とします。指定された行はソース
コードの実行可能行である必要があります。ブレークポイントは指定された行が実行される前に実行されます。デフォルトでは、ブレーク
ポイントが実行されるとタスクが一時停止します。DISPLAY、TRACE ON、及びTRACE OFFはタスクの実行を一時停止しません。
ブレークポイントは設定されたプログラムだけのローカルなものです。例えば、ブレークポイント1番は複数のプログラムに、それぞれユ
ニークな行番号に存在できます。既に存在しているブレークポイント番号を指定すると、存在しているブレークポイントはクリアされ、新し
いものが指定されたプログラムの指定行に設定されます。
プログラムがメモリからクリアされると、プログラム中のブレークポイントはクリアされます。ブレークポイントをメモリからクリアするには
KCL> CLEAR BREAK PROGRAMコマンドも使用されます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 369 of 412

一時停止されたプログラムの再開にはKCL> CONTINUE コマンドまたは操作パネルのスタートボタンを使用して下さい。


例:
KCL> SET BREAK PROGRAM test_prog 1 22 DISPLAY
KCL> SET BREAK PROG 3 30
 SET CLOCKコマンド
構文:
SET CLOCK 'dd-mmm-yy hh:mm'
ここで:
日付は日を2つの数字で、月を3文字の短縮形で、年を2つの数字で指定します。例えば01-JAN-00です。
時刻は時間と分を2つの数字で表します。例えば12:45です。
目的:
制御装置内部の時計の日付と時間を設定します。
SET CLOCKコマンドも参照して下さい。
例:
KCL> SET CLOCK '02-JAN-00 21:45'
 SET DEFAULTコマンド
構文:
SET DEFAULT prog_name
ここで:
prog_name : 任意のKARELまたはTPプログラムの名前
目的:
プログラムとファイル名のデフォルトの引数として使用される、デフォルトプログラム名を設定します。
10.1.1項「デフォルトプログラム」も参照して下さい。
例:
KCL> SET DEFAULT test_prog
KCL> SET DEF test_prog
 SET GROUPコマンド
構文:
SET GROUP group_no
ここで:
group_no : 有効なグループ番号
目的:
他のコマンドで使用するデフォルトのグループ番号を設定します。
例:
KCL> SET GROUP 1
 SET LANGUAGEコマンド
構文:
SET LANGUAGE lang_name
ここで:
lang_name : 特定の言語。使用可能な選択肢はENGLISH、JAPANESE、FRENCH、GERMAN、SPANISHまたはDEFAULTです。
目的:
使用する言語を決定するシステム変数$LANGUAGEを設定します。
例:
KCL> SET LANG ENGLISH
 SET PORTコマンド
構文:
SET PORT port_name [index] = value
ここで:
port_name[index] : 有効なI/Oポートvalue : I/Oポートの新しい値
目的:
指定された値を指定された入力または出力ポートに設定します。SET PORTは出力ポートでは擬似の状態によらず使えます。しかし入力
に関しては擬似としたポートのみで使用可能です。
有効なポートは以下の通りです。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 370 of 412

DIN、DOUT、RDO、OPOUT、TPOUT、WDI、WDO (以上BOOLEAN型)-AIN、AOUT、GIN、GOUT (INTEGER型)


参照:
SIMULATEコマンド
UNSIMULATEコマンド
11章「入出力システム」
適切なアプリケーションの取扱説明書
例:
KCL> SET PORT DOUT [1] = ON
KCL> SET PORT GOUT [2] = 255
KCL> SET PORT AIN [1] = 1000
 SET TASKコマンド
構文:
SET TASK <[ prog_name ]> attr_name = value
ここで:
prog_name : タスクになっている、任意のKARELまたはTPプログラム
attr_name : PRIORITY または TRACELEN
value : 新しいINTEGERの属性値
目的:
指定されたタスクの属性を設定します。PRIORITY はタスクのプライオリティを設定します。値が小さい程プライオリティは高いです。1から
89は動作より低く、ユーザインタフェースよりは高いです。90から99はユーザインタフェースより低いです。デフォルトは50です。
TRACELENはトレースバッファの長さを設定します。デフォルトは10行です。
 SET TRACEコマンド
構文:
SET TRACE (OFF | ON) <[ prog_name ]>
ここで:
prog_name : メモリにロードされている任意のKARELまたはTPプログラム
目的:
トレース機能をONまたはOFFとします(デフォルトはOFFです)。トレースがONの時、現在実行されているプログラム文とその行番号が
バッファに格納されます。TRACEはプログラムの実行を遅くするので、デバッグ中のみONとして下さい。トーレスデータを見るには、
SHOW TRACEコマンドを使う必要があります。
SHOW TRACEコマンドも参照して下さい。
 SET VARIABLEコマンド
構文:
SET VARIABLE <[ prog_name ]> var_name = value <{, value }>
ここで:
prog_name : 任意のKARELまたはTPプログラムの名前
var_name : 有効なプログラム変数
value : 変数の新しい値
目的:
指定の値を指定の変数に代入します。定数や変数の値を代入可能です。しかし変数が宣言されているデータ型の値である必要がありま
す。
書き込み可能なシステム変数、KARELプログラムの変数、構造体のメンバに値を代入できます。配列の要素は一つだけ設定可能です。
要素を指定するにはブラケット([ ])を変数名の後に指定して下さい。
位置データ型やVECTOR型のようなある種のデータ型は一つ以上の値が指定されるかもしれません。
KCL> SET VAR position_var = 0,0,0,0,0,0
SET VARIABLEは指定された変数の以前の値を表示します。その後に代入した値を表示します。これは代入をチェックする機会を提供
しています。カレル変数画面やカレル位置変数画面でも変数への値の代入ができます。
SET VARIABLEを使って位置を定義する場合、以下のフォーマットの一つを使用可能です。
KCL> SET VARIABLE var_name.X = value
KCL> SET VARIABLE var_name.Y = value
KCL> SET VARIABLE var_name.Z = value
KCL> SET VARIABLE var_name.W = value
KCL> SET VARIABLE var_name = value
ここでX、Y、Z、W、P、そしてRは位置と姿勢を指定します。c_strは軸の配置と回転数により形態を表現する文字列です。例えば、
X=200.0、W=60.0、軸4と6の回転数を1と0に設定するなら、以下の行を打ち込めば良いでしょう。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 371 of 412

KCL> SET VARIABLE var_name.X = 200


KCL> SET VARIABLE var_name.W = 60
KCL> SET VARIABLE var_name.C = '1,0'
変更を恒久的なものとするにはKCL>SAVE VARSコマンドを入力する必要があります。
2.3節「データ型」も参照して下さい。
例:
KCL> SET VARIABLE [prog1] scale = $MCR.$GENOVERRIDE
KCL> SET VAR weld_pgm.angle = 45.0
KCL> SET VAR v[2,1,3].r = -0.897
KCL> SET VAR part_array[2] = part_array[1]
KCL> SET VAR weld_pos.x = 50.0
 SET VERIFYコマンド
構文:
SET VERIFY (ON | OFF)
目的:
KCLのコマンドプロシージャを実行している間、KCLコマンドの表示をONまたはOFFとします(デフォルトはONです。つまり実行される時
に各コマンドが表示されます)。VERIFYがOFFならば、RUNCFコマンドのみが表示されます。
 SHOW BREAKコマンド
構文:
SHOW BREAK < prog_name >
ここで:
prog_name : メモリにある任意のKARELプログラムの名前
目的:
指定されたプログラムまたはデフォルトプログラムのブレークポイントの一覧を表示します。各ブレークポイントに関して以下の情報が表
示されます。
・ ブレークポイント番号

例:
・ プログラム中のブレークポイントの行番号

KCL> SHOW BREAK test_prog


KCL> SH BREAK
 SHOW BUILTINSコマンド
構文:
SHOW BUILTINS
目的:
制御装置にロードされているソフトパーツのビルトインを全て表示します。
例:
KCL> SHOW BUILTINS
 SHOW CONDITIONコマンド
構文:
SHOW CONDITION < prog_name > < condition_no >
ここで:
prog_name : 実行中または一時停止中の任意のKARELプログラム名
condition_no : モニタの番号(CONDITION[ ]で使用した番号)
目的:
指定されたプログラムまたはデフォルトプログラムの、指定されたモニタまたはモニタの一覧を表示します。有効/無効の状態、ブレークポ
イントが設定されているか否かも表示します。モニタが存在するのはプログラムが実行中か一時停止中の時のみです。
例:
KCL> SHOW CONDITION test_prog
KCL> SH COND
 SHOW CLOCKコマンド
構文:
SHOW CLOCK
目的:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 372 of 412

制御装置の時計の現在の日付と時間を表示します。
SET CLOCKコマンドも参照して下さい。
例:
KCL> SHOW CLOCK
 SHOW CURPOSコマンド
構文:
SHOW CURPOS
目的:
現在のユーザ座標系を基準としたTCPの位置を表示します。X、Y、Zの位置をmmで、W、P、Rの姿勢を度で表示します。そして現在の形
態の文字列を表示します。ロボットが位置合わせされていることを確認して下さい。
例:
KCL> SHOW CURPOS
 SHOW DEFAULTコマンド
構文:
SHOW DEFAULT
目的:
現在のデフォルトプログラム名を表示します。
例:
KCL> SHOW DEFAULT
 SHOW DEVICEコマンド
構文:
SHOW DEVICE device_name:
ここで:
device_name : 表示するデバイス
目的:
デバイスの状態を表示します。
例:
KCL> SHOW DEVICE rd:
 SHOW DICTSコマンド
構文:
SHOW DICTS
目的:
システム変数$LANGUAGE中に指定されている言語でロードされている辞書を表示します。
例:
KCL> SHOW DICTS
 SHOW GROUPコマンド
構文:
SHOW GROUP
目的:
デフォルトグループの番号を表示します。
例:
KCL> SHOW GROUP
 SHOW HISTORYコマンド
構文:
SHOW HISTORY
目的:
ルーチン呼び出しのネストの情報を表示します。
例:
KCL> SHOW HIST
 SHOW LANGコマンド
構文:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 373 of 412

SHOW LANG
目的:
システム変数$LANGUAGEで指定された言語を示します。
例:
KCL> SHOW LANG
 SHOW LANGSコマンド
構文:
SHOW LANGS
目的:
システムで現在利用できる全ての言語を表示します。
例:
KCL> SHOW LANGS
 SHOW MEMORYコマンド
構文:
SHOW MEMORY
目的:
現在のメモリの状態を表示します。以下のメモリの情報をプール毎に別々に一覧表示します。
プールの総容量(バイト)
プールの使用可能容量(バイト)
例:
KCL> SHOW MEMORY
 SHOW PROGRAMコマンド
構文:
SHOW PROGRAM < prog_name >
ここで:
prog_name : メモリにある任意のKARELまたはTPプログラムの名前
目的:
指定されたプログラムまたはデフォルトプログラムの状態を表示します。
例:
KCL> SHOW PROGRAM test_prog
KCL> SH PROG
 SHOW PROGRAMSコマンド
構文:
SHOW PROGRAMS
目的:
現在メモリ中にロードされているプログラムと変数データの一覧を表示します。
例:
KCL> SHOW PROGRAMS
KCL> SH PROGS
 SHOW SYSTEMコマンド
構文:
SHOW SYSTEM < data_type > <VALUES>
ここで:
data_type : 任意のKARELデータ型
目的:
システム変数に関し、名前、データ型、指定があれば現在の値の一覧を表示します。data_type を指定すると、そのデータ型のシステム変
数のみがリストされます。
参照:
SHOW VARIABLEコマンド
例:
KCL> SHOW SYSTEM REAL VALUES
KCL> SH SYS
 SHOW TASKコマンド

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 374 of 412

構文:
SHOW TASK < prog_name >
ここで:
prog_name : タスクになっている、任意のKARELまたはTPプログラム
目的:
指定されたタスクのタスク制御データを表示します。 prog_name が指定されていない場合、デフォルトプログラムが使用されます。
例:
KCL> SHOW TASK test_prog
KCL> SH TASK
 SHOW TASKSコマンド
構文:
SHOW TASKS
目的:
KARELプログラムやTPプログラムを実行する全てのタスクを表示します。
作成したプログラム以外のタスクが表示される場合もあるかもしれません。教示操作盤がKARELを使って書かれている画面(例えばオン
ライン位置修正やパスワード)を表示していると、そのタスクの状態も表示されます。
例:
KCL> SHOW TASKS
 SHOW TRACEコマンド
構文:
SHOW TRACE < prog_name >
ここで:
prog_name : タスクになっている、任意のKARELまたはTPプログラム
目的:
トレース機能が有効になってから実行された全てのプログラム文と行番号を表示します。
表示される行数はトレースバッファの長さに依存します。 長さはSET_TASKコマンドやSET_TSK_ATTRビルトインで設定可能です。
SET TRACEコマンドも参照して下さい。
例:
KCL> SHOW TRACE
 SHOW TYPESコマンド
構文:
SHOW TYPES < prog_name > < FIELDS >
ここで:
prog_name : 任意のKARELまたはTPプログラムの名前
FIELDS : フィールドを表示する指定です。
目的:
指定されたプログラムまたはデフォルトプログラム中の各ユーザ定義型の名前、データ型、指定があればフィールドを表示します。 実際
の配列の次元及び文字列のサイズは表示されません。.
SHOW VARSコマンド、SHOW VARIABLEコマンドも参照して下さい。
例:
KCL> SHOW TYPES test_prog FIELDS
KCL> SH TYPES
 SHOW VARIABLEコマンド
構文:
SHOW VARIABLE <[ prog_name ]> var_name <(HEXADECIMAL | BINARY)>
ここで:
prog_name : 任意のKARELまたはTPプログラムの名前
var_name : 有効なプログラム変数
目的:
指定された変数の名称、データ型、値を表示します。
KCLがreadアクセスを持つシステム変数またはプログラムの変数の値を表示可能です。特定の配列の要素を指定するには変数名の後
にブラケット([ ])を使用して下さい。特定の要素を指定しない場合、変数全体が表示されます。
SHOW VARSコマンド、SHOW SYSTEMコマンドも参照して下さい。
例:

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 375 of 412

KCL> SHOW VARIABLE $UTOOL


KCL> SH VAR [test_prog]group_mask HEX
KCL> SH VAR [test_prog]group_mask BINARY
KCL> SH VAR weld_pth[3]
 SHOW VARSコマンド
構文:
SHOW VARS < prog_name > <VALUES>
ここで:
prog_name : 任意のKARELまたはTPプログラムの名前
VALUES : 値を表示する指定です。
目的:
指定されたプログラムまたはデフォルトプログラム中の各変数の名前、データ型、指定があれば現在の値を表示します。
SHOW VARIABLEコマンド、SHOW SYSTEMコマンド、SHOW TYPESコマンドも参照して下さい。
例:
KCL> SHOW VARS test_prog VALUES
KCL> SH VARS
 SHOW data_typeコマンド
構文:
SHOW data_type < prog_name > <VALUES>
ここで:
data_type : 任意のKARELデータ型
prog_name : 任意のKARELまたはTPプログラムの名前
VALUES : 値を表示する指定です。
目的:
指定されたプログラム( prog_name ) またはデフォルトプログラムの、指定されたデータ型(data_type )の変数の一覧を表示します。一覧は
各変数の名前、データ型、指定があれば現在の値を含みます。
SHOW VARSコマンド、SHOW VARIABLEコマンドも参照して下さい。
例:
KCL> SHOW REAL test_prog VALUES
KCL> SH INTEGER
 SIMULATEコマンド
構文:
SIMULATE port_name[index] < = value >
ここで:
port_name[index] : 有効なI/Oポート
value : I/Oポートの新しい値
目的:
I/Oを擬似にするとI/Oを使用するプログラムのテストが可能です。I/Oを擬似にしても実際には出力を送りませんし、入力を受けません。

警告
どのように信号が使用されているかに依存して、信号を擬似とすることにより、プログラム実行が変化する可能
性があります。 安全チェックに設定されている信号を擬似にしないで下さい。 擬似とすると、人を負傷させた
り、装置が損害を受ける可能性があります。

I/Oポートの値を擬似とする時、擬似の値の初期値の指定が可能です。または初期値を実際の物理ポートと同じ値とすることも可能で
す。値が指定されない場合、現在の物理ポートの値が使用されます。
有効なポートは以下の通りです。
DIN, DOUT, WDI, WDO (BOOLEAN) AIN, AOUT, GIN, GOUT (INTEGER)
UNSIMULATEコマンドも参照して下さい。
例:
KCL> SIMULATE DIN[17]
KCL> SIM DIN[1] = ON
KCL> SIM AIN[1] = 100
 STEP OFF コマンド

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 376 of 412

構文:
STEP OFF
目的:
シングルステップが有効になっているプログラムでそれを無効とします。
例:
KCL> STEP OFF
 STEP ONコマンド
構文:
STEP ON < prog_name >
ここで:
prog_name : タスクになっている、任意のKARELまたはTPプログラム
目的:
指定されたプログラムまたはデフォルトプログラムに関してシングルステップを有効とします。
例:
KCL> STEP ON test_prog
KCL> STEP ON
 TRANSLATEコマンド
構文:
TRANSLATE < file_spec > <DISPLAY> <LIST> <RS>
ここで:
file_spec : 有効なファイルスペック
DISPLAY : トランスレート中にソースを表示します。
LIST : create listing file
RS : ローカル変数にアクセスするためにルーチンスタック(.rs)ファイルを作成します。
目的:
KARELソースコード(.KLファイル)をPコード(PCファイル)にトランスレートします。PCファイルはメモリにロードして実行可能です。
プログラムのトランスレートはCANCELコマンドキー、つまりCRT/KBのCTRL-CまたはCTRL-Yでキャンセルできます。
基本的にはTRANSLATEコマンドは使用せず、ROBOGUIDE上でトランスレートして下さい。
例:
KCL> TRANSLATE testprog DISPLAY LIST
KCL> TRAN
 TYPEコマンド
構文:
TYPE file_spec
ここで:
file_spec : 有効なファイルスペック
目的:
指定されたASCIIファイルの内容をCRT/KB上に表示します。任意の種類のASCIIファイルを指定可能です。
例:
KCL> TYPE rd:testprog.kl
KCL> TYPE testprog.kl
 UNSIMULATEコマンド
構文:
UNSIMULATE ( port_name[index] | ALL )
ここで:
port_name[index] : 有効なI/Oポート
ALL : 全ての擬似状態のI/Oポート
目的:
指定された入力または出力ポートの擬似状態を解除します。ポートの擬似が解除されると、実際の値が擬似の値に置き換わります。

警告
どのように信号が使用されているかに依存して、擬似の解除によりプログラム実行が変化する可能性がありま
す。 結果に確信が無い限り擬似を解除しないで下さい。 擬似とすると、人を負傷させたり、装置が損害を受け
る可能性があります。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 377 of 412

特定のポートの代わりにALLを指定すると、全ての擬似状態のポートの擬似が解除されます。
有効なポートは以下の通りです。
DIN、DOUT、WDI、WDO、AIN、AOUT、GIN、GOUT
SIMULATEコマンドも参照して下さい。
例:
KCL> UNSIMULATE DIN[17]
KCL> UNSIM ALL
 WAITコマンド
構文:
WAIT < prog_name > (DONE | PAUSE)
ここで:
prog_name : タスクになっている、任意のKARELまたはTPプログラム
DONE : 現在のタスクが正常に完了するか、(強制または異常)終了するまでコマンドプロシージャの実行を待ちます。
PAUSE : 現在のタスクが一時停止するか、正常に完了するか、(強制または異常)終了するまでコマンドプロシージャの実行を待ちます。
目的:
タスクが一時停止するか完了するまで、コマンドプロシージャ内でKCL>WAITコマンドに続くコマンドの実行を延期します。
引数DONEまたはPAUSEの条件が満たされるまでコマンドプロシージャの実行を待ちます。
参照:
10.3節「コマンドプロシージャ」も参照して下さい。
例:
以下は実行可能なコマンドプロシージャの例です。
SET DEF testprog
RUN -- execute program
WAIT PAUSE
SHOW CURPOS -- display position of TCP when program pauses
CONTINUE
WAIT DONE

D 文字コード
D.1 文字コード
数値のASCIIコードと、それに対応するKARELで実装されているASCII文字、ヨーロッパ文字のリストを示します。ASCII文字セットが
KARELシステムのデフォルトの文字セットです。

表D.1(a) ASCII文字コード
10進数コード 文字 10進数コード 文字 10進数コード 文字 10進数コード 文字
000 (NUL) 032 SP 064 @ 096 `
001 (SOH) 033 ! 065 A 097 a
002 (STX) 034 " 066 B 098 b
003 (ETX) 035 # 067 C 099 c
004 (EOT) 036 $ 068 D 100 d
005 (ENQ) 037 % 069 E 101 e
006 (ACK) 038 & 070 F 102 f
007 (BEL) 039 ' 071 G 103 g
008 (BS) 040 ( 072 H 104 h
009 (HT) 041 ) 073 I 105 i
010 (LF) 042 * 074 J 106 j
011 (VT) 043 + 075 K 107 k
012 (FF) 044 ' 076 L 108 l

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 378 of 412

013 (CR) 045 - 077 M 109 m


014 (SO) 046 . 078 N 110 n
015 (SI) 047 / 079 O 111 o
016 (DLE) 048 0 080 P 112 p
017 (DC1) 049 1 081 Q 113 q
018 (DC2) 050 2 082 R 114 r
019 (DC3) 051 3 083 S 115 s
020 (DC4) 052 4 084 T 116 t
021 (NAK) 053 5 085 U 117 u
022 (SYN) 054 6 086 V 118 v
023 (ETB) 055 7 087 W 119 w
024 (CAN) 056 8 088 X 120 x
025 (EM) 057 9 089 Y 121 y
026 (SUB) 058 : 090 Z 122 z
027 (ESC) 059 ; 091 [ 123 {
028 (FS) 060 < 092 \ 124 |
029 (GS) 061 = 093 ] 125 }
030 (RS) 062 > 094 ^ 126 ~
031 (US) 063 ? 095 — 127 (DEL)

表D.1(b) 特殊なASCII文字コード
10進数コード 文字 10進数コード 文字
128 ウィンドウクリア 155 48 前景色黒
129 行末までクリア 155 49 前景色赤
130 ウィンドウの最後までクリア 155 50 前景色緑
131 カーソル位置の設定 155 51 前景色黄色
132 復帰(Carriage return) 155 52 前景色青
133 改行/複行(Line feed) 155 53 前景色マゼンタ
135 復帰及び改行/複行 155 54 前景色シアン
136 バックスペース 155 55 前景色白
ウィンドウのホームカーソル
137 155 127 前景色をデフォルトにする
位置
139 反転表示属性 156 48 背景色黒
143 通常表示属性 156 49 背景色赤
156 50 背景色緑
156 51 背景色黄色
156 52 背景色青
156 53 背景色マゼンタ
156 54 背景色シアン
156 55 背景色白
156 127 背景色をデフォルトにする

表D.1(c) 教示操作盤入力コード
コード 値 コード 値
0 48 174 ユーザキー2
1 49 175 ユーザキー3
2 50 176 ユーザキー4
3 51 177 ユーザキー5
4 52 178 ユーザキー6
5 53 185 前進
6 54 186 後退
7 55 187 手動送り座標系

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 379 of 412

8 56 188 +X
9 57 189 +Y
128 前戻り 190 +Z
129 F1 191 +X 回転
131 F2 192 +Y 回転
132 F3 193 +Z 回転
133 F4 194 -X
134 F5 195 -Y
135 F→ 196 -Z
143 一覧 197 -X 回転
144 画面選択 198 -Y 回転
145 編集 199 -Z 回転
146 データ 210 USER KEY
147 補助 212 上矢印
148 項目選択 213 下矢印
149 +% 214 右矢印
150 -% 215 左矢印
151 ホールド 249 ON/OFFスイッチ
152 ステップ 250 非常停止
153 RESET
173 ユーザキー1

表D.1(d) ヨーロッパ文字コード
コード 値 コード 値 コード 値
192 A` 213 O~ 234 e^
193 A` 214 O: 235 e:
194 A^ 215 OE 236 i`
195 A~ 216 O/ 237 i`
196 A: 217 U` 238 i^
197 Ao 218 U` 239 i:
198 AE 219 U^ 240
199 CC 220 U: 241 n~
200 E` 221 Y: 242 o`
201 E` 222 243 o`
202 E^ 223 Bb 244 o^
203 E: 224 a` 245 o~
204 I` 225 a` 246 o:
205 I` 226 a^ 247 oe
206 I^ 227 a~ 248
207 I: 228 a: 249 u`
208 229 ao 250 u`
209 N~ 230 ae 251 u^
210 O` 231 252 u:
211 O` 232 e` 253 y:
212 O^ 233 e` 254

A^ = Aの上に^
A` = Aの上に `
Ao = Aの上に o
A~ = Aの上に ~
A: = Aの上に..
AE = A と Eが一緒
OE = AとEが一緒

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 380 of 412

Bb = ベータ

E 文法図

文法図は以下のシンボルを使用します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 381 of 412

図E(a)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 382 of 412

図E(b)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 383 of 412

図E(c)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 384 of 412

図E(d)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 385 of 412

図E(e)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 386 of 412

図E(f)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 387 of 412

図E(g)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 388 of 412

図E(h)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 389 of 412

図E(i)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 390 of 412

図E(j)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 391 of 412

図E(k)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 392 of 412

図E(l)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 393 of 412

図E(m)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 394 of 412

図E(n)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 395 of 412

図E(o)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 396 of 412

図E(p)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 397 of 412

図E(q)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 398 of 412

図E(r)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 399 of 412

図E(s)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 400 of 412

図E(t)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 401 of 412

図E(u)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 402 of 412

図E(v)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 403 of 412

図E(w)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 404 of 412

図E(x)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 405 of 412

図E(y)

F ROBOGUIDEを用いたトランスレート

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 406 of 412

ROBOGUIDEを用いたKARELプログラムの作成やトランスレート方法について説明します。ROBOGUIDEの詳しい操作方法について
は、ROBOGUIDEのヘルプを参照して下さい。

ROBOGUIDEを起動しバーチャルロボットを起動あるいは新規作成します。

F.1 KARELプログラムのトランスレート
新規作成または追加したKARELプログラムをトランスレートする例を示します。

F.1.1 新規作成したKARELプログラムのトランスレート例
セルブラウザのファイルを右クリックして、新規ファイルから「KARELソース」を選択します。作成済みのKARELソースを追加する場合、
「追加」を選択します。下図は表示例です。(セルブラウザが表示されていない場合は、表示メニューからセルブラウザを選択して下さ
い。)

新規追加したファイルは空です。Untitiled1.kl等と命名されます。「名前をつけて保存」ボタンを押し、8文字以内でKARELファイル名を入
力します。例:formtest.kl

KARELプログラムを入力後に右上のビルドをクリックすると、KARELがトランスレートされます。問題なくビルドできた場合は、自動的に
バーチャルロボットに読み込まれます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 407 of 412

ビルドを開始すると結果が別ウィンドウに表示されます。エラーが有る場合、簡単な説明が表示されます

F.1.2 既存のKARELを追加してトランスレートする例
セルブラウザのファイルを右クリックして、追加を選択します。
下図は表示例です。
(セルブラウザが表示されていない場合は、表示メニューからセルブラウザを選択して下さい。)

以下のような画面が表示されますので、追加するKARELプログラムを選択します。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 408 of 412

追加したファイルを右クリックし、ビルドを選択します。これによりKARELプログラムがトランスレートされます。
(下図の場合、ビルドを選択後にgetattr.pcというファイルが作成されます。)
トランスレートしたKARELファイルは自動的にバーチャルロボットに読み込まれます。

「新規作成したKARELプログラムのトランスレート例」と同様に追加したKARELを開いてから右上に表示されるビルドをクリックすること
で、ビルドすることも可能です。

F.2 辞書ファイルのトランスレート
KARELプログラムと同様に辞書ファイルのトランスレートを実行できます。ROBOGUIDEによる辞書作成に関してはヘルプの”開発ツー
ル”をご覧下さい。

F.2.1 新規作成した辞書ファイルのトランスレート例
セルブラウザのファイルを右クリックして、新規ファイルを選択します。下図はフォーム辞書を選択したときの表示例です。
(セルブラウザが表示されていない場合は、表示メニューからセルブラウザを選択して下さい。)

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 409 of 412

新規追加したファイルは空です。Untitiled1.ftx等と命名されます。「名前をつけて保存」ボタンを押し、規則(辞書名4文字、言語名4文字)
に従った名前に変更します。例:辞書名dict、言語名engl(英語)の場合dictengl.ftx

辞書ファイルを作成し、テキストエディタの右上のビルドボタンを押下します。

ビルドを開始すると結果が別ウィンドウに表示されます。エラーが有る場合、簡単な説明が表示されます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 410 of 412

トランスレートが正常に終了した場合、辞書ファイルは自動的にバーチャルロボットへロードされます。

F.2.2 既存の辞書ファイルを追加してトランスレートする例
作成済みの辞書を追加する場合、「追加」を選択します。セルブラウザのファイルを右クリックして、追加を選択します。
下図は表示例です。(セルブラウザが表示されていない場合は、表示メニューからセルブラウザを選択して下さい。)

以下のような画面が表示されますので、追加する辞書ファイルを選択します。

セルブラウザ上で追加した辞書ファイルを右クリックし、ビルドを選択するとビルドできます。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 411 of 412

トランスレートが正常に終了した場合、辞書ファイルは自動的にバーチャルロボットへロードされます。

F.2.3 辞書ファイル名と言語
辞書ファイルのファイル名は、次の規則に従って決定されます。
l ファイル名は8文字
l 最初の4文字は辞書名
l 最後の4文字は言語名
l 拡張子はetx.ftx.utxの何れか
l Form Editorで画面を作成するときにはftxを使用します。
l 言語名の4文字は以下の通りです。
"DEFA" = DEFAULT
"ENGL" = ENGLISH
"JAPA" = JAPANESE
"KANJ" = KANJI
"FREN" = FRENCH
"GERM" = GERMAN
"SPAN" = SPANISH
"CHIN" = CHINESE
"TAIW" = TAIWANESE

F.3 制御装置へロード
バーチャルロボットで作成したものを、実機にロードする方法を示します。
トランスレートしたPC、VR、TXファイルで必要なものをロードします。
1. PC,VR,TXファイルをCompact FLASH ATAカード(以下、メモリカードと記載)にコピーします。
2. メモリカードを制御装置に挿入します
3. ファイル画面を表示し、F3[読込]でPC,VR,TXファイルをロードします。下図は表示例です。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023
1 KAREL言語の概要 Page 412 of 412


Form Editorで複数の言語の辞書をロードする場合において、VRファイルはどれか一つの言語のみにして下さい。上記例ではVRファイル
はFTST.VRのみ使用しています。これは次の理由によります。
VRファイルはデータ項目の表示開始位置や幅などの内部データを格納しています。各言語のファイルから生成されますが、使用可能な
データは一つだけです。このためデータ項目の種類、位置、幅などは各言語間で統一して下さい。VRファイルは一つだけロードして下さ
い。通常は英語のVRファイルをご利用下さい。

file:///C:/Users/tiong.yihhan.my.APAC/AppData/Local/Temp/~hh554F.htm 20/7/2023

You might also like