File: /~heha/hs/UNI-T/

This program DMM.EXE allows read-out and display of data
out of (mostly) (Chinese) Uni-Trend multimeters.
For further processing of data, this program incorporates a DDE interface.

This program has a Plugin interface (*.dmm files) for user-specific multimeters.
This interface is currently undocumented because it's not stable.
If desired, refer available source code to write your own plugin.

Installation (Vista/2008/7/8: Elevated rights may be required depending on target directory):
* Windows 2000/XP/2003/Vista/2008/7 (32 bit):
  - Copy dmm.exe, he2325u.dll and *.dmm into a random directory, e.g.
    to "C:\Program Files\DMM"

* Windows 95/98/Me:
  - Copy Win98Me\dmm.exe, he2325u.dll and *.dmm into a random directory, e.g.
    to "C:\Program Files\DMM"

* Windows XP/2003/Vista/2008/7/8 (64 bit):
  - Copy x64\Win98Me\dmm.exe, x64\he2325u.dll and x64\*.dmm into a random directory, e.g.
    to "C:\Program Files\DMM"
    Note that the 64-bit version is not always up-to-date as the 32-bit version.
    The reason is that I don't like Visual Studio 2008.

- optional: Install unit-a2.ttf to Fonts folder, e.g. using
  Control Panel, Fonts, File, Install new font
  (This is for seven-segment charaters, if you like this)

- Create a shell link in desktop area, start menu and/or quick launch area

- Vista/2008/7/8: Every time you connect a new USB multimeter, or change
  the used USB ports, HE2325U.dll tries to assign human-readable port numbers
  to each new (not-yet-assigned) HID device and needs elevated rights.
  In such a case, the annoying UAC dialog pops up automatically (since 110209).
  Problems may arise due to space character in "Program Files" directory
  and Rundll32 invocation. That's not tested.
  If so, try do move at least HE2325U.dll to a directory without spaces.
  For normal operation, regular (non-elevated) rights are sufficient.
  TODO: Other solution!
  If you are in doubt, start DMM.EXE with elevated rights.
  In this case, another settings are in effect,
  as registry access for configuration data (HKLM) is no more redirected.

DMM.EXE is a DDE server serving following data:
Application name: DMM
Topic name: <multimeter>@<interface>, see window title text
Item names:	value0	measured value, including SI prefix, e.g. 1.5E-7 for 150 nF
		unit0	measured unit, SI prefix stripped # *
		trace0	scope data as numerical array
		min0	minimum possible value in current range,
			mostly 0 except for DC and temperature measurements #
		max0	maximum possible value in current range #
		feature	additional displays #
		ea0	absolute error ## (always positive, to be implemented)
		er0	relative error ## (always positive, to be implemented)
		ec0	current error (always positive, to be implemented)
		range0	DdeAdvise item when range has been changed # (to be implemented)
	More indices für secondary, tertiary etc. readouts.
	The appended zero can be omitted for the first or only value.
	Indices may separated from name string with one non-alphanumeric character,
	e.g. "value[1]", "value 1", "value?1" etc.
	Name strings may be abbrevated,
	e.g. "V" instead of "value0", "mi1" in place of "min1" etc.
	Case sensitivity is off (required by DDE).
	Items can be concatenated to get multiple values by one DDE request
	(To be implemented).
	# This item changes only when rangeX changes too.
	## This item generally changes on range changes only but may change for some
	   temperature areas according to device specification.
	   If a transition occurs, a range change event will be raised too.
	* If the current CF_ANSI code page supports the degree character (°),
	  temperature is reported as °C or °F, otherwise, as degC or degF.
	  For CF_UNICODE, always °C / °F is reported, to distinguish from Farad.
	  Temperature differences (in °C) and absolute temperatures are reported
	  in K (Kelvin).

Clipboard formats (available for all items):

Supported transactions:

Application example (Excel):
	Set cell value to "=DMM|'ut61e@com2'!v".
	This shows the measurement value.
	You can place the unit into the next cell: "=DMM|'ut61e@com2'!u".

Command-Line Interface:
DMM.EXE has a command-line option to select the multimeter and the interface.
Simply append <multimeter>@<interface> to the executable file name.
You may even omit <multimeter> or @<interface> for a partial search.
The program picks up further configurations, like window position, size and
appearance, out of it's configuration memory (i.e. registry).
If no entry is found, the program uses default values.

If no command-line option is given, DMM.EXE uses the next unused configuration
ever saved inside the registry.
So you can start multiple instances of DMM.EXE without command-line parameter
distinction, and all copies would use different multimeters (and window positions).

Known bugs:
* Due to rearranging of code, some multimeters may be dead.
  I have not all multimeters available for testing.
  If you detect such a problem, please inform me.
  But don't forget to activate data transmission by pressing the
  appropriate multimeter button!

heha, 110209

+131009	Added UT60F
*131009	Log files have now an ISO8601 time string, with local time
	and positive time zone for eastern hemisphere
-131120	Capture contiguously sent (DMM-stored) data of UT61D
+131127	Save DMM-stored data with correct time scale
+1408xx	Added demo multimeter generating low-frequency sine wave with noise
+141027	Added Fluke 8808A support (to be tested)
Detected encoding: ANSI (CP1252)4
Wrong umlauts? - Assume file is ANSI (CP1252) encoded