Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Java (http://www.chiefdelphi.com/forums/forumdisplay.php?f=184)
-   -   SerialPort viOpen error (http://www.chiefdelphi.com/forums/showthread.php?t=124941)

tech2077 20-01-2014 00:07

SerialPort viOpen error
 
I was trying to run the posted code in order to test out the serial port on our cRIO. The code faulted with a null pointer error due to the serial resource not being initialized and returning the error "VI_ERROR_RSRC_NFOUND in function viOpen"

Code:

import edu.wpi.first.wpilibj.IterativeRobot;
import edu.wpi.first.wpilibj.SerialPort;
import edu.wpi.first.wpilibj.visa.VisaException;

public class RobotTemplate extends IterativeRobot {
   
    public SerialPort serial;
   
    public void robotInit() {
    }
    public void autonomousInit() {
    }
    public void autonomousPeriodic() {
    }
   
    public void teleopInit() {
        try {
            serial = new SerialPort(115200);
        } catch (VisaException ex) {
            System.out.println("Error to initialize serial port at 115200 baud " + ex.getMessage());
        }
    }
   
    public void teleopPeriodic() {
        try {
            serial.print("test");
            System.out.println(serial.read(1));
        } catch (VisaException ex) {
            System.out.println("Error");
        }
    }
}


eddie12390 20-01-2014 11:31

Re: SerialPort viOpen error
 
Quote:

Originally Posted by tech2077 (Post 1329585)
I was trying to run the posted code in order to test out the serial port on our cRIO. The code faulted with a null pointer error due to the serial resource not being initialized and returning the error "VI_ERROR_RSRC_NFOUND in function viOpen"

Code:

import edu.wpi.first.wpilibj.IterativeRobot;
import edu.wpi.first.wpilibj.SerialPort;
import edu.wpi.first.wpilibj.visa.VisaException;

public class RobotTemplate extends IterativeRobot {
   
    public SerialPort serial;
   
    public void robotInit() {
    }
    public void autonomousInit() {
    }
    public void autonomousPeriodic() {
    }
   
    public void teleopInit() {
        try {
            serial = new SerialPort(115200);
        } catch (VisaException ex) {
            System.out.println("Error to initialize serial port at 115200 baud " + ex.getMessage());
        }
    }
   
    public void teleopPeriodic() {
        try {
            serial.print("test");
            System.out.println(serial.read(1));
        } catch (VisaException ex) {
            System.out.println("Error");
        }
    }
}


The Java SerialPort implementation seems to be buggy, I don't think that the issue found here http://firstforge.wpi.edu/sf/go/artf...3699545405 50 has been fixed yet.

It may also be useful to check the following
  1. State of the Console Out switch (You don't need it on if you're trying to do something like interface with a sensor over the serial port)
  2. No CAN plugin installed if you're not trying to use CAN (They take control of the serial port)
  3. Correct cable (Some implementations require a special DB9 cable known as a null modem cable)

AllenGregoryIV 20-01-2014 11:36

Re: SerialPort viOpen error
 
Quote:

Originally Posted by eddie12390 (Post 1329676)
The Java SerialPort implementation seems to be buggy, I don't think that the issue found here http://firstforge.wpi.edu/sf/go/artf...3699545405 50 has been fixed yet.

It may also be useful to check the following
  1. State of the Console Out switch (You don't need it on if you're trying to do something like interface with a sensor over the serial port)
  2. No CAN plugin installed if you're not trying to use CAN (They take control of the serial port)
  3. Correct cable (Some implementations require a special DB9 cable known as a null modem cable)

1 and 2 are not the problem, I reimagined the cRIO for this setup with him last night and made sure to remove the CAN drivers and turn off Console Out.

We saw that bug, but the fix was attached in May and should have been rolled into the 2014 release, I would think. Plus this isn't the same error as that one.

slibert 22-01-2014 14:02

Re: SerialPort viOpen error
 
Quote:

Originally Posted by tech2077 (Post 1329585)
I was trying to run the posted code in order to test out the serial port on our cRIO. The code faulted with a null pointer error due to the serial resource not being initialized and returning the error "VI_ERROR_RSRC_NFOUND in function viOpen"

Code:

import edu.wpi.first.wpilibj.IterativeRobot;
import edu.wpi.first.wpilibj.SerialPort;
import edu.wpi.first.wpilibj.visa.VisaException;

public class RobotTemplate extends IterativeRobot {
   
    public SerialPort serial;
   
    public void robotInit() {
    }
    public void autonomousInit() {
    }
    public void autonomousPeriodic() {
    }
   
    public void teleopInit() {
        try {
            serial = new SerialPort(115200);
        } catch (VisaException ex) {
            System.out.println("Error to initialize serial port at 115200 baud " + ex.getMessage());
        }
    }
   
    public void teleopPeriodic() {
        try {
            serial.print("test");
            System.out.println(serial.read(1));
        } catch (VisaException ex) {
            System.out.println("Error");
        }
    }
}


I'm working with a few teams who are using the nav6 IMU, and they are running into this problem too.

It's sporadic.

SerialPort settings we use are 57600, 8, N, 1

The nav6 sends a stream of 30-40 bytes packets at about 20-50Hz rate, so a stream of bytes is arriving when the serial port is opened.

[cRIO] edu.wpi.first.wpilibj.visa.VisaException: VI_ERROR_RSRC_NFOUND in function viOpen
[cRIO] at edu.wpi.first.wpilibj.visa.Visa.assertCleanStatus( Visa.java:151)
[cRIO] at edu.wpi.first.wpilibj.visa.Visa.viOpen(Visa.java:6 3)

Here's a note on the error:

"...there doesn't seem to be any consistency with when the error occurs. Occasionally it would happen after a few times of sending new code to the robot and sometimes it would happen after I had just powered on the robot. I wasn't able to find anything that seemed to be a specific trigger. I was typically able to fix it by leaving the robot powered off for a period of time and then powering it back on."

[Side Note: If possible, if the Java SerialPort class is being modified, can the setReadBufferSize() method please be made public?]

BradAMiller 22-01-2014 16:47

Re: SerialPort viOpen error
 
Check this thread:

http://forums.usfirst.org/showthread...t-viOpen-error

Brad


All times are GMT -5. The time now is 22:33.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi