Klassbeskrivning
Hur ett objekts kropp ser ut finns beskrivet i objektets klassbeskrivning. Här finns även
de metoder som kan verka på ett objekt beskrivna och alla övriga egenskaper hos instanser
av klassen. Klassbeskrivningen byggs upp av speciella klassdefinitionsobjekt som ligger i
en klassvolym. Klassvolymen har en strikt syntax över hur klassbeskrivningarna ska var
uppbyggda. Här följer en presentation av de olika objekt som ingår in en klassbeskrivning.
Klassvolym
Klassbeskrivningar ligger i en speciell typ av volym, ClassVolume. Dessa kan innehålla två
olika hierarkier, en hieraki med klassbeskrivningar och en med typbeskrivningar.
$ClassHier
Klassbeskrivningar ligger under rotobjektet 'Class' av klassen $ClassHier. Under $ClassHier
objektet ligger objekt som beskriver olika klasser i form av $ClassDef objekt.
$ClassDef
Ett $ClassDef objekt med underliggande objekt beskriver en klass. Namnet på objeketet ger
namnet på klassen. Under $ClassDef objektet kan det finnas
- ett $ObjBodyDef objekt, 'RtBody', som beskriver runtimekroppen.
- ett $ObjBodyDef objekt, 'DevBody', som beskriver kroppen i utvecklingsmiljön.
- ett Template objekt, dvs ett objekt av den aktuella klassen som innehåller defaultvärden
för instanser av klassen.
- ett eller flera body objekt som innehåller data för specifika funktioner.
- ett PlcTemplate objekt, som kan öppnas av plceditorn, och som innehåller plc-kod för
klassen.
- menyobjekt som beskriver popupmenyn i navigatören, konfiguratören och xtt.
- metodobjekt som knyter till metoder som anropas t ex när objekt skapas eller flyttas i
utvecklingsmiljön.
$ObjBodyDef
Ett $ObjBodyDef kan ha antingen namnet 'RtBody' och beskriver då runtimekroppen, eller
namnet 'DevBody' som bekriver utvecklingsmiljö kroppen. I attributet 'StructName' ligger
namnet på c-structen för klassen i den include-fil som genereras för volymen. Under
$ObjBodyDef objektet ligger ett objekt för varje attribut som finns i objektskroppen. För
dataobjekt använder man $Attribute objekt, för funktionsobjekt $Input, $Output och $Intern.
$Attribute
Ett $Attribute objekt beskriver ett attribut i en kropp. Attributet kan vara av följande
typ:
- en bastyp, t ex Boolean, Float32, Time, Int16.
- en härledd typ, t ex String80, Text1024, URL.
- en vektor av bastyp eller härledd typ.
- en annan klass.
- en vektor av en klass.
- en rtdb pekare, dvs en pekare som kan tolkas av alla processer.
- en privat pekare, dvs en pekare som endast kan tolkas av en process.
Typen anges i attributet 'TypeRef'. I attributet 'Flags' anges om objektet beskriver en
vektor, pekare, klass mm. Om objektet beskriver en vektor anges antalet element i 'Elements'.
$Input
$Input beskriver en ingång till ett funktionsobjekt i plcprogrammet. Ingången kan vara av
typen Boolean, Float32, Int32, String80, Time, DeltaTime eller av datatyp (pekare till
Float32). $Input ger upphov till ett attribut med två element, ett element av den angivna
typen, och ett element med en pekare till den angivna typen. Om ingången är kopplad pekar
pekaren på det kopplade utgångsattributet, om ingången ej är kopplad pekare den på sitt
första element, där man kan då kan datasätta ett värde på ingången.
Attributet 'PgmName' anger namnet i c-structen för attributet, och 'GraphName' den textsträng
som skrivs i funktionsobjektet vi ingången.
$Intern
Ger uphov till ett internt attribut i ett funktionsobjekt, dvs ett attribut som varken är en
ingång eller utgång.
$Output
$Output beskriver en utgång i ett funktionsobjekt. Samma datatyper gäller för $Output som för
$Input.
$Buffer
$Buffer skapar ett attribut som innehåller en datamängd av en viss storlek som endast någon
enstaka funktion behöver kunna tolka. Datamängden beskrivs av en klass, men går ej att
öppna i t ex xtt. PlcNode som återfinns i alla plc objekt är ett exempel på $Buffer. Där
återfinns grafiska information som enbart är av intresse för plc-editorn.
Klass kropp
Ett klass kan innehålla ett klass kropp objekt. Klass kroppobjektet innehåller data som är
gemensam för alla instanser av klassen. Exempel på klass kropp objekt är $GraphPlcNode som
återfinns i all plc-klasser. $GraphPlcNode innehåller data för kodgenerering och grafisk
layout av funktionsobjektet.
Menyer
Menyobjekt används för att definiera popup-menyer för objekt i utvecklingsmiljön och i
operatörsmiljön. $Menu definierar en popupmeny i utvecklingsmiljön, och $RtMenu in
operatörsmiljön. Under menuobjektet definieras menyalternativ med $MenuButton objekt, och
undermenyer med $MenuCascade objekt. Meny-objekten läggs under $ClassDef objektet.
Menyobjekten anropar metoder, dvs c-funktioner som byggs med utvecklingsmiljön resp
operatörsmiljön. Det finns fn inte någon möjliget att göra detta från ett projekt, utan
bygget måste ske från källkodsträdet.
$Menu
$Menu objekt beskriver popupmenyer i utvecklingsmiljön. Objektsnamnet specificerar funktionen,
första delen anger verktyget (Navigator/Configurator). De fem sista bokstäverna bestämmer
under vilka vilkor menyn är närvarande, beroende på vilka objekt som är utvale eller utpekade.
1. P står för pointed, dvs det objekt som markören pekar på.
2. anger vad pointed är: 'o' ett objekt, 'a' ett attribut, 'c' en klass i paletten.
3. s står för selected, dvs det objekt som är utvalt.
4. anger vad selected är: 'o' ett objekt, 'a' ett attribute, 'c' en klass i paletten,
'm' flera objekt utvalda, 'n' inget objekt utvalt.
5. anger om selected och pointed är samma objekt: 's' samma objekt, 'n' olika objekt.
Exempel ConfiguratorPosos: 'Po' markören pekar på ett objekt, 'so' ett objekt är utvalt,
's' det objekt markören pekar på och det utvalda är samma objekt.
$RtMenu
Menyobjekt som beskriver popupmenyer i operatörsmiljön.
$MenuButton
Definerar ett menyalternativ i en popupmeny.