FB_CMA_OrderPowerSpectrum
Calculation of the order spectrum of real-valued input signals.
The order analysis is used to analyze vibrations on rotating machines. A special feature is that the order analysis also provides reliably interpretable results if the rotary speed of the rotating component is not uniform during the analysis, e.g. wind turbines or ramping motors.
In frequency analysis, e.g. with the FB_CMA_PowerSpectrum
, a time signal (e.g. a vibration signal) is transformed into the frequency range. The spectral values are then represented via the frequency. In the order analysis, conversely, the time signal before the transform is transformed and interpolated with the help of an encoder signal so that the vibration signal has spatially equidistant sampling points along a shaft revolution. The following consideration helps you to understand the basic idea. The vibration signal and the position signal are sampled equidistantly in time. If the wave velocity is constant, the vibration signal can simply be projected onto equidistant positions along a shaft revolution. If the speed changes during a revolution, the samplings along a revolution are no longer spaced equidistantly; if, for example, the shaft becomes faster, the distance between two samplings increases, since the shaft has turned further between two temporal samplings than at a lower shaft speed. By including an encoder signal, this effect can be compensated by appropriate interpolation. Subsequently, the power spectrum, cf. FB_CMA_PowerSpectrum
, is calculated. The order spectrum is then not plotted via the frequency, but via the order.
The frequency axis is scaled with the maximum speed fMaxRPM
(in revolutions per minute) of the observed shaft. For the order axis this results in:
The following applies to the frequency axis:
fSampleRate := cOversamples * (1000.0 / fTaskCycleTime);
fResolutionFreq := fSampleRate / cFFTLength;
fNyquistFreq := fSampleRate / 2;
The following applies to the order axis:
fMaxOrder := fNyquistFreq / (fMaxRPM / 60);
fResolutionOrder := fResolutionFreq / (fMaxRPM / 60);
The parameterization is done via the structure ST_CM_OrderPowerSpectrum_InitPars.
The function block FB_CMA_OrderPowerSpectrum
expects one vibration signal and one position signal per channel. These are introduced as tuples into the analysis chain by the function block FB_CMA_SourcePaired.
Memory properties
Due to the use of the Welch method, the current input data buffer, together with the last-transferred buffers, is used for the calculation. The number of buffers incorporated depends on the selected overlap (nOverlap
).
The frequency analysis takes step changes in the time series into account. In order to achieve a correct result, therefore, the input data buffers used must be concatenated without gaps and without jumps.
NaN occurrence
If the input vector contains one or more NaN (Not a Number) values, the entire output sector is filled with NaN. See separate section for further information on NaN values.
Handling of NaN values If the situations described above, which lead to NaN values, cannot be ruled out or safely neglected, the application program must be able to handle these error values. |
Behavior when processing multi-channel input data
When processing several channels (nChannels > 1
), there is a possibility of each channel having different return values. In this case, return values can be queried separately on the function block. If the results from one or more channels are impermissible, but not all channels, the value on the function block corresponds to eCM_InfRTime_AmbiguousChannelResults
. If the results of all channels are impermissible, then the value on the function block corresponds to eCM_ErrRTime_ErrornousChannelResults
.
A list of return values of all channels can be queried using the method GetChannelErrors()
.
Sample implementation
A sample implementation is available under the following link: Order analysis
Inputs and outputs
The input and output buffers correspond to one of the following definitions (input / output shape). The variable parameters are part of the function block input stInitPars
.
The following applies when processing a single channel (nChannels = 1
):
MultiArray in the |
Element type |
Dimensions |
Dimensional variables |
---|---|---|---|
input stream A (Vibration) |
LREAL |
1 |
nWindowLength - nOverlap |
input stream B (Position) |
LREAL |
1 |
(nWindowLength - nOverlap) / (fSampleRateSignal / fSampleRatePosition) |
output stream |
LREAL |
1 |
nFFT_Length/2+1 |
The following applies when processing multiple channels (nChannels > 1
):
MultiArray in the |
Element type |
Dimensions |
Dimensional variables |
---|---|---|---|
input stream A (Vibration) |
LREAL |
2 |
nChannels x (nWindowLength - nOverlap) |
input stream B (Position) |
LREAL |
1 |
(nWindowLength - nOverlap) / (fSampleRateSignal / fSampleRatePosition) |
output stream |
LREAL |
2 |
nChannels x nFFT_Length/2+1 |
Input parameters
The input parameters of this function block represent initialization parameters and must already be assigned in the declaration of the FB instance! (Alternatively: Init() method). They may only be assigned once. A change at runtime is not possible.
VAR_INPUT
stInitPars : ST_CM_OrderPowerSpectrum_InitPars; // init parameter
nOwnID : UDINT; // ID for this FB instance
aDestIDs : ARRAY[1..cCMA_MaxDest] OF UDINT; // IDs of destinations for output
nResultBuffers : UDINT := 4; // number of MultiArrays which should be initialized for results (0 for no initialization)
tTransferTimeout : LTIME := LTIME#500US; // timeout checking off during access to inter-task FIFOs
END_VAR
stInitPars
: Function block-specific structure with initialization parameters of the type ST_CM_OrderPowerSpectrum_InitPars. The parameters must correlate to the above definition of the input and output buffers.nOwnID
: Identifies the function block instance with a unique ID. This must always be greater than zero. A proven approach is to define an enumeration for this purpose.aDestIDs
: Defines the destinations to which the results are to be forwarded by specifying the IDs of the destinations. The definition of the output buffer (as described above) must correlate to the definition of the input buffer of each selected destination.nResultBuffers
: The function block initializes a Transfer Tray Stream with the specified number of MultiArray buffers. The default value is four.tTransferTimeout
: Setting of the synchronous timeout for internal MultiArray forwardings. See section Parallel processing.
Output parameters
VAR_OUTPUT
bError : BOOL; // TRUE if an error occurs. Reset by next method call.
hrErrorCode : HRESULT; // '< 0' = error; '> 0' = info; '0' = no error/info
ipErrorMessage : I_TcMessage := fbErrorMessage; // Shows detailed information about occurred errors, warnings and more.
nCntResults : ULINT; // Counts outgoing results (MultiArrays were calculated and sent to transfer tray).
END_VAR
-
bError
: The output isTRUE
if an error occurs. -
hrErrorCode
: If an error occurs, a corresponding error code of the typeHRESULT
is output. Possible values are described in the List of error codes. -
ipErrorMessage
: Contains more detailed information on the current return value. Refer here to the section Error description and information. This special interface pointer is internally secured so that it is always valid/assigned.
Methods
METHOD Init : HRESULT
VAR_INPUT
stInitPars : ST_CM_OrderPowerSpectrum_InitPars; // init parameter
nOwnID UDINT; // ID for this FB instance
aDestIDs : ARRAY[1..cCMA_MaxDest] OF UDINT; // IDs of destinations for output
nResultBuffers : UDINT := 4; // number of MultiArrays which should be initialized for results (0 for no initialization)
END_VAR
Call():
The method is called each cycle in order to apply the algorithm to the current input data. The function block waits for input data if the method indicates neither new results nor an error. This is a regular behavior in the process of the analysis chain.
- Return value: If an error occurs, a corresponding error code of the type
HRESULT
is output. Possible values are described in the List of error codes.
METHOD Call : HRESULT
VAR_OUTPUT
bNewResult : BOOL; // TRUE every time when outgoing MultiArray was calculated and sent to transfer tray.
bError : BOOL; // TRUE if an error occurs.
hrErrorCode : HRESULT; // '< 0' = error; '> 0' = info; '0' = no error/info
END_VAR
bError
: The output isTRUE
if an error occurs.hrErrorCode
: If an error occurs, a corresponding error code of the typeHRESULT
is output. Possible values are described in the List of error codes. This output is identical to the return value of the method.
If a timeout occurs or no MultiArray buffer is available for the result, then neither the input data nor the result data are lost. They are forwarded on the next call. |
Init():
This method is not usually necessary in a Condition Monitoring application. It offers an alternative to the function block initialization. The Init()
method may only be called during the initialization phase of the PLC. It cannot be used at runtime. You are referred to the use of an FB_init
method or the attribute 'call_after_init'
(see TwinCAT PLC reference). In addition, this facilitates the function block encapsulation.
The input parameters of the function block instance may not be assigned in the declaration if the initialization is to take place using the Init() method.
- Return value: If an error occurs, a corresponding error code of the type
HRESULT
is output. Possible values are described in the List of error codes.
stInitPars
: Function block-specific structure with initialization parameters of the type ST_CM_OrderPowerSpectrum_InitPars. The parameters must correlate to the above definition of the input and output buffers.nOwnID
: Identifies the function block instance with a unique ID. This must always be greater than zero. A proven approach is to define an enumeration for this purpose.aDestIDs
: Defines the destinations to which the results are to be forwarded by specifying the IDs of the destinations. The definition of the output buffer (as described above) must correlate to the definition of the input buffer of each selected destination.nResultBuffers
: The function block initializes a Transfer Tray Stream with the specified number of MultiArray buffers. The default value is four.
ResetData():
The method deletes all data records that have already been added, see Memory property of the function block. If the Call()
method is called again after a ResetData()
, the internal memory must be replenished in order to calculate a valid result.
- Return value: If an error occurs, a corresponding error code of the type
HRESULT
is output. Possible values are described in the List of error codes.
METHOD ResetData : HRESULT
VAR_INPUT
END_VAR
PassInputs():
As long as an FB_CMA_Source
instance is called and signal data are thus transferred to a target block, all further function blocks of the analysis chain have to be called cyclically as explained in the API PLC Reference.
Sometimes it is useful not to execute an algorithm for a certain time. For example, some algorithms should be executed only after prior training or configuration. The function block must be called cyclically, but it is sufficient for the data arriving at the function block to be forwarded in the communication ring. This is done using the PassInputs()
method in place of the Call()
method. The algorithm itself is not called here, and accordingly no result is calculated and no output buffer generated.
- Return value: If an error occurs, a corresponding error code of the type
HRESULT
is output. Possible values are described in the List of error codes.
METHOD PassInputs : HRESULT
VAR_INPUT
END_VAR
GetChannelErrors():
The method enables the querying of a list of the channel-specific return values when processing several channels (nChannels > 1
). A call is useful in the case that the return value of the function block corresponds to one of the values eCM_InfRTime_AmbiguousChannelResults
or eCM_ErrRTime_ErrornousChannelResults
.
-
Return value: Information on the reading process of the list of error codes. The value is set to
TRUE
if the query was successful, otherwise toFALSE
.
METHOD GetChannelErrors : BOOL
VAR_IN_OUT
aChannelErrors : ARRAY[*] OF HRESULT;
END_VAR
-
aChannelErrors
: Error list of the typeHRESULT
of the lengthnChannels
.
The function block FB_CMA_PowerSpectrum calculates the power spectrum for real-valued input data.
Requirements
Development environment | Target platform | PLC libraries to include |
---|---|---|
TwinCAT v3.1.4022.25 | PC or CX (x86, x64) | Tc3_CM, Tc3_CM_Base |