DB Baustein FAQ

H

Hoilebolle

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Bin Technikerschüler und totaler Anfänger was S7 angeht. Habe ein Projekt mit Schritkette (RoboSteuerung) Kette in Fc´s Programmiert. Variablen noch in FCs. Soll aber alles in einem DB untergebracht werden. :oops:
Prob1:
Nun soll ich eine teachingfunktion einbauen die in einem DB ihre sollpositionen ablegt.
Prob2:
wie funktioniert ein Datenbaustein bzw wie lege ich Variablen an die ich wieder abrufen kann und wie rufe ich sie im FC auf????
Hiiiiiiiilllllllffffffffeeeee?
Bin halt blutiger beginner. :?:
 
Du musst dir einen GlobalDB erstellen. S7 Manager, rechte Maus, Objekt einfügen (oder ähnlich)

Den DB öffnen. Nun kannst du dir, sagen wir Variablen, anlegen.

Bsp.: Techpoint_1 : INT
Teachpoint_2 : INT usw.

Wenn Du dareinschreiben willst, dann sieht das folgendermassen aus:

L #IstPos
T DB1.DBW0 // entspricht Techpoint 1

L #IstPos
T DB1.DBW2 // entspricht Techpoint 2

Probier das mal aus. Wenn dann weitere Fragen auftauchen, immer her damit


Viel Erfolg,

pt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
DB Baustein

Hallo hoilebolle,
ich würde mich zuerst mal informieren, welche Grundlagenbücher zu STEP7 auf dem Markt sind (z.B. Berger, der Klassiker) und das passsende Buch durcharbeiten. Wenn danach noch Fragen zu speziellen Problemen anstehen, wird Dir hier jeder gerne weiterhelfen. Deine Hausaufgaben incl. fertiger Lösung wird Dir aber hier keiner fertigstellen. Ich (oder aber gerne auch andere aus dem Forum) werden Dir morgen ein paar Links auf Literatur zum Thema hier hereinstellen.
Gruss
Question_mark
 
DB Baustein

Hallo pt,
Objekt einfügen (oder ähnlich)
naja, das hilft hoilebolle nicht wirklich weiter. Vielleicht sind Links auf Berger-Literatur hilfreicher. :wink:
Ich hab im Moment keinen Link zur Hand, vielleicht kannst Du da aushelfen ???
Gruss
Question_mark
 
@question_mark: Ich denke wenn, hoilebolle in der Lage war, eine Schrittkette für eine Roboter-Steuerung zu programmieren und außer U,O,UN u = offenbar auch mit Arithmetik-Befehlen gearbeitet hat, dann braucht er nicht die Literatur seit Erschaffung der Welt nachzuarbeiten...

Ich gehe also mal davon aus, daß du nur nicht weißt was es mit DBs auf sich hat (manche Steuerungen kommen ja auch ohne aus):
DBs erweitern den begrenzten Speicherbereich der Merker.
Weil einiges historisch von der S5 herkommt, zunächst grob das, was auch für S5 stimmt (ohne Anspruch auf Vollständigkeit):
Einen DB legst du irgendwie an, z.B. im DB-Editor oder durch kopieren von einem anderen DB oder durch übertragen vom PG. Danach belegt er in der SPS soviel Speicher wie er lang ist und hat entsprechend viele Datenbytes, die du nutzen kannst.

Um ihn zu nutzen, mußtest du ihn erst "aufschlagen":
A DB 4 //(S5) ab jetzt beziehen sich alle Befehle mit Datenbytes/-worten auf DB 4
AUF DB 4 //(S7) ab jetzt beziehen sich alle Befehle mit Datenbytes/-worten auf DB 4, sofern nicht explizit anders angegeben

Nun kannst du auf die Daten zugreifen:
L D(B)W 0 //lade das 1.Datenwort
T MW 4 // und speichere es in MW4

L MW 6 // lade MW6 das atenwort
T D(B)W 4 // un speichere es im 4. Datenwort

Das B in () ist für S7.

Die S7 kann nun auch mit anderen als dem "aufgeschlagenen" DB arbeiten:

L MW 6 // lade MW6 das atenwort
T DB26.DW 4 // un speichere es im 4. Datenwort des DB26

Natürlich kann man sie auch direkt in logischen Anweisungen ansprechen:
L MW 6 // lade MW6 das atenwort
U DB26.DW 4 // verknüpfe mit Bitmuster im 4. Datenwort des DB26

