Skip to main content

Tiedonsiirtorajapinnat

Tässä ohjeessa on esitelty protokollat, joita tuetaan
suoraan pisteiden dataSource ja dataTarget -kentissä.

Yleistä:

dataSource ja dataTarget kenttiin annetaan URL muotoinen kuvaus siitä,
millä tavalla pisteen arvo halutaan lukea jostakin ulkoisesta
tietolähteestä, tai millä tavoin pisteen arvo halutaan kirjoittaa
johonkin ulkoiseen kohteeseen. Edellä mainittu ulkoinen kohde voi olla
jokin kenttäväylä, web-sivusto tai tiedosto.

Suurin osa dataSource ja dataTarget protokollista tukee seuraavia yleisiä
URL parametreja.

    YLEISIÄ DATASOURCE JA DATATARGET URL PARAMETREJA:

    ?scale=0.1      skaalaa luetun raw arvon annetulla kertoimella.

    ?offset=        Tekee skaalattuun arvoon suuntaissiirtoa

    ?invert=1       Tällä parametrilla käännetään tavallisimmin DI tai DO pisteen polariteetti,
					mutta sillä voidaan tehdä myös muuta.
					Invert parametri toimii niin, että väylältä luettu arvo vähennetään
					invert parametrin arvosta.
					Digitaali pisteen polariteetin saa käännettyä antamalla "invert=1"

    ?bitmask=       Tällä parametrilla voi antaa maskin, jonka avulla valitaan
                    vain halutut bitit raw arvosta. Käytännössä suorittaa
                    binäärisen AND operaation RAW datan ja tämän maskin välillä.

    ?datatype=      Määrittää missä muodossa luettu RAW arvo tulee tulkita.
                    Mahdollisia tyyppejä: int16, uint16, int32, uint32, float32

    ?x1=0&y1=0..x32=100&y32=100     Inline muunnostaulukko joka voidaan antaa
                    dataSource tai dataTarget URL:ssa. Käyrän taittopisteet
                    annetaan koordinaatteina URL parametreissa, jotak ovat
                    nimeltään muotoa "x1", "y1", x2 ja "y2". Pisteitä voi olla
                    enimmillään 32 kpl, ja ne on nimettävä juoskevasti 1:stä
                    lähtien. Raakadatan arvo on annettu X akselissa, ja vastaava
                    skaalattu arvo y akselilla. Ero on tärkeätä huomata
                    dataTargetissa, jolloin taulukkoa käytetään tavallaan
                    takaperin - eli pisteen pv sijoitetaan x akselille, ja väylään
                    lähetettävä data luetaan y akselilta. Tällöin samaa taulukkoa
                    voidaan käyttää sekä sourcessa että targetissa.

    ?rejecthi       Raja-arvo, jota suuremmat (skaalatut) arvot hylätään,
                    eli pisteen pv ei muutu.

    ?rejectlo       Raja-arvo jota pienemmät (skaalatut) arvot hylätään,
                    eli pisteen pv ei muutu.

    ?hilimit        Ylin arvo jonka skaalattu arvo voi saada - eli rajoittaa pv:n
                    maksimia. Arvoa ei hylätä, mutta se rajoitetaan.

    ?lolimit        Alin arvo jonka skaalattu arvo voi saada - eli rajoittaa pv:n
                    minimiä. Arvoa ei hylätä, mutta se rajoitetaan.

    ?damping        Luo pisteen pv arvoon vaimennusta, eli käytönnössä tässä parametrissa voi antaa
					vaimennuksen aikavakion (lambda), aikayksikkönä funktiokutsut - jos kutsutaan kerran
					sekunnissa, aikavakion yksikkö on sekunti.

    ?precision      Pisteen tarkkuus. Arvo 0.001 tarkoittaa että piste näytetään 3 desimaalin tarkkuudella,
					ja tarkkuun 10 että arvo pyöristetään lähimpään kymmeneen.

    ?curve      	Pisteen skaalaukseen voi käyttää tällä parametrilla hvac kirjaston hvacCurve tyyppisiä pisteitä.
					Käyttö tapahtuu niin, että halutun hvacCurve pisteen nimi annetaan URL:ssä ?curve=hvacCurvePisteenNimi
					HUOM! Toimii VAIN dataSource URL:issa (ei dataTarget).
					HUOM, Muutos! Tämä toimii myös luomalla pisteeseen "curve" niminen kenttä, ja antamalla sen arvoksi haluttu
					skaalaus taulukko.


    ?select         Jos RAW data on "table" muotoinen, tällä parametrilla voi
                    valita taulukosta haluamansa solun, antamalla select parametrilla
                    oikean muotoisen polun haluttuun arvoon.

                    Polussa voi käyttää . ja [] syntaksia.

                    Esim. RAW data on {status="OK", data=
                        {pv={10, 20, 30, 40, 50}, description="My data"}
                    }

                    voi pv kentän kolmannen rivin osoittaa select parametrilla:
                        ?select=data.pv[3]

                    HUOM! Vain toimii vain dataSource kentissä


    PROTOKOLLAT:

    slc://      Lukee ja kirjoittaa tietoa toisiin SLC pohjaisiin laitteisiin.
                Mikäli IP osoitteeksi annetaan "local" (tai 127.0.0.1) data luetaan
                tai kirjoitetaan paikallisesti laitteen omassa pistetietokannassa.

                Verkon ylitse lukemiseen käytetään TCP porttia 30001

                Muoto:
                slc://local/dbPoint.field

                Esimerkki:
                slc://local/sys/settings/bacnetIP.instance
                slc://192.168.0.130/ioPoints/TK01/TE10.pv



    mbus://     Lukee dataa mbus väylästä. Tukee tällä hetkellä vain mbus-serial
                väylää.

                Huomaa että URL alkaa %-koodatulla mbus -portti tietokantapisteellä
                joka osoittaa siis sen portin jota väyläkommunikaatioon käytetään.

				mbus protokolla tulee URL parametreja:

				interval		MBus laitteen luentaväli sekunteina. Eli
								?interval=3600 tarkoittaa, että mittari luetaan vain tunnin välein


                Muoto:
                mbus://[mbusPortPointId]/[slaveAddress]/datarecords/[dataIndex]/value

                Esimerkki (dataSource):
                mbus://ioPorts%2FmbusSerial%2FP1/12016562/datarecords/5/value



    modbusrtu://    Lukee ja kirjoittaa dataa modbus RTU väylään.

                Tukee ylimääräisiä URL parametreja:

            order   sanajärjestys kun käytetään 32 bittisiä rekistereitä
                    arvot: "MSW" (enemmän merkitsevä sana ensin),
                    "LSW" (vähemmän merkistevä sana ensiksi).
                    Oletus: "MSW"

            multistate      Tällä parametrilla voidaan tulkita peräkkäiset rekisterit
                            arvoiksi esim. tasoa kuvaavaksi arvoksi. Eli RAW arvoksi
                            tulkitaankin rekisterin sisällön sijasta tieto siitä, kuinka
                            mones rekisteri ketjussa on arvoltaan suurempi kuin nolla.

            onvalue         Kun kirjoitetaan multistate rekistereihin,
                            kirjoitetaan tämä arvo niin monenteen rekisteriin, kuin
                            (skaalattu) PV määrittää.

                            VAIN dataTarget!

            forcewrite      Normaalisti modbus rekisterit kirjoitetaan vain silloin,
                            kun PV arvo muuttu. Tällä voidaan kirjoitus pakottaa
                            tapahtuvaksi jokaisella luku/kirjoitus kierroksella.

                            VAIN dataTarget.

            leap            in multistate sources, with this paramter, it is possible
                            to define non-consecutive registers to behave like
                            multistate input.
                            NOTE! Use with caution! This can cause huge amount of bus traffic (meanning
                            latecy will creep up).
                            
			forcesinglewrite	Käyttää holding rekisterin kirjoittamiseen funktionkoodia 0x06 (write single holding) eikä
								normaalia 0x10, eli koodia 16 (Write multiple holding)
						

                Muoto:
                modbusrtu://[modbusPortPointId]/[slaveAddress]/regType/[regAddr]

                Esimerkki (dataSource):
                modbusrtu://ioPorts%2FmodbusRTU%2FP3/50/input/1?scale=0.1&datatype=int16



    bacnetip:// lukee ja/tai kirjoittaa dataa bacnet IP väylään.

                Tuetut objekti muodot (objectTypeStr):
                analog-input, analog-output, analog-value,
                binary-input, binary-output, binary-value,
                multistate-input, multistate-output, multistate-value

                property voi olla joko propertyn enumeroitu numero. bacnetDefines
                tiedostossa määritellään joillekin ominaisuuksille alias, joita ovat mm.

                PV = 85
                NAME = 77
                DESCRIPTION = 28
                OOS = 81
                RELIABILITY = 103
                STATE_TEXTS = 110
                ACTIVE_TEXT = 4
                INACTIVE_TEXT =  46

                Muoto:
                bacnetip://[deviceId]/[objectTypeStr]/[objectNo]/[property]

                Esimerkiksi:

                bacnetip://421001/analog-input/2/PV

                bacnetip://421001/analog-output/2/77


    file://     Lukee tai kirjoittaa dataa paikallisiin tiedostoihin.

                Muoto:
                file://localhost/full/file/path

                Huomaa! localhost tarvitaan aina semantiikan vuoksi, vaikka se
                jätetäänkin huomiotta - eli nykyiset versiot eivät
                huomioi host-nimen kirjoitusasusta. Tulevaisuudessa on
                mahdollista että file -protokolla laajenee tukemaan myös remote -hosteja,
                jolloin taaksepäin yhteensopivuuden vuoksi olisi hyvä että localhost
                on kirjoitettu pisteisiin jo valmiiksi oikein.

                Esimerkki (dataSource tai dataTarget):
                file://localhost/tmp/munIoPiste.txt

                file://localhost/tmp/munMittausData.txt?scale=10



    http://
    https://    Toimii tällä dataSource kentässä, ja vain webService objektissa

                Hakee dataa HTTP tai HTTPS protokollan ylitse. Voi lukea esimerkiksi
                kokonaisen web sivuston, tai jonkin REST pohjaisen rajapinnan tarjoaman
                tiedon.

                Muoto:
                http://is.fi

                Tarkempi kuvaus webservice dokumentissa!


    DATAN LUKEMINEN JÄRJESTELMÄSTÄ - SLC JÄRJESTELMÄN RAJAPINNAT

    Järjestelmä toteuttaa joitakin rajapintoja joiden kautta tieto-
    kannan pisteitä pääsee lukemaan muista järjestelmistä.

    RAJAPINTA: BACnet IP

    Kaikki AI, AO, AV, BI, BO, BV, MSI ja MSV tyyppiset pisteet tietokannassa tulevat
    automaattisesti näkyviin BACnet/IP väylään, mikäli "BACnetIP" prosessi
    on käynnissä.

    RAJAPINTA: WebService/REST

    Data pisteitä on mahdollista lukea järjestelmästä myös REST tyyppisen
    rajapinnan ylitse. Kuvattu esillisessä dokumentissa.

    RAJAPINTA: SLC konsoli

    Dataa voi kysellä myös suoraan SLC palvelimesta. Tämä menetelmä on
    itseasiassa huomattavan tehokas, sillä sen kautta saa yhteyden suoraan
    SLC enginen Lua rajapintaan, ja tätä kautta on mahdollista vaikkapa
    telnet ohjelmalla, tai shell skriptistä netcat komennolla lähettää lua
    kielisiä komentojonoja SLC järjestelmälle. Komennot tulee päättää \0 eli
    eli niin "null" merkkiin. Tämä tarkoittaa yksinkertaisesti tavua nolla.
    Telnet ohjelmassa se saadaan usein tehtyä ^@ merkillä; Suomenkieliseltä
    näppäimistöltä [ctrl]-[alrGr]-[2].

    Bash komentorivillä voi hyödyntää netcat komentoa,
    ja testata sitä esimerkiksi näin:

    >> printf "return 'Hello SLC!'\0" | nc 192.168.0.128 30001

    huomaa, että printf komennon merkkijonossa annetaa null merkki \0 muodossa.

    Hyödyllisempi esimerkki:

    >> printf "return Data.getReal ('ioPoints/TK01/TE10_AI.pv')\0" | nc 192.168.0.128 30001

    Jolloin komento palauttaa laitteen 192.168.0.130 tietokannasta pisteen
    ioPoints/TK01/TE10_AI.pv -kentän pv arvon, ja tulostaa sen näytölle

    Saman voi tehdä myös telnet ohjelmassa, ottamalla yhteyden esimerkin tapauksessa
    osoitteseen 192.168.0.128, porttiin 30001, ja kirjoittamalla:

    return Data.getReal ('ioPoints/TK01/TE10_AI.pv')^@

    ja painamalla enter. Lopussa oleva merkki ^@ on edellä jo mainittu "null"
    merkki.

    Vastaukset joita SLC konsoli antaa, ovat aina JSON muodossa, joten voit
    kysellä rajapinnan ylitse ,yös taulukoita tai muita monimutkaisempia
    data-rakenteita.

    RAJAPINTA: fdxServer

    Datapisteitä voidaan lukea tietokannasta myös fdx-rajapinnan ylitse.
    Tämän rajapinnan kautta pääsee käsiksi pisteisiin, jotka on luotu
    /fdx/.. hakemistoon tietokannassa.

    Esimerkiksi pisteen /fdx/TK01_TE10_M oloarvo on mahdollista kysellä fdx
    rajapinnan ylitse nimellä TK01_TE10_M.