ご家庭に眠っているIOボードUSB-1208FS(-Plus)を活用しましょう。
User's Guide
公式にMeasurement Computing(MCC)からドライバーやサンプルプログラムが配布されています。
CSharp Programs for USB-1208FS, 1408FS, 1608FS
ここでは、アナログ入力を記録するため、Visual C#のフォームアプリケーションでの利用を考えてみたいと思います。
MccのIOボードの制御にはドライバーが必要です。InstaCalをインストールすると、同時にドライバーである「MccDaq.dll」もインストールされます。
C#でフォームアプリケーションを参考に、プロジェクトを作ります。
ソリューションエクスプローラーから「参照」を選択し、右クリック→「参照の追加」をクリックします。
InstaCalをインストールすると、「参照マネージャー」の「拡張」から「MccDaq」を選択することができます。
OKすると、ソリューションエクスプローラーに「MccDaq」が追加されます。これでお使いのIOデバイスを利用する準備が整いました。
Windowsでのプログラミングには、MCC純正のUniversal Library(UL)が利用できます。
ULは、MCCのすべてのデータ収集ハードウエアに対応するI/Oライブラリおよびドライバのセットです。(NFテクノコマースの説明)
個々の関数の機能は、リファレンス(英語)を御覧ください。
Universal Library Help ("Universal Library Function Reference" → "UL for .NET")
さてVisual C#では、まずコードを表示して、先頭箇所で名前空間を記載することで、MccDaqが参照されULが使えます。
基本的には、以下のようにパラメータを定義しておきます。
ここでは、MccDaq名前空間に含まれるMccBoardクラスのフィールドをdaqと宣言しています。
public const int NUMOFBLKS = 50; public const int CHANCOUNT = 4; public const int FIRSTCHANNEL = 0; public const int LASTCHANNEL = 3; public const int FREQ = 1000; public const string DEVICE = "USB-1208FS"; public static int PACKETSIZE; // パケットサイズはUSB-1208FSは31で、-Plusは32 public static MccBoard daq;
daq = new MccDaq.MccBoard(0);とすると、0番のデバイスの情報がdaqに格納されます。
IntPtr buffer = MccService.WinBufAllocEx( BUFFERSIZE );記録を開始するには、
IsError( daq.AInScan( FIRSTCHANNEL, LASTCHANNEL, BUFFERSIZE, ref Rate, Range.Bip10Volts, buffer, ScanOptions.Background | ScanOptions.Continuous | ScanOptions.BlockIo ) );なおこのページの例では、MccDaqがエラーを返した際の処理をIsError()という自作の関数で行っています。
ushort[] ushortArray = new ushort[BUFFERSIZE]; IsError(MccService.WinBufToArray(buffer, ushortArray, 0, BUFFERSIZE));として、データを配列に格納します。メモリを解放するには、
MccService.WinBufFreeEx(buffer);プロットや計算用にデータを変換するには、
float temp = 0; // 一つひとつのデータの保持用 IsError(daq.ToEngUnits(Range.Bip10Volts, ushortArray[i], out temp));とします。配列内の個々のデータは、バッファサイズ × ch数分多重ループさせることで出力していけばよいでしょう。