Div_by_zero

MrPLC Member
  • Content count

    97
  • Joined

  • Last visited

Posts posted by Div_by_zero


  1. Working on a communications project where I will be continuously polling 4 different Modbus enabled devices.  By "continuous" I mean that every 25 ms (a parametric value) the PLC will be reading different coils, inputs, input registers, and holding registers.  There are approximately 10 reads per device, so 40 reads total in a single read cycle.

    On command (random operator intervention), writes to certain holding registers will occur.

    In order for a write to occur, the reading must temporarily stop, then, after a short delay (10 ms), a write may be attempted.

    I'm trying to figure out the best, cleanest way to pause the reads so that a write can occur.

    The "brute force" was would be to create, for each writable value, a pause bit, a write delay timer, and a break (unpause) bit.

    However, this would start to add up to a lot of tags quickly, and I feel there must be a better way to do what I need to do.

    Any ideas?

    Thanks!

     

    edit: the PLC is an Automation Direct Productivity 2000

     


  2. Thanks Mark.

    So it sounds like on my HMI, I will need a "Poll Parameters" button that will populate all the parameter values.

    Then, the user will be able to see what they are and change the ones that need to be changed with numeric entries.  A "Write All Changes" button will facilitate that.

    Sound about right?

    Again, forgive me, I've never done this before.

    Thanks again. 


  3. I have a Productivity 2000 PLC communicating with a 3rd party device (embedded C++) via Modbus.

    If I want to do, say, holding register writes...

    This may sound like a silly question, but how do I know what the value of a register is before I write a new value to it?

    Do I have to execute a read before I write, or are PLC write commands usually set up to do that for you?

    Agan, sorry for such a fundamental question.

     


  4. I posted about a compressor sequencer a few weeks ago.  This is a more specific problem associated with that project.

    See below.  I have (3) 16 bit registers assigned to the 3 compressors.  Each register essentially contains 3 pieces of data: 

    1.  is the compressor operational or faulted (bit 0)
    2.  is the compressor assigned to no pressure point, pressure point 1, 2, or 3 (bits 1, 2, and 3)
    3.  is pressure point 1, 2, or 3 actively calling for a compressor (bits 4, 5, and 6)

    For compressor #1, for example, to run, one of three states has to be present:

    comp_1:0 and comp_1:1 and comp_1_4 are high
    comp_1:0 and comp_1:2 and comp_1_5 are high
    comp_1:0 and comp_1:3 and comp_1_6 are high

    What is the cleanest, most efficient way to do these three checks on the compressor coil rung?

    Yes, I could simply use N.O. contacts, but I feel like there's a "cooler" way to do it within the register.

    Thanks for any help.


    UbM7Sqg.png


  5. Hey Kaiser, thanks for the reply.  Sorry for the very delayed response.

    OK I've worked up some logic, but hit a snag.  Here's my question, was actually going to make this a new post, but figured I'd drop it in here.

    Say I have three compressors, and each compressor kicks in at a different pressure point.  Each pressure point (PP1, PP2, PP3) can have 1 of 3 compressors (C1, C2, C3) assigned to it, but not always the same compressor, they rotate.

     
    PP1 = C1 or C2 or C3
    PP2 = C1 or C2 or C3
    PP3 = C1 or C2 or C3
     
    Compressors can also become disabled.
     
    PP1, 2, and 3 are registers.  If PP1=0, no compressor is currently assigned to it.  If PP1=1, compressor #1 is assigned to it, and so forth.
     
    Let's say that C2 becomes blocked.
     
    What would be the cleanest, most concise way to check all pressure point registers for the blocked pump #2 and set that pressure point register to zero (when a pressure point is set to zero, other logic kicks in and assigns a working compressor, if available)?  This may sound easy, any maybe it is, but I'm not seeing at at the moment.  Thanks for any help!

  6. (Allen Bradley Micro 830)

    I have a project that entails the control of (3) of compressors.

    Either one, two, or all three compressors are run depending on a suction line pressure.  As the suction line pressure gets higher, more compressors come online.  A 4-20mA pressure trandsucer connected to the PLC provides this pressure data.

    Each compressor has an hourmeter in the code.  The compressor with the lowest amount of hours on it gets priority, it should be run first.  The compressor with the second most hours is brought online as #2 if necessary...

    Compressors motors can also fault, and that is detected by discrete inputs on the PLC.

    So, first of all, what is the cleanest, most efficient way to determine what the smallest of a set of numbers is if there is no MIN function (or in my case, a MIN function that can only handle two numbers)?   Or, better yet, in case I ever do a larger system, what is the best way to put a set of numbers in order, and associate that order with what those number are assigned to, in this case, compressors?

    Second, what is the cleanest way to select a compressor based on multiple criteria?  Some sort of 2 dimensional array?

    Maybe I' making too much of this, but when I try to write it, it gets complicated and bulky *very* quickly.

     

    Thanks for any help! 

     

    Note: I was not sure if I should have put this in the AB forum.  It really has very little to do with the actual processor that I'm using.

     


  7. Using ladder logic and standard PLC functions (in my case, an Automation Direct P2K), what is the cleanest way to convert a timer value that's in in milliseconds to hours : minutes : seconds?

    ETA: the "timer value" is actually coming in from an external microprocessor via Modbus in milliseconds.  It's not a P2K "TMR".

    Thanks.

     


  8. Running a P2K that's connected via Ethernet to a proprietary greenboard (embedded C++ running on an ARM Cortex processor) that's equipped with Modbus comms.

    The C++ programmer provided me with a Modbus register document.  The read only inputs (Modbus command: 04) section shows blocks 1 and 4 being 6 byte ASCII registers.  Blocks 7-13 are 2 byte integers.  Blocks 14-22 are 4 byte integers.  Blocks 24-31 are 2 byte integers.  Blocks 32-46 are 4 byte integers.   Blocks 48-51 are 2 byte integers, and block 52 is 4 byte integer.

    If I do a single MRX and try to bring in all 52 blocks at once as a group, nothing looks right in a Data View.  I am assuming that MRX group reads have to be limited to like register sizes?  Meaning, I would need a group MRX for blocks 1-6, another one for blocks 7-13, another one for blocks 14-22..

    Is this correct?

    Thanks for any help.

       


  9. Thanks kray, good info.

    So what units will Pr.133 be entered in?  Will it be raw A/D counts, 4.000 - 20.000 ma, or something else?

    edit: OK, I see it's going to be 0-100 %.

    So if the 4-20 mA signal from my pressure transducer is 0-15 PSI, then setting Pr.133 to 50.0 will make the PID's SP=7.5 PSI.  Got it.

    Thanks again.

     

     


  10. Hello,

    Currently running an FR-D700 inverter by feeding it a 4-20 mA speed reference and pulling the STF run forward signal low.  The VFD is running a ring compressor / regenerative blower.

    Would like to change the setup so that a pressure transducer on the low pressure side of the blower feeds the VFD a 4-20 mA signal, and the VFD's on board PID loop modulated the drive speed so that a certain pressure set-point is maintained.

    I'm assuming this is possible and a pretty standard setup?  Do I just change some parameters so that it will consider the 4-20 mA loop the PV?  How do I change the SP on the fly?  Is that done via a parameter change, or can a second analog loop be used as the SP?

    Thanks for any help!


  11. Well, turns out I went with a Rigol 1054Z.  I did the upgrade thing via a web site, it's now essentially an 1104Z.  Pretty cool.

    This is my first scope, have a couple very basic questions:

    1.  The scope is rated for 300 V.  If I use a stock probe set to 10x attenuation, can I safely measure a 480V waveform?  I assume I need a high voltage probe for this?  Don't worry, I won't even try this until getting a solid answer.

    2.  When trying to "zoom in" on part of a waveform by turning the volts/div down, I often find myself getting lost.  Also, when cranking the vertical position to try to get back to the trace, I'll often get a "parameter limited"  What am I doing wrong here?

    Thanks for any help.

     

     


  12. Hi Mendon, Yes, sort of figured it was going to heavily depend on whether or not I'll be using it for communications. I'd say at first, it will not be used for communications at all, but if it had the ability to do at least some of that, it wouldn't necessarily be a bad thing. I gather that the scopemeters, even the nice ones like the Flukes, are really only good for things like determining if you're feeding a $20,000 motor with garbage power or not while in the field...  

  13. Wanting to buy my first oscilloscope. Need some help here, the choices are overwhelming. What bandwidth and what sampling rate would be appropriate for an "automation guy"? Also, what brands are good? I'm willing to send up to $1,000, but would like to explore the $500 region first. Also, what probes?  It is my understanding that probe quality is critical. Some things I would want to do with it, not limited to:   -0-10V and 4-20 mA analog signal voltage analysis (noise) -AC power waveform analysis (up to 480 VAC) -DC power supply quality analysis -inverter output waveform analysis   Thanks for any help!    

  14. Have a redundant PLC project. Two Automation Direct '06s, one EZ Automation SE 6" touch screen. Is there a way that I can send a value (a bit and/or a "V" numeric) to both PLCs simultaneously via one pushbutton or numeric entry? I have both PLC IP addresses configured in the HMI and know how to address the tags to one OR the other, but haven't figured out how to hit both yet. Any help would be greatly appreciated, thanks!

  15. Lots of ways to do push-push in PLCs that don't have "toggle" functions. The slickest way I've found is to use an XOR (first image below, shown in an A/B 830), but if that's not available and my only option is "brute force", this is what I've been doing (second image). It requires 4 bits and 3 rungs. Feels like a lot of work and I wonder if there's anything more efficient out there? (in the example, C25 is the key and C27 is the toggled coil)