Tektronix Binary File Loader

The following function loads a binary data file exported from a Tektronix digital oscilloscope. Not extensively tested, and by no means fully supportive of every feature their binary format can support, but for a basic single channel file, I think this will work for any model. The loaded wave will be named after the file name, with the extension stripped off. If an empty string is passed for filenamestr, and open file dialog will be called.

function loadTEKbinary(filenamestr)
    string filenamestr
    variable fileref
    if (strlen(filenamestr))
        Open  /R /T=".isf" fileref as filenamestr
        Open  /R /T=".isf" fileref
    if (!(strlen(S_filename)))
        print "Cancelled"
        return 0
//  string shortname = S_filename[StrSearchBack(S_filename, ":") + 1, strlen(S_filename) - 5]
    string shortname = S_filename[strsearch(S_filename, ":",Inf,1) + 1, strlen(S_filename) - 5]
    string preamble,curvestring
    FreadLine /N=8 fileref, preamble
    if (!stringmatch(preamble, ":WFMPRE:" ))
        print "Missing preamble"
    FreadLine /T=":" fileref, preamble
//  print preamble
//  The Tek form preamble can be used as a keyword string list with list separator ";" and keyseparator " "
    variable delx,ptoff,xzero,ymult,yoff,yzero,sizeitemsnum,numbytes,byteorder,bytetype
    variable numitems
    delx = NumberByKey("XINCR", preamble," ",";")
    ptoff = NumberByKey("PT_OFF", preamble," ",";")
    xzero = NumberByKey("XZERO", preamble," ",";")
    ymult = NumberByKey("YMULT", preamble," ",";")
    yoff = NumberByKey("YOFF", preamble," ",";")
    yzero = NumberByKey("YZERO", preamble," ",";")
    FreadLine /N=7 fileref, curvestring
    if (!stringmatch(curvestring, "CURVE #" ))
        print "Missing Binary Start String, 'CURVE #'"
        return 0
    FreadLine /N = 1 fileref, curvestring
    sizeitemsnum = str2num(curvestring)
    FreadLine /N = (sizeitemsnum) fileref, curvestring
    numbytes = str2num(curvestring)
    strswitch(StringByKey("BYT_OR", preamble," ",";")) 
        case "MSB":     // execute if case matches expression
            byteorder = 2
            break                       // exit from switch
        case "LSB":     // execute if case matches expression
            byteorder = 3
    switch(NumberByKey("BYT_NR", preamble," ",";"))
        case 1:     // execute if case matches expression
            bytetype = 1
            numitems = numbytes
//          make /o /b /n = (numbytes) intwave
            break                       // exit from switch
        case 2:     // execute if case matches expression
            bytetype = 2
            numitems = numbytes / 2
//          make /o /i /n = (numbytes / 2) intwave
    make /o /d /n = (numitems) $shortname
    wave thewave = $shortname
    if (stringmatch(StringByKey("BN_FMT", preamble," ",";"),"RI"))
        Fbinread /B=(byteorder) /F=(bytetype) fileref, thewave
        Fbinread /B=(byteorder) /F=(bytetype) /U fileref, thewave
    thewave = (thewave - yoff) * ymult + yzero
    SetScale d, -10, 10, StringByKey("YUNIT",preamble," ",";") thewave
    SetScale /P x, (xzero - ptoff *delx), delx, StringByKey("XUNIT",preamble," ",";") thewave
//  SetScale /P x, ptoff, delx, "" thewave
    Note /K thewave, StringByKey("WFID",preamble," ",";")
    close fileref
    return 1




Igor Pro 8

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More