Recently I bought a couple of Victor 86C multimeters, they seem like nice multimeters and have the huge feature that you can plug them into a computer via a rather nifty USB cable. I run linux so I was hoping that someone had written some kind of driver for them, but it turns out they haven't so I have gone about reverse engineering the 'protocol' myself
It turns out that it is a slightly odd protocol, I think it is essentially in some sense dumping its video state down the USB cable. Which means that this will only work for the 86C, anything with a different LCD screen won't work.
The cable (which is actually the USB device that reads a flashing IR LED in the case) appears as an input device under linux with an id something like:
/dev/input/by-id/usb-Shenzhen_VICTOR_HI-_TECH_CO._LTD._VICTOR_Multimeter-event-if00
If you look at the data coming out of this it seems to be coming in lines of 24 bytes each, not thinking in hex here they are in decimal
117 193 178 77 0 0 0 0 88 25 14 0 0 0 0 0 3 0 51 0 200 255 255 255
The first underlined number seems to be a reading number, you get groups of lines with the same value.
The second and third underlined number seems to be where the data is.
The second underlined number seems to be a variable name, and the third seems to be its value.
The system seems to be that the multimeter occasionally sends all the values, but mostly it only sends changes to all the variables.
These variables and their values:
Variable #46 - last digit
$digit1=array(
129=>0,
17=>9,
145=>8,
97=>7,
225=>6,
33=>5,
161=>4,
65=>3,
193=>2,
1=>1,
88=>'?',
113=>' ',
46=>' ',
);
Variable #49 - second lowest digit
$digit2=array(
239=>1,
175=>2,
47=>3,
143=>4,
15=>5,
207=>6,
79=>7,
127=>8,
255=>9,
191=>'L',
111=>0,
);
variable #43 - second highest digit
$digit3=array(
113=>0,
241=>1,
177=>2,
49=>3,
145=>4,
17=>5,
209=>6,
43=>6,
81=>7,
129=>8,
1=>9,
43=>' ',
);
variable #50 highest digit
$digit4=array(
119=>0,
247=>1,
183=>2,
55=>3,
50=>4, #???
103=>' ',
);
variable #45 where the decimal point is
$decimal=array(
132=>1,
164=>0.1,
196=>0.01,
4=>0.001,
129=>0.001,
);
variable #52 the unit multiplier k,M etc
$unitmult=array(
107=>0.001,
105=>1,
106=>0.000001,
109=>1000,
113=>1000000,
);
variable #48 the unit
$unit=array(
145=>'V',
106=>'V',
121=>'Hz',
105=>'%',
169=>'celcius',
233=>'farenheit',
107=>'A',
238=>'Ohm',
109=>'Ohm',
);
variable #40 AC/DC
$type=array(
246=>'DC',
254=>'AC',
114=>'DC MAX/MIN',
122=>'AC MAX/MIN',
234=>'Continuity',
106=>'Diode Test',
147=>' ',
238=>' ', # resistance
);
variable #42 left hand stuff
$maxmin=array(
104=>'MAX',
108=>'MIN',
100=>'AUTO',
);
variable #41 sign of value
$sign=array(
35=>-1,
67=>1,
);
Attached is a very badly written php script which takes the device path of your multimeter and should output what it is reading. make sure the RS232 button is pressed otherwise it won't output anything useful. It has to be run as root normally.
I will try and write something in a more serious language that does something more useful with the data soon.
| Attachment | Size |
|---|---|
| victor86C.php_.txt | 2.19 KB |
| victor86C-csv.php_.txt | 2.24 KB |