Jump to content

Joe Tauser

MVP 2023
  • Posts

    2,858
  • Joined

  • Last visited

  • Days Won

    308

Posts posted by Joe Tauser

  1. 11 hours ago, ZebioEE said:

    This dispays number limit is artificial and decrease Samba functionality.

    There are a number of "artificial" limits in a Samba.  This is by design.  The Samba series was created as a response to OEM requests for a lower priced PLC.  Unitronics did this by removing the expansion I/O communication circuitry and removing memory.  

    Unitronics' reasoning is that if the application  gets to a certain size then you need to step up to a regular Vision series.  If you were able to get 26 displays in then I'd say you found a bug in an older version that worked in your favor.

    I do know from an inside source that implementing the new PCOM password security feature required programming acrobatics to fit additional code into memory that was already at capacity.  The programmers probably grabbed a block of memory that was previously allocated for displays, so they had to put the display count check rule in place.

     

    Joe T. 

  2. 53 minutes ago, mont222 said:

    I ask because many other controllers we use support this.

    Yes, you've made that clear.  I am curious if other controllers allow you to control socket assignment.

    A socket can only have one connection at a time.  So the short answer to your question is no.

    I've never tried to assign the same port to two sockets, but it's worth a go.  Try putting a Socket Init block in for Socket 0 and set it up as a Modbus TCP Slave using port 502.  You'll have to put another Modbus Config block in to support a second SCAN_EX block.

    I've attached a program demonstrating this.  I have no idea if it will work for what you're trying to do.

    The forum is not Official Unitronics Support.  You can also pose your question to support@unitronics.com. 

    Joe T.

    Dual Slave V570 Test.vlp

  3. I don't think any of the moderators have experience with this old hardware, myself included.

    If support is giving you the cold shoulder then all we can do is collectively noodle on the problem.  Aus had an excellent suggestion and it looks like you've made some progress.

    Following the pattern, I would change the "code of the hw base" to 14 for the -B5.

    Joe T.

  4. The onboard high speed counter resets to 0 on power up in all Unitronics PLCs and in the RC15.  If you want to retain the HSC value you must copy it continually to a buffer register in the CANbus master PLC.  Check to make sure it's not = 0 before copying it to the buffer.

    You should be monitoring the online status of the RC15 in your master code.  Here's an example of how I do it:

    image.png.49ce81327ca8b0777b63d91b5ebbe054.png

    When you see the RC15 go back online, write the value from the buffer back to the RC15.

    If you want to describe your application an post both your master and your RC15 programs we can have a look.

    Joe T.

  5. You've clarified several things about your background and application.  Good to know.

    Auto-tune is not a perfect process wizard. 

    image.png.700ca8bcf2220985a6d7d32bd65c6691.png

    It will get you into the ballpark but you'll need to tweak the settings.

    I can't say I've spent a lot of time in the ceramic industry,  but I did help out the Ceramic Engineering Department at my alma mater with some controls so I now know what S and R thermocouples are.  They were nowhere near as demanding as your client.

    Just to clarify a few things-

    1.  Is it a 0.5% error margin or a 0.5 degree error margin they get upset about?  

    2.  Is your 4/20 signal controlling SSRs via a PWM control or a phase-angle fired control?

    3.  You've verified that you are precisely measuring the control signal and it is changing over the very small P band.  At this point I'd follow Gabriel's advice and set the D = 0.   Increasing the value of I should pull the droop up.  If not there's something wrong.

     

    There are a couple of functions under FB's->PID Auto-Tune->   Read Control Components and Read Error Integral.  Put both of those in your program so we can get some more diagnostic information while the loop is running.

     

    Joe T.

  6. From your post I gather that you have your input temperature resolution set to 0.1 deg C.   I would seriously consider knocking that decimal point off your temperature.  If your input is a type K thermocouple your sensor has +/- 2 deg C accuracy and that extra decimal gives managers something to focus on and get upset about when it moves 0.5 degrees.  Everyone expects perfection these days.

    To answer your question - if this is the resolution of the PV input the the PID block then your P band will be 0.1% times the P value times PV, or (0.001 * P * PV).

    So at 548.8 degrees C with P = 1 your P Band is 0.55 degrees C.  

    In a PID loop the Proportional band is the first and most weighted component of the equation.  Outside the Proportional band the output is either full on or full off.

    A proportional band of 1 is effectively an ON/OFF control.  Changing the I and D parameters will have no effect on the output at this point.

    Sometimes the Autotune doesn't work.  Your loop is drooping slightly.  If you want it to go higher you need to set your D = 0, set your P =10, and start incrementing I until the temperature starts coming up.  If it starts oscillating double your P value.

    Are you monitoring the actual electrical value of the 4/20 output signal?  If you logic is working with a P value of 1 it should be effectively alternating between 4 mA and 20 mA with nothing in-between.

    The difference between ON/OFF and the PID you have defined at this point is ON/OFF switches off at the setpoint, PID is switching off at 0.55 degrees below the setpoint.

    Honestly if you're able to maintain 548.8 degrees at a 550.0 degree setpoint I wouldn't be worrying about it.

    Joe T.

  7. Information Mode over-rides your program, as you've seen.  I generally keep Information Mode a secret from end users.

    Making your own interface to edit the values in the Ethernet address Memory integers is relatively simple.  I usually put that screen behind a password.  After editing you either cycle power to for the new Ethernet information to take or put a negative transition on the Display Active it tied to your editing screen.  Use that to re-trigger the Card Init block to make the settings take effect immediately.

     

    Joe T.

  8. The PLC must be turned on.  You can't upload or download anything otherwise.  

    Don't import or export the PLC operands at this point - that's Unitronics' way of describing the actual numerical values in the memory.  You probably want to leave those alone.

    To upload the actual PLC program to the PC you select "Upload".

    image.png.62d07d6aecc3fcc978e9e70eb9db16c0.png

     

    However, as Flex said, if the original programmer did not enable this you won't be able to get the program.  You'll probably need to contact the original programmer to get this.

     

    Joe T.

  9. We're not official Unitronics support, but if Unitronics doesn't get back to you right away (it is Saturday) I'd start by downloading the oldest version of UniLogic that you can and starting the firmware update with that.  If you go to the UniLogic download area, you'll see a box called "Previous Versions".  The oldest one on there is version 1.21.51.

    I've seen a problem with a UniStream not recognizing cheap USB drives.  When you're making your upgrade USB drive, make sure you have a good quality one like a SanDisk or other name brand.  It needs to be at least 8 GB.

    Joe T.

  10. I didn't know your background so I didn't want to start brand dropping.  We use Weintek screens as the HMI when we do an Allen Bradley project.

    We frequently use VNC server and the webserver aspect of UniStream for remote display.  Using the Weintek VNC client as you describe is an excellent solution.  No programming needed!

     

    Joe T.

    • Like 1
  11. 2 hours ago, Joseph_F said:

    My coworker and I believe this is due to the controller's close proximity to the environment when the panel door is opened

    You're probably right on that.  Are other exposed metal parts (typically terminals or lugs) showing signs of corrosion?

     

    2 hours ago, Joseph_F said:

    Unitronics brand panels used in such environments

    That sounds kind of specific to Unitronics.  Does the customer have PanelViews or other HMIs that do not have the failure mode?  If this is a Unitronics problem, we need to bring this up with them.

    Either way, you have three choices:

    1.  Remove the controls from the environment by re-locating the panels

    2.  Remove the environment from the controls by installing an air purge system in the panel to push the gas out

    3.  Accept that environment tears up your controls and keep spares loaded with the program handy.

     

    Joe T.

  12. Translated - 

    A question.... And how are the sub routines created? I have the same problem every time I try to delete a "hide vars". Greetings

     

    While in the ladder editor click this button

    image.png.3c2521d290c1dfda93e422e429a943de.png

     

    In the menu you can also Find "Add New Subroutine" under "Insert".

     

    Regarding removing "Hide Vars" - anytime there's a little eraser next to the field that's how you clear it

    image.png.384b59a284083f446889fdf673dee3da.png

     

    Joe T.

    • Like 1
    • Thanks 1
  13. Point taken on me modifying the Grafcet.  Your drawing illustrates it perfectly.  But I modified it to suit my needs as a programmer. 

    My State Machine style grew from my frustration with PLC Direct 400 series Stage Programming (now I'm really dating myself).  Each stage was controlled by an S-bit  and if you wanted to see where you were in the program you had to pull up a watch window and then remember what stage did what.  The bits were in sequential order and if you need to insert another operation between stages then you needed to either re-number all your sequence bits or use a fresh bit that was out of order with the others.  The graphical representation of the software at the time didn't like the bits being out of order.  Plus, there was a limited number of them.

    My work these days consists primarily of Unitronics (I am a distributor / system integrator) but also a fair amount of older Allen Bradley.  Neither of these has stage programming or is even close to IEC 61131-3 compliant, so the other languages aren't really on the table for me personally.

    Both brands have ladder.  Both brands have Equal and Store (MOV) blocks.  Your CODESYS solution with Sets and Resets is only slightly removed from my pointer method, and it uses functions common to all PLCs.  Which is good.  The main reason I don't program that way is because when you set a bit you have to remember to reset it.  A numerical pointer takes care of itself and you can look anywhere in your sequence and see what the value is.

    2 hours ago, brooksg44 said:

    I personally think this is where this methodology becomes ugly and less intuitive

    It most certainly can.  If I've got separate State Machines running in parallel I clean up the code by putting them in their own subroutine that is always called.  Each one has its own Idle state, and the Main loop starts them by pushing a value into their pointers, as you did in your CodesysSnippet document.

    I'm sorry I don't have the magic bullet you're looking for.  I can tell you're an accomplished programmer and this is a most interesting discussion.

    Joe T.

    • Like 1
  14. 11 hours ago, brooksg44 said:

    One could argue that you modified the Grafcet

    I did draw squares and a circle on it.  What would your argument be?

    For your second question, your solution would match mine.  Using the same technique with different pointers, you can step through each branch independently.  You set your "step" tag to 99 at I5, which is a holding state for the main loop.  Now all you have to do while your main pointer = 99 is have an AND statement looking for each sub-loop pointer to reach its final value.

    Joe T.

     

×
×
  • Create New...