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)



