1. marec, 2019

Industrijsko prediktivno vzdrževanje z razvojnim kompletom

Revija logo digikey 300x150 - Industrijsko prediktivno vzdrževanje z razvojnim kompletomDigi-Key Electronics
Avtor: Rich Miron
2019_272_34

Razpoložljivost nizkocenovnih pametnih senzorjev je omogočila povečanje ravni nadzora industrijske opreme do te točke, da je zdaj mogoče prediktivno vzdrževanje. Vendar zaradi zapletenosti potrebne strojne in aplikacijske programske opreme ostajajo za številne razvijalce naloge zbiranja, strukturiranja, sporočanja, analiziranja in uporabe podatkov iz senzorjev za prediktivno vzdrževanje izmikajoče.

272 34 01 300x213 - Industrijsko prediktivno vzdrževanje z razvojnim kompletom

Slika 1: različne modalnosti senzorjev lahko razkrijejo stanja, ki nakazujejo potencial stroja za odpoved, medtem ko analiza vibracij običajno omogoča zgodnje odkrivanje in pomaga preprečiti izpad delovanja zaradi nenadne odpovedi. (Vir slike: STMicroelectronics)

Zaradi hitro rastočega zanimanja za prediktivno vzdrževanje so dobavitelji polprevodnikov začeli ponujati rešitve celovitih platform, ki združujejo večino potrebne strojne in programske opreme. S takimi platformami lahko razvijalci industrijskih aplikacij hitreje ter cenovno učinkoviteje vzpostavijo in izvajajo sisteme za prediktivno vzdrževanje.

Razvoj vzdrževanja od ugibanja k napovedovanju
Industrijski inženirji so mnogo let za zaznavanje težav v strojih uporabljali vibracijsko analizo in druge metode. V preteklosti so se inženirji zanašali na dlančne analizatorje ali drugo namensko preizkusno opremo za zbiranje in obdelavo podatkov za analizo opreme. Koncepti IoT proizvajalcem zdaj omogočajo, da kritično opremo opremijo z nizkocenovnimi senzorji, ki zagotavljajo podrobne podatkovne tokove, potrebne za spremljanje v realnem času.

Možnost neprekinjenega ocenjevanja delovanja opreme ponuja pomembno prednost za tovarniške operacije. Zdaj lahko industrijski inženirji uporabljajo aplikacije za lokalno ali oddaljeno spremljanje ter tako izboljšajo ali celo zamenjajo programe načrtovanega ročnega vzdrževanja, ki zahtevajo trud, tudi kadar ni prisotna nobena težava, ali pa so po drugi strani prepozni, da bi preprečili stopnjevanje majhnih težav do škode na opremi. Namesto odzivanja na težave, ki lahko zaustavijo proizvodne linije, lahko upravljavci tovarne uporabijo metode, ki temeljijo na senzorjih, da take težave zaznajo vnaprej, pripravijo potrebne vire ali celo nadomestne stroje ter popravila izvedejo v času, ki kar najmanj zmoti proizvodnjo.

Prediktivno vzdrževanje upravljavcem obratov ponuja priložnost, da odkrijejo težave, preden te privedejo do katastrofalnih odpovedi, s čimer lahko ohranjajo integriteto proizvodne linije in varnost delavcev, hkrati pa te podatke tudi analizirajo za namene izboljšanja procesov in izidov. Za razvijalce postane izziv priprava platforme, ki bi lahko zbirala podatke s pasovno širino in ločljivostjo, potrebnima za zaznavanje znakov osnovnih težav v nadzorovani opremi.

272 34 02 300x174 - Industrijsko prediktivno vzdrževanje z razvojnim kompletom

Slika 2: zasnova industrijske senzorske plošče na osnovi MCU, vključena v razvojni komplet STMicroelectronics STEVAL-BFA001V1B, zajema celoten nabor senzorjev, ki so običajno potrebni za nadzor opreme. (Vir slike: STMicroelectronics)

Za vibracijsko analizo industrijski inženirji običajno zbirajo vibracijske podatke v časovni in frekvenčni domeni. Izkušeni inženirji lahko odkrijejo mehanske težave v opremi že samo s pregledovanjem podatkov na teh dveh domenah. Primer: periodični kratko trajajoči pulzi s široko frekvenčno pasovno širino običajno nakazujejo, da je prišlo do okvare komponente, kot je kroglični ležaj, zaradi česar pri vsakem zasuku udari ob steno svoje poti. Nasprotno pa so lahko dolgo trajajoči dogodki z ozko pasovno širino znak, da komponente drgnejo ena ob drugo, kar bo sčasoma privedlo do obrabe in morda odpovedi.

