VBAI: how do I read a shared variable?

I am trying to make my inspection to do things that are contingent on the value of Shared Variables. It is obvious how to set the Shared variables from VBAI, but I have not figured out how to read them and then create some kind of a CASE structure using that variable.
Any ideas on how to implement such an architecture?
Solved!
Go to Solution.

I would create two different states and use transitions that are based on the shared variable value. You can read the value of variables or previous measurements in steps that allow this (not all steps do, but most do) or transitions. To create a new state, go to the state diagram (click on the "Toggle Main Window View" so the state diagram is in the main part of the window). Right click in an empty part of the state diagram and select "Create New State".
To create a transition, right click on a state and select "Create New Transition" and drag the transition to the new state.
To edit the transition, double click on it and you will be able to select the shared variable as the measurement, along with comparison operations to make the decision. If this comparison evaluates to False, the Default transition will be taken instead.
Select Help>>Show Context Help while editing the state diagram to get more details on how to use it.
Hope this helps,
Brad

Similar Messages

  • How Can i retain the Shared Variable Values after PC rebooting

    Hi all,
    I am facing a paculiar problem with Shared Variables. I have an application in which shared variables are used for data communication.
    One of the application requirement is to retain the variable values eventhough PC is rebooted or started after crashing. 
    As per the my understanding, the variable values will retain eventhough the PC is rebooted. But here i can observe a paculiar problem like some library variables are retaing the values while some others not. I enabled logging for all the variables.
    I tried many ways. like logging enabled, logging disabled, changing variable names, changing process names etc... But i am not getting a consistent behaviour.
    I hope some you can help me in solving this issue.. "How Can i retain the Shared Variable Values after PC rebooting"
    Thanks and Regards,
    Mir

    Hi Blackperl,
    Thanks for the post and I hope your well. 
    What do you mean by not getting consistent behaviour.. this will all depend on excatly when the crash happens i.e. before the write or after. 
    Surely a better method would be to log the data to a file during the reboot...
    I beleived the value read back
    will be the default value for the shared variable's data type.
    The LabVIEW DSC 8.0 module adds more functionality to the shared variable, including initial values and alarms.
    If you enable an initial value on a shared variable, when the variable
    engine comes back on-line it will default to this value. Setting a bad
    status alarm for the shared variable is also a good way of handling
    this type of event. Additionally, if you are using a LabVIEW Real-Time
    target such as Compact RIO or Compact FieldPoint, it is appropriate to
    consider hosting the shared variable engine on the real-time target.
    These devices have watch-dog capabilities and are typically the
    hardware controlling the critical pieces of an application. Most
    Windows or PC-based targets do not have these fail-safes.
    I guess, if you could explain to me again that would be great. From my point of view, if I have a cRIO and a Windows PC. If the windows PC crashes, the cRIO will still update its shared variables. Then once the PC has started up its own shared variable engine, and the bindings are loaded, it will once again continue to update its copies of the variables.
    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!

  • Read LabVIEW shared variables ( network variables?) with VB6

    Hi, i need to read some LabVIEW shared variables (network variables?) using a VB6 program.
    Is it possible?
    I think that yes, using Measurement Studio for VB6 but I don't know how and I haven't found information in the  Measurement Studio for VB6 help file
    Could some one send me a program example or explain me how it is possible to read LabVIEW shared variables fromVB6?

    Hello quintella,
    To be able to interface with LabVIEW
    Shared Variables with Visual Basic 6 you will need to use NI Measurement
    Studio, which ships with examples on how to use VB6 with DataSocketing. Apart
    from Data Sockets, if you are using Measurement Studio 8.1 or higer, with the
    Network Variable Library introducted in NI Measurement Studio 8.1, you can read
    and write to shared variables in ANSI C, Visual Basic .NET or Visual C#. (http://zone.ni.com/devzone/cda/tut/p/id/4679)
    Here you have two links where you can
    find more information about how to use the datasocket option. In addition, there
    are several examples included in Measurement Studio with Network Variables and
    Datasocket.
    http://forums.ni.com/ni/board/message?board.id=230&message.id=2945&requireLogin=False
    http://forums.ni.com/ni/board/message?board.id=230&message.id=3324&requireLogin=False
    Regards,

  • How can I change my Shared Variable from "I/O Variable" to "Network Published"

    Hello,
    I have an application that is using a series of NI wireless sensor nodes.  I am trying to programmatically access shared variables.  Right now the only method I have found to access the data from the shared variables is datasocket read.  I am on labview 8.6.1 so I don't have as many shared variable options as newer versions of labview.  I do think there is a way to access properties for the shared variables, but I'm not sure about how to change the nodes channel properties to "Network-Published".  Do i need to remove the node from the project and bring it back in with the new settings?  When i have done this in the past i have run into naming conflicts.  I would appreciate any ligtht that can be shed on this issue that will help me create a vi that operates quicker.

    Any Shared Variable that has “I/O Variable” for its Variable Type (see screenshot of the Shared Variable Properties below) refers to any channel of data (such as Analog Input or Output or Digital Input or Output) directly from a module channel.  In other words, this is how you directly get the raw reading straight from (or to!) a specific module channel.
    You cannot edit the Variable Type to Network Published.  You can check “Enable Network Publishing” as above, which allows this Variable to be accessed from a VI on a Host VI.  You could also create a separate Network-Published Shared Variable which you can wire directly to the I/O Variable on the Target VI if you wish.
    Best,
    Ryan C.
    Applications Engineer
    National Instruments

  • How to add a new Shared Variable programmatically to an existing and deployed library?

    Hi there!
    I am trying to accomplish this on both LabVIEW 8.6 and LabVIEW 2010 and seems like it's not any different in this situation.
    My case: A project has a library with 4 Shared Variables (SVs). The library and the variables are deployed (visible in Distributed System Manager 8.6/2010). I want to add 2 more variables into this library. It is possible to do this manually from Project Explorer window's options menu. But while running an application it has to be done programmatically. Can I provide the library reference to the one currently existing without creating a new one?
    "Create Or Add Library To Project" function in the Datalogging and Supervisory Control (DSC) toolkit does not help in this case. That function, as the name suggests, just tries to create a new library in the project.
    Two possible methods:
    The function "Add Shared Variable To Library" (DSC>EngineControl>Libraries & Processes) needs a library reference, which could be provided via "CreateOrAddLibraryToProject" function, but this function tries to create a new library, and if I provide the path of the existing library it throws an exception that the library already exists in the project (yes, as I wrote above, I need to add new variables to an existing and deployed library).
    OR
    The function "Create Shared Variable" (DSC>EngineControl>Variables & I/O Servers) will add Shared Variable in a process, and not physically in a library file, and the problem (limitation) with this approach is that it doesn't allow to add complex data type Shared Variables (for example in LabVIEW 8.6 it has only 4 datatype options in input parameter, and even in LV2010 it does not have "Image" datatype that I need).
    The scond method is my preferred method as it allows to work on Online Shared Variables and doesn't create them physically in libraries (and this is good as the variables' scope remains only till the Variable Engine is running). But it doesn't support advanced data types, and the first method is powerful in terms that it supports to virtually any datatype, it just seems tricky to get that reference to the library.
    Any tips?
    Thanks ahead!
    Vaibhav

       <<<<>>>>   
    As the above two images show, while a library does not exist, it is easy to use the "CreateOrAddLibraryToProject.vi" which will add a new library to the project (if it doesn't exist on file system, a new library will be created) and that way, using the reference (the green wire going out from the function and the Case Structure, can be used to add Shared Variables to the library. The problem was what to do when a library already exists in the project, how to add more variables to it. I was looking for a way to get a library reference, and somehow I could not see it inside a Project's property (VI Server functions). Hence I posted the question. And upon continuing my search, I found it on the Application's property list.
    I hope it was useful for someone else as well. And thanks for the replies. Please share a better idea if you have.
    Vaibhav

  • Slow performanc​e to read/write shared variables programati​cally

    We are using datasocket read and write functions to read and write shared variables programatically (in the same machine) but we only achieve a performance of aprox. 200 reads/writes per second. We are using Labview 8.6 with DSC.
    Is possible to get better results? That performance is normal?
    Any help would be appreciated. Thank you in advance.

    Hi MMCDAT,
    I think this value can
    be normal as you can see in this link:
    http://zone.ni.com/devzone/cda/tut/p/id/5037
    As you can see, the
    limit for datasocket depends on your Ethernet limitations, even if you as using
    it just in one PC:
    http://digital.ni.com/public.nsf/websearch/6AC9E65​734E53F9A8625672400637ECC?OpenDocument
    You can improve the
    performance changing the update mode or Vis configurations:
    http://digital.ni.com/public.nsf/allkb/F8F7DE98856​B50588625672400648045?OpenDocument
    http://digital.ni.com/public.nsf/allkb/2D9C6D73A16​0537986256B290076456E?OpenDocument

  • How many clients subscribed to shared variable engine

    Hi,
        I have shared variable engine deployed on RT and want to know how many clients get access to the shared variables. Is it possible? Thanks!
       Tom

    Theoretically there is no limit for the number of clients (maybe there is a 2^32-1 limit somewhere I don't know about).
    However, more clients create more threads and the CPU usage will increase.
    So you shouldn't use that much clients or host the SVE at the host computer if possible.
    Christian

  • Error Reading a Shared Variable Array

    Hi,
    I am having a problem reading an array of 20 unsigned integers from an Allen Bradley ControlLogix PLC with Labview.
    I have set up a shared variable for this purpose.  I have set the Data Type of the shared variable to ArrayOf Unit16.  The Variable Type is Network-Published, and I have check the Bind To Source checkbox.  I think my problem is in the shared variable path.  I have tried the following with no success:
    MyComputer\ControlLogixTags.lvlib\RsLinx\ProjectX\Online\Faults\Faults
    MyComputer\ControlLogixTags.lvlib\RsLinx\ProjectX\Online\Faults\Faults[0]
    MyComputer\ControlLogixTags.lvlib\RsLinx\ProjectX\Online\Faults\Faults[]
    MyComputer\ControlLogixTags.lvlib\RsLinx\ProjectX\Online\Faults\
    MyComputer\ControlLogixTags.lvlib\RsLinx\ProjectX\Online\Faults
    I have created a simple vi for testing.  I have wired the shared variable to an indicator which is an array of UInt16 items.  When I run the vi, I get an error which says "Error 91 occurred at Variant to Data in Text.vi.  Possbile Reason:  The data type of the variant is not compatible with the data type of the input."
    Does anyone have a suggestion as to what I am doing wrong?
    Thanks in advance for your help,
    Phil

    Phil,
    In order to determine that you can correctly communicate with your OPC server, I would suggest creating a shared variable bound to a single tag. It sounds as if you already have an RSLinx I/O Server in your project library. Now you can create a new shared variable and use the browse option to browse the items of your I/O server. Be sure to select a tag that has a known value such that you can verify successful communication.
    Also, does your VI utilize a dynamic data conversion? The error code mentioned (error 91) is normally associated with this data type. Our next step will be to look at this VI once we can establish successful communication. I hope this was useful for you. Please let me know if I can be of further assistance.
    Mike
    National Instruments
    Applications Engineer

  • How to use the "Get Shared Variable List" VI on an RT target?

    Hello,
    I'd like to programatically iterate through all the shared variables in a library hosted on my CompactRIO. I dropped the "Get Shared Variable List" VI into my Real-Time VI, but when I tried deploying it, LabVIEW said
    Deploying PRC_GetVarList.viPRC_GetVarList.vi loaded with errors on the target and was closed.
    LabVIEW: Failed to load shared library dscProc.dll:ni_lvdsc_process_GetTagListEnd:C. Ensure that the library is present on the RT target. Use MAX to install NI software or FTP to transfer custom libraries to the RT target.
    LabVIEW: Failed to load shared library dscProc.dll:ni_lvdsc_process_GetTagListBegin:C. Ensure that the library is present on the RT target. Use MAX to install NI software or FTP to transfer custom libraries to the RT target.
    I looked at the MAX Software Wizard, but couldn't find any DSC-related modules. Where should I be looking?
    Thanks!
    Solved!
    Go to Solution.

    Hello,
    The DSC palette is not supported on Real-Time VIs and will lead to errors when deployed.  Unfortunately, to have a successful build you will need to modify your application and remove any of the VIs from the DSC palette on your RT Target.
    Regards,
    M. Whitaker
    ni.com/support

  • How to create,read and update variables in application scope in ejb

    In my project currently i am using three layers
    1. Struts for the presentation web layer(jsp, form beans and action class)
    2. Business logic using ejb.(uses other classes for storing business logic)
    3. Dao for data base object
    I need to implement caching using hashmap in the business logic (ejb). I am getting a path link everytime my business logic access a file. What I need to do is that as many users use the same link , i want to cache it into a hashmap, so that if the same file link is accessed again it can directly got from the hashmap and hence the processing time decreases.
    Please help me how to implement this?
    I have tried the following
    1. get servlet context in the struts action class and pass it to the ejb
    2. Using of static hashmap for storing that....which i cant use coz that hasmap needs to be updated in some other java class
    Awaiting ur reply eagerly

    use CTAS method in your requirement, first before read [b]this
    venki
    http://venki-hb.blogspot.com/

  • How to build a executeable shared variable engine (DSC 8.0)

    Hello!
    At first a short overview about the actual data-flow at my system: there are several Fielpoints and a Diagnostic-PC which also produces data. All measurement data should be logged at a server. Therefore in Labview 7.1 i used the Tag-Engine and their Datalogging via Citadel-Database. My problem is that we moved to Labview 8 and i have to build a executeable engine (should run without full installation of LV 8 an the server) which has to collect data from the Fieldpoints and the Diagnostic-PC and log this data too. Is there any possibility in DSC 8 to start the SVE with LV code? I miss functions like starting the tag-engine programmaticly with a predefined signallist which was possible in LV 7.1.
    Best regards,
    Jan

     In 8, you do not need to start the engine programmatically, it always run. To load a predefined net list all you need is to use the deploy library.vi from the engine control pallete. So for your server you need to have dsc runtime installed, then build and application where you can pick a library file to deploy and put the exe and library file on the server.

  • How to read shared variables inside event structure ?

    Hi,
    I have a problem that my shared variables do not update inside event structure. The program(s) I am trying to get working is seen in the attached screenshot. It works as follows:
    0. I start the vi that is unsquared.
    1. I write a string to a shared variable using vi in red square. I make sure that its updated using write-wait-read.
    2. I run the other vi (blue square), this changes the boolean shared variable.
    The unsquared vi has been running the whole time, it has event structure bind to boolean shared variable change (the one in blue vi). After I have runned the blue vi, the unsquared vi should change the indicator values to match the ones in red vi. However I have to start the blue vi multiple times to get it to change, sometimes even 6 times.
    Also, when I change the value in red vi to a third value and start blue vi multiple times, the unsquared vi shows all the variables. I.e. I put "cat" to red then start red, put "mouse" to red then start red,... and then start clicking blue... Unsqured shows cat, mouse,..., dog (dog is the default).
    How can I force the shared variable to update inside event sructure. I want the current value of the variable, not some historical values.
    Attachments:
    Screenshot-5.png ‏108 KB

    Found the buffering... disabling it solved the problem... thanks.
    FYI, there is another solution that I just found out... attached. Adding timeout to the event structure and the variable read outside the event structure... This makes the shared variable strings (one that is read outside and the otherone that is read inside) different.
    Could someone explain why the variables are in different state even if they are used in the same place and looped with 10ms intervals?
    Juha
    Attachments:
    Screenshot-6.png ‏110 KB

  • Weird delay reading shared variables

    Hello,
    I'm working on a project were I'm monitoring some prodution lines. I'm using DSC module's OPC server to connect to PLCs on the production line and I've created bound variables on my labview project of the PLC's tags.
    On my project I have one main VI were I show information about the production lines and were I can access several subVIs were I show other information about those lines. Then I have a VI that is running in background were I'm reading about 50 shared variables from the PLC and where I'm registering some data in a MySQL database, datalogging data on the Citadel database and registering alarms.
    The problem I'm having is that on the VI that runs in background I noticed a delay reading the variables that are reading containers weights from the production line. It seems that all the other shared variables don't suffer any delay, only the weight variables start having some delay when the values are increasing. It also seems like that, when I'm only running that VI alone, without running the main VI, there isn't any kind of delay. I'm reading the shared variables as shared variable nodes.
    Can anybody help me understand what's happening and how can I fix this delay? The VI that runs in background is time critical and a weird delay like that messes up my data.
    Solved!
    Go to Solution.

    Hi Mateus23,
    The shared variable has various buffering capabilites, including integration with the Real-Time FIFO feature in LabVIEW Real-Time.
    I guess that the buffering settings are causing the unexpected behavior.
    Check these resources:
    Buffered Network-Published Shared Variables (whitepaper)
    Shared Variables Properties Dialog
       - Network Page
       - Real-Time FIFO Page
    ~~

  • Read shared variable using D/3 DCS

    This is a rather odd question..  I think it can be done, but I have not yet figured how.
    A client has a DCS System (I believe from NovaTech), which communicates with a database.
    They use a different PC to get data from a cFP using Shared Variables.
    There is mention of data being sent over a Modbus Interface.
    They want to know if it is possible to read the Shared Variables directly using their DCS System.  If the DCS was from NI, it would probably be easier to accomplish.  However, I am not at all acquainted with the NovaTech product, but I believe there must be a way to innterface to it.  Probably using Data Sockets and/or PSP Protocol.
    I realize the above is rather obscure...  I have sent an email requesting more info and I am preparing the next email.  I figured that I'd better do some background investigation and ask proper questions.
    Has anyone attempted such a thing or similar?  How about reading Shared Variables from Non-NI software?  I did find some threads discussing reading/Writing (to/from) Shared Variables using LabWindows-CVI, but I suspect this will be quite different.  Maybe I'm wrong.. 

    Thanks Christian.
    I will continue in this thread after I find out more details from the client.
    RayR

  • Reading shared variables

    hi ,
    im having problems reading a shared variable value from a vi ,
    i created a project library , periodic i/o server deployed it. created the shared variables i needed . bound them , created my new vi  draged the shared variable i wanted to read , just a time value , set it to a indicator , then ran the two vi s the triangle has apeared on both the main vi and the hmi vi ,and is green , no conflicts arose , but the hmi vi isnt displaying the data ,
    both vi s are on the same computer , have i missed somthing ,?

    Hi Vadajooz,
    Good Morning and I hope your well today.
    I was wondering how you got on with your application and if you still require support?
    If so, I would be interested to know what version of LabVIEW you are using?
    I would make two simple VIs, one to write to the variable and one to read from the variable. 
    1. Create the bound variable.
    2. Deploy the library,  make sure it appears in the Distributed System Manager (DSM - LabVIEW 8.6+) or Variable Manager (LabVIEW 8.5 - ).
    3. Run the writer VI, for example, just have a switch (true/false) and when you change the switch state does the status update in the DSM or Variable Manager?
    4. If so, then run the reader VI, is the status matching the writer and there DSM/Variable Manager. 
    *DSM/Variable Manager can be found by going to tools>>... in the VI toolbar. 
    If you are still having problems,
    A. There is a known issue with bound variables in LabVIEW 8.6 - so I can inform you on this if you are using it.
    B. I would confirm that the variable is deployed - to do this right-click the library and select Deploy All. 
    C. Make sure you write to the variable before reading from it.
    D. Add error cluster indicators and note any errors you see.
    E. Please attach your simple (test) project - so we can confirm its correct. 
    I hope this helps, 
    Kind Regards
    James Hillman
    Applications Engineer 2008 to 2009 National Instruments UK & Ireland
    Loughborough University UK - 2006 to 2011
    Remember Kudos those who help!

Maybe you are looking for

  • I tried to eject a cd, didn't work so I turned off the computer and now it keeps getting stuck at the gray screen. How do I fix it?

    Here are a few more details. I put in a game cd for a windows computer, once I opened the folder on the desktop I noticed the install application was .exe so I tried to eject the cd but no matter what I tried on the computer it wouldn't come out. I w

  • Dear God!! Somebody please help

    I have a slot loading i-mac. I've bought a new hard drive and all I want to do is install os9 on it. I cannot get the computer to boot from CD. I have tried holding C, a myriad of open firmware commands and nothing. The drive is not faulty as it has

  • E70 Freezing after sending Texts

    after I write my text, add in the contact name for the recipient, then press send, the "sending now bar" appears and seems to load fully. Then it goes back to the text message general menu and the phone freezes. This happens every time I send a text

  • Database configuration in CMC

    Hello, My question is about database configuration in CMC. Which option 1) Use original database to logon  2) Use custom database to logon should be used? And what is the difference between them?

  • B2B login from External Site

    Hi All I have an existing website.  As part of that website I have an area that customers can enter a username and password and login. How can I redirect that login button to log into my webtools database Regards Vincent