東京大学の地盤研で使用されている、三軸試験機制御ソフトウェアのオープンソース版です。
ContecのAD/DAボードで動作させることを前提としています。
ModbusRTUのAD/DAはDigitShowBasicMまで。
このリポジトリのライセンスは GPLv3 となっているため、注意してください。
- Windows 11
x64のみ - Visual Studio 2022 Community版でOK, MFCライブラリ必須
- CONTEC API-AIO(WDM) Ver.9.20 適宜、CAIO.H, CAIO.LIBを置き換えて使用するDLLバージョン一致させれば最新版でも可。
- CPU: x64 Intel/AMD問わず
Passmark性能(マルチスレッド) 最低5000 推奨8000以上 - RAM: 最低4GB 推奨8GB以上
他に動かすアプリケーション次第。MS Officeは重い。 - GPU: 依存なし、iGPU/dGPU/APU いずれも可
- 液晶: 最低XGA 推奨FHD以上
縦長画面だと表示が見切れると思います。 - 記憶媒体: 最低HDD 推奨SSD
容量はビルドPCと動作PCが同じなら最低128GB 推奨256GB
- 本ソフトウェアの動作について、一切の保証を行いません。
- 本ソフトウェアの使用により発生したいかなる損害についても、一切の責任を負いません。
- 本ソフトウェアを使用する場合は、自己責任で行ってください。
- 本ソフトウェアの動作または初期設定についてのサポートは行いません。
- 本ソフトウェアの改変、再配布はGPLv3の条件に従って行ってください。
一部の大学・企業・研究所では秘伝のタレ状態のDigitShowBasicをお持ちだと思います。
当時(2010年頃)配布されたDigitShowBasicのソースコードは何もライセンスが決められていませんでした。
そのため、お持ちの古いDigitShowBasicは高確率でライセンスフリーのハズです。
ですが、このリポジトリはGPLv3です。このコードを安易に参考・参照・引用した場合GPLv3に感染するので、
GPLv3とは何か知ったうえで、覚悟して使い始めてください。
ざっくりといえば、改変部分がある場合、ソースコードを公開する必要があります。
デバッガ、コーダ、メンテナ、などなどが複数人、現れた場合のみ、管理・サポートを行おうと思います。
「どう使うの?」「ボードが認識しない」「設定方法を教えてほしい」などの初歩的な質問は避けてください。無視します。
「うちのコードとかなり違う」「そもそも動作しないし落ちる」などの場合は、
AI協業でリファクタリングする前のlegacy版で試してみて下さい。
「初期設定や困った部分を文章化したので載せてほしい」「AIOボードの初期化を自動にしたコードをマージしてほしい」など、
貢献する意思のある、オープンソースの理念に沿った要求は大歓迎します。
「根幹設計から新しいの作りたい」というやる気とコーディング能力のある方は、
ぜひこちら、もしくは東大地盤研までご連絡を。
- 基本的に新機能の追加は行いません。プルリクがあればコードレビューはします。
- AIによるバイブコーディングを禁止しませんが、推奨もしません。
- Pull Requestを送る場合は、簡単で良いので動作確認を行い、変更点を記載してください。
- バグなどのIssueを送る場合は、必ず考えつく限り詳細な、問題を再現するのに必要な情報を提供してください。
- main/developブランチが荒れない事が第一なので、差分が多くなければfeature/****などに独自のforkコードを置いてOKです。
- Git Worktreeに必ずしも従う必要はありません。
- commitは何となく変更点が分かればいいです。コメントの書き方も自由で良いです。日本語でもOKです。
- 無茶な要求が続くようであれば公開をやめ、コードを放棄します。libxml2のように。
従来、クロストーク対策として奇数チャンネルをGNDに落とし、偶数チャンネル16本のみ取得する
32チャンネルモード(Channels/2 間引き)を採用していた。
前段の2段CRアナログフィルタ(100kΩ+0.1µF、10kΩ+1µF)撤去に伴い、本方式を廃止。
AD16-16ボードの16チャンネルすべてを直接取得する。
アナログフィルタの代替として、カスケードMA(移動平均)フィルタを実装。
| 項目 | 値 |
|---|---|
| 構成 | MA(5) × MA(6) カスケード接続(スライディング窓) |
| サンプリングレート | 300 sps/ch(ScanClock = floor(208.33) = 208 µs/ch、16ch) |
| 50Hz 減衰 | 完全零点(∞ dB) ※ MA(6) のノッチ周波数 = 300/6 |
| 60Hz 減衰 | 完全零点(∞ dB) ※ MA(5) のノッチ周波数 = 300/5 |
| −3 dB 周波数 | 約 18 Hz |
| グループ遅延 | (5−1 + 6−1) / (2 × 300) = 15 ms |
| 演算量 | O(1) / サンプル(乗算なし) |
| 実装場所 | DigitShowBasicDoc.cpp AD_INPUT() |
特性の根拠:
矩形窓 MA(N) の周波数応答はsinc型であり、ノッチ(完全零点)は k × Fs/N [Hz] に現れる。
MA(5) では 60, 120, 180…Hz、MA(6) では 50, 100, 150…Hz にノッチが配置される。
カスケード接続により両ノッチが合成され、AC電源ノイズ(50/60 Hz)を完全に除去する。
毎スキャン取得後に即座にフィルタ値が更新されるため、上位アプリは任意のタイミングで
ai_raw[] を参照することで最新のフィルタ済みデータを得られる。
ScanClock の丸め処理:
ScanClock = 1,000,000 / (300 × 16) = 208.33… µs/ch を floorf() で 切り捨て(208 µs) する。
短い方向(高周波側)に丸めることで、ボードの内部クロックが目標周期を超えず初期化エラーを防ぐ。
ADボードのデバイス名とAIO000,DAボードのデバイス名AIO001に固定しています。
デバイスマネージャで確認して、もし異なっている場合は、デバイス名を変更してください。
変更できない場合は、非表示のデバイスを表示するの、該当デバイス名を占有したAIOボードが見つかるはずです。