Editing Optimizing SimpleMotion V2 performance
Your changes will be displayed to readers once an authorized user accepts them. (help) |
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 44: | Line 44: | ||
smGetQueuedSetParamReturnValue( busHandle, &nul ); | smGetQueuedSetParamReturnValue( busHandle, &nul ); | ||
smGetQueuedSetParamReturnValue( busHandle, &nul ); | smGetQueuedSetParamReturnValue( busHandle, &nul ); | ||
− | |||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
− | In the above example, the ''smExecuteCommandQueue'' is the only line where RS485 is being used thus generating only one write-read latency | + | In the above example, the ''smExecuteCommandQueue'' is the only line where RS485 is being used thus generating only one write-read latency. ''smAppendSetParamCommandToQueue'' and ''smGetQueuedSetParamReturnValue'' transfer data only inside SMV2 library buffers and are fast calls. |
====Queued size limit==== | ====Queued size limit==== | ||
Line 137: | Line 135: | ||
smGetQueuedSMCommandReturnValue( busHandle,&readout2 ); | smGetQueuedSMCommandReturnValue( busHandle,&readout2 ); | ||
smGetQueuedSMCommandReturnValue( busHandle,&readout3 ); | smGetQueuedSMCommandReturnValue( busHandle,&readout3 ); | ||
− | |||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
====Writing multiple and reading single value at one cycle==== | ====Writing multiple and reading single value at one cycle==== | ||
If we need to read only one variable, we don't need to change readout parameter address during cycle and further improve performance. In this case we set it at initialization and then all consequent commands will return the desired return value. | If we need to read only one variable, we don't need to change readout parameter address during cycle and further improve performance. In this case we set it at initialization and then all consequent commands will return the desired return value. | ||
− | |||
− | |||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
/* Variables: | /* Variables: | ||
− | -readOutParamAddr1 will define the parameter | + | -readOutParamAddr1 will define the parameter numbers to read out into readout1 |
*/ | */ | ||
smint32 nul, readOutParamAddr1=SMP_ACTUAL_POSITION_FB; | smint32 nul, readOutParamAddr1=SMP_ACTUAL_POSITION_FB; | ||
Line 216: | Line 164: | ||
smGetQueuedSMCommandReturnValue( busHandle, &nul ); | smGetQueuedSMCommandReturnValue( busHandle, &nul ); | ||
smGetQueuedSMCommandReturnValue( busHandle, &nul ); | smGetQueuedSMCommandReturnValue( busHandle, &nul ); | ||
− | |||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Now the same high speed function with writing 3 variables and reading one. | |
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
/* Variables: | /* Variables: | ||
Line 252: | Line 198: | ||
//write the parameter value to previously set parameter address. SMPCMD_32B consumes 4 bytes of outbound payload | //write the parameter value to previously set parameter address. SMPCMD_32B consumes 4 bytes of outbound payload | ||
smAppendSMCommandToQueue( busHandle, SMPCMD_32B, paramValue3); | smAppendSMCommandToQueue( busHandle, SMPCMD_32B, paramValue3); | ||
− | |||
− | |||
//execute commands over SM bus | //execute commands over SM bus | ||
smExecuteCommandQueue( busHandle, deviceAddress ); | smExecuteCommandQueue( busHandle, deviceAddress ); | ||
− | /*read value commands (one per each append command | + | //notice that we don't need to change readout parameter addresses here as it we have only one variable to read out |
− | what was set to SMP_RETURN_PARAM_LEN at initialization | + | |
+ | /*read value commands (one per each append command). Size of inbound payload depends on | ||
+ | what was set to SMP_RETURN_PARAM_LEN at initialization */ | ||
smGetQueuedSMCommandReturnValue( busHandle,&nul ); | smGetQueuedSMCommandReturnValue( busHandle,&nul ); | ||
smGetQueuedSMCommandReturnValue( busHandle,&nul ); | smGetQueuedSMCommandReturnValue( busHandle,&nul ); | ||
Line 266: | Line 212: | ||
smGetQueuedSMCommandReturnValue( busHandle,&nul ); | smGetQueuedSMCommandReturnValue( busHandle,&nul ); | ||
smGetQueuedSMCommandReturnValue( busHandle,&readout1 ); //we could get the readout1 from any of the above lines as well | smGetQueuedSMCommandReturnValue( busHandle,&readout1 ); //we could get the readout1 from any of the above lines as well | ||
− | |||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− |