LANGUAGE
日本語 English

関数名

ReadArray

定 義

int ReadArray ( short ProcNo, char pArrayName[], short idx11, short idx12, short NumberOfData, variant pValue[], short idx21, short idx22 );

戻り値

0が返却されます。

引 数

ProcNo:アクセス先のプロセス番号を1~100の範囲で指定します。
pArrayName:指定プロセス上のグローバル配列変数名を指定します。NULL終端の文字列で指定しますので変数名をダブルクォーテーションで括るか、または文字配列変数を使用してください。構造体のメンバも指定可能です。なおMOS言語仕様により、扱うことができるのは1次元配列または2次元配列のみです。
idx11:pArrayNameで指定した1次元配列または2次元配列において、取得したい配列の1次元目の先頭要素番号を指定します。
idx12:pArrayNameで指定した1次元配列または2次元配列において、取得したい配列の2次元目の先頭要素番号を指定します。pArrayNameが1次元配列の場合は0を指定してください。
NumberOfData:pArrayNameで指定した1次元配列または2次元配列において、idx11とidx12で指定した先頭要素から取得したい配列の要素数を指定します。
pValue:取得値を格納する配列変数名を指定します。pArrayNameで指定した配列変数のデータ型と一致させる必要があります。
idx21:pValueで指定した1次元配列または2次元配列において、取得した1次元目の配列の値を、pValueのどの要素を先頭に格納するのかを指定します。
idx22:pValueで指定した1次元配列または2次元配列において、取得した2次元目の配列の値を、pValueのどの要素を先頭に格納するのかを指定します。pValueが1次元配列の場合は0を指定してください。

概 要

指定のプロセスから指定のグローバル配列変数の値を取得し、指定の配列変数へ取得値を格納します。

詳 細

プロセスから取得できるのはグローバル配列変数の値に限られます。ローカル配列変数は取得できません。
指定のプロセスがシステム上にアサインされていない場合や、指定のプロセス中に指定したグローバル変数が存在しない場合はランタイムエラーとなります。
本関数の戻り値のデータ型は、必ず参照するグローバル変数と同一のデータ型としてください。異なるデータ型とした場合、正しい結果が得られません。(正しい結果が得られなくてもエラーにはならない。)

備考

前処理の候補

後処理の候補

他処理の候補

対応HW

〇PCベースコントローラ
〇InterMotion

使用例


int	g_IAry[10];
char	g_Str[10];		//文字配列
double	g_Pos[MaxRobAxes];	//ポジション配列
struct	tagPosAttrib {
	int speed;
	double pos0[MaxRobAxes];
};
tagPosAttrib g_PosAtr;
・・・・
//プロセス1上のg_IAryP1変数のデータ型はint型
//プロセス1上のg_StrP1変数のデータ型はchar型
//プロセス2上のg_PosP2変数のデータ型はdouble型
//プロセス3上のg_PosAtrP3変数のデータ型はtagPosAttrib構造体と同一型
void main() {
	int i;
	・・・・
	//プロセス1のg_IAryP1[0]~[9](10個の要素)の値をg_IAry[0]~[9]に格納します
	ReadArray(1, "g_IAryP1", 0, 0, 10, g_IAry, 0, 0);
	for(i = 0; i < 10; i = i + 1) {
		Printf2("g_IAry[%d] = %d, ", i, g_IAry[i]);
	}
	//プロセス1のg_StrP1[0]~[5](6個の要素)の値をg_Str[0]~[5]に格納します
	ReadArray(1, "g_StrP1", 0, 0, 6, g_Str, 0, 0);
	Printf1("\ng_Str = %s", g_Str);
	//プロセス2のg_PosP2[0]~[MaxRobAxes-1]の値をg_Pos[0]~に格納します
	ReadArray(2, "g_PosP2", 0, 0, MaxRobAxes, g_Pos, 0, 0);
	for(i = 0; i < MaxRobAxes; i = i + 1) {
		Printf2("g_Pos[%d] = %f, ", i, g_Pos[i]);
	}
	//プロセス3のg_PosAtrP3変数のメンバpos0[0]~の値をg_PosAtrのメンバpos0[0]~に格納します
	ReadArray(3, "g_PosAtrP3.pos0", 0, 0, MaxRobAxes, g_PosAtr.pos0, 0, 0);
	for(i = 0; i < MaxRobAxes; i = i + 1) {
		Printf2("g_PosAtr.pos0[%d] = %f, ", i, g_PosAtr.pos0[i]);
	}
	//データ型が異なるため正しい結果が得られない
	ReadArray(1, "g_IAryP1"/*int型*/, 0, 0, 10, g_Str/*Char型*/, 0, 0)
	//これもデータ型が異なるとみなされます
	ReadArray(3, "g_PosAtrP3.pos0"/*構造体メンバ*/, 0, 0, MaxRobAxes, g_Pos/*double型*/, 0, 0);
	・・・・
}