Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   NI LabVIEW (http://www.chiefdelphi.com/forums/forumdisplay.php?f=182)
-   -   Coding in a sequence. (http://www.chiefdelphi.com/forums/showthread.php?t=125626)

DarthMaulCIS 01-02-2014 16:06

Coding in a sequence.
 
1 Attachment(s)
So in the below picture, I want to make the Restraint Solenoid to retract when I press Button 3(I'll use a Select block). I want the Winch motor to then run a for a set amount after the Restraint is retracted. I assume I need one more frame in the Flat sequence and a Wait command for a few seconds, but I don't know where to go from here. Pictures to go with explanations would be appreciated. Thank you guys.

Mark McLeod 01-02-2014 20:33

Re: Coding in a sequence.
 
I wouldn't put the sequence you describe into Teleop.
It'd be easier on you to put a sequence like you describe into Periodic Tasks.

So, your sequence can be thought of as these discrete frames:
  1. Retract solenoid; Wait 500ms (half a second to give the retraction time to complete)
  2. Set Winch motor to speed (1.0); Wait 3000ms (or however long it takes the winch to do it's work)
  3. Set Winch Motor to 0 speed
  4. When does the solenoid get extended to complete the cycle?
Here's an example of something similar:

DarthMaulCIS 02-02-2014 13:43

Re: Coding in a sequence.
 
I plan for the solenoid to re-extend after the winch brings the catapult back down.

Initially, the solenoid is holding back a catapult. When it retracts(the button is pressed), the catapult will launch. Then, the winch will start after the catapult launches, to pull the catapult back to starting position. Once it is back to the starting position, the solenoid will re-extend to hold back the catapult again until the driver hits the fire button again.

Why wouldn't it work in TeleOp?

Alan Anderson 02-02-2014 14:02

Re: Coding in a sequence.
 
Quote:

Originally Posted by DarthMaulCIS (Post 1336326)
Why wouldn't it work in TeleOp?

Teleop is called by Robot Main each time the Driver Station sends a packet of data, 50 times per second. It's supposed to quickly do its job and be done. If it doesn't run to completion before the next DS packet arrives, it'll start tripping the system communication watchdog and your ability to control the robot will suffer.

Using a long-running loop, or waiting for an event to occur, should not be done in Teleop.

Mark McLeod 02-02-2014 14:11

Re: Coding in a sequence.
 
Teleop MUST execute and complete/exit in less than 20ms, otherwise you will lose driver control.
It has to do this to keep up with the driver commands flooding in from your drivers.

If you call a sub vi that delays or add a delay of any kind into Teleop that is more than that 20 ms limit, then your driver's will begin to lose control as their command packets start to get dropped while the robot continues to do what Teleop was last told what to do.
For small time skips the drivers will start to notice slow or jerky robot reaction.
If you use the default Safety Config on the drive motors, then your robot will jerk to a halt after only a tenth of a second. Manipulators that are in motion will continue in motion and not be able to be stopped until your delay in Teleop finishes and Teleop is allowed to process the driver control commands again.
If you delay for really significant amount of time (seconds) and the Safety Config is not used, then the robot will continue driving on it's own according to what it last heard before you hit the button that started the sequence.
With no driver control that probably means crashing into a wall or your alliance partners.

matthewdenny 02-02-2014 14:45

Does the periodic in java need to execute in 20ms. If so is there a Periodic tasks in Java?

DarthMaulCIS 02-02-2014 15:19

Re: Coding in a sequence.
 
oh ok. thank you guys!

DarthMaulCIS 02-02-2014 16:28

Re: Coding in a sequence.
 
So the command will still execute correctly in Periodic Tasks, right?

Mark McLeod 02-02-2014 17:02

Re: Coding in a sequence.
 
Yes.
You just need to enclose your code in a While loop that runs forever (and a little delay to keep from hogging the CPU).

You can pretty much do anything that you'd do in Teleop.

Invictus3593 04-02-2014 09:35

Re: Coding in a sequence.
 
Quote:

Originally Posted by matthewdenny (Post 1336371)
Does the periodic in java need to execute in 20ms. If so is there a Periodic tasks in Java?

There is an entire Forum for FRC Java here on CD! Better to post there as you will get some good answers from FRC Java veterans!

Joe Ross 04-02-2014 20:21

Re: Coding in a sequence.
 
Quote:

Originally Posted by matthewdenny (Post 1336371)
Does the periodic in java need to execute in 20ms. If so is there a Periodic tasks in Java?

Yes, the telopPeriodic method in java in the IterativeRobot template must execute within 20ms.

There are a few things you can do to work around this.
1) Use the Simple Robot template
2) Use a state machine.
2a) Switch to the command framework (which uses a state machine). See http://wpilib.screenstepslive.com/s/...nomous-program
3) Run the code in a new Task. This would be equivalent to Periodic Tasks in LabVIEW.

DarthMaulCIS 10-02-2014 18:38

Re: Coding in a sequence.
 
Quote:

Originally Posted by Mark McLeod (Post 1336034)
I wouldn't put the sequence you describe into Teleop.
It'd be easier on you to put a sequence like you describe into Periodic Tasks.

So, your sequence can be thought of as these discrete frames:
  1. Retract solenoid; Wait 500ms (half a second to give the retraction time to complete)
  2. Set Winch motor to speed (1.0); Wait 3000ms (or however long it takes the winch to do it's work)
  3. Set Winch Motor to 0 speed
  4. When does the solenoid get extended to complete the cycle?
Here's an example of something similar:

If I put this in my code (adjusting for time and the parts i want to call) would it work?

Mark McLeod 10-02-2014 18:44

Re: Coding in a sequence.
 
That will work as is in Periodic Tasks.
Just drop it by itself onto the Block Diagram.

DarthMaulCIS 10-02-2014 19:11

Re: Coding in a sequence.
 
1 Attachment(s)
Quote:

Originally Posted by Mark McLeod (Post 1340866)
That will work as is in Periodic Tasks.
Just drop it by itself onto the Block Diagram.

Sweet. I added solenoids in with the motor. In Begin, the solenoid starts in Forward, then in Periodic, the solenoid is retracted when Button 1 is pressed, then 1 sec later, the motor starts, then after X seconds, the motor stops and then the solenoid goes back to Forward. Does that describe the pic I have?

Mark McLeod 10-02-2014 19:23

Re: Coding in a sequence.
 
Looks good.

The only change I'd make is to the very first 2 sec. timer directly under "Button 1"
I'd change that to "20"

That's just because new driver commands arrive every 20ms and you really don't want the driver to have to wait 2 seconds to find out if he/she pushed the button correctly. That might annoy the drivers a little.

DarthMaulCIS 11-02-2014 16:09

Re: Coding in a sequence.
 
Quote:

Originally Posted by Mark McLeod (Post 1340893)
Looks good.

The only change I'd make is to the very first 2 sec. timer directly under "Button 1"
I'd change that to "20"

That's just because new driver commands arrive every 20ms and you really don't want the driver to have to wait 2 seconds to find out if he/she pushed the button correctly. That might annoy the driver's a little.

Ohhhk. So that's what that's for. Thank you guys!


All times are GMT -5. The time now is 21:05.

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