07-12-2022 09:31 PM
分光器のリニアイメージセンサとのインターフェースはPIC(事情により非開示)なのですが、”+”、”-”を送ると受光時間を増減することができます。非公式情報では電源投入時の受光時間は1000msecで10msec単位で増減するようです。分光器としては受光時間の数値が不確かでもあまり気に留めていないようです。
受信用のキューとは別に送信用のキューを追加しました。
少し込み入ってきましたが、詳しく検討する場合は「リニアイメージセンサを使った分光器(まつLab) 」も参照してください。
「SpectrometerMP04.vi」を添付しました。
<<<<<<<<<<<<<<<<<< 余談 >>>>>>>>>>>>>>>>.
これ以降は余談ですので、興味のある方だけお読みください。
シリアルで受け取っていると、正しく受信できているかぎりにおいてどんなタイミングでデータが送られてきているのかあまり気にしませんが、今回はブラックボックスなので、データの送られ方を見てみました。
受信用のキューは文字列でしたが、文字列と数値のクラスターに変更して、受信した時点の高精度相対秒も同時に記録しました。
横軸がデータカウントで、縦軸は秒です。予想に反して間欠的に送られて来ていました。受光時間を200msec相当変更すると縦軸の最大値が100msec変化したので、10msec単位の増減ではなく5msec単位かもしれません。デフォルトの受光時間も1.7秒ぐらいなのかもしれません。
バイナリのシリアルで受け取れるギリギリぐらいのデータ間隔でリニアイメージセンサのデータが送られてくれば、実験装置のメカの位置決めなどに用途がありそうですがいかがでしょうか?
07-13-2022 03:48 AM
面白い!約800個毎に250ms程度の息継ぎをしてるのが特徴的というか、解せないところです。
位置決め用途なら1秒間に数回は更新されてほしいです。
1ライン単位でデータを送ってくれれば受信側は楽ですが、受光時間がどこまで短くできるか・・・
07-13-2022 04:57 AM
コメントありがとうございます。
ブラックボックスなので事情はわからないのですが、8μmピッチで位置データが取れるので、1秒間に数回更新できれば値段と使われる状況次第で使い道は出てくるかもしれませんね。
もっと早くなってしまうと今回みたいなシリアルで受けて気軽には使えなくなるでしょうから、私としてはちょうど良い加減を期待したいところです。
分光器としては今の周期でも使いどころがあるのではないかなと思います。
07-13-2022 08:06 AM
ラインセンサは12ビットで3648ピクセルなので、U16配列で扱えば7296バイト。
115200bpsだと約11520バイト/秒だから、1ライン630msくらいで送信できる。
まつLabさんの資料によると測定時間は150±50msなので、トータル800msくらいかな。
4秒間に5回更新・・・調整用に使えなくはないですね。
07-13-2022 08:38 AM
数値文字列で送ってきている「約800個毎に250ms程度の息継ぎをしてる」グラフを見ていたので、息継ぎせずにバイナリで送ればもっと速く送れそうな気がしていましたけど、「1ライン630ms」程度ですね。
07-13-2022 07:27 PM
USB経由の仮想COMポートだからもっとボーレート上げられる気がします。
FTDIのダイレクトドライバ使えばUSBのレートで受信できるので、測定に150ms前後かけても1秒間に5回くらい送れるポテンシャルはありそうです。
07-14-2022 04:39 PM
データの送られ方を見たかったのですが、見ていたのは「データの受け取り方」でした。申し訳ありません。
受信側はまだ余裕という情報ですね。
「Bytes at Serial Port」も表示してみました。
バッファーサイズを小さくすれば変化があるかな、と変えてみたのですが変化はありませんでした。
Note Not all serial drivers support user-defined buffer sizes so some implementations of VISA might not be able to perform this operation. If an application requires a specific buffer size for performance reasons and the VISA implementation cannot guarantee that size, use some form of handshaking to prevent overflow conditions. |
07-14-2022 07:38 PM
Bytes at Serial Portが読み込み終わると4000に上がるのが不思議ですね。
仮想COMポートはドライバの作りによってピュアなRS-232Cとは多少違いがあり、バッファサイスは効かないのかもしれません。
VISAのLF終端を無効にして、1回でBytes at Serial Port分を全部読み込んで、LabVIEW側で1ラインを切り出すようにしてみると何かわかるかもしれません。
07-17-2022 09:26 PM
目先を変えてArduino UNOから5桁の固定長の ダミーデータを送ってみました。
Arduinoのスケッチ
boolean led_state= true;
char dataFix[6];
void setup() {
//Serial.begin(115200);
Serial.begin(230400);
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, led_state);
for(int i=0;i<3648;i++){
sprintf(dataFix,"%05d",i+1000);
Serial.println(dataFix);
//delayMicroseconds(5);
}
Serial.println(0);
led_state = (!led_state);
}
115200bpsでの受信状態
Byte at Serial Portの縦軸が間違っていますが、バイト値です。30バイトぐらいで上下しています。時間は2.1秒かかっています。
Arduino UNOから230400bpsで送信したときの受信状態
こちらはByte at Serial Portの値が時々60バイトぐらいになります。受信時間は1.1秒ぐらいでした。
分光器のソフトの場合はまとめてバッファに送るような処理なのでしょうか。Arduino IDEではバッファがドンと増えるような送り方にはなりませんでした。
07-18-2022 12:49 AM
分光器のPICのプログラムが息継ぎするようなシーケンスになっているのかもしれませんね。