Programmeeritavad kontrollerid
Euroopa struktuurfondide logo
Siemens LOGO! viide Automatiseerimise viide Mehhatroonikaseadmete viide Pneumoautomaatika viide

SCL keel

Üldiselt SCL keelest

Struktureeritud tekst (Structured Text - ST) on kõrgtasemeline programmeerimiskeel ülesannete juhtimiseks ja keeruliste matemaatiliste arvutuste tegemiseks. Tööstuse arenemise ja keerukamate lahenduste kasutuselevõtuga on seda laialdasemalt kasutama hakatud kõikjal, kus on vaja seadmeid liidestada teiste tööstusseadmete ja serveritega ning kasutada mitmeid erinevaid kommunikatsiooniprotokolle.

Võrdlus teiste PLC programmeerimiskeeltega

IL või STL

Siin on SCL keele eeliseks oluliselt parem arusaadavus ja jälgitavus inimesele - väga lühikesed (ridade arvult) ja selged programmilõigud ning võimalus kasutada programmi voo juhtimise elemente (If-else, for, while, case).

Kui IL / STL koosneb enamasti väga algelistest instruktsioonidest, siis SCL pakub sellega võrreldes palju rohkem ja palju rohkemate võimalustega instruktsioone. See võib vähendada vajadust pidevalt samu asju uuesti kirjutada või võimaldab neid lühemalt kirjutada. Lisandunud võimaluste ja täiendava keerukusega tuleb mängu ka rohkem erinevaid andmetüüpe, sest erinevate instruktsioonide vaheliseks andmevahetuseks peavad nad keerukamatest andmetest ühte moodi aru saama.

SCL puudusteks võib jällegi tuua vajaduse meelde jätta rohkem instruktsioone ja seda, kuidas neid kasutatakse ning vähem vabadust andmeid liigutada arvestamata erinevate andmetüüpidega.

Graafilised keeled nagu LAD või FBD

Siin on SCL keele eeliseks kompaktsus (enamasti mahub ekraanile oluliselt rohkem SCL koodi kui LAD või FBD diagrammi), dünaamilisus ja taaskasutatavus (lihtsam valida, kopeerida ja sobitada). SCL keele puuduseks on vajadus tunda keele süntaksit (ei saa asju lihtsalt omavahel kokku lohistada) ja vajadus teada instruktsioonide nimetusi ja nende parameetrite järjekorda.

Olulisemad SCL keele elemendid ja instruktsioonid

Operaatorid (Operators)

Operaatorid ehk tehtemärgid on need, mis määravad ära, millist operatsiooni ehk tehet mingite väärtustega teha - olgu operandideks siis muutujad või konstandid. Operaatoritega saab enamasti teha lihtsamaid tehteid, mida arvutiprotsessorid otseselt ise teha suudavad, nagu aritmeetikatehted ja loogikatehted ning väärtuste üle kandmine.

  • := - omistamine - ühele operandile teise operandi või avaldise tulemuse väärtuse omistamine,

Aritmeetikaoperaatorid:

  • + - liitmine,
  • - - lahutamine,
  • * - korrutamine,
  • / - jagamine
  • MOD - jagamisjäägi leidmine
Biti-loogika operaatorid:
  • NOT - "ei" loogika ehk inverteerimine
  • AND - "ning" loogika
  • OR - "või" loogika
  • XOR - välistav "või" loogika
Võrdlusoperaatorid:
  • = - Võrdne. Tulemus on tõene, kui operandid on samade väärtustega ehk võrdsed. Mitte segi ajada omistusoperaatoriga.
  • <> - Mitte võrdne. Tulemus on tõene, kui kaks operandi ei ole samade väärtustega.
  • < - Väiksem kui. Tulemus on tõene, kui operand vasakul on väiksem kui operand paremal.
  • > - Suurem kui. Tulemus on tõene, kui operand vasakul on suurem kui operand paremal.
  • - Väiksem võrdne. Tulemus on tõene, kui operand vasakul on väiksem või võrdne operandiga paremal.
  • - Suurem võrdne. Tulemus on tõene, kui operand vasakul on suurem või võrdne operandiga paremal.

Avaldised ja omistuslaused

Avaldised määravad, mis tehted ja millises järjekorras on vaja väärtuse leidmiseks täita. Avaldised koosnevad operandidest, operaatoritest ehk tehtemäkidest, olenevalt keelest ka sulgudest, mis määravad tehtejärjekorra. Avaldise tulemuseks on alati mingisugune väärtus.

Omistuslause puhul esmalt arvutatakse kokku avaldis paremal ja seejärel omistatakse selle tulemus vasakul olevale muutujale.

"Lamp1" := true;

"pool_kiirus" := "kiirus" / 2;

Tingimuslaused

