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