[ AUF ] Datenbaustein öffnen | Bit setzen

dennisbz

Level-2
Beiträge
142
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe im Rahmen meiner Techniker-Abschlussarbeit mehrere Universalbausteine für eine Maschine geschrieben.
Da die Ansteuerung der Achsen entweder über NC oder Technologie erfolgt, gibt es einen extra Baustein der diese Ansteuerung übernimmt.
Sollten die Achsen über NC gesteuert werden, kommt ein FC18 zum Einsatz.
Bei diesem ist es ja so, dass die Achse unter Umständen nicht wieder frei gegeben wird. (Z.B. Halt nach Ereignis, Tippbetrieb, ...)
Deshalb muss man in das Nahtstellensignal eingreifen und dort das Bit 2.2 löschen. Bisher habe ich dass immer direkt gemacht, also

O #Bedingung
= #Messfahrt_starten
FN Restweg_loeschen
= DB38.DBX 2.2

Mir ist nun aufgefallen, dass der Baustein so die ISO 611131 nicht erfüllt, da das Signal zum löschen im Code geändert werden muss, sollten die Achsen einen anderen Achs-DB haben.
Ich möchte jetzt im Aufruf des Bausteins die zu den Achse gehörenden DBs eintragen lassen und dementsprechend das Siganl zur Restweglöschung setzen. Ich dachte es mir so:

U #Bedingung
= #Messfahrt_starten
FN #Restweg_loeschen
SPB RESZ
SPA END9

RESZ: L #AchsNummer_X_Achse // INT
______T #AchsNummer_X_AchseWord
______AUF DB [#AchsNummer_X_AchseWord]
______= DBX 2.2 // Nahtstellensignal | Restweg löschen
______END9: NOP 0

Ich habe versucht das Ganze mit der PLCSIM zu simulieren, aber die macht irgendwie komische Sachen. Anfangs war sie die ganze Zeit in STOP (eine Meldung von wegen OB1 ... Keine Ahnung)
Dann habe ich den Baustein in ein anderes Programm geladen, in nem FC aufgerufen, da gings dann halbwegs. (Halbwegs, da ich die Werte der Variablen nicht sehe. Der grüne Run-Balken läuft auch nicht, ist aber Grün)

Na ja, lange Rede kurze Frage: Funktioniert das so? Die Doku soll Montag zum Buchbinder, deshalb wär es super, wenn mir schnell jemand helfen könnte. Schon einmal vielen Dank!

Grüße aus dem Süden

dennis
 
Ich würde mal folgendes ausprobieren:

Code:
L #AchsNummer_X_Achse // INT 
T #AchsNummer_X_AchseWord
AUF DB [#AchsNummer_X_AchseWord]
 
O #Bedingung
= #Messfahrt_starten
FN Restweg_loeschen
= DBX 2.2

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kai,

dank dir erst mal! Habe das Programm deiner Empfehlung gemäß angepasst. Sieht auf jeden Fall schon mal übersichtlicher aus und ich denke die Sprünge waren eine unnötige Fehlerquelle.

Zwei Fragen hätte ich noch:
Kann (bzw. sollte) man einen DB eigentlich auch wieder schließen?
Kann auch von mehreren Bausteinen auf einen DB "gleichzeitig" zugegriffen werden?

Merci!

Grüße
dennis
 
Hallo,
einen DB kann man nicht wieder schliessen - er wird auch nicht wirklich geöffnet - er ist mehr als eine Art Speicher-Pointer zu verstehen. (Ist als Beschreibung nicht glücklich ...)

SPS-Bausteine arbeiten nicht gleichzeitig sondern hintereinander. Aber selbstverständlich kann man den gleichen DB in mehreren anderen Bausteinen beschreiben oder auslesen - sogar Instanz-DB's ...
 
Danke für die schnelle Antwort!

Klar, die Aufgaben eines DBs ist mir schon geläufig. Mich hat der Befehl 'DB
öffnen' etwas irritiert. Ich kenne es nur von C#, wenn man dort z.B. eine
Textdatei öffnet muss man diese nach dem Einlesen wieder für weitere Anwendungen frei geben. Leider weiß ich über die Vorgänge beim Auslesen von
Datenbausteinen noch nicht bescheid. Irgendwie müssen die Daten ja ausgelesen und zwischengespeichert werden. Läuft das über die Akkus?

Klar auch, dass nichts zeitgleich erfolgen kann ... Deshalb die
Anführungszeichen. Mir ging es um die Überlegung, was passiert wohl, sollte ich aus mehreren Bausteinen aus auf einen DB zugreifen. Aber wenn der nicht
in diesem Sinne geöffnet wird, muss ich ihn wohl auch nicht schließen, um
ihn für weitere Aktionen zu verwenden.
So stell ich mir das jetzt mal vor...

Grüße
.dennis
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Larray Laffer hat eigentlich alles wesentliche schon geschrieben. DBs werden nicht geschlossen, und man kann in mehreren FCs oder FBs den gleichen DB öffnen. Man schreibt einfach in jeden FC oder FB den Aufruf AUF [DBNummer]. Man kann sich das dann so vorstellen, dass der DB bei jedem Aufruf wieder neu geöffnet wird.

Gruß Kai
 
Zurück
Oben