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_DI_EXCEED_DATA_NUM:
case Ydx.YDX_RESULT_DI_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[] { "DIO-16/16C-USC", "DIO-16/16D-UBC", "DIO-16/16D-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)
{
dataTextBox.ResetText();
Application.DoEvents();
// データバッファの設定
int result = Ydx.DiSetBuffer(id, 0);
// FIFOバッファ
if(result != 0)
{
ResultShow("YdxDiSetBuffer", result);
return;
}
// サンプリングクロックの設定
result = Ydx.DiSetClock(id, 0); // 内部クロック
if(result != 0)
{
ResultShow("YdxDiSetClock", result);
return;
}
// 内部クロック周期の設定
result = Ydx.DiSetClockInternal(id, 1000); // 1000μsec
if(result != 0)
{
ResultShow("YdxDiSetClockInternal", result);
return;
}
// サンプリング開始条件の設定
result = Ydx.DiSetStartCondition(id, 0, 0); // ソフトウェア if(result != 0)
{
ResultShow("YdxDiSetStartCondition", result);
return;
}
// サンプリング停止条件の設定
result = Ydx.DiSetStopCondition(id, 0, 0); // サンプル数 if(result != 0)
{
ResultShow("YdxDiSetStopCondition", result);
return;
}
// サンプリング停止条件(サンプル数)の設定
result = Ydx.DiSetStopSampleNum(id, 1000);
if(result != 0)
{
ResultShow("YdxDiSetStopSampleNum", result);
return;
}
// データをクリア
result = Ydx.DiClearData(id);
if(result != 0)
{
ResultShow("YdxDiClearData", result);
return;
}
// デジタル入力動作を開始
result = Ydx.DiStart(id);
if(result != 0)
{
ResultShow("YdxDiStart", result);
return;
}
// 動作終了待ち
int status, sampleCount, repeatCount;
// 動作中ステータスがOFFになるまでポーリング
do
{
// ステータスの取得
result = Ydx.DiGetStatus(id, out status, out sampleCount, out repeatCount);
if(result != 0)
{
ResultShow("YdxDiGetStatus", result);
return;
}
statusTextBox.Text = status.ToString("X").PadLeft(8, '0') + "h";
sampleCountTextBox.Text = sampleCount.ToString();
repeatCountTextBox.Text = repeatCount.ToString();
Application.DoEvents();
if((status & Ydx.YDX_STATUS_COMMUNICATE_ERR) != 0)
{
MessageBox.Show("通信エラーが発生しました", "", MessageBoxButtons.OK, MessageBoxIcon.Hand);
return;
}
if((status & Ydx.YDX_STATUS_HARDWARE_ERR) != 0)
{
MessageBox.Show("ハードウェアエラーが発生しました", "", MessageBoxButtons.OK, MessageBoxIcon.Hand);
return;
}
if((status & Ydx.YDX_STATUS_OVERRUN_ERR) != 0)
{
MessageBox.Show("オーバランエラーが発生しました", "", MessageBoxButtons.OK, MessageBoxIcon.Hand);
return;
}
if((status & Ydx.YDX_STATUS_SAMPLE_CLOCK_ERR) != 0)
{
MessageBox.Show("サンプリングクロックエラーが発生しました", "", MessageBoxButtons.OK, MessageBoxIcon.Hand);
return;
}
} while ((status & Ydx.YDX_STATUS_BUSY) != 0);
// データの読み出し
int[] data = new int[sampleCount];
result = Ydx.DiGetData(id, ref sampleCount, data);
if(result != 0)
{
ResultShow("YdxDiGetData", result);
if((result != Ydx.YDX_RESULT_DI_EXCEED_DATA_NUM) && (result != Ydx.YDX_RESULT_DI_EXCEED_BUF_SIZ))
return;
}
// 表示
string txt = "";
for (int sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++)
{
txt += (sampleIndex + 1).ToString().PadLeft(5) + " : ";
// 2進数表記
txt += Convert.ToString(data[sampleIndex] >> 16 & 0x0f, 2).PadLeft(4, '0') + " ";
txt += Convert.ToString(data[sampleIndex] >> 8 & 0x0f, 2).PadLeft(4, '0') + " ";
txt += Convert.ToString(data[sampleIndex] >> 4 & 0x0f, 2).PadLeft(4, '0') + " ";
txt += Convert.ToString(data[sampleIndex] & 0x0f, 2).PadLeft(4, '0');
// 16進数表記
txt += " (" + data[sampleIndex].ToString("X").PadLeft(4) + "h)";
txt += Environment.NewLine;
}
dataTextBox.Text = txt;
}
クローズ¶
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);
}