Programme speichern

sps-questioner

Level-1
Beiträge
88
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo experten,
ich bewege mich hier grade auf absolutem neuland. bisher habe ich immer programme geschrieben und man konnte dann die werte (ew) ändern. also z.B. eine rezeptur. zeiten, zähler,usw. jetzt wollte ich aber mal rezepturen abspeichern, die dann später wieder aufgerufen werden können. ich habe mal bei einem kollegen im programm geschaut, der verwendet den sfc20. ich konnte aber nicht so recht etwas damit anfangen.
vielleicht kann mir ja jemand von euch helfen, zusammenfassung:
ich möchte werte über ew oder auch im op anwählen und dann als db speichern. wie geht das?

mfg
 
hi

und zwar der sfc 20 ist ein system baustein der es ermöglicht große datenmengen voneinem punkt zu einem anderen zu kopieren zwecks datensicherung bzw daten wieder aus der datensicherung raus zu holen.

erstmal wo liegen denn die werde für deine zähler usw.?

sind die in mw verpackt oder sind die schon in einem db?

Sind macht es wenn man mehrere werte für ein rezept braucht diese in einem datenbaustein zu lagern. Wenn es dann schon mehrere rezepte gibt vielleicht schon auf ein udt setzten. Somit kann man in einem datenbaustein die rezepte speichern und das rezept was gerade benutzt wird liegt in einem anderen datenbaustein. und wenn jetzt werte in dem datenbaustein geändert werden können die dann per sfc 20 in den rezepte baustein zwecks sicherung kopiert werden.

hier mal die beschaltung vom sfc 20

CALL "BLKMOV" SFC20 – Copy Variables
SRCBLK: = P#DB1.DBX 0.0 BYTE 200
RET_VAL:= MW0
DSTBLK: = P#DB2.DBX 0.0 BYTE 200

srcblk = quell daten
retval = Fehlerwerte falls beim kopieren was schief läuft
dstblk = Ziel der Daten

in dem beispiel werden daten im db1 ab dbx 0.0 in db2 kopiert
und zwar 200 bytes also theoretisch bis dbx 199.7 glaub ich :)

ich hoffe dir hilft diese antwort

mfg
 
hi,
also ich habe jetzt nen db2 erstellt und habe da werte eingetragen....
ich habe es mit sfc 20 probiert von db2 in db3 zu kopieren...leider funktioniert es nicht, ich mach irgendwas falsch....kann mir jemand helfen????
 
Hast du auch einen DB3 angelegt, denn da sollen ja die Daten rein. Es wird nicht der DB selbst kopiert, sondern nur Daten von einem DB in den anderen. Der SFC 20 hat ein RET_VAL. Dort steht im Fehlerfall eine Nummer, die Bedeutung in der Hilfe, die angezeigt wird, wenn man mit der Maus auf den SFC20 klickt und dann "F1" drückt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hi,
also ich habe jetzt nen db2 erstellt und habe da werte eingetragen....
ich habe es mit sfc 20 probiert von db2 in db3 zu kopieren...leider funktioniert es nicht, ich mach irgendwas falsch....kann mir jemand helfen????
Ralle hat Dir ja schon gute Tipps gegeben.
Hast Du denn für die Quelle und das Ziel die richtige Länge angegeben?
Die Aussage "leider funktioniert es nicht" trägt jetzt nicht gerade sehr zur Fehlerdiagnose bei.
Tipp doch mal schnell den Programmcode hier rein.
 
also ich sag am besten nochmal genau was ich vorhabe...
ich möchte ein programm, bzw einen ablauf mit verschiedenen werten betreiben, also z.b. band fährt im programm 1 30 sec und im programm 2 20 sec. die zeiten und werte kann der benutzer ja über das op anwählen sobald er das getan hat, soll er die programme speichern können. er wählt zum bleistift in programm 1 30 sec an und kann das dann als programm 1 speichern. und wenn er nun programm 1 aufruft sind da halt wieder die 30 sec hinterlegt. ich habe mit dem sfc 20 ein bisschen rumprobiert, aber um ehrlich zu sein, wiess ich gar nicht genau was ich da eigentlich mache, das grundprinzip des sfc 20 ist mir schon klar, nur mit der anwendung haperts!!!
meine frage : wie speicher ich die angweählten daten in einem db und noch viel wichtiger wie rufe ich sie dann wieder auf????
am coolsten wäre es natürlich, wenn mir jemand eine kurze prgrammier hilfe bieten könnte, aber das ist wahrscheinlich zu viel verlangt.
aber ich brauche trotzdem eure hilfe....
vielen dank im vorraus
 
