Jump to content
OMRON Forums

gmschoon

Members
  • Posts

    32
  • Joined

  • Last visited

Everything posted by gmschoon

  1. On several of our ACC24E3 cards (Endat serial encoder) we are getting CRC & error bits (E0, E1) set in "SerialEncDataB". The errors appear to occur randomly on different cards and channels (we have 14 channels in use, 4 of which show errors) and persists for period of time from 5-45min after power on (from cooled down state). If we issue the "hmz" command, the result is incorrect and different from when the error is not reported (perhaps unsurprisingly). We have the following configuration for the Endat 2.2 serial encoders. Acc24E3[n].SerialEncCtrl = $1000003 (this is directly from the Acc24E3 manual) Acc24E3[n].Chan[n].SerialEncCmd = $71419 Based on the behaviour it seems that the issue relates to temperature, however it is not clear what is causing this as there is really just the serial encoder and ACC24E3 involved in the loop. Any suggestions appreciated. Thanks
  2. Hello Steve, since we experience the same problems (though I've learned to live with them *sigh* ) I can tell you, that these problems most likely don't connect to those settings. If they were connected to these settings at the PCs end, it would mean, that other PCs could still connect to the PMAC, right? I've checked with many PCs connected to the same network as the PMAC while the PLCs were running. But I could not connect from any machine to the PMAC, while it was in this condition. So there are two possibilities: 1. Those mentioned settings are at the PC end, but break the ethernet at the PMAC (sounds unlikely, but would be an interesting solution, I'll try) 2. something else on the PMACs end breaks, and is not connected to the energy settings. @gmschoon: For a little help until there is a solution try the following: 1. extend in the project settings the projpp timeout time 2. set the Sys.BgSleepTime to a value greater than 1000 (default at 0 is 1000usec) at least while uploading a new project verison this helped a lot regarding "time needed" and "pmac broken, need to pull the plug" Greetings, Georg @Georg: Thanks for the tips, we will implement the suggested changes to reduce lost development time, however the more worrying bit is having connections drop when the PMACs are networked with our higher level controller. @Steve: While energy efficiency settings could potentially cause a dropped connection, what we are seeing is an ethernet port that then seems to become unavailable until the PMAC is power cycled. Has the r8169 ethernet driver changed recently and is it managed in any way by Delta Tau? Are there config options for the r8169 if the driver is compiled on the system? Perhaps there is an upcoming firmware release to address this? Thanks
  3. We have an issue with PMAC where the ethernet socket becomes unavailable for new connections, requiring power cycle to connect. Setup: - PMAC 465 - Firmware 2.4.0.180 - IDE 3.1.2.2 - rticplc, bgcplc running The issue appears to correlate with incoming data/connections to the PMAC, and has been observed in the following scenarios: - Build and download, fails during build process as well as during load process - When sending commands to the PMAC - Attempting to launch plot tool (throws error after trying to connect) In all scenarios when the issue(s) occurs the following are true: - Cannot connect IDE or if IDE is still running, cannot establish any new connections (terminal, watch, plot, etc) - No response with ping - Cannot SSH - rticplc and bgcplc continue to run and any active windows (watch, position, etc) will continue to display live data. Any suggestions welcome.
  4. For our application we are not too bothered about the larger filter time constant, but rather need as clean a velocity signal as possible. Part of what we are unsure of is what the difference might be between the tracking filter (index2 set to max 255 and all other index=0) for a resolver and the same tracking filter used for a sinusoidal encoder. We have been using the tracking filter with index2=255 for some time with a sinusoidal encoder which goes through many more cycles per motor mechanical revolution than the resolver, without issue. From the manuals it appears that we should be able to setup the resolver in the same way as the sinusoidal encoder, however, the result we see in .ServoCapt or .TimerA is not the same (sawtooth for the resolver and a nice ramp for the sinusoidal encoder as detailed in your response).
  5. We have encountered a problem with filtering of the resolver position feedback. We have the following configuration for a 4 speed resolver (as per snaps attached). Enctable[18].pEnc = ACC24E3[0].Chan[1].AtanSumOfSquares.a Enctable[18].type = 1 Enctable[18].index2 = 255 (max value for 1st order filter) Enctable[18].ScaleFactor = 1/2^16 This configuration results in the attached snap, where "Motor[2].Pos" appears to move backwards slightly periodically while the motor shaft is being rotated consistently in one direction. This only happens when the motor is rotated at a sufficient speed. When we do not use filtering (i.e. index1 = index2 = 16) the position reported as we rotate the motor is as expected and increments consistently in whatever direction the motor is moved. Also of note: As far as we can determine from the manuals, we should be able to point "pEnc" to "ServoCapt" as this is the configuration used for sinusoidal encoders and other than slightly different interfacing hardware on the ACC24E3 variants it should be the same at the register level. When we look at "ACC24E3[0].Chan[1].ServoCapt or ACC24E3[0].Chan[1].TimerA" we see a sawtooth response that has a 16 bit magnitude (see trace in attached snap), far from what we would expect. Any comments appreciated...
  6. We are trying to setup data packing for an application and have the following configurations, using firmware version 2.4.0.180. Setup 1 for data packing (step 1 of motor test/commission window shows Adc0 responding as expected, but Adc1 is fixed at -16711936 which suggests the data is being packed but not interpreted correctly): PackOutData = 1 PackInData = 2 PhaseCtrl = 1 Setup 2 for data packing (same result as above): PackOutData = 1 PackInData = 3 PhaseCtrl = 1 Setup for unpacked data (works as expected): PackOutData = 0 PackInData = 0 PhaseCtrl = 4 We may be able to proceed using unpacked data, however if someone can point out any config settings that may have been missed it would be much appreciated. Thanks
  7. For on-line commands is there any difference in how the command is handled (ignoring execution priority/scheduling of the thread it is initiated from) between a plc and a cplc? For example using 'adisable' directly in a plc routine vs using 'Command("adisable")' in a bgcplc or C app. I also note that gplib.h states: "These functions are for use as an API for linux "C" APPs. \warning They are NOT available to user written real time "C" PLCs." Presumably this warning pertains only to the RTI driven cplc and use of "Command()" is ok for bgcplc routines. Thanks for any clarification
  8. This seems to happen when a fresh install of the IDE does not yet have the relevant compilers installed, and expects to find specific files/folders for the build process. You can either navigate to the Installers folder in the PMAC install directory & launch the compiler setup.exe for your hardware or connect to the PMAC hardware to trigger the compiler install process.
  9. We have a similar issue with 4.2.0.13 fresh install on a clean Windows 10 (256 GB SSD) build. MySQL fails to install tables (error 1). Tried following the suggested fixes, however it appears to be failing at an earlier stage in the process and as such deletes the ppmac4.ini (as per log below), as part of the failed install cleanup. "1: Custom Action: The 'Install_PPMAC_MySQL_Files' batch file failed (error code: 1) 1: Custom Action: Entering 'RemovePMACMySQLDataFiles' function 1: Custom Action: Deleted 'ppmac4.ini' from C:\Program Files (x86)\MySQL\MySQL Server 5.0 ... CustomAction Install_PMAC_MySQL_Files returned actual error code 1602" Based on the nature of the issue, we thought the quickest way to resolve this might be to create a new partition on the SSD, with sector size that MySQL 5 tables will be happy with. Any suggestions appreciated...
  10. In the ACC24E3 user manual, page 100 suggests that ALTCOS & SIN can be read via Gate3.Chan[j].AdcEnc[2] & [3], with no automatic calculations performed, however page 52 & 53 suggest that the closest (of 8 options) we can get is to have raw A/D data for SIN/COS by leaving Gate3.AdcEncStrobe as default or "&" to clear. Given that we want to have ALT COS & SIN signals in Gate3.Chan[j].AdcEnc[2] & [3] registers, which section in the manual is correct? Thanks for any feedback
  11. Trying to implement master/follower with follower position compensation for a dual motor control driven gear (two worm gears driving main slew ring). Presently, the setup has the two motors driving in opposite directions with motor 2 following motor 1 trajectory. This works fine, however we want to offset the position of the follower (motor 2) relative to the master (motor 1) trajectory based on a cam/comp table. // present relevant configuration Motor[1].ServoCtrl = 1 Motor[2].ServoCtrl = 8 CompTable[0].Target[0] = Motor[2].CompDesPos.a The correct value based on the table and position of the master is written to the "Motor[2].CompDesPos" register as expected, however "Motor[2].DesPos" does not reflect this offset. It appears that for master/follower (ServoCtrl=8) mode, the master trajectory is applied directly at "Motor[2].DesPos" (or some point further) in the attached diagram and ignores offsets applied by comp tables. Is it possible to apply a comp table while having a master/follower configuration or is it necessary to apply servo loop cascading settings (Motor[x].MasterCtrl) to achieve this? Thanks
  12. Thanks for pointing to this datasheet. Presumably the voltage levels are consistent between the Power Brick LV & ACC-24E3 resolver cards?
  13. Bit of a late update, but I think the root cause was failing to properly close/clear buffers before attempting to write. I have not had any problems since and precede all motion program char strings with "close"... Command("close &1 ..."). I am also clearing all axis definitions with "undefine all" before creating new associations. However, it seems that the motion buffer cannot be opened and filled over multiple consecutive Command(), but instead requires that the prog buffer be opened, filled and closed, all in a single Command() call. I am not sure how the command parser sees the string sent via Command() or GetResponse(), but I had thought this would be similar to the terminal; allowing the prog buffer to be opened, filled over multiple commands and finally closed. Any insights are much appreciated. Thanks
  14. Bits 23-22 of Gate3.ResolverCtrl define the resolver excitation gain for an output that is a function of "full magnitude", however we are not sure what the actual full magnitude voltage is. Before we try and probe the outputs with representative loading, does anyone know what the full magnitude voltage of the 24E3 outputs is? Thanks
  15. Indeed, that command string only creates and fills a motion program buffer, the issue is that following such a command, the motion program detail in task manager shows "CS = 0" & "# of motors = 0" instead of "unassigned". As you say when issuing an online command or script command like start/begin, a CS is pointed to a prog number. I would like to know why the default CS 0 appears to be pointed to the motion program before I have issued any commands that would create such association, particularly when the exact same command string works fine in either a plc or terminal? Thanks
  16. Within a thread I have sucessfully used CommandTS to phase a motor and enable closed loop operation, however when I attempt to fill a motion buffer and assign it to a CS, the assignment fails. CommandTS("&1 #1->x open prog 1 linear x100000 close") In task manager, program #1 is created, however is assigned to CS#0 (default) with 0 motors. Using the terminal or cmd"" from a plc creates the motion prog correctly using the same command structure. Any ideas as to why this might be failing? Thanks
  17. No misunderstanding, and I have not found a reason for avoiding use of Command"" in cplc's other than the firmly worded commenting in the header. Also we have used the command function before in both rti/bg cplc's and not encountered issues, though the caution is dully noted regarding rticplc! I would prefer to have all motion buffers & CS control handled via a C app, and perhaps you could comment on this, as when I enabled the capp as RT it nearly caused the pmac to hang. I ran it at the default priority "BACKGROUND_RT_PRIORITY-10", but perhaps I should run at "script_priority-10" or there are further settings I should be aware of (part of the reason for using plc/cplc's is my somewhat lesser familiarity of linux scheduling/threading). Thanks
  18. We want to "pass" a string from the rticplc to a plc script (for populating a motion program buffer). While it is simple to create and manipulate strings within plc/rticplc individually, I can't seem to find a convenient way of defining and accessing global strings. A bit of background: The rticplc will be handling comms, and as the Command"" function in gplib appears not to be available for cplc's, the plc routine is used for writing to the motion program buffer and controlling the CS. We could use a capp, with Command"" calls for all motion program & CS control, but the plc (running on rti) needs to exist for safety monitoring anyway. So far the best way I can find to "communicate" between plc/cplc is with global flags & the use of "pshm->" or SetGlobalVar(), but this does not really help with strings. Perhaps it is possible to reserve a block of user shared mem by defining a global ptr to Sys.Cdata for multiple characters? Any suggestions would be much appreciated. Additionally, I would like to clarify use of Command"" in cplc's because the gplib header states that it is not to be used anywhere other than in C apps. Is this the case, or is it "safe" to use in cplc's (either rti or bg)? Thanks
  19. It might be something obvious, but I can't seem to get the cam table setup elements to save using the save command (manual entry, not using cam sculptor tool). I have written to the cam table saved setup elements for tables 0 & 1 and then issued a "save" command followed by $$$, and every time all parameters are reset to default. These parameters are not write protected as far as I know, and I have nothing overwriting the parameters elsewhere in the project. I have checked "pp_save.cfg" and there are no elements listed for cam tables, which explains why they are not saved, but opens the question as to why the elements are not listed. Any suggestions would be great! Thanks
  20. Hi We are attempting to use "dtogread" in a plc routine, however the D value for the axis of interest is zero (Ldata.coord=1, but D32 is zero, indicating no axes are being reported) Coord[x].TPExec.Pos & Coord[x].CdPos are both reporting correctly for executing & calculated moves, and the online "g" command returns expected distance to go values. The "free" command indicates buffer space is not an issue. Would "dtogread" fail in this way if insufficient buffer space is designated by Coord[x].TPSize? Thanks
  21. We have been using Command() in an rticplc and while it seems to work fine, we have encountered text in the gplib header file that says the command (and TS variant) are for use only in "capp": /// These functions are for use as an API for linux "C" APPs. /// \warning They are NOT available to user written real time "C" PLCs. While I can appreciate that avoiding use of Command() in an rticplc makes sense, this header comment would strongly suggest that it should not be used in a bgcplc either. Any comments on this? Thanks
  22. Indeed, we could use rotary buffers, however filling and closing a set of "fixed" motion buffers is not really the issue. Filling fixed motion buffers in a motion program ".pmc" is clear, however we want to fill motion buffers (rotary/fixed) from a .plc program or cplc routine, and then execute the motion program. Based on the documentation, it does not appear that there is any other way than using "cmd" from a .plc program or by issuing "command()" from a .c routine. Thanks
  23. Hi, We have a scenario where we need to have either a plc or cplc program open, fill and close motion buffers with all move details, before executing the move. We cannot use motion programs directly, as the moves are not known in advance, but will be sent via the rtiplc routine. Further, the plc programs cannot be used to define motion directly, as we require blended moves, but only "rapid" is possible from plc programs. Is it possible to achieve this through a plc program, other than using "cmd" & "sendallcmds" to fill the buffers? Similarly, for cplc are there options to fill an axis motion buffer other than using "Command"? Thanks
  24. A question regarding ILC functionality: We use direct PWM (current loop closure) control, and while the control external to the PMAC is position based, position error is reflected only in varying current (effective torque) commands to the PMAC. We would like to use the ILC with torque comp tables to reduce cogging, however given we are not using position control, we wondered how the motors will be commanded when ILC is active (or where the position error is derived from?). Does activating ILC engage position/servo control only for the time it is active in the IDE, or is it simply not possible to use the ILC with digital current loop closure? Thanks
×
×
  • Create New...