LabVIEW-ohjelmointi
Jorma Narikka
jokana@jyu.fi
3.11.1996
4. Erilaisista ohjelmointikielistä
8. LabVIEW-ohjelmien käyttötarkoitus
Tämä seminaarityön varsinainen tekstiosa on kokonaan omaa tuotantoani, ajatuksia ei ole käännetty eikä kopioitu mistään muualta. En ole pyrkinytkään väitöskirjamaiseen tarkkuuteen erilaisten yksityiskohtien suhteen. Lukija saattaa siten löytää mielessään joillekin väitteille vastaesimerkkejä, jotka uskoakseni ovat kuitenkin käytännön ohjelmistoliiketoiminnan kannalta vähäisiä painoarvoltaan. Olen siten ainakin noin 95 %:sti tämän tekstin takana, kunnes toisin osoitetaan.
Aiheekseni sain (tai otin) National Instrumentsin LabVIEW-ohjelmointiympäristön ja sen graafisen ohjelmointikielen G. Kun kysymyksessä on selkeästi yhden yhtiön aloitteesta syntynyt kaupallinen ohjelmointikieli, niin on vaikea välttää sellaista asetelmaa, jossa esiinnyn tavallaan kyseisen tuotteen mainostajana. Minua tämä asetelma ei juuri häiritse, enkä ole pyrkinyt "akateemisen tasapuolisuuden nimissä" keksimään tuotteesta huonoja puolia. Omat vähäiset kokemukseni sekä tuotteesta että sen edustajista kun ovat pääasiassa positiivisia.
Huomautan vielä, että tässä seminaarisarjassa on ollut muitakin esityksiä, jotka ovat olleet selkeästi jonkun yhtiön (esim. Sun) tuotteisiin liittyviä.
Seminaarityö käsittelee LabVIEW-ympäristön ohjelmointikielen G ominaisuuksia lähtien taustoista ja verraten kieltä muihin yleisesti käytössä oleviin kieliin. Liitteenä on hyvin pieni näyte valmistajan kotisivuilta ja viite, mistä kautta löytyy lisää tietoa. LabVIEW-ohjelmointia tämä seminaarityö ei pyri opettamaan. Mikäli haluat opiskella sitä joko tämän esityksen innoittamana tai muuten, niin kannattaa hankkia demoversio maahantuojalta.
LabVIEW:han on siis graafinen ohjelmointiympäristö. Sen historia ulottuu hieman yli kymmenen vuotta taaksepäin. Jos lukija hetken ajattelee mielessään tilannetta tuolloin, niin mihin ympäristöön kieli alunperin luotiin? Aivan oikein: Eli tietenkin MacIntosh-ympäristöön. Sitä en tarkkaan tiedä, miksi kehittelijöiden työnantajaksi "sattui" National Instruments. Tienneekö tuota kukaan?
National Instrumentshan oli tuolloin - ja on edelleen - yksi maailman suurimmista PC-mittauskorttien valmistajista, jolla oli tarve hyödyntää tuon ajan tietokoneita mittaustietojen jatkokäsittelyssä. Huonommalla tuurilla koko graafinen ohjelmointi olisi saattanut jäädä ainakin tuossa vaiheessa keksimättä. Erikoisen hyvällä tuurilla siitä olisi taasen ehkä muodostunut jonkinlainen maailmanlaajuinen standardi. (Ehkä ei kuitenkaan, koska muilla ei ollut yleisesti käytössä graafista käyttöliittymää...)
LabVIEWsta on siis vuosien myötä kehittynyt valmistajakohtainen graafinen ohjelmointikieli, joka jo viime vuosikymmenellä portattiin graafiseen Unix-maailmaan. Se on sittemmin portattu myös PC-maailmaan sen jälkeen, kun Windows tuli markkinoille. LabVIEW:stä tulee uudet versiot muutaman viikon sisällä kaikkiin näihin yllä mainittuihin ympäristöihin.
Ohjelmointia voidaan tehdä - ja on tehty - viimeisten vuosikymmenien aikana melko monella eri tavalla. Alkuun kielten luojia rajoittivat lähinnä laitteiston ominaisuudet, mutta myöhemmin on voitu kehitellä erilaisia kieliä erilaisiin käyttötarkoituksiin. Ainakin muutamat ohjelmointitapojen perustyypit lienevät lukijalle jo tavalla tai toisella tuttuja. Seuraavassa on lyhyt kertaus perinteisiin ohjelmointikieliin.
Alunperin tapa lienee ollut kirjoittaa käskyjä rivi kerrallaan jollakin merkistöllä (jollaiseksi jo varsin pian vakiintui ASCII, paitsi IBM:llä oli oma merkistönsä). Näitä proseduraalia ohjelmointikieliä ovat itse asiassa suurin osa yleisistä ohjelmointikielistä, kuten alkuaikojen Fortran ja Cobol, sekä myöhempien aikojen Pascal ja C. Huomattakoon, että läheskään aina ei käyttö ole rajoittunut siihen, mihin kieli alunperin suunniteltiin. Kärjistetyimpänä esimerkkinä lienee C-kieli, joka alunperin suunniteltiin lähinnä käyttöjärjestelmien ohjelmointia varten.
Proseduraalisten kielten hyvä puoli on yleensä tehokkuus. Nehän ovat muotonsa puolesta lähinnä konekieltä, jolle kaikki kielet on kuitenkin jossakin vaiheessa käännettävä! Konekielihän etenee käsky kerrallaan. Ohjelman kulun kannalta voitaisiin kai sanoa, että nämä kielet ovat rakenteeltaan ohjelmointijärjestykseen sidottuja (Programmer driven), ohjelma siis etenee sen mukaan kuin ohjelmoija on sen kirjoittanut.
Asioiden esittäminen ja käsittäminen listamuotoisena on johtanut Lisp-kieleen, jota tänä päivänä käytetään ainakin Autocadin "ohjelmointikielenä". Selkein pesäero proseduraaliseen ohjelmointiin on tehty ehkä loogisissa, usein tekoälysovelluksiin liittyvissä kielissä, joista mainittakoon vaikka Prolog.
On olemassa joukko ohjelmointikieliä, joissa perusajatus on sama kuin matematiikan funktioissa. Kaikki ohjelmat ovat siis funktioita, joita kutsutaan tietyillä parametreilla ja jotka palauttavat jonkun arvon "toimittuaan". Monesti tämä palautuva arvo voi olla itse asiassa vain virhekoodi, joka kertoo kutsujalle, menikö asiat niinkuin niiden piti mennä.
Vähiten ohjelmoijan kontrollia on sellaisissa automaatioalallakin käytössä olevissa systeemeissä, joissa toiminta on verrattavissa taulukkolaskentaohjelmien Solver-toimintoihin. Jossakin on siis kasa kaavoja, jossakin toisessa paikassa on kaikki tunnetut tiedot ja jossakin kolmannessa paikassa on määritelty tuntemattomat. Jos kaavojen avulla pystyy jotenkin ratkaisemaan tuntemattomat, niin ohjelma tekee sen, eikä käyttäjän tarvitse tietää miten.
Toisenlainen versio aiheesta on erään automaatiovalmistajan Unix-ympäristöön luoma ohjelmointikieli, jossa esimerkiksi ylimmän tason funktiona on vaikkapa "tulosta raportti". Ja se sitten kutsuu tarpeen mukaan eri funktioita jne. Tällaista rakennetta voisi sanoa vaikka tietoohjautuneeksi (Data driven). Tässä tapauksessa ohjelman kirjoittajalla on usein - ainakin tehokkuussyistä - mielessä myöskin se, mikä käytännössä tulee olemaan funktioiden suoritusjärjestys.
Merkkipohjaisia ovat oliokielet, joissa ideana on se, että tietueen kuvaus ja tietueeseen liittyvät toimenpiteet sotketaan yhteen. Tällöin lopputulos on sellainen, että tietoihin ei pääse "suoraan" käsiksi, vaan muiden ohjelmien on aina haettava tiedot niiden menetelmien avulla, jotka kyseiseen tietoon on alunperin liitetty.
Oliokielet sopivat hyvin tilanteisiin, joissa ongelma itsessään on rakenteeltaan hierarkinen. Eräs tällainen on graafinen käyttöliittymä. Jos halutaan tehdä omat vierityspalkit uusilla ominaisuuksilla, niin onhan toki kätevää, jos voin käyttää valmiita vierityspalkkeja pohjana ja vain lisätä omat ideat niihin. Monesti kuitenkin käytännössä esimerkiksi relaatiorakenne kuvaa monimutkaisempaa ongelmaa paljon paremmin kuin oliopohjainen tietokanta.
Olemme edellä palauttaneet mieliin joitain käytössä olevia ohjelmointiperiaatteita. Voisiko niiden avulla kuvata graafisen ohjelmoinnin? (Joka on siis tasan eri asia kuin graafinen käyttöliittymä.) Vastaus on mielestäni selvä: Ei voi. Joudumme opiskelemaan aivan uudenlaisen ajattelutavan.
Mihin graafinen ohjelmointi sitten voisi perustua? Jos otamme ajattelun pohjaksi Ward-Mellorin tavan kuvata tietojärjestelmiä, niin kuvauksiahan on kolmea perustyyppiä:
1. Käsitekaavio (Entity Relationship Diagram)
2. Tilasiirtymäkaavio (State Transition Diagram)
3. Tietovuokaavio (Data Flow Diagram) .
On syytä huomata, että tietovuokaavio ei ole sama kuin "historiallinen" proseduraalisen ohjelmoinnin vuokaavio, joka esitti käskyohjelman ikään kuin graafisessa muodossa. Tietovuokaavio esittää tietojen sekä kontrollin kulkua erilaisten toimilohkojen välisessä maailmassa. Toiseksi on syytä huomata, että esimerkiksi olio-ohjelmointi ei välttämättä sovi hyvin sellaisiin kohteisiin, joihin LabVIEW on tarkoitettu. Käsitekaavio sisältää kyllä attribuutit, mutta metodeja ei ole oikein keskitetysti saatavilla. Lisäksi olio-ohjelmoinnin kielet eivät välttämättä sovellu hyvin reaaliaikaisten ongelmien ratkaisemiseen. Niissähän on keskeisellä sijalla tuo tilasiirtymäkaavio. Koska se kuvaa toimilohkojen välisen toiminnan ajallista järjestelyä, sitä on vaikea kuvata minkään yhden olion metodien avulla.
Mitä noilla yllä esitellyillä kuvausmenetelmillä on tekemistä itse aiheen eli LabVIEW-ohjelmoinnin kanssa? LabVIEW-ohjelma on itse asiassa hyvin pitkälle sama asia kuin tietovuokaavio, tai Jacobssenin "use case"-malli, tai edellämainittujen yhdistelmä.
LabVIEW-ohjelmille voidaan hakea taustoja ajallisesti paljon kauempaakin kuin 80-luvun puolivälissä julkaistuista Ward-Mellorin menetelmistä. Oletan, että teollisuuden instrumentoinnissa yleisesti käytetty PI-kaavio on yleistynyt joskus toisen maailmansodan aikoina, siis paljon ennen kuin ensimmäistäkään transistoria on keksitty - nykyaikaisilla periaatteilla toimivista tietokoneista puhumattakaan. Kyseiset kaaviot olivat jo varsin standardoituneita 60-luvulla. Niiden avulla esitettiin - ja esitetään edelleen - esimerkiksi analogisen signaalin, siis tiedon, kulkua laitteelta toiselle.
Edellä mainittuihin kaavioihin ei tarvita oikeastaan muuta muutosta kuin että LabVIEW-ideologian mukaisesti ajatellaan fyysisen laitteen paikalle VirtuaaliInstrumentti eli VI. Välillä oli tosin muutaman vuoden jakso 70-luvun lopussa, jolloin ensimmäiset digitaaliset automaatiojärjestelmät ohjelmoitiin lähinnä konfigurointityylisesti. Jo 80-luvun puolivälissä siirryttiin ohjelmoinnissa "takaisin" graafiseen ohjelmointiin eli automaatioalan ihmisten kannalta "palattiin" vanhaan tuttuun PI-kaavion ideaan.
LabVIEW:ssa yksittäinen ohjelmamoduuli on nimeltään "Virtuaali Instrumentti" eli vi. Käytännössä ohjelmamoduulien nimen laajenteena on tuo sama vi eli ohjelma voi olla nimeltään vaikka Mittari.vi. On huomattava, että nimi ei välttämättä ole tässä tapauksessa DOS-tyyppinen tiedostonimi, vaan DOS-tiedostona on kirjasto (llb), jossa on sitten näitä vi:tä. Tämä johtuu siitä, että yhteensopivuuksien (Mac, Unix, DOS) vuoksi LabVIEW:ssä on sallittu jo alusta lähtien pitemmät kuin 8 merkin nimet.
Jos menemme yhden vi:n sisälle tarkastelemaan sen rakennetta, niin huomamme, että vi muodostuu tavallaan kahdesta eri osasta. Front Panel on nimensä mukaisesti etupaneeli eli käyttöliittymä. Vastaavasti Diagram on oikeastaan varsinainen ohjelma eli ohjelman looginen toiminta. Malli on vähän samanlainen kuin mitä on ajatus asiakas/palvelin-järjestelmissä.
Jos puolestaan tarkastelemme asioita laajemmin kuin yhden vi:n kannalta, niin huomaamme vi:n olevan (ali)ohjelman. VI:lle voidaan määritellä tulot ja lähdöt ns. connectoreilla, jotka vastaavat "tavallisen" aliohjelman kutsuparametreja. Näin ollen Lab VIEW tukee modulaarista ja hierarkista ohjelmointia. Itse asiassa väline tukee parhaiten sellaista menettelytapaa, jossa suunnitelma tehdään ylhäältä alaspäin ja implementointi alhaalta ylöspäin.
Tässä vaiheessa kannattaa muistaa, mikä on LabVIEW-ohjelman alkuperäinen käyttötarkoitus. Sehän on lähinnä mittaustietojen keruu ja analysointi. Näin ollen välineen käyttöliittymä-toiminnoissa ovat tietysti hyvin edustettuina erilaiset painonapit, vierityspalkit, piirturit ynnä muut vastaavat. ASCII-merkkien syöttöönkin on omat välineensä, mutta ei se silti tarkoita sitä, että tällä välineellä kannattaisi alkaa ohjelmoimaan esimerkiksi palkanlaskentasovellusta.
Ohjelma voi tallettaa tietoa merkkimuodossa, jolloin se on helposti siirrettävissä Windows-välineillä esimerkiksi Exceliin jatkokäsittelyä varten. Muut talletusmuodot ovat numeerinen sellaisenaan ja numeerinen pakattuna. On muistettava, että nopeissa ja laajoissa mittaussovelluksissa dataa voi nopeasti kerääntyä useita kymmeniä megatavuja, joten tiedon pakkaus saattaa olla olennaisen tärkeää. Sen sijaan kovin hyviä tietokantalinkkejä välineessä ei vielä ole. Tämäkin mm. aiheuttaa sen, että ajatus palkanlaskennan ohjelmoinnista tällä välineellä kannattaa unohtaa.
Sen sijaan esimerkiksi kuva-analyysejä tällä on tehty ja tehdään. Esimerkkinä on vaikka Graftek, jolla on sovelluksia mm. liekin analysointiin 3-ulotteisesti. Samoin on Helsingin teknillisessä korkeakoulussa tehty lentosimulaattori, johon on toteuttettu mm. keinohorisontti. Ohjelman "sponsorina" on ollut Ilmavoimat, jolla on puolestaan ollut antaa malliksi oikea USA:sta saatu (tai siis ostettu) lentosimulaattori.
Ettei asia jäisi lukijaa vaivaamaan ja ettei mielipiteeni jäisi jonnekin kappaleen keskelle sanojen sekaan lukijan tavoittamattomiin, niin tulkoon mielipiteeni tässä heti esille. Mielestäni graafinen ohjelmointi LabVIEW:llä ei ole yleisesti ottaen parempi tai huonompi kuin esimerkiksi proseduraalinen tekstiohjelmointi C-kielellä. Todellinen "oppimisaika" kestää muutamia kuukausia.
Mikään työkalu ei ole ihanteellinen kaikkiin ongelmiin. Aina joskus tosin ilmestyy profeettoja, jotka ovat sitä mieltä, että nyt on löytynyt täysin ylivertainen systeemi. Tällöin on kuitenkin yleensä se tilanne, että kyseinen henkilö ei tunne hyvin muita vaihtoehtoja. Jos siis ainoa tiedossasi oleva työväline on vasara, niin silloin kaikki ongelmat näyttävät nauloilta. Ja jos eivät näytä, niin laitetaan näyttämään.
Toinen syy jonkun välineen yksipuoliseen suosimiseen löytyy yleensä kaupalliselta puolelta; eli kenen leipää syöt, sen lauluja laulat. Jos on myyntimiehenä edustamassa jotakin ratkaisua, niin sitä on melkein pakko kehua joka käänteessä.
Jos sovellus vähänkin sivuaa esimerkiksi prosessiteollisuuden automaatiota, niin graafisen ohjelmoinnin merkittävä etu tuli jo edellä esille. Jonkun LabVIEW-ratkaisun periaatteiden selittäminen esimerkiksi jollekin paperikoneenhoitajalle on syntaksista johtuen yleensä varsin vaivatonta.
Jos sovelluksen toimilohkojen välillä on paljon erilaisia kytkentöjä, niin silloin toteutuu vanhan kansan sanonta "yksi kuva kertoo enempi kuin tuhat sanaa. Jos siis yhteen mahdolliseen LabVIEW-kuvaan sisältyvät asiat pitäisi kirjoittaa auki sanalliseen muotoon, esimerkiksi C-kielellä, niin ohjelmaa tulisi todella paljon.
Kun kysymyksessä on tietovuo-ohjelmointi (dataflow programing), niin ohjelman sisäisiä apumuuttujia ei tietenkään tarvita, joten niiden kanssa ei voi tulla ongelmiakaan. Lisäksi tyyppitarkastukset tulevat automaattisesti tehdyksi siinä vaiheessa, kun tietopisteet kytketään toisiinsa.
Vektori- ja klusterimuotoiselle tiedolla on graafisessa ohjelmoinnissa jalostuneempia käsittelytapoja kuin monissa ns. peruskielissä. Kielestä löytyvät perusstruktuurit peräkkäisyydelle ja iteraatiosilmukoille, joten ohjelman voi halutessaan tehdä myöskin perinteistä ohjelmaa vastaavaksi. Oletusarvoisesti ohjelmointi on kuitenkin tapahtumaohjattua (event driven).
Järeä etu muodostuu siitä, että tällainen korkean tason sovelluskehitin voi toisaalta asioida helposti I/O-korttien kanssa. Yleensähän nämä ovat selkeästi toisensa poissulkevia ominaisuuksia. I/O-asiointi edellyttää tietysti, että löytyy sopivat ajurit. Mutta siihen puoleen National Instruments on eräänä alan (=kortti-alan) suurista valmistajista paneutunut todella huolella, sillä ilmaisia ajureita löytyy sekä omiin että kilpailijoiden kortteihin runsaasti.
Toinen järeä etu on siinä, että ohjelmaan voi tulla tietoa ja tapahtumia satunnaisesti monesta eri kohteesta. Ja ohjelma selviytyy siitä kuten ohjelmoitava logiikka tai automaatiojärjestelmä eli tapahtuma-ohjatusti. Perinteinen konttori-ATK:han lähtee siitä, että silloin, kun ohjelmalla on miettimistä, niin pistetään "tiimalasi ruudulle". (No, voihan tietysti perinteisilläkin ohjelmointikielillä tehdä keskeytys-ohjattua ohjelmaa, mutta se vaatii yleensä työtä ohjelmoitsijalta, kun taas tässä sellainen muodostuu ihan kuin itsestään.)
Vielä yksi järeä etu liittyy mielestäni LabVIEW:hin sillä analogiasignaaleja voidaan ainakin näennäisesti käsitellä ikään kuin jatkuvina signaaleina. Niitähän ne tietysti ovatkin. Tässä mielessä abstraktiotaso on selvästi korkeampi kuin perinteisillä kielillä.
Jos ohjelma näyttää "spagetilta" niin se saattaa myös olla sellaista. Eli LabVIEW on väline, jolla voi tehdä "spagettiohjelmaa", sekä visuaalisessa että menttaalisessa mielessä!!!
Ohjelma on jonkun verran tehottomampaa kuin esimerkiksi C. National Instruments puhuu nopeuden ja muistitilan suhteen 10...15 % erosta verrattuna esimerkiksi juuri C:hen. Lienee selvää, että korkeamman tason ohjelmointivälineellä tehty ohjelma on aina jonkun verran tehottomampaa.
Toisaalta, jos tarvitaan todella nopea mittaus, niin se ei ole kiinni tämän sovelluksen nopeudesta. Silloin pitää olla kortti, jossa on prosessorit itsessään ja joka osaa tallettaa tietoja sekä toimittaa niitä eteenpäin silloin kun (LabVIEW:lle) sopii.
Käyttöliittymän suhteen tulee tietysti vastaan normaali sovelluskehittimen raja. Jos siis välttämättä tarvitset toisenlaisen käyttöliittymän kuin mihin tämä pystyy, niin unohda koko juttu. National: Instrumentsin tuotteissa on tietysti mahdollista pysyä silti, katso kohta muut tuotteet ja siellä LabWindows/CVI.
Vastaavasti voi tulla raja vastaan tietojen tallennuksessa ja tietokanta-liittymissä. Ja taasen on sama tilanne, pitää vaihtaa työvälinettä.
Reaaliaikaisuudesta ja tapahtuma-ohjautuvuudesta on aiemmin jo puhuttu. Siltä osin lienee syytä palata hieman maan pinnalle. LabVIEW saa asiat näyttämään siltä, että toiminta on reaaliajassa. Mutta eihän se sitä välttämättä ole, joka johtuu käyttöjärjestelmäympäristöistä ja mahdollisesta tietojen tallennuksesta levylle. Jos sovellus on pieni eikä talleta levylle, niin silloin lähes ajantasainen toiminta on mahdollisuuksien rajoissa. Yleensä se riittää useille teollisuussovelluksille. Varsinaiseen ajantasaiseen toimintaan tarvitaan kyllä oikea automaatiojärjestelmä, ohjelmoitava logiikka tai muu sellainen. Tai pitää hankkia erillisellä prosessorilla varustettu kortti, jolle LabVIEW toimii vain isäntänä.
Ohjelmaa voi ajaa tavallaan askeltaen ja seurata, mitä ovat tietojen arvot missäkin päin. Lisäksi tietoja voi aputulostaa graafisesti, jolloin trendinomaiset muutokset tulevat loistavasti esille. Vastaavassa tilanteessa pitäisi perinteistä C-ohjelmaa ajaa N kertaa peräkkäin ja yrittää sen debuggerista muistella, mihin suuntaan mikin asia on muuttumassa ja millä nopeudella.
Suoranainen tietosilmukoiden rakentaminen ohjelmaan ei ole mahdollista, koska tapahtumaohjattuna LabVIEW jäisi tietysti silmukan joka kohdassa odottamaan edellistä arvoa, eikä mitään tapahtuisi. Jos esimerkiksi silmukkaohjelmassa pitää välittää tieto edellisen kierroksen arvosta, niin se tehdään erityisellä siirtorekisterillä.
Periaatteessa tapahtumaohjattu ohjelma voisi tietysti hyödyntää hienompia käyttöjärjestelmiä (NT ja Unix versus Windows), mutta ainakaan edellinen NT- versio ei tätä osannut.
Lisäksi näennäinen moniajo on Windowsissa tehty siten, että sovellusohjelma itse päättää, milloin on aika luovuttaa vuoro muille. Manuaalin mukaan aika on suuruusluokkaa 110 ms. Lisäksi on ohjelmia (muutama), jotka eivät luovuta kesken missään tapauksessa. Eräs sellainen on valmistajan mukaan FFT eli nopea Fourier- muunnos.
Todellisen moniajon hyödyntäminen sopisi tähän rinnakkaismalliseen ohjelmointikieleen kuin nyrkki silmään. Mutta siinä tapauksessa valmistaja joutuisi varmaan luopumaan esimerkiksi laajasta tuesta eri käyttöjärjestelmille (Windows95, NT, Unix, MacOS).
Muistan nähneeni LabVIEW:n Jyväskylän yliopistolla hiukkaskiihdyttimen yhteydessä. Paikallisia käyttäjiä ovat myös Sisu-traktorit, Ilmavoimat ja Kaipola. Vaikka LabVIEW toimiiWindows-versiona 8 MB:n koneessa, niin laajempi sovellus saattaa vaatia myös tehokkaamman koneen. Eräällä yllämainituista oli jo pari vuotta sitten LabVIEW:ta pyörittämässä PC:tä, jossa oli keskusmuistia 64 MB.
LabVIEW:han on suhteellisen selkeästi suuntautunut mittaussovelluksiin (vaikka periaatteessahan sillä voi ohjelmoida oikeastaan mitä vaan). Käyttöä teollisuudessa PC-valvomona on rajoittanut lähinnä logiikkaliitäntöjen puute. Nyt asia on ollut sillä tasolla, että jokainen voi halutessaan ohjelmoida liitännän ja ajurit, kun tässä kerran on ohjelmointiväline...
Tietääkseni LabVIEW:lle on näinä päivinä tulossa markkinoille "serkku" nimeltään BridgeVIEW. Yhtenä erona siinä on juuri se, että kaikkiin yleisiin logiikoihin pitäisi olla valmiit liitännät, kun täyttää asianmukaisen konfigurointi-lomakkeen ruudulla. Näinhän asia on jo kauan ollut esimerkiksi InTouchissa. Käytännössä tällä on iso merkitys, sillä teollisuudessa kuitenkin usein on logiikka PC-valvomon alapuolella. Tiettävästi BridgeVIEW:tä ohjelmoidaan samalla G-kielellä kuin LabVIEW:tä.
LabVIEW:hin on tulossa, tiettävästi vuoden 1997 ensimmäisellä neljänneksellä tuotteita, joilla LabVIEW:ta voidaan ajaa Internetin (tai Intranetin) yli. Tällöin tavallaan Front Panel on toisella puolella ja Diagram toisella puolella Internetiä. Olen nähnyt demoja tästä aiheesta ja siltä osin voinee todeta, että tulevaisuus näyttää varsin mielenkiintoiselta.
Toinen merkittävä kehityspolku on siinä, että LabVIEW on ollut varsin merkittävänä tekijä toteuttamassa suurta suunnitelmaa perinteisen 4-20 mA virtaviestin korvaamiseksi kansainvälisen standardin mukaisella digitaalisella viestillä prosessiteollisuudessa. Ja niissä demoissa LabVIEW on ollut eräänlaisena "väyläanalysaattorina".
Perinteisimpiä NI:n tuotteita ovat varmaan erilaiset mittauskortit, mutta niistä ei kerrota tässä yhteydessä. Ohjelmistopuolella löytyy nimittäin muitakin tuotteita kuin LabVIEW. Uusin tulokas on BridgeVIEW, joka on eräänlainen evoluutiomalli LabVIEW:stä. BridgeVIEW on tullut tai tulee markkinoille 12/96.
Toinen uusi tuote on LookOut-valvomo-ohjelma. Sitä ohjelmoidaan yksinomaan konfiguroimalla, joten kaikki on helppoa, niin kauan kun ei vaadi mahdottomia. Tämä tuote tuli NI:lle yritysoston kautta vuonna 1996.
Yhtiöön tuli samalla tavalla yritysoston kautta vuonna 1996 myöskin HiQ. Se on National Instrumentsin mukaan kilpailija MatLabille. HiQ:n beta-version voi ladata koneeseensa ilmaiseksi tämän vuoden aikana verkosta.
Neljäs tuote on sitten LabWindows/CVI, joka on yhtiön oma ja jo vanhempi tuote. Sitä voisi kai luonnehtia eräänlaiseksi opastetuksi C-ohjelmaeditoriksi. Tekemällä valintoja se luo yhteen ikkunaan C-koodia. Voi sitä koodia tietysti naputella itsekin suoraan, mutta silloin pitää tietysti tuntea syntaksi.
Miksi otan esille näitä muita National: Instrumentsin ohjelmia? Tällaisen yhden yhtiön "tukeman" kielen yhteydessä helposti herää epäilys, että kyseinen yhtiö on jotenkin korviaan myöten sitoutunut kyseiseen kieleen. Näin ei National Instrumentsin kohdalla ole. Yhtiö tarjoaa erilaisiin käyttötarkoituksiin sopiviksi arvioimiaan kieliä, eikä ole täysin riippuvainen tästä G-kielestä.
Kilpailijoita on varmaan paljonkin. Kuten jo yllä tuli todettua, niin erittäin monet automaatiojärjestelmät ohjelmoidaan tänä päivänä tavalla, joka muistuttaa G-kieltä, vaikkakaan syntaksi ei ole sama.
Jos pysytään PC-ympäristössä, niin paikallisesti keskisuomalaisittain tulee mieleen Datalogin DasyLab, jota Jämsänkoski käyttää suunnilleen vastaaviin tarkoituksiin. Muita kilpailijoita ovat esimerkiksi korttipuolen kilpailija Data Translation, jolla on tuote nimeltään DT VEE, ja HP, jolla on tuote nimeltään HP VEE.
Jos on pääsy Internetiin, niin tärkein osoite on ilman muuta: "www.natinst.com"
Sieltä löytyy lisää tietoa ja viitteitä. Sovelluksista on kuvauksia, joista osa on tosin pdf-formaatissa. Sieltä löytyy myöskin linkit kansallisten maahantuojien kotisivuille.
Mikäli yhteyttä Internetiin ei ole käytettävissä, niin silloin on parasta otta yhteys maahantuojaan vaikka puhelimella,
puh. 09-5272321.
Internetin kautta löytyy muutenkin lisää tietoa, esimerkiksi haku Altavistasta tavaramerkin mukaisella merkkijonolla eli "LabVIEW" tuotti 10517 kappaletta viitteitä. En tulosta niitä tähän, jokainen tarkentakoon hakua sen mukaan, mikä asia kiinnostaa.
Loppuun olen kopioinut muutaman sivun eräältä National Instrumentsin LabVIEW:ta käsittelevältä sivulta. Kopio palvelee kahta tarkoitusta. Ensinnä siinä on selostettu alkuperäisesti monia LabVIEW:n perusasioita, jotka minun muuten olisi pitänyt kääntää itse tähän dokumenttiin. Ja toisekseen Internet-yhteyttä vailla olevat näkevät vähän siitä, mistä ovat paitsi.
LIITE: Ote National Instrumentsin Internet-sivuilta
"At CERN, LabVIEW is widely used by scientists and engineers.
It does an excellent job in different fields, like testing modular instruments,
controlling testbenches, and monitoring power equipment."
Fabio Soso, LabVIEW Software Administrator, CERN, European Organization
for Nuclear Research
The Instrument of Choice
Imagine
a revolutionary instrument that exactly meets your application needs. An
instrument that acquires, analyzes, and displays data exactly the way you
want it to. Imagine LabVIEW - the Instrument of Choice.
Thousands of successful engineers, scientists, and technicians use LabVIEW to create solutions for their demanding application needs. LabVIEW, a revolutionary graphical programming system for data acquisition and control, data analysis, and data presentation, offers an innovative programming methodology in which you graphically assemble software objects called virtual instruments (VIs).
LabVIEW gives you the flexibility of a powerful programming language without the associated difficulty and complexity. If you are looking for a faster way to program your instrumentation systems without sacrificing performance, then join the thousands of successful LabVIEW users and discover the software that is revolutionizing test and measurement, data acquisition and control, process monitoring, and factory automation.
Developing a Complete Instrumentation System
With LabVIEW, you control your system and present your results through
interactive graphical front panels. You have numerous options for data
management - storing data to disk, sharing data over a network and between
applications, and preparing hardcopy output.
You can acquire data from thousands of devices, including GPIB, VXI, serial devices, PLCs, and plug-in data acquisition (DAQ) boards. You can also connect to other data sources via networking, interapplication communication, and structured query language (SQL) database links.
After you have acquired the data, you can convert your raw data into meaningful results by using the powerful data analysis routines in LabVIEW.
"Our LabVIEW-based in-vehicle data acquisition
system has been a big hit with our customers. LabVIEW has provided us the
functionality, creative license and tools to design systems that meet the
cutting edge requirements of our customers in the automotive industry."
John Date, Vice President Engineering, Dateppli Inc.
Virtual Instrumentation
The
introduction of LabVIEW in 1986 pioneered a new instrumentation approach
called virtual instrumentation. Virtual Instrumentation empowers users
to build their own instrumentation systems with standard computers and
cost-effective hardware. These software-centered systems leverage off the
computational, display, and connectivity capabilities of popular computers
to give you the power and flexibility to build each of your instrumentation
functions. You can mix and match your choice of data acquisition and instrument
control hardware, including all of your existing instruments, to create
virtual instrumentation systems that exactly meet your needs.
Saves Time and Money
Virtual Instrumentation saves time and money by empowering you to build
"user-defined" systems in a fraction of the time it takes with
traditional approaches. In development, you get the answers you need more
quickly and have the time to test more thoroughly. In manufacturing, you
test products faster and more completely. Your quality goes up, while your
time to market goes down.
Improves Productivity
Because LabVIEW substantially reduces the time required to develop
applications, LabVIEW users all over the world are experiencing substantial
productivity gains. These productivity gains stem not only from the ease
of use in LabVIEW but also from simplified code maintenance and reuse.
Increases Flexibility
By combining LabVIEW with standard data acquisition and instrument
control devices, you can create virtual instruments and use them in many
applications. Unlike traditional instruments, which are limited by the
design of the manufacturer, a virtual instrument can operate as a variety
of devices, such as a temperature monitor, voltmeter, strip chart recorder,
digitizer, and signal analyzer.
"Apart from being the most advanced instrument control software,
LabVIEW has the largest library of instrument drivers across instrument
vendors. Users benefit from years of product feedback and a large installed
base. The software is the key to a truly open system."
Deborah Agrella, GENEVA Business Unit Manager, GenRad
LabVIEW Test and Measurement Tools
LabVIEW
has become an industry-standard development tool for test and measurement
applications. With the LabVIEW Test Executive, graphical test programs,
and the industry's largest instrument library, you have a single, consistent
development and execution environment for your entire system.
LabVIEW VI Development
LabVIEW eases application development with GUI libraries, analysis
libraries, and I/O libraries for GPIB, VXI, DAQ, and serial interfaces.
In addition, you can easily connect to other applications through networking
and interapplication communication. With the open architecture of LabVIEW,
you can call any DLL or shared library, so you can reuse your existing
code.
The LabVIEW Test Executive
The Test Executive controls test execution sequences for production
and manufacturing applications. To leverage off your existing code, you
can incorporate tests written in a variety of languages into the Test Executive.
In addition, you can easily incorporate statistical process control (SPC)
methods and SQL database connectivity into your test sequences.
Instrument Drivers
Instrument drivers dramatically reduce software development costs because
you do not have to spend time programming the low-level control of each
instrument. The LabVIEW instrument driver library has more than 500 drivers
for instruments from more than 45 manufacturers. The instrument driver
architecture of LabVIEW has been standardized and endorsed by all major
suppliers through the VXIplug&play Systems Alliance. LabVIEW
is the standard development platform for all VXIplug&play GWIN
framework drivers. LabVIEW also runs all VXIplug&play drivers
that conform to either the WIN or GWIN framework specifications.
"LabVIEW's functional test design environment
enables rapid development of cost-effective ATE solutions."
Hugh Williams, Test Equipment Design Leader, British Aerospace
(Systems and Equipment) Limited - BASE
In-Vehicle Data Acquisition System
Dateppli,
Inc., based in Midland, Michigan, has developed a LabVIEW-based, in-vehicle
DAQ system. Using DRIVE (Data Retrievable In-Vehicle), engineers can easily
acquire data from a moving vehicle under test track and over-the-road test
conditions. DRIVE is especially useful for test engineers who acquire a
combination of digital and analog data, such as strain measurement, acceleration,
and deflection, from a moving vehicle. Engineers at Dateppli chose LabVIEW
to develop DRIVE because of its functionality, its straightforward programming
approach, and its interactive control for on-the-fly dynamic data acquisition.
Production Test and ATE
GenRad, Inc. uses LabVIEW to control instruments and perform tests
in their ENCOMPASS Test Management System. ENCOMPASS is an open, high-productivity
test development environment for use with its GENEVA (GenRad Extended VXIbus-Based
Architecture) test and measurement systems. Engineers at GenRad chose LabVIEW
for their ENCOMPASS product because of its productivity and ease of use
for functional verification and test. With its large library of instrument
drivers and its simple graphical programming, LabVIEW provides an open
system for production testing.
Surveillance Radar Quality Control System
Intersoft
Electronics, a Belgium-based engineering company, uses LabVIEW for many
applications. The RASS-PDP and RASS-S programs use LabVIEW to analyze primary
and secondary surveillance radar performance for EUROCONTROL and the FAA.
A total quality control of the radar chain, from antenna to data processor,
is performed. LabVIEW is used for all of the data acquisition, RF instrument
control, data analysis, and reporting in these applications.
"We use LabVIEW throughout our R&D Technical Center
for a wide range of applications, from supervisory and direct PID process
control to complex data analysis and process simulation. LabVIEW gives
us the ability to link the process control, data logging, and data analysis
in our labs - giving us better control, 24 hour operation, and recording/reporting
of critical data."
John O'Neal, Laboratory Automation Specialist
Versatile Tools for SCADA
LabVIEW
offers user interface, I/O, data analysis, and connectivity to address
applications such as simple data logging, Supervisory Control and Data
Acquisition (SCADA), and direct PID control. The graphical programming
capabilities of LabVIEW give you a combination of both ease of use and
flexibility not available in traditional man-machine interface (MMI) or
SCADA software products.
Powerful User Interface
If you have MMI requirements, the user interface tools in LabVIEW will
help you quickly create intuitive graphical displays, including trend charts,
pushbuttons, LED alarms, and graphs, without having to draw controls from
scratch. You can further customize your MMI with the LabVIEW Picture Control
Toolkit or imported graphics created in other drawing packages to present
instrumentation symbols and system diagrams.
Variety of I/O Options
LabVIEW offers a wide range of instrumentation I/O options, with drivers
included at no charge for plug-in DAQ boards, serial instruments, and GPIB
and VXI hardware. Drivers are also available for communicating with programmable
logic controllers (PLCs), motion controllers, and other industrial DAQ
devices. With LabVIEW, you can easily mix and match the instrumentation
that best suits your industrial I/O needs.
Online Data Analysis
The LabVIEW analysis tools give you the ability to analyze and process
your data online, so you can quickly and reliably make important decisions
about your process. Using the SPC Toolkit, you can integrate quality control
capabilities into your data acquisition and control programs.
Company-Wide Connectivity
In today's business environment, company-wide access to data from your
process is critical. LabVIEW includes the connectivity tools you need to
provide this access to your data, including built-in dynamic data exchange
(DDE), NetDDE, and TCP/IP. For database connectivity, LabVIEW has integrated
SQL access to a wide range of databases.
"LabVIEW is a product of enormous quality,
flexibility, and power - both York International and our customers have
benefitted from it, and we have only begun to scratch the surface of the
program's power. LabVIEW proved the perfect tool to develop a flexible,
fast MMI."
Jack Gornik, Building Automation Manager, York International
North Sea Oil Well Monitoring
CARDIAC,
a National Instruments Alliance Program member based in Norway, has developed
a unique Multiphase Flowmeter (MPFM) with LabVIEW to measure oil, gas,
and water flow from North Sea oil wells. The MPFM application integrates
sensors and transmitters using serial, HART, ModBus, and direct analog
connections into a single virtual instrument. The MPFM also acts as a ModBus
slave within a Fisher-Rosemount Provox DCS installed at the oil well.
HVAC Monitoring and Control
York International uses LabVIEW as the MMI in many of their HVAC (heating,
ventilation, and air conditioning) control systems. LabVIEW communicates
over a standard serial interface to remote smart panels that control sensors,
motors, and other HVAC instrumentation. LabVIEW performs functions such
as alarm notification and monitoring and control of chillers. York installations
include Apple Computer in Cupertino, California, The Pond hockey arena
in Anaheim, California, and the National Instruments manufacturing and
engineering facility in Austin, Texas.
Production Line Automation with PLCs
Consolidated
Diesel uses LabVIEW and National Instruments DAQ products for several systems
in their engine manufacturing facility. One system is used for setting
top dead center (TDC) of a diesel engine on the production line. This system
uses a National Instruments AT-MIO-16 multifunction DAQ board to control
a drive that positions the engine on the stand. LabVIEW controls the engine
position through the DAQ board while monitoring Modicon PLCs that control
the production line.
Draw Your Own Solution
With LabVIEW, you build VIs instead of writing programs. You quickly
create front panel user interfaces, giving you the interactive control
of your software system. To specify the functionality, you intuitively
assemble block diagrams - a natural design notation for engineers and scientists.
Create the Front Panel
On the front panel of your VI, you place the controls and data displays
for your system by choosing objects from the Controls menu, including numeric
displays, meters, gauges, thermometers, tanks, LEDs, charts, graphs, and
more. When your VI is complete, you can use the front panel to control
your system - while the VI is running - by clicking a switch, moving a
slide, zooming in on a graph, or entering a value from the keyboard.
Construct the Graphical Block Diagram
To program the VI, you construct the block diagram without worrying
about the many syntactical details of conventional programming. You select
objects (icons) from the Functions menu and connect them with wires to
pass data from one block to the next. These blocks range from simple arithmetic
functions, to advanced acquisition and analysis routines, to network and
file I/O operations.
Dataflow Programming
LabVIEW uses a patented dataflow programming model that frees you from
the linear architecture of text-based languages. Because the execution
order in LabVIEW is determined by the flow of data between blocks, and
not by sequential lines of text, you can create diagrams that have simultaneous
operations. Consequently, LabVIEW is a multitasking system - running multiple
execution threads and multiple VIs.
Modularity and Hierarchy
LabVIEW VIs are modular in design, so any VI can run by itself or be
used as part of another VI. You can even create an icon for your own VIs,
so you can design a hierarchy of VIs and subVIs that you can modify, interchange,
and combine with other VIs to meet your changing application needs.
Graphical Compiler
In many applications, execution speed is critical. LabVIEW is the only
graphical programming system with a compiler that generates optimized code
with execution speeds comparable to compiled C programs. Consequently,
you can increase your productivity with graphical programming without sacrificing
execution speed.
"We
looked at many other DAQ systems. Other systems were not very flexible
and did not suit our needs. With LabVIEW, we got a development system that
exactly fit our needs."
Mark Williams, Development Engineer, VI Engineering
Instrument Control
The LabVIEW, GPIB, VXI, and Serial VI Libraries use National Instruments
industry-standard device driver software for complete control of your instrumentation.
You can control any GPIB instrument connected to a National Instruments
IEEE 488.2 interface board. Your VXI instruments are easily programmed
with the LabVIEW VXI Development System, which includes VISA (Virtual Instrument
Software Architecture), the new interface-independent software interface
endorsed by the VXIplug&play Systems Alliance. You can communicate
to your instruments from embedded VXI controllers or computers with an
MXI or GPIB-VXI interface.
The Instrument Driver VI Library, available free of charge, contains drivers for more than 500 GPIB, VXI, Serial, and CAMAC instruments. These drivers are included on the LabVIEW CD-ROM distribution. They are also available on our Internet site, our BBS, and can be requested on disk.
Data Acquisition and Control
The DAQ VI Library has functions to acquire and output data with all
National Instruments plug-in and remote DAQ products. The plug-in boards
are ideal for high-speed and direct control applications. Because of their
lower cost, they bring the cost per channel down significantly. LabVIEW
also has drivers for industrial I/O devices such as PLCs, data loggers,
and single-loop controllers. All National Instruments SCXI modules for
signal conditioning and remote data acquisition work with LabVIEW. To help
you select the right DAQ hardware for your system, we have created a free
software configuration utility called DAQ Designer - you can request it
from any National Instruments office.
"LabVIEW for Windows NT provides us with
an excellent environment for our S655 printed circuit board tester. We
were able to easily call DLLs directly from LabVIEW. With features like
DDE and database support, we'll be able to expand our application in the
future."
Patrick Mullin, Engineering Manager, Schlumberger ATE
Data Analysis
LabVIEW features powerful, comprehensive analysis libraries that rival
those of dedicated analysis packages. These libraries are complete with
statistics, evaluations, regressions, linear algebra, signal generation
algorithms, time and frequency-domain algorithms, windowing routines, and
digital filters. For a comprehensive list of more than 140 analysis functions
in LabVIEW, contact National Instruments.
Connectivity
LabVIEW features numerous VI Libraries to communicate with other applications.
You can call any DLL or shared library from LabVIEW. VIs for several networking
protocols, including TCP/IP and UDP, are also available to communicate
with remote applications. Using DDE VIs, you can create both Client and
Server VIs to communicate with other Windows applications either on the
same machine or using NetDDE on a remote computer. For Macintosh users,
you can use Apple Events and program-to-program communication (PPC) VIs
to communicate with other applications. On Unix platforms, VIs are available
to pass data between applications via named pipes. For example, you can
share data with an existing HP-BASIC program running under HP-UX.
Stand-Alone Applications
The LabVIEW Application Builder gives you the ability to create and
distribute stand-alone executable applications. These executable applications
run at compiled execution speeds and do not require a separate run-time
system.
"An important issue in building large systems is unit testability.
With LabVIEW this testing is built right in. And changing or adding instruments
is a simple process - no lengthy program modification or recompilation
is necessary."
Steve Bragg, Systems Engineer, Frontier Engineering
Flexibility to Meet Your Needs
LabVIEW delivers not only ease of use, but the flexibility and versatility
to build a complete system. That's why so many people turn to LabVIEW for
both their simple and sophisticated applications.
Editing and Debugging
LabVIEW has extensive tools for development, test, and debugging.
It features execution highlighting, single-step mode, wire probes, and
breakpoints, so you can trace and monitor the execution flow through the
diagram. The context-sensitive Help window describes each icon and its
connections. The Online Help gives instant access to common questions,
online manuals, error codes, examples, customer support information, and
more.
Existing Code Is Reusable
As you move to a new programming system, it is very important to maintain
compatibility with your existing code. With LabVIEW, you can call executables
written in other languages; communicate with other applications using DDE,
Apple Events, and named pipes; and directly call external code written
in any language through DLLs and shared libraries.
Large Application Management
When developing large applications, configuration management features
are a necessity to ensure that your applications meet rigorous quality
standards. With LabVIEW, you can log in under a user name and keep track
of the progress of your VIs, including your name, the time and date the
VIs are updated, and the modifications made.
Ready-to-Run Examples
LabVIEW is shipped with more than 300 example VIs, along with a special
utility to help you locate exactly what you're looking for. You can use
these examples as is or customize them to meet your needs, eliminating
the need to build programs from scratch.
"The hands-on approach made learning and understanding
easier. Absolutely superb instructors! Clear, concise and extremely sensitive
to our individual needs."
LabVIEW Basics , Customer Education Course Student
Applications Assistance
National
Instruments provides comprehensive customer assistance for our products.
LabVIEW users have access to updates, example programs, all instrument
drivers, and documents to answer common questions on the National Instruments
World Wide Web site (http://www.natinst.com), FTP site (ftp.natinst.com),
and Bulletin Board Service (512) 794-5422. Application Notes, product information,
and common questions are available from our automatic information retrieval
system (512) 418-1111. By joining the LabVIEW Maintenance and Support Program,
you will receive free upgrades, discounts on training, and first-priority
technical support.
Customer Education
National Instruments offers LabVIEW Customer Education materials and
courses around the world. The LabVIEW Basics and LabVIEW Advanced courses
teach you about all LabVIEW programming concepts. Courses are also available
to help you develop LabVIEW Data Acquisition applications, LabVIEW GPIB
applications, and LabVIEW VXI applications. You can also use the LabVIEW
Training Video to learn the basics in just a few hours.
LabVIEW User Groups
LabVIEW User Group meetings are held throughout the year at trade shows,
company sites, and regional offices. Users share information with each
other and learn about new LabVIEW features and upcoming products. You can
also subscribe to the user-sponsored info-labview Internet mailing list
(info-labview-request@pica.army.mil). This list is very popular with LabVIEW
users for discussing applications, tips and techniques, and more. We encourage
you to use info-labview to discuss your potential applications with other
LabVIEW users.
The Instrument Library Developer Program (ILDP)
The ILDP was formed to satisfy the high demand for instrument drivers.
The ILDP offers instrument manufacturers special training and other benefits
for writing instrument drivers. Through the ILDP partnership with instrument
vendors, the LabVIEW Instrument Library continues to grow while maintaining
a high standard of quality.
Alliance Program
National Instruments is joining system integrators, consultants, and
hardware vendors from around the world by combining our powerful and flexible
software and hardware tools with their specialized technical expertise
to focus on solutions for particular application areas. For the LabVIEW
consultant, the program includes product and training discounts, additional
technical assistance, and new product information, as well as referrals
and comarketing opportunities. For the LabVIEW user, the program ensures
qualified, specialized assistance for application and system development
from highly qualified Alliance Program members.
The
LabVIEW Advanced Analysis VI Library offers a powerful and comprehensive
set of analysis routines for processing acquired data. These VIs deliver
the latest technologies in analysis software. These libraries are rich
in statistics, evaluations, regressions, linear algebra, signal generation
algorithms, time and frequency-domain algorithms, windowing routines, and
digital filters.
Measurement
AC & DC Estimator
Amp & Freq Estimate
Amplitude and Phase Spectrum