cluster labview

How can I set the value of individual control in Group of 4 element(like 4 LED)

Hi Daniel,.

one way:

Others are possible...

Tags: NI Software

Similar Questions

  • Convert a name cluster Labview Teststand container name

    Hi all

    I realized that day that there is no way to convert a Labview

    cluster in a container of Teststand and vice versa. So I'm currently

    work on a cluster/container recursive parser that would be

    rebuild the structure of mirroring in variant/PropertyObject

    tree. For this I use the following table:

    http://zone.NI.com/reference/en-XX/help/370052N-01/tsref/infotopics/labview_data_types/

    The problam I am now facing is to convert the name of each

    ELEMENT by its name to stay compatible with the

    the structure of mirroring. That's why no space or special characters

    to follow the naming convention Teststand. You can

    See what happens when you create a custom data Teststand

    Type a connector for Labview.

    So, is there a VI that do the trick, or am I still pruposed to do

    Everything by hand? Thanks for your comments. Even the one who

    will not make me happy.

    David Koch

    Abandoned project, topic closed:

    http://forums.NI.com/T5/NI-TestStand/enqueue-TestStand-cluster-to-LabVIEW-return-a-cluster-by/m-p/30...

    David Koch

  • How can I connect a Labview XY (cluster of 2 tables) TestStand 2010 SP1 chart and do appear correctly in the report?

    Patterns of data record TestStand 2010 SP1 default shared this cluster in two tables stored as binary data, resulting in two graphs displayed in the report: one for data and one for X data Y. We need the elements X and Y, couples on the same graph. This cluster is marked for logging as a step output variable. It seems possible to add a table "PROP_XYGRAPH" (similar to the PROP_ANALOGWAVEFORM) to the schema to simplify the other treatment after the database record, but how can we get the Builder, to accept this type of data is displayed correctly? XY graphics come from LabVIEW 2013 SP1 exclusively as a cluster of two matrices, usually between 500 and 1,000 items long.

    ... Geoff.

    Hello Geoff,

    Had a few resources for you to check. Let us know if none of them work for you.

    Inserting an image of LabVIEW Control:

    <>http://www.NI.com/example/30736/en/ >

    Display of graphics in TestStand:

    <>https://decibel.NI.com/content/docs/doc-38945 >

    Display of measurement data in the shape of graph:

    <>http://zone.NI.com/reference/en-XX/help/370052J-01/tsref/infotopics/measurement_data/ >

    See you soon!

  • Enqueue cluster for Labview Teststand, return a cluster by notification

    Hi all

    I get very very frustrated that I can't find a way to spend

    an asynchronous VI with a cluster of Teststand reflecting a LV

    cluster using a queue.

    This works if wire you the cluster Teststand for the VI is there

    an order appropriate to link to. Yet, the VI has no

    Connector, he expects that a cluster in queue, read of the

    PropertyObject by 'GetValVariant', do some magic

    and is supposed to return another cluster using Teststand

    a notification

    I can read singular elements of the cluster in queue, but cannot

    Run in a cluster of LV with, say, the good old 'VariantToData '.

    which indeed works great inside LV

    Same thing happens when I try to regain a Teststand cluster

    using 'SetValVariant' even if both the Teststand cluster

    and the cluster of LabView are the same format and structure.

    The 'Wait' Teststand notifier action is linked to the right cluster

    property, but Labview fails at the "SetValVariant", because not of

    the right type, even if I have sunk the variant data.

    I wonder if I do wrong or Teststand and Labview

    are simply not designed to work together seamlessly.

    Here's the example I'm putting in place, but the reading of the

    cluster fails, while the alternative 'False' works (123.00)

    Defining the notifier cluster fails too, but its definition the

    elements indivualy also fails because Labview is

    What are 'Compliance' and 'Comments' in

    the 'True' alternative, although I tried all

    hierarchy tree.

    You might have figured out, but I really really need to

    get this working, and I can't understand where the

    default is (next between the Chair and the keyboard) because

    the principle works in LabView.

    David Koch

    Okay guys, I give up all hope, that I had to do this work.

    This is a WIP Teststand container/Labview cluster motor relay.

    TestStand 2013-> TCS_main_2.0.4.seq (run TCS_teststand_2.0.0.vi)
    LabVIEW 2013-> TCS_teststand_2.0.0.vi (run TCS_instruments_2.0.0.vi)
    LabVIEW 2013-> TCS_instruments_2.0.0.vi (interface instruments)

    The main idea was to catch Teststand queued of containers,
    convert a Variant, to analyze their structure and
    to match with their counterpart of cluster of Labview.

    The engine is initialized to 'learn' the Labview
    data structures, storing the data type and the names of the clusters
    different elements, as well as the cluster hierarchy.

    A format of target data type and an associated action are also
    stored for each identified cluster/container.

    Then the engine is waiting for incoming Teststand queue
    containers, convert them to a Variant, to analyze their
    structure and * TRY * to match with the stored
    having been analyzed Labview homologous groups.

    This is what I call the "footprints".

    The three main problems were... are:

    1 - different naming convention (TCS_string_teststand_name_convert_2.0.0.vi)

    2 - format of different data type (TCS_variant_tree_convert_2.0.0.vi)
    3 - different (TCS_propertyobject_tree_parse_2.0.0.vi) data structure

    I think I was very close to resolving these issues, but I'm
    short on time. As an entrepreneur, I've spent
    more than a month of work on this value. Who is
    too many given my dead line.

    I'm quite sad to be leaving this unfinished, he would have
    was great to get the motor relay pole upward and
    running, having just to place a container Teststand
    to get something done automatically at the other end
    and just wait for a notification sent for analysis.

    What's left to do is the following, as an exercise
    left for the reader:

    To "explode" the data structure to correspond to of Teststand "
    still more verbose simpler data format

    This means for example that a Labview wave have to
    be transformed into a cluster of 3 datas. You can read the
    suite of document, but it is not very clear on how
    The LabVIEW data type formats are converted to their
    corresponding Teststand counterpart:

    http://zone.NI.com/reference/en-XX/help/370052N-01/tsref/infotopics/labview_data_types/

    Beware, this involves a lot of trial and error, as
    creating a large Labview cluster with all data
    type of support, import it in Teststand and create
    a custom, data type and then compare each converted

    a data type.

    B point A would improve the adequacy between Teststand
    containers and clusters of Labview.

    With a longer data structure mirrored, it will indeed
    help 'TCS_fingerprint_search_2.0.0.vi' to compare
    the structure of the Teststand container with the correspondent
    LabVIEW cluster structure, the elements names
    Always different Convention.

    Conversion of data format C - needs to be done, place holders
    are ready to be filled.

    There are still a lot of work to do in 'TCS_variant_tree_convert_2.0.0.vi '.

    Remember that the type of data "FileGlobals.tcscluster".
    mirrors (wise Teststand) the 'TCS_instruments_2.0.0.ctl '.
    type definition.

    This means that a string has not transformed a waveform.
    Data format should be very close to each other. That's why
    There is no need to focus too much on these "exotic" data
    format conversions.

    Thanks again to all the people who have invested some time
    in trying to help me solve this issue.

    Thanks to nathand for its cluster monitor not recursive.

    David Koch

  • [BUG] TestStand 2013 receives corrupt data to LabVIEW adapter if the cluster contains waveform array

    Hi all

    I am having trouble with the corruption of the data. My minimal test case is below.

    I have a VI that returns an array of clusters. My TestStand sequence simply call this VI and connects to its output:

    When I run the (with my open VI) .seq file, I can see the update of the Panel before LabVIEW with expected values:

    However, TestStand receives all these values. Waveform bays have the correct values, but everything else is empty / null:

    If I delete my typedef waveform table, all elements of the cluster are correctly registered by TestStand.

    I've attached an example of test (2013 TestStand, LabVIEW 2013) case.

    Any ideas on how to make it work?

    Hey JKSH,

    Thanks for the detailed on this report. I looked into it a little bit last week.

    I think that it is closely related to the 206892 of CAR, which describes a problem where data will not appear on the report unless a property or variable is specified for the output waveform parameter. However, this does not completely cover your case, because you see incorrect digital data in the row with the waveform of your cluster. I filed 462209 CAR for that matter, and we will investigate it more thoroughly.

    This problem only affects data that appears "below" the waveform in the cluster. In the case of the sample, if you put the waveform as the last element of the bunch, I think that it works correctly. I know that your real data could be more complex than this example, but this workaround solution would help in the meantime? You could also consider separating the waveform of the rest of the data, that would probably work too.

    As I said, please let us know, and it is classified in our system now for a developer to investigate the matter. Please let me know if solutions are not appropriate for your application, we would be happy to know a little more about your overall use case order to work around the problem.

  • Cluster commands cause a loop for hanging or LabVIEW to hang

    I'm working on a program that has three groups.  Each cluster has LED controls inside them.  During the test the controls Board Image, block diagram and number of measure will be changed accordingly.  When the survey, all loop this one most are often those (Board picture) from the top and bottom (figure).  LabVIEW sometimes becomes unresponsive and I have to cancel the program.  Any suggestions?

    A red flag that I see so far is that fair to the code that I can see, there are three structures separate event in your code - which are in the other events? You must only have or need one.

    Why you both a timeout event AND one 500 msec waiting in each loop? The event of timeout is not doing anything.

    Are there errors when LV becomes insensitive? Oh yes, it's true, none of these clusters of error are connected so you don't know...

    Mike...

  • Array of strings in the container will not pass in an array of strings in LabVIEW cluster

    I'm new to TestStand, but I'm a CLD.  I took a course custom 3 days which covered most of the TestStand Core 1 and some of the Core 2.  I use TestStand 2013 and 2013 of LabVIEW.

    I have a VI that needs a supply of a cluster that contains, in the following order:

    D 1 string array named Column_Labels

    Table 2D-double named Results_Data

    D 1 table of paths named Graphics_File_Paths

    D 1 table of Boolean named Pass_Fail

    I created a custom data type called Maxim_Results from the tab module VI in the TestStand sequence.  When I have a local (MINSYS_Reuslts), which is made from this Type of reference, I get the following error:

    No corresponding subproperty to the 'Locals.MINSYS_Results' of type 'Maxim_Results' argument for the element "Maxim_Results.Column_Labels" of the cluster

    If, however, I make reference to each item container for each item separately cluster there is no error:

    Can someone help me understand why this is happening?

    Hey Kelly,

    I just implemented the situation you described and it worked correctly for me. However, I noticed that in your example where you have referenced each element individually, your element Column_Labels is actually called "Column_Lables". If it was also misspelled in the LabVIEW Cluster parameter from the custom type, he practiced the behavior you're seeing. This could possibly be the case?

  • Python, call DLLs in LabVIEW: Fatal internal error when accessing output String Cluster

    Hello

    We have compiled a DLL in LabVIEW (TestError.dll) and tried to call it from Python.

    TestError.dll includes 2 functions:

    1 testErreur: cluster 1 entry string, 1 channel indicator

    2 TestError2: 1 channel input, 1 bunch of output string

    What we try to do in Python is actually something like this:

    1 provide values to controls in the functions of the DLL.

    2. call the DLL.

    3 get the values of the indicators.

    What we have seen are:

    1 read/write operations on normal data types (string, digital) indicators/controls are OK

    2. write operation on the Cluster string entry is OK

    3. read operation on the Cluster output string is not OK. The following error is still prompted for:

    «Unrecoverable internal error: 'MemoryManager.cpp', line 437.» LabVIEW version 8.6... »

    Also joined the TestError.prj and python code.

    Grateful if someone can help to explain why we get this error and how to overcome?

    Thank you

    howmean

    What we have seen are:

    1 read/write operations on normal data types (string, digital) indicators/controls are OK

    2. write operation on the Cluster string entry is OK

    3. read operation on the Cluster output string is not OK. The following error is still prompted for:

    «Unrecoverable internal error: 'MemoryManager.cpp', line 437.» LabVIEW version 8.6... »

    Also joined the TestError.prj and python code.

    It is very logical that it does not, and the bad news is, it cannot really be implemented reliable of a process not LabVIEW.

    LabVIEW channels (and tables) are very specific species. They are then called handles, which are pointers to a pointer to a block of memory. If you have a control or indicator on its own, the Prototype configuration allows you to configure this setting as a C. LabVIEW data pointer, when creating the DLL, create heels C for each exported function and place the code to do the translation between the past C pointer to and necessary LabVIEW data handle. For strings and arrays within the cluster, there is no configuration option and the DLL is expected to pass a structure with data handles native LabVIEW in there.

    You may say that creating handles data in your calling process enough to trick LabVIEW. For the input variables that actually CAN sometimes work (but is a delicate and dangerous generally to handle this). There is no way to make it work for output variables. LabVIEW will try to resize handle to fill data in that he wants to make. This resizing is done using internal memory manager of LabVIEW. This will work only if it had been allocated by EXACTLY the same instance of the memory manager. Otherwise, it refers to a different memory segment and catastophally fail. The only way to make this work perhaps, with luck, taking your heart and prayer to the gods, is to lvrt.dll to allocate a handle that you must pass to the DLL. Still find the good lvrt.dll, which will execute your DLL LabVIEW is a major challenge.

  • Read a cluster from a LabVIEW Application on ActiveX

    Trying to not pull my hair.

    New user of TestStand.  We currently have a suite of applications created using LabVIEW .exe that allows the user to manually test DUT.  Try to get a proof of concept goes to show fat improvements if we TestStand resume what the user is doing.

    Rebuilt the executeables with active ActiveX and can almost get everything working the way I want it, except for every time that a type of cluster is involved.  Works cannot read or write.  I created a customized data type to match the type of cluster, but I always get an error of-17308 complain that the Variant data type does not match the variable type expected.  I can get the types of simple data (including tables) to work, but for clusters... nothing.

    Y at - it something I am doing wrong?  Is this possible?

    Dan

    I've tested this method worked.

    To sum up to pass a cluster:

    Create a VI that has a cluster as either the entry or the cluster of production you want out of the EXE.

    Inside this VI, use ActiveX to get the desired virtual Instrument (similar to what you are doing in TestStand).  Call to set the value of control (or get the value of control) on the control that you want to get or set.  You can wire the cluster directly to set the value of control (or get the value of control) in LabVIEW because it stores the clusters in the same way.

    From TestStand, call this VI.  Move in (or on) the parameter desired to get or set.

    I've attached an example that shows how to define a control in the same VI, but you should do something different where you choose your ActiveX Server rather than the LabVIEW ActiveX Server executables.

  • Several digital test with labview cluster?

    Is it possible to make a numerical limit several test with the values of a cluster of a labview vi?

    So-called step "Multiple numerical limit", the data must be numeric. If the cluster already contains only numeric fields.

    Given that, I would throw the cluster within the module in a table (table Cluster). The downside of this is that all the fields of the table share the data type, so all are single or double or I32...

    Other solutions will not work with the default step type, but you can create your own type of step to accept a multiple similar to the digital cluster, which only accepts an array.

    Norbert

  • How to set the value of a variable in a cluster in LabVIEW to c#?

    Hi guys, I'm working on a small c# program, which by using the interface provided by LabVIEW.  And I know that, with the help of lv. SetControlValue (name, value) can set a variable just on the front panel. But in my case, there are several groups on the front panel. Then it confused me how to set the variables in these groups. For example, there is a cluster named clusterA and a variable named a., I tried something like this:

    lv.SetControlValue("clusterA.valueA",1);
    

    but it totally inoperable. Everyone has some experience with this sort of thing? Thank you very much!!

    Hey guys, thanks a lot for all your response. I just found a simple way to solve this problem. For example, there is a cluster named "ClusterA", and there are only two witnesses, who are: an int value named "IntA" (default = 10 IntA value) and a string value named "StringA" (by default the StringA = 'abc'). In c#, if you call the method:

    var clusterA is vi (Array). GetControlValue ("ClusterA");

    you will get a table looks like: clusterA = {10, 'abc'}; So if you want to change IntA 123, you simply do:

    clusterA.SetValue (123, 0); 123 the value, 0 is the index of IntA in clusterA, after this clusterA table = {123, 'abc'}

    After that, simply to make the table in LabVIEW using:

    VI. SetControlValue ("ClusterA", clusterA);

    and now you see the LabVIEW, IntA is changed.

  • LabVIEW botches unbundle when cluster is changed

    • Define a cluster (typedef) as Characteristics.ctl wave and a VI that separate this cluster as Cluster rename Bug.vi.
    • Delete an item (Amplitude) of the cluster and add another to the end (background noise), so that the cluster always contains 3 elements such as the characteristics of the 2.ctl wave,.
    • Apply the changes.
    • The unbundle now uses the phase shift twice.  The first occurrence of phase shift is incorrectly wired amplitude; He must always say dephasing, and black, and the VI should be impassable.

    The same problem occurs if the VI that uses the cluster is not in memory when the cluster is changed.  This problem we often enough and is a major source of bugs and cause of the loss of time.  We understand that LabVIEW can not determine if the change in the name of the second element was intentional or a mistake made by the programmer.  We would prefer to get a broken VI and to solve the problem ourselves, rather than having LabVIEW to make erroneous assumptions.

    I can't reproduce this in LV8.5.1. What version do you use?

    What happens if you:

    delete an item
    apply the changes,
    Add another element,
    apply the changes.

    Kind regards

    Wiebe.

  • How to transfer data from a DLL Delphi pascal class to a LabView data cluster?

    Hi all

    I have the following problem:

    I use a dll written in Delphi Pascal to transfer data to LabView by using the "Call library function node".

    My Delphi dll contains this class:

    TFlash = class
    Fi: TFileInfo;
    constructor Create;
    procedure LoadFi (Filedir_and_nametring);
    end;

    TFileInfo = record
    IDX:smallint;
    IdxLstSpl:array [0.4] of longint;
    Ms: Word;
    [0.4] SP:array of the word;
    end;

    I created the record datastructure of TFileInfo in a cluster of LabView to have the 'same' variable.

    My plan was to call a DLL Deplhi function with the "call library function node" and pass the address of the folder TFileInfo, so the data would be transmitted to the cluster of LabView.

    When I do a simple delphi dll function as this works because I only spend a small integer to Labview (without reference to the data structure):

    ...

    var data: TFlash;

    ...

    function GetNrOfRows(FilePath:_string):integer; STDCALL;
    Start
    Data: = tflash. Create;
    Data.LoadFi (FilePath); This function returns the number of lines in the selected file.
    Result: = Data.Fi.Idx;
    end;

    When I try to use this procedure instead of the above function, in order to pass the address of the data set structure complex 'Data' (TFileInfo), I am unable to get the information of 'Data' in my Labview cluster:

    procedure LoadFileInfo (FilePath: string;) DataPointer: Pointer); STDCALL;
    Start
    Data: = tflash. Create;
    Data.LoadFi (FilePath);
    DataPointer:=@Data;
    end;

    Parameters of call library function node:

    -stdcall (WINAPI)

    -Run in the UI Thread

    -Function prototype: void LoadFileInfo (PStr FilePath, void * DataPointer);

    * DataPointer--> Type: "adapt the type" and the format of the data: "pointers to the sleeves.

    * FilePath--> Type: 'string', format of the string: "pascal string pointer.

    I'm struggeling with this problem for almost a week now and I can't really find a solution on the forum or google.

    I also read the following posts:

    http://forums.NI.com/NI/board/message?board.ID=170&message.ID=229930&requireLogin=false

    http://forums.NI.com/NI/board/message?board.ID=170&message.ID=77947&requireLogin=false

    http://forums.NI.com/NI/board/message?board.ID=170&message.ID=51245&requireLogin=false

    (or did I miss something in these messages?)

    Hope my explanation is clear.

    THX

    A little further:

    Seems like it's not possible to pass data from Delphi to Labview through a DLL when I create a cluster with 2 bays in it in Labview.

    This part of Delphi, I've had to make in Labview:

    TFileInfo = record
    IDX:smallint; {integer; Convert tool}
    IdxLstSpl:array [0.4] of longint;
    Ms: Word;
    [0.4] SP:array of the word;
    end;

    Instead of using 1 cluster with all the different data in it, I did a unit (1) with my 2 items (smallint and word).

    To pass my data in my tables from delphi to labview, I created another group (2) in the unit (1) with 5 elements of longint (because my delphi is going to 0.4) and another group (3) in the unit (1) with 5 Word elements.

    Right-click on the unit (1) and the clusterorder in the right order. First the smallint, then the longint table, then the word and the Word table.

    When I then use this code in my dll Delphi, IT WORKS! :

    procedure LoadFileInfo (FilePath: string;) DataPointer: PtrTFileInfo); STDCALL;
    Start
    Data: = tflash. Create;
    Data.LoadFi (Copy (FilePath, 2, length (FilePath)-1));         --> I need to cut the first part of the pascal string because it's length, and I only need the string itself
    DataPointer ^: = Data .fi;       --> pass the record structure to the cluster of Labview
    end;

    Thanks for the info Ralf!

  • struct dll to the cluster of LabVIEW

    Hello. Currently I'm trying to read the data struct dll writen and see the data in the cluster of LabVIEW, accordingly, I want to use this data in my project of futher. But I am facing a problem. The main problem is, that I can read the data, but those data are incorrect.

    Here is the structure of the dll:

    typedef struct PHAROS_MOTOR_CONTROLLER_state_tag
    {
    SYSTEMTIME TimeStamp;
    unsigned char MotorControllerState;
    unsigned long MotorPosition;
    MotorCurrent short unsigned;

    unsigned int AmbientHumidity;

    float moisture;
    float temperature;
    float point dew;

    float Detector_2Ph;

    } PHAROS_MOTOR_CONTROLLER_state;

    This is the function I try to call using the node library function call:

    bool PHAROS_API_Motor_Get_State (PHAROS_MOTOR_CONTROLLER_state * State)

    Returns the value true and fill State structure with the latest information from the State received from the motor controller or
    Returns false if no status message received or interval of time since the last receipt.
    This function returns immediately.

    So, maybe you have a suggestion how to recive correct cluster data?

    Thank you in advance!

    SIMAS

    It is quite easy to do and asked several times on this forum.  Despite Zoomzoomzoom comments, there is no need to write any sort of wrapper in C.  All you have to do is to create a cluster in LabVIEW that reproduces available to the C struct.  When you configure the call library function node, configure it as "Adapt to type" and the cluster thread entry for this parameter.  It will be automatically passed by reference (like a pointer).  The output of this parameter will be your data.  You may need to add a few items of padding to the cluster - struct elements in C are normally aligned, while clusters of LabVIEW are packed - but once you have this right, it will work.  You will need to replace the SYSTEMTIME component with an equivalent cluster within the plu cluster (search for SYSTEMTIME will show you that it is just 8 2 byte values).

    You should check if the header file includes a line #pragma pack(), which indicates if the structure is aligned in a non-standard way.  If it follows standard packaging, you will need to add 3 bytes of padding after MotorControllerState and 2 bytes after MotorCurrent.  I assume here that your DLL "int" and "long" are equivalent, even if MotorPosition is defined as long and AmbientHumidity is defined as int.

    If you are able to recover some data, but it is data incorrect, most likely, it's because you're missing the padding.  If you can not understand where the padding is necessary, or are unable to work, please attach your code showing what you're trying to do.

  • Can I automate creating a cluster in LabView using the structure of data created in a generated automatically. CSV, C header or XML file?

    Can I automate creating a cluster in LabView using the data structure created in an auto generated. CSV, C header or XML file?  I am trying to take the data structure defined in one or more of these files listed and have LabView automatically create a cluster with structure types and the same data.  (Ideally, I would like to do it with a C header file only.)  Basically, I'm trying to avoid having to create the cluster by hand, as the number of cluster elements could be very large. I looked in EasyXML and contacted the rep for the add-on.  Unfortunately, this feature was not created yet.  Did anyone done something like this before? Thanks in advance for the help.


Maybe you are looking for