Differences Between PLC Programming Languages
There are a few different methods of programming for a Control Logix processor, listed here in the order of most common to least common:
- Ladder Logic (Most common, Preferred)
- Function Block Diagram
- Sequential Function Charts
- Structured Text
In this tutorial, I will go over the different methods and describe how they work. Hopefully, the differences between programming methods will be clear.
First Things First
Each method has its own instruction set. Some are very similar between methods but some instructions are only available in one method versus the other. For example, the PIDE instruction, which is called “Enhanced PID” is only available inside the function block diagram method.
In a Control Logix PLC, combinations CAN be used in conjunction with each other. The different routines can access the same tags regardless of method, meaning that a function block diagram can access the same tags as a ladder routine. It is good practice to use one method of programming, but if a different instruction is only available in the other method and it needs to be used it is possible to have two or three methods.
For this tutorial, a routine was created in each method that does the exact same thing. The routine takes in a “Trigger” tag and outputs a “Output” tag. The “Output” tag turns on for ten seconds, then off for ten seconds, then repeats until the “Trigger” tag it cleared.
With ladder logic, you place different instructions on what are called “rungs”. Each rung has input instructions and output instructions. The input instructions are on the left and the output instructions are on the right. It simulates a “circuit”, with the left side being the power rail and the right side being the common rail. If the simulated “power” gets through the input instructions, it executes the output instructions. These routines are scanned from top to bottom, left to right. To elaborate, rung 1 will complete in entirety before rung 2 input instructions are evaluated.
In the case of the example above, the input instructions are normally open (XIC) and normally closed contacts (XIO). XIC and XIO are the formal names of the instructions. The output instructions are TON and OTE instructions. The TON is a “Timer On Delay” instruction and the OTE is an “Output Energize” instruction. As described above, when the trigger tag (LAD_TRIGGER in this case), the output will come on for ten seconds then off for ten seconds. The output tag, in this case, is “LAD_OUTPUT”.
Ladder Logic is the foundation of programmable logic controllers, and the most widely used. People argue that anything can be programmed using this method and the other methods are not needed, which I support, although I will go over the other methods.
Ladder Logic Pros:
- Well-organized code on rungs
- Supports online changes well
- Comments are visible and organized
- Instructions take up little memory.
Ladder Logic Cons:
- Some process control instructions are not available
- Scanning issues can be created
- Difficult for motion programming
- Difficult for batch programming
Function Block Diagrams
The above image shows an example of the exact same program written in a function block diagram. With the function block diagrams, the user places instructions on a “sheet”, and one routine can have multiple sheets. Input instructions and output instructions can be anywhere on the sheet. To connect the input and output instructions the user places wires between terminals. The sheet is scanned “continuously”, meaning there is no discernable start and end, but that sheet 1 is scanned before sheet 2 and so on. The user must keep this in mind when using this method.
In the case of Figure 2, the input instructions Input Reference (IREF), and the output instructions are TONR (Timer On with Reset) instructions. TONR instructions are available in Function Block and Structured Text, but not available within the Ladder or Sequential Function Chart.
This is a good method to program motion controls. The user can setup ramps and s-curves for a VFD or servo motor.
Function Block Pros:
- Good for motion controls
- Good for low level signal processing
- Visual method may be easier for some users
- Wide instruction set
Function Block Cons:
- Code gets disorganized
- Sheets stack up and it gets tough to debug
- Instructions take up more memory than in Ladder
This image shows the exact same program but written in structured text. The user writes every line of the routine(s) by hand. The keywords and instructions are blue, and the tags are colored red. The routine is scanned from top to bottom, left to right. The instruction set is similar to the instruction set for the function block diagram. As seen in Figure 3, the TONR instruction is used. Like function block, tags can be “wired” up to instructions by setting them equal. For example, in the above image, “ST_OFF_TIMER.TimerEnable” is wired to “ST_ON_TIMER.DN”. When this executes, that line of code will start “ST_OFF_TIMER” after “ST_ON_TIMER” is complete.
Structured text is only useful for a large amount of calculations. It is not recommended for anything other than setting tags to values. Sometimes, when editing online, the edits do not take and the user must download again.
If the user is familiar with programming languages such as Matlab, then they should be comfortable within this environment. Like in Matlab, the “:=” is to set “something” equal to “something”, and the plain equal sign is to compare a variable equal to a different variable or a constant.
Structured Text Pros:
- Code is organized
- User controls operations
- Good for large calculations
Structured Text Cons:
- Very abstract
- Difficult syntax
- Hard to debug
- Hard to edit online
Sequential Function Charts (SFC)
The next figure shows an example of a sequential function chart. This is the same concept as a traditional flow chart. There are conditional objects (in this case called transitions), and action objects (in this case called steps). The transition objects appear like so:
and the steps like so:
The user places these at any point on the chart, and the chart size is variable unlike the fixed sheet size in function block diagrams. Each step can have a set of actions, which looks like this:
In that case, there is only one action, but each step can have multiple conditions. The user can split the sequence using branches of steps or transitions. The user wires the steps and actions using wire similar to the method in function block diagrams. A step HAS to be wired to a transition and vise-versa. Steps can’t be wired together in series neither can transitions. Steps and transitions can be wired in parallel to split sequence.
Each transition is a statement, not just a tag, and will allow the sequence to the next step when the transition yields true. Here are some examples:
The steps have built in timers using the configuration for each step. Look at the example here:
During online mode, the SFC shows the position of the sequence by putting a green box around the step that is executing. As seen in figure 4, step_000 is active.
The SFC in figure 4 does the exact same thing as the other programs do: it turns on and off the output tag for ten seconds if the trigger is pressed.
If the user is familiar with OPTO-22 programming, then they would be comfortable in this environment, as it is the same flowchart style programming.
- Online mode offers easy debugging
- Built-in timers for steps
- Actions attached to steps in user specified order
- Abstract code can get disorganized
- Syntax can be difficult
- Complex sequence to do simple tasks
- Online editing is a challenge
Each method has their application and their strengths. Ultimately, the user must decide what environment they want to be in for the task they want to accomplish. It will depend on the user, and it will depend on the task. Luckily, AB controllers support all three.
For more information or to purchase a PLC module, please visit our home page here.