Hi,
I am playing around with some concepts.
Lets say, we have a String type array tag of 1000 members - String[1000] in ControlLogix.
Any changes in this PLC need to be copied to another identical PLC as fast as possible. What can be a good way of doing this ?
Let us make things a little easier for ourselves. Concepts and Reality are mostly counter-productive. Stop and think about the logistics of what you NEED, rather than what you WANT, or DESIRE : often these compete with each other.
Conceptually, you want to update the other machine "as fast as possible". Is there justification for this requirement? Getting the data transferred from one to the other will always "take some time", and there will always be that time "window" when the data does not match. How detrimental is this? Even if you had another machine updating both PLCs, it cannot do them simultaneously.
You need to decide the importance of data-synchronisation to determine how to tackle the problem. The only guaranteed way of achieving perfect synchronisation is to store it on a 3rd machine, which both PLCs "pull" the data from.
I am envisioning that your String array tag contains something like Alarm message texts, and you just want to ensure that both controllers contain the same descriptors.
Whatever the data is, there is absolutely NO justification in sending 1000 Strings to another machine
continuously, just to 'capture' the (perhaps rare, or infrequent) occasions when one element has changed. You will just be hogging network bandwidth for no good reason.
You could write code that cycles through the strings to detect changes, and sends any changed strings to the other PLC, but now you are executing a large amount of PLC code continuously to 'capture' the (perhaps rare, or infrequent) occasions when one element has changed.
What instigates the change of the data? If this is done by PLC code, you could add code that conditionally sends the new data to the other PLC. If it is done manually from the programming software, you could incorporate a routine that you can manually initiate a "one-time" transfer, perhaps by setting a tag value to the index number of the string you have just updated in the "master".
I hope you see that the question you asked has many answers, depending on the application.
One more thing....
The pre-defined STRING data-type is constructed to allow for string data of [up to] 82 characters. If you don't need 82, then you can create your own String data-type to suit. e.g. if you will only ever require the strings to be up to 40 characters long, then create a new string data-type called (for example) STRING40 (See Pic1). Storage space (memory) is reduced, and any subsequent data processing (including data-transfers) will be streamlined.
What are all the popular ways to share data between two ControlLogix or CompactLogix PLCs ?
There are:
1. Messaging
2. Produced and Consumed bits
Is there any other way to exchange data apart from these two ?
Produced/Consumed tags (not bits), are limited to 500 bytes, that's 250 INTs, 125 DINTs or REALs. You will not be able to Produce/Consume a String[1000] array tag at all.
Messaging will split the data-set into "chunks" (i think 500 bytes each), so will take a long time to transfer 1000 Strings.