Loop io & control

Hello, everyone. I was trying to create an infinity loop, and as the loop running, it prints out how many loops it has been through on the command window, and to stop the loop, user can just put a command on the command line then press enter. To do that, I created the following code:
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
int command = 0;
int count = 0;
while(true&&command==1)
count++;
System.out.println(count);
command = input.read();
The code looks fine, but it doesn't actually work at all, becuase once the system is in the loop and reach to input.read() for the first time, the system will haut, and waiting for user's input instead of carry on running, if I input any thing in, it will just run just one loop and asking input again instead of keeping running without interruption. And even if I solved the problem, System.out.println(count) will print out figure line by line instead of updating the figure just on the one same line. So, could anybody tell me how could I stop an infinity loop by a friendly user input instead of ctrl-c, and how could I constantly update the figure on the one same line instead of printing line by line??? Thank you very much for the help.

that requires more control over the console window than java allows, i think
in theory, you will need one thread to wait for input, one thread to update the
count area, it may be possible to trick windows into only updating the current
line by doing:System.out.print("Count: " + count + "\r"); Note the "\r", it forces a carriage return but not
a newline.
here is a silly bit of code that may help:class ConsoleTest {
     public static void main(String[] args) throws Throwable {
          new Thread( new GetInput() ).start();
          System.out.println("Stop?: ");
          for(int k = 0; k < 100; k++){
               System.out.print("Count: " + k + "\r");
               Thread.sleep(100);
          System.out.println("\r\n");
     public static class GetInput implements Runnable {
          public void run(){
               while(true){
                    try {
                         int k = System.in.read();
                         if(k == 'a'){
                              System.exit(1);
                    } catch(Exception e){}
}

Similar Messages

  • Closed loop velocity control based on load cell force

    Hello,
    My application is for a drill, that drills into rocks of various densities for the purpose of collecting rock core samples.
    My setup has 2 motors which get controlled, one spins the drill bit at a constant velocity, the other moves the drill mechanism along a Z axis.
    For efficient cutting, it is desired to apply a constant force between the drill bit and the rock.  I have a load cell which measures the force being exerted by the drill bit on the rock surface, and this force can be adjusted by changing the velocity of the Z axis.  So I would like to employ closed loop control to adjust the Z axis velocity to maintain a constant force on the rock.
    Platform: cRIO 9073, with NI 9505 & 9215 Modules, Labview 2010 Full with RT and FPGA modules.
    The load cell is by Transducer Techniques, and I use their TMO-1 module to condition the signal, the output of which is attached to an input of the 9215 module, where 0-100 lbs equates to 0-8VDC.
    The motors and encoders for the Drill and Z axis are connected directly to the 9505 modules.
    Right now I am using a modified version the example found in ...\examples\CompactRIO\Module Specific\NI 9505\Velocity Control (closed loop)\Velocity Control (closed loop) - NI 9505.lvproj to accomplish velocity control of the motors.
    My questions are:
    1) Do I have the appropriate NI hardware/software for this task?
    2) With my current hardware setup, what would be an appropriate way to control my Z axis velocity rate based on Analog feedback from the load cell?
    3) Development time is a critical factor, so are there any toolkits etc that are easy to get started with that would drastically decrease my development time, or do I already have everything I need?
    Thank you for your time
    -MK Hokie

    1. Your hardware and software look appropriate assuming the motors are compatible with the 9505s.  You didn't mention the NI SoftMotion module in your software list which is something you will need.
    2.  There are a few ways of doing this.  One method would be to have a force PID loop that would attempt to maintain a force setpoint by directly outputting values to your torque loop.  In this case, the drill would essentially move as fast as it could while maintaining the force setpoint.  Another option is to have the force loop output a velocity setpoint.  You would then have a velocity PID loop that outputs torque values to the torque loop.  By adding this additional velocity loop you could have control over your maximum and minimum velocities.  There are likely other alternatives as well, but these are the first two that come to mind.
    3.  Unfortunately there are no shipping examples that close the loop on force feedback.  My advice would be to start with the NI 9505 shipping example and adapt it to your needs.  There are quite a few things you will want to change though.  Do you know if you will need to use the trajectory generator to move the drill into position before starting the force control?
    Assuming you don't need any trajectory generation, you can scrap the entire RT portion of the NI 9505 example and just create the necessary FPGA code.  On the FPGA, you won't need the Spline or Synchronization code either because this information would no longer be coming from RT.   You could take these out and replace the position loop with a force loop and possibly a velocity loop and your FPGA program would basically be finished.  In fact the only real motion IP that you will need is for the encoders (assuming you want velocity control) and PID.  Then you would need to create an RT VI that allows you to send down enable, disable, PID gains, and setpoints. 
    If you do need trajectory generation, you would want to keep most of the example code the way that it is, but then program in a 'Force Mode' that utilizes the force and velocity controly as described above.  You could think of it as having two different routines programmed side by side. 
    Regards,
    Burt S

  • Can we cascade PID and PIV loops to control the servo motor

    hi
    presently we are using PID loop for controlling the motion of a servo motor using ni-7352 card. We  are not able to receive the desired response from this implemenatation. So is there any other alternative like using a PIV loop or using PID cascaded with PIV to achieve a better response. If there is possibility help us to proceed further with this.
     also tell us which is more reliable 1)using PID alone  2) Using PIV Alone 3) using PIV and PID cascaded.
    please mail to this query to [email protected]

    Sidda,
    before you start thinking about advanced control architectures I want to ask you to tell me some details about your system behavior and the control parameters that you have used. I have used 73xx boards for very dynamical systems and I have always been able to find control parameters that resulted in a very fast and stable system behavior.
    For the case that you need some help with tuning please have a look at this link. In many cases autotuning doesn't result in good system behavior but you will find a lot of interesting hints about the manual tuning process there (e. g. that increasing the Kd gain typically results in a better damped system).
    If this doesn't help please attach some screenshots from your step response and the control parameters that you have used.
    Best regards,
    Jochen Klier
    National Instruments Germany

  • Problem with looping table control in PAI

    Hi,
    I have a table control which displays 10 records at a time. In PAI it is looping only these 10 records even though itab has more than 10. I need to do some validations on all the records. How to overcome this prob.
    Thanks in advance.

    c if u want to do validationsdo it on the internal table before passing it to the table control..
    Secondly in a table control if its size on the screen is for displaying 4 records only den it will display on 4 while running even though ur table has 10 records...
    So in SE41 drag and increase the size for table control...den it will display all records..
    And if u dont want dis..den write the code for vertical scroll in table control..
    Get back to me in case u want 2 do dat..
    Hope dis helps..
    Reward if it does

  • How to do a loop for controls

    I have the same code to be run for all the ring controls.How to do this.I want to put the code inside the loop but only the controls name is to be repeated or changed.thanks in advance

    In the file attatched I included the things I thought you could do. Since all the Rings are the same you can put them in an array. The operation you are doing is allways the same so I put it in an SubVi. Now you can easily use a loop to calculate the 8 differences you are looking for.
    Hope this helps
    Chris
    Attachments:
    diff1.llb ‏58 KB

  • NI 9505 Closed Loop Position Control Example

    Hello, I have a cRIO 9073 with a NI 9505 module that I'd like to use for simple position control of a unit along a lead screw.
    I don't have the softmotion module, and am trying to write a program bassed off of the "Position Control (closed loop) - NI 9505" example to control the position the small motor attached to the lead screw (Faulhaber 2342S024CR with a 512 count/rev encoder that we had laying around)
    I've reviewed the manual PID tuning example, and have not had much luck getting the response that I'd like when making large position moves simply by adjusting Kp,Ki,Kd gains of the position loop, as the overshoot remains too high for this application when making large moves.  The system is also oscillating about the set point, and doesn't ever seem to dampen out unless I change things other parameters on the fly such as the current limit, or current loop parameters (osciallations get worse as current limit is increased).
    Can someone advise me if the components of this example are up to this task?  Or on the interactions between the current limit, current loop parameters, and position loop parameters from this example, and which parameters would have the most impact on achieving desirable system performance?
    Is there a VI available that can autotune such a motor?

    Hello - there are many reasons why a closed loop controller can oscillate - from correct settings of controller (kp,ki,kd) to making sure signals act in the appropriate direction to deadband/friction in the actuator to badly sized signals/actuators.
    Firstly, have a look at the signal your controller is outputing (ideally in LabVIEW so you can graph it). Does it oscillate - perhaps as a sawtooth, a sinewave or simply switching between maximum and minmum values. I presume the electrical motor driving the screw which is driven from some AO signal from the cRIO (could also be a PWM signal driving the motor).
    I expect (from what you say about current limit) the control signal will be oscillating by switching between maximum and minimum (e.g. +10V to -10V) or oscillating like a sinewave. What values of kp, ki, kd are you using ? If kd is non-zero, set it to zero (you only need worry about this if you want to get maximum performance). Is ki non-zero ? Try setting it to zero - any better ? If you are still getting big oscillations in your control signal, keep reducing kp (e.g. half each time?) until oscillations disappear (as you reduce kp, control signal *should* get smaller - maybe not straight way though).
    If this does not make oscillations go away, then it may be that you have a sign wrong in your loop - i.e. a positive control signal makes lead screw move in opposite direction controller expects. This should be a fundamental thing sorted out when setting up the loop - you could do an open test to check which way +ve voltage moves lead screw. If you find it moves in opposite direction - you can either re-wire, or put a "-1" gain on controller output.
    If there is any more subtle oscillations / obersvations, then try to show some plots of the lead screw motion and control signal, as that always helps when trying to diagnose what is going wrong.
    Good luck.
    Consultant Control Engineer
    www-isc-ltd.com

  • Having a qt movie auto play and loop without controls

    I have a qt movie that I want to place on a page in iweb - but i want it to autoplay and loop and do not want the controls to show at the bottom of the movie- can this be done?
    thanks

    Yes, and there's a couple different ways to do this. One way is to use a specially created QuickTime movie that will play and loop a remote movie. I've gone through some steps of how to do this here.
    (turn your volume down, loud movie at the following link)
    http://web.mac.com/makentosh/iWeb/zample/crab.html
    Another way is to edit the .js file for that page so that you set the
    autoplay to true,
    controller to false,
    loop to true,
    and adjust the size of the movie to be 16 pixels shorter to account for the missing controller. I used part of THAT technique on some movies here.
    http://web.mac.com/makentosh/iWeb/zample/abutton.html
    Here are some more specific instructions. These are for audio, but with a few changes, could be for your video as well.
    http://www.rowan-cottage.co.uk/Site/Autoplay%20Music.html

  • How do I implement a feedback loop to control a DC motor?

    I have a couple of 1 hp PMDC motors that I need to control.  I have a VI set up that can take an RPM input, convert it to a 0-5V signal that is sent through my USB-2008 DAQ to an amplifier then to the motor.  It also displays the actual RPM of the motor by converting the frequency of a signal sent by a rotary encoder attached to the motor.  I need it to be able to adjust the applied voltage when a load is applied and keep within a 1 RPM window.  What would be the best way to accomplish this.
    Dewayne

    Hi Dewayne,
    I cut out the PID part of your code and used simulated signals.  When I did that the PID loop operated as expected.  What does your actual RPM profile look like?  Have you tried using the PID autotuning VI instead of the PID VI?  I looked at your DAQ assistants and they are set up for different connection types (some are RSE and others are differential).  I would also double check to make sure that you have all of the connections set up correctly.  If you can post another copy of your VI with simulated signals that look like what you are actually getting I can take a look at the code again to see where you are running into problems.  Below is a link that will help you verify that your connections are correct.
    Field Wiring and Noise Considerations for Analog Signals
    http://zone.ni.com/devzone/cda/tut/p/id/3344
    Nick Keel 
    Applications Engineering 
    National Instruments
    Nick Keel
    Product Manager - NI VeriStand and Model Interface Toolkit
    National Instruments

  • While loop takes control of everything​, i.e. stop a while loop

    Hi everybody,
    I have a problem with a while loop, which I don't manage to stop as it
    takes control of everything.
    So, the problem is the following.
    I wrote a vi to control an Optical Spectrum Analyzer and I need it to
    scan a trace every Ta seconds. The scan must start when the user
    presses the button "Start datalogging!" and must stop when the user
    presses the button "Stop datalogging!" (this button is configured as
    "swith after pression").
    The problem is, anyway, that after starting the datalogging operation,
    the user interface becomes kinda inaccessible, the mouse pointer
    assumes the "hand format" and you can't push any button (actually you
    can't move the scroll bars either, nothing), but the one to abort the
    execution, making thus impossible to stop the acquisition or any other
    operation.
    It seems like the operation of collecting data is so "CPU consuming"
    that LABVIEW can't "listen" to any input.
    The LABVIEW version I am using is the 8.5.1.
    I hope somebody can help me solving this problem.
    Thanks a lot,
    Gianluca

    Hi,
    You may want to try the following:
    1) create a while loop, leave the conditional terminal open for now
    2) inside the while loop, create an event structure (on the same palette as 'while'- and 'for' loops)
    3) Add an event by right-cllicking the top textfield of the event structure, choose your startbutton-control in the left menu, and in the right menu scroll down to 'value change'. Before exiting this menu make sure to uncheck the checkbox for 'lock front panel'
    4 inside the eventstructure for your start-button, put your start-button control - it needs to be read by the program to work properly (unless you chose another form of mechanical action). Wire it through the wall of the event-structure and to the conditional terminal, insert a boolean 'not' to reverse the polarity.
    5) Add a constant to the 'timeout' value on the left upper corner (outside the event structure),give it the value 100 [ms]
    6) select the timeout page in the structure (it was there by default as the first page)
    7) insert your scanning program in here, it will iterate (start) every 100ms (due to your constant in step 5)
    8) add another event, select your stop button control in the left menu, select 'value change' in the right menu
    9) Place your stop-button control inside the new page in the event-structure, wire a line through the frame down to the conditional terminal
    10) you are done
    Brgds
    T

  • Image does not update in loop with control

    Hi all,
    I am trying to make a data playback vi.  I have some data recorded, and images recorded from another vi saved onto my computer.
    I want to sync the data with the video, so we can tell what was happening visually when there is something interesting happening on the waveform etc
    I successfully made a real-time playback of the data and video.  The speed of the playback is selectable and works well.  The image output is inside a while loop.
    However, I would also like to make a different case where the time is selectable via a slider.
    The setup for the video playback is almost identical.  The only difference is that instead of the loop iteration output hooked up to the image array indexing, the output of the
    front panel slider is hooked up.
    However, this small changes is a big problem!  The data in the wires updates as I slide the slider fine, but the image in the front panel does not.
    If I scroll around the front panel the image WILL update, or if I zoom in or out etc.  Any action except moving the slider updates the image.
    This is somewhat confusing because the image updates with no front panel activity at all when using the iteration # output... why should the refresh care about getting
    the indexing from one source or another?
    I tried playing around with my display settings, like resolution, acceleration, color depth.  I've also added wait times.  I also tried to put in a flat case structure with the image
    update first, then checking the slider value and shift registering that around the while loop.
    It is probably something weird with Windows, but is there some way to 'trick' LabVIEW into a redraw? 

    Ah, I'm dumb.
    So when you have a selectable case structure (lets say two cases) and an image out in each it creates two image out windows in the front panel!
    The other image out was like 3 screens away for whatever reason, and THAT one was updating just fine.
    Now to put the case structure inside the while loop instead of the other way around so I can just have one image out...

  • How to create a loop with control over iteration?

    Is it possible to create your own loop where you can CREATE your own iteration variable and change the iteration variable's count whenever its needed?
     The For loop and While loop in labVIEW have the iteration (i) provided but I can't change where it begins and such. The i always starts at i=0, however, if i can make my OWN iteration variable, where I can feed back into it whenever I need to jump to a specific iteration count, it would be awesome.  
    Thank you.

    BurningH34t wrote:
     if i can make my OWN iteration variable, where I can feed back into it whenever I need to jump to a specific iteration count, it would be awesome.  
    Thank you.
    The only thing I can think of involves a 1.21 Jigawatt Flux Capacitor and a DeLorean.
    =====================
    LabVIEW 2012

  • Performance issues using control references in Analog control loop?

    My main vi of a tensile tester control application calls a number of sub-vi's, including a analog control loop which controls the test. The control loop must update some boolean and digital indicators and respond to user input on the front panel of the main vi during a test.
    To simplify my main vi, I moved the control loop code into a sub-vi, and used control references to access the controls and indicators on the front panel. However, this has dramatically affected my loop performance, and the loop can no longer keep up with the acquisition speed.
    Do control references always cause such a slowdown? Is there anything that I can do besides moving the code back into the main vi?
    Thank You,
    David Creech

    I have had the same problem. I have discovered other funny things about references also; some kind of memory management (or mismamagement?) is taking place behind the scenes.
    Regardless, you can often do away with the references by passing the initial state of a control or indicator into the subvi, changing it inside, and passing the altered state back to the caller. Once back in the caller you update the front panel control or indicator by using a local variable.
    One thing to watch out for if using this scenario is the dreaded race condition; this can be avoided using a state machine. Check out
    http://www.advmeas.com/goodies/statemachine.html
    for a good example. It is a shame that references behave in this way; it limits thier usefulness.
    Perhaps someo
    ne else will point out a way to utilize them more sucessfully?

  • Table controls and step loops

    what are the differances between table controls and step loops?

    Hi
    It's only graphic diff. managed by diff. ways (of course):
    in steploop there isn't a table control so in PBO and PAI it has only the stataments LOOP/ENDLOOP or LOOP AT ITAB/ENDLOOP.
    The step loop is way older than table control to display the data of a table.
    check this
    Re: step loops, table controls
    -charitha.

  • Dual loop control for positioning system.-- motion ocntrol

    I am currently doing a dual loop control for a positioning system,  i use the tachometer to read the velocity and the position encoder about the position of the platform. 
    the problem i am currently encounter is that i am not sure weather the computer have the PID toolkit, because i can not find them under the control design and simulation module.  so i did a PID  use the basic labview functions, related information is in the attached documents.
    i am not sure about the dt part, did the labview have this kind of function like to calculate the simpling time??
    do i have to install the labview real_time potion? i am right using the labview 8.5
    another question is that, how i am going to let the system remember the position instead of return to 0 every time i  restarted the program? otherwise is there any other way that i can command the motor to move to the target position which is initially defined? 
    the last question is that that is it possible for me to generate a profile regarding the current and the desired position? to set a maximum velocity and acceleration.
    i do not have a motion controller, so i did not install the  motion and version module. 
    can some one suggest me a way to do this?
    Solved!
    Go to Solution.

    attached is the files.
    Attachments:
    Integral.vi ‏8 KB
    Dt.vi ‏7 KB
    A CLOSED-LOOP TEMPERATURE CONTROL SYSTEM.pdf ‏886 KB

  • How to populate data in table control  .

    hi all,
    i put matnr no. in screen no. 103
    validation is done at that screen only.
    now when i want to modify dat record
    when i put matnr no. at screen 103
    so how i will get all  data of dat number to table control screen.

    Hi Darshan,
       Here is a detailed description of how to update data in table controll.
      Updating data in table control
    The ABAP language provides two mechanisms for loading the table control with data from the internal table and then storing the altered rows of the table control back to the internal table.
    Method 1: Read the internal table into the Table Control in the screenu2019s flow logic.  Used when the names of the Table Control fields are based on fields of the internal table.
    Method 2: Read the internal table into the Table Control in the module pool code. Used when the names of the Table Control fields are based on fields of the database table.
    Method 1 (table control fields = itab fields)
    In the flow logic we can read an internal table using the LOOP statement. Define the reference to the relevant able control by specifying WITH CONTROL <ctrl>
    Determine which table entry is to be read by specifying CURSOR <ctrl>-CURRENT_LINE.
    After the read operation the field contents are placed in the header line of the internal table. If the fields in the table control have the same name as the internal they will be filled automatically. Otherwise we need to write a module to transfer the internal table fields to the screen fields.
    We must reflect any changes the user makes to the fields of the table control in the internal table otherwise they will not appear when the screen is redisplayed after PBO processing, (eg, after the user presses Enter or scrolls) However, this processing should be performed only if changes have actually been made to the screen fields of the table control (hence the use of the ON REQUEST)
    PROCESS BEFORE OUTPUT.
    LOOP AT ITAB_REG WITH CONTROL TCREG
    CURSOR TCREG-CURRENT_LINE.
    ENDLOOP.
    PROCESS AFTER INPUT.
    LOOP AT ITAB_REG.
    MODULE MODIFY_ITAB_REG.
    ENDLOOP.
    MODULE MODIFY_ITAB_REG INPUT.
    MODIFY ITAB_REG INDEX TCREG-CURRENT_LINE.
    ENDMODULE.
    Method 2 (table control fields = dict. fields)
    If using a LOOP statement without an internal table in the flow logic, we must read the data in a PBO module which is called each time the loop is processed.
    Since, in this case, the system cannot determine the number of internal table entries itself, we must use the EXIT FROM STEP-LOOP statement to ensure that no blank lines are displayed in the table control if there are no more corresponding entries in the internal table.
    PROCESS BEFORE OUTPUT.
    LOOP WITH CONTROL TCREG.
    MODULE READ_ITAB_REG.
    ENDLOOP.
    PROCESS AFTER INPUT.
    LOOP WITH CONTROL TCREG.
    CHAIN.
    FIELD: ITAB_REG-REG,
    ITAB_REG-DESC.
    MODULE MODIFY_ITAB_REG
    ON CHAIN-REQUEST.
    ENDCHAIN.
    ENDLOOP.
    MODULE READ_ITAB_REG OUTPUT.
    READ TABLE ITAB_REG INDEX TCREG-CURRENT_LINE.
    IF SY-SUBRC EQ 0.
    MOVE-CORRESPONDING ITAB_REREG TO TCREG.
    ELSE.
    EXIT FROM STEP-LOOP.
    ENDIF.
    ENDMODULE.
    MODULE MODIFY_ITAB_REG INPUT.
    MOVE-CORRESPONDING TCREG TO ITAB_REG.
    MODIFY ITAB_REG INDEX
    TCREG-CURRENT_LINE.
    ENDMODULE.
    Updating the internal table
    Method 1
    PROCESS AFTER INPUT.
    LOOP AT ITAB_REG.
    CHAIN.
    FIELD: ITAB_REG-REG,
    ITAB_REG-DESC.
    MODULE MODIFY_ITAB_REG ON CHAIN-REQUEST.
    ENDCHAIN.
    ENDLOOP.
    MODULE MODIFY_ITAB_REG INPUT.
    ITAB_REG-MARK = u2018Xu2019.
    MODIFY ITAB_REG INDEX TCREG-CURRENT_LINE.
    ENDMODULE.
    Method 2
    PROCESS AFTER INPUT.
    LOOP WITH CONTROL TCREG.
    CHAIN.
    FIELD: TCREG-REG,
    TCREG-DESC.
    MODULE MODIFY_ITAB_REG ON CHAIN-REQUEST.
    ENDCHAIN.
    ENDLOOP.
    MODULE MODIFY_ITAB_REG INPUT.
    MOVE-CORRESPONDING TCREG TO ITAB_REG.
    ITAB_REG-MARK = u2018Xu2019.
    MODIFY ITAB_REG INDEX TCREG-CURRENT_LINE.
    ENDMODULE.
    Updating the database
    MODULE USER_COMMAND_100.
    CASE OK_CODE.
    WHEN u2018SAVEu2019.
    LOOP AT ITAB-REG.
    CHECK ITAB_REG-MARK = u2018Xu2019.
    MOVE-CORRESPONDING ITAB_REG TO TCREG.
    UPDATE TCREG.
    ENDLOOP.
    WHEN u2026
    u2026
    ENDCASE.
    ENDMODULE.
    Hope this will solve your problem.
    Regards,
    Pavan.
    Edited by: PAVAN CHANDRASEKHAR GANTI on Aug 3, 2009 12:48 PM

Maybe you are looking for

  • Regenrate STACK XML  for EHP5

    Hello Guys! I have issue here, there is difference file loaded while i regenrate the XML with addtional technical usage. How will i knows which files are added today while i regenrate the XML, so that i can download those files instead of downloading

  • Search based on chosen group of contracts

    Hi, I've got a situation where I have two different databases to get data. Database #1 stores application specific data in particular a system of grouping common contracts together. Database #2 stores the entire information specific to any contract.

  • Mac system font question!

    I'm working on a Mac. American Typewriter comes with the computer as a system font. I've created a logo with this font. The client would like me to include the font in the "packaging" of the logo. Is this okay? It will be used in print, online and TV

  • When booting I get an Error 0210: Stuck Key 01 Lenovo Thinkpad

    Hello, When powering on I get this error  "Error 0210: Stuck Key 01 Press <F1> to Setup" Please give your valuable suggestions. Thanks in advance. Sukumar

  • Character Styles/Paragraph Styles in Cs5?

    I was under the impression that Photoshop CS5 included new Character Style and Paragraph Style panels, but they are not listed under the Windows menu (as was displayed in a tutorial I was watching). I purchased the extended version of the Creative Su