Streaming data from cRIO

Hi everybody,
This is quite a general question and I am looking for some pointers\opinions\suggestions.
I want to stream data from several channels at diffferent rates from my cRIO to the host PC. As far as I can see there are three options:
1)  Use a network shared variable (NSV) for each channel and read them in a loop on the host PC.
2)  Use one NSV which uses a cluster of an enum and variant. In this case the enum specifies which channel (and therefore data type) the packet contains and the variant contains the data.
3)  Use STM to stream the data over the network using TCP/IP
These are my questions/thoughts:
1)  not very scaleable as each NSV has to be read individually also just seems messy!
2)  Seems nice and clean and scaleable, multiplexes the data into one channel. I am aware NSVs are not quite as efficient as directly using STM TCP/IP  BUT... is there an additional (significant) overhead converting all the data to variant?
3) According to the documentation on NSVs using TCP/IP is the fastest way to stream the data. This method seems to offer the same avantages as (2) - clean, multiplexes the data. BUT it does add complexity in developing the cod. Also the data is still flattened to string, is this much different than converting to a variant?
THE QUESTION: is method (2) a reasonable compromise if the absolute highest data rates are not required?
Many thanks,
Steve.

Hi Steve,
I have been looking into this problem for you. It seems that each of the three options you highlighted could be used to achieve your goal though since you want to stream multiple channels method 1 would be highly inefficient and therefore should not be considered for this application. I would suggest that method 3 which uses TCP/IP to stream the data over the network is the optimal solution in this case though as you have alluded to, this does add a level of complexity. If you decide to pursue this option I have found a really useful link provides more details about this methodology and a LabVIEW example which should help you get started with the coding. I have also found this link to a forum which may be of interest to you (especially the final post by Kurt).
I would also like to add that I completely agree with Brian K, in that I believe method 2 is a very acceptable compromise, especially if high data rates are not necessary. 
I hope this helps.
Best Regards,
Christian Hartshorne
Applications Engineering
National Instruments

