
このたびGitHubに3軸制御用のプログラム、DigitShowBasicを公開しました。
いままで、ローカルだったりCDで保管していて、必要なときに配ってましたが、今後は自由に持っていて下さい。
そもそもDigitShowBasicって何よ?
という人はきっと、東大式でない制御装置で外注ソフトを使っていることだと思います。
元誠研舎製だったり、TESCOだったり、セントラル技研だったり、制御まで統合された一体型装置を使っているかもしれません。
東大式はCONTECやInterfaceのAD/DAボードを用いて、多様な試験機をモーター制御するのが基本となっており。
対象を電圧でコントロールするだけでという、かなり汎用的な作りになっているので、特定の用途向け(完全に三軸のみ)ではないのが特徴です。
電圧でコントロールできれば何でも良いので、カメラのシャッターでも、ONOFFバルブ、アナログ電圧で開度(スロットル)調整でもなんでもよかったわけです。
なので、公開してるのも、ガラパゴス改造があまり酷くないバージョンを参考に上げているだけです。
以下は若干、技術的なこともありますが、雑記になります。
多少、コードを整備するにあたって分かったことが色々ありました。どうやら、
Windows3.1/95 時代に 国立研究開発法人 土木研究所 で作成された DigitShow を参考に、
Windows2000 時代に 東京大学 本郷地盤研 本田剛(Tsuyoshi HONDA)さんが作成したのが DigitShowBasic のようなのです。
それこそ最初はArduinoに毛が生えたようなスペックで、GUIはなく、コンソールでBASICを叩いていたわけです。
いやぁ、良い時代になったねぇ、僕たちは何処までいくんだろう。 楽しみです。
確かに、研究室にはPCIカードより前のISAバスタイプ、CバスのカードがXYプロッターの横に何枚も転がっていました。
それらはいずれもCONTEC製だったので、恐らくPCI世代までは全てCONTECで統一していたのでしょう。
PCI Express/USB世代になると Interfaceも使い始めて来たようで、fork….というよりは
どこかからコピーされ改造されたInterface用DigitShowBasicが出てくるようになります。
APIが似ているので移植も容易だったのでしょう。
そして、現在はx86環境での
・CONTEC PCI Expressの場合はADボード,AD用バッファアンプ、DAボード
・CONTEC USBの場合はAD/DA混在ボード一発
・Interface PCI Expressの場合はADボード、DAボード
の三つの構成がメインになってきています。
別に、他のボードをポーティングしてもらっても構わんのだが。
CONTECの場合のファイル名で説明しますが
プログラムを使用する際はDigitShowBasicのなかのCAIO.Hと、CAIO.LIBが
必ず、絶対に、間違いなく、確実に、
インストールされたドライバおよび使用するCAIO.DLLと同じバージョンでプログラムを動かして下さい。
これを怠って「exeだけ他のパソコンからもってくればいいや」をやると、全てがおかしくなります。
AD入力は謎の値を出し、DA出力は暴れ、プログラムは突然終了します。
私はそれで、夜の本郷で、学生と一緒に、ベロフラム型試験機を破壊しかけたことがあります。
やめましょうよ、もう。ロードセルがもったいない。
ひずみアンプや、ディストリビュータ(4-20mA->電圧変換)は正直なんでもいいと思います。
正直、センサーからアンプや、アンプからADボードまでの、電圧伝送区間の配線が大事です。
逆に言えば、差圧計などの4-20mA区間は電流区間なのでわりと何でも良いです。
ボードへの接続、ボードからの出力に関しては、極力全てBNC端子/BNCケーブルで行うべきだと思います。
ノイズカットはシールド線、謎のノイズは伝送経路、ACからの電源ノイズが主犯です。
剥き出し端子台にバラ線接続では、50/60喜んで、ようこそ電磁波いらっしゃい。
多くの計測機器がそうであるように、シールド線を、なんなら規格化されたBNCケーブルが手軽で楽です。
BNC最高、BNC最高。あなたもBNC最高と叫びなさい。
見落としがちなのがアースです。
全ての装置を確認しなさい、一点アースをしなさい、100V用の太いアース線を使いなさい、
アース経路線長を同じにしなさい、確実に壁面アースにしなさい。
ノイズを垂れ流す装置にはノイズカットフィルタを付けて、アースにノイズを流しなさい。
それでも乗るなら、AC100Vの極性まで気にしなさい。
そうすれば場合によりますが1~2ビット精度を稼げます。
アースを繋いでも悪化する機器もあります。こればっかりは試行錯誤するしか無い。
仮想アースは最後の手段です。それでも駄目なら電柱から変えましょう。
そんな感じです。少しでも維持管理の参考になれば良いなと思ってます。
こっから先はハードウェア部分の環境構築についてのメモになります。
まずはパソコン編からです。最低限のPCの知識がある人向けに書いています。
CPU/RAMなどの要求スペックは、Githubを参照して下さい。
アナログ入力(AI)とアナログ出力(AO)について、比較的に最低限構成、CONTECの場合、で説明をします。必要なものは以下の通りです。
| 種別 | 型番 | 個数 | 特記 |
| AI | AIO-161601E3-PE | 1 | 必須 |
| AO | AO-1608L-LPE | 1 | オプション、アナログ電圧制御(※1)に必要 |
| AI バッファ | ATBA-16E | 1 | 必須 |
| AI 端子台 | ATP-16E | 1 | オプション、強く推奨 |
| AI 拡張 | ATCH-16A | 1 | オプション |
(※1 たとえばEPなど、電空変換によるセル圧、背圧などの圧力制御に必要)
ココで、ボードのサイズとPCI Expressの接続について考えます。



