Bibliotheken bearbeiten - ich drehe fast durch...Hilfe!

KingHelmer

Level-1
Beiträge
1.076
Reaktionspunkte
139
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
Ich habe mal wieder ein nerviges Problem.

Nachdem ich mehrere Bibliotheken, wie z.B. die Oscat_basic.lib und die Gebaeude_allgemein.lib und die Standard.lib in meinem Programm eingebunden hatte, wurde mir logischerweise angezeigt, dass die maximale Anzahl der Bausteine(1023) überschritten wurde.

Was macht man? man erkundigt sich, wie man unnötige FBs und Fs aus den .libs loswird.

Also habe ich folgendes getan:

-Neues Projekt
-Öffnen->Oscat_basic.lib
-Nicht gebrauchte Bausteine gelöscht
-Speichern unter -> "Eigene Bibliotheken" -> Oscat_abgespeckt.lib

Resultat:

Nach Einbindung der "neuen" .lib wurden mit über 60 Fehler angezeigt mit fehlenden Bausteinen.
Also heißt das, dass innerhalb der oscat.lib alle Bausteine, bzw. viele Bausteine untereinander vernetzt sind.

Das dumme daran ist, dass man ja nicht wissen kann, welche Bausteine wie genau verknüpft sind.
Mache ich jetzt also etwas falsch, oder darf man einfach nichts löschen?


Zur InFo:

Mir kommt es heute in erster linie darauf an, die Funktion GEN_PULSE aus der Oscat.lib herauszuziehen, ohne irgendwelche andere Funktionen/Funktionsbausteine.

Kann mir hier irgendjemand weiterhelfen?

Beste Grüße,

Florian
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi ST,

Die Funktion erzeugt einen Impulstakt mit einstellbarer Impuls und Pausenzeit mit Hilfe des SPS Timers.
Hier der "Erklär-Text":

"GEN_PULSE uses the internal sps timer to generate a continuous output waveform with programmable high and low time.
the accuracy of gen_pulse is depending on the system timer.
when time is 0 the high and low times are exactly one cycle.
ENQ = TRUE will start and ENQ = FALSE will stop the generator."


Hier der Quellcode:

IF enq THEN
tx := DWORD_TO_TIME(T_PLC_MS());
IF NOT init THEN init := TRUE; tn := tx; END_IF;
IF tx - tn >= SEL(Q, PTL, PTH) THEN
tn := tn + SEL(Q, PTL, PTH);
Q := NOT Q;
END_IF;
ELSE
Q := FALSE;
init := FALSE;
END_IF;


und der Deklarationsteil:

FUNCTION_BLOCK GEN_PULSE
VAR_INPUT
ENQ : BOOL := TRUE;
PTH : TIME;
PTL : TIME;
END_VAR
VAR_OUTPUT
Q : BOOL;
END_VAR
VAR
tx: TIME;
tn: TIME;
init: BOOL;
END_VAR


In dieser Funktion wird widerum die Funktion T_PLC_MS() aufgerufen. Was wiederum in dieser aufgerufen wird, habe ich noch nicht nach geschaut.

Mal böse gesagt:

Was bringen mir die ganzen fertigen Bibliotheken, wenn es am Schluss doch selbst gemacht werden muss?

Beste Grüße,

Florian
 
Hallo Florian,

Als Ersatz für GEN_Pulse könnte auch die Funktion von 3S BLINK gehen , findest DU in der UTIL LIB.
Nach den Namen der Lib#s gehe ich von Wago-Komponeten aus.
Ansonsten setze Dich mit dem WAGO Suport in Kontakt. Je nach Kontrollerart lassen sich hier Werte anpassen.
 
Hallo,

machs ganz einfach:

Nimm ein leeres Projekt und öffne die Lib die du nutzen möchtest. (Nicht im Bibliotheksverwalter)

Dann machst du eine "Dummy"-Funkion mit dem Baustein, der dich interessiert.

Dann alles übersetzten und schon wird dir angezeigt, was du löschen kannst, das die ungenutzen Bausteine in Geisterschrift angezeigt werden.

ALso dann die "Geisterbausteine löschen und fertig.

MfG CAS
 
Mal böse gesagt:

Was bringen mir die ganzen fertigen Bibliotheken, wenn es am Schluss doch selbst gemacht werden muss?
Hilferuf: 10:43 Uhr
Fertigmeldung: 19:23 Uhr
Wie lang hätte es gedauert, so ein Teil selbst zu schreiben?
Mal als Anregung:
Mit
Code:
MyTimer(In:=not MyTimer.Q);
liefert Dir MyTimer nach jedem Ablauf auf Q einen Impuls von einer Programmzykluslänge. Mit dem kann man dann eine BOOL-Variable negieren. Den Timer in Abhängigkeit von dieser Variablen dann noch mit zwei verschiedenen Sollwerten zu füttern, sollte keine Hexerei sein.
 
hi ST,

In der Zeit hatte ich ja nicht andauernd versucht, die Lösung zu finden, habe ja auch noch andere Sachen zu tun ;)
Nun ja, ich bin froh, dass es geklappt hat.

Es gab ja auch noch die Funktion GEN_RDT, die mir einen Zufallsimpuls in einer vorgegebenen Zeitspanne liefert.
Klar mit nachdenken und Rumprobieren wird man es natürlich irgendwann schaffen.