Man hätte natürlich auch einfach den Merker-Speicher vergrößern können. Das Konzept stammt aus einer Zeit, als bei den verwendeten Mikroprozessoren paging und segmentierte Adressen verwendet wurden, um den ursprünglich zu klein dimensionierten Adressraum zu erweitern. Bei der S5 waren DB-Zugriffe denn auch deutlich langsamer als Zugriffe auf Mx.

Sie haben sich aber als Hilfsmittel durchgesetzt, um den Speicher zu strukturieren:
Wenn du drei gleiche Roboter hast und steuerst, könntest du die Schrittkette des einen in DB1, die des nächsten in DB2 speichern.

Bei deinem Teach-In bietet sich vielleicht an, die Teach-Werte für verschiedene Abläufe in verschiedene DBs zu packen.

Wenn du drei gleiche Roboter hast und steuerst, kannst du dafür einen FB schreiben und bei der S7 dem FB-Aufruf "seinen" DB als Instanz-DB zuordnen. Dazu entweder Literatur oder Hilfe zu Step7.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke an Alle die so schnell geanwortet haben. Damit ist mir in erster Linie schon geholfen. :D Hatte lediglich Probs wie ein DB aussehen sollte.
Was Literatur betrifft: Ich habe die orginal Schulungsunterlagen von Siemens S7 aber da ist der DB kaum beschrieben.
An Question_mark=> Mein Hausaufgaben braucht mir hier auch keiner machen. Wollte Lediglich einen Tip, da mein Dozent hierzu 0 Angaben gemacht hat. :evil:
Aber über Links zu betreffenden Faq Seiten wäre ich trotzdem sehr Dankbar.
 
DB

Hallo hoilebolle,
da habe ich das dann mal falsch interpretiert, sorry. Aber wenn Du jetzt mit SPS anfängst, guck mal auf den Link zum Publicis-Verlag :
Die Bücher zur Automatisierung gehen eine ganze Menge tiefer als die Lehrgangsunterlagen und sind auch noch nach Jahren eine gute Hilfe.
Sie sind eine gute Ergänzung zum Lehrgang und auch noch nach Jahren benutzt, um vergessenes (das sind die Sachen, die man nicht so häufig braucht) wieder nachzuschlagen.
Gruss
Question_mark
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Re: DB Baustein

Question_mark schrieb:
Hallo pt,
Objekt einfügen (oder ähnlich)
naja, das hilft hoilebolle nicht wirklich weiter. Vielleicht sind Links auf Berger-Literatur hilfreicher. :wink:
Ich hab im Moment keinen Link zur Hand, vielleicht kannst Du da aushelfen ???
Gruss
Question_mark

Ich hatte kein S7 zur Hand und die Handgriffe sind bei mir automatisch, so das ich den Aufruf nicht mehr lese.

Aber so ist es richtig: Im Bausteinordner rechte Maus, Neues Objekt einfügen, Datenbaustein.

pt
 
Und wenns zu viele Positionen sind machst in dem DB ein Array.

z.B. :
Achse1_Pos | Array[1..50] (dann 2 oder 3 mal Return bis ins Feld darunter,dann den Typ eingeben)
Typ: DINT

Voila hast 50 Variablen im DB vom Typ DINT :

Achse1_Pos[1]
.
.
.
Achse1_Pos[50]

Hat für Später den Vorteil, wenn du mal mit SCL Programmierst
kannst somit mit einem Index arbeiten.
 
DB

nur mal ne Frage... Wie hats denn ohne die Teachfunktion funktioniert? Wo standen die Positionen? Und wird evtl X/Y oder X/Y/Z benötigt? Array sind vorzuziehen wenns mehr wird. Haben nur den einen Nachteil dass man keine Anfangswerte eintragen kann - nur einen für alle Felder.

MfG
André Räppel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn wir schon mit ARRAYs machen dann bitte auch mit dem Typ STRUCT für alle Positionen.
Nun können wir auch schon wunderbar mit indirekter Adressierung arbeiten :wink: .

Das wird deinen Lehrer sicherlich begeistern.

pt
 
=>sps-concept
die werte kommen über einen Inkrementageber und werden verglichen mit fest eingestellten Werten im FC. Diese werden nun im DB untergebracht und vom FC aufgerufen. Mit der teachingfunktion bin ich mir noch nicht ganz Sicher wie ich das realisieren soll.

thx2all
 
Wenn die Position erreicht ist,
Taste drücken

U Taste_Touch_Up
FP Mx.x
SPBN NWE1

L #Wert_InkGeber
T DB1.DBW0


NWE1: NOP 0

Schon steht der Wert im DB, den Du natürlich vorher angelegt hast.

Wenn´s nicht klar ist, fragen, fragen, fragen :wink:

Bis dann,

pt
 
Zurück
Oben