Autor Thema: "Expression too complex!" Fehler in Building 1.00  (Gelesen 6794 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline robpit

  • Newbie
  • *
  • Beiträge: 6
    • Profil anzeigen
"Expression too complex!" Fehler in Building 1.00
« am: 02. März 2017, 19:45:57 »
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]
« Letzte Änderung: 02. März 2017, 20:00:37 von robpit »

Offline robpit

  • Newbie
  • *
  • Beiträge: 6
    • Profil anzeigen
Re: "Expression too complex!" Fehler in Building 1.00
« Antwort #1 am: 02. März 2017, 20:18:27 »
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.