S7-1200 Studienarbeit

murg

Level-1
Beiträge
15
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag die Herren,

ich bin gerade an meiner Studienarbeit dran. Und zwar die Umstellung einer Maschine von s7-200 auf s7-1200.

Nun steh ich vor nem kleinen Problem. Von der Maschine die ich umstellen soll gibt es 3 unterschiedliche Typen, die selbe SPS Programmierung bekommen.

Nur sind bei allen 3 nur ein paar parameter unterschiedlich. Wenn ich nun in meinem Datenbaustein angebe welche Maschine angeschlossen ist soll er sich sofort die richtigen Daten holen.

Die Daten der einzelnen Maschinen habe ich in 3 Verschiedenen Datenbausteinen enthalten und ein Baustein aus dem sich dann das spätere Programm die Werte holt.

Also muss ich die Werte aus dem entsprechenden Datenbaustein holen und in den "Arbeitsbaustein" einfügen..

NUR WIE?

Ich habe es wie bei der S7-300er mit BLKMOVE also MOVE_BLK bei der 1200er versucht aber bekomme ich immer die Meldung, dass der db keine ARRAY ist...

Hättet ihr vllt irgendeine Idee wie ich das sonst realisieren könnte?

Vielen Dank schon mal im Voraus für die Antworten

mfg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nur Move funktioniert auch nicht, da der Baustein nur UDT und SDT Datenbausteine zulässt aber da ich einen ganz normalen globalen Datenbaustein habe funktioniert dies auch nicht.
 
Was gibts du dem Baustein MOVE_BLK als Eingangsparameter? DBxxx?
Hast du mal versucht das erste Element deines DBs zu parametrieren? Also z.B. DBxxx.DBB0.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also von Hand wäre vllt etwas viel bei 430 Parametern ^^ und das 3 mal

Ja ich habs schon versucht mit %DB111.DBB0.

Vor einigen Wochen wurde das programm auch schon für s7-300 umgeschrieben und da wurde das so gelöst:

P#DB10.DBX0.0 BYTE 500

aber bei der 1200er will es einfach nicht klappen
 
Ja ist er ...

hab gerade getestet wenn ich einen neuen machen, der nicht symbolisch adressiert ist funktioniert es mit move_blk auch nicht
 
ok ... geht wirklich nicht so recht :D

hier aber mal eine primitive lösung ...

weiß ja nicht wieviel bytes du in dem db hast...

ok aber die db´s müssen nicht symbolisch addressiert sein dafür...
achtung jetzt wirds primitive

einfach move baustein
db1.dbd0 -> db2.dbd0
db1.dbd4 -> db2.dbd4
mit der direkten addresse schieber er so schon mal 4 byte´s rum ....

vielleicht bekommt man auch irgendwie ein indirekten arry hin damit gleich der gesamte inhalt geschoben wird ich probier mal weiter ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe 500 Byte :shock:
und dann muss ich das ganze 3 mal schreiben ^^

davor sag ich lieber, dass ich 3 verschiedene Programme mache für die einzelnen Maschinen

es muss doch ne Lösung geben wie ich den Inhalt eines db in nen 2. db kopieren kann...
 
mmm ich habe gerade was entdeckt^^ müsstest du mal ausprobieren ob er es so macht zumindest erstellt er so von sich aus einen pointer xD

und zwar

erstelle in deinem DB einen Struct in diesen struct alle deine daten ... bool word real etc...

wenn du jetzt move grad nur den struct anwählst schreibt der die absolute anfangsaddresse rein P#DB1.DBX0.0 evnt. kopiert er so dann alles ;) probiers mal aus^^
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also hab das ganze nun durchgespielt er erzeugt tatsächlich einen Pointer aber, er zeigt mir an das der Typ Struct nicht zum Typ Array passt.

Des will einfach nicht klappen... aber irgendwie muss das doch machbar sein.
 
also du kannst die tabellen auch direkt anwählen dann erzeugt er auch einen pointer!

ich meine das müsste so gehen

gibt mir mal einen kurzen übersicht wie dein db überhaupt aussieht ;)
 
Problem gelöst! ;)

Der Herr war so schlau und hatte in seinem Quelldatenbaustein eine Zeile mehr enthalten als im Zieldatenbaustein...

Oh man ... das Problem ist jetzt nur, da ich alles in ein Struct gepackt habe, dass ich im Kompletten Programm alle Variablen ändern darf ^^

Danke dir erzteufele :)


Erweiterung:

Mein DB sieht nun so aus:

>Static
>Daten (als struct)
Eintrag 1
Eintrag 2
.
.
.
Eintrag XXX

und verschieben tu ich das ganze nur mit move mit dem Befehl: %DB130.Daten

und nun klappt es ;)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!
Hab da ein ähnliches Problem:
möchte Messdaten in einer S7-1200 über einen betimmten Messzyklus in einem takt von 1 sekunde in einen DB schreiben.
Ein Array hab ich in einem DB angelegt.
Hab das mit den unterschiedlichsten Schiebe-Befehlen versucht. entweder bekomme ich nur einen Wert in mein Array geschrieben oder, wenn ich z.b den counter beim FILL-BLK erhöhe, den Wert mehrmals, aber halt immernur den selben Wert.
Es fehlt quasi der Befehl: Springe in nächste Zeile
Hab hier im Forum was von Pointern gelesen, aber kann damit nichts anfangen. Auch in der Hilfe steht net viel..

wie kann ich das problem denn lösen?

grüße
Steffen
 
genau diesen beitrag hab ich gefunden und kann nich wirklich was damit anfangen..ich versuch das einfach nochmal irgendwie hinzubekommen..

nochmals danke für deine hilfe
 
Zurück
Oben