Variate velocity according to position

Hi all,
I'm now using PCI7330 with P70530 to control the stepper motor CTP10XXX10.
My goal is to let the motor run at certain speed as a function of its current position. Is this possible to read (position) from and write (velocity) to the drive at the same time?
Thanks,
-chen

If you are wanting to base your velocity on absolute position, it sounds as though a countour move might be ideal for what you are trying to accomplish. More on that here: http://zone.ni.com/reference/en-XX/help/371093K-01/mclvhowto/movecontourinfo/
This tool automatically creates a spline for you, blending a series of pre-determined moves in to one smooth, continuous operation. Does that sound like something that would resolve your issue?
Christopher S. | Applications Engineer
Certified LabVIEW Developer
"If in doubt... flat out." - Colin McRae

Similar Messages

  • Position-Velocity-Time vs Position Profile

    Hello,
    I have a
    question concerning the behavior of position profile and PVT contoured move.
    In the topic
    “Position Profile-Motion Assistant Help file” says:
    “Position
    profile moves give you maximum control over the position of the move …”.
    And in “Position/Velocity/Time
    (PVT)-Motion Assistant Help file” it says “PVT moves give you maximum control
    over the velocity of the move at certain times throughout the move.”
    So, it’s
    correct to say that the position generated by a PVT based contoured move is “less
    accurate” than the one generated by a position profile in respect to the
    original data points?
    If yes, is
    there any way to know in advance maximum position error?

    Hello DJ L,
    The PVT
    examples work fine. I’m using Motion Assistant 1.2.
    I’m trying
    to do a 2D move that have 2 different velocity profiles. I only have XY
    coordinates, the maximum cruise velocity and the maximum acceleration that my setup
    supports. One profile is used for straight (or almost straight) moves and the
    second at a much lower speed in curves.
    I think
    that what is causing my problem is a constraint that is out of range like you
    said. I managed to get a few points to be plotted by Motion Assistant. But the
    resulting velocity profile is unacceptable for this application (see file
    Profile1.png and PVT_Profile1.txt for data). Adjusting the time index by trial
    and error I get a more appropriate velocity profile for my needs (see file
    Profile2.png and PVT_Profile2.txt for data). The constraints for this
    application are:
    - Go to
    the maximum cruise velocity in the least amount of time (given the maximum allowed
    acceleration).
    - Maintain this
    cruise velocity with the minimum variation until the next change in velocity
    profile.
    - The XY
    coordinates defines a cutting path, so distortions in position should be minimum.
    I’m looking
    for a set of equations that could generate data in the PVT format that meet
    this requirements and it should be possible to put this in C++ program because adjusting
    and testing in Motion Assistant application would not be possible. Could you help me in developing those equations?
    The file “data_profile.xls”
    is one real example and contains XY coordinates with the respective move
    constraints.
    Regards,
    Attachments:
    files.zip ‏141 KB

  • Storing a position value from the previous frame

    Hey guys,
    So, I'm trying to assign the X value a null object had at the previous frame so I can continue to subtract a number from it cumulatively. I'm trying to assign it to a variable (prevframe). I'm not sure where I'm going wrong, but the line I'm trying to do it on is written as follows:
    prevframe = transform.xPosition.valueAtTime(time-(1/24))
    So in my mind, this should be taking a look at the value of X on the null, then looking back in time to figure out what it's value was on the previous frame (my frame rate is 24, so I'm dividing 1 second in to 24 pieces and telling it to subtract that much from the current time), and assigning whatever that returns to the variable. But it's just returning a static value, even though I'm subtracting from it. I feel like it's not the correct syntax, but I really have no idea.
    I want to continue to subtract a value which is based on the velocity of another object from this, which I have worked out, I just can't figure out how to reference what this nulls X position was in the previous frame so it always returns the same value until all motion has stopped. The formula the variable is being run through looks like:
    finalposition = prevframe - camvelocity
    Which is then assigned to the final X position of the null object.
    So, I'm not sure where I'm going wrong. I hope I've provided enough information to help someone wrap their head around this and hopefully help me solve it.
    Thanks in advance,
    -Seth

    Sorry it was confusing. Let me try to clarify. My null object has a starting point, which is an X value of 2020. For each frame the camera is moving, I want to subtract the cameras velocity from 2020, but I want it to be cumulative. So say the camera is moving linearly at 20 px per frame. On the first frame this starts, the value it will return is 2000. Then on the next frame I'd like it to subtract 20 from the new X value of 2000, but it continues to look at 2020 as the value to be subtracted from. So there isn't any accumulation of this X position getting lower and lower, it just gets to 2000 and stops.
    When I plugged in your code I was getting the same result. I'm not sure if it's just not meant to work the way I was thinking I'd like it to, but…
    What I'm trying to accomplish is kinda weird though. I'm trying to get this null, which is a parent to some glares nested in a composition, to take both camera movement and actual composition movement in to account as it drives the position of the glare objects. I wanted to see if the composition was moving faster in the main timeline, or the camera, and then add or subtract the faster velocity to the position of the null object, and have it do that continuously rather than to the null objects starting value and nothing else. so 2020 - 20 - 20 - 20 - 20 ect., with a 20 (or whatever the velocity works out to be) for each frame things remain in motion.
    I want it to remain based on expressions just because I'm going to have a lot of these panels with glares, and hand keyframing each of them isn't something I'll have time to do, so I just want it to be based off of those two movements.
    I think I'm going to take a different approach though. I think I'm trying to do too much with this expression that can be done in different ways. Instead of having one null I'm going to have two, and I'll have an expression within my glare objects to decide which ones coordinates to use as a parent still based on velocity.

  • Position error

    I am having encoder position issues.
    I am using 3 Kollmorgen servos attached to 3 AKD Ethercat drives. I have a cRio running as the Ecat master. All of my Vis are running in scan mode on the cRio.
     I am building a capstan pulling system that will have a constantly changing velocity based upon position within a 3 meter repeating cycle. I change the velocity based upon sensor input every mm of the cycle and then start the 3 meter cycle over. The velocity various from 1 RVS to 10RVS.  I use the encoder position to determine my position within a cycle. The system runs great for around 5 minutes and then my encoder goes crazy. Even when I stop the servo the encoder continues to increase. In the help for the “Reset Position” command I noticed that encoder values higher than 2^52 can be unstable. Does this apply to user units or RAW encoder pulses?
      I have tried the following methods to try and fix the problem.
    Test and verified that the issue occurs in the Axis test panel.
    I just set a long move at a given speed. After a time the position error goes crazy as in 4.0 e +12 and the position continues to increase after the servo stops.
    I removed my units and used just encoder pulses and again after a few minutes the same thing occurred.
    Changed my VI so that after each 3 meter cycle the encoder was reset to zero. Again after roughly the same amount of time the issue occurred.
    One strange thing is that I can still control the servo accurately. If I tell it to go 100mm it goes 100mm, but once there I cannot read the position because it returns a very large and inaccurate number.
    A further observation is that I can recover by resetting the cRio. This makes me think that the encoder number is exceeding some register U32 or U64. If that were the case I would have thought that resetting it after each cycle would have fixed it. Unless when you reset the position you are just setting an offset that is subtracted for the actual encoder from that point forward.
     I am sure that I have confused you all but any and all help is greatly appreciated.
    Perpetual LabView noob…..
    Jeff Lee

    Hi Jeff,
    I have a few questions for you to help me get a better understanding of the issue:
    - What version of LabVIEW software is your application written in (2010? 2011 SP1?, 2012? etc)?
    - Have you tried swapping your motor with a different one?  Or your Drive?  Did you still observe the same behavior?  If possible, I think this would be a useful test to help narrow down the issue.
    - What does your motion system look like at a high level (What components are involved and how are they connected to eachother)?  Does the encoder feedback connect back to the drive or back to your cRIO controller?  
    Andrew T.
    National Instruments

  • 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

  • Sinusoidal Velocity

    Hi,
    My system consists of a PCI-7352 Motion Control board used in conjunction with Parker Compax3 motor controllers. I've used this combination on several systems but I have a new question. First some background info:
    Labview 7.1.1
    NI-Motion 7.4
    WinXP Pro
    Axis 1-Velocity control (both in the C3Manager and MAX)
    Axis 2-Torque control
    Basically the motors are connected to the part under test; motor 1 drives the part under test while motor 2 provides programmed torque amount (durability testing).
    My question...I need to provide a sinusoidal velocity command, 2-3 Hz, while the driver motor moves anywhere from 180°-360° in each direction. Supplying the torque to motor 2 is simple enough.
    I've looked through some of the "countoured moves" examples but I'm not quite following them. This is probably a very simple thing to do but it's eluding me! I had everything working fine by just issuing a velocity command and position setpoint and waiting until the move was complete and then the customer sprung the sine wave stuff on me!
    Any help is appreciated.
    Thanks,
    Teri

    Hi,
    I finally got it to work. Attached is a JPEG of a simplified version of what I did. There are probably simplier ways to achieve this but it works and I'm happy. The only thing I could not get to work was to configure the buffer, then set the buffer size to zero to reuse the buffer repeatedly as explained in the help section for Configure Buffer.vi (NI 73xx Controller Considerations). I think it wants to see a multiple of buffer for number of points but my cycles may run up to a couple of million and that number would be too large.
    Thanks for your help,
    Teri
    Attachments:
    SinewaveVelocity.JPG ‏60 KB

  • Need right value to Load/Read Velocity Using Input/Return Vectors

    I have a servo motor with a encoder feedback of ( 4,000 counts per revolution ), maximum velocity of 6,000 rpm ( 100 rps ). I need to create 3 moving profiles with stroke time of 0.25 mm/sec, 1.0 mm/sec, and 25 mm/sec. I would like to use either Load Velocity VI or Load Velocity in RPM VI whichever is easy to set velocity, distance, and read position of my axis. More, I would like to be able to use onboard variables to set distance, velocity, and read position of the axis using input/return vectors, but I don't know how to set the right values. Do I need a conversion or multiplier number to get the right value?
    Any help would be greatly appreciated.
    Carlos D' Garcia.

    Carols –
    There is a simple vi on how to do vector moves at the following link (I also attached the file below):
    http://sine.ni.com/apps/we/niepd_web_display.display_epd4?p_guid=B45EACE3DF9956A4E034080020E74861&p_node=DZ52480&p_source=External
    To have your axes move at different rates, you will have to replace the single ‘Load Velocity in RPM.vi’ that is wired to the Configure Vector Space.flx with three separate Load Velocity RPM.vi’s each with an axis constant (or control) wired to their axis input and the max velocity you want. This way, you will set the maximum velocity for each axis rather than all three at once.
    Best of luck with your project! Let me know if you have further questions with this.
    Marc C
    National Instruments
    Applications Engineer
    Attachments:
    Three-Axis_Vector_Move_with_Position_Monitor.zip ‏29 KB

  • Dampening/smoothing cursor position

    I'm designing a touch screen interface. One problem is that
    the cursor tends to jitter based on the small variations of
    pressure a finger puts on the screen. Is there a way to dampen or
    smooth small variations of the cursor position?

    How to set the CURSOR position in jTable .changeSelection(....);
    The text in the cell where cursor is present should be selected . You can do this by placing the cell directly into edit mode when it is selected:
    http://forum.java.sun.com/thread.jspa?forumID=57&threadID=640471

  • Stepper Axis Encoder Problems

    I have a NI 7344 board controlling a servo motor and stepper motor each with their own seperate drives. I am having issues with the stepper encoder output while running in closed-loop mode. When running the stepper in velocity mode the measured velocity according to the motion card is about 15% of what the actual velocity of the stepper.
    The encoder position counts however, do update at the correct rate. If I connect the same encoder output to another axis and set that as a servo axis the encoder velocity is measured correctly (I've done it simulataneously and the servo axis displays the correct velocity while the stepper axis does not). I have verified that the stepper and encoder counts per revolution are correct and every relevant encoder setting is correct.
    Anybody have any ideas?
    Thanks

    The velocity reporting for steppers in NI-Motion 6.1.2 can be slightly incorrect at low step speeds with 733x and 734x boards because of a fixed point calculation error - this is ONLY a reporting error and the steppers WILL move at the correct speed. This has been fixed with NI-Motion 7.0.
    The Primary and Secondary feedback channels can no longer be set in MAX starting with NI-Motion 7.0, however, they can be set through the Motion API in LabVIEW, CVI, etc. This change was made to reduce the complexity of the interface in MAX.
    Hopefully this explains better the behavior of what you were seeing.

  • Tuning servo motor problems

    I have a PCI 7344 connected to a UMI and a Ecodrive amplifier, with a linear modul and servo. Feedback is a incremental encoder 16404counts/rev (400counts/mm). When i try to autotune, the servo motor goes berserk, so I have to manually tune it with "Step response".
    I am able to get a nice response curve according to "Understanding servotune" but the problem is, curve starts at -50mS? and at 50mS it seems stable, but settling time is indicated to be 500 - 600 mS, and when i use "wait for move complete.vi" it waits about the same period before it returns "move complete". I was expecting/hoping for 50 - 100mS settling time. How to tune this? I run position mode and there is no problem regarding velocity, acceleration and position feedback, the only
    thing is that settling time is to long. I have no following error. Is there any other way to get a signal exactly when a position is reached.

    Hi, thank you for your answer.
    I still have problems with this, so here is some more questions.
    1. I am getting a perfect curve on the step response, similar to attached picture (1), only with shorter time scale. The step response report under the chart that settling time is 500-600mS, which is settling time (<100mS) and steady state (>400-500mS) together. This period seems to be the same that i am experience with "move complete.vi".
    I have Kp=7 Kd=14 and Ki=1, and i have tried to adjust these values but this is the best i get.
    Does the loop need that time to determine that move is complete?
    2. The move i want to do in my application is a movement about 20000 counts (50mm) in 130mS, wait 100mS and return to start in 130mS, this is possible if I use
    software delay and start return move before first move is settled according to "move complete.vi" But this generate a increasing stop position error each move if I loop this sequense with 100mS rest time. These timings should be possible with the hardware I am using. Any suggestions?
    3. I have set the driver/amplifier in velocity mode (incremental encoder feedback), how is that compared to torque mode in the driver in this case?
    4. It is possible to get a second feedback from the drive (torque, velocity or position from an analog output) but this is 8 bit and less accurate than encoder. I also have a second external encoder for precision measurement and a force cell, but they are only active parts of the range to the servo (under the desired move) is there any other way i could set this up?
    Regards
    Attachments:
    153.gif ‏29 KB

  • How to use labview to control a robotic arm by EMG signal

    Hello,
    I am working on simulation of an active Exoskeleton (wearable robot) for the upper limb using LabVIEW for my senior project. I need to use the EMG signal as an input to move the elbow joint (flexing and extending). I downloaded labview biomedical toolkit to take a ready simulated EMG signal but have a weak experience in LabVIEW.
    The design criterial I am planning to use is to establish a threshold for the EMG signal using a comparator (above 0 for example) and set a counter for everytime the signal passes the threshold as(+1) in every count. Then, specify a degree value for the counter (for example when the counter reaches 10000) and feed this value of the counter to a simple simulated structure for the joint (simple angle of 2 lines) or a meter to represent the movement.. e.g. every 10000 count = 1 degree of movement. Zero crossing can also be used instead of the comparator and the signal will be filtered and that is easy to do. However, my problem is in converting this logic into LabVIEW. I don’t know how to set a counter for the signal and make every number of counts refer to a specific degree of movement and I also don’t know how to form the simulated joint structure in LabVIEW or even how to transfer this into a simple meter device in LabVIEW.
    I have only one month to do this project so any help or ideas you provide are highly appreciated
    Thank you ,

    CarlFHellwig 
    Thank you for providing this example I just implement  it in the software to check the counter results.
    In fact, the design criteria I desided to use latly is to use is to establish a threshold for the EMG signal using a comparator and correlate the EMG signal with the angles of movement of a simple simulated structure "motor" for a single joint (simple angle of 2 lines) eg. 30,60,90,120,150 degrees for flexing and extending. Zero crossing can also be used instead of the comparator and the signal will be filtered and that is easy to do. 
    In other words, the idea is to drive a motor for different angles based on the input EMG signals. I am now stuck with developing the algorithm of how the angles are related to the RMS value of the signal while flexing and extending and how to convert this RMS into angular velocity and angular position to form the simulation. 
    I will be grateful if someone guided me to a person did a similar project to discuss some issues. 
     

  • Possible to display "moving crosshairs" instead of curves on a xy-graph?

    Hello,
    I want to plot a Graph in LabVIEW showing not a curve but crosshairs or another type of cursor, moving according to positioning data out of a txt-file.
    the txt-file contains x and y coordinates in this form:
    10.0    23.4
    10.5    24.5
    11.0    25.6 ...
    I want to read one pair of coordinates and move the cursor to that point, then the next pair, move the cursor to the point etc. It schould look like the cursor was moving in realtime on the graph. Now to my main problem: It seems that a xy graph collects all of the points in the file and then displays them. This looks entirely different than the described scenario. I guess it's because LabVIEW has this data-oriented concept, where a node "fires" only when it's got all input parameter needed. And since a xy graph expects a cluster as  input parameter I've got this problem.
    Attached is  the vi I made and the txt-file...
    Thank you for your help!
    Gouvi
    Attachments:
    Cursor_XYGraph.vi ‏23 KB
    Posdaten.txt ‏1 KB

    Hi Gouvi,
    for size: just make the graph indicator as big as you need it...
    For background pictures: several possibilities:
    1) make the graph transparent and put some graphics behind the graph
    2) make the graph transparent and put a picture indicator behind the graph
    3) In LV8+ you can put graphics in graphs using property nodes (PlotImages)
    Best regards,
    GerdW
    CLAD, using 2009SP1 + LV2011SP1 + LV2014SP1 on WinXP+Win7+cRIO
    Kudos are welcome

  • Authorization for specific business scenario or business step in solar01

    Dear all,
    we have an issue regarding solution manager blueprinting management restricting an access to specific nodes. Our goar is to have several substructures devided by modules like: FI, SD, PS and etc. And each team member according his position in a company should have an access only to his substructure and all the related documentation below that. Saying an access means a change mode not a display access.
    Please find the steps have been performed during the configuration of project below:
    All the configuration around system landscape has been done properly.
    A new project for solution was created in solar_project_admin.
    A correct logical componens has been assigned.
    All the required users have assigned as a team members of a project.
    At the projec. team member tab a box has been checked in for: restrict changes to nodes in project to assigned team members.
    A proposed structure of nodes has been created within Tx solar02.
    The right team members have assigned to specific node. So that only they suppose to have a change permission within that nodes. All others read only access.
    Every user has sap_solar01_all role assigned to him. We have tryed assigning varios roles according to  http://help.sap.com/saphelp_sm310/helpdata/en/db/a1033b2a98f46ae10000000a11402f/content.htm
    However as a result we are having a change permission allowed for every node within the structure. Like FI responsible member can access to any node from a tree. And he can make a change for SD related documentation.
    Please assist regarding this issue.
    Kind regards,
    P.S.
    I found a thread with a similar problem which was solved by activating a checkbox which is already activated in our system and actually doesn't solve that problem for us.
    Authorization for specific business scenarios in Solar01/02
    Edited by: Artjoms Nikulins on Mar 11, 2010 3:37 PM

    Hi
    As far my knowldege goes this is not possible to do within same project or making the same.
    You can have project specific access given to member but you cannot go module wise authorization.
    Ofcourse there satellite system authorization will be different but not in solman.
    In addition check this security guide
    https://websmp104.sap-ag.de/~form/sapnet?_SHORTKEY=00200797470000075728&_OBJECT=011000358700007187872005E
    Hope it ans ur query.
    Regards
    Prakhar
    Edited by: Prakhar Saxena on Mar 12, 2010 3:22 AM

  • Error in Zreport while upgrading from 46C to ECC 6

    Hello Experts,
    I am facing problems in 1 Zreport while i have upgraded that report from 4.6C to ECC 6. Dump is reported while running the program.
    Error is : "Access non-existent storage area."
    error is coming @ line :  ADD <f1> THEN <f2> UNTIL <f3> GIVING v_totval.
    FIELD-SYMBOLS: <f1> TYPE ANY,
                   <f2> TYPE ANY,
                   <f3> TYPE ANY.
    DATA: v_totval LIKE lfc1-um01h.
    IF <f1> IS ASSIGNED  AND
         <f2> IS ASSIGNED  AND
         <f3> IS ASSIGNED.
        ADD <f1> THEN <f2> UNTIL <f3> GIVING v_totval.
    ENDIF.
    can you ppl please tell me any solution as its urgent !
    thanks in advance.

    this is fine for me.
      DATA: BEGIN OF numbers,
              one   TYPE p VALUE 10,
              two   TYPE p VALUE 20,
              three TYPE p VALUE 30,
              four  TYPE p VALUE 40,
              five  TYPE p VALUE 50,
            END OF numbers,
            sum     TYPE i.
      SELECT-OPTIONS position FOR sum.
      ADD numbers-one THEN numbers-two
                      UNTIL numbers-five
                      ACCORDING TO position
                      GIVING sum.
    A

  • Control frequency and number of cycles

    I am trying to use a stepper motor and a motion controller to control a push rod. The push rod will fatigue sutures that are attached to a valve. My question is if there are any sample codes in labview that will help me control the frequency and the number of cycles. I will also have a load cell to give me a force profile.

    Hello,
    Have you looked at the Motion shipping examples for LabVIEW? There is a particular example, One-Axis Move (Accel - Max Velocity - Decel).vi, which is located at:
    C:\Program Files\National Instruments\LabVIEW 7.1\examples\Motion\FlexMotion\One Axis.llb
    This example allows you to control the acceleration, deceleration, velocity, and target position (in counts) of the movement. There are a number of other shipping examples located in the C:\Program Files\National Instruments\LabVIEW 7.1\examples\Motion\FlexMotion directory that may be of additional assistance in developing your code. I would suggest starting with the One-Axis Move example first, though.
    Take a look at that example and let me know if you have any additional questions on this issue.
    Regards,
    Scott R.
    Applications Engineering
    National Instruments

Maybe you are looking for

  • Using Infoset query

    Dear Experts and friends, I have created a infoset using the logical database sdf, and have created a query adding two more tables( mara and marm) giving conditions. The problem is when i try to add some fields under basic list for list output the me

  • Formula

    import java.io.*; import java.util.*; public class EarthLeakage public static void main (String[] args) throws IOException      String data, s1;      double acceptableLeakage, totalMaxLeakage = 0;      int noOfSet = 2, setCount;      int noOfDevice =

  • How to access Revenue records

    <b>[This thread was migrated from the On Demand Developer Forum in the old Siebel Community] </b> algocode New Contributor I try connecting to Revenue records with web services using the same user ID with which I'm able to create Service Revenue Deta

  • CUPS + LaserJet 1012 problem

    Hi, all! I have almost the same problem as in this post, but with HP LaserJet 1012. The following info is present on Information tab of Control Center->Printers: State: Processing... (accepting jobs) URI: ipp://localhost.localdomain:631/printers/hp_L

  • HT4858 how do I enable icloud on my pc, I have downloaded the software

    how do i enable icloud on my pc, i have downloaded the software, when i try to open icloud i am told the programme is not enabled, but it is not made clear how i can enable the programme