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]
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.