Subvi help serial communication

So here's my problem: 
I have a .vi that works fine, and would like to make it into a subvi for another program.  The problem comes when I incorporate it into another .vi as a subvi the main.vi doesn't update the values being passed.  The main .vi does start the subvi, but on the main.vi the values I would like to monitor aren't updating.  Any suggestions?
Hart1529.vi is the subvi, and test.vi is the main.vi i'm using as a stripped down example (that I was hoping would work).
Attachments:
Hart1529.vi ‏46 KB
testsubvi.vi ‏18 KB

Your question concerns an issue that I lean on pretty heavily when teaching a LV Basics course. It has to do with the way LV executes code. The thing to remember is that ther are only two rules that define how LV executes code and when it generates results:
Rule 1: Any node (and a "node" can be about anything on your block diagram - programming structures, functions, subVIs, etc) will begin executing as soon as all its inputs are satisfied. Basically, this means LV is an inherently parallel programming language, This is one of the big differences between LV and privative text-based languages such as C++.
Rule 2: A node will only output data when it finishes executing. This is the one that you are running into. An indicator that has its terminal located inside a loop will update each time the loop iterates, but move the terminal outside the loop and it will only update when the loop finishes. Nodes that are subVIs behave the same way. They only generate outputs when they finish executing.
Hope this helps...
Mike...
PS: getting into a LV Basics course would probably be money well spent.
Certified Professional Instructor
Certified LabVIEW Architect
LabVIEW Champion
"... after all, He's not a tame lion..."
Be thinking ahead and mark your dance card for NI Week 2015 now: TS 6139 - Object Oriented First Steps

