C#¶
開発環境の設定¶
-
Ydx.cs をプロジェクトフォルダにコピーします。
-
Ydx.cs をプロジェクトに追加します。
-
ソースファイルにusing ディレクティブを使ってYdxCsを宣言します。
using YdxCs;
コントロール¶
変数¶
private int id;
実行結果の表示¶
private void ResultShow(string title, int resultCode)
{
string resultString;
Ydx.CnvResultToString(resultCode, out resultString);
switch (resultCode)
{
case 0:
case Ydx.YDX_RESULT_AI_EXCEED_DATA_NUM:
case Ydx.YDX_RESULT_AI_EXCEED_BUF_SIZ:
MessageBox.Show(resultString, title, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
break;
default:
MessageBox.Show(resultString, title, MessageBoxButtons.OK, MessageBoxIcon.Hand);
break;
}
}
フォームロード¶
private void Form1_Load(object sender, EventArgs e)
{
// ユニット識別スイッチ
unitSwitchComboBox.ResetText();
unitSwitchComboBox.Items.AddRange(new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" });
unitSwitchComboBox.SelectedIndex = 0;
// 型名
modelNameComboBox.ResetText();
modelNameComboBox.Items.AddRange(new string[] { "AIO-64/4/1B-USC", "AIO-04/4/1B-USC" });
modelNameComboBox.SelectedIndex = 0;
}
オープン¶
private void openButton_Click(object sender, EventArgs e)
{
int result = Ydx.Open(unitSwitchComboBox.SelectedIndex, modelNameComboBox.Text, 0, out id);
if (result != 0)
ResultShow("YdxOpen", result);
else
{
unitSwitchComboBox.Enabled = false;
modelNameComboBox.Enabled = false;
ResultShow("オープン", result);
}
}
出力開始¶
private void startButton_Click(object sender, EventArgs e)
{
int result;
// データバッファの設定
result = Ydx.AoSetBuffer(id, 0); // FIFOバッファ
if (result != 0)
{
ResultShow("YdxAoSetBuffer", result);
return;
}
// チャネルの設定
const int CHANNEL_NUM = 4; // 4チャネルを有効にする
for (int channel = 0; channel < CHANNEL_NUM; channel++)
{
result = Ydx.AoSetChannel(id, channel, 1);
if (result != 0)
{
ResultShow("YdxAoSetChannel", result);
return;
}
}
// サンプリングクロックの設定
result = Ydx.AoSetClock(id, 0); // 内部クロック
if (result != 0)
{
ResultShow("YdxAoSetClock", result);
return;
}
// 内部クロック周期の設定
result = Ydx.AoSetClockInternal(id, 1000); // 1000μsec
if (result != 0)
{
ResultShow("YdxAoSetClockInternal", result);
return;
}
// データの設定
const int SAMPLE_NUM = 1000; // サンプル数
float[] data = new float[SAMPLE_NUM * CHANNEL_NUM]; // データ個数は、サンプル数 * 有効チャネル数
for (int i = 0; i < SAMPLE_NUM; i++)
{
float waveData = (float)(10 * Math.Sin(2 * Math.PI * i / SAMPLE_NUM)); // 正弦波
for (int channel = 0; channel < CHANNEL_NUM; channel++)
{
data[i * CHANNEL_NUM + channel] = waveData;
}
}
result = Ydx.AoSetDataVolt(id, SAMPLE_NUM, data);
if (result != 0)
{
ResultShow("YdxAoSetDataVolt", result);
return;
}
// サンプリング開始条件の設定
result = Ydx.AoSetStartCondition(id, 0, 0); // ソフトウェア
if (result != 0)
{
ResultShow("YdxAoSetStartCondition", result);
return;
}
// サンプリング停止条件の設定
result = Ydx.AoSetStopCondition(id, 0, 0); // データ終了
if (result != 0)
{
ResultShow("YdxAoSetStopCondition", result);
return;
}
// イベントオブジェクト作成
AutoResetEvent hEvent = new AutoResetEvent(false);
// イベントの設定
result = Ydx.AoSetEvent(id,
Ydx.YDX_EVENT_COMMUNICATE_ERR |
Ydx.YDX_EVENT_HARDWARE_ERR |
Ydx.YDX_EVENT_SAMPLE_CLOCK_ERR |
Ydx.YDX_EVENT_STOP,
hEvent.Handle);
if (result != 0)
{
ResultShow("YdxAoSetEvent", result);
hEvent.Close();
return;
}
// アナログ出力動作を開始
result = Ydx.AoStart(id);
if (result != 0)
{
ResultShow("YdxAoStart", result);
hEvent.Close();
return;
}
// イベント発生待ち
hEvent.WaitOne();
hEvent.Close();
// ステータスの取得
int factor, sampleCount, repeatCount, notOutNum;
result = Ydx.AoGetEventStatus(id, out factor, out sampleCount, out repeatCount, out notOutNum);
if (result != 0)
{
ResultShow("YdxAoGetEventStatus", result);
return;
}
if ((factor & Ydx.YDX_EVENT_COMMUNICATE_ERR) != 0)
{
MessageBox.Show("通信エラーが発生しました", "", MessageBoxButtons.OK, MessageBoxIcon.Hand);
return;
}
if ((factor & Ydx.YDX_EVENT_HARDWARE_ERR) != 0)
{
MessageBox.Show("ハードウェアエラーが発生しました", "", MessageBoxButtons.OK, MessageBoxIcon.Hand);
return;
}
if ((factor & Ydx.YDX_EVENT_SAMPLE_CLOCK_ERR) != 0)
{
MessageBox.Show("サンプリングクロックエラーが発生しました", "", MessageBoxButtons.OK, MessageBoxIcon.Hand);
return;
}
ResultShow("アナログ出力", 0);
}
クローズ¶
private void closeButton_Click(object sender, EventArgs e)
{
unitSwitchComboBox.Enabled = true;
modelNameComboBox.Enabled = true;
int result = Ydx.Close(id);
if (result != 0)
ResultShow("YdxClose", result);
else
ResultShow("クローズ", result);
}
フォームクローズ¶
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
int result = Ydx.Close(id);
if ((result != 0) && (result != Ydx.YDX_RESULT_NOT_OPEN))
{
ResultShow("YdxClose", result);
}
}