秋月テスタ METEX M-6000M Linux 接続ソフト - C 言語で書いてみる
既に秋月テスタ METEX M-6000M から読み込んだ測定値を Linux のテキスト・フィルタ・パイプラインで扱えるソフトがある。Ruby で書かれている。「では、自分は C 言語で書いてみるか」と思い作ってみた。C 言語版 M-6000M(ES51986) Linux 接続ソフト(ソースコード) README として公開する。2 条項 BSD ライセンスなので気軽に扱えると思う。C 言語で書くに当たり、次の機能を盛り込むことにした。パイプラインで扱え、ログ・プロット・判定等はパイプラインの後段に任せる。シリアル通信で発生したエラーを検出し、エラーの場合は測定値を無効として扱う。仕様外の文字コードを受信した場合は測定値を無効として扱う。M-6000M は測定結果を 2 度送りする。これを比較し一致すれば 1 回の測定値としてまとめる。通信途絶からの復旧は自動で行う。測定中にシリアル接続を切ったり、レンジ・ノブを OFF にした後レンジを選び直しても、しばらく待てば測定は再開する。出力フォーマットは自由に設定できる。ns 単位の時刻挿入、科学・工学・LCD 表示通りの数値形式を選べる。M-6000M で測定できる物理量に対応する。Lux, dB, Temp を扱える。色々と盛りだくさんになった。ソースコード行数は 3000 行を超えて Ruby 版に見られるスマートさは無い。使用するに当たり一般ユーザーから serial port を使えるようにした方が便利だろう。次の様にして dialout グループにユーザー user_name を入れてシリアルポートのアクセス権限を付与する。# useradd -G dialout user_name2017.4.9 追記 useradd command の仕様が変わったため、usermod を使う様にする。操作ミスや不意な仕様変更に備えて、2 つの端末を接続して、一方を管理権限にして置き、修復できるように備えた方が良いだろう。管理権限を維持している端末は、新しくログインしてみて、sudo su 等の管理権限行使などに異常が無いか確かめるまで維持しておく。# usermod -a -G dialout user_nameソースコードからビルドするには、次の様に make だけする。$ makecc -O2 -Wall -Wuninitialized -Wunused-but-set-parameter -Wunused -Wmissing-parameter-type -Winit-self -Wsequence-point -DVERSION_STRING=\"1.03\" -o m-6000mtxt m-6000mtxt.c -lrtテスタで Ni-MH 電池電圧測定をしている状況で、試しに実行すると次の様になる。$ ./m-6000mtxt /dev/ttyUSB0/dev/ttyUSB0: Timeout./dev/ttyUSB0: Reconfigure port./dev/ttyUSB0: Send break.1376762619.573732445 DC 1.263e+0 V1376762620.473715860 DC 1.264e+0 V1376762621.373827385 DC 1.263e+0 V1376762622.274001973 DC 1.263e+0 V1376762623.173702638 DC 1.264e+0 V1376762624.073686198 DC 1.263e+0 V1376762624.973658443 DC 1.264e+0 V1376762625.872772287 DC 1.263e+0 V1376762626.772722237 DC 1.263e+0 V1376762627.672655250 DC 1.263e+0 V1376762628.572601291 DC 1.263e+0 V^C./m-6000mtxt: Interrupted../m-6000mtxt: Catch signal.Timeout で始まっているのは M-6000M が RS-232 モードで動いていないためだ。何も通信が無い状態が 7.5 秒経過し、Break を送信して測定開始となっている。M-6000M(ES51986) の通信フォーマットは少し特殊だ。HL-340 USB-Serial adapter では全く通信出来なかった。良くある "Prolific PL2303" チップを使用した USB-Serial アダプタで通信できた。え?M-6000M って残り在庫あとわずかなの?