Task 1.1 - Tasks Using Standard 3D Logic

Task Overview

In this series of tutorials, you'll learn about the different methods for creating task logic for task executers. If you are unfamiliar with what tasks or task executers are, consider reading Key Concepts About Task Logic before completing this tutorial.

In this first tutorial task, you'll learn how to build tasks using the standard logic that is available on 3D objects. Many of the 3D fixed resources have properties and basic logic that can be used to assign simple tasks to task executers, such as basic loading and unloading tasks or requiring an operator to be present during processing time. This tutorial will teach you how to create the logic for these simple tasks. This task will also include an analysis of the advantages and disadvantages of this method.

When you're finished, your 3D model will work similar to the following image:

Step 1 Build the 3D Model

In this step, you'll build a basic 3D model for this tutorial. You'll first add a plane that will act as a container for the 3D objects in the model. Then, you'll add the 3D objects you'll need for this model.

When you're finished, your model should look similar to the following image:

To build this model:

  1. Make sure your 3D model window is open and active. From the Library, drag a Plane (under Visual) into the 3D model.
  2. With the plane selected, in Properties, change the name of the plane to StandardLogic.
  3. Click the arrow next to the color box to open the color selector menu. Choose the lightest shade of yellow.
  4. Change the plane's X-size to 21.00.
  5. Drag the following 3D objects onto the plane:
    • A Source
    • A Queue
    • A Processor
    • A Sink
    • An Operator
  6. Arrange the 3D objects so that they are roughly in the same position as shown in the image at the beginning of this step.
  7. Double-check that the names of each 3D object ends in a 1, such as Sink1, Queue1, etc.

Check your model to ensure it looks similar to the image shown at the beginning of this step.

Step 2 Create a Task Using Standard 3D Object Logic

In this step, you'll learn how to create simple transportation tasks using the standard logic available on 3D objects. You'll set up the operator to transport flow items from the queue to the processor, which is a relatively easy and straightforward process in FlexSim. You'll also change the item arrival rates and processing times.

To make these changes:

  1. Create port-connections (A-connects) between the following objects:
    • From Source1 to Queue1
    • From Queue1 to Processor1
    • From Processor1 to Sink1
  2. Create a center port connection (S-connect) from Queue1 to Operator1.
  3. Click Queue1 to bring up its properties on the right.
  4. Under the Output section, check the Use Transport box.
  5. Confirm that the Use Transport box states current.centerObjects[1].
  6. Click Source1 to bring up its properties on the right.
  7. Under the Source section, check the Arrival at Time 0 box.
  8. In the Inter-Arrivaltime box, delete the current text and type 5.

Reset and run the model:

When a flow item arrives in the queue, the operator will transport it to the processor as soon as the processor is available.

Step 3 Add Additional Operators

Now that you've built a simple transportation task using the standard logic, you'll make it a little more complex by adding a second operator to the model. In standard logic, you need a dispatcher object in order to assign tasks to more than one operator. This step will walk you through the process of setting up this system. When you're finished, your 3D model should look similar to the following image:

To add a second operator to your model:

  1. Remove the center port connection between Queue1 and Operator1. To remove center port connections, press and hold the W key while clicking two connected objects.)
  2. From the Library, drag a Dispatcher and place it on the plane near Queue1.
  3. Also drag a second Operator onto the plane.
  4. Rename the operators as follows:
  5. Object New Name
    Operator1 Operator1A
    Operator2 Operator1B
  6. Click Operator1B to select it. In Properties, click the arrow next to the color selector box and select the turquoise color.
  7. Create a center port connection (S-connect) from Dispatcher1 to Queue1.
  8. Create port connections (A-connects) from Dispatcher1 to Operator1A and Operator1B.
  9. Click Dispatcher1 to bring up its properties on the right.
  10. Under the Dispatcher section, click the arrow next to the Pass To box to open a menu. Select Round Robin If Available.

Reset and run the model:

Notice that not much changes when you add a second operator in this scenario. The system isn't any more efficient than it was with one operator. A lot of that has to do with how the standard logic has operators wait at the processor until it has finished processing a flow item. With this logic, it doesn't help to have an extra operator very much.

Step 4 Add a Second Processor

Transportation tasks sometimes become more complicated when you add more than one possible destination. In this step, you'll add a second processor to the model to see how this affects the standard logic. You'll also add a new type of task for the operator to work on to get a better sense of how adding a second processor affects the overall logic of the system. In this step, you'll require the operator to be present at Processor1A during the processor's setup time. This means that a flow item will sit at the processor until an operator can be present at the processor. The operator is needed to complete the necessary setup before the item can be processed.

