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



## KingHelmer (5 März 2012)

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


----------



## StructuredTrash (5 März 2012)

Was mach denn die Funktion GEN_PULSE? Vielleicht ist es einfacher, sich selbst eine zu bauen.


----------



## KingHelmer (5 März 2012)

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


----------



## S-Core (5 März 2012)

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.


----------



## cas (5 März 2012)

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


----------



## KingHelmer (5 März 2012)

Stimmt ja, 

wird ja dann angezeigt.
Danke dir, so klappts nun alles!

Grüße aus BaWü!


----------



## StructuredTrash (5 März 2012)

KingHelmer schrieb:


> 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

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


----------



## KingHelmer (5 März 2012)

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.

```
Funktion_Block
```


----------



## WAGO (7 März 2012)

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.


----------



## CastorTroy (9 April 2017)

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



Hat jemand noch einen Tipp?

Danke vorab...

Gruß Andy


----------



## Passion4Automation (9 April 2017)

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??


----------



## holgermaik (9 April 2017)

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


----------



## CastorTroy (9 April 2017)

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.


----------



## ccore (10 April 2017)

Hallo CastorTroy, 

versuch mal Projekt -> Alles bereinigen und dann noch mal alles übersetzen.

Gruß


----------



## CastorTroy (10 April 2017)

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


----------



## KingHelmer (10 April 2017)

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


----------



## CastorTroy (10 April 2017)

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


----------



## Rayk (10 April 2017)

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


----------



## .:WAGO::015844:. (10 April 2017)

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)




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




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.


----------



## CastorTroy (10 April 2017)

OK danke. Werde dies heute Abend sofort testen und berichten...


----------



## CastorTroy (10 April 2017)

Hallo,

habe bei übersetzungsoptionen die 3 hineingeschrieben und bei Systemkonfiguration 1024 eingestellt.
Jetzt bricht er mir immer beim selben Baustein ab mit Fehler ab...



Wenn ich in den Optionen den Haken bei Debugging weg mache geht es auch nicht.
Verwende ich jedoch eine 750-881 Steuerung geht es ohne Probleme...


----------



## CastorTroy (11 April 2017)

Update...
Habe aus der Oscat Lib den LtimeToUtc gelöscht und dann konnte ohne Probleme übersetzt werden...
Keine Ahnung, warum der Baustein Probleme macht.
Erfolgreich übersetzen konnte ich die Oscat Basic, Oscat Building, Modbus Tcp und Modbus Rtu auf der 750-842.

Gesendet von meinem HTC One_M8 mit Tapatalk


----------

