METEX製 デジタルマルチメーター M-6000M をコンピューターに接続して、データをダウンロードさせる場合、どうしても認識できない場合がある。
認識可能・不可能なソフトウエア
・Ts Digital Multi Meter Viewer (Windows版) → ◎ 認識可
・ふるた技工所 m-6000mtxt (Linux版) → △ 認識不可・ダウンロード可
・るいもの戯れ言 Rubyによる読み込みプログラム (Linux版) → × 認識不可・ダウンロード不可
USB-RS232C 変換ケーブルは、何種類かをそれぞれ試した
認識可能な場合のシリアル通信
オシロスコープで、Ts Digital Multi Meter Viewer の通信開始時(デバイスの認識部分)を観察してみた。
CTS/RTSを3000ミリ秒 Hi、50ミリ秒 Lo、1500ミリ秒 Hi、50ミリ秒 Lo の繰り返し。CTS/RTSがHiになった直後に、瞬間的にTXがHiとなる。
ソフトウエアで、信号をエミュレートしてみた
C言語で、似たような信号を出すプログラムを作成してみたが、M-6000Mはデータ送信モードに切り替わらなかった。
作成したC言語のソフトウエアは次のようなもの
#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #include <termios.h> #include <sys/io.h> #include <sys/ioctl.h> #include <string.h> int main(int argc, char **argv, char **env){ printf("Serial Port : Send Break Test\n"); struct termios old_termios, new_termios; int fd; // シリアルポートを開く fd = open( "/dev/ttyUSB0", O_RDWR|O_NOCTTY ); if(fd < 0){ printf("Port open error\n"); return(1); } // シリアルポートの動作設定 tcgetattr(fd, &old_termios); // 終了前に書き戻すため現在値を保存 new_termios = old_termios; new_termios.c_cflag &= ~CRTSCTS; new_termios.c_cflag |= CLOCAL; new_termios.c_lflag |= ICANON; tcsetattr(fd, TCSANOW, &new_termios); // 瞬間的にTXをHiにする処理 char buf[16]; int i; for(i=0; i<16; i++){ buf[i] = (char)0x00; // 0が電気信号Hiと対応 } for(i=0; i<2; i++){ write(fd, buf, 16); } // CTS/RTSをHiにする tcsendbreak(fd, 3000); // シリアルポートの動作設定を元に戻す tcsetattr(fd, TCSANOW, &old_termios); // シリアルポートを閉じる close(fd); usleep(100000); // 100ミリ秒 信号中断 fd = open( "/dev/ttyUSB0", O_RDWR|O_NOCTTY ); tcsetattr(fd, TCSANOW, &new_termios); for(i=0; i<2; i++){ write(fd, buf, 16); } tcsendbreak(fd, 1500); tcsetattr(fd, TCSANOW, &old_termios); close(fd); return(0); }
考察
そもそも、±13V の信号であるRS-232CをTTLレベルで無理やりエミュレートしている「USB-RS232Cアダプタ」を用いること自体に無理があるのだろう。
26Vの電位差の起電力を使って赤外LEDを光らせていたのを、5Vでそれなりに光れと言われても… ですよね。
ただ、最近売る製品とすれば、USBシリアルアダプタを使うことも前提にデバイスを作って欲しい。
テスター背面の受光部に赤外線を浴びせればよい
なんでも研究所ブログ館 『M-6000M通信で4989(シクハック)』によれば、M-6000M 背面の赤外線受光部に赤外線を当ててやれば送信モードのON/OFFが切り替わるようだ。
家電リモコンのテスト回路を使って、連続光をM-6000M背面に当てると… 簡単に送信モードが切り替わった。この状態で、コンピュータと接続してシリアルポート経由でダウンロードすることができる。
赤外線を発生させるだけのための、ライトを作成する。100円均一で売っている、ミニライトを改造した。
改造した100円均一ライト
3.0Vのボタン電池2個でオーバーロードされていた白色LEDを除去し、赤外LED (VF = 1.2〜1.4V, IF = 100mA )に換装する。
後部電池を除去し、抵抗15Ωを取り付ける。 抵抗値は、100mAの制限値をほんの少しオーバーロードする値となる、直近の抵抗を用いた
R = ( 3.0 - 1.3 ) / 0.100 = 17 Ω → 15 Ω
このLEDライトを使って「データ転送モード」に切り替えた後、シリアル接続アダプターでM-6000Mとコンピュータを接続し、受信プログラムを起動する
$ ./m-6000mtxt /dev/ttyUSB0 1408871343.801176016 DC 0e-3 V 1408871344.701083339 DC 0e-3 V 1408871345.601022092 DC 0e-3 V 1408871346.500832016 DC 0e-3 V 1408871347.400793327 DC 0e-3 V 1408871349.399990479 ## 3.049e+3 Lux 1408871350.300080532 ## 3.6e+1 Lux 1408871351.199890915 ## 8.6e+1 Lux 1408871352.099694788 ## 8.3e+1 Lux 1408871352.999614639 ## 8.1e+1 Lux 1408871353.899445030 ## 8.1e+1 Lux 1408871354.799491709 ## 8.0e+1 Lux
うまい具合に受信しています…
参考資料
・ 出力データのフォーマットは、デジタルマルチメータのシステムモジュール ES51986 のデータシートに全て書かれている。(http://www.cyrustek.com.tw/spec/ES51986.pdf)