Ladderdiagram en andere PLC-talen: naslag
Wat elk profiel van Siemens, Rockwell en Beckhoff hier ondersteunt, welke aannames het doet en waar het verschilt van de software van de fabrikant.
Siemens SCL
Standaard S7-1500 · geoptimaliseerde FB-opslag · lokale #-tags in SCL.
- Structuur
- Getypeerde interface; toekenningen, IF / ELSIF / ELSE, CASE-lijsten voor INT/DINT met teken en REGION / END_REGION. CASE-bereiken vallen buiten deze subset.
- Expressies
- BOOL-logica, numerieke rekenkunde, vergelijkingen en haakjes. INT, DINT, REAL en TIME. & betekent ook AND. ABS, LIMIT, MIN, MAX, ROUND en TRUNC werken op getallen. Een REAL gaat via ROUND of TRUNC in een INT of DINT: TIA Portal converteert het niet zelf. Commentaar loopt met // tot het einde van de regel, of staat tussen (* ... *), of (/* ... */) voor commentaar dat vertaald kan worden.
- Instructies met toestand
- Timers TON_TIME, TOF_TIME, TP_TIME en TONR_TIME; tellers IEC_COUNTER.CTU, CTD_INT en CTUD_INT met INT PV/CV; R_TRIG en F_TRIG. De lijst hieronder geeft ze allemaal.
- FOR-lussen & EXIT
- FOR counter := start TO end BY step DO … END_FOR; gebruikt een INT/DINT-teller, inclusieve grenzen en een optionele BY (standaard +1). Negatieve stappen werken. EXIT verlaat de binnenste lus. Laat de teller, het einde en de BY-operanden binnen de lus ongewijzigd; een BY van nul wordt geweigerd.
- Arrays
- Declareer ARRAY[0..9] OF REAL in de blokinterface; lees of schrijf #Samples[#Index]. Elementen van het type BOOL, INT, DINT en REAL, ook met negatieve ondergrenzen.
- PLC-datatypes en FB's
- Benoemde PLC-datatypes (tabel of TYPE-document) en herbruikbare FB's met Input, Output, InOut, Static en Temp. Declareer FB-instanties in Static en roep #Instance(Input := …, Output => …) aan.
- Uitvoeringslimieten
- Eendimensionale arrays: elk tot 256 elementen en 1.024 uitgevouwen opslagwaarden per programma. Elk element verschijnt in Bewaakte tags en in de herhaling. Een index buiten het bereik stopt de cyclus met de werkelijke index en de toegestane grenzen. Lussen delen het budget van 20.000 bewerkingen per cyclus, zelfs met een lege body. Dit zijn limieten van de academie.
- Buiten deze subset
- WHILE / REPEAT, de machtsoperator **, de andere wiskundige functies (SQRT, SIN enzovoort), meerdimensionale arrays, arrays van UDT's of instanties, anonieme geneste structuren, kopieën van hele arrays, je eigen functies met returnwaarden, pointeradressering en projectbestanden van de fabrikant.
Timers, tellers en zelfhoudingen
- TON
TON_TIME - Inschakelvertraging. Q gaat aan zodra IN gedurende PT aan is geweest, en gaat uit met IN.
#Delay(IN := #Start, PT := T#2s);Siemens’s pagina - TOF
TOF_TIME - Uitschakelvertraging. Q gaat aan met IN en blijft na het uitgaan van IN nog PT aan.
#RunOn(IN := #Start, PT := T#2s);Siemens’s pagina - TP
TP_TIME - Puls. Q is aan gedurende PT vanaf elke stijgende flank van IN, wat IN daarna ook doet. Een nieuwe flank terwijl de puls loopt, wordt genegeerd.
#Dose(IN := #Start, PT := T#2s);Siemens’s pagina - TONR
TONR_TIME - Tijdsopteller. ET telt de tijd op dat IN aan is en behoudt die als IN uitgaat. Q gaat aan bij PT en blijft aan. R wist ET en Q.
#RunTime(IN := #Running, R := #Clear, PT := T#1h);Siemens’s pagina - CTU
IEC_COUNTER - Telt op. Elke stijgende flank van CU telt 1 bij CV op. Q is aan als CV gelijk is aan of groter dan PV. R zet CV op 0.
#Bottles.CTU(CU := #Sensor, R := #Clear, PV := 6);Siemens’s pagina - CTD
CTD_INT - Telt af. LD laadt PV in CV. Elke stijgende flank van CD haalt er 1 af. Q is aan als CV 0 of minder is.
#Left(CD := #Sensor, LD := #Refill, PV := 12);Siemens’s pagina - CTUD
CTUD_INT - Telt op en af. CU telt 1 op, CD haalt er 1 af, en beide in één cyclus laten CV ongemoeid. R zet CV op 0 en LD laadt PV. QU is aan bij PV of meer, QD bij 0 of minder.
#Stock(CU := #In, CD := #Out, R := #Clear, LD := FALSE, PV := 10);Siemens’s pagina
SR, RS en de geïnverteerde spoel zijn LAD- en FBD-blokken. Schrijf in SCL een latch met IF en een geïnverteerde bit met NOT.
Groepeer apparatuurgegevens en hergebruik een getest besturingsblok
- Een UDT beschrijft een groep samenhangende waarden. PumpStatus bevat de draaistatus en het aantal starts; het voert zelf geen logica uit.
- PumpControl bevat de herbruikbare logica. DutyControl en StandbyControl zijn aparte instanties: ze delen de definitie, maar elk houdt zijn eigen Latch- en WasRunning-waarden bij.
- Ingangen worden bij de aanroep meegegeven. Running wordt na uitvoering naar de uitgang gekopieerd. Status is een gestructureerde InOut die naar de statustag van die pomp verwijst; schrijven naar Status.Starts werkt de gegevens van de aanroeper bij.
- Elke aanroep wordt in programmavolgorde uitgevoerd. Een aanroep overslaan behoudt de waarden van de instantie en de uitgang; een IF om een aanroep heen is geen stopcommando. Zet de blokkeer-/Stop-ingang actief en voer het blok uit om de pomp uit te zetten.
Declareer PumpStatus als PLC-datatype en PumpControl als FB. Declareer DutyControl/StandbyControl in Static voor multi-instantie-aanroepen. SCL gebruikt lokale tags met #, Input/InOut met := en Output met =>. Temp-gegevens worden in dit geoptimaliseerde lesmodel bij elke aanroep gewist.
TYPE
PumpStatus : STRUCT
Running : BOOL;
Starts : DINT;
END_STRUCT;
END_TYPE| Naam | Sectie | Datatype |
|---|---|---|
Start | Ingang | BOOL |
Stop | Ingang | BOOL |
Permit | Ingang | BOOL |
Fault | Ingang | BOOL |
Running | Output | BOOL |
Status | InOut | PumpStatus |
Latch | Static | BOOL |
WasRunning | Static | BOOL |
#Latch := (#Start OR #Latch) AND NOT #Stop AND #Permit AND NOT #Fault;
IF #Latch AND NOT #WasRunning THEN
#Status.Starts := #Status.Starts + 1;
END_IF;
#Status.Running := #Latch;
#Running := #Latch;
#WasRunning := #Latch;#DutyControl(Start := #Start, Stop := #Stop, Permit := #Permit, Fault := #Fault, Running => #PumpOn, Status := #DutyStatus);
#StandbyControl(Start := #StandbyStart, Stop := #Stop, Permit := #Permit, Fault := #StandbyFault, Running => #StandbyPump, Status := #StandbyStatus);Probeer het in de werkbank
Open een willekeurige SCL missie en gebruik de PLC-datatypes en Functieblokken -tabbladen. Declareer daarna de instanties in Blokinterface.
- Bekijk de UDT en de blokdefinitie, daarna de twee instanties met verschillende namen.
- Overschrijf Start tijdens de pauze op TRUE in het tabblad Ingangen en doorloop meerdere cycli: PumpOn blijft aan en DutyStatus.Starts loopt één keer op.
- Laat Start los. De zelfhouding houdt de hoofdpomp draaiend. Start de reservepomp; de startteller daarvan is onafhankelijk.
- Zet Fault op ON: de hoofdpomp stopt direct terwijl de reservepomp blijft draaien. Druk tijdens het draaien op Stop, of overschrijf Stop op TRUE in het tabblad Ingangen tijdens de pauze: beide stoppen de pomp.
- Gebruik Terugspoelen op een opgenomen cyclus en vergelijk de statustags van de aanroeper met de lokale toestand van het blok en de uitgevoerde blokregels.
De simulatieafspraken
- Vaste virtuele taak van 20 ms. Afspeelsnelheid en 3D-framerate veranderen de resultaten niet.
- Elk testscenario begint met een verse controller en installatie.
- Bewerkingen stoppen de uitvoering. Resultaten en herhaling horen bij de geteste versie van het programma.
- REAL gebruikt 32-bits precisie. Niet-ondersteunde integer-overflow geeft een diagnosemelding.
- Tellers bevatten INT-waarden. De andere tellerbreedtes (SINT, DINT en de unsigned types) en de LTIME-timers zijn hier niet geïmplementeerd.
- Geldige NORM_X/SCALE_X-berekeningen worden in FBD ondersteund. Ongeldige bereiken stoppen met een diagnosemelding; ENO-/foutresultaten van de fabrikant worden niet nagebootst.
- Grafieken gebruiken één actief pad en Booleaanse N/S/R-acties. Getimede acties van de fabrikant, parallelle paden en opties voor laatste cyclus/reset vallen buiten dit model.
- Integer-deling laat het deel achter de komma vallen: 7 / 2 is 3. Decimale vergelijkingen gebruiken de precisie van de operand; een REAL-waarde van 0.1 is gelijk aan 0.1. Gebruik een REAL-operand voor deling met decimalen.
- SCL accepteert getypeerde REAL-constanten zoals REAL#2.0. Dubbelzinnige berekeningen met kommagetallen gebruiken de dubbele precisie van de S7-1500 voordat ze aan een REAL-tag worden toegekend.
- Behoud bij spanningsonderbreking, echte I/O, netwerktiming en firmware van de fabrikant vallen buiten het model.
Lees de originele documentatie
Deze academie leert een afgebakende subset. Echte verificatie vraagt om compileren en testen in de genoemde software van de fabrikant.
De beoordeling van het gesprek draait in deze browser. De huidige opzet op locatie is een lokaal prototype, geen beveiligde dienst voor beoordeling op afstand. Exportbestanden zijn bèta en moeten op import en gedrag worden gecontroleerd in TIA Portal V20 of Studio 5000.
Het basisgedrag is vergeleken met de officiële Logix-handleidingen en de S7-1200-handleiding en S7-1200/1500-richtlijn. De Siemens-documenten zijn ouder dan V20. Het TwinCAT-gedrag volgt de Tc2_Standard-naslagpagina's van Beckhoff en de TwinCAT 3 PLC-handleiding. Deze controle vervangt geen test op de doelcontroller, vooral niet voor grafiektiming en herbruikbare blokken.
Siemens TIA Portal V20Studio 5000 v38Logix-handleiding functieblokkenLogix-handleiding SFCTwinCAT 3 PLC-talenTwinCAT Tc2_Standard TONTwinCAT Tc2_Standard CTU