To add a second processor and create the setup time logic:

  1. Remove the port connection from Dispatcher1 to Operator1B. (To remove port connections, press and hold the Q key while clicking two connected objects.)
  2. Click the StandardLogic plane to select it. In Quick Properties, change the plane's Y-size to 10.00 to make it wider.
  3. Drag a second Processor onto the plane.
  4. Rename the processors as follows:
  5. Object New Name
    Processor1 Processor1A
    Processor2 Processor1B
  6. Create port connections (A-connects):
    • From Queue1 to Processor1B
    • From Processor1B to Sink1
  7. Create center-port connections (S-connects) from Dispatcher1 to both processors.
  8. Click Processor1A to bring up its properties on the right.
  9. Under the Processor section in the Setup Time box, delete the current number and type 5.
  10. Check the Use Operator(s) for Setup checkbox.
  11. Confirm that the Pick Operator box states current.centerObjects[1].
  12. Click Processor1B to bring up its properties on the right.
  13. Under the Processor section, change the Process Time to 5.

Reset and run the model:

Notice that Operator1A tends to perform tasks in this repeated order:

  1. Transports items to Processor1A
  2. Transports items to Processor1B
  3. Completes the setup time for Processor1A (which takes 5 seconds)

It would probably make more sense if the operator stayed and completed the setup for Processor1A before moving on to transport items to Processor1B. However, the operator doesn't perform the tasks in this order because it determines which tasks it will work on using FIFO logic (first in first out). In other words, the operator will do tasks in the order in which it receives the tasks that are assigned to it.

In this case, Queue1 and Processor1A are both assigning tasks to the operator. Queue1 assigns transportation tasks any time a port is free to receive a flow item. Processor 1A assigns a tasks when it has a flow item and is ready to have the operator assist with the setup time. Because Processor 1A will always assign tasks after Queue1 assigns transportation tasks, the setup time will never be done immediately after Processor1A receives a flow item.

The solution to this problem is to add priority levels and preemption logic to tasks, which will be covered in the next step.

Step 5 Add Priority and Preemption

As you saw at the end of the last step, the operator sometimes performs tasks in a strange order. Because the operator uses FIFO logic (first in, first out) to perform tasks, it sometimes performs tasks in an order that aren't efficient or intuitive. In this step, you'll learn how to fix this problem using task priority levels.

You can override the FIFO task logic by assigning tasks a priority number. Task executers will complete tasks with higher priority numbers before tasks with lower priority numbers. By default, all tasks have a priority level of 0, so task executers will work on any task with a priority of 1 or higher first. (See Task Priorities and Preemption for more information.)

In this step, you'll assign the setup time task a priority of 1 so that the operator will work on it immediately after delivering a flow item to it.

To add priorities to the setup time task:

  1. Click Processor1A to bring up its properties on the right.
  2. Under the Processor section, click in the Priority box and change the number to 1.00.
  3. Confirm that the Preemption menu is currently set to preempt only.

Reset and run the model:

Notice that the operator now stays and completes the setup time on Processor1A before leaving to work on any other tasks.


Now that you've built transportation tasks using the standard 3D operating logic, you can see that it has a few advantages:

  • Quick to set up - You'll notice that setting up a basic model that uses the standard operating logic was relatively fast and easy.
  • Ease of use - If you want to create a simple transportation task that uses standard logic, it's probably best to use the standard operating logic because it is so straightforward and simple.
  • Preemption and priorities - It's relatively easy to assign priority levels and preemption to tasks using the standard 3D object logic.

However, there are some significant disadvantages that come from using the standard operating logic. To use the example from the model you just built:

  • Some inefficiencies - As was pointed out earlier, it's difficult to study how adding additional operators would help make the system efficient or not since they don't always behave how you would expect actual operators to work in a normal business system.
  • Unexpected behavior - Sometimes an operator might perform tasks in a strange order because it was responding to the timing of events in the simulation model. Each 3D object has a specific order of events that will control when it does a specific action. One problem is that these order of events aren't easy to discover and their logic isn't visible, so it's difficult to know how to predict or troubleshoot a particular problem caused by timing issues.
  • Intermediate tasks - What if you needed to add an intermediate task in between the queue and the processor? For example, imagine that the operator was supposed to stop at a computer and scan the flow item's bar code or that the operator needed to weigh the flow item before putting it on the processor. Custom logic would be quite difficult to build into the standard logic system.
  • Model scalability - What if a single flow item needed to be transported by two operators at a time? What if you wanted to be able to add additional operators to study how many employees are needed to keep up with the work load? As soon as you add more complexity to your model, the standard logic becomes a little more difficult to scale.

While it was easy to set up the standard 3D logic for this basic transportation task, it becomes a lot less easy to set up as soon as you try to adapt it or customize it for a more complex business process. That's when it becomes more useful to use the Process Flow tool.

In the next several tutorial tasks, you'll learn about several different methods for creating a simple transportation task using the Process Flow tool. You'll learn more about the advantages and disadvantages of each system. Continue on to Tutorial Task 1.2 - Tasks Using Process Flow.