I am doing some test measurements for my openPOWERLINK setup. I am running openPOWERLINK 184 as a MN on a Beagle Bone Black ARM and an CN on a Raspberry PI.
For measurement purposes I take a timestamp when the inputs change in AppCbSync on the CN:
if ( AppProcessImageIn_g.digitalIn != digitalIn_g)
AppProcessImageIn_g.digitalIn = digitalIn_g;
I changed the MN application so that the outputs follow the input ( nodeVar_g.m_uiLeds = nodeVar_g.m_uiInput; ). So eventually I get the new output signal back to my CN, and when where this serves as a stop signal:
if ( AppProcessImageOut_g.digitalOut != digitalOut_g )
digitalOut_g = AppProcessImageOut_g.digitalOut;
I tried different cycle length when starting the MN. With "$ ./demo_mn_console -c 4000" I got the lowest roundtrip time so far, that is to say about: 000.020099786s (+- 0.001s)
So I have several questions now:
Also maybe some ideas on how to measure the roundtrip time or cycle time more efficiently?
Would you recommend on using openPOWERLINK 2 for testing and evaluationg purposes? Would it be more performant?
I am looking forward to your response.
Have you tested the MN in kernel module version? or it is userspace-pcap version.
You can get better performance in kernel module version i.e,CN can loopback the data received from MN in just 1 cycle delay even in 2ms cycle time.
You can very easily analyze the time delay using network capture tools like wireshark,omnipeak.
Thank you for your help. The wireshark analysis showed, that the imidieate PRes takes only about 1-2ms, however the computation of the roundtrip-beacon (sending, remapping, sending) takes always 5 cycles.
Following are the answers to your questions:
In your case, the round time of 5 cycles may be an outcome of the PDO processing time on MN and CN. We can not be sure without your program and console & network traces.
To check the processing duration on MN, you can check the time gap between PDO(beacon) sent from CN and the next PDO from MN having the same data(beacon), using network traces. Similar setup can be done for checking processing duration on CN.
Another way of measuring the cycletime and performance would be to use IO Benchmarks in your program.
The Kernel module demo gives better performance than the pcap demo. Also using EplApiInitParam.m_uiSyncNodeId = EPL_C_ADR_SYNC_ON_SOC improves the performance.
EplApiInitParam.m_uiSyncNodeId = EPL_C_ADR_SYNC_ON_SOC
openPOWERLINK_V2 stream is in development and the first two versions are released; new features and performance improvements are being updated continuously. So for future it'd be advisable to use this for practical purposes.
Keep us posted if any further clarification is needed.