DAY_OF_MONTH(60): Variable 'MONTH' nicht deklariert

Begonnen von dtm, 22. Februar 2010, 09:43:45

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

dtm

Hallo,

ich bin gerade zwangsweise die Oscat-Bibliothek am dezimieren und habe alle daraus resultierenden Gründe für Fehlermeldungen bis auf Obige im Betreff behoben. Daraus resultiert dann offenbar noch "DAY_OF_MONTH(70): Kein korrekter Anfang für eine 'ST' Anweisung.
Da ich in FUP und nicht in ST 'programmiere' muss das Problem doch anscheinend im Modul Day_of_month liegen..

Ich verwende in meiner sehr abgespeckten Oscat-Variante nun folgende Module:

Ontime
SWITCH_I
TIMER_1
DAY_OF_WEEK
TMAX
TIMER_2
TMIN
Day of month
Day of year
leap of date
leap day
leap year
month of date
year begin
Toggle
year of date

...kann mir bitte jemand sagen wie ich diese Fehlermeldung behoben bekomme?
Fehlt doch noch irgendein Modul?
Wo kann ich die Variable ggf. deklarieren oder liegt der Fehler woanders?

Gruß

peewit

hallo

ich glaube das dir noch ein baustein fehlt !

kannst du dein reduziertes projekt online stellen ?

dtm

#2
gerne, ist im Anhang!
Dachte erst mir würde noch "Month" fehlen, weil die Fehlermeldungen vorher entsprechend auf fehlende Bausteine schließen liessen.

ps. ich hoffe du meinst nicht das ganze Projekt sondern nur die Lib. Ich bin Anfänger und mein Programmteil lässt den meisten mit Sicherheit graue Haare wachsen. Ansonsten gern per PM/Email.

Grüße

[gelöscht durch Administrator]

dtm

#3
...würde mich freuen wenn es leicht in den Griff zu bekommen wäre. Habe es noch nicht geschafft.

Habe eben nochmal eine neue Variante erstellt. Da klappt die Übersetzung der Bib ohne Fehlermeldung.

Wenn ich sie aber dann in mein Projekt einbinde bekomme ich wieder obige Fehlermeldung.
Allerdings sind da wesentlich mehr Bausteine drin als ich benötige - war ein Versuch.

Wo müsste man denn ggf. diese Variable deklarieren, wenn die Fehlermeldung nicht aus einem fehlenden Baustein resultieren würde?

EDIT:
Habe eben mal die Variable 'Month' in Globale Variablen als 'INT' deklariert. Jetzt kommt nur noch die Fehlermeldung im Anhang.
1!!!!! Fehler noch. Ich hoffe da folgen nicht wieder 30 neue wenn der behoben ist...  ::)



Gruß

[gelöscht durch Administrator]

peewit

mit der oscat_red3.lib gibts auch keine probleme

schicke mir dein projekte das sich nicht compilieren lässt als privat nachricht , oder stelle es einfach online...


dtm

Hallo,

ich habe dir eine PM mit DL-Link gesendet - hast du die erhalten / hat der Download funktioniert?
Hatte beim Senden der PM keine Bestätigung erhalten.

Grüße

hugo

dir funktion day_of_month benutzt eine ganze reihe weiterer funktionen aus der oscat lib.

das vorgehen um die oscat lib zu verkleiners geht wie flogt:
projekt erstellen: (eventuell mit anderem target oder simulation falls nicht genügend bausteine vom target zur verfügung gestellt werden)
wenn projekt fehlerfrei dann unter projekt/optionen/übersetzungsoptionen/objekte ausschliessen/unbernutzte ausschliessen

ansonsten kannst du ganz einfach in den source code schauen und feststellen welche funktionen innerhalb einer funktion verwendet werden

dtm

Danke für die Info Hugo. Meine Vorgehensweise hat glaube ich soweit funktioniert - zumindest wurde bei peewit durch die "zugeschnittene" Lib keine Fehlermeldung ausgegeben. Das Problem scheint in meinem Fall woanders zu liegen. Wäre prima wenn peewit den Fehler in meinem Projekt finden würde.

Das mit dem Ausschliessen etc. habe ich schon x-mal durch, es hatte bei mir leider nicht zum Erfolg geführt..
Wenn es grundsätzlich zum Erfolg führen muss habe ich was falsch gemacht...

Wenn peewit nicht fündig wird muss ich mir den Sourcecode wohl mal anschauen... habe ich eigentlich aber schon gemacht - und der Text der Fehlermeldung taucht in der ganzen .EXP Datei nur einmal auf. Und die Zeile wo es auftaucht sieht richtig aus - aber irgendwo muss der Fehler sein..

peewit

#8
hallo dtm

