Jump to content
OMRON Forums

Eric Hotchkiss

Omron
  • Posts

    558
  • Joined

  • Last visited

  • Days Won

    8

Everything posted by Eric Hotchkiss

  1. What are your IDE and firmware versions? Has plotting in general worked for you on this IDE install and PMAC previously? Have either version changed recently? Normally as long as the IDE and firmware versions are from near the same time, there is no need for legacy mode at all, so they might be too far apart.
  2. To get from 4.1.0.24 to 4.2.1.19, you would watch to first install the 4.2.0.13 patch and then the 4.2.1.19 patch. Another option would be to uninstall the IDE and install the full version of 4.2.1.19.
  3. It looks like, if the motor worked in counts you should have the right information in your post (as long as ki is not scaled) to use it with the scale factor. Can you share the project?
  4. The Power PMAC Linux installation keeps itself clean by mounting its file system as read only most of the time and copying the contents of “/.readonly/etc” and “/.readonly/var” to “/etc” and “/var” on power up. To deal with this, the following process is used mount -o remount,rw / cp -a /.readonly/etc-tmpfs-mirror/* /.readonly/etc/ cp -a /.readonly/var-tmpfs-mirror/* /.readonly/var/ mount -o remount,ro / reboot There is also a root folder, so you can add: cp -a /.readonly/root-tmpfs-mirror/* /.readonly/root/ In case it helps, you can take a look at instructions to install the NTP debian package on PMAC. http://forums.deltatau.com/filedepot/download.php?f=Power%20PMAC/Application%20Notes/Network%20Time%20on%20Power%20PMAC.PDF [FILE REMOVED]
  5. I believe this line is a mistake, the integral gain does not need to be scaled. Motor[4].Servo.Ki = 0.0015 / Mtr4ScaleFactor Are you using Motor[4].Servo.Kvff or Motor[4].Servo.Kaff?
  6. We typically test all of our products with Omron I/O and Drives, so using the Omron I/O would work well and many customers do just that. We haven't tested as thoroughly with all of the Yaskawa products, but many customers do use them and we've set them up without issue from our CK3E, too. I can't say I'd know how they'd compare to the other devices you mentioned.
  7. IDE version is not specific to form factor. For Firmware 4.2.1.19, you may want to make sure you are using relatively recent firmware. For EtherCAT, IDE 4 can only handle Acontis. If you are using Etherlab EtherCAT you will also need IDE 3. There is an IDE/Firmware compatibility chart in the IDE manual. This is available under "Help -> "PowerPMAC IDE Manual" within the IDE. The chart should be on page 10.
  8. Typically EtherCAT drives will have a rotary switch to determine the slave's alias. The value of this switch should show up in ECAT.Slave[j].Alias. If multiple slaves are at the same alias, they will be at different positions (ECAT.Slave[j].Position). It is typical to either have each slave at a different alias or all slaves at alias 0 with positions specifying which slave is which. I'm not sure how far to take hot plugging ideas, if you try to change many of these EtherCAT settings you will have to stop and re-start the ethercat network. You should be able to set ECAT.Slave[j].Enable=0 for otherwise set up slaves that are not currently plugged in and your ethercat network will enable without expecting that slave to be present.
  9. What is the value of Gate3[].Chan[].AtanEna?
  10. Do you mean setting Sys.MaxMotors higher than the default of 32? In that case you want to make sure it is set after the first $$$***, but before the save as it affects how higher numbered coord[x] variables are saved.
  11. The GetCoord... API functions are particularly difficult to use. Here is an example bgcplc that puts the position of the X axis motor in coordinate system 1 into P2. void user_plcc() { struct coorddata MyCoordData[32]; pshm->P[0] = (double) GetCoordDesPos(1, &MyCoordData[0]); double MyDesPosX; pshm->P[1] = (double) GetCoordAxisData(2, (char *)"x", &MyCoordData[0], &MyDesPosX); pshm->P[2] = MyDesPosX; // One Shot Bgcplc pshm->UserAlgo.BgCplc[0] = 0; }
  12. As far as I know, this is the best available method. That being said, the dummy motor does not require any setup, Motor[x].ServoCtrl=1, or even Sys.MaxMotors high enough to contain the dummy motor. I'm working on a 6 axis system right now (Sys.MaxMotors=7). I can simply add a target and scale factor to my current table and then put Motor[10].CompPos in a watch window CompTable[0].Target[2] = Motor[10].CompPos.a CompTable[0].Sf[2]=1
  13. One option is to put the timer into a subroutine inside the PLC instead of a subprogram. In the below example, PLC 1 uses a subprogram timer to increment P1 every second while PLC 2 uses a subroutine. Calling the subroutine does not allow variable passing, so you will need to handle that on your own if you use this method. OPEN PLC 1 P1++ CALL DelayTimer.sec(1) CLOSE OPEN PLC 2 P2++ Gosub 999 RETURN N999: LOCAL EndTimeSec EndTimeSec = Sys.Time + 1 WHILE (EndTimeSec > Sys.Time) {} RETURN CLOSE
  14. The current Power Brick manuals have a section called "Reversing Motor Jogging Direction" that shows how to take a working (able to jog) motor with a direction sense opposite of what you want and flip it. For a brushless motor with a quadrature encoder: Motor[].PhaseOffset = – present value Motor[].PwmSf = – present value Gate3[].Chan[].EncCtrl = the opposite decode of the present value (e.g. 7 or 3) If using halls: Motor[].AbsPhasePosSf = – present value Motor[].AbsPhasePosOffset = 2048 – present value You will still need to worry about Motor[x].HomeOffset
  15. PackInData = 3 will unpack the AdcEnc[k] registers, which may matter if you have a sinusoidal encoder or resolver.
  16. What is the reason you need a particular phase frequency?
  17. Are you adjusting your gains to compensate for changing your position scale factor? If you halve Motor[x].PosSf and Motor[x].Pos2Sf, then you should double all the servo loop gains besides Ki and Kfff. It is generally a good idea to scale position units before tuning.
  18. Like tecnico said, you should make sure you are using acontis. Is Sys.EcatType=1? Did you put in the correct IP address? If you issue "ecat slaves" from the IDE terminal, do you see your slave in the response? If not you may need to issue "ecat reset".
  19. If you put Acc84E[1].Chan[1].SerialEncDataA (important to leave off the .a) in the watch window, do you also see fluctuations?
  20. Can you be more specific? Is the position rolling over? Please check Motor[1].pEnc (or replace the 1 with your motor number. Your response should be like Motor[1].pEnc=EncTable[x].a where x is enctable number Issue "backup Enctable[x]." in the terminal. No quotes, but you'll have to his escape to get rid of the intellisense suggestion. Copy the Enctable[x] settings into a reply.
  21. Mounting information and drawing can be found in the Power Brick LV manual. http://forums.deltatau.com/filedepot/download.php?f=Power%20PMAC/Manuals/Hardware%20Reference%20Manual/Power%20Brick%20LV%20User%20Manual.pdf [FILE REMOVED] The section starts on page 22 with the CAD drawing on page 24.
  22. Good news. This will be fixed in the next IDE release. I already tried it. For clarity, this should be fixed in IDE 4.3.x.x
  23. You are already using the best method and that is how AbortAll is intended to work. Aborting only part of a coordinate system wouldn't make sense.
  24. Is there a reason you are using gettimeofday? I added some timestamps to my program and GetPmacTimeOfDay seems to take about half as long. It also doesn't watchdog my 460 cpu if I run it with no delay.
  25. I see my issue, I assumed you were using one of the functions in the app note. Now I have time.h included and gettimeofday working. I don't see any problems running a bgcplc that does nothing but call that function on a 465. It introduces maybe 15% background cpu load with default clock speeds (besides bgcplc0, my project is default). When I try to do the same thing on a 460, PMAC immediately seems to die (in the IDE) and a few seconds later I hear and click and get a watchdog. I was able to stop the watchdog by adding a delay. It sounds like you are running this in a few places, have you tried one at a time to isolate it? Have you tried adding a delay? MySleepSec(0.100); will work after the following functions are compiled. struct timespec Sec2TimeSpec(double TimeSec) { struct timespec Timer; Timer.tv_sec = (long int)TimeSec; Timer.tv_nsec = (long int)((TimeSec-(double)Timer.tv_sec)*1000000000.0); return Timer; } void MySleepSec(double SleepTimeSeconds) { struct timespec Timer; Timer = Sec2TimeSpec(SleepTimeSeconds); nanosleep(&Timer,NULL); }
×
×
  • Create New...