Jump to content

Thang Nguyen

Members
  • Posts

    295
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by Thang Nguyen

  1. Hi,

    Could you please tell me how to work with timer if we use GOOP? For example, I want to run a pump for 5 sec. At the same time I have to do data acquisition. I have a process VI run at the behind to read data already. But I don't know how should I work with the timer, what is the best template for this case?

    Thank you so much,

    Thang Nguyen

  2. Hi,

    I have a project working with S7-300 PLC of Siemens. The requirement is reading out data inside the PLC using Ethernet. After doing some research I have the 2 options: Modbus TCP/IP and OPC server. The price of modbus TCP/IP for PLC is about $3,500.00 and the price for OPC is about $550.00. This is the reason I choose OPC protocal for this project.

    With OPC server, I have two options: shared variable and data socket.

    I have still not worked with both of them, so I don't have any experience about it.

    Do you have any recommend for em, which one I should use?

    Thank you so much,

    Thang Nguyen

  3. Hi,

    Finally, I made it run. Actually I combine the example of Jim Kring, name queue of Tomi, and the solution to pass data in the GOOP Developer of Sciware.

    You are awesome :worship: .

    I am still studying. Could you give me any recommend to make it better?

    Highly appriciate your help.

    Thang Nguyen

    QUOTE(Tomi Maila @ Apr 27 2007, 12:04 PM)

    Thang, I would really appreciate if you would
    • post screenshots of the relevant parts of your code instead of posting your complete projects

    Tomi

    Hi Tomi,

    I want to post the screenshots, but there are two many VIs in this project, so I don't know which should I upload. I will attach here some important screenshots.

    1 is the main GUI

    2 is create VI of the class instrument.

    3 is the create VI of DAQ control, which will do the logging.

    4 is the launch process VI

    5 is the read data VI which read the current variable of the class.

  4. @Tomi: Thank Tomi, I finally make the process VI run. I did use the name queue to get the reference to the queue.

    I attach here my code.

    But I still have the issue with reading the variable with the class. I have the question in the topic

    nav_m.gifRefactoring the ReferenceObject example in LV 8.2

    http://forums.lavag.org/index.php?showtopic=3788&st=30of Jim Kring, and I am still working on it now. Currently, this process can only read one time, because it can not get the data of the channel anymore. It use the queue and it can only get the data for one time only.

    Hope you can give me some idea about this issue and advice how to make my code better.

    Thank you everybody,

    Thang Nguyen

  5. Hi,

    This is the first time I work with LabVOOP and call danamically VI. There are some issues I don't know how to solve. I attach here my test classes so you can run it. This program works with the simulator DAQmx.

    I have two classes.

    One is Instrument class. This class provides the function read from instrument. In this case it is DAQmx simulator.

    The second class is DAQControl. This class has a process VI which will be call dynamically and run parallel with the main VI. This VI and the remaining of the class transfer data by queue.

    I have problem with making this process VI run and transfer data to this VI.

    I hope you give me the solution.

    Appriciate your time for reading and answering this question.

    Thang Nguyen

  6. QUOTE(Jim Kring @ Aug 19 2006, 08:09 PM)

    One of the problem I met when I work with this pattern is I can only get the variable of the object one time. In the meaning of an object, it's wrong here. I think we should be able to get the value of variable whenever we want without update these value.

    I am still learning, so maybe I say wrong. Please don't mind give me recommendation.

    Thank you,

    Thang Nguyen

  7. Hi Tomi,

    I don't know where to put this question to ask about the LabVOOP, so I put it here.

    Do we have to set anything so I can use multiple instances of one class? And is there anyway to check the exit of those class?

    When I use GOOP, I have the inspector, which give me the feature to check the status of each class. I thing there will not be that tool here, but I hope there is away to check this information.

    In my project now, when I try to create multiple instance of one class, it hangs at the create VI after the first loop runs. Should I set all of the VI in that class reentrant? I try to set it, actually, but it still stuck there.

    Waiting for your reply.

    Thank you

    Thang Nguyen

  8. QUOTE(Nullllll @ Apr 18 2007, 01:39 PM)

    sorry but i mean how it will open atuomatically???

    As Jim Kring said, you go to Files/VI properties/ select Category -> Windows apperance and

    "Set your subVIs to open front panel when called and close afterward if originally closed"

    Then put this VI inside the case structure. When this VI is called, it will open automatically.

  9. Hi,

    I am currently working on a project which requires both data acquisition and control the system. Because I don't have experience on the control side, so I don't know how to make a good architecture for the program. That why I need your advices.

    In my past projects, data acquisition, in the main program, I have two loops. One is get the event from the GUI, and the second one is processing the events, doing the sequential tasks. I work with OOP (GOOP & LabVOOP), so all of the tasks as logging and displaying are done by those objects. In the main program, I create all of the necessary objects, and then get the references from the controls on GUI. Then in DAQ process VI, I will call the Read VI of each instrument then pass the data to the Display object, Logging object. (I learned this from the GOOP example :) )

    One of the issues of this architecture is I have to get the references of all the GUI and pass to Display object form the beginning then in the Display object, the process VI just pass the data to these references. This is not really flexible. If there are some events happen when the process run, I can not update those references immediately. I have to stop the processes, then change the input references. For example, I have some signals which are displayed on numeric indicators, and I have a check box for each signal to select weather it is plotted in the Waveform Chart. First, if I select 3 channels to be plotted, the display object will get the information though the initialize stage to display in the process VI. But if I want to select more channels, I can not update in the run-time, or I have to stop the process, and then update it.

    Could you give me some recommendations?

    I highly appreciate your time for reading and answering this question.

    Thang Nguyen

  10. Hi,

    I am now working on a project with LabOOP. After familiar with GOOP, I find a little bit difficult when working with labOOP. For example, I want to create a seperate thread running to acquire data as the process VI in the GOOP. But here, I think I have to do it myself. Is it right? Do you have any pattern to continously acquire the data while the main program can run another task?

    Or should I make it like GOOP? :)

    Thank you,

    Thang Nguyen

  11. Dear Kurt,

    Sorry, but I still have trouble with these call by ref stuffs :headbang: .

    I have some questions.

    + First, I tried to build the plugins.llb like you which only include the create VI which will be call by ref VI. But in my plugins.llb, there are only these create VI. Why in your plugins.llb there are also other VIs? Beside that, I built exactly like you. The program can read in the configuration file already. There are just remaining problem with call by ref.

    + Second, this is one of my error:

    Is it the problem with path?. My program runs well, so there is no problem with VIs.

    Error 1003 occurred at Open VI Reference in weaDataIO.CreateByRef.vi->WEA Create IO FP Objects__wea.vi->DAQ Main Screen.vi

    Possible reason(s):

    LabVIEW: The VI is not executable. Most likely the VI is broken or one of its subVIs cannot be located. Open the VI in LabVIEW using File>>Open and verify that it is runnable.

    VI Path: D:\My Project\Bin\plugins.llb\weaDataIO.FieldPoint.Create.vi

    + Third, this is another error, about the queue in GOOP

    Error 1 occurred at Enqueue Element in weaDAControl.Start.vi->DAQ Main Screen.vi

    Possible reason(s):

    LabVIEW: An input parameter is invalid. For example if the input is a path, the path might contain a character not allowed by the OS such as ? or @.

    ==> This is the VI start the process of object.

    Waiting for your reply.

  12. Thank you very much for your help.

    I think I should tell about my file structure. I think that it may help.

    + "GUI" directory to store the GUI VIs.

    + "SUBVIs" directory to store the sub VIs (which is not GOOP).

    + "GOOP" directory to store GOOP object.

    + "DB" directory to store configurationg file.

    + "DataFiles" directory to store logging files.

    I want to know beside the llb from GOOP. Do I have to add another directory when build the .exe file?

    Thank again.

    Thang Nguyen

  13. QUOTE(SciWare @ Apr 3 2007, 06:20 PM)

    I'll have a look at this and get back to you soon with something that will help you out.

    Hi Kurt,

    This is my remaining error when running the .exe. I built the .exe with only specificing the call by reference VIs only.

    I hope you can understand something from here. I have the same error for another object which acquise the data.

    Error 1013 occurred at Invoke Node in weaLogger.LaunchProcess.vi->weaLogger.New.vi->weaLogger.Create.vi->DAQ Main Screen.v

    Possible reason(s):

    LabVIEW: Cannot load front panel.

    The front panel for D:\My project\My Application\WEAapplication.exe\weaLogger.Process.vi could not be loaded but is required by this property or method.

    Waiting for your reply.

  14. I have a small problem with this. In one of my GOOP VI, I use a VI from OpenG. Then when I build the llb files, it is added automatically in the llb. Now, when I build the .exe file. I meet this error:

    Polymorphic VIs cannot be used as Startup/Exported or Dynamic VIs for applications or shared libraries.

    C:\Program Files\National Instruments\LabVIEW 8.2\user.lib\_OpenG.lib\array\array.llb\Sort 2D Array__ogtk.vi

    so I can not build the .exe file.

    Please tell me the solution.

    Thank you,

    Thang Nguyen

  15. Hi,

    @ Kurt: Please tell me more detail how did you build the llb for GOOP Developer object? In each your llb example, I see there are alot of VIs. Do we have to build the project for all of files? I did not see your project in the directory. It makes me confuse.

    @ Tomi Maila: I have just try to add the directory of the object as you say, but in the GOOP, there are some templete VIs still not finish. The exe builder can not run.

    How about another sub VIs?

  16. QUOTE(tcplomp @ Mar 30 2007, 03:45 PM)

    Yes,

    The 'http://zone.ni.com/reference/en-XX/help/371361B-01/glang/create_queue/' target="_blank">Obtaine queue' function has a boolean input that is: 'create if not found? (T)', and an output 'Created new?'.

    Also you use a local to get your queue's from, maybe you run into some race condition, could you add your vi?

    Ton

    I solved it by use the read queue status. If it returns 1 I will make it 0 :). Otherwise, I will delete it. I don't know this is a good way or not?

    The queue is used relating to many VIs, so I can not upload it :(. It's used to send data from the process of acquisition VI to logging VI.

    Thank you for your help again.

    Thang Nguyen

  17. QUOTE(Ben @ Mar 30 2007, 02:36 PM)

    Is the VI that creates the queue always in a run or reserved to run mode after they are created but before they are closed?

    I am asking this because the error = 1 is invalid object. This will happen if the queue was already destroyed. Part of teh house keeping work done by LV is to keep track of resource that are allocated by each VI and releasing them when the VI goes idle.

    So...

    If the creators of the queues goes idle and or are unloaded form memory. LV will kiil the queue in your behalf.

    Ben

    Thank you,

    I also think about the case the queue is destroyed, but I did not destroy it. The VI that created the queue runs only one time at the beginning of the program. And when the program exit, I destroy the opject in the program. Then, I intend to flush and destroy the queue, but it's not work. Is there anyway to test if there is existing the queue in the memory or not? If it's already destroyed, I don't need to destroy the queue :).

  18. I has just finished coding a project with LabVIEW and GOOP. Now I want to make executable file for this project. My friend told me that I just need to add the VIs created by GOOP which is called by reference in to the project, and add it to the Dynamic VIs and Support Files. But when I finish building the Exe file, and when I run the .exe file, I met some error about looking for some VIs relating to the Process, Queue.

    I don't know which files I should add to the project or I should add them all?

    Thank you in advance for you time of reading and answering this question.

    Thang Nguyen

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.