communication between tasks, what's the best way?

Hi all,

I am going to split my RAPID program into two tasks in order to separate the motion task and the communication with a PC through RMQ.

I would like to know which is the best way to communicate both tasks?

I know I can have three ways:
- Virtual IOs
- PERS variables
- RMQ 

But what are the pros and cons of each method?

Thanks in advance.
 Daniel M.