Producer/Consumer Messaging vs. Explicit Messaging

5/5 (1)

In this article I will explore two different methods by which a PLC programmer can pass information to-from multiple ControlLogix controllers, namely, the producer/consumer messaging model and the explicit messaging model.

Producer/Consumer and Explicit Messaging Model

While both models will effectively transmit data from one or more controllers to one or more controllers over a network, depending on the requirements of the application, a PLC programmer may be inclined to choose one model over the other.

Producer/Consumer Messaging Model

Produced/Consumed tags provide a mechanism for a processor to provide data to one or more other processors. Therefore, by using the producer/consumer model, data can be transferred between processors without with little to no Ladder Logic at all. As a result, the user can define a “Request Packet Interval (RPI)” for the rate at which data should be updated.

In order for producer/consumer messaging to work, Produced and Consumed tags must be created at the controller scope level. To create a Produced tag, create a new Controller Tag, give it a name and set the data type to Produced.

ControlLogix Produced Tag Configuration
ControlLogix Produced tag setup.

Click the “Connection” button and set the maximum number of connections this Produced tag can be Consumed by.

ControlLogix Produced Tag Connection Limit
ControlLogix Produced Tag Connection Limit

Defining the Communication Path

This tutorial assumes you will be using an Industrial Ethernet Network to do the data handshaking between the ControlLogix controllers. A communication path must be configured in both the Producing and Consuming controller so the two endpoint CPU’s are known to each other. Therefore, by defining an Ethernet Bridge in the respective I/O Configuration trees of the Producing and Consuming controllers we can effectively define a path.

Remote Ethernet Module Configuration
Remote Ethernet Module Configuration

You should now see the Remote Ethernet Bridge show up in the Controller Organizer Window’s (COW) I/O Configuration.

Remote Ethernet IO Configuration
Remote Ethernet IO Configuration

To conclude in defining the communication path we are required to add the Remote CPU to the I/O Configuration. Therefore, right click the Remote Ethernet module just added and select “New Module” and choose the correct processor type in the list.

Remote ControlLogix Processor
Remote ControlLogix Processor

Give the Remote CPU a name and the slot it resides in the remote chassis and it should now appear beneath the I/O Configuration screen as shown.

Remote ControlLogix CPU
Remote ControlLogix CPU

Creating the Consumed Tag

To complete the configuration we must create the Consumed Tag in the consuming controller. The workflow is very similar to that of the Produced tag, however, instead of choosing “Produced”, choose “Consumed” in the New Tag dialog box.

Consumed Tag Configuration
Consumed Tag Configuration

Once again, click the “Connection” button and configure the dialog as shown.

Consumed Tag Connection
Consumed Tag Connection

Finally, download your configurations into both the Producing and Consuming ControlLogix controllers. Go online with both controllers and test that data handshaking by manually putting values into the tag structures.

Testing the communication
Testing the communication

If everything is configured correctly, your produced values should show up in the respective array in the consuming controller.

Explicit Messaging Model

The producer/consumer messaging model is very efficient for transferring data between processors, however, what if the data transfer does not need to occur at regular periodic intervals as defined by the RPI value? What if we wanted to have the data transfer occur only when some field driven event happens i.e., a proximity switch is activated, or when some logical sequence of events occur, or at some specific time of day?

It should be clear that using the producer/consumer messaging model in these instances would make very inefficient use of network bandwidth, and for large connected networks of processors and the machines they control, network bandwidth MUST be considered.

Creating the Message Tags

As with the previous example we will setup a DINT tag of length 10 to use as our data structures for data passing between two controllers. You may call them what you wish.

Since our controllers should already be configured to talk each other (see “Defining the Communication Path” above) let’s get right into the message command logic required.

Message Command Logic

A “Message” instruction (MSG) must be configured to achieve explicit messaging. If you are not familiar with ControlLogix Message instructions I would refer you to the document Logix5000 Controllers Messages.

Assuming you have a basic understand of what a message instruction is, I will be using a timer instruction in my rung logic to trigger the message instruction at some predefined interval that I can control. See below.

Explicit Message Ladder Logic
Explicit Message Ladder Logic

Once you click the message ellipsis, configure the instruction as shown.

Message Instruction Configuration
Message Instruction Configuration

Next, click on the “Communication” tab to assign the MSG instruction the path to the Remote_CPU.

Message Instruction Communication Path
Message Instruction Communication Path

Click “Apply” and “OK” and that should be all that is required to download your program to the controller.

Once online, test the program by putting values in your data array.

Testing the Explicit Messaging
Testing the Explicit Messaging

That’s it! If everything is configured correctly you should be passing data to the remote controller of your network…awesome!

I hope you found this article helpful. If you did give it a “Like” and share it to one of your favorite social media outlets.

If you have any questions or comments please leave them below!

Advertisements

Leave a Reply