Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine maschinelle Übersetzung. Die originale FAQ ist hier zu finden. SBC stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.

Warum unterscheidet sich der Konstantentyp in den kompilierten Code wie meine IL-Code?

FAQ #100129

Der Compiler setzt automatisch den richtigen Konstanten Typ, wenn es nicht die Anweisung übereinstimmen.

 

Im PCD-Befehlssatz gibt es zwei verschiedene Arten von Konstanten: die 32-bit-lange "Constant" und der 14 bit lange "K Konstante" (für genauere Informationen lesen Sie die FAQ #100123 zu diesem Thema) die in einer anderen Weise verwendet werden:

  • Einige Anweisungen (z. B. das LOAD Anleitung LD, LDL und LDH) erfordert einen Wert ohne einen Medien-Code. In diesem Fall kann nur eine "Konstante" eingefügt werden. Eine "Konstante K" WAN ' t passen hier denn "K" einen Medientyp.
  • Andere Anweisungen (z. B. der CMP-Befehl) erfordert einen Medien-Code. In diesem Fall kann nur die Konstante vom Typ "K Konstante" verwendet werden. Die "Konstante" hat kein Medien-Code also es WAN ' t passen hier.

Trotz dieser Regeln ist es möglich, diese Konstante Typen in den IL-Code zu verwenden, wie Sie wollen. Dies ist nur möglich, weil der Compiler automatisch den falschen Konstantentyp durch die richtige ersetzt. Zum Beispiel:

In IL werden folgende Zeilen geschrieben:

CMP  

R 0

0
CMP R 1
K 1
LD R 2
2
LD R 4
K 4

Der Code, der nach der Kompilierung in PCD heruntergeladen wird, sieht folgendermaßen aus:

000004 CMP R 0
000005 K 0
000006 CMP R 1
000007 K 1
000008 LD R 2
000009 2
000010 LD R 4
000011 4

Die automatische Korrektur der falschen Konstante Typ, arbeitet auch für die Parameterdefinitions eines FB-Aufrufs. Also ist es möglich, ein "K Konstante" als Parameter eines Aufrufs der FB trotz innerhalb dieser FB, die Parameters bezieht sich eine Anweisung nennt, die einen Parameter vom Typ "K Constante" erlauben nicht definieren:

CFB 0
R 0
K 1
K 2 Der Compiler ersetzt K 2 mit 2, da...
... ... ...
FB 0
CMP = 1
3 |
LDL = 1
= 3 ... ...ein LDL-Unterricht lässt keine "K-Konstante"

Natürlich kann die Korrektur nicht erfolgen, wenn der definierte FB-Parameter zweimal innerhalb der FB aufgerufen wird und der zulässige Konstante-Typ anders ist. In dieser Rechtssache PG5-Version > = 1.3 wird die Kompilierung mit einer Fehlermeldung abgebrochen, "FB-Parameter hat schlechte Kontext":

CFB 0
R 0
K 1
... ... ...
FB 0
CMP = 1 Eine CMP-Anweisung erfordert einen Medientyp...
3 | ... denn die zweite Codeline
LDL = 1 Ein LDL-Unterricht lässt keinen Medientyp für die...
3 | ... zweite Codeline (aber "= 2" ist eine "K-Konstante") = > Abbrechen

Beachten Sie, dass im PG5 Versionen < 1.3 der Compiler nicht den Konflikt erkennt was Seltsames Verhalten von Ihr PCD führt!

 

Categories

Local FAQ Deutschland / SEdit (IL programming)

Last update: 24.05.2015 09:31

First release: 11.06.2004 14:08

Views: 6789

Die von Ihnen angeforderte Software / Dokument wird von der Saia-Burgess Controls AG nicht mehr vermarktet und technisch unterstützt. Es handelt sich um eine ältere Software-Version, die lediglich auf bestimmten, mittlerweile nicht mehr im Handel erhältlichen Produkten betrieben werden kann.

Download