Jump to content
OMRON Forums

paddax

Members
  • Posts

    44
  • Joined

  • Last visited

Posts posted by paddax

  1. The manual states

     

    The h command is very similar in effect to a %0 command, except that deceleration and subsequent re-acceleration are controlled by Coord[x].FeedHoldSlew, not by Coord[x].TimeBaseSlew. Also, execution can be resumed with an R or S command, instead of a %100 command. In addition h works under external time base, whereas a %0 command does not.

     

    I've found to my embarrassment and luckily no one's health that issuing "%100" when halted resumed the program execution.

     

    CPU: PowerPC,460EX

    VERS: 2.4.0.180

     

    The desired functionality is when an event occurs the system should halt until the condition is cleared, the way I've implemented this is to prevent R and S commands during this phase. Is there a simple method of preventing execution in a modal manner.

  2. Previously I could run two IDEs simultaneously from 2 different computers with no impact on performance (IDE ). With the latest software (3.1.1.0) and firmware (2.3.2.5) a second IDE is all but unusable.

     

    Is this an issue with the firmware or is the IDE placing too large a burdon on the PPMAC.

     

    CPU reports PowerPC,460EX

     

    Further investigation (running top) shows that the ssh layer in the PPMAC is the culprit, the gpascii shell is a fraction of the overhead of the ssh communication.

     

    Is it possible to change the IDE to use Telnet?

  3. CCDistance and CCSize make no difference as Cutter compensation is working!

     

    My problem is tread reports the actual position not the programmed position e.g.

     

    T reports the programmed position and the currently active cutter compensation T -> X10:-1

    tread reports D6 -> 9

     

    Is there a way to determine the actual programmed position via an equivalent to tread or is the only way to do this issuing a "T" command and interpreting the string

  4. Hi,

     

    Have you enabled segmentation time by setting Coord[x].SegMoveTime > 0? Typical values for this are about 2 msec.

     

    Have you set up Coord[x].TpSize? It should be set to at least 3 for using the tread feature.

     

    Coord[x].Tpcoords must also be configured based on the axes you want to report.

     

    Also make sure you have defined the plane of interpolation with the normal command.

     

    Please reread the question, tread is working but reporting different result to the online command T. The difference is the cutter compensation value.

     

    Put another way, if cutter compensation is not used the system works perfectly. T and tread report the same correct values. When cutter compensation is applied the following occurs

     

    1. The program moves through the correct path

    2. T reports the programmed target positions

    3. tread reports the actual target positions not the programmed target positions

     

     

    From my configuration

     

    Coord[0].SegMoveTime=5; // ms
    #define MaxStoppingTime0 Motor[1].MaxSpeed * Motor[1].InvAmax
    #define LHSegsNeeded0 MaxStoppingTime0/(2.0 * Coord[0].SegMoveTime)
    Coord[0].LHDistance=4.0/3.0*LHSegsNeeded0;
    
    Coord[0].TPSize=3 + Coord[0].LHDistance; // at least 3, plus the number of lookahead segments
    Coord[0].TPCoords=$1E6; // Axes X, Y, Z, B, C, W 

     

    normal is set to 0,0,-1

  5. The functions tread, pread and dread calculate values based on programmed positions but appear to have an error when cutter compensation is active.

     

    Given the following program

     

    normal I0 J0 K-1

    ccr 1

    ccmode1

    X10

    Y10 ; Read value here

    X-10

    Y-10

     

    on line command T reports an X value of 10:-1

    tread reports an X value of 9

     

    The manual states these command are equivalent.

     

    Our MMI is using tread, pread and dread values and these are not actually reporting the programmed target, position and desired position which is confusing.

  6. When the jog button is pressed: Issue a flag once to run the motion program while loop. But only if Coord[].ProgActive = 0, and motors in closed loop. PMAC will reject anyway if the coordinate system is already running a program or any of the motors killed. Otherwise, pass through with no action.

     

    When the jog button is released: Issue an abort once, optionally check that the program was running using the same bit Coord[].ProgActive. Insert a small delay to allow motors to abort. Make your abort decelerations as small as possible (what they normally should be without killing or jerking the machine too much).

    Now, you can have a while statement looking for Coord[].ProgActive to go to zero. And you're done, waiting for the next "jog" command.

     

    Let me know if you are still having issues, I will send you an explicit example.

     

    I think you missed the point, we're agreed the technology

     

    Jog Start=cpx xxxx

    Jog Stop=[Feedhold] -> Wait for condition -> Abort

     

    The question is now what is the best "Wait for condition" so that the following is true.

     

    1. The machine desired position does not deviate from the kinematic path

    2. The duration of "wait for condition" is minimised.

     

    [FeedHold] May be "%0", "H", "Coord[x].SegOverride=0", this decision has not been taken but my preference is "%0" unless you can give a better reason.

  7. issue a feedhold and once you stop issue abort and undo the feedhold.

     

    This is where my current development is going, I'm having a bit of trouble with timing as its common for a user to jab the Jog button repeatedly and expect the machine to react.

     

    What is the best variable to monitor to know when to issue the abort?

  8. Yes, this can be done by executing small incremental moves in an indefinite motion program while loop. This motion program can be launched from a PLC which is monitoring your input. Once the "jogging" input is released, the program is aborted.

     

    Incremental jog works well using the cpx command however continuous jog presents a different problem. If you set the increments too low the TS value will inhibit feed rate and if its too high it will inevitably quantise the jog requests and therefore not feel natural.

     

    At the moment I'm issuing a very large cpx command to move the axis which works fine but my new problem is the only way to stop the cpx is to issue an "abort" which causes the coordinate system to leave the kinematic path.

     

    Is there a way to stop a cpx command other than abort?

  9. Our system has Endat encoders with 100,000 counts per mm, the first three motors are orthogonal linear axis

     

    The following command issued from a part program causes the first three motors to move until trigger

     

    JOG1..3^1000000^0

     

    If the trigger is found within the specified distance system works as expected however if the trigger is not found motor 1 will stop after exactly 10mm however motor 2 never stops (EOT at 100mm) and Motor 3 stops after 11.5mm

     

    Issuing the following command in a part program or Rotary buffer did something entirely unexpected.

     

    JOG2,3^1000000^0

     

    Motor 2 stopped after 10mm but motor three moved in a NEGATIVE direction and seemed to be moving indefinately (at least 100mm).

     

    Please note that if the trigger is found the axis does stop, even if it is going in the wrong direction.

     

    Individually JOGn^1000000^0 the program worked as expected.

  10. Just found the syntax

     

    global MY_MATRIX(16)

     

    allocates 16 P variables

     

    Unfortunately the matrix functions msolve etc. require P variable indexes not the actual P variable expansion, is there a way of getting the starting index of MY_MATRIX

     

    The manual states the following

     

    global SurfaceNormal(3);

    global ToolNormal(3);

    the following command could be used:

    AngleCosine = sumprod(&SurfaceNormal, &ToolNormal, 3, 1, 1)

     

    This syntax doesn't seem to work.

  11. PMAC Jog is implemented as a Jog of an axis, is it possible to Jog a kinematic axis rather that a physical axis?

     

    Same as the above but using a handwheel?

     

    I'm pretty certain the answer is no so the next question is how can this be simulated?

  12. [quote='bradp' pid='206' dateline='1252511542'] To determine if a motion program is running in a C.S. look at Coord[n].Ldata.Status. If all of the four low bits are zero then it is executing. To determine if a PLC program is executing look at Plc[n].Ldata.Status. If all of the four low bits are zero then it is executing. [/quote] This no longer works after upgrading 1.6.0.30. Is this a bug or intended and what replaces it :(
×
×
  • Create New...