PLCS.net - Interactive Q & A

PLCS.net - Interactive Q & A (http://www.plctalk.net/qanda/index.php)
-   LIVE PLC Questions And Answers (http://www.plctalk.net/qanda/forumdisplay.php?f=2)
-   -   Consumed vs Produced Tags? (http://www.plctalk.net/qanda/showthread.php?t=115617)

alive15 May 16th, 2018 07:53 AM

Consumed vs Produced Tags?
 
Good morning,

I am having trouble understanding the concept of consumed and produced tags. I found a manual explaining how they work but still cannot grasp the purpose.

From what I have read, one can create a produced tag on one PLC and send the tag value to multiple other PLCs as consumed tags? Why not just create 1 base tag in the first PLC and then use an Ethernet connection and daisy chain to other PLCs and get all the same tags across all controllers? Or is this not how it works?

Any explanation would be appreciated, thanks! I've never used Multiple PLCs on one project before, I usually just have one per machine and never connected all of them together.

GlynFisher May 16th, 2018 08:07 AM

From what I remember the produced tag is merely made available to the consumers to read. When you create the producer you define how many consumers it can have. The rate at which the data is read by the consumers is defined in each consumed tag, along with the location of the producer. The other difference is that produced and consumed tags still update even if the ladder is in program mode.

cardosocea May 16th, 2018 08:18 AM

Daisy chaining would add to the lag of the signal. Imagine that you have 5 PLCs communicating, the signal would make it to the 5th PLC in the chain with considerable delay compared to the first receiver in the chain.

Then you would have the issue of one PLC going down and affecting the comms in the remaining PLC's.

I don't know how AB implements the produced/consumed tags on the TCP level, but think of it as a multicast. One PLC sends the data and the PLC's that have to receive it pick it up from the network. This is how I would normally do something like this between Siemens controllers for example.

You could also have a dedicated "message" to each PLC, but that would increase the processing time on the sender.

gclshortt May 16th, 2018 08:20 AM

http://www.plctalk.net/qanda/showthread.php?t=96924

http://www.plctalk.net/qanda/showthread.php?t=98072

http://www.plctalk.net/qanda/showthread.php?t=87917

Here are a few threads that may help you out.
Regards,

AustralIan May 16th, 2018 08:39 AM

Look at it first for two controllers:
One controller will produce a tag (Tick the produced tickbox in variable config).
One controller will consume that tag (Add the controller to the IO tree, create a tag of type consumed, select the producing controller, type in the tag name and data type)
The consuming PLC now makes a connection to the producing, and polls that tag every so often.

Multiple controllers, direct connection (normal method):
Same as the first example, but when you create the producing tag, set the max number of consumers, lets say 20.
Now you can have up to 20 PLCs adding the producer to their IO tree and creating their own consumer tags.
You then repeat this for any other information you want to produce from say, controller 3, to be read by those that need it (controllers 8,9,15 say).

Daisy Chaining controllers (your method):
This is useful as it reduces the number of connections, but if one controller goes down, you lose all the communications.
Create a tag list in each controller. Something like
DINT_From_PLC1_In (Consumed tag)
DINT_From_PLC1_Out (Produced tag)
DINT_From_PLC2_In (Consumed tag)
DINT_From_PLC2_Out (Produced tag)
DINT_From_PLC3_In (Consumed tag)
DINT_From_PLC3_Out (Produced tag)
Then daisy chain your controller connections, so PLC2 consumes all the tags from PLC1, 3 from 2, 1 from 3.
In logic, copy the tag straight from the _In to _Out in every PLC.
When PLC1 changes DINT_From_PLC1_Out, he can use DINT_From_PLC1_In as a handshaking, to know that all other PLCs have receieved the data.

Drawings would be handy.
Imagine a bidirectional arrow for example 1, a circumscribed pentagram for example 2 (drawn with double headed arrows) and a pentagon for example 3 (single headed arrows, all in the same direction)

dmargineau May 16th, 2018 09:26 AM

Quote:

Originally Posted by alive15 (Post 778476)
Good morning,

I am having trouble understanding the concept of consumed and produced tags. I found a manual explaining how they work but still cannot grasp the purpose.

Think of it as 'Data I/O'; the 'Producer' CPU generates 'Output' data to be 'provided' only to known 'Consumer' CPUs.

Reciprocally, the 'Consumer' CPUs 'consume' (use) the data provided by the 'Producer'(s) CPU(s) as 'Input' data within their application(s).

In a nutshell, this implements automatic, high-speed 'I/O Class' (at user set RPI) data exchange between two or more Logix CPUs,

As far as I am aware, this is the only controller platform capable to handle data in a 'classic' I/O manner.

alive15 May 16th, 2018 09:28 AM

Thank you everyone for your replies, these are all great posts. AustralIan, I appreciate your time on your post and like your example the most.

I have a better understanding of how these tags work, but have a few more questions. If you have multiple Producer and consumer tags, how does each tag know what their partner tags will be? Is there an option to type in the consumer tag? Furthermore, I can definitely see the use of this for 20 PLCs, but what if you have 3 PLCs? Would it be better to change 2 of those PLCs to remote I/O blocks, and just add those two programs into 1 PLC, so that way all the tags are together and set as a 'base' tag? From what I have seen, PLCs can hold lots of memory? Has anyone ever filled up the memory of a PLC before with just logic / tags?

Thanks again for all responses, these are all excellent.

alive15 May 16th, 2018 09:30 AM

Quote:

Originally Posted by dmargineau (Post 778495)
Think of it as 'Data I/O'; the 'Producer' CPU generates 'Output' data to be 'provided' only to known 'Consumer' CPUs.

Reciprocally, the 'Consumer' CPUs 'consume' (use) the data provided by the 'Producer'(s) CPU(s) as 'Input' data within their application(s).

In a nutshell, this implements automatic, high-speed 'I/O Class' (at user set RPI) data exchange between two or more Logix CPUs,

As far as I am aware, this is the only controller platform capable to handle data in a 'classic' I/O manner.

Oh ok, So You can actually direct certain I/O to certain PLCs only and not send it to all the PLCs within the chain, correct? This is also very useful, save time by not sending signals to PLCs that do not need to see the tag value, correct?

dmargineau May 16th, 2018 09:55 AM

Quote:

Originally Posted by alive15 (Post 778497)

If you have multiple Producer and consumer tags, how does each tag know what their partner tags will be?

The Produced and Consumed tags need to be identical (Tag Name, Tag Data Type) in both Producer and Consumer CPU applications; obviously the Producer tag will be a tag of the 'Produced' type while the Consumer tag will be of the 'Consumed' type.


Quote:

Originally Posted by alive15 (Post 778497)
Is there an option to type in the consumer tag?

You could 'type in' both Produced and Consumed type tags using the RSL5K/Studio5K Right-Click menu "Add New Tag" feature; the only difference between the two tag types is that, when creating a Produced Tag you will need to specify how many Consumers will use the Produced tag and you will also have to 'identify' the Consumer CPUs


Quote:

Originally Posted by alive15 (Post 778497)
Oh ok, So You can actually direct certain I/O to certain PLCs only and not send it to all the PLCs within the chain, correct?

Correct; the beauty of Produced/Consumed data exchange is that it operates only on a 'need to know' basis...Just like pretty much everything else around us...:D...

alive15 May 16th, 2018 02:09 PM

Thank you dmargineau, that was very helpful. Yes you are correct on your last statement, haha. You describe the world in that statement, hahaha.


All times are GMT -5. The time now is 03:09 PM.

.