Treatment of mixed fast representation binary files

Hello world

I see several ways to tackle this, but I'm looking for the fastest approach that my data set is very large...

The question:

I have a binary data file with 2D data.

It encodes 200 + differnet "columns" which are repeated over time (sampled)

The data contains data mixed representaitons: a mxiture of I8, U16, I16 etc., U8.

They are all regullarly repeated in a structure of known file (660 bytes per 'line')

I want to gnereate the form of tables 1 d differnet 200 + file each using the correct data retrieved (or a subset of the columns).

I can load the file using the binary file read and I specify U8 as data type. Then I can rediension to the correct 2D array.

I am now stuck on the fastest method to treat the columns of data (bytes 1-2) in the tables in 1 d retrieved digital corect (2 x U8 i16 etc.).

Scanning, byte-by-byte would be very slow.

any suggesitons?

Looks like you have a pretty good handle on that.

Here is how I would do it, assuming I had the back down at U8 when necessary at a later time.

Tags: NI Software

Similar Questions

  • read mixed type C binary file

    Hello

    I have the script program, which can produce the desired data in csv, ASCII and binary file format. Sometimes not all of the useful numbers are printed in the csv file, so I need to read data from the binary file.

    I have atttached what I have so far and also a small csv and the bin file, containing the same data.

    I read the first value of the integer (2), but the second data type is a string, and I can't read this one... I get the error at the end of the file, I guess because the type does not, or I guess I should read the data in a different way?

    According to what I see in the csv file, the structure of the binary file should be the following:

    integer, String, float, and repeated once again all the lines in the file csv...?

    Thanks for the tips!

    PS. : the site does not allow me to upload files, so here they are:

    https://DL.dropboxusercontent.com/u/8148153/read%20Binary%20File.VI

    https://DL.dropboxusercontent.com/u/8148153/init_in_water.csv

    https://DL.dropboxusercontent.com/u/8148153/init_in_water.bin

    Here is a basic example of what I mean. Oh, the whole analysis and the string. The floating-point number at the end is not decode properly. I tested on the first entry in your file binary. If you have access to the code that generates this data, you can see exactly what format the data is. Your data seems to be 22 bytes of length.

  • Adds data to the binary file as concatenated array

    Hello

    I have a problem that can has been discussed several times, but I don't have a clear answer.

    Normally I have devices that produce 2D image tables. I have send them to collection of loop with a queue and then index in the form of a 3D Board and in the end save the binary file.

    It works very well. But I'm starting to struggle with problems of memory, when the number of these images exceeds more than that. 2000.

    So I try to enjoy the fast SSD drive and record images in bulk (eg. 300) in binary file.

    In the diagram attached, where I am simulating the camera with some files before reading. The program works well, but when I try to open the new file in the secondary schema, I see only the first 300 images (in this case).

    I read on the forum, I have to adjust the number of like -1 in reading binary file and then I can read data from the cluster of tables. It is not very good for me, because I need to work with the data with Matlab and I would like to have the same format as before (for example table 3D - 320 x 240 x 4000). Is it possible to add 3D table to the existing as concatenated file?

    I hope it makes sense :-)

    Thank you

    Honza

    • Good to simulate the creation of the Image using a table of random numbers 2D!  Always good to model the real problem (e/s files) without "complicating details" (manipulation of the camera).
    • Good use of the producer/consumer in LT_Save.  Do you know the sentinels?  You only need a single queue, the queue of data, sending to a table of data for the consumer.  When the producer quits (because the stop button is pushed), it places an empty array (you can just right click on the entry for the item and choose "Create Constant").  In the consumer, when you dequeue, test to see if you have an empty array.  If you do, stop the loop of consumption and the output queue (since you know that the producer has already stopped and you have stopped, too).
    • I'm not sure what you're trying to do in the File_Read_3D routine, but I'll tell you 'it's fake  So, let's analyze the situation.  Somehow, your two routines form a producer/consumer 'pair' - LT_Save 'product' a file of tables 3D (for most of 300 pages, unless it's the grand finale of data) and file_read_3D "consume" them and "do something", still somewhat ill-defined.  Yes you pourrait (and perhaps should) merge these two routines in a unique "Simulator".  Here's what I mean:

    This is taken directly from your code.  I replaced the button 'stop' queue with code of Sentinel (which I won't), and added a ' tail ', Sim file, to simulate writing these data in a file (it also use a sentinel).

    Your existing code of producer puts unique 2D arrays in the queue of data.  This routine their fate and "builds" up to 300 of them at a time before 'doing something with them', in your code, writing to a file, here, this simulation by writing to a queue of 3D Sim file.  Let's look at the first 'easy' case, where we get all of the 300 items.  The loop For ends, turning a 3D Board composed of 300 paintings 2D, we simply enqueue in our Sim file, our simulated.  You may notice that there is an empty array? function (which, in this case, is never true, always False) whose value is reversed (to be always true) and connected to a conditional indexation Tunnel Terminal.  The reason for this strange logic will become clear in the next paragraph.

    Now consider what happens when you press the button stop then your left (not shown) producer.  As we use sentries, he places an empty 2D array.  Well, we dequeue it and detect it with the 'Empty table?' feature, which allows us to do three things: stop at the beginning of the loop, stop adding the empty table at the exit Tunnel of indexing using the conditional Terminal (empty array = True, Negate changes to False, then the empty table is not added to the range) , and it also cause all loop to exit.  What happens when get out us the whole loop?  Well, we're done with the queue of data, to set free us.  We know also that we queued last 'good' data in the queue of the Sim queue, so create us a Sentinel (empty 3D table) and queue for the file to-be-developed Sim consumer loop.

    Now, here is where you come from it.  Write this final consumer loop.  Should be pretty simple - you Dequeue, and if you don't have a table empty 3D, you do the following:

    • Your table consists of Images 2D N (up to 300).  In a single loop, extract you each image and do what you want to do with it (view, save to file, etc.).  Note that if you write a sub - VI, called "process an Image" which takes a 2D array and done something with it, you will be "declutter" your code by "in order to hide the details.
    • If you don't have you had an empty array, you simply exit the while loop and release the queue of the Sim file.

    OK, now translate this file.  You're offshore for a good start by writing your file with the size of the table headers, which means that if you read a file into a 3D chart, you will have a 3D Board (as you did in the consumer of the Sim file) and can perform the same treatment as above.  All you have to worry is the Sentinel - how do you know when you have reached the end of the file?  I'm sure you can understand this, if you do not already know...

    Bob Schor

    PS - you should know that the code snippet I posted is not 'properly' born both everything.  I pasted in fact about 6 versions here, as I continued to find errors that I wrote the description of yourself (like forgetting the function 'No' in the conditional terminal).  This illustrates the virtue of written Documentation-"slow you down", did you examine your code, and say you "Oops, I forgot to...» »

  • binary file with line break

    Hello

    Today, I need to import data from a binary file / mixed text. The structure is

    CH1 octet1 Ch1 Ch2 Ch2 octet2 CrLf octet1 octet2

    CH1 octet1 Ch1 Ch2 Ch2 octet2 CrLf octet1 octet2

    CH1 octet1 Ch1 Ch2 Ch2 octet2 CrLf octet1 octet2

    My first attempt was a DataPluginExample3.VBS updated the

    Void ReadStore (File)

    Sun block: SetBlock = File.GetBinaryBlock)

    Dim Channel1: Set channel 1 = Block.Channels.Add ("Low-Timer", eU16)

    Canal2 Dim: Set Canal2 = Block.Channels.Add ("High-Timer", Ue16)

    Dim canal3: Canal3 Set = Block.Channels.Add ("CrLf", Ue16)

    Dim ChannelGroup: Set ChannelGroup = Root.Channelgroups.Add ("ESR_Timing")

    ChannelGroup.Channels.AddDirectAccessChannel (Channel1)

    ChannelGroup.Channels.AddDirectAccessChannel (Channel2)

    ChannelGroup.Channels.AddDirectAccessChannel (Channel3)
    "(Kanal 3 ist nur $OD$ OA CrLf)"

    End Sub

    Unfortunately, each odd sample, the data are corrupted and then become misaligned. And the beginning of data entry does not exactly start a new line.

    So I would use the CrLF to re-sync.

    How can I mix the approach of the ASCII-readline with binary data?

    The following does not work: I try to tell the trainer to use vbNewLine (= CrLf = $0D $0) to separate lines and use the channels of direct access with the data type of U16. But when you use the line break, apparently the import filter also expects the delimiters instead of raw binary values.

    Void ReadStore (File)

    File.Formatter.LineFeeds = vbNewLine

    File.SkipLine () ' Sicherstellen, dass erste wird ignoriert line unvollstandige

    Sun block: SetBlock = File.GetStringBlock()

    Dim Channel1: Set channel 1 = Block.Channels.Add ("Low-Timer", eU16)

    Canal2 Dim: Set Canal2 = Block.Channels.Add ("High-Timer", Ue16)

    ' Dim canal3: canal3 Set = Block.Channels.Add ("CrLf", Ue16)

    Dim ChannelGroup: Set ChannelGroup = Root.Channelgroups.Add ("ESR_Timing")

    ChannelGroup.Channels.AddDirectAccessChannel (Channel1)

    ChannelGroup.Channels.AddDirectAccessChannel (Channel2)

    End Sub

    Thank you for your comments.

    Michael

    Hi Michael,

    I think this use made the rounds.  I had to ignore all partial to the first row of values in order to keep the correspondence of the line of the high and low timer values.  Also note that by default the U16s are read with LittleEndian byte order - you can change that with File.Formatter.ByteOrder = eBigEndian.

    Brad Turpin

    Tiara Product Support Engineer

    National Instruments

  • write a binary file per day / / show the minute samples of 1 in 1

    Well guys, I know how to write a binary file...

    u run your program... Put the name you want the binary and writes...

    but now I have to write a binary file per day... How can I do?

    I do a follow-up on the tension and current... and I want to write the RMS of each day

    2009-09-09, 09/10/2009, 11/09/2009

    can someone help me with this?

    ------------------

    Another issue is that, in this program I monitors 3 voltages and currents 3 all the time... and show it to a customer via TCP/IP

    I want to know... How can I show this... every hour or every minute...

    I have 3600 samples per second... so I need like integrate and show every minute media... or second... or time... not ALL THE TIME... the value changes so fast that I can still see this... put a (ms) waiting work... but I need see the tensions and current than in a time like 1 of 10 in 10 minutes or 1 minute...... How can I do?

    Thank you guys!

    I'll download the vi and sub - vi so that you can better see what I'm talking about!


  • Unable to replicate the frations seconds when you read a timestamp to a binary file

    I use LabVIEW to collect packets of data structured in the following way:

    cluster containing:

    DT - single-precision floating-point number

    timestamp - initial period

    Table 2D-single - data

    Once all the data are collected table of clusters (above) is flattened to a string and written to a text file.

    I try to read binary data in another program under development in c#. I have no problem reading everything execpt the time stamp. It is my understanding that LabVIEW store timestamps as 2 unsigned 8-byte integer. The first integer is the whole number of seconds since January 1, 1904, 12: 00, and the second represents the fractional part of the seconds elapsed. However, when I read this information in and convert the binary into decimal, the whole number of seconds are correct, but the fractional part is not the same as that displayed by LabVIEW.

    Example:

    Hex stored in the binary file that represents the timestamp: 00000000CC48115A23CDE80000000000

    Time displayed in LabVIEW: 8:51:38.139 08/08/2012

    Timestamp converted an Extended floating-point number in labview: 3427275098.139861

    Timestamp binary converted into a decimal number to floating-point in c#: 3427275098.2579973248250806272

    Binary timestamp converted to a DateTime in c#: 8:51:38.257 08/08/2012

    Anyone know why there is a difference? What causes the difference?

    http://www.NI.com/white-paper/7900/en

    The least significant 64 bits should be interpreted as a 64-bit unsigned integer. It represents the number of 2-64 seconds after the whole seconds specified in the most significant 64-bits. Each tick of this integer represents 0.05421010862427522170... attoseconds.
    

    If we multiply the fractional part of the value (2579973248250806272) by 2-64 so I think that you have the correct time stamp in C.

  • Error 116 when a string of binary file reading

    I try to use the 'writing on a binary' and "binary file reading" pair of VI to write a string to a binary file and read it again.  The file is created successfully and a hex editor confirms that the file contains what is expected (a header + chain).  However, when I try to read the string back once again, I received an error 116: "LabVIEW: Unflatten or stream of bytes read operation failed due to corrupted, unexpected or truncated data.»  A quirk I found though, is that if I put "endianness" to "Big-Endian, network order", the error disappears when I use "native, welcome the order" (my original setting) or "little-endian" error occurs.  Did I miss something in the documentation indicating that you can use big endian order when writing of strings, I do something wrong, or is this a bug in Labview?  Because the program that it will be used for is to write large networks, in addition to channels, I would like to be able to stick to the 'native' setting for speed purposes and must not mix "endianness".

    I have attached a VI of example that illustrates this problem.

    I'm using Labview 8.5 on Windows XP SP2.

    Thank you

    Kevin

    Hello

    Please contact National Instruments!  I checked the behavior that you have met and agree that it is a bug, it has been reported to R & D (CAR # 130314) for further investigation.  As you have already understood possible workaround is to use the Big-Endian parameter.  Also, I am enclosing another example that converts the string to a binary array before writing to the file, and then converts to a string according to the playback of the file.  Please let me know if you have any questions after looking at this example though and I'll be happy to help you!  Thank you very much for the comments!

  • What is the best way to read this binary file?

    I wrote a program that acquires data from a card DAQmx and he writes on a binary file (attached file and photo). The data I'm acquisition comes 2.5ms, 8-channel / s for at least 5 seconds. What is the best way to read this binary file, knowing that:

    -I'll need it also on the graphic (after acquisition)

    -J' I need also to see these values and use them later in Matlab.

    I tried the 'chain of array to worksheet', but LabView goes out of memory (even if I don't use all 8 channels, but only 1).

    LabView 8.6

    I think that access to data is just as fast, what happens to a TDMS file which is an index generated in the TDMS file that says 'the byte positions xxxx data written yyyy' which is the only overload for TDMS files as far as I know.

    We never had issues with data storage. Data acquisition, analysis and storage with > 500 kech. / s, the questions you get are normally most of the time a result of bad programming styles.

    Tone

  • AA5 done very slowly, "mix is a new file.

    Fact someone knows for what he does very slowly AA5 " Final mix is a new " leader" ? It comes only the first " Final mix ". The second time, everything is on what va ?

    AA5 "Mix is a new file" done very slowly. Aa3 "Mix is a new file" done much faster. For what?

  • line 58:. / runInstaller: cannot execute binary file

    I have problem in January while trying to install 9i on linux


    while I try to run. / runinstaller he gave me:

    . / runInstaller: line 58:. / runInstaller: cannot execute binary file

    I searched this error and output like the following:

    file/sbin/init
    / sbin/init: executable ELF 32-bit LSB, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5 linked dynamically (uses shared libs), stripped

    file runInstaller
    runInstaller: text of the Bourne shell script executable

    I thought that I could hurt donwload (64 byte) configurations and I will:

    http://www.Oracle.com/technology/software/products/Oracle9i/htdocs/390soft.html and download:


    Download the complete files (31 bits)
    lnx390_db_9201_Disk1.cpio.gz (440,724,391 bytes)
    lnx390_db_9201_Disk2.cpio.gz (616,447,271 bytes)


    i error again... someone has some idea?

    Thank you

    IBM MainFrame is a large central computer that can run it's own operating system called o/s 390 - Z/OS.

    It can run several Linux distributions in vm and it very fast!.

  • I wrote the software for 33 years. I have a lot of apps. I would use html/xml to replace my aging FDI. Firefox is no longer execuate a binary file called directly to Hypertext on the local system. Why?

    I would rather not re - write the old of the IDE I have used for years but rather replace them with the style sheets for xml/html/web. Konqueror is running locally the binary with a launcher script. Firefox, Chrome, re-Konq, WebPositive and IE Explorer will not. If Firefox or SeaMonkey should run my binary that I could easily replace the old of the IDE and myself and my customers save a lot of time and money.

    Firefox does not execute binary files for security reasons. In other words, to prevent novice users to install malicious software.

  • The binary file format

    With the help of LV2010.  I have a program that stores data in a binary file.  The file is a set of strings and floating point values.  I need to write another program in VB.NET that can save/read these files, so I need information on the actual file format of the data.  Is there a documentation which describes how the file is saved?  Thank you.

    Interesting. Usually, this question gets asked in the opposite direction with people trying to decode in a cluster.

    If you use the WriteToBinary function, your data are written as native data types in order to cluster in the binary file. Because you use a cluster, each string is being preceded by a length, which I believe is an I32.

    This is described in the help file for writing to a binary file. I think the people of thing travel length of string/array much however.

  • "Read binary file" in hex format?

    Is there a way I can set the data type of the function "Binary file reading" so he came out in Hex format?

    Front panel.  Right-click.   Display format.

  • data binary file plugin: navigate through different types of data

    Hello

    I am currently trying to load a binary file in DIAdem with the following structure:

    block 1

    1 x 8 - bit ascii

    12 x double

    block 2

    int16 1280 x

    block 3

    int16 1280 x

    block 4

    12 x double

    Block 5

    int16 1280 x

    block 6

    int16 1280 x

    block 7

    12 x double

    block 8

    int16 1280 x

    block 9

    int16 1280 x

    ...

    I managed to read the first value chain, but I did not get any further.

    Could you please give me an advance on how to proceed?

    / Phex

    Hello Phex,

    Try this. Not sure its exactly what you are looking for, but probably close.

    Andreas

  • Work of doesn´t of reading binary file on MCB2400 in LV2009 ARM embedded

    Hello

    I try to read a binary file from SD card on my MCB2400 with LV2009 Board built for the ARMS.

    But the result is always 0, if I use my VI on the MCB2400. If use the same VI on the PC, it works very well with the binary file.

    The
    access to the SD card on the works of MCB2400 in the other end, if I
    try to read a text file - it works without any problem.

    Y thre constraints for "reading a binary file" - node in Embedded in comparison to the same node on PC?

    I noticed that there is also a problem
    with the reading of the textfiles. If the sice of the file is approximately 100 bytes
    It doesn´t works, too. I understand can´t, because I read
    always one byte. And even if the implementation in Labview is so
    bad that it reads the total allways of the file in ram it sould work. The
    MCB2400 has 32 MB of RAM, so 100 bytes or even a few megabytes should
    work.

    But this doesn´t seems to be the problem for binary-problem. Because even a work of 50 bytes binary file doesn´t.

    Bye & thanks

    Amin

    I know that you have already solved this problem with a workaround, but I did some digging around in the source code to find the source of the problem and found the following:

    Currently, binary read/write primitives do not support the entry of "byte order".  Thus, you should always let this entry by default (or 0), which will use the native boutien of the target (or little endian for the target ARM).  If wire you one value other than the default, the primitive will be returns an error and does not perform a read/write.

    So, theoretically... If you return to the VI very original as your shift and delete the entry "byte order" on the binary file read, he must run a binary read little endian.

    This also brings up another point:

    If a primitive type is not what you expect, check the error output.

Maybe you are looking for

  • How to find the video in the Firefox cache? as chromium

    How can I find video in Firefox cache after the video

  • Satellite P55W-B5318 - Station Service question

    Hi - I found two different stations so I removed one, but the other has disappeared as well. How can I get it back and have only one? According to me, the laptop has been implemented in New Zealand of America by the retail group, that I bought it fro

  • Need help to install the driver Intel Lan on a Satellite A100-011

    I bought Toshiba Satellite A100-011 with Windows Vista laptop. Now, I went down the operating system to Windows XP. The problem is how to install the Intel Lan driver. I would really appreciate any help, because there is no .exe file and I have no id

  • power light flashing wn3050rp

    I have a wn3050rp extension its power LED flashes all the time I installed by mistake inside wn3000rp firmware and since then, its power light flashes Help, please

  • Confirm THAT KDL-46EX500 is voltage?

    Hello I looked for similar topics here and from what I understand, the official word is that * all * Bravia TVs are voltage (110-240v 50-60 Hz); I moved my Canadian-purchased game to Australia recently and was sure it was good, but if someone can con