Similar Messages

  • Changing the name of serial communication example in lab windows. Urgent help required

    I am using the example of getting data from rs 232 in lab windows. I want to use this in my final year project that's why I want to change its name that appears as  "serial communication example" how can I change its name and how can I make its exe file that will run on any system even without lab windows.
    How can I modify this example to save the data. I am very new to lab windows, I was using hyper terminal previously.

    I am not informed about the file format that hyperterminal uses.  However, CVI allows wiring to files.  To get a list of functions that deal with file handling, press <Ctrl-Shift-p> to get the "Find Function Panel" dialog.  Type in "file" and press the "Find" button.  This will open a list of funtions that contain "file" in their name.

  • How do i open a new window? serial communication problem

    I am trying to make a serial communication interface, with changeable settings,
    but i wanted it to be that the settings to be openend in a new window, how am i able to do that.
    I tried to make a separate subvi, but unable to do that, here is my explanation in images and the vi files.
    -Just a student-
    Attachments:
    LVTerm.vi ‏50 KB

    Hello Nandha,
    SubVI's can be created by selecting the part that you want in the subVI and than select "create subVI" from the "Edit" menu.
    Or cut the selected part and open a new VI and paste in the code. Then you have to connect all the controls and indicators to your connector pane. To do this right click the icon in the upper right corner and "Show connector". Select a pattern that has enough connectors, my personal favorite is the 4x4x4. Select the wire tool and select a connector and then the control or indicator you want to connect. Try to keep controls to the left and indicator to the right.
    Now you have to figure out when you want to show the settings window. Is it necessary that the communication goes on during manipulation of the settings?
    Kind regards,
    André
    Regards,
    André
    Using whatever version of LV the customer requires. (LV5.1-LV2012) (www.carya.nl)

  • Problem download: Java serial communication

    Hi,
    I need to work with Java serial communication api for Windows.
    As mentioned on SUN site, downloaded the following:
    1) comm2.0.3.zip, &
    2) rxtx-2.0-7pre1-i386-pc-mingw32.zip
    Extracting, unable to see win32com.dll & javax.comm.properties
    Can you help me?
    Thanks,
    Priya

    Hi priya
    There is problem in your downloaded s/w
    Download commAPI once again then try
    Read the readme file and follow the instruction

  • VISA Read function Read buffer problem in serial communication

    Hi,  I use VISA write and read function in serial communication app, the device continuously sends 0x00 if it is not receive a request from Labview program running on PC.
    And the request sent by labview is programmable. I met a weird problem, each time the request changes, the VISA read buffer output port still shows the last request firstly, from second time, shows the right request.
    It works like: Req code: ... 50, 51,51,51,50....;  VISA Read buffer: ...50, 50, 51, 51, 51, 51, 50....
    Please refer to the program.
    Attachments:
    readOne_test.vi ‏21 KB

    How are you running this?  You don't have a while loop around it.  Is it part of a larger VI?  Please don't tell me you are using the run continuously button.
    You don't have any wait statement between you VISA Write and your bytes at port.  So it is very likely the receive buffer is still empty since you didn't give your VI time to wait for the device to turn around and give a reply.  If you read 0 bytes, your VISA read string will be empty.  How does your decoder subVI (which you didn't include) handle an empty string?

  • User-specified DAQ interruptions, instrument control through serial communication

    I'm working on an instrument control program, and I've run into a structural problem that I cannot figure out.
    The instrument in question is effectively a thermostat.
    The program has two functions:
    1.)  Background sampling to record temperature in a log over time.
    2.)  Adjust temperature according to user input
    The issue is that the instrument uses EIA-232 serial communication to talk to the PC.
    This prohibits simultaneous execution.  Attempting to send a command while the program is taking a sample will result in serial blockage errors.
    So the program must interrupt background sampling until the specified command has been completed.
    I can't figure out how to do this.
    My best idea was to create a manual pause control.  If the user wants to adjust the temperature, he hits a switch to pause the sampling, sends the appropriate command, then hits the switch again to reinitiate sampling.  This method will suffice, but is not ideal.
    Beyond that, I really have no idea how to prevent the two functions from running into each other.
    Help structuring this program would be greatly appreciated,
    Thank you

    Look into Semaphores (icons with traffic light glyphs)
    Set up a Semaphore resource to the COM port that is wired to two parallel structures.
    One structure would do the background polling, the other would handle setting changes.
    Prior to background poll, lock the resource, then unlock it after the poll. Likewise for the setting change command.
    When a resource is locked, the other process cannot access it until it is unlocked. Be sure to dispose of the Semaphore when ending the program.
    -AK2DM
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    "It’s the questions that drive us.”
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    Attachments:
    SempahoreExample.jpg ‏256 KB

  • Serial communication from simulink to labview

    hello everybody,
    i have problems with establishing serial communication from simulink(where the data is generated) to labview (version 2010).
    i tried everything but it won t work.can you please help me on this one pleaaase.
    thanks ^^
    Attachments:
    projet labview.vi ‏15 KB

    thanks so far for your replies,
    to clarify any confusion this is my system in simulink.
    the data are decimal values
    thanks again, hope i ll receive a reply from you guys soon cause i really need to progress in my project
    Attachments:
    xxx.PNG ‏20 KB
    yy.PNG ‏35 KB

  • Serial Communication In JAVA

    Hi.
    I just wanted to know if serial communication is possible using java. If yes, which are the classes used.
    Thank you.

    I have found javax.comm for Linux and Solaris but not for Windows can any body help me about it .
    How can I comunicate using rs232 two computers using Java in Windows.
    Tkns
    I

  • Problems with Serial Communication using Labview 6 and Solaris 8

    I am working on a Driver for a Temperature Controller. But I am stuck at the very basics. I am using Labview 6 and the platform is Solaris 8 on a SUN Ultra 60 Workstation. I can not get the Serial communication to work. When I am running raw (uncompiled) code it works (I can read from and write to ttya and ttyb) but once compiled I get error code 37 (device not found). I have tried the following steps to fix this with no luck.
    1) I made sure that the "serpdrv" file is in the same folder with the executable. I also make sure the serpdrv file is added as a support file when building the app.
    2) I changed from using traditional serial VI's to labview 6's new visa functions. With these "new" VI's when
    I try to initiliaze the visa device and wire a control to the "visa reference" input only 1 serial port shows up (ASRL2, missing ASRL1). I am not sure if this is part of same problem or whole new issue.
    3) I reinstalled both visa and labview 6.0.2 update hoping this would help with no luck
    4) I placed the following entry into the ".labviewrc" file
    labview.serialdevices: "/dev/ttya:/dev/ttyb"
    If anybody has had the same problem I would love to hear about it and if you have any solutions
    Jamie Shea

    Hi Jamie,
    1. Do you have NI-VISA driver installed on the machine on which you are running this executable?? If you are trying to run the executable on the same machine on which the development program has ran fine, then you can ignore this point.
    2. If you have done all the changes that are suggested by other discussions related to this topic, then try changing the Port input to Visa Serial Configure.Vi from a control to a constant and try it. In some case, I have seen this to do the trick. I think this point should solve your problem. If it does do tell me. :-))

  • RE:Serial communication using java

    Hello,
    First of all, I want to make clear thatI did not double post it as previously I posted it in Networking section..But I was told that I have not posted it at appropirate place....thats wht I am posting here.
    I am a newbie in Java.I have started with Netbeans.I have designed a interface using Netbeans.It has 5 texboxes and two buttons named "Start" and "Stop".
    I want to receive data from the serial port and display the data in text boxes.I want when I press Start button, then it should start listening to the serial port .If adat is present on serial port, then it must receive it and displayin the text boxes.when I press Stop button, then it should stop receiving data as well close connection.
    can please anyone help me on this?
    I would be highly thankful for this.
    Regards,
    Jass

    Hello All,
    I am using the javax.comm for serial communication using serial to usb converter at port COM4(I check using device manager.).Beside that I have also added the option in the programming to look into other COMs also.I have placed "comm.jar " and "javax.properties" into jdk\lib\ext and "win32.dll" into jdk\bin.
    But I am getting the following output:
    Wed Dec 24 02:23:43 EST 2008: COM4 null
    Serial port List is  javax.comm.CommPortEnumerator@1a46e30
    Serial port ID  is null
    BUILD SUCCESSFUL (total time: 0 seconds)
    The code Is as follows:
    import java.io.*;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.comm.*;
    import java.util.*;
    public class serialport implements Runnable, SerialPortEventListener
        static CommPortIdentifier portId, portId1;
        public SerialPort serialPort;
        public OutputStream outputStream;
        public InputStream inputStream;
        Thread readThread;
        static Enumeration portList;
         static String TimeStamp;
        public static void main(String args[])     
        {try {
              portId1 = CommPortIdentifier.getPortIdentifier("COM4");
              }catch(Exception e) {
          TimeStamp = new java.util.Date().toString();
          System.out.println(TimeStamp + ": COM4 " + portId1);}
               portList = CommPortIdentifier.getPortIdentifiers();
               System.out.println("Serial port List is  "+portList+"\n");
               portId = (CommPortIdentifier) portList.nextElement();
              System.out.println("Serial port ID  is "+portId+"\n");
           while (portList.hasMoreElements()) {
              portId = (CommPortIdentifier) portList.nextElement();
              if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                if (portId.getName().equals("COM3")) {
                     System.out.println("Serial port COM3 is found\n");
                serialport Port = new serialport();
                else if (portId.getName().equals("COM4")) {
                     System.out.println("Serial port COM4 is found\n");
                serialport Port = new serialport();
                else if (portId.getName().equals("COM6")) {
                     System.out.println("Serial port COM6 is found\n");
                serialport Port = new serialport();
                else if (portId.getName().equals("COM7")) {
                     System.out.println("Serial port COM7 is found\n");
                serialport Port = new serialport();
                else if (portId.getName().equals("COM5")) {
                     System.out.println("Serial port COM8 is found\n");
                serialport Port = new serialport();
      public serialport()
        try {
          serialPort = (SerialPort) portId.open("MainClassApp", 2000);
        } catch (PortInUseException e) {
                  System.out.println("Port is owned by another application \nor port cannot be opened\n");
        try {
          inputStream = serialPort.getInputStream();
        } catch (IOException e) {
             System.out.println("IOstream for port is not available\n");}
        try {
          serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
        } catch (UnsupportedCommOperationException e) {
             System.out.println("Serial port is not properly configured\n");}
        try {
          serialPort.addEventListener(this);
        } catch (TooManyListenersException e) {
             e.printStackTrace();}
        serialPort.notifyOnDataAvailable(true);
        readThread = new Thread(this);
        readThread.start();
        public void run() {
           try {
             Thread.sleep(2000);
               } catch (InterruptedException e) {      e.printStackTrace();}
        public void serialEvent(SerialPortEvent event) {
             Runtime rt = Runtime.getRuntime() ;
             Process p;
        switch (event.getEventType()) {
        case SerialPortEvent.BI:
        case SerialPortEvent.OE:
        case SerialPortEvent.FE:
        case SerialPortEvent.PE:
        case SerialPortEvent.CD:
        case SerialPortEvent.CTS:
        case SerialPortEvent.DSR:
        case SerialPortEvent.RI:
        case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
          break;
        case SerialPortEvent.DATA_AVAILABLE:
          byte[] readBuffer = new byte[1];
          try {
            while (inputStream.available() > 0)
                   int numBytes = inputStream.read(readBuffer);
                   System.out.print(new String(readBuffer));
                    break;
            System.out.print(new String(readBuffer));
                } catch (Exception e) {
               e.printStackTrace();}
          break;}  }  }Kindly help........I really wanna to know where is the error???
    Thanks
    Edited by: jass11 on Dec 23, 2008 11:39 PM
    Edited by: jass11 on Dec 23, 2008 11:51 PM

  • I use LabVIEW 7.1 but I have some problem when, I use LabVEW to read the data from serial communication

    I use LabVIEW 7.1 but I have some problem when, I use LabVEW to read the data from serial communication.
    I use LabVIEW to read the data from serial communication then, i open the example (.vi) from Serial Communication - Advanced Serial Write and Read  from LabVIEW Example. BUT it have some error message that : Error - 1073807202 occured  at property node in visa configure serial port (instr).vi -> advance serial write and read .vi
    this error code is undefined. no one has provide a description for this code, or you might have wired a number that is not an error code to the error code input.
    I don't know why? please help me. thank you.

    When I copy that code into "Explain Error" I get: "VISA:  (Hex 0xBFFF009E) A code library required by VISA could not be located or loaded."
    You may have a bad install of VISA or the wrong version of VISA loaded. Try re-installing VISA. You can get the latest version from the NI support site: http://digital.ni.com/softlib.nsf/webcategories/85256410006C055586256BBB002C0E91?opendocument&node=1....
    Also ensure that you are not pointing the example towards a serial port that does not exist.
    Please let us know what you find and what gets this working for you.
         Rob

  • Visa error handling in serial communication

    Greetings,
    I have a problem with the serial communication in my Labview program.
    I have made an application that reads from serial port, searches for beggining characters, and later counts data after that beggining characters into variables in Labview program.
    Everything work fine, but problem starts when I unplug the device from computer.
    Program blocks and I could not do anything. Even Visa Close does not do anything.
    I need to restart my computer to make my application works.
    I made some indicators in subVi, and I see that when I unplug the device the error from READ VISA changes.
    My question is:  How to handle this event(error) to restart or unblock my serial device.
    I am attaching a SubVi, that searches for starting characters " KBON,"
    Best regards,
    Chris
    Attachments:
    find_start.vi ‏12 KB

    Hi Chris,
    From the standpoint of VISA capabilities, you should be able to programmatically handle the desconection of the serial port. I am however not certain that your specific serial port hardware is OK with that.
    As to how to handle disconnection using VISA:
    I recommend using the "timeout" pin of the VISA Configure Serial Port VI
    when the timeout is reached and no data is transferred, you will get a timeout error on the error wire.
    You can then programmatically handle this error case in your code in a very similarly to this example.
    I recommend experimenting to see what error codes your application throws, or alternatively you can use the VISA error codes documentation to create the case structures needed to hande these errors.
    In all cases, you should close the VISA reference. Leaving the serial port rescource "open" in your operating system may be the reason why you need to restart your computer every time (as restarting will for sure free up the serial port rescource).
    Best Regards,
    T Simon
    National Instruments
    Applications Engineer
    Certified LabVIEW Developer - Certified TestStand Architect

  • Dsc modbus - Serial communication input/holding registers

    Hello,
    I am trying to create a labview application to act as a Modbus master and control multiple stepper motors. I have the DSC module in labview and am using a serial communication with an RS-485 converter. I have followed this guide: http://www.ni.com/white-paper/13911/en/  However, the driver I am using does not support coils, it only uses input and holding registers and I have not found a guide or tutorial that shows me how to create a labview application that can read and write to a specific address. For now all I want to do is turn the motor on and off using labview. I have used a modbus simulator to communicate with the driver and can do everything I want to do through the simulator. I can not get labview to do anything for me. I would be very happy if someone could direct me to a tutorial that can help me understand labview dsc module for reading and writing to addresses using modbus. 
    Meesh

    Ok, so this is really strange. I solved my problem in a round about sort of way. I'm using a modbus simulator (mdbus) to help me communicate with the driver/stepper motor so I know which address to use. But after I use the simulator I get a communication port error when I try to use Labview. It's like the port is locked in with the simulator and I can't end the connection and let Labview use the same communication port. I can't find anyway to fix the problem except going to this NI site: http://www.ni.com/download/labview-run-time-engine-6.1/746/en/  downloading this software and using the "repair" function. Then I can do a system restart and cycle the power on the driver/motor and then Labview with work again through the correct port. But if I need to use the simulator again then I have to go through this whole process again. Does anyone know what the heck is going on? Or if there is a better way to clear the communication port?? 

  • Serial communication via Sub vi

    i wrote a vi to communicate with my test device. It works fine if it is used as a "standalone". When i try to call it from another vi as a Subvi no communication is possible. (time out). In the main vi i never use serial communication.
    Greetings J.Lankenau
    (english is not my native language)

    Neither. NI-GPIB is for communicating with a GPIB instrument and NI-VXI is for a VXI chassis. You have an instrument connected to the serial port. All you should need is NI-VISA installed. The VISA driver is on your LabVIEW drivers CD. Check MAX to see if it's already installed. You can also get the latest here.

  • Java Serial Communication (Student)

    Hey there,
    Im new to this forum and currently a full time student (not in any type of computer programming). I am currently working on an assignment in Java Programming and I am having difficulty with having my program executing the scenario i want.
    If anyone is willing or available to help me, I will post the code I currently have and explain where I am encountering problems.
    The program is a basic serial communication applet, that has two buttons and a textfield. The first button is supposed to send the text in the textfield (writeButton) and the second button will be used to read the text (readButton).
    For now I am creating two separate applets, one to write and one to read, with only one button "performing" an action in each.
    Thanks

    Ok I got rid of the code that I don't think I need and added the actionListener.
    The program compiles with no errors, but will still not send the messageString.
    Do you see where the possible errors are?
    import java.io.*;
    import java.util.*;
    import javax.comm.*;
    import javax.swing.JApplet;
    import java.awt.event.*;
    import java.awt.Graphics;
    import java.applet.*;
    import java.awt.*;
    public class ProjectWrite_test_2 extends JApplet implements ActionListener
         static Enumeration portList;
         static CommPortIdentifier portId;
         static String messageString = "Hello, world!\n";
         static SerialPort serialPort;
         static OutputStream outputStream;
         //public static void main (String [ ] args) {
         String OutString;
         TextField textFieldWrite;
         Button writeButton;
         Button readButton;
              public void init()
                    writeButton = new Button ("Press to Write");
                    writeButton.addActionListener(this);
                    readButton = new Button ("Press to Read");
                   Container window = getContentPane();
                   window.setLayout(new FlowLayout());
                   window.add(writeButton);
                   window.add(readButton);
                    textFieldWrite = new TextField(50);
                   add(textFieldWrite);
                    String outString = textFieldWrite.getText();
                   public void paint (Graphics g)
                             String s = textFieldWrite.getText();
                   g.drawString(s, 40, 50);
              public void actionPerformed(ActionEvent c)
                        portList = CommPortIdentifier.getPortIdentifiers ( ) ;
                                  while (portList.hasMoreElements ( ) ) {
                                       portId = (CommPortIdentifier) portList.nextElement ( ) ;
                                       if (portId.getPortType ( ) == CommPortIdentifier.PORT_SERIAL) {
                                            if (portId.getName ( ) .equals ("COM1")) {
                                                      try {
                                                           serialPort = (SerialPort)
                                                           portId.open ("SimpleWrite", 2000);
                                                      } catch (PortInUseException e) { }
                                                      try {
                                                           outputStream = serialPort.getOutputStream ( ) ;
                                                      } catch (IOException e ) { }
                                                      try {
                                                           serialPort.setSerialPortParams (9600,
                                                                SerialPort.DATABITS_8,
                                                                SerialPort.STOPBITS_1,
                                                                SerialPort.PARITY_NONE) ;
                                                      } catch (UnsupportedCommOperationException e) { }
                                                      try {
                                                           outputStream.write(messageString.getBytes());
                                                      } catch (IOException e) { };
                             }

Maybe you are looking for

  • I am not able to startup my database

    Hi, I have deleted the old archive log and I forgot to shutdown database before deleting archivelog and now when I am trying to start the database, It is returning Must use resetlogs or no resetlogs option for database open. When I am doing "alter da

  • XMLType.schemavalidate() results in LSX-00310

    I have the following problem: I want to insert schemabased XML documents into a XMLType column. Since XMLType offers the schemavalidate() method, I want it to check the document if it is correct. However, the check always ends in a LSX-00310 Error (l

  • Question on zen v plu

    When I rip boughten cd's, it auto rips them in a wma format which sound like crap how do I rip song into the zen in a mp3 formatfrom CD's also i do not see or can find" SUPER RIP" what is this? And last but least my zen+ does not synce how can I solv

  • Database is not started/Online

    OS-Windows XP SP-3 Max DB 7.7 -24994 Runtime environment error [db_online -s] ; 20099,'NSP' has stopped unexpectedly,(View Application Event Log) The description for Event ID ( 13 ) in Source ( MAXDB ) cannot be found. The local computer may not have

  • Photoshop CS3 & Mac Leapard Problem.. Type Tool question mark

    I am having a problem that I cannot figure out. I just bought this software and was able to use it a couple of times before it started doing this. The problem is when I use the Type Tool and choose a color it will show a question mark (?). When I typ