Jump to content
OMRON Forums

kmonroe023

Members
  • Posts

    110
  • Joined

  • Last visited

Everything posted by kmonroe023

  1. I ended up using the send command in a script PLC, and it worked well enough. But...we found that if I had the IDE open then our HMI app wouldn't always get the message from the send buffer, so the message update was sporadic at best. Apparently the app (the IDE or our HMI) that read the buffer first was the one to get the message. So, I wrote the message into user shared memory, and the HMI guy basically reads those 72 bytes and converts them to an Ascii string. Not the most efficient, since he has to query the Pmac 16 times (one time for each unsigned int) to get the whole message. Thought about trying to write it out a TCP/IP port as described above, just haven't written too much in C yet.
  2. Do you have lookahead enabled? On our system (also an XY Cartesian setup), I've noticed that Pmac will stop the motors when it calculates that the motor will exceed the softlimit, not necessarily when the offending move is executed. If I increase the lookahead distance (coord[x].LHDistance) the motor will stop even further from the actual soft limit setting. Interesting...to say the least. I expected that it would stop at the limit...oh well. Haven't tried to enable the StopLimitStopDis flag; the verbage "with the position of the motor that hit its software limit saturating at the limit value" scared me a little bit.
  3. I have a couple of questions relating to how PowerPmac and the IDE handle string arrays. The guys writing the HMI application (running on a separate host PC) for our machine have asked that I store the machine alarm message strings in the Pmac. Creating and saving the 'string array' seems simple enough, I plan on having a PLC run at startup that will populate the shared user memory with all the alarm strings needed. The script code would be as shown below. local indexStart,strgLen; indexStart=16000; // byte offset into share user memory strgLen=72; // default length of alarm string stringIndex=sprintf((indexStart+(1*strgLen)),"Alarm Message 01"); stringIndex=sprintf((indexStart+(2*strgLen)),"Alarm Message 02"); . . stringIndex=sprintf((indexStart+(96*strgLen)),"Alarm Message 96"); At this point I plan on having a total of 96 alarm messages, of 72 characters each, so I'll need 96 commands similar to what is shown above. When a particular alarm is active, the strncpy command will be used to copy the message for the alarm into a separate buffer in user shared memory that the HMI app will poll to read and display the active alarm to an operator. My first question - Is this the best way to populate string arrays? Second question - Is there a way to easily display a string that is stored in user shared memory, in the IDE? I don't see an option to format data in the watch window as a string. Third question - I'd like to echo the active alarm string to a port using the send instruction; for example to the IDE Unsolicited Messages window. But...strings for the send instruction look like they need to be defined explicitly in the send command. Is there a way to have the send command 'point' to a string in user shared memory? There may be ways to handle this better in CPLCs but my C programming skills are not so good, so...script PLCs for now. Thanks, Kmonroe
  4. I have 4 channel Acc24E2A card that we basically want to use as an analog output card. PowerPmac has assigned motor numbers to the 4 channels by default, but none are enabled (motor[x].servocntl=0). I found that if I write directly to a Dac on a particular channel, a voltage proportional to the value written will be output to the appropriate phase output (A or B). Which is good, that's what I want. But I'm wondering...is it really that simple or am I missing something that could bite me long term. If I leave the motor un-activated, is really as simple as writing values to the Dac[0] or Dac[1] term to use the outputs on the card as analog outputs? Thanks, kmonroe
  5. I've just got done setting up our gantry system and successfully configured the two y-axis motors using the cross-coupled gantry mode. The tuning using the Auto Tuner was actually pretty good, but I think we'll need to fine-tune the gantry tuning for our application. I was wondering if you guys have any advice, or maybe some white papers handy describing how best to utilize the tools in motor Tune for cross coupled gantry mode. Questions: -When adjusting gains, should you only adjust gains for the 'master' or both master and follower? Since each motor does its own servo calculations, I assume I'll need to tweak the gains for each motor. -What about the Cross-Coupling gains? Auto-Tune filled those out for me, but I don't quite know if I should leave them be, or adjust them at some point. I know I'm probably asking more than can easily answered in a forum post. I've looked through the Pmac manuals but I haven't found much regarding the gantry mode. Thanks
  6. Hello Sina, Thanks for the clarification. My biggest concern is making sure the motors are protected as I continue to setup my system. Now that you mentioned the new firmware and IDE, any word as to when it will be released? kmonroe
  7. My PowerPmac system has 5 linear motors with overtravel limit switches connected to ACC-24E2 axis expansion cards. DeltaTau GPL direct PWM drives are being used to drive the motors. I've use MotorSetup in the IDE to configure the motors, drives, and axis expansion cards. The motors run fine, but hitting an EOT sensor will not disable the drives. The motor[x].pLimits all appear to point to the correct gate channel. If I monitor the EOT switches in the Motor status window, they change state correctly and the LimitStop flag will go high when one is hit. But if I jog a motor onto the limits, the drive will not disable. I need to kill it manually from the terminal. I first noticed this while I was setting up the motors, I was issuing small open loop commands from the terminal (#1out5) to test my commutation, and if the motor hit and EOT switch, the drive stayed active and the motor appeared to 'lock' into position on the EOT switch. Even if I hit the correct switch for the direction I was commanding (pos EOT for positive open loop commands and vise-versa). Not sure what I'm missing, but shouldn't the drives always disable if an EOT is hit?? Thanks
  8. Perfect! Thanks for the help. Somehow missed that thread when I searched the forum.
  9. I know this is probably a silly question, but I've hunted high and low and can't find an answer. How do I automatically have the Ppmac run a script PLC at startup? In the Turbo there was an i-variable to do this, so I assumed there would be something in the Sys data structure to set script PLC startup behavior. Ideally what I'd like is to automatically start one script PLC, and have that start all the other script PLCs I need for our process. I don't necessarily want to start all PLCs when the processor is reset or powered up. Thanks
×
×
  • Create New...