Tuning multiple interrelated PID controllers

Hi,
I am attempting to control forces with pneumatic pistons and regulators. Feedback comes from a 6 degree of freedom load cell. I already have a program designed with PID controllers which works ok. The trouble is tuning the parameters.
So far, I have used Ziegler-Nichols for each single parameter, by testing each piston/PID element individually. Then I have adjusted these manually to make them work together. This means a lot of trial and error, often with unsuccessful results.
Is there any way to tune these parameters and account for the interdependence between them all at the same time?
To clarify the situation:
I am controlling 5 degrees of freedom (Fy is constrained). I am using 7 pistons, and 12 PID controllers - since several pistons affect multiple degrees of freedom.
I can give more detailed information, but I am most interested in suggestions about tuning methods.
Richard Godley

your project seems very interresting.
however, i do not understand how you use your PID modules. what do they control? is it just force or also position of your load. what is the feedback input itself?
in general, when having several degree of freedom, try and locate the element (in this case piston) that most sensitively and effectively affect each separate degree. with that, the other pistons should just try and keep their own degree of freedom locked. this lead to automatic self regulation, where each piston has its own tuned PID.
one other way of doing it, is by using a minimalisation routine, which would set your feedback parameters relative to your input. do that for several desired inputs, and you should get then an array of tuning parameters for each input vaule. you can then create a tuning function for each PID, which will work on whole range of inputs.
also: try to use only one PID per piston. otherwise they work against each other.
if you would detail the system, we may have better ideas.
... And here's where I keep assorted lengths of wires...