AIボード(左)、AI拡張ボード(中)、AOボード(右)です。
AIボード(左)、AOボード(右)はPCI Express x1-1slotのボード。AI拡張ボードはコネクタ接続で、マザーボードへの接続は無いものの、1slotのボードです。
AI拡張ボードはトリッキーなことをしない限り、AIボードとの接続ケーブルの制約上、AIボードの右隣(画像上だと上)に配置する必要があります。
将来的にチャンネルを増やす可能性がゼロであれば問題ありませんが、増やす可能性があるならば、隣を開けておきましょう。
詳しくは、CONTECの製品ページよりデータシートを参照して下さい。

ここまでで、必要なのはPCIe x1 2スロット、(追加するなら)空きスロット1と分かりました。
まず大前提として、PCI Expressはx1でよければ x4 x8 x16に刺しても問題ありません。詳しくは外部サイトで確認して下さい。
考えうる最悪寄りの選定ミスの例として、私が学生時代から愛してやまないASRock製品で例を示します。
売れ筋商品として、ATXサイズもいらないので、適当にmATXの「B550M Pro4」(下、左画像)を選びました。
CPU性能は殆どいらない(Passmark5000で十分な)ので「Ryzen 3 4100」を選択しました。
そしたら、CPUにグラフィック機能(GPU)が乗っていなかったので、別途GPUを載せました。
安いところで「RX7600」を載せましたが、PCI Express x16-2slotだった為、最上段を占有しました。
その結果、slotが2個しか余りませんでした(下、右画像)、、、という結果になったりします。。


もし、一番上のスロットにGPUがなければ、このようにPCI express が必要無いAI拡張ボードを、
同じくPCI Expressスロット(上から2段目)が無効化されたラインに設置できます。
ですが、これは一番上のスロットが汎用スロットの(GPU専用ではない)場合です。
詳しくは、BTOのパソコンメーカに確認したほうが良いでしょう。

それこそ最初からATXサイズを選んでおけば安心なのは言うまでもありません。
これまたASRockの「B760 Pro RS/D4」の場合ですが、上から順に「空 / x16 / 空 / x1 / x16 / 空 / x16」となっています。
これなら、何をどう配置しても、最悪GPUが2Slot占有したとしてもなんとかなります。

