Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - nealbert

Pages: [1]
1
Technical support / FMD88-10 and UL 61131-2 and UL 60730-2-9
« on: April 13, 2020, 12:27:36 PM »
Can someone please tell me if the FMD88-10 conforms to UL Standard UL 61131-2  OR  UL 60730-2-9 ?   I've designed the FMD88-10 into a vending machine where the PLC controls a cooking device.  The UL representative is telling us that the FMD88-10 MUST comply with one of the above Standards per UL Standard UL-197 (Standard for Commercial Cooking Appliances), or we can't use it.

Thanks,
Neal Cooper

2
Technical support / Perplexed by puzzling parentheses pecualiarity
« on: February 18, 2019, 03:26:21 PM »
I'm not sure if this is a bug or a feature, but I'll throw it out there for your consideration....

In my FMD88-10 I have a Custom Function that takes an incoming analog voltage, scales it and converts the voltage to a temperature.  The last step in my CF is to convert the temperature from degrees C to degrees F using the commonly known equation:

F = (C * (9/5)) +32

Great, right?  WRONG!  The unnecessary pair of parentheses around the "9/5" causes the TBasic to yield an incorrect answer.
At room temperature (25C), the above equation yields and answer that's 17F degrees low.  At a temperature of 200C, the answer is over 150F too low.

What I know is...
  • That the "()" around the "9/5" is unnecessary.  
  • That "F = (C * (9/5)) +32" is mathematically identical to "F = (C * 9/5) +32".
  • That with or without the "()", the above equations will yield the identical answers when calculated in a spreadsheet, with a hand calculator or using simple pencil and paper.
So, the question is... why does TBasic yield an incorrect answer when unnecessary "()" are there?  Shouldn't it just ignore them?

3
Technical support / Stepcount() and stepcountabs()
« on: May 15, 2018, 12:59:45 PM »
How do I use the functions STEPCOUNT(X) and STEPCOUNT(X) in a CF?  The documentation only says this function returns the relative (or absolute) number of step moves.

There are no examples in the documentation, so I assumed I just need a simple equality in oder to use the value that STEPCOUNT returns.  Something like....

DM[1] = STEPCOUNT(1)   or    A = STEPCOUNTABS(1)

Is this correct so far?

If it is, then why do I get Error : unknown keyword:"stepcount"  (or "stepcountabs") every time I run Simulation or try to download my program?

Also, is the number that is returned 16 or 32 bit?

Thanks in advance,
Neal Cooper

4
Opinions & Feedback / Unwanted "features" in TL6
« on: May 14, 2018, 04:19:04 PM »
I've documented a couple of "features” in TL6 (V6.52, build 5) that are somewhat annoying.  I'm surprised that nobody has complained about them before.  The "features” exist in TL7, too.

Both of these "features" show up when printing hard copies of your Ladder Diagram, I/O Tables and Custom Function.

The first problem is that the date printed in the Header on each page is 1 month off.  The day and year are correct, but the  month (shown in the Header and printed) is the previous month.  The problem is NOT originating from the computer.  I’ve installed TL6 on 3 computers with the correct BIOS date and the problem is on all 3 copies of TL6.  If you have  a good monitor and good eye sight you can see the incorrect date in the Print Preview screen.  

The second had me thinking I was losing control of my documentation skills.  I tried typing an explanation but it got so wordy that I decided an example describes the problem best.  But, it’s still somewhat wordy......

First, let’s assume that you save your TL7 files using sequential filenames as you make significant changes to you code (ie Ladder_1.PC6, Ladder_2.PC6, Ladder_3.PC6, etc)  AND you save your files to a thumb drive, network drive or some location that forces TL6 to print the file path in the Header of each printed page.
 
So, you open Ladder_1.PC6 and make some edits.  Next, you save this modified file as Ladder_2.PC6. Now, you decide to print a copy of the project for your co-worker or customer.  You first print the Ladder Diagram and it comes out fine.  The Header says “Page 1  Z:\Ladder_2.PC6”.  Good, the Header matches the filename.  (Of course, the date is still  1 month off.  Aaargh.)

So you go ahead and print the I/O Table and Custom Functions.  But, to your chagrin, the filenames in the Header are WRONG!  The filename in the Header is from the previously opened file (Ladder_1.PC6).  And, the date is a month off.  Double Aargh!  This can really screw up your documentation.

I’ve created 3 small projects with sequential filenames (Ladder_1 thru Ladder_3) and attached them.  I inserted the filename of each project as comments in the Ladder Diagram and in ALL Special Functions.  I also named Relay 3 in each project with the corresponding filename.   I am able to print each project and verify that the data (Ladder diagram, I/O table and CF) that is printed is correct and only the filename in the Header is wrong.  The 3 projects are attached if you want to verify this.  Also, like the incorrect date, the incorrect filenames can be read by clicking on Print Preview.

Neal Cooper

