Jump to content

Flex727

MVP 2023
  • Posts

    3,275
  • Joined

  • Last visited

  • Days Won

    239

Posts posted by Flex727

  1. Yes, it looks like a typo. English isn't my first language, but I'm pretty sure that the following sentence is incorrect:

    "The largest value in the range, 2304, is contained in MI 62; therefore 2304 is stored in MI 59". 

     

    I would say that 2304 is contained in MI 59 and therefore stored in MI 62, this makes much more sense,

     

    Yes, but also the text and diagram show a vector length of 10 starting at MI 50 and ending at MI 60. It should run from MI 50 through MI 59 or Run from MI 51 through MI 60 (or else change the vector length to 11).

  2. This project continues to challenge. Not only have I choked several ladder subroutines, but I ran out of transition contacts. I've never done that before with an enhanced vision PLC. It's been a real learning experience as I had to go through the program and determine if I REALLY needed that positive transition contact (e.g. for a button press, etc). Obviously for a button press to navigate to a different screen, a PT contact is absolutely necessary, but to RESET most alarm latches, it's not that important (as long as the SET RUNG follows the RESET rung, not before). I also changed my logging routine to the more sane method suggested above by HigHTech. I had to move well over a hundred MBs to a vector, but it cleaned up my program nicely and the EVENTS TRACK FB works very well for this application.

    • Upvote 1
  3. I just choked another subroutine. This one had 273 ladder rungs with no Function Blocks at all - just ordinary contacts & coils and a few timers, and none of the rungs were very complex.

     

    The reason this subroutine had so many ladder rungs is because I normally have one subroutine just for Inputs (and another for Outputs) where I buffer each Input and add some logic to enable the user to convert the Input from Normally Open to Normally Closed, if needed for the future. This particular project is a beat down as it has 135 Inputs (and almost as many Outputs).

     

    This got me worried that I might run out of project memory, but apparently no worries there:

    post-408-0-62495800-1472004628_thumb.jpg

  4. Yep, that would be great if all the events were in a vector. Assigning or moving all the event MBs into a continuous block is more trouble than it's worth right now, but I'll keep it in mind on future projects.

    The primary reason I don't use the Event FB is that it is extremely difficult to troubleshoot and I hate dealing with it. Considering the complexity of the current project I should have reevaluated my general habit in this regard.

     

    Thanks again, HigHTech!

     

    By the way, I'm still looking for the answer to my original question.

    • Upvote 1
  5. Thanks for your interest, HigHTech. This software is being written exclusively for a specific customer and I would prefer not to send it out without their authorization. I will try to provide more detail though.

     

    See attached to see what is inside those function blocks. It's really pretty simple - I want to log the date and time (and event name) to a data table each time one of 130 events occur. For instance, in the ladder rung I attached above, an operator might push a button (binary text switch w/toggle) on screen to disable RSU 1. Pressing that button causes MB 8001 to go high and that positive transition initiates the addition of a line to the data table, as stated above. I see no reason to add complexity by using an additional MB that gets set and reset when the data table entry completes because the data table operations occur within one PLC scan with no problem.

     

    My purpose with this thread was to try and understand the source of the compile error, however I am certainly open to learning a more efficient way to create this data table log.

     

    Here are the 3 function blocks from the ladder rung above, in order, and a look at the data table structure:

    post-408-0-48174500-1471901723_thumb.jpgpost-408-0-04742200-1471901733_thumb.jpgpost-408-0-97008200-1471901742_thumb.jpg

    post-408-0-28345400-1471901769_thumb.jpg

  6. Yes, they all need to run. Basically, I'm logging events to a data table. The 3 functions are:

     

    1) Copy all rows of the data table down one.

    2) Copy a single row from a different data table that lists all the events by name into the first row.

    3) Write the date & time that I've already converted into a string into the first row of the data table.

     

    The 130 rows represents the approx 130 different events that the customer wishes to log.

     

    Here is what it looks like:

    post-408-0-62796200-1471898252_thumb.jpg

  7. One issue I find extremely annoying is that when I copy a variable that allows a keyboard entry (timers, numeric, ASCII variables, etc) the description field, which shows up as the prompt on screen for the operator, is deleted and replaced with a generic "Variable nnnn". I understand this field is used to establish some form of unique name for these variables, but how about leaving the description in place and just appending "(nnnn)" so that it is easier for the programmer to get the right description in the field?

    • Upvote 1
  8. I occasionally get the compile error 55 - "Subroutine ladder data size exceeds limit. Split subroutine to solve problem". Obviously the subroutine is too large for some reason and it's really no problem to split it up, as suggested, but my question is: what specifically causes the problem? Is it the number of ladder rungs or the total data size of the subroutine (meaning a small number of complex ladder rungs or a large number of simple ladder rungs)?

     

    The subroutine that I am currently working on that triggered the error has 130 ladder rungs, including the RET function. That doesn't seem like a lot, but nearly every rung is executing 3 different Data Table functions, which might be data intensive.

     

    By the way, I can find nothing in the Help file about this error.

  9. ...I'm measuring pressures in the ranges of 1E-07 mbar and my pressure gauge gives me a 0-10 volt signal and the formula to find the pressure = 10^(1.667xU-11.33).

     

     

    Two questions:

     

    1) What is the actual pressure range that is being measured from 0-10 volts? (You say 1E-07 mbar, but that it a number, not a range).

    2) 10^(1.667xU-11.33) What is "U"?

     

    I ask because there may be a slightly easier way, but the most straightforward way is to break up the two parts of the exponential notation into two integers and display them as you would any integer, using implied decimal and a post number string that is built in to the HMI integer display.

  10. I'm sure it's not unlimited, but you will be able to connect to 6 slaves easily. Just assign the IP addresses and Port numbers you wish to use in the PLC Communications/Protocols/MODBUS/Master and you will be able to communicate. I think UniStream can easily handle at least 30 simultaneous connections.

×
×
  • Create New...

Important Information

This site uses cookies. By clicking I accept, you agree to their use.