Allerdings wollte ich eine schnelle Lösung, die letztenendlich auch funktioniert hat.

Aber dennoch danke.
Code:
Funktion_Block
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

zwar ist das eigentliche Problem schon gelöst, wir wollen aber hier noch einmal die prinzipielle Vorgehensweise zum Lösen der Fragestellung erläutern, damit den nächsten Hilfesuchenden ein Leitfaden an die Hand gegeben werden kann:

Wenn man die Meldung erhält, dass die maximale Anzahl Bausteine überschritten wurde, sollte man
1.) In den Zielsystemeinstellungen temporär die maximale Bausteinanzahl (z.B. von 1024 auf 2024) hochsetzen.
2.) Jetzt das Projekt neu kompilieren ("Alles bereinigen" -> "Alles übersetzen")
3.) Danach in den Projektoptionen unter "Übersetzungsoptionen" den Punkt "Unbenutze Objekte von der Übersetzung ausschließen" anwählen.
4.) Nun ist die maximale Bausteinanzahl in den Zielsystemeinstellungen wieder auf Ihren urspünglichen Wert zurückzuändern.
5.) Jetzt das Projekt erneut kompilieren ("Alles bereinigen" -> "Alles übersetzen")
=> FERTIG!

Bei weiteren Fragen kannst Du uns auch gerne unter den unten genannten Adressdaten direkt kontaktieren.
 
Hallo,
ist zwar ein alter Thread aber habe leider das selbe problem.
Ich kann einstellen was ich will, bekomme immer Fehler angezeigt, egal wie ich die Bausteinanzahl ändere...
Unbenannt.PNG

Hat jemand noch einen Tipp?

Danke vorab...

Gruß Andy
 
Hallo,

ich hatte das selbe Problem mal mit einer 881, habs aber mit diesem Thread hinbekommen.
Ich bin zwar nicht so tief drin aber es könnte sein das du bei der 842 diese Anzahl der Bausteine (9999) gar nicht einstellen kannst, weil das mit der Segmentgröße nicht zusammen stimmt.
Oder du kommst trotz der Erhöhung der Bausteinanzahl über die max Anzahl der Bausteine die möglich sind.
Was hast du alles für Libs. eingebunden??
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Andy
Deine Fehlermeldung hat nichts mit der maximalen Anzahl von Bausteinen zu tun.
Es steht doch da, dass es Probleme mit dem Speicher der Variable "str" gibt.
- Was ist str für eine variable?
- Wie ist sie definiert
- was wird ihr bei der Definition zugewiesen?
Holger
 
Hallo,
habe es auch mit 1024 Bausteinen probiert, aber nichts hat geholfen.

Ich habe nur die Oscat Basic eingebunden und drücke dann auf übersetzen und schon kommt die Meldung.
Ansonsten ist nur die Standard.lib von Wago eingebunden.
Ohne die Oscat habe ich keine Fehlermeldung.

Habe noch nichtmal einen Baustein im PLC_PRG.

Nachtrag:
Ich arbeite derzeit eigentlich mit Codesys for Raspberry Pi und Codesys V3.5.
Dort habe ich etliche Bibliotheken eingebunden und hier scheitert es schon an einer...
Da ich aber nun mein getestetes mit einer Wago 750-842 umsetzen will, wollte ich mal damit anfangen es in Codesys V2.3 zu übernehmen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten morgen,
Dies habe ich auch probiert, stand ja auch in der Vorgehensweise von Wago eine Seite vorher...
Habe auch schon händisch versucht aus der Oscat Building funktionen zu löschen, aber irgendwie fehlt dann immer ein Baustein der Gebraucht wird.

Gesendet von meinem HTC One_M8 mit Tapatalk
 
Hi Castor,

so wie Holgermaik in #12 schon geschrieben hat, wird dies weniger etwas mit der Baustein-Anzahl zu tun haben, als mit dieser einen Variable "str".
Ich denke, du solltest diese mal testweise entfernen/auskommentieren und schauen ob es dann funktioniert.

Gruß,
Flo
 
Die Variable 'str' kommt aber nicht von mir, habe quasi noch keinen Programmcode eingefügt, da es schon am übersetzen scheitert.
Werde heute Abend aber erst danach schauen können.

Gesendet von meinem HTC One_M8 mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wago 750-881,
Bausteinanzahl / Segmentgröße
1023 / 16#7D000
1364 / 16#7C000
1705 / 16#7B000
2046 / 16#7A000
2387 / 16#79000
2728 / 16#78000

in der Anlage ist die Vorgehensweise beschrieben
 

Anhänge

  • Anzahl Bausteine.pdf
    134,7 KB · Aufrufe: 29
Hallo,

wie KingHelmer bereits geschrieben hat, hat dieser Fehler nicht mehr mit der Bausteinanzahl zu tun.
Es liegt in diesem Fall daran, das der 842 mit mehreren Datensegmenten arbeitet:
(Zielsystemeinstellungen)

842_01.png

Und dies auch für die Übersetzung angegeben werden muss:
(Projekt>>Optionen>>Übersetzungsoptionen)

842_02.png

Ansonsten reicht der Speicher nicht aus.

Die Bausteine müssen dann natürlich fürs erste Übersetzeen zusätzlich temporär erhöht werden.
Wie bereits im letzten Wago-Beitrag beschrieben.
 
Zurück
Oben