Jump to content
OMRON Forums

Eric Hotchkiss

Omron
  • Posts

    558
  • Joined

  • Last visited

  • Days Won

    8

Posts posted by Eric Hotchkiss

  1. This issue was solved over email.

     

    noLookAheadSupression has a default value of false, when it is changed to true there will be an issue with lookahead.

     

    This issue can be corrected by changing the jog move commands used in PLCs on PMAC from native jog commands to command quote jog commands. Examples are shown below.

     

    Original Commands -> New Commands
    Jog+1 -> Cmd “#1j+”
    Jog/1,2,3 -> Cmd “#1..3j/”
    Jogret1,2,3 -> Cmd “#1..3j=”
    

  2. Using Python with the Power PMAC is not officially supported. You could use Python to simulate mouse clicks and button pushes, but there is no API that would allow it to control the IDE natively. You could have a Python script communicate to PMAC over GPASCII to do things like run a PLC once the project is downloaded.
  3. CamTable[m].OutData is used for enabling GPIO based on motor position.

     

    If you bring the motor to a position of CamTable[m].X0 with the camtable properly enabled, then...

    The location specified by CamTable[m].pOut will be set to CamTable[m].OutData[0]

    CamTable[m].PosOffset/Motor[x].CompDesPos will be set to CamTable[m].PosData[0]

  4. You can use numbered L-Variables like L0 or or named local variables for looping over Motor[index]. Looping over global variables arrays works with either.

     

    Ldata.motor can be used to specify a single motor jog commands that don't otherwise specify a number go to. It would probably be clearer to include the motor number in the jog commands (even if as a loop variable).

  5. I would not suggest recording this position to find the zero position after turning the machine back on. If that is desired, do a homing search more or get an absolute encoder.

     

    You could save the value Motor[x].AbsPos-Motor[x].HomePos (or Motor[x].DesPos-Motor[x].HomePos) so that you can go back there after homing.

     

    If you set Motor[1].ProgJogPos=This value, then you will be able to go to that position with "#1J=*" in the terminal or "Jogret1=*" in programs.

     

    If you add Motor[1].ProgJogPos (or a global variable name) to pp_custom_save.tpl (within the configuration folder), then it can be saved and recovered.

    To save: "fsave"

    To load: "fload"

  6. The easiest way would be to add a call to ppnc_gcodes.pmc . For example, this could be added before the final close if MyVar is already a global variable. I'm not sure what G-Code number to suggest or if it would be better as M-Code.

     

    //G500 CfromScript
    n500000:
    MyVar = CfromScript(1,2,3,4,5,6,7)
    return

  7. open loop percent times max dac

    Just to be clear, the size of the dac output is the percent from the open loop test times Motor[x].MaxDac, so if you want to go the route of finding a value that barely moves the motor.

    Motor[1].Servo.Ksff = (Open Loop Percent) * Motor[x].MaxDac - Motor[1].Servo.Kfff

  8. You might try using the open loop test with a single iteration to look for the smallest value that makes the motor moves. This can be taken as the sum of Motor[1].Servo.Kfff and Motor[1].Servo.Ksff . If PMAC is sending an analog signal to the amplifier, you would want to make sure the DAC bias is calibrated first.

     

    Another option would be to try Parabolic or point to point tuning moves and look for low initial following error. Point to point tuning moves in the newer IDE versions are jog like moves. In older IDE versions they may be replaced with trapezoidal and S-Curve tuning moves.

  9. The following code worked to change the first 2 table entries for me with either a 1D or 2D compensation table. I am using firmware 2.6.0.1 and IDE 4.5.1.3 on a UMAC 1040 CPU, but I would expect it to work the same on any Power PMAC.

     

    float *CompDataPtr;
    CompDataPtr = pshm->CompTable[1].Data + OffsetTblSHM;
    *CompDataPtr = pshm->P[0];
    *(CompDataPtr+1) = pshm->P[1];

     

    I'm not sure why this isn't working for you. I tried writing to values past the end of the table, but I can't get a segmentation fault.

     

    Can you try code that manual writes to the same location as the first couple iterations of that loop?

  10. The first line should just switch to rapid move, but not move anything.

    The second line should move X either to 0.1 or by 0.1. You might want to add G90 or G91 to be sure.

    The third line is just end of program.

     

    Are you sure X doesn't move?

     

    What response do you get if you type the following into the IDE terminal?

    #1->

     

    The guy before me setup coordinate system 1, not 0. And used motor 1 and 2 instead of 0 and 1. Does that matter?

    That's normal and expected.

  11. To read the position from the encoder table directly, multiply the following two structure elements. As long as the ECT entry does not integrate, nothing extra is needed.

    EncTable[4].PrevEnc*EncTable[4].ScaleFactor

     

    It would probably be preferable to set up a "motor" to read the encoder conversion table entry so it can be added to the position window.

     

    Motor[x].pEnc=EncTable[4].a
    Motor[x].pEnc2=EncTable[4].a
    Motor[x].ServoCtrl=1

     

    Optionally you can set the following variables for unit labels in the position window or scaling.

     

    Motor[x].PosSf
    Motor[x].Pos2Sf
    Motor[x].PosUnit
    Motor[x].Pos2Unit

  12. Hi Eric, thank you. I never payed notice to that. So if I set the value to high I run into problems like that. So does the PowerBrick then actually try to accomodate for the the value I set and makes it cause electrical problems or does it kind of rollover into another value below 30kHz?

     

    The Gate3 inside the Power Brick will send an above 30 kHz signal to the amplifier, which may have issues due to the power transistors.

     

    I would like to ask about the current-loop tuning.

    I did not find another thread about it. I am often not able do tune the current-loop of small stepper motors apropriately with the tuning tools. In these cases I just go with trial and error. However I realize that this is far from ideal. My guess has been that it might be due to high impedances and bad wiring. But I wonder if you know anything about that problem in general and solutions to it,

     

    I am assuming you have already set BrickLV.Chan[j].TwoPhaseMode = 1 and then ran the Power On Reset PLC to apply it. I don't know of any tricks required for tuning current loop on stepper motors (Brushed need a couple). It may have to do with your resistance/inductance. If you use the equations in the Power Brick LV manual to calculate minimum PWM frequency for the motor, what do you get?

     

    Are you using automatic or interactive current loop tuning? What goes wrong with it?

  13. This is described in the latest version of the Power PMAC SRM and Users Manual.

     

    You can get them from your local Omron technical support or download it from the US website available here.

    https://assets.omron.com/m/76e3f5e50c46e0e9/original/Power-PMAC-Software-Reference-Manual.pdf

    https://assets.omron.com/m/2c1a63d391d6bfa3/original/Power-PMAC-Users-Manual.pdf

     

    Basically we add Motor[x].Servo.Ksff to the servo loop output for Motor[x].Servo.SffCycles servo cycles to break free from static friction.

×
×
  • Create New...