Za zanesljivo zajemanje takih podatkov pa morajo biti vibracijski senzorji dovolj robustni, da ohranijo svoje delovanje kljub nenadnim šokom, močnim vibracijam ali kakršnim koli drugim značilnostim, ki so pogosto prisotne v industrijskih okoljih. Industrijska oprema lahko tudi pri običajnem delovanju ustvari vibracije in mehanski šok, ki lahko presežejo zmogljivosti starejših senzorjev vibracij. To težavo je v veliki meri odpravil pojav senzorjev, ki temeljijo na tehnologiji mikromehanskih sistemov (MEMS). Senzorji MEMS, kot je STMicroelectronicsISM330DLC, lahko prenesejo impulze pospeškov do 10.000 g za 0,2 milisekunde (ms) in si še vedno dovolj hitro opomorejo, da zagotavljajo meritve linearnega pospeška z občutljivostjo v mili-g.

Zanesljivi podatki iz senzorjev premikanja so ključni za analizo napak, vendar so vibracije samo eden od indikatorjev zdravja stroja. Izkušeni inženirji lahko na podlagi podatkov o vibracijah zaznajo določene načine okvare, podobno pa druge modalnosti senzorjev uporabljajo za določitev časa od odkritja simptoma do funkcionalne odpovedi opreme, imenovanega interval potenciala do odpovedi (P-F). Primer: povečana poraba energije, hrup ali vročina pri večini strojev običajno nakazujejo skrajšani interval P-F (slika 1).

272 34 03 300x228 - Industrijsko prediktivno vzdrževanje z razvojnim kompletom

Slika 3: Industrijska senzorska plošča STMicroelectronics STEVAL-BFA001V1B zajema sistem z več senzorji na osnovi mikrokontrolerja, razširitvene priključke, priključek SWD (serial wire debug) in priključek M12 v obliki, ki je samo rahlo večja od industrijskega kabla. (Vir slike: STMicroelectronics)

Da bi zajeli te dodatne indikatorje, morajo inženirji ustvariti senzorske sisteme, ki zmorejo zaznati najmanj vibracije, zvok, tlak, temperaturo in vlago. Po drugi strani pa lahko za razvijalce praktični izzivi združevanja teh senzorjev v robustni zasnovi bistveno zakasnijo napredek proti večjim ciljem, povezanim z analizo opreme. Razvojni komplet STMicroelectronicsSTEVAL-BFA001V1B in pridružena programska oprema zagotavljata celovito platformo, ki inženirjem omogoča uporabo aplikacij za nadzor opreme in prediktivno vzdrževanje.

Referenčna platforma
Razvojni komplet STEVAL-BFA001V1B služi kot referenčna zasnova in že pripravljena rešitev, ki vključuje industrijsko senzorsko ploščo in pridruženo programsko opremo za prediktivno vzdrževanje. Plošča je celoten samostojni senzorski sistem (slika 2). Združuje visokozmogljivi MCU STMicroelectronics 32-bit ARM® Cortex®-M4 STM32F469 s celotnim naborom senzorjem, vključno s senzorjem gibanja ISM330DLC za prej omenjeno merjenje vibracij in tudi naslednje senzorje družbe STMicroelectronics:

  • senzor temperature in vlage HTS221
  • senzor tlaka LPS22HBTR
  • mikrofon MEMS MP34DT05TR-A

2-megabajtni Flash pomnilnik, integriran v mikrokontroler, sistem dopolnjuje z 1-megabajtnim EEPROM-omM95M01-DF družbe STMicroelectronics ter zajema zmogljivosti upravljanja napajanja s stikalnim regulatorjem STMicroelectronics L6984A in nizkonapetostnim (LDO) regulatorjem LDK220. Za poenostavitev razmestitve v industrijskih okoljih plošča na eni strani zajema priključek M12, podprt s sprejemnikom-oddajnikom IO-Link ST L6362A. Na drugi strani plošče razširitveni priključek razvijalcem omogoča dostop do GPIO izhodov mikrokontrolerja, analogno/digitalnegapretvornika (ADC) in serijskega I2C vmesnika. Rezultat je robusten sistem, ki je samo rahlo večji od industrijskega kabla M12, vendar je zmožen izpolnjevanja celotnega nabora zahtev za nadzor opreme (slika 3).

