RS 5000 messaging

Thanks a ton, ASF.

I figured it wasn't internet of things but it's all i could think of...;)

Your logic diagram clears things up.


Some tips for working with Produced/Consumed Tags....


1. Create a UDT of the data you want to P/C. Make the first element of the UDT "Connection_Status", of Data-Type CONNECTION_STATUS (it already exists). That element contains 2 BOOL flags that consumers can monitor to ensure the consumed data is valid, i.e. the connection is OK, and the remote Producer is in Run Mode.


2. Copy/Paste that UDT to the Consumer(s), so that you guarantee they are the same structure.


3. Create your Produced and Consumed tags of that UDT, and I like to keep the tag names the same as well. You don't have to, but I see it as a "Data-Link" between the controllers, so I think it should have the same tag-name, e.g. "PLC1_Data" (Produced in PLC1), and "PLC1_Data" (Consumed in PLC2, 3, 4, etc.).


4. Set the number of Consumers correctly, it reduces network traffic to the minimum needed.


5. Choose your RPI sympathetically to the data you are transferring. If it doen't need to go at 20mS intervals, set it upwards to reduce network again.


HTH
 
Quick addition to the original question: I managed to get the two machines talking and the prox working for the consumed controller. Now they want an action in the consumed controller to create and event in the produced. I created another routine in the consuming controller called produced and visa versa with the other previous produced controller. I also created another array in each produced and consumed. Now I can get one controller to talk but the other one, the new Consumer (also a Producer) still displays flashing I/O and yellow triangle on the controller. I verified the tags were the same in each but still no luck.

TIA
 
...Now I can get one controller to talk but the other one, the new Consumer (also a Producer) still displays flashing I/O and yellow triangle on the controller.

Double-click the controller in the I/O Configuration tree, and check the Connection tab. It should provide information about the fault condition.
 
Yes....!!! I forgot to JSR to that new routine!!!!

I'll do it tomorrow and then see what happens.

Good catch if that was what you were alluding to...
 
Produced/Consumed tags don't need any logic executing to work - the data will be transferred from the producer to the consumer even if neither PLC is in run mode. Obviously, you won't have any meaningful data if you forgot your JSR, but the data exchange should still be happening.

If you have a yellow triangle, you have a problem and Mispeld's advice is your next troubleshooting step. Let us know what the fault condition is and we should be able to help pin down the problem. It would also be beneficial to fully describe the setup and where you're seeing the yellow triangle - all the info is probably given across several posts, but if you consolidate it into one post it'll help us make sure we're looking at it right.

e.g.
PLC1 has produced tag of type My_Comms_UDT
PLC2 has PLC1 added to its ethernet tree
PLC2 has consumed tag of type My_Comms_UDT, pointing to produced tag in PLC1
All this is working
PLC2 has produced tag of type My_Comms_UDT
PLC1 has PLC2 added to its ethernet tree
PLC1 has consumed tag of type My_Comms_UDT, pointing to produced tag in PLC1
Data transfer is not occurring

Yellow triangle shown on PLC1 in the PLC2 ethernet tree

Or something along those lines
 
The producer consumer tag thing can be very responsive if you set it up with change of state. You then use a IOT on the produced tag to force it to update on the target system. That way you can have fast response without hammering the connection.

That's pretty cool. I always thought IOT just applied to real I/O. How do you use it to force-feed data to a consumer though?
 
OK--However the first time I did the changes that worked I discovered the triangle went away after I ensured the tag was coded the same case and format as the other controller and when i did it was magic and the triangle went away and comms were successful. When i decided to send messaging from the previous consumer now I have the triangle in only that controller but not the other.

I'll try to get online today and verify the info from the thread i received yesterday.

Thx again
 
Off the top of my head, I'd guess that means you've set up your consumed tag wrong.

Basically, your consumed tag in PLC2 (the one where you see the yellow triangle in the ethernet tree on PLC1) is pointing to a produced tag in PLC1 called "Produced". Invalid connection point means that PLC2 can see PLC1, but "Produced" is not a valid produced tag. Either the tag "Produced" doesn't exist in the target (PLC1), or it is of a different data type. Double check the spelling at both ends, make sure it's exactly the same. I spent 30 minutes once trying to get a produced/consumed tag to work, checking the tag names at both ends a dozen times before I finally realised I had an extra underscore at one end.
 
Also, if it is a newer Logix rev (firmware >= 20, I think), make sure the produced tag has its "External Access" set to Read Only or Read/Write.
 
The odd thing is that I've already established messaging/controls from plc 2 to 1 and i was successful...now we want to reverse the action with an ote in plc 2 and send it to Plc 1to perform another task. Obviously i created another routine in each respective controller so they each have a consumed and produced routine; i'm thinking maybe i should have just created a UDT and been done with it because they would have encompassed both????
 
I will suggest one approach for bi-directional communication between PLCs using produced/consumed tags.

1. In PLC #1, create a UDT that with some generic storage (e.g., DINT array, REAL array) sufficient for the back-and-forth data transfer. Let's say this UDT is named PLC_COMM_DATA. Copy and paste this UDT into PLC #2.
2. In PLC #1 create two tags of type PLC_COMM_DATA: (a) PLC1ToPLC2 (produced), and (b) PLC2ToPLC1 (consumed).
3. In PLC #2 create two tags of type PLC_COMM_DATA: (a) PLC2ToPLC1 (produced), and (b) PLC1ToPLC2 (consumed).

In your applications, you can use the generic storage, such as bits within the DINTs, as needed for the logic tasks. You will want to put good descriptions on these data items on both sides, and/or create aliases to them.

This type of approach has worked well in my experience. (Especially when using ControlNet, where it is handy to have spare data items in the shared tags.)
 
Thanks, Mispled

Is copying and pasting a good way to transfer the UDT from one to the other or do you have to export? I haven't completed that task before so just checking.

I do see on one of the controllers, say PLC 2, already ha a UDT for messaging P&C tags with another machine (call it PLC 3) on the same network. I can consider duplicating those.
 

Similar Topics

I have a bit of an odd situation. I'm having trouble sending ASCII commands over an open TCP socket. The problem is that I have a device that my...
Replies
9
Views
3,474
Is it possible to add 1747-L541C to RS5000 so I can use message to get some float values? I am using 1761-ENI/D for Ethernet conversion on the...
Replies
15
Views
8,993
Just wondering what is the best practice on setting up paths for messaging between controllers. Is it better to add the controller I'm messaging...
Replies
3
Views
1,922
I have a MSG block poling an encoder for a velocity value. Previously I had a timer setup with a one shot followed by the MSG block to get...
Replies
6
Views
6,990
Hi, We're upgrading a plc5 to control logix and are using a dhrio card to communicate with the DH+ network... but I can't figure out the...
Replies
2
Views
1,506
Back
Top Bottom