いずれのスロットも機能制限や、ボードの物理的干渉などの可能性が考えられるので、BTOメーカに相談するのが好ましいでしょう。
耐久性を考えたら、産業用PCを卸しているメーカに相談するのもアリでしょう。
CPUとマザーボード、更にはメモリの相性問題、BIOSのバージョンとCPUの対応など、最近はホント複雑です。
ここにきてCrucialの撤退、、、GPUもワークステーション向けやHPC向けの拡充、、、
全てのリソースはAIに、過度に、集中していっていますね。便利だから良いんだけどね。
一般ユーザーはスマホかノートパソコン使え、、、ってコト。なんでしょうね。
ここからはもう一歩、アナログ入力に踏み込みます。
まず、Googleで「同時サンプリング」と「逐次サンプリング」の違い、について調べて下さい。
軽く、雰囲気を掴んだうえで、続きに行きます。
同時サンプリングは「アナログ16chあったら、16ch 高精度なADCが必要」ということです。高いんです。
逐次サンプリングは「アナログ16chあったら、1chの高精度なADCを切り替えて使う」ということです。安いんです。
チャンネル間の誤差が許容出来ない、高速な弾性波計測などには逐次サンプリングは適さないでしょう。
DigitShowBasicは200ms(5Hz)程度のサンプリングのため、「逐次サンプリング型ボードで十分」だと判断して、普段はそのタイプのボードを使用しています。
ですが、切り替えて使う、以上、直前のチャンネルのデータ、の影響を避けて通れません。これをクロストークといいます。
歪アンプなどからの値を電圧で入力する場合、送信元の出力性能が求められます。
出力先がどうであれ俺の思った通りの電圧にする力、すなわちアンプの性能です。
これが、オーディオの分野では駆動力や音質と呼ばれるのでしょう。
経路が長かったり、配線が弱かったりすると、アンプは能力は活かしきれません。
野球で言えば、外野からホームへの送球は、普通なら内野での中継が必要です。この中継が前述のAIバッファにあたります。
それでもなお、内野からホームへの送球でさえ、ブレることがあります。
ならば「ほぼ全区間同軸ケーブルBNCにしてしまえ」、良いと思います。
ですが、それが出来ない装置もあったのでしょう。装置の縛りか、接続を下手に買えられない事情があったか。
東大でどのような経緯があったか分かりませんが、最終的に、チャンネル数を間引くようになっていました。
0,1,2,3,4,5,6,7 というチャンネルが合った場合、奇数をグランドと短絡して、0,2,4,6 の偶数番のみ使用します。
こうすることで、もしチャンネル間引きをしていない場合
「0chが10V, 1chが-10V」だった場合、1chのAD変換時に20Vの変化が、
(AiScanClock)時間内に間に合わない可能性が出てきます。
イチローみたいな肩(性能のアンプ)なら余裕で間に合うかもしれません。
ですが、奇数をグランドと短絡している場合、
1chで強力に0Vに引き戻されます(放電されると言ってもいい)。
2chの-10Vを読む際には10Vの変化で良いわけです。
さておき、これなら多少、計測環境が悪くとも確実に読めそう(電圧変化が間に合いそう)ですね。
同時サンプリング型のADCを導入してしまえば、全て解消される可能性もあります。
が、同時サンプリングADCは比較的高い傾向にあります。それでも導入する意義やメリットは高いと思います。
注意点として、GithubのDigitShowBasicコードは逐次変換+奇数間引き処理なので、そこは変更する必要があります。
AD/DAボードメーカと相談したり、接続する機器の性能やカタログ、予算を加味して選定したほうが良いですね。
更にもう一歩進みましょう。ついてこれていますか?アナログ出力に進みます。
計測は基本的に電圧出力で制御・計測します。これは使いやすいからです。
工場などでは電流出力で制御・計測します。これはノイズ耐性が強いからです。
いずれの場合も注意しなければならないことがあります。デバイスの特性です。
何Vまで流せるか、何mAまで流せるか、何pFまで駆動できるか、何Hzまで追従して出力できるか、、、などです。
特に出力側デバイスは高価な場合が多いのと、誤った使い方をすると壊れたり、発熱したりする可能性があります。
加えて、カタログ通りの性能を活かしきれません。
例として、圧力制御に用いる藤倉コンポジットの「RT・E/P-8-2」を使用して、AOボードは先述と同じ場合で考えてみます。



左から、EP外観、EP仕様、AOボード仕様です。
10[V]出力がMaxとのことですが、インピーダンスは805[Ω]とのこと。つまりフルロードで12[mA]程度電流が流れるということですね。
AOボードについては、±10[V]出力なのでココはOK、ですが3[mA]出力と書いてあります。これはいけない。逆算すると2.5[V]なら3.1[mA]です。
実際の所、この構成でも、フィードバック制御であれば2.5[V]を越えて制御が出来てしまっています。どこまで安定するかは未知数です。
このような電力を喰うデバイスを使用する場合は、アンプを用意しましょう。20mAくらい流せる物があるといいですね。
どんなバッファを使うかは構成次第です。電磁石・ソレノイドコイルの一部製品は瞬間500[mA]くらい要求したりします。
お金がなくて、電子工作が得意なら、適当な電源とオペアンプだけで20mAくらいまでのバッファは作れはします。
ドキュメントが日本語な、新日本無線(今は日清紡グループですが)のオペアンプを使いましょう。電子工作をしましょう。
長々とココまで読んだ方は、いよいよDigitShowBasicで一台試験機を組む予定の方かと思います。
残念ながら時間がなく、DigitShowBasicのソースコードはそこまできれいに整備できていません。
現状のコードだって、どの環境でもまともに動く保証はありません。うちの装置は全てが全て、構成が違うので。
Contecに会員登録して、APIリファレンスマニュアルを読み、C++を勉強しながら頑張ってみて下さい。
コードリファクタリングや、立ち上げの際に困ったことをまとめたドキュメントのプルリクエスト、お待ちしています。
アナログ入力やハードウェアに関しても、電気電子と情報の知識を総動員して組み上げなければ、正しい計測は出来ません。
このページの知識を知って全てが解決するものではないので、こちらも問題に当たるたびに学ぶしか無いと思います。
電子工作を始めましょう、トランジスタを触りましょう、Arduinoを使ってみましょう。
そうすれば少しづつ見える世界が変わってきます。
以上、地盤研なのに電気電子情報の仕事ばかりしている技官の長い長い記事でした。
すばらしすぎる。さすが久野さん
githubしか見てなくて解説記事出てたの気づきませんでした。
チャンネル間引きの解説詳しくてありがたい。