data loader for MINISOFT '.el1' files


#pragma rtGlobals=1		// Use modern global access method.
#pragma version=1.2

////////////////////////
// Remarks:
// Data loader for .el1 files, which were saved with the program 'MINISOFT V7.8' (http://www.greisinger.de/).
// The binary file structure of the .el1 files has been worked out empirically (because the
// company didn't want to reveal any details of their binary format), so the structure
// may change in fututre versions of the program. Additionally be aware of bugs.
// The data loader reads out the data, the time scaling, and some parameters which are put in the wave note.
////////////////////////

Menu "Load Waves"
	"Load MiniSoft File...", LoadMiniSoftFile()
end

function LoadMiniSoftFile()
	variable refnum
	open/z=2/m="Looking for a MiniSoft file"/r/t=".el1" refnum
	if(V_flag==-1)
		return 0
	endif
	fstatus refnum
	string S_filenameLocal=ReplaceString(".el1",S_filename,"")
	variable V_numDataPnts,V_timeDelta,V_timeStart,V_startComment,V_commentLen
	variable V_startWindowTitle,V_windowTitleLen,V_tmp,V_measureMin,V_measureMax
	variable V_version,V_alarmMin,V_alarmMax,V_alarmDelay
	string S_comment,S_windowTitle,S_identification
	fsetpos refnum,99; fbinread/b=3/f=3 refnum,V_startComment
	V_startComment-=1	// in Igor, first byte is byte #0!!!
	fsetpos refnum,1007; fbinread/b=3/f=5 refnum,V_version
	fsetpos refnum,1111; fbinread/b=3/f=5 refnum,V_measureMin
	fsetpos refnum,1119; fbinread/b=3/f=5 refnum,V_measureMax
	fsetpos refnum,1503; fbinread/b=3/f=5 refnum,V_alarmMin
	fsetpos refnum,1511; fbinread/b=3/f=5 refnum,V_alarmMax
	fsetpos refnum,1519; fbinread/b=3/f=3 refnum,V_alarmDelay
	fsetpos refnum,2003; fbinread/b=3/f=3 refnum,V_numDataPnts
	fsetpos refnum,2011; fbinread/b=3/f=3 refnum,V_timeDelta
	fsetpos refnum,3999; fbinread/b=3/f=5 refnum,V_timeStart
	V_timeStart=V_timeStart*24*60*60-126313200	// Conversion into s, offset subtraction
	make/o/n=(V_numDataPnts) $S_filenameLocal
	wave w=$S_filenameLocal
	fbinread/b=3/f=5 refnum,w	// data start @ 4007
	setscale/p x V_timeStart,V_timeDelta,"dat" w
	S_identification=padstring("",39,0x20)
	fsetpos refnum,2103; fbinread refnum,S_identification
	S_identification=replacestring(num2char(32),S_identification,"")
	fsetpos refnum,V_startComment
	do
		fbinread/f=1 refnum,V_tmp
	while(V_tmp!=4)
	fstatus refnum; V_commentLen=V_filePos-V_startComment-1
	do
		fbinread/f=1 refnum,V_tmp
	while(V_tmp!=0)
	fstatus refnum; V_startWindowTitle=V_filePos
	do
		fbinread/f=1 refnum,V_tmp
	while(V_tmp!=4)
	fstatus refnum; V_windowTitleLen=V_filePos-V_startWindowTitle-1
	S_comment=padstring("",V_commentLen,0x20)
	fsetpos refnum,V_startComment; fbinread refnum,S_comment
	S_windowTitle=padstring("",V_windowTitleLen,0x20)
	fsetpos refnum,V_startWindowTitle; fbinread refnum,S_windowTitle
	S_comment=replacestring(";",S_comment,"")
	S_windowTitle=replacestring(";",S_windowTitle,"")
	S_comment=replacestring(num2char(10),S_comment,"")
	note/nocr w,"identification:"+S_identification+";"
	note/nocr w,"window title:"+S_windowTitle+";"
	note/nocr w,"comment:"+S_comment+";"
	note/nocr w,"version:"+num2str(V_version)+";"
	note/nocr w,"measure minimum:"+num2str(V_measureMin)+";"
	note/nocr w,"measure maximum:"+num2str(V_measureMax)+";"
	note/nocr w,"alarm minimum:"+num2str(V_alarmMin)+";"
	note/nocr w,"alarm maximum:"+num2str(V_alarmMax)+";"
	note/nocr w,"alarm delay/min:"+num2str(V_alarmDelay)+";"
	if(V_version!=74&&V_version!=73)
		DoAlert 0,"MiniLog version of file "+S_filenameLocal+".el1 is not 7.3 or 7.4 (with which this file loader has been tested).\rPlease check the data carefully for reliability!"
	endif
	close refnum
end
FWIW, I have created a development release of a "STANDARDIZED" version of this loader that can be found here. I have not tested it though, since I do not have such files on hand.

--
J. J. Weimer
Chemistry / Chemical & Materials Engineering, UAH

Forum

Support

Gallery

Igor Pro 10

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More