Fragen Programmierung

sps-welt

Level-1
Beiträge
75
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Vielleicht könnt Ihr mir helfen!?

Steuerung derzeit Simatic S7-300 CPU312 mit DI/DAs und OP77A

Problem:
An der Maschine sind 2 Magazine wo Pappeplatten vereinzelt werden die im Anschluss mit Leim versehen werden.

Jetzt möchte der Kunde in verschiedener Reihenfolge Magazinieren.
d.h. max. 15 Pappeplatten pro Produkt und in beliebiger Reihenfolge entweder aus Mag. 1 oder 2 soll variabel eingegeben werden.

z.b 3 Platten aus Mag.1 dann 1 Platte aus Mag. 2 und wieder 5 aus Mag.1

Das ganze dann bis zu 15 Platten.

Ich habe mir gestern schon den Kopf darüber zerbrochen und bekomme derzeit keinen Kösungsansatz hin.

Was würdet Ihr da machen?

Gruss Stefan
 
Array mit 15 felder vom Typ byte.
Zähler der mit der platte erhöht.

Ist in erstem Array der Wert 2 (vom OP eingegeben) dann wird magazin 2 genommen. Anschliessend erhöht der Zähler.

Wenn in array der Wert 0 ist bzw der Zähler 15 erreicht hat, dann ist dass Produkt fertig.

Mann kann natürlich auch einen DB nehemen. Kommt drauf an wie man das ausweiten will.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Gerald

Mit Arrays habe ich noch gar nicht gearbeitet.

Ich müsste doch auch einen Zähler haben der bis zur max. Anzahl der Platten auf einen einen Eintrag im DB zugreift wo Abgefragt wird Mag. 1 oder 2? Oder?

Wie wäre das zu lösen?
 
Naja ... ganz so einfach, wie Gerri das darstellt wäre das dann auch wieder nicht.
Im Grunde brauchst du als erstes ein Verpackungs-Rezept. So etwas auf dem OP77 als sinnvolle Eingabe zu machen sehe ich schon als problematisch an. Du müßtest jetzt ja eine Eingabe machen, wo z.B. die Quelle und die Anzahl drinsteht - also z.b. "1,4" (= 4 Platten aus Magazin 1) oder "2,2" (= 2 Platten aus Magazin 2) und irgendwann muß dann noch ein Eintrag "Rezept Ende" (also vielleicht "0,0") kommen.
Diese Eingaben könnten jetzt natürlich in einem ARRAY_of_STRING (z.B.) in einem DB landen und du müßtest die dann wieder zerlegen.
Was machst du aber, wenn der Kunde diese Rezepte sich auch noch "merken" möchte ? Oder ist das vielleicht sogar auch schon ein Thema ? Da müßtest du dann von der Visualisierung her schon zu einem MP oder ggf. einer PC-Runtime umschwenken. Hast du das bedacht ?

Wie auch immer.
Wenn du das oben vorgeschlagene in AWL realisieren möchtest mußt du relativ viel mit Pointern rummachen. Schicker wäre es, wenn du ggf. so etwas in SCL erstellen möchtest, da du hier wirklich mit Array-Elementen arbeiten kannst. Wäre das eine Option für dich ?

Gruß
Larry
 
Hallo

Das mit den Werten speichern hat der Kunde schon angesprochen.
Dafür würde ich dann das OP77A gegen ein OP177B tauschen um Rezepturen zu verwenden.

Ich habe mir jetzt auch mal was ausgedacht.

Wenn ich einen DB Anlage mit 15 Einträgen als Byte könnte ich doch folgendermassen Codieren:

1 = Magazin 1
2 = Magazin 2
0 = Produkt fertig

Jetzt muss ich aber über einen Zähler der nach der Magazinierung immer 1 hochzählt und auf den nächsten DB Eintrag zugreift haben.

Wäre doch auch Praktikabel? Oder?

Wie kann man das machen?

Stefan
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das wäre dann ein FIFO-Puffer. Da gibt es schon fertige Bausteine von Siemens (weiß aber gerade Name und Nummer nicht). Allerdings können die (wenn ich mich nicht irre) nur Wortzugriffe, aber im Prinzip lässt sich das, was Du vorhast ja genauso gut mit Wortzugriffen machen.
 
oder du löscht wenn produkt fertig ist oder ein nueues gestartet wird.

Im einfachsten Fall:

// -- AR1 sichern

TAR1
T Ar1_temp // Dword

// -- Daten Löschen

U fertig
spbn nfer

L L#0
T Zähler

nfer: NOP 0

// -- Zähler erhöhen

U nächste_Platte
FP MX.Y
SPBN noin // no increase

L Zähler
L 1
+I
T Zähler

noin: NOP 0

// -- Magazin ermitteln !!!!!!! DBB0 ist erste PLATTE !!!!!!!!!

AUF DB_Nr

L Zähler // Bei Byte und beginn bei DBB0 WAS HIER IN VOM AKKU
sld 3 // GELADEN IST IST DIE BYTE ADRESSE DES DB
LAR 1

L DBB[AR1,P#0.0]
T #aktuelle_Platte // Byte aus DB

// -- AR1 rückschreiben

L Ar1_temp // Dword
LAR1
 
OP 77 ist doch auch ausreichend.

INPUT IM OP sind 3 Felder:
FELD 1 - Program /Rezept
FELD 2 - Plattennummer // 1..15
FELD 3 - Plattentyp

Dann baut man einen DB mit z.b. 3(=3 programme) arrays zu je 15 byte

zu beachten beim laden ist nur das man den versatz (also den byte begin) des jeweiligen programs zum zähler addiert
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt möchte der Kunde in verschiedener Reihenfolge Magazinieren.
d.h. max. 15 Pappeplatten pro Produkt und in beliebiger Reihenfolge entweder aus Mag. 1 oder 2 soll variabel eingegeben werden.

z.b 3 Platten aus Mag.1 dann 1 Platte aus Mag. 2 und wieder 5 aus Mag.1

@Gerri:
hattest du das gelesen ? Wenn ja, wie vereinbart sich das mit deinem Vorschlag ?
Du müßtest dann ja schon min. 15 Eingabe-Zeilen machen, in denen du das Quell-Magazin auswählst.
Wo speicherst du die Rezepte ? Nur im DB halte ich für etwas flach. Ich würde sie auf jeden Fall im bediengerät vorhalten und dann bei Bedarf an die SPS senden ...

Gruß
Larry
 
naja die plattennummer steht doch für die Plattenschicht die bearbeitet werden soll. Die wahrscheinlichkeit das Display zu wechseln bzw dass es defekti st od der Speicher gelöscht wird ist etwas höher (nach meiner erfahrung) als der Speicher der CPU. Ausserdem ist das Projekt dann immer an das TP gebunden
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
IM OP77 würde ich mit jedem KEY-DOWN button in das nächste eingabefeld Navigieren.
Im TP kann man die vorgefertigte Rezepturfkt. verewnden oder sich selbst was basteln.
Ich habe oft mit bis zu 1000 Programmen zu tun in denen die Arrays aus mehreren Achspositionen zusammengestellt sind, vielleicht kommt daher meine Vorliebe für direkte DB bearbeitung.
 
Zurück
Oben