Razvijalci lahko uporabijo kabel M12, vključen v komplet, ali dodajo lastne priključke M12. Komplet zajema adaptersko ploščo za povezavo serijskega izhoda senzorske plošče M12 z vmesnikom ST-LINK/V2-1, ki je priložen razvojni plošči STMicroelectronics STM32 Nucleo-64. Napajanje plošče lahko razvijalci sami zagotovijo prek kabla M12 ali pa kabel M12 priključijo v razvojno ploščo IO-Link ST STEVAL-IDP004V1. S to ploščo IO-Link se zagotovi najhitrejša pot do razvoja, saj lahko razvijalci hitro povežejo več industrijskih senzorskih plošč in za njihovo konfiguracijo uporabijo grafični uporabniški vmesnik (GUI) STEVAL-IDP005V1-GUI_v1.0 družbe STMicroelectronics, ki temelji na Windows operacijskem sistemu (slika 4).

272 34 04 300x238 - Industrijsko prediktivno vzdrževanje z razvojnim kompletom

Slika 4: Z vmesnikom GUI ST Windows lahko razvijalci hitro konfigurirajo senzorske plošče, izvajajo zbiranje podatkov ter si ogledujejo rezultate podatkov o gibanju iz frekvenčne in časovne domene, pa tudi okoljske podatke. (Vir slike: STMicroelectronics)

Po zaključku nastavitve na konfiguracijskem zaslonu se lahko razvijalci pomaknejo na zaslon Vibration Analysis (Analiza vibracij) za zbiranje podatkov. Po kliku gumba za zagon si lahko razvijalci ogledajo meritve vibracijske frekvence in rotacijske hitrosti, zbrane na oseh x, y in z (slika 5). Ločen zaslon za okoljske meritve (zavihek ENV Measures) razvijalcem omogoča ogled podatkov o tlaku, temperaturi in vlagi, ki so jih zbrale posamezne senzorske plošče.

Razvoj programske opreme
Aplikacija GUI sicer zagotavlja hiter dostop do zmogljivosti senzorske plošče, vendar bodo razvijalci potrebovali prilagodljivejši dostop za ustvarjanje lastnih aplikacij za prediktivno vzdrževanje. Za razvoj po meri komplet programske opreme STSW-BFA001V1 družbe STMicroelectronics ponuja celoten nabor modulov C programske opreme, vključno z gonilniki, knjižnicami in vzorčnimi aplikacijami (slika 6).
Med vzorci programske opreme komplet STSW-BFA001V1 zajema aplikacijo za spremljanje pogojev, ki predstavlja postopek zbiranja senzorskih podatkov in generiranja frekvenčne domene, RMS ter vrednosti vršnega pospeška iz senzorja gibanja. Za produkcijsko zasnovo lahko razvijalci te podatke naložijo v gostiteljsko aplikacijo, zasnovano za odkrivanje okvar. Aplikacija za prediktivno vzdrževanje razširi to temeljno zbirko podatkov s funkcijami, zasnovanimi za generiranje opozoril o možnih okvarah.

Ta pristop ima številne prednosti, najprivlačnejša pa je možnost razširitve intervalov P-F z zagotavljanjem zgodnjega zaznavanja pogojev, ki signalizirajo potencialne okvare. Druga prednost je premik zaznavanja okvare bližje k opremi, kar omogoča zgodnejše prepoznavanje okvar.

Aplikacija družbe STMicroelectronics za prediktivno vzdrževanje prikazuje, kako lahko razvijalci izvajajo to zgodnje zaznavanje s primerjavo odčitkov senzorjev z nizom vrednosti pragov za komponente hitrosti, pospeška in frekvence. V proizvodnem sistemu je izbira teh vrednosti pragov odvisna od številnih dejavnikov, ki v tem članku niso zajeti.

Vendar je treba opozoriti, da obstajajo standardi, ki služijo kot referenca. Primer: standard ISO 10816 podaja smernice glede vibracijskih vrednosti za štiri razrede strojev, ki delujejo v štirih različnih območjih delovanja, vključno s cono A (dobro), cono B (zadovoljivo), cono C (neprimerno za neprekinjeno delovanje) in cono D (kritično, z možnostjo škode pri neprekinjenem delovanju). Kot nakazujejo te cone, je treba upravljavce opozoriti, kadar ravni vibracij stroja dosežejo cono C, ko te ravni dosežejo cono D, pa se mora sprožiti nujnejši alarm.