Tingimuslaused (Conditional statement)
Tingimuslaused on juhtlaused, mis võimaldavad kirja panna, mis tingimustel mingeid järgnevaid operatsioone tehakse kasutades selleks võrdlusoperaatoreid.

Võrdluslaused on liitlaused ja koosnevad kahest osast - tingimusosa (kirjeldab, mis tingimusel täiteosa täidetakse) ja täiteosa (kirjeldab mida tehakse, kui tingimus on täidetud). Selle pärast lõpetatakse semikooloniga eraldi nii tingimuslause kui selle sees olevad täitelaused. Täitelauseid ja teisi tingimuslauseid võib tingimuslause sees olla mitu.

  • If-Then - Kui tingimus on täidetud, siis tehakse midagi.

    IF "StartNupp" THEN
        "Mootor" := true;
    END_IF;

    IF "pumpamine_aktiveeritud" AND "mahuti3_tase" > "mahuti3_seadepunkt" THEN
        "pump" := true;
    END_IF;
  • If-Then-Else - Kui tingimus on täidetud, siis tehakse midagi, kui ei ole, siis tehakse midagi muud.

    IF "toorik_magasiinis" THEN
        "indikaator_magasiin_tühi" := false;
    ELSE
        "indikaator_magasiin_tühi" := true;
        "toorikute_arv_magasiinis" := 0;
    END_IF;
  • If-Elsif - Kui tingimus on täidetud, siis tehakse midagi, kui ei ole, siis kontrollitakse järgmist tingimust. Kui järgmine tingimus on täidetud, siis tehakse midagi, kui ka see ei ole täidetud, kontrollitakse järgmist tingimust jne. Soovi korral saab else-if konstruktsioonile isada ka else.

    Siinkohal on oluline ära märkida, et üleval pool asuval tingimusel on kõrgem prioriteet - kui üleval pool olev tingimus on täidetud, siis allpool olevaid tingimusi enam ei kontrollita.

    IF "veetase" <= 10 THEN    // mahuti tühi
        "tasemeindikaator_tühi" := true;
        "tasemeindikaator_normaalne" := false;
        "tasemeindikaator_täis" := false;
    ELSIF "veetase" < 90 THEN    // veetase normaalne
        "tasemeindikaator_tühi" := false;
        "tasemeindikaator_normaalne" := true;
        "tasemeindikaator_täis" := false;
    ELSIF "veetase" >= 90 THEN    // mahuti täis
        "tasemeindikaator_tühi" := false;
        "tasemeindikaator_normaalne" := false;
        "tasemeindikaator_täis" := true;
    END_IF;
  • Case Of - Kui CASE taha kirjutatud muutuja või avaldise väärtusele leidub allpool sobiv vaste, siis täidetakse sellele vastele järgnevad laused. Kui ühelegi case võtmesõnale ei järgne muutuja või avaldise väärtusele vastavat väärtust, siis programmi täitmist jätkatakse ELSE võtmesõnast. Kui ka see puudub, siis jätkatakse pärast END_CASE; oleva programmikoodi täitmist. Korraga saab täituda ainult üks variant.

    CASE "Kiirus_Reziim" OF
        1:
            "Kiirus_Konveier1" := 30;
        2:
            "Kiirus_Konveier1" := 50;
        3:
            "Kiirus_Konveier1" := 100;
        ELSE:
            "Kiirus_Konveier1" := 0;
    END_CASE;

Loendamine

Kuigi uuemates TIA Portali versioonides SCL keeles sarnaselt LAD ja FBD keeltega eraldi loendurid, siis ajalooliselt neid SCL keeles algselt ei olnud. Seda põhjusel, et loendamist on võrdlemisi lihtne teha ka kasutades numbrilise andmetüübiga muutujat, tingimuslauset ja liitmist või lahutamist (olenevalt kummas suunas me tahame loendada) ning see annab meile veidi rohkem paindlikust kui eraldi loenduri kasutamine.

Näide toorikute loendamisest, kus "toorik_pos1" muutuja, mis esindab positsioonis 1 oleva anduri kahendsignaali. See andur peab loendama mööduvaid toorikuid. "toorikute_arv" on mõne numbrilise, täisarvulise andmetüübiga (näiteks, USINT, UINT, INT jne) muutuja, kus hoitakse loendatud väärtust. "toorik_pos1_enne" on tõusva frondi tuvastuseks vajalik mälubitt, mis hoiab meeles mis oli "toorik_pos1" väärtuseks eelmise programmitsükli ajal (vt. Signaali väärtuse muutuse avastamine)

IF "toorik_pos1" AND NOT "toorik_pos1_enne" THEN
    "toorikute_arv" = "toorikute_arv" + 1;
END_IF;

"toorik_pos1_enne" := "toorik_pos1";

Creative Commons Licence
"Programmeeritavad kontrollerid" is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License .