Next: 画面表示/コマンド入力ループ関数
Up: プログラムの動作
Previous: メイン関数
リアルタイム処理関数on_task()の例を次に示す。
Func void on_task()
{
Real r;
Matrix yy, y, xf, u;
// 目標値の計算
r = m1*sin(w1*stime*t) + m2*sin(w2*stime*t);
t++;
yy = sensor(); // センサーからの入力
y = [[ r - yy(1)] // 観測出力1
[y(1) - yy(2)]]; // 観測出力2
xf = A * x + B * y; // コントローラの状態を更新
u = C * x + D * y; // 制御入力
x = xf; // コントローラの状態を保存
actuator(u); // アクチュエータへの出力
}
コメントの説明を補足する。
- プラントの出力が目標値に追従することを目的としているため,
センサの出力から目標値を引いて観測出力としている。
- 関数sensor()は,センサの測定値をA/D変換器などで取り込んだ
値を物理量に変換して返す。
- 関数actuator()はアクチュエータの発生するトルクなどを操作する。
この関数内部ではD/A変換器などを操作している。
Masanobu KOGA
平成10年8月19日