"Expression too complex!" Fehler in Building 1.00

Begonnen von robpit, 02. März 2017, 19:45:57

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

robpit

Hallo,

sobald ich zusätzlich zur Basic Bibliothek in Version 3.33 die Building 1.00 zu meinem Projekt hinzufüge, ohne irgendetwas aus der Building zu benutzen bekomme Ich bei einem Build den Fehler "Expression too complex! Use temporary results!". Im Moment habe ich das ganze behoben, indem ich einfach die Funktion AIR_DENSITY aus der Bibliothek gelöscht habe. Interessant ist ,dass der Fehler beim Kompilieren der Bibliothek normalerweise nicht auftritt. Erst wenn man als Ziel CX(ARM) auswählt erhält man den Fehler. Meiner Vermutung nach liegt das daran, dass der Ausdruck für die schwächeren CX Systeme als zu komplex angesehen wird:
AIR_DENSITY := phys.PN * (1.0 - RH * SDD(T, TRUE) * RX / P) / (RL * ( T - phys.T0));
Ich hoffe, dass es in der nächsten Version einen offiziellen Fix geben wird.

[gelöscht durch Administrator]

robpit

Folgende Vereinfachung kompiliert bei mir ohne Fehler:
FUNCTION AIR_DENSITY : REAL
VAR_INPUT
T : REAL;
P : REAL;
RH : REAL;
END_VAR
VAR CONSTANT
RL : REAL := 287.05;
RX : REAL := 3.773319E-3;
END_VAR
VAR
step1: REAL;
step2: REAL;
END_VAR

step1 := (1.0 - RH * SDD(T, TRUE) * RX / P);
step2 := (RL * ( T - phys.T0));
AIR_DENSITY := phys.PN *step1 / step2;

(* original code used for rev 1.3

AIR_DENSITY := phys.PN * (1.0 - RH * SDD(T, TRUE) * RX / P) / (RL * ( T - phys.T0));

*)

Bezüglich der Benennung der Variablen und in Anbetracht von möglichen Geschwindigkeitsverlusten sollte man das natürlich noch besser lösen.