2003-4年にアメリカUC Berkeleyに留学した一番の成果は、OpenSeesと実験機器を融合させたハイブリッド実験を行うシステムを開発したことでした。オブジェクト指向で構造実験を分析し、実装。留学先のFenves先生と一緒に、OpenFresco (Open software FRamework for Experimantal Setup and COntrol)と名付けました。有難いことに、今でもUC Berkeleyから公開してくれています。これを研究でも使用再開しようと思い、そのためにまずOpenSeesのビルドから再開したのです。
さて、実験機器をコンピュータでコントロールするにはドライバが必要で、当時その多くはMS Windows用しかありませんでした。当時はメインはLinuxだったので流儀がわからず閉口しましたが、時間もあったのでコーディングできましたが、さて、再開しようとすると、随分と状況が変わっています。オリジナルはWindows XPでしたが、その後Windows 7時代までは使ってました。ただ、OSも64ビット化する中で、実験機器用ドライバは32ビット版しかなかったので、OSを32ビット版を使うことで解決していました。ただ今再開するにあたり、今更32ビットは…ということで調べてみると、National InstrumentsのUSB接続のDAQボードを制御するドライバNIDAQmxは64ビット版もありました。これを使うことにします。インストールはOK、ドライバ付属のテストパネルでは電圧の入出力もOK。さて、これをC++のプログラムで制御したいのです。
さて、ANSI Cのサンプルコードも付いていたのでVisual Studio 2019でプロジェクトファイルを開くと、サンプルが古くてソリューションファイルに変換失敗とでる。そのままコンパイルすると、何かのフラグがバッティングしているだけそうだったので、必要ないフラグを外して再コンパイル。あっさり実行ファイルができました。ラッキーと、プログラムを走らせても、何も電圧が出力されていません。32ビットのライブラリがリンクされているかと思い、確認するとビンゴ。64ビットのライブラリへリンク先を変更し、再コンパイルすると、今度は多くのリンクエラーが。なぜ??原因は、Visual Studioのソリューションファイルのターゲットがx86となっていたので、とりあえずx64を新規作成。実は何が変わったか分かりませんが、これでリンクエラーも出ず、実行ファイルができました。めでたし、めでたし。実行すると、やっぱり電圧が出力されない…でもエラーも発生していないので、DAQボードとは通信しているみたいだけど…
困ってネットで情報検索.すると,C言語でNIDAQmxライブラリを用いている事例は(オフィシャルも含め)ほぼ10年前までのものばかり.National Instrumentsでも,LabViewを押しているし,MATLABでもNIの機器を使えるので,最近はC言語で制御したいニーズがないんだろうな,と諦め,サンプルソースコードに向き合う(本来,まずはこれからすべき).すると,Sampling Clock Timingを取得するデバイス名が違う,という初歩的なミスでした.恥ずかしいので,自戒を込めてここに晒しておきます.これを修正し,無事,電圧出力できました.次はOpenFrescoのビルドだな.OpenSSLなどの通信も含むので,これまた大仕事.時間みつけられるかな.