Similar Messages

  • Streaming data from cRIO to a data file (binary file) on a network Network Drive on the same LAN

    Dear All 
    I hope my message finds you all well 
    My Question is :  is it possible to log my data from cRIO to a network drive and stream the data being captured to a binary file in this drive ? and do the conventional File IO functions ?
    I heard that DataSocket can do this , but it is mainly used between computers (this is what i understood so far about it)
    My network drive is a DLink ShareCenter : http://sharecenter.dlink.com/products/DNS-320
    I know that i can use the NI 9802 SD Card module , but it is out of my budget now to buy it 
    Please assist 
    Best Regards
    Eng. Mohammed Ashraf
    Certified LabVIEW Associated Developer
    InnoVision Systems Founder, RF Test Development Engineer
    www.ivsystems-eg.com

    Hi Mohammed,
    Are you trying to accomplish all this with or without the use of a host machine? If you're doing it with a host machine then the best bet would be to transfer data to the host using network published shared variables and then write to a file on the network from there. 
    If you're trying to do all this from the cRIO straight to the network drive with no intermediate host PC there are many things to consider. First off would be making sure there are no security protocols on the network drive that would prevent the cRIO from accessing it. Next you'd have to make sure there are no drivers required for the network drive as many drivers will not work on the Real-Time OS since most of these drivers are designed for a Windows system. If all this is taken care of then I'd say FTP is probably your best bet for getting files onto the network drive as long as you have an FTP server. 
    I'm unsure about if you would be able to stream to a binary file from a cRIO. I would need to know more about your application and what hardware you're using. Again I'd recommend you use a host PC and do the file I/O from there if possible. Can you tell us a bit more about your application and setup?
    Miles G.
    National Instruments
    Applications Engineer

  • Stream data from a subvi to the main vi

    Hi
    I’m wondering if someone can help me. I’m trying to stream data from a sub vi to the main vi without opening and closing the sub vi continuously. The data also needs to be extracted from a while loop within the sub vi.  background info: The sub vi controls a photomultipler tube, which once it is on it is best kept on. The PMT signal is generated in while loop of the sub vi. Attached are some basic vis showing what I’m trying to do.
    Thanks
    Attachments:
    Main page.vi ‏11 KB
    test2.vi ‏13 KB

    If you are streaming measurements continously I would consider using a circular buffer instead of the queued producer/consumer approach.
    Check out this implementataion of such a buffer, use only this if your DAQ device does not have an internal circular buffer.
    https://decibel.ni.com/content/docs/DOC-20403
    Alternatively if you are using a DAQmx device, consider using the device buffer for sharing DAQ data between loops.
    Br,
    /Roger

  • Stream data from a subvi to the main vi - path refnum

    hello everyone
    sorry my english
    http://forums.ni.com/t5/LabVIEW/stream-data-from-a-subvi-to-the-main-vi/m-p/2205150/highlight/true#M...
    - refnum boolean worked
    - refnum graph worked
    - refnum numeric worked
    how to create a  path refnum? stream data from a subvi to the main vi
    where do I start?
    thank
    Solved!
    Go to Solution.

    Bom Dia Saille,
    Eu acredito que o que você tenha hoje seja isso aqui (Desenho bem simplificado):
    Hoje o que você tem é o Aplicativo do Medidor + USB Driver controlando o seu medidor. Basicamente, sua aplciação está dividida em três camadas:
    Aplicação - Onde estão as funcionalidades principais do programa (interface com o usuário, apresentação de dados, geração de arquivos, etc.)
    VISA - Uma arquitetura de Software para controle de instrumentos. Basicamente, ele se comunica com o Driver USB para poder enviar e receber pacotes de dados através do barramento USB.
    Device Driver - Intruções de SW de baixo nível para controlar um periférico através de um barramento.
    No desenho, eu aponto duas camadas onde você pode tentar atuar para automatizar suas medições:
    Aplicação - Você pode usar o VI Server para controlar o Aplicativo do Medidor (Se este aplicativo tiver sido desenvolvido em LabVIEW, o que eu suponho ser verdade). No entanto é necessário saber se o desenvolvedor do produto permitiu isso (Veja Using VI Server to Pass Data Between a VI and a LabVIEW Executable). Outra alternativa é conversar com o fabricante para ver se ele desenvolveu alguma API (Application Programming Interface) para que você consiga controlar o instrumento diretamente.
    VISA - O LabVIEW Fornece uma API chamada NI-VISA para poder enviar e receber informações através de diversos barramentos (Veja Serial Instrument Control Tutorial)
    É possível acessar o Driver diretamente também, mas eu não recomendo. O resultado não compensa o esfroço!
    Espero ter esclarecido suas dúvidas e espero que você tenha sucesso na sua aplicação!!
    Atenciosamente.
    Felipe Flores
    Engenharia de Aplicações
    National Instruments Brasil

  • How to stream data from TDS3000?

    Hi there,
    I would like to stream data from my scope into Labview for further analysis.
    Hardware: Tektronix TDS3014C
    Software: Labview SignalExpress 2.5.1 + Tektronix Extensions
    I don't exactly know when the interesting transient signal appears, therefore I would like to save ~5-10 s of streamed data.
    Right now I'm getting just fractions of 2 us and the scope switches into waiting for trigger.
    Is there a way to deactivate trigger, or a keyword I could search for?
    Thanks for your help,
    nook
    Solved!
    Go to Solution.

    muks,
    I think you got this post confused with another.
    nook,
    You can rarely continuously stream data from a GPIB scope. You can check the manual but often the scope cannot transmit at the same time it is acquiring so you have a sequential operation of wait, trigger, acquire, transfer, repeat.
    Can't you set the trigger for the transient?

  • Fastest way to transfert data from cRIO

    Is anybody know the fastest way to transfert data from cRIO? I tested shared variable, but it's not fast enough. What is the fastest speed could we achieve with shared variable in cRIO? how can I transfert 50000 32 bit word per second from cRIO to my PC? This should run 24h/day.
    Thanks
    B.
    Benoit Séguin
    Software Designer

    Hi Benoit,
    Thanks for your post and I hope your well. I noticed you've not received a reply - and I would like offer my advice.
    Shared variables are one way to communicate over the Ethernet. You can use UDP, TCP and VI Server also. 
    UDP is the fastest network protocol but it includes little error handling and can lose data. TCP is commonly used for large systems. TCP takes more programming effort than shared variables, however, it provides a good mix of speed and reliability. You can use the VI server to run Vis and/or access and set the value of controls and indictors, but it is slower and not recommended for larger data sets. 
    Please let me know what you think,
    Kind Regards,
    James.
    Kind Regards
    James Hillman
    Applications Engineer 2008 to 2009 National Instruments UK & Ireland
    Loughborough University UK - 2006 to 2011
    Remember Kudos those who help!

  • Use labview to collect AE streaming data from pacpci2

    Hello everyone,
    I'm using labview to collect AE streaming data from pacpci2.I have the dll from PAC,and I have  written some VIs for streaming data. Now I don't know how to read data to my program from the pci.Can the "getMessage" function do this?
    Hope somebody has this experience can help me.Thanks a lot.
    henry

    No idea because you are leaving all the details out of your message.
    What does "AE" mean in the way you use it?
    What is "pacpci2"?
    What PAC are you using?
    What "Get Message" function are you talking about?

  • Streaming data from disk to analog output (using the PCI-6713)

    I have a question about the PCI-6713. I want to stream data from the hard disk to all of the card's 8 outputs at its maximum update rate of 1 MS/s. Using single precision (32-bit) variables, this works out to a 32 MB/s transfer rate. That seems to be pushing the limits of most hard disks.
    However, the output card only has 12-bit resolution. Is there a way - using LabView or some other software - to store the data on the disk using only 12-bit numbers? This would drastically decrease the transfer rate required.
    Thanks for your help.

    You could use 8 or 16 bit integers in LabVIEW rather than using 32-bit single precision numbers. I'm sure integers don't have the precision you're wanting though. That is the only way to reduce the size of the numbers you are writing. I am fairly positive there is no way in LabVIEW to do what you are wanting.
    Regards,
    Todd D.

  • How to stop delay when streaming data from a script as URL to an Applet?

    I have a strange problem and do not know what is causing it. Hope someone here with some experience can help.
    I have a Java Applet which makes a line graph of data. The data source is to be streaming, where the first chunk of data comes from what is already in a data file, and then new data is sent whenever it is ready. The problem in brief is that if I just collect and show the data from the data file and do not stream everything works fine. If I also have the streaming and wait for a long time, everything works fine, but when the applet is first loaded, the graph is not shown until after a long delay time.
    Here is a snippet of the applet code:
             String dataendpoint = "http://phpfunction.php";
             URL url = new URL(dataendpoint);
             InputStream is = url.openStream();
             String line;
             InputStreamReader isr = new InputStreamReader(is);
             BufferedReader br = new BufferedReader(isr);
             while ((line = br.readLine()) != null) {
                   // my code here to handle each line of data which prepares it for
                   // showing on a line graph.
             } In the above, I show the dataendpoint variable hardcoded, but in reality this comes as an Applet parameter. It is a URL of a php script which is on the same server as the applet's code and there are no access problems here.
    The PHP script does the following: It first opens a data file, parses it and prints it out to its standard output using echo or printf statements. The script then enters a loop where it periodically looks to see if new data has been made available. If so, that new data is also printed out to the standard output.
    The PHP script looks like this (in pseudo code):
       // open data files, read lines, and send to standard output using echo
       // flush buffers using ob_flush() and flush() calls
       while (1) {
          sleep(30);
          // get new data, if any, then send to standard output
          // flush buffers again
       Again my problem: If I have the PHP script exit before the while loop everything works fine, my applet makes the graph immediately.
    However, if I include the while loop, then initially the applet does not appear, not until some time afterwards, and then the applet works like it should, scrolling along every time new data arrives.
    I have done a Wireshark sniff and I can see that the initial data is being sent out the the browser and applet immediately. So I do not think it is a buffering problem on the PHP side.
    I have wrapped every Applet code line with debug print statements and from the Java console I see that the Java Applet is stopping at this line:
    InputStream is = url.openStream();
    Can someone explain what is happening here? Why the delay in returning from the openStream() function and how to avoid it?
    By the way, the server is Linux and the Applet is being run on Windows Vista, and I have tried both Internet Explorer and Firefox, both give the same behavior.
    Thanks in advance!
    Steve, Denmark

    I still cannot solve this problem, but I have some more observations:
    1) yes it is a JApplet, and yes, the data streaming is performed in a separate thread.
    2) Wireshark sniffing shows that data sent out by the PHP datasource on the server is sent immediately, and is not buffered (am using ob_start(), ob_flush() and flush() alls in the PHP script).
    3) On Windows Vista, using Internet Explorer or Firefox, there is a constant 30 second delay before the Applet returns from this line: InputStream is = url.openStream();
    4) After this 30 seconds, data appears in the Applet, but it can be seen also with java console debug prints that the data seems to be buffered. The newest data shown in the Applet is not the newest data sent to the client by the PHP datasource script.
    5) On a SUSE Linux client, the Applet works as it should, there is no delay time in showing the data.
    It appears as if there is on Windows a buffering of data which I do not wish to have and which does not occur on Linux. I need to find out how to get the URL openStream() call to return immediately allowing the initial data to be read and shown on the Applet. And I need to remove the buffering of data so that the data can be shown on the Applet when it arrives.
    Can anyone help? Why does this work on Linux but not on Windows, and what can I do, at best within the Java code, to get the Applet to work on Windows as it does on Linux?
    Thanks!
    Steve, Denmark

  • Acquiring streaming data from two sources

    I�m trying to acquire data from two devices at the same time. I have written two sub VI�s where each one takes the data from one piece of equipment. The equipment is such that they are both constantly outputting data. I have been successful in running both of the sub VI�s separately at the same time. The trouble occurs when I try to put the sub VI�s together in a larger VI. When the two sub VI�s part of a larger VI, both cannot run at the same time. One of the sub VI�s tries to read from the serial port and is unable to get anything in response. Is there something I am missing as to why they can not be running at the same time?

    Hello,
    It is possible that you are seeing the consequences of LabVIEW compiling code written in parallel. More specifically, if you have code in parallel (not connected by dataflow, but in the same block diagram) LabVIEW will split execution time between those parts of your code. Previously you were likely manually starting two separate programs, which inherently adds a delay between the start of the programs, allowing the first program to get sufficiently far in its execution; we could be seeing the consequence of this. It would help if you could be more specific about the details of your setup and code (such as 1. which instruments are connected to which ports? 2. are you writing a command to your instruments and then receiving data as a response? 3. do you rec
    eive any errors? 4. if you do receive errors, which errors do you see and where in your code do you first see them?).
    Repost with some more information (perhaps a screen shot or your code) and we can get a more definitive answer!
    Thank you,
    Regards,
    JLS
    Applications Engineer
    National Instruments
    Best,
    JLS
    Sixclear

  • Streaming data from CSV

    I'm new to labview and am unable to determine the correct way to perform the following function
    I have a CSV file that has about 8000 data points (1D), that were captured as a Voltage every 25ms.
    I want to turn around and simulate the device I captured the data from.
    I am able to import the CSV using the "read from spreadsheet"
    I have set up a LOOP that repeats every 25ms (the same as capture rate), and I have the code to feed to the output device.
    I'm missing the code that extracts one cell (element) from the array I imported so it can be feed it to the output and then increment to the next cell (element) on the next loop.
    I've tried the index array but it does not seem to work 
    Thanks for the assistance.
    dpjkw

     have attached the csv file and my crude beginning of the .vi file.  I currently have a sine wave feeding the analog output device which works.  I wish to replace the sinewave function with the data in the CSV.  Every 25 ms the output should be updated with the data in the next cell. I'm bacically simulating a waveform that was captured from a device in the field, I wish to simulate it in the office for testing some PLC code
    I am using a LabJack U3 for the I/O.
    Thanks,
    dpjkw
    Attachments:
    Analog Out.zip ‏26 KB

  • Streaming data from another PC, combining it with DAQ measurement

    Hi
    I'm just getting back into LabVIEW after 2 years without using any NI software, so apologise if I'm missing something really obvious and this is a simple question. I have had a search of the forums, but can't find what I'm looking for. Perhaps I just don't know what to look for.
    I'm starting to plan a combined data acquisition system for an engineering test, which will involve two PCs. I would like some advice on how to set up a LabVIEW system on one of them.
    I need to produce a system which will:
    (a) log measurement data using normal DAQmx method - that bit should be straightforward enough.
    (b) import independent measurement data from the other PC, probably via an Ethernet LAN. What’s a good way to get data into LabVIEW?
    (c) correlate the 2 sets of data. What I really want to do is feed the input data into my measurement system in real time.
    (d) produce data files incorporating all data
    I'm not involved in programming the system for the other PC, but can have some input into how it’s arranged.
    Is TCP the best way to go? I would be very grateful for any guidance anyone can offer on how to do steps (b) and (c).
    Thanks.

    MRH wrote:
    Hi
    I'm just getting back into LabVIEW after 2 years without using any NI software, so apologise if I'm missing something really obvious and this is a simple question. I have had a search of the forums, but can't find what I'm looking for. Perhaps I just don't know what to look for.
    I'm starting to plan a combined data acquisition system for an engineering test, which will involve two PCs. I would like some advice on how to set up a LabVIEW system on one of them.
    I need to produce a system which will:
    (a) log measurement data using normal DAQmx method - that bit should be straightforward enough.
    (b) import independent measurement data from the other PC, probably via an Ethernet LAN. What’s a good way to get data into LabVIEW?
    (c) correlate the 2 sets of data. What I really want to do is feed the input data into my measurement system in real time.
    (d) produce data files incorporating all data
    I'm not involved in programming the system for the other PC, but can have some input into how it’s arranged.
    Is TCP the best way to go? I would be very grateful for any guidance anyone can offer on how to do steps (b) and (c).
    Thanks.
    You will have to give us more info about the dat on the other machine for us to be able to help.
    Is the data on a web-page (DataSocket reads)
    In a DAQ sub-system on the other machine (Action Engine Served to the clinet via VI server)
    In a file on the other machine (map the drive and file read)
    In memory on the other machine (SCRAMNet)
    So tell us more about the data.
    Ben
    Ben Rayner
    I am currently active on.. MainStream Preppers
    Rayner's Ridge is under construction

  • Streaming Data from AccessDatabase

    Hi friends.I 'm working on java to streamin data from Access Database.But it shows me this Exception meggage;
    java.sql.SQLException: No ResultSet was produced
    at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(Unknown Source)
    at Database.<init>(Database.java:18)
    at Database.main(Database.java:44)
    its my code;;
    import java.sql.*;
    * @author leet_coder
    public class Database {
    Connection baglanti=null;
    Statement st=null;
    ResultSet rs=null;
    /** Creates a new instance of Database */
    public Database() {
    try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    baglanti=DriverManager.getConnection("jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=" +
    "C:\\Documents and Settings\\a\\workspace\\Proje\\Databases\\vt1.mdb");
    //jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=<veritabani_dosyasi>
    st=baglanti.createStatement();
    rs=st.executeQuery("INSERT INTO Uyeler VALUES('2','Gamze','Eren','Bayan','20','1.84','69','Evet');");
    }catch(Exception _e){
    _e.printStackTrace();
    * @param args the command line arguments
    public static void main(String[] args) {
    new Database();
    // TODO code application logic here
    }

    Read the [JDBC Tutorial|http://java.sun.com/docs/books/tutorial/jdbc/index.html].
    You do not use executeQuery to execute SQL that will update the db, and an INSERT query would not produce a result set anyway.

  • Using http live streaming to stream data from a Webcam

    JavaFX 2.2 includes support for http live streaming: http://en.wikipedia.org/wiki/HTTP_Live_Streaming
    How could one create a http live stream from a Webcam and thereby enable a JavaFX application to view and hear the Webcam video in realtime?

    Bom Dia Saille,
    Eu acredito que o que você tenha hoje seja isso aqui (Desenho bem simplificado):
    Hoje o que você tem é o Aplicativo do Medidor + USB Driver controlando o seu medidor. Basicamente, sua aplciação está dividida em três camadas:
    Aplicação - Onde estão as funcionalidades principais do programa (interface com o usuário, apresentação de dados, geração de arquivos, etc.)
    VISA - Uma arquitetura de Software para controle de instrumentos. Basicamente, ele se comunica com o Driver USB para poder enviar e receber pacotes de dados através do barramento USB.
    Device Driver - Intruções de SW de baixo nível para controlar um periférico através de um barramento.
    No desenho, eu aponto duas camadas onde você pode tentar atuar para automatizar suas medições:
    Aplicação - Você pode usar o VI Server para controlar o Aplicativo do Medidor (Se este aplicativo tiver sido desenvolvido em LabVIEW, o que eu suponho ser verdade). No entanto é necessário saber se o desenvolvedor do produto permitiu isso (Veja Using VI Server to Pass Data Between a VI and a LabVIEW Executable). Outra alternativa é conversar com o fabricante para ver se ele desenvolveu alguma API (Application Programming Interface) para que você consiga controlar o instrumento diretamente.
    VISA - O LabVIEW Fornece uma API chamada NI-VISA para poder enviar e receber informações através de diversos barramentos (Veja Serial Instrument Control Tutorial)
    É possível acessar o Driver diretamente também, mas eu não recomendo. O resultado não compensa o esfroço!
    Espero ter esclarecido suas dúvidas e espero que você tenha sucesso na sua aplicação!!
    Atenciosamente.
    Felipe Flores
    Engenharia de Aplicações
    National Instruments Brasil

  • How temporary store data from CRio?

    Hi,
    I am using a CRio to control a system. I am finding that there is a little variation in readings from the ADC module of the CRio, so the reading on the screen is a little eratic. The input signal is more stable than what the reading is making it out to be, so i know it is to do with a sampling error in the CRio (Which is to be expected). To solve this problem, i want to apply a simple filter. Where i record 4 or 5 readings and take the mean average. The 4-5 readings are continuously rolling, so as soon as the CRio has taken a new reading. The value enters the stack and the oldest reading is removed.
    Now the way i would like to do this is to use a shift register. If a shift register is able to store values and not just boolean?
    I've seen other posts in hear talking about a shift register but i can't find it (I've even searched for it but the results doesn't return anything to do with a shift register). Where should i be able to find it?
    I have the CRio sampling the inputs using a flat sequence structure. Where i have a timer in the first section and everything else that is related to it in the next section. Obviously, the timer in the first section sets the frequency that CRio samples the data. If i increase the timer and therefore decrease the frequency, would the length of time that the CRio takes to samples the data naturally increase? The longer the ADC card takes to sample the signal, the ADC card is therefore given more time to settle and will naturally filter itself.
    Failing both of these, is there another way i can do what i want to achieve?

    A shift register is a fundamental LabVIEW concept.  It allows you to store any type of value from one iteration of a loop to the next.  Search the LabVIEW help for shift registers.  One common approach to your problem is to store an array of values in the shift register.  Inside the while loop, on each iteration, rotate the array (there's a function for this), then replace the first element with the new data.  This works well for a small array (for example 4-5 previous values); there are faster but more complicated approaches if your array is larger.  If you're doing this in the FPGA on the cRIO you might need a different approach as well: keep track of an array index, insert the new value at that index, increment the index, and reset to zero when you reach the array length.
    LabVIEW also provides a number of built-in filter VIs that manage all the previous values for you; see if one of those will do what you want.
    Changing your loop rate will not affect the sample time; as far as I know, the sample time is fixed, or at least not easily accessed.

Maybe you are looking for

  • How do i add multiple lines in a cell (like a list) in Excel for MAC?

    I'm trying to add multiple lines (in the form of a list) in a individual cell in Excel for MAC.  I used ALT Enter on my PC but that doesn't work on the iMac.  Does anyone know how to do this? Thanks!

  • HT202213 ITunes and homesharing and apple tv on iMac G5

    followed all instructions and the appletv connects, says it is reading the library then fails.  also, there is no homesharing item in the left tree on itunes.  homesharing is on and logged in though.

  • Tell me what to do ? This is not a hoax ?

    Dear Customer, During our security checks your аccount result to be expired. Your аccount and all services linked to this аccount are blocked becаuse of the policy we have for the sаfety and integrity of Apple Comunity. You can reаctivate your аccoun

  • Embedfonts Class File

    Helo. I created a custom Component using a ActionScript Class file. In this component, i create some text fields and i want change the alpha. If my fla file use FlashPlayer 10, the text field is not shown if i set the alpha to 0, but, if the i use th

  • Node inside Node

    Hi,     I am facing a problem in getting and setting the node from webservice node. I have two nodes of the following structure. <i>MainNode</i>   (Model node) <i>SubNode</i> (Model node under MainNode) <i>ItemNo</i> (Attribute under SubNode) <i>lotN