in deiner oscat_red3.lib bei der function DAY_OF_MONTH gibt es ein problem mit verschachtelten kommentaren
auch wenn man unter settings die verschachtelten kommentare aktiviert hat

du must einfach den rot markierten text rauslöschen

--------------------------------------------------------

(* calculate the day in the year *)
DAY_OF_MONTH := DAY_OF_YEAR(idate);
(* leap will be set to one for a leap year *)
leap := BOOL_TO_INT(LEAP_OF_DATE(idate));
(* if leap year deduct one from the days of the year *)
DAY_OF_MONTH := DAY_OF_MONTH - leap;
(* search if we are in month december to march ? *)
IF DAY_OF_MONTH > setup.MTH_OFS[9] THEN
   IF DAY_OF_MONTH > setup.MTH_OFS[11] THEN
      IF DAY_OF_MONTH > setup.mth_ofs[12] THEN
         DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[12];
      ELSE
         DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[11];
      END_IF;
   ELSE
      IF DAY_OF_MONTH > setup.mth_ofs[10] THEN
         DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[10];
      ELSE
         DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[9];
      END_IF;
   END_IF;
ELSIF DAY_OF_MONTH > setup.MTH_OFS[5] THEN
   IF DAY_OF_MONTH > setup.MTH_OFS[7] THEN
      IF DAY_OF_MONTH > setup.mth_ofs[8] THEN
         DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[8];
      ELSE
         DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[7];
      END_IF;
   ELSE
      IF DAY_OF_MONTH > setup.mth_ofs[6] THEN
         DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[6];
      ELSE
         DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[5];
      END_IF;
   END_IF;
ELSIF DAY_OF_MONTH > setup.MTH_OFS[3] THEN
   IF DAY_OF_MONTH > setup.MTH_OFS[4] THEN
      DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[4];
   ELSE
      DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[3];
   END_IF;
ELSE
   (* since now we must be in february or january we need to add leap again *)
   DAY_OF_MONTH := DAY_OF_MONTH + leap;
   IF DAY_OF_MONTH > setup.MTH_OFS[2] THEN DAY_OF_MONTH := DAY_OF_MONTH - setup.mth_ofs[2]; END_IF;
   (* since nothing was true before, day_of_month must already be good *)
END_IF;

(*
(* this was try number one but a loop is too slow *)
(* calculate the day in the year *)
DAY_OF_MONTH := DAY_OF_YEAR(idate);
(* leap will be set to one for a leap year *)
leap := BOOL_TO_INT(LEAP_OF_DATE(idate));
(* if leap year deduct one from the days of the year *)
DAY_OF_MONTH := DAY_OF_MONTH - leap;
(* search if we are in month december to march ? *)
FOR month := 12 TO 3 BY -1 DO
   IF DAY_OF_MONTH > setup.MTH_OFS[month] THEN
      DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[month];
      RETURN;
   END_IF;
END_FOR;
(* since now we must be in february or january we need to add leap again *)
DAY_OF_MONTH := DAY_OF_MONTH + leap;
IF DAY_OF_MONTH > setup.MTH_OFS[2] THEN DAY_OF_MONTH := DAY_OF_MONTH - setup.mth_ofs[2]; END_IF;
(* since nothing was true before, day_of_month must already be good *)
*)




(*
Revision history

hm 22.1.2007      rev 1.1
   deleted unused variable day_in_year and day_in_year_begin

hm   1. okt 2007      rev 1.2
   changed code to use day_of_year and leap_of_date
   added compatibility to STEP7

hm   8. oct 2007      rev 1.3
   deleted unused variable yr

hm   8. jan 2008      rev 1.4
   improved performance

hm   25. oct. 2008   rev 2.0
   new code using setup constants
*)

dtm

#9
Das wäre ja super wenn das klappen würde. Womit kann ich denn die Datei editieren? Mit Notepad habe ich es versucht, dann meldet Codesys dass die Bib korrupt sei...


edit: hab die Bib geladen und lösche es grade raus...

...schonmal ohne Fehler Übersetzt... jetzt mal schnell die SPSen umstöpseln und Testen...
Grüße

dtm

ES KLAPPT!!!

Vielen Dank dass du dir mein Projekt angeschaut hast.
Ich wäre NIE darauf gekommen die verschachtelten Kommentare rauszulöschen!
Endlich - ich freu mich!!!
Grüße
Daniel

hugo

#11
welche uralt version benutzt ihr denn da? die verschachtelten kommentare wurden bereits vor einem jahr genau aus diesen grund beseitigt

zusätzlich kannst du in codesys unter projekt optionen nested comments ein bzw ausschalten

dtm

Es war die 3.04. Wollte damals mal auf die 3.10 umsteigen, das gabs zuviele Fehlermeldungen und ich bin bei der 3.04 geblieben weil ich keine Zeit hatte mich drum zu kümmern.