272 34 05 300x235 - Industrijsko prediktivno vzdrževanje z razvojnim kompletom

Slika 5: GUI ST Windows ponuja preprost pristop za ocenjevanje senzorskih podatkov z možnostjo predstavitve rezultatov frekvenčne in časovne domene iz senzorja gibanja. (Vir slike: STMicroelectronics)

Družba STMicroelectronics je svojo aplikacijo za prediktivno vzdrževanje razvila tako, da podpira ta specifični model uporabe. Glava dokumenta (MotionSP_Threshold.h) znotraj nabora programske opreme vzorčnih aplikacij zajema vrednosti pragov za ravni opozoril in alarmov. V tem primeru je družba STMicroelectronics definirala prag opozoril pri vrednostih za delovanje, ki jih standard ISO 10816 priporoča kot mejo med conama B in C. Vrednosti pragov za alarme so vrednosti, ki jih standard ISO 10816 določa kot mejo med conama C in D. Ker tipični senzor gibanja, kot je STMicroelectronics ISM330DLC, posreduje podatke v ravninah x, y in z, so zagotovljene tri vrednosti, vsaka za prag opozorila in alarma za vsako nadzorovano količino – hitrost RMS, pospešek in hitra Fouriereva transformacija (FFT). Aplikacija uporablja prag za FFT-je v štirih različnih spektralnih podrazponih.

Rezultat je nabor vrednosti pragov, konsistenten s širokim naborom realnih stanj delovanja stroja. Kljub temu bodo razvijalci seveda morali te vrednosti pragov za opozorila in alarme prilagoditi tako, da se bodo ujemali z ustreznimi značilnostmi njihove nadzorovane opreme ter splošnimi cilji za opozorila in alarme.

Glava dokumenta zagotavlja operativne cilje za nadzor, glavna rutina (main.c) pa zagotavlja logiko za zaznavanje odklonov pragov v podatkih, ki so jih zbrali senzorji industrijske plošče. Po inicializiaciji strojne opreme in povezanih struktur programske opreme glavna rutina vstopi v neskončno zanko za generiranje vrednosti FFT za vibracijske podatke, merjenje vrednosti RMS in vršnega pospeška, zaznavanje preseganja pragov ter oddajanje opozoril (izpis 1), glej program 1.

Ko se izvajanje zanke nadaljuje, gonilniki senzorjev in upravitelji storitev v plošči podpirajo paketno branje podatkov ter polnijo medpomnilnike, spremljane z rutinami na višjih ravneh. Vzorčna programska oprema družbe STMicroelectronics dodeli upravitelje na ravni aplikacije, kar razvijalcem omogoča, da zlahka zamenjajo lastne rutine in izpolnijo edinstvene zahteve, ne da bi morali posegati globlje v arhitekturo programske opreme.

Pri vsaki ponovitvi glavne zanke glavna rutina kliče MotionSP_TimeDomainAlarm(), da preveri pragove za hitrost RMS in vršni pospešek. Za preverjanja frekvenčne domene glavna zanka ponavljajoče kliče MotionSP_Vibration_manager_run(), ki posredno kliče rutino drugega modula, MotionSP_FrequencyDomainProcess(), ta pa nazadnje kliče kalkulacijsko rutino FFT vmesne programske opreme, če je zahtevani krožni medpomnilnik (AccCircBuffer) zadosti poln in je omogočen FFT (izpis 2). Ko se to zgodi, aplikacija za nadzor osnovnih pogojev uporabi isti vzorec, glej program 2.

Na koncu vsakega obdobja merjenja aplikacija uporabi še eno rutino (MotionSP_TotalStatusAlarm()), s katero preveri vsak atribut podatkov o gibanju ter nastavi alarm frekvenčne domene (pTotalFDAlarm) in alarm časovne domene (pTotalTDAlarm) na najvišjo alarmno vrednost (izpis 3). Nato glavna rutina z izpisa 1 odda te alarme prek UART povezave, preden znova inicializira sistem za naslednje obdobje merjenja, glej program 3.

272 34 06 300x193 - Industrijsko prediktivno vzdrževanje z razvojnim kompletom