Similar Messages

  • I have a problem with simulation in Matlab 6.5 and LabVIEW for PID controllers

    I have a problem with simulation in Matlab 6.5 and LabVIEW. I have some methods for granting PID controllers in MATLAB to go but not LabVIEW. International Teams degree to transfer two but when I go past the fourth degree no longer work. We changed the formula for calculating the parameters for grade four and gave me some good values for Matlab award but when I put on LabVIEW have not settled. formulas are available in PDF and are. Please help me and me someone if possible. Thanks
    lim.4 generation parameters in MATLAB program and comparison methods are for second-degree transfer function.
    Solved!
    Go to Solution.
    Attachments:
    Pt net.zip ‏2183 KB

    This is the VIs what i try to make,but is not work. This pdf. document was used to create last VIs PID. thenk you for your colaboration.
    Attachments:
    PID create by me.vi ‏312 KB
    tut_3782.pdf ‏75 KB

  • Centrally manaaging multiple Moto/Zebra Controllers

    I am assisting my network engineer in centrally managing multiple Moto/Zebra controllers. For example, we want to manage 3 RFS6000 controllers using a RFS7000. We are using Wing 5.7.2.0. I can get the RFS6000 to be adopted by the RFS7000 but it adopts under the "default" RF Domain for the RFS7000. Is there any way we can have the RFS7k adopt the RFS6k while keeping the RF Domain from the RFS6k and all of it's configurations? Mind you, I am still in the learning process so forgive me if I ask too many questions.
    This topic first appeared in the Spiceworks Community

  • Question on multiple table view controllers

    Hey there,
    I don't need to know the exact code of how to do this, I am just wondering for now if this is the right way to do this.
    What I want is my Root View to have 3 prototype cells(including disclosure indicators), including a subtitle, and 1 button at the bottom of the prototype cells.
    When tapping a cell, (there are 3 different table view controllers that can open, depending on the cell chosen), it pushes to a Table View Controller that allows the user to tap a row they want, a check mark shows the row they tapped, then when they tap the back button to go back to the Root View, I want their choice from the Table VC they were just at, to show up in the subtitle field under the prototype cell they chose. Same goes for the other 2 prototype cells.
    Once the user has chosen all 3 and can see their choices in the prototype cell's subtitle, they can tap the submit button, and it will read from a database, querying all the selections from the 3 subtitles in the root view, and take them to a new Table VC that displays the results, with disclosure indicators for each selection from the database. They can go back to the Root VC, or they can choose a row from the database results and go into the Detail VC for that selection.
    I hope this makes sense, so I ask this:
    1. Is this the best way to pass data back to the Root VC, as in using the subtitle of the prototype cell's. I liked it because the subtitle is smaller than the cell so it shows what you chose from the Table VC you were at and checked a certain value from.
    2. If this is the way to do it, how do I pass the values from the Table VC that has a checkmark that you chose, back to the Root VC's subtitle for that cell you initially chose.
    Side note: The button on my Root VC takes up the whole width of the screen and i can't seem to change it, is there a way to customize the size with my mouse or do I need to write custom code?
    I am not at home so I can attach pics later as I have a 'not working model' that shows what I am doing and might be easier to udnerstand.
    Any help is definitely appreciated as I just need to know if I am on the right track.
    Thanks!!

    Hey there,
    I don't need to know the exact code of how to do this, I am just wondering for now if this is the right way to do this.
    What I want is my Root View to have 3 prototype cells(including disclosure indicators), including a subtitle, and 1 button at the bottom of the prototype cells.
    When tapping a cell, (there are 3 different table view controllers that can open, depending on the cell chosen), it pushes to a Table View Controller that allows the user to tap a row they want, a check mark shows the row they tapped, then when they tap the back button to go back to the Root View, I want their choice from the Table VC they were just at, to show up in the subtitle field under the prototype cell they chose. Same goes for the other 2 prototype cells.
    Once the user has chosen all 3 and can see their choices in the prototype cell's subtitle, they can tap the submit button, and it will read from a database, querying all the selections from the 3 subtitles in the root view, and take them to a new Table VC that displays the results, with disclosure indicators for each selection from the database. They can go back to the Root VC, or they can choose a row from the database results and go into the Detail VC for that selection.
    I hope this makes sense, so I ask this:
    1. Is this the best way to pass data back to the Root VC, as in using the subtitle of the prototype cell's. I liked it because the subtitle is smaller than the cell so it shows what you chose from the Table VC you were at and checked a certain value from.
    2. If this is the way to do it, how do I pass the values from the Table VC that has a checkmark that you chose, back to the Root VC's subtitle for that cell you initially chose.
    Side note: The button on my Root VC takes up the whole width of the screen and i can't seem to change it, is there a way to customize the size with my mouse or do I need to write custom code?
    I am not at home so I can attach pics later as I have a 'not working model' that shows what I am doing and might be easier to udnerstand.
    Any help is definitely appreciated as I just need to know if I am on the right track.
    Thanks!!

  • Multiple wireless AP controllers

    We have a wireless 4402 controller in production.  We would like to have a wireless 5508 controller on the same network using different APs for now. We would also use different SSIDs until the new equipment has proven to be reliable.  Is this possible?
    Microsoft DHCP is used to assign IPs to the access points currently.

    Hi
    What version of code running on your 4402 & what version are you planning to put on 5508 ?
    Yes it is possible to advertise a SSID on selected APs using AP-Groups. 5508 should be much more reliable than 4402 (its all about software code running on these hardware).
    If you want roaming between 4402 managed AP & 5508 managed AP then you have to put these two wlc in to same mobility group and prefer to configure same RF group.
    When it comes to RF group 7.4.x or 7.6.x RRM is not compatible with anything below 7.2. Since you 4402 cannot have any thing above 7.0.x  You cannot put both WLC in same RF group (assuming you run a latest code like 7.4 or 7.6 on your 5508).
    HTH
    Rasika
    **** Pls rate all useful responses ****

  • RT - PID Gains - where and when to use them

    The attached is example code for controlling a temperature chamber. The question is where and when to use PID Gains? This code looks as though the PID Gain is used for the variable/parameter temperature (i.e. the temperature is the controlled variable).
    So would there be just one PID Gain per controlled variable/parameter (temperature in this case) or would each device controlling temperature in the system get a PID Gain?
    In this example, the fan and lamp are controlling the temperature.
    Attachments:
    Exercise 8-1.zip ‏171 KB

    Russ_in_Louisville wrote:
    I came here for help as this is where NI pointed me in their failure. I did not come here to get my "mental model" attacked.
    Can you accept that your model of the system might be wrong, though? In this thread from a few weeks ago, multiple experienced users told you that what you had on your block diagram was an array, and yet you insisted - repeatedly - that what you had was a cluster. Your model was that the item on the block diagram was a cluster, leading to the question "how do I get an index display on it?" which made no sense, because the item was in fact an array. And, when you finally realized you were wrong, you couldn't even admit it or thank the people who pointed out your error - it just "turned out" that the constant wasn't what you thought it was. I am trying to tell you that you are making a similar error here by asking questions about the system that do not correspond to what the system actually does.
    "Parameter/variable" isn't clear. There is correct terminology. A PID controller has, as inputs, a process variable and a setpoint. The process variable is the parameter you want to control, such as temperature. The setpoint is the desired value of the process variable. Let's say you do have a temperature control system where there is both a heating system and a cooling system (again, not the situation in your sample code). The two systems could both be driven by PID and share the same setpoint and process variable. Some control options for this system:
    - a single PID controller with one set of gains, where a negative output drives the cooling system and a positive output drives the heater (or some variation on this), if both the heater and chiller have similar performance characteristics.
    - two PID controllers, each with a set of gains, one controlling the heating and one controlling the cooler.
    - a combination of these two: a single controller with gains that are selected based on the setpoint or process variable, which is known as gain scheduling. The advantage to a single controller is that you'd never have the two controllers fighting each other.
    You could also have a code that controls several similar processes (for examply, multiple identical temperature chambers). In that situation you could have a single set of PID gains but multiple controllers each with a different setpoint and process variable.
    So there's not a simple yes/no answer to when you need a separate set of PID gains or an additional PID controller. It depends on the characteristics and design goals of your system. Does that help?

  • Temperature controllers

    any recommendations on temp cont. out there?
    also , as far as price which is cheaper...serial or gpib control ?
    i do not need fast response...it will be used in a high temp test
    environment with soaks at least 20 minutes
    thanks
    Sent via Deja.com http://www.deja.com/
    Before you buy.

    In article <7t07on$br8$[email protected]>, wrote:
    >any recommendations on temp cont. out there?
    >also , as far as price which is cheaper...serial or gpib control ?
    >i do not need fast response...it will be used in a high temp test
    >environment with soaks at least 20 minutes
    >thanks
    National Instruments makes several PID controllers. I have one that is no
    longer offered (P/N 320563-01), but I haven't gotten it tuned up yet.
    Harry
    "Little Joe for the Big Heisman, '99"

  • Fuzzy - PID produces jumpy output control

    I'm working on a VI that will control the voltage to a blower and I'm trying to do a fuzzy controlled PID to get the pressure of a chamber to the setpoint.
    When I test it out on the actual system the voltage output from the PID jumps up to a fixed voltage and holds it there for a while making the pressure overshoot the setpoint by a long ways. After a while it will move the voltage down and hold it at another fixed point for a while.
    Right as of right now its just the setpoint going into the "fuzzy controller" function, the P output from that goes into a bundle that feeds into the PID controller and the PID directly controls the voltage.
    Just wondering if there is some setting I need to change so the "P" value can be updated during the process or if there is some function that I'm missing to make this work properly.
    Thanks,
    Dan

    Dan,
    Thanks for the information.  You might have received a response more quickly if you had given that information in your initial post.  Specific questions tend to get more and better responses than general ones.
    Fairly symmetrical is probably good enough.  Systems with significant asymmetry can be difficult to control.
    You say the PID output only makes step changes. Are the changes always to full scale or zero or does it change to several intermediate values in steps? How large are the steps (in terms of the chamber pressure or percentage of full scale)?
    I think I would test this by first trying to get the PID controller to run as a porportional controller ovver a small portion of the range.  Disable the fuzzy controller. Run at an intermediate range such as 80-100 psf. See if you can tune the PID to give you a proportional control behavior in that range, even if it overshoots somewhat or takes a minute to reach the setpoint.  Then you will know the PID controller works and can make adjustments from there.
    If you are not familiar with tuning PID controllers, search the web for several tuning systems which should get you started.
    After you get it working reasonably well in one range repeat the process in several other ranges (2-5 psf, 15-40 psf, 50-70 psf,...) and note whether the tuning changes significantly from range to range.  That will give you some clues about how adaptive the system needs to be.
    Lynn

  • Multiple MVC

    Hi guys,
    I am developing an BSP application with MVC Pattern.
    I am using data binding , where model binds the data between controller and view,which is very effective and efficient.
              I have read in many logs and also in sap help
    that it is good approach to follow 1 controller per view
    but when using multiple controller for multiple views
    where data has to be shared between several views and controllers. when we have multiple controllers,it is possible to have a central instance that can access the application data.
    how the data should be shared between the model and views and controllers when they are multiple.
    I have read WAS book by SAP press which also doesn't cover handling multiple MVCs..
      Can some one please explain me what is the best approach
    and how to handle it.
    Thanking you in anticipation.
    Thanks & Regards,
    Vishwanath Purohit

    Hello Vishwanath,
    You can handle multiple views with controllers using the attributes of the controllers.( You must define attributes for the controller for communication )
    The subcontrollers of your top level controler will be listed in the m_subcontrollers parameter of the top level controller.
    You can set or get the attributes of the subcontrollers using the set_attribute  or get_attribute method respectively.
    controller = me->get_controller( controller_id = '<id of controller>' ).
    controller->set_attribute( name = '<name of attribute>'
                                value = '<value>' ).
    or
    value = controller->get_attribute( name= '<name of attribute>' ).
    Similary you can access the top level controller from the subcontroller using the m_parent parameter of the subcontroller.
    data : parent type ref to <class of top level controller>
    parent ?= m_parent.
    parent->set_attribute( name = '<name of attribute>'
                           value = '<value>' ).
    or
    value = parent->get_attribute( name= '<name of attribute>' ).
    In this way you can communicate with controllers. The controllers in turn communicate with their models.
    Hope this helps.
    Regards,
    Loveline.

  • Getting stuck in a subroutine

    Here is a script I am using to export recordings made with EyeTV. My problem is when the script is triggered from EyeTV when the recording is done it works just fine. If I run the script as a stand alone app on a selected recording it gets stuck at the CheckMultiplePIDs subroutine. I put a display dialog before and after the "set logdata to every paragraph of input_text" line and only the first dialog box shows and nothing obvious is happening. I tried to take out the non-relevant code to make things a little easier to read. If you want to see all the code I can post that.
    -- Run the python MarkCommercials script for the given recording
    -- this must be run with the RecordingStarted script
    -- it will check if there were multiple PIDs for the recording and runs MarkCommercials for each pid
    -- requires updated MarkCommercials which allows specifying the pid
    -- by Ben Blake, September 2009
    global LogMsg
    on RecordingDone(recordingID)
            set LogMsg to ""
            CheckMultiplePIDs(recordingID)
            --display dialog "in RecordingDone" & recordingID
            --disable this if you do not want a logfile written
    end recordingdone
    -- one more edit for plex export, only section below.
    on readFile(unixPath)
            set foo to (open for access (unixPath))
            set txt to (read foo for (get eof foo))
            close access foo
            return txt
    end readFile
    -- testing code: this will not be called when triggered from EyeTV, but only when the script is run as a stand-alone script
    on run
            tell application "EyeTV"
                    set selectedRecordings to selection of programs window
                    repeat with theRecording in selectedRecordings
                            --display dialog "theRecording ID " & (get unique ID of theRecording as integer)
                            set recordingID to unique ID of theRecording as integer
                            my RecordingDone(recordingID)
                    end repeat
            end tell
    end run
    on CheckMultiplePIDs(recordingID)
            --check if there are multiple Video PIDs in the file
            tell application "EyeTV"
                    set input_text to my read_from_file((path to "logs" as string) & "ETVComskip" & ":" & recordingID & "_comskip.log")
                    if (count of (input_text as string)) > 0 then
                            set logdata to every paragraph of input_text
                            set logdata_lastrow to (item ((count of logdata) - 1) of logdata) as string
                            if (items 1 thru 19 of logdata_lastrow) as string = "Video PID not found" then
                                    --multiple Video PIDs, rerun MarkCommercials until successful
                                    set recrdingIDInteger to recordingID as integer
                                    set rec to recording id recrdingIDInteger
                                    set LogMsg to "RecordingDone found multiple PIDs for recording ID: " & recordingID & ", Channel " & (channel number of rec) & " - " & (title of rec)
                                    set PIDs to (items 44 thru ((count of logdata_lastrow) - 2) of logdata_lastrow) as string
                                    set delims to AppleScript's text item delimiters
                                    set AppleScript's text item delimiters to ", "
                                    set PID_List to {}
                                    set PID_List to every word of PIDs
                                    set AppleScript's text item delimiters to delims
                                    repeat with pid in PID_List
                                            my launchComSkip(recordingID, pid)
                                            repeat while (my mcIsRunning())
                                                    delay 5
                                            end repeat
                                    end repeat
                            end if
                    end if
            end tell
    end CheckMultiplePIDs
    on read_from_file(target_file)
            --return the contents of the given file
            set fileRef to (open for access (target_file))
            set txt to (read fileRef for (get eof fileRef) as «class utf8»)
            close access fileRef
            return txt
    end read_from_file
    on write_to_file(this_data, target_file, append_data)
            --from <a class="jive-link-external-small" href="http://www.apple.com/applescript/sbrt/sbrt-09.html">http://www.apple.com/applescript/sbrt/sbrt-09.html</a>
            try
                    set the target_file to the target_file as string
                    set the open_target_file to open for access file target_file with write permission
                    if append_data is false then set eof of the open_target_file to 0
                    write this_data to the open_target_file starting at eof
                    close access the open_target_file
                    return true
            on error
                    try
                            close access file target_file
                    end try
                    return false
            end try
    end write_to_file
    on launchComSkip(recID, pid)
            if pid = "" then
                    set cmd to "'/Library/Application Support/ETVComskip/MarkCommercials.app/Contents/MacOS/MarkCommercials' --force --log " & recID & " &> /dev/null &"
            else
                    set cmd to "'/Library/Application Support/ETVComskip/MarkCommercials.app/Contents/MacOS/MarkCommercials' --force --log " & recID & " --pid=" & pid & " &> /dev/null &"
            end if
            do shell script cmd
    end launchComSkip
    on mcIsRunning()
            set processPaths to do shell script "ps -xww | awk -F/ 'NF >2' | awk -F/ '{print $NF}' | awk -F '-' '{print $1}' "
            return (processPaths contains "MarkCommercials")
    end mcIsRunning
    --Subroutine to remove troublesome characters
    to parseout(stringtoparse)
            set illegals to (ASCII character of 60) & (ASCII character of 62) & (ASCII character of 58) & (ASCII character of 34) & (ASCII character of 47) & (ASCII character of 92) & (ASCII character of 124)
            repeat with i from 1 to count (illegals)
                    set testletter to (text i thru i of illegals)
                    set the_offset to 1
                    repeat
                            set the_offset to offset of testletter in stringtoparse
                            if the_offset > 0 then
                                    set stringtoparse to (text 1 thru (the_offset - 1) of stringtoparse) & "_" & (text (the_offset + 1) thru -1 of stringtoparse)
                            else
                                    exit repeat
                            end if
                    end repeat
            end repeat
            return stringtoparse
    end parseout

    While this isn't a solution, you could write lots of output to a log file. You should eventually see where it is stalling out. I use textwrangle to look at the log file while it is running.
    the code escape is. Notice the tag is the same for start & end:
    your code here
    Here is my log program.
       Write debug text to the file /debugLog.txt
       example 
          --- debug on Friday, February 11, 2011 2:23:20 PM   --- 
       start program.  
       thePath = Macintosh-HD:
       End of program.  
       fyi:
       The applescript log statements are ignored when not run from the script editor.
    on run
       -- thePath points to the folder in which to create the debug log.
       global thePath, firstRunning
       (* Use the path to clause to create a generalized  path statements *)
       set thePath to (path to startup disk as string)
       set firstRunning to ""
       -- Write a message into the applescript editor event log.
       log "  --- Starting on " & ((current date) as string) & " --- "
       debug("start program.  ")
       Your program here...
       debug("thePath = " & thePath)
       debug("End of program.  ")
    end run
    on appendToFile(fileId, theData)
       local theSize, writeWhere
       set theSize to (get eof fileId)
       set writeWhere to theSize + 1 as integer
       write theData to fileId starting at writeWhere
    end appendToFile
    -- based on log by James Reynolds, 12.18.2000, University of Utah
    on debug(theMessage)
       global thePath, firstRunning
       local theSize, startupDiskName, pathToLog, fileReference
       set pathToLog to (thePath & "debugLog.txt")
       try
          set fileReference to (open for access file pathToLog ¬
             with write permission)
          log "firstRunning = " & firstRunning
          set theSize to (get eof fileReference)
          if firstRunning = "" then
             set theSize to (get eof fileReference)
             log "theSize = " & theSize
             if theSize is equal to 0 then
                appendToFile(fileReference, "New log created on " & ((current date) as string) & " " & return)
             end if
             appendToFile(fileReference, "   --- debug on " & ((current date) as string) & "   --- " & return)
             set firstRunning to "running"
          end if
          appendToFile(fileReference, theMessage & return)
          close access fileReference
          tell application "Finder"
             set the creator type of the file pathToLog ¬
                to "R*ch"
          end tell
       on error mes
          try
             log "  We got an error when writing to  " & mes
             close access fileReference
          end try
       end try
    end debug
    Robert

  • Lookout4.0​.1 gets hanged in this process.

    Dear Sir,
    We are communicating 19 PID controllers working on modbus
    protocol, 5 devices working on ASCII protocol (Digital I/Os)
    and six Flow totalisers running on Modbus protocol. All the
    driver objects used, are inbuilt driver objects of Lookout4.0.1.
    We have purchased 500 I/Os Runtime plus Development version
    of Lookout4.0.1. Our problem is that the Lookout gets
    automatically hanged after working for about 12 hours.
    Is this a problem of using Runtime cum development version
    or something different.
    Waiting for your quick response...
    With Warm Regards,
    Girish Nalgirkar.
    for Theta Controls, Pune.
    India.

    Mr. Nalgirkar,
    It is fairly rare to see a case where Lookout hangs after running for such a long time. The first thing I would do is verify that 4.0.1 build 61 is being used on the runtime sysyem. You can determine the build of Lookout 4.0.1 by selecting "About Lookout" from the "Help" menu. If you do not have build 61, I would strongly recommend contacting NI to download the free upgrade. Contact National Instruments E-Mail Support through www.ni.com/ask. Make sure you mention your current version of Lookout, Serial Number, Keycode, and Purchasing Company, as NI must verify your license.
    One possible cause of hanging behavior in Lookout is a problem with a hardware driver. However, since you are able to run for 12-hours with no problems, then it sounds like a hardware d
    river problem is not the issue.
    One other question. What operating system are you using? The general rule-of-thumb is that WinNT and Win2000 systems generally have much higher relibaily than Win95/98 systems.
    Regards,
    Greg Caesar
    National Instruments,
    Applications Engineer

  • Error message from HP E1411B under Labview

    I am running a VXI HP1401 mainframe with an E1406 GPIB controller, E1411 DMM (addr 24) and E1476 Mux (addr 25). I get the following error message when I try to access the device using an address of "VXI::24":
    hpe1411b Initialize.viDriver Status: (Hex 0xBFFF00A5) The interface type is valid but the specified interface number is not configured.
    Any ideas? Thanks.
    Bob

    Bob,
    I have used the E1406 GPIB Controller before. I had a couple of problems with using this controller, which may help you out.
    NI-VISA supports multiple GPIB-VXI controllers in a single system. Because the National Instruments GPIB-VXI controller ships with a primary address of 1, NI-VISA automatically searches for any GPIB-VXI controllers at that address.
    If you have changed the primary address (for example, if you added a second GPIB-VXI controller to your system, and set the address of the second controller to 9), or if you have a GPIB-VXI controller from another vendor, you need to add it using Measurement & Automation Explorer so NI-VISA can find it. Right-click on "Devices and Interfaces" and select "Create New" to add a new GPIB-VXI interface.
    Specify the controller's GPIB primary and secondary addresses, as well as the GPIB board to which it is connected. Then specify a new GPIB-VXI interface number and its logical address (usually 0).
    Also, make sure that Servant Area address is set higher than all of your addresses (Dip Switches on HP 1406). If you have your Servant Area set lower, you will see your instruments in MAX just fine, but you won't be able to communicate to them at all.
    Joji

  • System Identification and Transfer Function of the LEGO MINDSTORM NXT Robot

    Can anybody please help with the below question.
    Using your LabView interface, input different values of power and record the output value of the number of wheel rotations. You can convert the latter into speed by measuring the diameter of the wheel. Then, type ‘ident’ in the command line of Matlab to launch a graphical user interface for system identification. Using the data collected for input power and recorded speed, you can derive the transfer function for your robot in the Laplace domain.
    You will notice that it is possible to approximate the transfer function to a first order system.
    Add disturbance to your system such as wind drag, road profile or friction. You might want to model the disturbance as a sinusoidal waveform.
    Analyse the system response in LabView in order to tune the response.
    Finally, write a LabView program to test your controller.
    Set both Integral and Derivative to 0
    Increase the value for Proportional controller to 0.5, 0.8, 1, 1.1, 1.3, and 1.5
    Select a suitable simulation stop time.
    Compare each simulation results and draw some conclusions.
    Record the steady-state error. Has it dropped to near zero?
    Record the rise time. Has it decreased to less than 0.5 second? And for what values of Kp?
    Check whether this response is realistic i.e. a real cruise control system generally cannot change the speed of the vehicle from 0 to 10m/s in less than 0.5 second.
    Adjust the gain (Kp) to give a reasonable rise time and add an integral controller to eliminate the steady-state error.
    Change both Kp and Ki and see what happens to the response. When you adjust the integral gain Ki, start with a small value since a large Ki can destabilise the response. (Ki =0.001, 0.002, 0.003, 0.004).
    Then you need to adjust both the proportional gain Kp and the integral gain Ki to obtain the desired response. Record the values of Kp and Ki that can meet all the design criteria.
    Write the PID-feedback control LabVIEW program as described above.
    Does it work? Quantify! Show us it is working
    Hand in a short report on the PID project on the cruise control of the LEGO MINDSTORM NXT Robot. Your report should contain an introduction to cruise control and uses of PID controllers, a brief explanation of how PID feedback control works. The printout of the Block Diagram and Front Panel of your LabVIEW program should be attached at the end of your report.
    Put it all together. There are many questions that can be explored and written up in the result section. Be creative.
    Here are some things that may be addressed: Check whether your system can stabilise speed to within 1%. What are the optimal PID parameters that you have found? Can you choose PID parameters to both reach the set speed quickly and also maintain the speed within good accuracy once the system has reached the set speed? Can you control the speed of small steps? Explain your results?

    Thanks for that.
    DanHarryman wrote:
    HI ToolMonkey
    You should be able to build control system to do this using PID control VIs. The following paper is a good place to start when working with PID systems. 
    http://www.ni.com/white-paper/6440/en
    Let me know how you get on using some of the functions in this. 
    Thanks 
    Dan.H
    UKAE

  • Filr 1.1 LDAP Preview Not Returning Correct Number of Result

    I'm finishing set up of Filr 1.1 in our environment but noticed today that the LDAP preview does not return the correct number of results. The query:
    (&(objectClass=Person)(|(employeeType=E)(employeeT ype=Y)(employeeType=Z)))
    has been tried against multiple AD domain controllers and has so far returned 3 different user counts - 2895, 2800, and 2700. Mostly it always returns 2800. The correct count using powershell with the exact same ldap filter is over 5000.
    I would prefer not to try a sync until I have some confidence that it will complete successfully. Any suggestions?

    On Wed, 22 Apr 2015 17:26:03 GMT, jameswatson3
    <[email protected]> wrote:
    >
    > I'm finishing set up of Filr 1.1 in our environment but noticed today
    > that the LDAP preview does not return the correct number of results. The
    > query:
    >
    > (&(objectClass=Person)(|(employeeType=E)(employeeT ype=Y)(employeeType=Z)))
    >
    > has been tried against multiple AD domain controllers and has so far
    > returned 3 different user counts - 2895, 2800, and 2700. Mostly it
    > always returns 2800. The correct count using powershell with the exact
    > same ldap filter is over 5000.
    >
    > I would prefer not to try a sync until I have some confidence that it
    > will complete successfully. Any suggestions?
    Could you try it with filr 1.2?
    https://download.novell.com/Download...d=q-mgVFDsOKQ~

  • UCS Basic Questions

    Hi
    I am new to Cisco UCS, I have a little idea about Nexus Series Switches.
    I would like to know what exactly are the differentiating factors between -
    UCS 6100 Fabric Interconnect
    Nexus 5000 Series
    MDS 9000 Series switches
    All these can support FCoE, 1G / 10G Ports, I know 6100 Fabric Interconnect has built in UCS Manager
    where I can place these in a real worl solution.
    Second -
    Can we make multiple Blades in a chassis, or Multiple Blades in Multiple Chassis conected to a Single / Multiple interconnected 6100 Fabric Interconnect / Nexus / MDS switch, to combine as a Single / One Server.
    Appreciate your kind response.
    Tahnks & Regards
    Sunny

    Sunny,
    I hope the beow information helps clarify present questions and future knowledge you might get in the near future.
    All the information is taken form the link that follows: 
    http://www.cisco.com/en/US/docs/solutions/Enterprise/Data_Center/VMDC/2.0/design_guide/archOver.html
    Cisco Nexus 5000
    The Cisco Nexus 5000 Series  (http://www.cisco.com/en/US/products/ps9670/index.html) switches deliver  high performance, standards-based Ethernet and FCoE that enable the  consolidation of LAN, SAN, and cluster network environments onto a  single Unified Fabric. Each switch contains a single unified crossbar  fabric ASIC and multiple unified port controllers to support fixed ports  and expansion modules.
    Cisco UCS and UCSM
    Cisco UCS 6100 Series Fabric Interconnects (http://www.cisco.com/en/US/partner/products/ps10276/index.html) is a family of line-rate, low-latency, lossless, 10-Gbps Ethernet and Fibre Channel over Ethernet interconnect switches.
    Cisco UCS 5100 Series Blade Server Chassis (http://www.cisco.com/en/US/partner/products/ps10279/index.html) supports up to eight blade servers and up to two fabric extenders in a six rack unit (RU) enclosure.
    Cisco MDS 9513
    The Cisco MDS 9513 Multilayer Director allows you to deploy  high-performance SANs using a high-performance, protocol-independent  switch fabric. It provides uncompromising high availability, security,  scalability, ease of management, and transparent integration of new  technologies for extremely flexible data center SAN solutions. The Cisco  MDS 9513 is compatible with first-, second-, and third-generation Cisco  MDS 9000 Family switching modules.
    For more information, see: http://www.cisco.com/en/US/products/hw/ps4159/index.html.
    Cisco MDS 9134
    The Cisco MDS 9134 Multilayer Fabric Switch is a 1RU chassis that  provides line-rate 4-Gbps and 10-Gbps ports. It expands from 24 to 32  ports in 8-port increments and optionally activates 2 10-Gbps ports. The  Cisco MDS 9134 offers non-blocking architecture, with all 32 4-Gbps  ports and the 2 10-Gbps ports operating at line rate concurrently.
    The 10-Gbps ports support a range of optics for connection to the Cisco  MDS 9000 family core using 10-Gbps Inter-Switch Link (ISL) connectivity.  The Cisco MDS 9134 can also be stacked using copper CX4 X2 transceivers  to cost effectively offer up to 64-port densities. The Cisco MDS 9134  supports quick configuration and task wizards that allow it to be  deployed quickly and easily in networks of any size. Powered by Cisco  MDS 9000 NX-OS/SAN-OS Software, it includes advanced storage networking  features and functions and is compatible with Cisco MDS 9500 Series  Multilayer Directors and Cisco MDS 9200 Series Multilayer Fabric  Switches, providing transparent, end-to-end service delivery in  core-edge deployments.
    For more information, see: http://www.cisco.com/en/US/products/hw/ps4159/index.html.
    Cisco MDS 9148
    The Cisco MDS 9148 Multilayer Fabric Switch is a one rack unit (1RU)  top-of-rack (ToR) chassis that provides 48 line-rate 8-Gbps ports for  storage networking deployments. It can expand from 16 to 48 ports in  8-port increments. The Cisco MDS 9148 delivers a non-blocking  architecture, with all 48 1/2/4/8-Gbps ports operating at line-rate  concurrently.
    The Cisco MDS 9148 supports the Cisco Device Manager Quick Configuration  Wizard, which allows it to be deployed quickly and easily in networks  of any size. Powered by Cisco MDS 9000 NX-OS Software, it includes  advanced storage networking features and functions and is compatible  with Cisco MDS 9500 Series Multilayer Directors and Cisco MDS 9200 and  other 9100 Series Multilayer Fabric Switches, providing transparent,  end-to-end service delivery in core-edge deployments.
    For more information, see: http://www.cisco.com/en/US/products/hw/ps4159/index.html.
    PS:  If you find it helpful, please mark it with a 5 stars grade!
    -Kenny

Maybe you are looking for