Is there any tips to optimize MMS communication??
I'm working on a System 5.0 SP2 Rev.E that is running with a lot of MMS. Is there any tip, advice or formal procedure that allows to optimize the communication load??
Voted best answer
If you describe the control application and its need for external communications we will be much better suited to answer your question.
AC800 peer to peer communication impact on MMS often boils down to how much you are able to stuff into one MMS telegram (max is close to 1500 bytes). Transmitting fewer & larger composite data types are better than using numerous of smaller variables in separate MMS communication blocks. Cyclic rate of the communication is of course a major contributor as well.
Process Panels can drain a lot if fast cyclic rates are in use.
Last is OPC server load; this is mostly dependant on number of items and uppdate rates used by the clients.
Begin with submitting a screen capture with the contents of the CBM->Remote System->controller IP->MMS Connections window + comments on the largest contributors plus some comments to what I mentioned above.
Hello everyone. I did the same question on Linkedin Group and I got several comments... as in Linkedin the information will be lost I though that could be a good idea to publish those comments here in order to keep them in this data base for future references.
Next, you will find all the comments that I received. I quote the comments and as I don´t know if the authors wants that I show their names I decided to put their initials. I hope this information be helpful. Thanks for all who took the time to give an advice.
1.- "If you are not experiencing any issues I would not worry. The only thing to do is ensure that every variable set up under mms transfer is actually being used somewhere". DG
2.- "You can make use of structure variable in order to send more variables in one telegram". VKG
3.-“ I also forgot to mention this - variables that cannot change fast (like big tank levels) don't need to be sent as often as say flow transmitter readings. If you have slow changing variables you can reduce load”. DG
4.- “Why do you use the com MMS? The MMS protocol is useful for some variable. It is better to use the OPC com if you have large variable”. PC
5.-“MMS variables are used to pass info between controllers and in between different plant controllers. OPC is used to fill displays and for extracting info to apc or management reporting systems. An abb controller does not have an OPC server built in and mms is the method to do data transfer”. DG
6.-“MMS is used to transfer data between controllers for critical data that needs to be transferred even if the 800xA system is down. Non critical data can be sent via the 800xA Connectivity Server which has an OPC Server specifically to send data to AC800M's”. PD
7.- “A workaround is to use comli over ethernet. But the protocol limits variable type and do not support redundant network”. JS
8.-“Because it is possible to pass any type of data across MMS, it is very common that some projects "pack" and "unpack" data before and after trasmitting data over an MMS link.
This is a REALLY BAD idea. There is no need to do this. The MMS telegram consists of all the data that you put into the MMS read request. The structure and quantity of this data is completely unimportant. Adding more data of any kind is no less efficient. ( or at least not in any significant way that you can measure).
The problem with packing and unpacking data is that it becomes extremely difficult to track values as they are passed from one controller to another. On top of this, you simply waste more CPU time and memory assigning variables than you hope to save. You now have multiple copies of the same value, all with different names. In order to makke tracng variables as smple as possible, our preffered method is to give the source, MMS and sink variables the same name. This works because all variables are private to their applications or MMS declarations. It also makes writing and debugging MMS transfers much easier. Also, allways connect the MMS variable directly to the source data - ie dont maka a copy of a variable and transfer that by MMS. Again all you are doing is wasting CPU time and memory with variables you dont need and making it harder to trace the transfers when debugging you application”. RL
9.- “I often use MMS because it is the only way to send/receive variables among high integrity controllers ( for SIL use ). The best suggestion I can give you is trying to allocate variables in order to minimize the need of MMS connections. This is well done closing loops on the same application. In all remaining cases, when you cannot avoid sharing a loop among more than a single application, try to lower the complexity of exchanged variables, e.g. don't pass BoolIO but a bool for value and one for quality, not RealIO, but a real for value and a bool for quality ... and so on. Don't use peer-to-peer when you can use peer-to-multipeer defining the source MMS variables in one application and reading the same MMS variable from many applications. Last suggestion: use a calc-sheet ( e.g. excel ) for automatic creation of assign statements, so that you can be always shure your writing statements ( for MMS-write) fit exactly your reading statements ( for MMS-read)”. CC
10.- “And please pay very close attention to CPU load ! High volume of MMS communication will kick your CPU load sky high as Rob Lyon previously said. Also, traceability is an issue on bad designed systems. The best thing to do is try to arrange the project(s) on your CPUs in a way to minimize the MMS communication”. HL