Slika 6: Porazdelitev programske opreme ST STSW-BFA001V1 zagotavlja celoten nabor gonilnikov in vmesne programske opreme, skupaj z vzorčnimi aplikacijami, ki jih lahko razvijalci takoj zaženejo in pozneje uporabijo kot osnovo za svoje aplikacije po meri. (Vir slike: STMicroelectronics)

Vzorčna aplikacija družbe STMicroelectronics razvijalcem omogoča hitro ocenjevanje funkcij in funkcionalnosti napovednega vzdrževanja. Če poenostavimo: razvijalci lahko preprosto izvedejo povezavo z industrijsko senzorsko ploščo prek programa za emulacijo terminalov in si takoj začnejo ogledovati izmerjene vrednosti ter stanje opozoril/alarmov.

Za proizvodno aplikacijo pa bodo razvijalci verjetneje uporabili serijski vmesnik senzorske plošče za povezavo z viri v smeri proti toku za bolj prefinjeno spremljanje in nadzor aplikacije. Večji ponudniki storitev v oblaku za prediktivno vzdrževanje že ponujajo napredne rešitve za strojno učenje. Microsoft Azure na primer v svoji ponudbi nabora pospeševalnikov rešitev IoT ponuja rešitev za prediktivno vzdrževanje.

Razvijalci si lahko celo zagotovijo zgodnji začetek s pospeševalnikom Azure, ki zajema simulirane naprave, ki lahko zagotovijo več tokov senzorskih podatkov, prevzete iz Nasinih turboreaktivnih motorjev. Na koncu verige orodij za ta pospeševalnik storitve strojnega učenja Azure zagotovijo priučeni model na podlagi teh podatkov. V nekaterih primerih lahko razvijalci izkoristijo prenos metod učenja, ki uporabljajo predhodno priučeni model, kot je model napovednega vzdrževanja Azure, kot izhodiščno točko za lasten model strojnega učenja po meri.

Zaključek
Zaradi rastočega zanimanja za prediktivno vzdrževanje so razvijalci primorani zagotavljati hitro razmestitev robustnih sistemov z več senzorji, primernih za industrijska okolja. Celovita razvojna rešitev družbe STMicroelectronics združuje strojno opremo senzorske plošče in okolje programske opreme, zasnovano posebej za zahteve napovednega vzdrževanja.

Z uporabo te rešitve sistema lahko razvijalci takoj začnejo vrednotiti prediktivno vzdrževanje, hitro razvijejo lastne aplikacije za prediktivno vzdrževanje in izkoristijo nastajajoče vire strojnega učenja, ki temelji na oblaku, da ustvarijo bolj prefinjene zmogljivosti napovednega vzdrževanja.

www.digikey.com

program 1
Izpis 1: Aplikacija družbe STMicroelectronics za prediktivno vzdrževanje prikazuje uporabo neskončne zanke za identificiranje ter oddajanje alarmov na podlagi meritev frekvenčne in časovne domene senzorskih podatkov. (Vir kode: STMicroelectronics)

/* Initialize the motion sensor */
MotionSensorInit();
MotionSP_TimeDomainAlarmInit(&sTdAlarm,&sTimeDomainVal,&sTdRmsThresholds, &sTdPkThre sholds);
MotionSP_FreqDomainAlarmInit(&FDWarnThresh,&FDAlarmThresh,&THR_Fft_Alarms,MotionSP_Para meters.subrange_num);
/****************************************************************************/

