目次
前
次
変換処理
ボタン「send」をクリックした場合、FPGAの通信プロトコルに
変換する必要があります。
タイマー割込み処理で、指定パラメータまで数値を更新します。
この2処理を考えます。
パラメータ生成
通信の送信データフォーマットは、以下です。
'A'+{機体番号}+{チャネル番号}+{3桁の数字}+'\r'
コマンド'A'を、転送文字列の先頭に設定します。
機体番号は、数値増減コンポーネントnudNumberから
取得します。
number = nudNumber.Value ;
チャネル番号は、次の対応を利用します。
- 0 Grip
- 1 Wrist
- 2 Arm
- 3 Elbow
- 4 Waist
3桁の数字は、以下の各数値増減コンポーネントから取得。
- 0 nudGrip.Value
- 1 nudWrist.Value
- 2 nudArm.Value
- 3 nudElbow.Value
- 4 nudWaist.Value
now[0] = nudGrip.Value ;
now[1] = nudWrist.Value ;
now[2] = nudArm.Value ;
now[3] = nudElbow.Value ;
now[4] = nudWaist.Value ;
タイマー割込み処理
割込み処理のシーケンスを考えます。
- フラグdflagがfalseなら終了
- 機体番号取得
- 全チャネルのパラメータ取得
- 目標値と現在値に差があれば、現在値を1増減
- パラメータ文字列作成
- 目標値と現在値に差があるパラメータを送信
- パラメータ表示
- 現在値内容更新
- パラメータ表示
シーケンスをコードにします。
// get machine number
number = nudNumber.Value;
// judge
if ( dflag == true ) {
stmp = "";
for (loop = 0; loop < LAST; loop++)
{
// judge
if (now[loop] == prev[loop]) continue;
// update
if (now[loop] > prev[loop])
{
prev[loop]++;
}
else
{
prev[loop]--;
}
// generate command
stmp = stmp + "A" + number.ToString();
stmp = stmp + loop.ToString() + prev[loop].ToString();
stmp = stmp + '\r';
}
// send
if (sciDTB.IsOpen)
{
sciDTB.Write(stmp);
}
// show
edtText.Text = edtText.Text + stmp + '\n';
// count up differences
cnt = 0;
for (loop = 0; loop < LAST; loop++)
{
if (now[loop] != prev[loop])
{
cnt++;
}
}
// judge
if (cnt == 0)
{
for (loop = 0; loop < LAST; loop++)
{
prev[loop] = now[loop];
}
dflag = false;
}
}
目次
前
次