FANUC’s Background Logic feature is basically the ladder-logic you know and love in TP Program form. These programs only consist of Mixed Logic statements (e.g. F[1]=(DI[1] AND DI[2])), and the programs are constantly scanned in the background while your robot is online, ignoring all E-Stops, alarms, etc. Depending on the complexity of your system, you may be able to skip the PLC and simply use BG Logic to control everything.

## How Complex Can My System Be?

Well, that depends on a few things:

- How fast does your scan time need to be?
- How comfortable are you with ladder logic?
- How comfortable are you translating ladder logic to mixed logic?

### Scan time

Each BG Logic program can run in one of two modes: Normal and High-Level. A Normal mode BG Logic program’s scan time will vary with the number of items to be scanned (no maximum). A High-Level mode BG Logic program is guaranteed to scan up to 540 items every 8ms. An “item” is is any instruction (e.g. assignment, if-statement), operator (e.g. AND, OR, =, ‘(’, ‘)’, +) or piece of data (F[], R[], DI[], DO[]).

The scan time of a normal mode program is:

```
Total # of Items
Scan Time = ---------------- * ITP
600
```

Your ITP is typically 8ms unless you’re using a Genkotsu robot.

### Example:

Let’s first draw a ladder-logic diagram:

```
| |
| F[1] |
|------------------------( )--|
| |
| DI[1] F[2] |
|-----------] [----------( )--|
| |
| DI[2] F[3] |
|-------*---] [---*------( )--|
| | | |
| | F[2] | |
| *---] [---* |
| |
```

How would you write this in a BG Logic program?

```
F[1]=(ON) ;
F[2]=(DI[1]) ;
F[3]=(DI[2] OR F[2]) ;
```

Now what about scan time? If we’re running in Normal mode, we have to count up the number of items in our program.

It’s easy to see we have 3 mixed-logic assignment instructions. Counting up the parens and boolean operators gives us 8 operators. We have 6 data points after counting all instances of F[] and DI[].

```
# instructions | # operators | # data | TOTAL
----------------+--------------+---------+------
3 | 8 | 6 | 17
Total # of Items
Scan Time = ---------------- * ITP
600
17
= ----- * 8
600
= 0.227ms
```

You can see that we have plenty of time to scan through this simple program during one 8ms ITP, but you can also see how the total # of items adds up pretty quickly.

### How comfortable are you with ladder logic?

Even if you don’t come from a PLC background, hopefully the ladder logic
diagram above makes sense. Imagine *current* running from left to right to
the *coil* on the right side of the *rung*. If the *contact* is closed
(true or ON), current is allowed to continue on to the right. If current
reaches a regular *coil*, it gets *energized*.

### How comfortable are you translating ladder logic to mixed logic?

The example above was pretty easy, but what about a more complicated rung?

```
| |
| DI[1] DI[2] DI[3] DI[4] F[1] |
|--*--] [--*--] [-----] [--*--]/[--*--( )--|
| | | | | |
| | | DI[5] | | |
| | *------] [------* | |
| | | |
| | F[1] DI[1] | |
| *-----] [--------------] [------* |
| |
```

This turns into the following BG Logic code:

```
F[1]=((DI[1] AND ((DI[2] AND DI[3]) OR DI[5]) AND !DI[4]) OR (F[1] AND DI[1])) ;
```

It’s a lot easier to see what’s going in the diagram, but it’s possible with Mixed Logic too.

## Keep It Simple

Do you really need to add the complexity of an additional PLC to your system? If you’re only controlling a couple of actuators and turning a couple of conveyors on and off, maybe not. Combine Background Logic with the iPendant as your HMI and you’ve saved yourself quite a bit of money.