devo.xx

MrPLC Member
  • Content count

    29
  • Joined

  • Last visited

Community Reputation

0 Neutral

About devo.xx

  • Rank
    Robots programming Robots?

Profile Information

  • Gender Male
  • Country Canada
  1. Yeah, mapping IO and keeping comments consistent between our drawings and PLC code used to be a problem. Since then, we do the same. Everyone looks to the same .XLS for the "most current comments" and addresses. I just wanted to make a joke about redundant jobs ;)
  2. I'd be concerned if 70-80% of my job was redundant enough to let Excel take over ;) Couldn't you just use an AOI for redundant PLC code?
  3. PLC Law

    I think I tore something laughing so hard at 54.2. PLC LAW #60 - IN THE ABSENCE OF PROPER CONTROLS DUE TO DESIGN OVERSIGHT, USING A TIMER MIGHT MAKE IT WORK FOR COMMISSIONING, BUT 6 MONTHS DOWN THE ROAD WHEN EVERYTHING HAS SLOWED DOWN YOU'LL ARRIVE ON SITE TO FIND THE PARTS ALL OVER THE FLOOR. PLC LAW #60.1 - WHEN A PART IS WORN OUT, REPLACE IT. COATING IT WITH WD-40 EVERY SHIFT IS NOT AN OPTION. PLC LAW #61 - DON'T BOTHER BUYING A SUPPORT CONTRACT. MORE OFTEN THAN NOT THEY CAN'T ANSWER YOUR OBSCURE QUESTION ANYWAY. WHY ELSE WOULD YOU CALL? CLEARLY IT'S NOT DOCUMENTED. YOUR PHONE SUPPORT TECHNICIAN IS ONLY LOOKING THROUGH THOSE SAME MANUALS ANYWAY. Not exclusive to PLCs, but always a good law anyways ;) PLC LAW #62 - IF YOU INSTALL AN ADJUSTABLE COMPONENT (FOR ALIGNMENT DURING INSTALL), MAKE SURE IT IS SECURELY FASTENED DOWN.
  4. PID Loops

    No, it is a TOF that self-triggers. It executes every 0.5sec. Does anyone have any insight on the SCALING parameters?
  5. PID Loops

    I was using Independent because the constants Kp, Ki & Kd carry the same units that I am used to seeing in the Mitsubishi world of PIDs. I can't post the project itself, but I am posting some snapshots of the setting windows, perhaps that will help? In terms of Scaling, I am looking back through my notes and this is what I have written down: When Valve Analog Out (CV) = 3150, Speed (PV) = 1100 thou/sec When Valve Analog Out (CV) = 835, Speed (PV) = 130 thou/sec When Valve Analog Out (CV) = 1295, Speed (PV) = 290 thou/sec When Valve Analog Out (CV) = 1715, Speed (PV) = 550 thou/sec Plotting these gives me a non-linear response, the response is pretty well fit to a 2nd order poly (quadratic). However, the range I need my PID to control in is max 320 thou/sec, the response from 0-320 thou/sec is close enough to Linear. As for other things that you may see in my program: My PV is actually a calculation that the PLC is doing. I take a sample of my Linear Encoder distance, compare vs. the last sample, and divide by time to give me exactly Thou/Sec as my input: "BM_East_Enc.Velocity_thou_per_sec" I am not sending the HSC counts to the PID loop. I do suspect that I should be sending the HSC speed directly to the PID. *See HSC.jpg. Currently, both Channels are set to "Encoder 1x Mode", I changed Channel 0 to "Frequency Mode" just to show the different settings available to me. *Encoder 1x Mode monitors just position. Frequency Mode tells me how many pulses per sample (Speed). *Channel 0 is for my East Encoder. Channel 1 is for my West Encoder. 2 Identical systems, each with their own PID loop. I am sending the CV out to a DeviceNet card that has a range of 1638 - 8191. Neutral is at 4914.5. My range needs to be: Closed at 4914 --> PID output CV = 0 Fully Open at 1638 --> PID output CV = 3150 (actually 1765, I was trying to change the Scaling to see if my response got any better, no luck) So: SUB(4915,BM_East_PID.PID_PreOutput,DEVNET1_N20_S02_COS_O.Ch0Data) Thanks.
  6. My question comes from not understanding what all the values are inside the PID loop setup. Looking through manuals, and searching everywhere online, I cannot find ANY examples, or ANY explanation. So here are the values I don't understand: RSLogix 5000, V17.00.00 (CPR 9 SR1) PID Instruction Configuration Tab Control Action: [sP - PV] or [PV - SV] - From what I can tell, this is DIRECT vs. REVERSE acting. Can someone confirm? Derivative Of: [Error] or [PV] - Would I use ERROR if I want to just use the PID to correct for the error, and use a Feedforward to control the typical speed? - Then use PV when I want the PID loop to run the whole system? Loop Update Time: [x.x secs] - I have found some stuff about this... but I don't understand it. I need to set my Loop update time to say 0.5sec, then a timer in front of my PID loop that cycles every 0.5sec. So then the PID loop only updates the CV every 0.5sec... Then why even have a timer in front? Scaling Tab - All of these confuse me. Process Variable (PV): [unscaled] and [Engineering Units] Control Variable (CV): [max/min] Tieback: [max/min] For the sake of my understanding, I will give my process and what I think these values need to be. But truly, I am just guessing as to what these represent... Process Variable (PV): Speed, 0 - 2200 counts (from my analog card, 2200 counts represents 3277 on my CV) Engineering Units (PV): Speed, 0 - 1000 thou/sec (or 0 - 1 inch/sec) Control Variable (CV): Valve position, 0 - 3277 counts (3277 represents FULLY OPEN valve) Tieback: I just want my PID loop to work, I can look at bumpless transfer later. I got my Process Variable numbers from watching the High Speed Counter card reporting while I opened up the CV. ie. Analog Out to my Valve: 3277 counts HSC in from my Encoder: 2200 counts +/- 70 counts Doing some math: 2200 counts = 1000 thou/sec Let's start here, if these settings are correct, then it must just be my tuning. But when I change my Scaling values even slightly, the whole PID loop runs wild. Which means I have no standard way of tuning this loop.
  7. Hey guys, I've got an existing system in the field that consists of: 1756-L61 - Main PLC --> 1756-DNB - DeviceNet Scanner A system of 20 Nodes --> 2 Nodes have: ----> 1760-DUB+LDF Pico GFX-70 -------> 1760-DNET Currently, the DeviceNet is set up so that I can see these Pico modules over the network. But, when they were installed, the contractor stopped there... ie. The device exists, but never actually transmitted or received any signals. At the time, that was all that was necessary: Give the operator a numerical feedback on the Screen. Now, I need to Read/Write a "Marker Word" on the Pico module. I have been searching the net now for ... too many hours ... and haven't found a useful manual that actually explains the Communication method. Let alone, how to set up this DeviceNet card for communication! I'm really at a stand-still, and am considering just buying an Analog-In and an Analog-Out card for DeviceNet, then possibly being forced in to purchasing a new Encoder and Proportional valve.... Not ideal. Any help would be great! Thanks
  8. gx works2 for win7

    I use 1.64S on my Win7-64Bit computers and don't have any trouble. It just sounds like your "Connection Destination" settings are incorrect. Also, look for "Mitsubishi USB GXWorks 2 Windows 7" if you are trying to use a USB connection. The drivers don't get installed correctly, you have to manually do it.
  9. FX Programming Manuals

    I'm currently programming a couple of FX controllers, and I have been reading through these manuals and have come across something that is just bugging me. All of the commands that are referenced have an: FNC ### attached to them ie. FNC 12 MOV FNC 18 BCD FNC 20 ADD What does it mean? In GX Works 2 I just use "ADD" or "MOV" Was this an old way to program..?
  10. I'm guessing L is for "LONG"? I can't make a Data Type for "L"?
  11. I came across that syntax in the documentation but didn't quite understand how to use it... [N10:7] vs N10:7 But for this application, I have 18 locations, plus 2 NUL locations, 20 total. So a single INT won't work, I was hoping for a DINT or DWORD.
  12. Hey guys, So I've posted this before, but I don't have a lot of experience with AB controllers, my background is in Mitsubishi. This time I'm looking for some syntax help that I haven't been able to find in my documentation. I want to use a Bit-String to keep track of the locations of items. Such that when the bit is 1 an item is in that zone, when it is 0 the zone is free/open. I have used this sort of location handling before to detect where my Trolley is compared to where it needs to go: Trolley Loc - 0010 (2 dec) Trolley Dest - 0100 (4 dec) If Trolley Loc < Dest then Drive to the left else if Loc > Dest then Drive to the Right else if Loc = Dest then (run some other code to slow down etc.) In this particular application, I have 18 zones plus 2 on either end for "Nothing goes here." N10:5 N10:4 0000 0000 0000 0100 1001 0010 0001 0010 - Represents the location of my items N10:7 N10:6 0000 0000 0000 0000 1000 0000 0000 0000 - Represents the location of my Trolley N10:9 N10:8 0000 0000 0000 0000 0000 0010 0000 0000 - Represents the destination that the Trolley is driving to I can run a MEQ with my destination to verify that there is an item in that zone. In Mitsubishi I could set up a bunch of Bits and reference them like this: M0 - Just one bit (equivalent B3:0/0) K0M0 - Just one bit K1M0 - Start at M0 and include the next 8 bits K2M0 - Start at M0 and include the next 16 bits (equivalent B3:0) ... etc. up to K128 (The same Kx reference works for Word devices, ie. K1D0 is D0 and the next 8 words.) Is there some sort of Syntax that I can use to check across multiple Word devices or Bit devices?
  13. PLC-5 subroutines

    I think I'll stick with what BobLfoot said. They're just old PLCs working on the old standard. To map all my variables using "MOV" or "COP" will just be a nightmare.
  14. PLC-5 subroutines

    1747-L551C 5/05 CPU So I guess an SLC-5/05? RSLogix500 is definitely correct :P
  15. Hey guys, I'm pretty new to programming AB controllers and don't know what limitations exist and where I have more freedom. (Background is with Mitsubishi) A while back I programmed using RSLogix5000 and it had a lot of power. However, this particular project is using a PLC-5 controller, so I must use RSLogix500. What I have are a bunch of "Trolleys" that drive along a track, from A-B, A-C, C-B, etc. They operate exactly the same way, drive until you are close, slow down, stop, open arms, drive away, grab another item.... In RSLogix5000, I could create a Subroutine and have Input/Return variables. So I could pass in the common "Drive to Destination" and a Structured Data Type that would handle all of the variables for the Trolley. In RSLogix500, I cannot just pass these variables in. One way I can see, is to do a bunch of "MOV" instructions to pass them in to the SBR. Then when the SBR gets executed (immediately after the "MOV" instr) it will perform the math/compares on these variables, then do a bunch of "MOV" instructions at the end. But this gets messy quick, and if anything changes inside the SBR, I need to remember to add/remove the necessary "MOV" instructions. I'd like to make my code as easy to debug and update as possible. So if I need to change the way the Trolleys handle their "Slow Down" zone (ie. maybe I want to add a "Medium Speed" zone later) I only want to have to add it ONCE. This negates having to copy/paste the new rungs in to the adjacent programs for Trolley A, B and C. Copy/Pasting has led me to miss changing one variable, or not copying one rung, etc. Is there a way to do this in Standard Ladder?