Zuviel Werbung?
-> Hier kostenlos registrieren
viele Wege es gibt

na, ich glaube das Problem ist, erst einmal den generellen Lösungsansatz zu beschreiben.
Ich versuche es zum Verständnis mal einfach zu halten (geht viel eleganter, aber wir wollen es ja "nur" verstehen ;)


1. Es werden 5 (je nach dem, wie viele unterschiedliche Programme benötigt werden) Programm-Dbs mit gleichem Aufbau erstellt, welche die Daten, Zeiten etc. enthalten.
2. Es wird ein Arbeits-DB (DB 10) mit gleichem Aufbau wie die Programm-DBs erstellt. Aus diesem, und nur aus diesem wird Deine eigentliche Funktion mit Werten versorgt.
3. Am Panel wird je Programm-DB ein Bild mit den Programmdaten erstellt, so dass die Programme veränderbar sind
4. Ein Ein/Ausgabefeld am Panel bietet die Möglichkeit, das der Bediener ein Programm zur Nutzung auswählt, hier wird beispielsweise eine 3 für Programm 3 eingegeben
5. Ein Button "Programm auswählen" setzt dir ein Bit, welches den Kopiervorgang (SFC20) auslöst: Kopiere Inhalt DB 3 in den DB 10
6. Jetzt stehen schonmal die richten Werte im Arbeits-DB
7. Beim Starten der eigentlichen Funktion werden die Daten des Programms 3 benutzt


Wie gesagt, nur mal um zu verdeutlichen, wie es gehen könnte...
 
okay aber was ich dann nicht verstehe, ich habe ein programm gesehen, in dem warein arbeits db (in dem war was hinterlegt) und ca 10 programm dbs, die waren aber leer. alles war mit dem sfc20 programmiert. hat aber alles funktioniert. also ich meine dass die programm dbs leer waren, da stand nichts drin....
 
Entweder war die Ansicht beim Anschauen der DBs nicht auf Datenansicht gestellt, Du hast also nur die Deklarationsansicht begutachtet, und da kann es schon mal sein, das da nichts vordefiniert ist, oder die Daten wurden absichtlich noch nicht eingetragen, weil dies über das Panel "vor Ort" erfolgte.

Es macht aber Sinn, wenigstens die vörläufigen Werte schon vorzukonfigurieren, da sonst beim versehentlichen überbügeln der DBs alle Programme mit 0 überspielt sind...

Aber das Verfahren an sich ist klarer geworden?

Deinen Fehlercode mußt Du in hex anschauen, dann wird es zu W#16#8124, was bedeutet: 8x24 Bereichsfehler beim Lesen des Parameters 1 an Deiner SFC 20.
Meine Kristallkugel sagt: Vermutlich sind nicht so viele bytes im Quell-DB vorhanden, wie Du am Parameter 1 angegeben hast.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
das verfahren an sich ist auf jeden fall klarer geworden aber ich hab jetzt das problem, dass ich das grade nur mti winsps visu nachsimuliere und da hab ich nur ew´s!!!! könntest du mir vielleicht ein beispiel geben, sowie
Code:
l ew10
t in ????
usw.
usw.
das wäre wirklich super, aber an sich habe ich es verstanden nur mit der ausführung bin ich noch etwas unsicher, deswegen wäre es echt klasse wenn ich ein bsp. hätte!!!!
vielen dank

gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
es geht auch eleganter, aber komplizierter

das heisst ich müsste normalerweise je ein bild pro db erstellen...
also zum verständsnis 10 gleiche bilder mit je geändertem db????
Ja, für jeden Programm-DB ein eigenes Bild erstellen. So wie in den Punkten 3. bis 5.
von pjoddi im Beitrag #9 beschrieben. Dann kannst Du in jedem E/A-Feld mit der direkten
Variablen-Adresse des jeweiligen Programms arbeiten.
Dies wird für Dich am einfachsten realisierbar und verstehbar sein.

Selbstverständlich kann man das auch viel eleganter mit nur einem Bild lösen, doch dann
mußt Du Deine Aufgabe noch eine Ebene höher abstrahieren. Und so, wie Du Probleme beim
Anwenden und Verstehen des SFC20 hast, traue ich Dir das im Moment noch nicht zu.

Wenn Du für alle Programme nur ein Bild erstellen willst, dann müsstest Du Dich mal über
Variablen-multiplexen, DB-multiplexen und wenn es ganz perfekt sein soll über
Rezepturen informieren.

Gruß
Harald
 
Zurück
Oben