5
I was reviewing some of the information on your TBASIC Custom Function Help site (http://www.triplc.com/TRiLOGI/Help/tbasic/tbasicIntro.htm) and noticed that some of the images do not show up.   I pulled up the same page on another computer and the same images are missing.  And it doesn't seem to matter if I'm using FireFox, Chrome or Internet Explorer...the images are missing in all 3 browsers.

Primarily, the missing images are located in sections 1. Overview through section 2.3 Search/Find.  I did not read thru every topic so there may be more.

Just thought you'd like to know.

Neal Cooper

6
Technical support / Stepper motor homing sequence not behaving
« on: April 23, 2018, 01:32:33 PM »
I wrote a little stepper motor homing routine and have found that it's implementation is anything but routine.  My application is a small vertical elevator that is moving a door.   When my device is at rest (everything de-energized) the door is at the bottom of travel (due to gravity) and is fully open.  When I energize the device, the first thing the operator needs to do is home the stepper motor.  (For safety sake I chose to force the Operator to start the Homing sequence by pressing a button on the HMI rather than initiating an unannounced homing sequence when the device is powered up.)   In this case Home means the door is fully closed.  The stepper motor needs to drive about 400 steps to close the door.  The number of steps is approximate due to manufacturing tolerances and the presence of a soft gasket on the face of the door.  Hence, the need for a homing/limit switch.

The routine I wrote is in the attached "Homing.pc6".  My idea was that I would start the Homing sequence by touching a button in the HMI (Relay1 or Start).  This starts the "Homing" Custom Function. I first set the step motor speed using the STEPSPEED command, then jump into a while loop that is running the STEPMOVE command.  I would exit the While look as soon as the door tripped a limit switch (Input[1]).  Once I exit the While loop, I issue a STEPSTOP command to immediately stop the step motor, then follow that with a STEPHOME command to set the new Home position.  At least in theory it sounded good.

Even on the iTrilogi 6 Simulator everything looks good.  Clicking on Relay 1 starts the stepper motor.  Clicking on Input 1 stops the stepper motor.  Great.   EXCEPT, I discovered that clicking on ANY input, stops the Stepper motor.  Hmmm! ???

So I moved to the hardware and discovered JUST THE OPPOSITE...The step motor starts like it should when I activate Relay 1 via the HMI.  However, closing the Limit Switch/ Input[1] (or any Input) does nothing.  The step motor keeps on going until it reaches a hard stop.  Or, you cut the power.  Ouch!

The Simulator and the real hardware do share one common trait...if ANY Input is closed when I hit the START Button (Relay 1) then the Step motor will NOT start.  Well, I guess I can throw out my Normally Closed E-Stop!

I've tried this code on iTrilogi versions 6.47 build 05, 6.52 build 03 and 6.52 build 05 and get the same results on all 3 versions.

I'm open to any and all suggestions.  I'm not too worried that the Simulator and the real world don't behave the same.  It would be great if they did, but I can work around that.  The main thing I need is a working, repeatable, reliable Homing Sequence.   At his point I don't know if most of my problem is with my logic or the software.  

7
Technical support / SetDimmer
« on: February 16, 2018, 01:05:09 PM »
Help.  I am trying to vary the output of an infrared heating element and it looks like the SetDimmer function might work for that application.  I'm coming out of Output 8 of an FMD88-10, to a SSR, then to the quartz element.  I've created a Function Block with the command "SetDimmer, 4, A" where A = DM[1].  DM[1] varies form 0 to 156 and is controlled by a slider bar on my HMI.  I've tried different ladder and Function Block configurations, but cannot seem to get anything to work.  Output 8 never turns on, no matter what the value of DM[1].

The i-Trilogi Help says SetDimmer "will send a short trigger pulse to the SSR to turn it on".  So, that means, SetDimmer needs to be inside a loop??

I've searched the Forum for "SetDimmer" and found nothing. (Does nobody use this Function??) Can someone please provide some ladder and/or Function Block code that shows how SetDimmer is supposed to work?  Do I need a zero-crossing SSR for SetDimmer to work?

Many thanks,
Neal Cooper ???

8
Technical support / Change TimerSV with Wientek MT8050iE
« on: October 20, 2017, 09:28:13 AM »
I am using an FMD88-10 and Weintek HMI MT8050iE in an oven application. I have the HMI programmed so the operator can monitor and change the SetPoint Temperature, Actual Temperature, conveyor speed and the condition of various fans.  Changing those values from the HMI is relatively easy since I'm only dealing with integer and Data Memory variables.  But, I have 3 heating elements that operate for different times.  They all turn on together, but turn off at different times. Currently I use the TimerSV that is assigned to each Timer when it's created in i-Trilogi.

I want to have the ability to change the TimerSV from the HMI.  I assume I need to use the SetTimerSV function.  However, according to the TL6 Reference Manual "the new S.V. are only stored on RAM-shadowed CPU flash memory and is normally volatile unless..."  OK, requires an extra step to write the data to CPU flash memory.  No big deal.    However, I get a bit nervous when I read things like "Programmer should therefore use this command sparingly".

On the HMI I would also like to have a "CANCEL" and "SAVE" button to give the operator the option to save the new S.V. values or abort the action.  Pressing the "SAVE" button could trigger a Special Function in the PLC to write new values to the TimerSV.  Can the "CANCEL" feature be implemented entirely in the HMI?
 
Is there and easier (better?) way to change the SV of a timer from the HMI than using the SetTimerSV function?  According to the Comments in Section 12.73 of the TL6 Reference Manual a "TBASIC custom function can start a timer by setting it's TIMERPV[] variable to any integer value between -1 (reset timer) and 9999 so it is not necessary to change the timer S.V."  Really?  How does that work?  Examples?

Pages: [1]