while (1)
{
/* Vibration Analysis */
MotionSP_Vibration_manager_run(&MotionSP_Parameters);
/* Status check during Time domain Analysis */
MotionSP_TimeDomainAlarm(&sTdAlarm,&sTimeDomainVal,
&sTdRmsThresholds,
&sTdPkThresholds,
&sTimeDomain);
if(FinishAvgFlag == 1)
{
SendVibrationResult();
TD_Thresholds_DataSend(&sTdAlarm,&sTimeDomainVal);

MotionSP_FreqDomainAlarm (&SRAmplitude, FDWarnThresh, FDAlarmThresh,
MotionSP_Parameters.subrange_num,
&THR_Check, 
&THR_Fft_Alarms);

FD_Thresholds_DataSend(MotionSP_Parameters.subrange_num,
&SRBinVal,
&THR_Fft_Alarms,
&THR_Check);

MotionSP_TotalStatusAlarm(&sTdAlarm,
&THR_Fft_Alarms,
MotionSP_Parameters.subrange_num,
&TotalTDAlarm,
&TotalFDAlarm);

Thresholds_DataSend(&TotalTDAlarm, &TotalFDAlarm);

FinishAvgFlag = 0;
RestartFlag = 1;

// wait while the UART is transmitting
while((HAL_UART_GetState(&hSrvUart) & HAL_UART_STATE_BUSY_TX ) == HAL_UART_STATE_BUSY_TX);
strcpy((char *)SrvUartTxBuffer, "\r\n|#################### Next Measurement ########### #########\r\n");
HAL_UART_Transmit(&hSrvUart, SrvUartTxBuffer, strlen((char *)SrvUartTxBuffer), SRV_UART_TI MEOUT_MAX);
nadaljevanje programa 1

nadaljevanje programa 1

MotionSP_TimeDomainAlarmInit(&sTdAlarm,&sTimeDomainVal,
&sTdRmsThresholds,&sTdPkThresholds);
MotionSP_FreqDomainAlarmInit(&FDWarnThresh,
&FDAlarmThresh,
&THR_Fft_Alarms,
MotionSP_Parameters.subrange_num);

/* Configure the Hardware using parameters in RAM */
MotionSP_Vibration_manager_init(&MotionSP_Parameters, 1);

Accelero_MeasurementInit();
}
}

program 2
Izpis 2: Ta rutina iz vzorčne aplikacije družbe STMicroelectronics prikazuje mehanizem za delo s krožnim medpomnilnikom podatkov iz senzorja gibanja za analizo frekvenčne domene. (Vir kode: STMicroelectronics)

/**
* @brief Frequency Domain Processing starting from the Circular Buffer
* @param pMotionSP_Parameters: Pointer to board parameters
* @return None
*/ 
void MotionSP_FrequencyDomainProcess(sMotionSP_Parameter_t *pMotionSP_Parameters)
{
#define FFTSIZEDELTA (MotionSP_Parameters.size*((100.0-MotionSP_Parameters.ovl)/100.0))

if (fftIsEnabled == 1) {
if (!accCircBuffIndexWaitForOvf) {
if (AccCircBuffer.IdPos >= accCircBuffIndexForFft) {

MotionSP_FFT_All_Axes();

accCircBuffIndexForFft += FFTSIZEDELTA;
if (accCircBuffIndexForFft >= AccCircBuffer.Size) {
accCircBuffIndexForFft -= AccCircBuffer.Size;
accCircBuffIndexWaitForOvf = 1;
}
}
}
else {
if (AccCircBuffer.Ovf) {
AccCircBuffer.Ovf = 0;
accCircBuffIndexWaitForOvf = 0;
}
}
}
}

program 3

Izpis 3: Vzorčna aplikacija družbe STMicroelectronics prikazuje vzorec osnovne zasnove za delo z več viri alarmov v aplikaciji za prediktivno vzdrževanje. (Vir kode: STMicroelectronics)

void MotionSP_TotalStatusAlarm(sTimeDomainAlarm_t *pTdAlarm,
sFreqDomainAlarm_t *pTHR_Fft_Alarms,
uint8_t subrange_num,
Alarm_Type_t *pTotalTDAlarm,
Alarm_Type_t *pTotalFDAlarm)
{
Alarm_Type_t TempAlarm = GOOD;
Alarm_Type_t TempFDAlarm = GOOD;

TempAlarm = MAX4(TempAlarm,
pTdAlarm->PK_STATUS_AXIS_X,
pTdAlarm->PK_STATUS_AXIS_Y,
pTdAlarm->PK_STATUS_AXIS_Z);

TempAlarm = MAX4(TempAlarm,
pTdAlarm->RMS_STATUS_AXIS_X,
pTdAlarm->RMS_STATUS_AXIS_Y,
pTdAlarm->RMS_STATUS_AXIS_Z);

for(int i=0; i<subrange_num; i++)
{
TempFDAlarm = MAX4(TempFDAlarm,
pTHR_Fft_Alarms->STATUS_AXIS_X[i],
pTHR_Fft_Alarms->STATUS_AXIS_Y[i],
pTHR_Fft_Alarms->STATUS_AXIS_Z[i]);
}

*pTotalTDAlarm = TempAlarm;
*pTotalFDAlarm = TempFDAlarm;

}
Tags: