Het spijt ons. Uw verzoek kon niet worden verwerkt.

Important: This FAQ has been automatically translated by our software program. The original FAQ can be found here. SBC provides this information without liability for its correctness or functionality and does not assume liability being complete or correctly translated.

Waarom is het constante type in de gecompileerde code anders zoals in mijn IL-code?

FAQ #100129

De compiler stelt automatisch de juiste constante type als het niet overeenkomt met de instructie.

 

In de PCD instructieset zijn er twee verschillende soorten constanten: The 32 bit lange "Constant" en de 14-bits lang "K constante" (voor meer accurate informatie lezen van de FAQ #100123 naar dit onderwerp) die worden gebruikt op een andere manier:

  • Sommige instructies (bijvoorbeeld de belasting instructies LD, LDL en LDH) is een waarde zonder een media-code vereist. In dit geval kan slechts een "Constant" worden ingevoegd. Een "Constante K" wan't passen hier omdat "K" een mediatype is.
  • Andere instructies (bijvoorbeeld de CMP-instructie) vereist een media-code. In dit geval kan alleen de constante van het type "Constante K" worden gebruikt. De "Constant" heeft geen media code dus het wan't passen hier.

Ondanks deze regels is het mogelijk om deze constante typen in uw IL-code gebruiken als u wilt. Dit is alleen mogelijk omdat de compiler het verkeerde constante type automatisch door de juiste is vervangt. Bijvoorbeeld:

In IL worden volgende regels geschreven:

CMP  

R 0

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

De code die zal worden gedownload in de PCD na compilatie ziet er zo uit:

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

De automatische correctie van verkeerde constante type werkt ook voor de parameterdefinitions van een FB-oproep. Dat wil zeggen is het mogelijk om te definiëren een "K Constant" parameter van een FB-oproep ondanks binnen deze FB de parameter verwijst eist door een instructie waarmee een parameter van het type "K Constante" niet:

CFB 0
R 0
K 1
K 2 De compiler vervangt K 2 met 2, omdat...
... ... ...
FB 0
CMP = 1
= 2
LDL = 1
= 3 .. .een LDL-instructie staat niet toe dat "K-constante"

De correctie kan natuurlijk niet worden gedaan als de gedefinieerde FB-parameter tweemaal binnen de FB heet en het toegestane constante-type anders is. In dit geval PG5 versie > = 1.3 zal breken de compilatie met een foutbericht "FB parameter heeft slechte kader":

CFB 0
R 0
K 1
... ... ...
FB 0
CMP = 1 Een CMP-instructie vereist een mediatype...
= 2 .. .voor de tweede codeline
LDL = 1 Een LDL-instructie staat niet toe dat een mediatype voor de...
= 2 .. .twee codeline (maar "= 2" is een "K constante") = > afbreken

Opmerking dat in PG5 versies < 1.3 de compiler niet detecteert het conflict wat zal leiden tot vreemd gedrag van uw PCD!

 

Categories

Local FAQ Deutschland / SEdit (IL programming)

Last update: 09.05.2015 08:38

First release: 11.06.2004 14:08

Views: 6770

The requested software / document is no longer marketed by Saia-Burgess Controls AG and without technical support. It is an older software version which can be operated only on certain now no longer commercially available products.

Download