Step 7 Datenbaustein schützen gegen Änderungen oder dauernd mit einem DB überschreiben?

DennisBerger

Level-2
Beiträge
436
Reaktionspunkte
61
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
wir haben eine Anlage mit OP17 und S7-300 Steuerung.
An dieser Anlage sind ca 50 Artikelvarianten mit jeweils 6-10 Parametern als UDTs im DB1 (Länge, Gewicht, Zeiten, Druck).

In der CPU gibt es einen DB1 in dem die am OP17 eingegebenen Werte für die Artikel als UDTs gespeichert werden.
Diese Eingabe ist zwar am OP17 passwortgeschützt aber nach einiger zeit kennt jeder das Passwort und somit können wichtige Werte überschrieben werden.

Nun kam die Frage auf, ob man die Parameter im DB1 nicht gegen Änderungen schützen kann, also die Werte egal was der Bediener am OP17 eingibt, diese nicht überschrieben werden.
Ans OP17 möchte ich nicht ran und nichts dort ändern oder reinladen.

Am einfachsten wäre ja ein Schreibschutz des dbs, aber das gibt es so nicht oder?

meine 2. Idee war, dass ich einmalig beim Programmieren die jetzigen Werte aus DB1 in einen zweiten neuen (Backup) DB2 kopiere bzw eine Kopie der Werte und Struktur von DB1 als DB2 anlege und dann zyklisch immer die Werte aus DB2 in den DB1 kopiere und somit eventuelle Änderungen des Bedieners am Op17 immer wieder zyklisch durch DB2 im DB1 überschrieben werden.
wie mach ich das am besten in step7?

oder habt ihr eine bessere Idee?


danke und schönen Sonntag.
 
Zuletzt bearbeitet:
Im Steuerungsprogramm hard coded beschreiben. Wenn es dann immer noch zu Änderungen kommen sollte, sollte man sich Gedanken über die Verlässlichkeit der Mitarbeiter machen.

Hat natürlich den Nachteil, dass für jede Änderung das PG verwendet werden muss.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
meine 2. Idee war, dass ich einmal beim Programmieren die jetzigen Werte aus DB1 in einen zweiten neuen (Backup) DB2 kopiere bzw eine Kopie der Werte und Struktur von DB1 als DB2 anlege und dann zyklisch immer die Werte aus DB2 in den DB1 kopiere und somit eventuelle Änderungen des Bedieners am Op17 immer wieder zyklisch durch DB2 überschrieben werden.
wie mach ich das am besten in step7?
Wenn du am OP17 nichts ändern willst ist dies vermutlich die bessere Idee.
Vorgehensweise Hauptdatenablage wird neuer DB (DB2) d.H. das steuerungsprogramm holt die Daten immer aus DB2.
Im Ruhezustand (Edit nicht freigegeben) wird Statisch (Zyklisch) der DB2 nach DB1 kopiert.
Im Editiermodus (Umschaltung falls gewünscht) wird umgekehrt vorgegangen DB1 nach DB2.
Nach beenden des Editiermodus erfolgt Rückschaltung in den Ruhemodus.
Vor dem ersten Start müssen die aktuellen Daten via PG einmalig vom DB1 in den DB2 übertragen
(kopiert/eingetragen) werden.

Gruß


A.
 
Im Steuerungsprogramm hard coded beschreiben. Wenn es dann immer noch zu Änderungen kommen sollte, sollte man sich Gedanken über die Verlässlichkeit der Mitarbeiter machen.

Hat natürlich den Nachteil, dass für jede Änderung das PG verwendet werden muss.
es muss normal nichts geändert werden, die parameter sind fest, wenn dann alle 5 jahre eventuell was.
ja das mit Mitarbeiter ist leicht gesagt, bringt aber nichts, das muss sicher gegen Änderungen durch die Anlagenbediener sein.
ich denke das kennt man auch bei anderen firmen.

@SPS-Totalizer
danke, ja ich denke das ist beste,
wie kopiere ich denn am besten in step7 den ganzen db2 immer in db1? die artikel sind als 10 UDTs im db1 abgelegt momentan.
 
Zuletzt bearbeitet:
Also ich würde die Parameter in einem Parameterdatensatz im OP speichern, dann liegen die Einstellungen für jede artikel Variante dort vor. Der Bediener kann dann einen Datensatz wählen und diesen in den DB laden. Die Daten werden dann verwendet.

Bei dem Control für den Parameterdatensatz kann man die Parameterliste ausblenden. Dann kann der Bediener die Datensätze nicht verändern aber auswählen und laden.

Du kannst dann eine weitere Seite machen wo die Parameterliste mit dabei ist für den "Prozessingenieur" der dann mit Passwort die Parameter ändern kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
danke, aber wie gesagt,
es soll nichts am OP geändert werden, kein protool projekt geändert werden, zudem ist es nicht sicher ob der protool stand aktuell ist.
deshalb soll es eine Umsetzung rein in der Cpu geben. Zudem sind an der anlage 2 Op17s verbaut, ich denke deshalb hat man damals auch die ganzen Parameter von anfang im DB1 gespeichert und nicht auf den OP17s wie man es gewöhnlich machte.
zudem müsste dann zu viel in der cpu umprogrammert werden wenn man es übers OP macht.

Passwort ist auch nicht erwünscht, da früher oder später jemand vom Anlagenbedienpersonal das Passwort rausfinden könnte und dann Änderungen vornehmen könnte, die über lange Zeit oder nie erkannt werden.
deshalb sollen die bereits im DB1 gespeicherten Parameter für jeden Artikel auch fest auf der CPU sein.
hat auch den Backup vorteil, falls das Op17 kaputt geht.
Änderungen nur durch SPS-Team über Laptop
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
danke, aber wie gesagt,
es soll nichts am OP geändert werden, kein protool projekt geändert werden, zudem ist es nicht sicher ob der protool stand aktuell ist.
deshalb soll es eine Umsetzung rein in der Cpu geben. Zudem sind an der anlage 2 Op17s verbaut, ich denke deshalb hat man damals auch die ganzen Parameter von anfang im DB1 gespeichert und nicht auf den OP17s wie man es gewöhnlich machte.
zudem müsste dann zu viel in der cpu umprogrammert werden wenn man es übers OP macht.

Passwort ist auch nicht erwünscht, da früher oder später jemand vom Anlagenbedienpersonal das Passwort rausfinden könnte und dann Änderungen vornehmen könnte, die über lange Zeit oder nie erkannt werden.
deshalb sollen die bereits im DB1 gespeicherten Parameter für jeden Artikel auch fest auf der CPU sein.
hat auch den Backup vorteil, falls das Op17 kaputt geht.
Änderungen nur durch SPS-Team über Laptop
Ach so.
Keine Ahnung wie der Bediener auswählt welcher Datensatz benutzt werden soll. Wenn du das bekommst unabhängig vom db1 nimm einfach einen neuen DB, dann hat der Bediener keinen Zugriff mehr, könntest aber die aktuellen Werte noch mal in den db1 kopieren damit der Bediener sieht was genutzt wird.
Wenn das nicht möglich ist must du bevor ein Parameter benutzt wird ihn noch mal aus deinem Speicher DB laden um sich zu stellen das der Wert nicht geändert wurde.
 
Keine Ahnung wie der Bediener auswählt welcher Datensatz benutzt werden soll. Wenn du das bekommst unabhängig vom db1 nimm einfach einen neuen DB, dann hat der Bediener keinen Zugriff mehr, könntest aber die aktuellen Werte noch mal in den db1 kopieren damit der Bediener sieht was genutzt wird.
Wenn das nicht möglich ist must du bevor ein Parameter benutzt wird ihn noch mal aus deinem Speicher DB laden um sich zu stellen das der Wert nicht geändert wurde.
das hab ich doch oben als idee beschrieben?

siehe:
meine 2. Idee war, dass ich einmal beim Programmieren die jetzigen Werte aus DB1 in einen zweiten neuen (Backup) DB2 kopiere bzw eine Kopie der Werte und Struktur von DB1 als DB2 anlege und dann zyklisch immer die Werte aus DB2 in den DB1 kopiere und somit eventuelle Änderungen des Bedieners am Op17 immer wieder zyklisch durch die Werte aus DB2 überschrieben werden.
wie mach ich das am besten in step7?
mir ging es um die Umsetzung wie man die ganzen UDTs am besten aus DB2 in DB1 zyklisch kopiert mit step7 ;)
 
@Heinileini der doppelpunkt bedeutet in awl kopieren? oder wie ist das gemeint?
Jain, nicht ganz. ':=' ist in SCL das Zeichen bzw. der Operator für eine "(Wert-)Zuweisung". Einer 'Variablen' wird damit ein Wert zugewiesen bzw. der Wert wird in die Variable kopiert. Das kann ein BOOL-Wert sein oder ein BYTE oder ... oder eine Struktur oder ein Array oder auch ein KuddelMuddel aus verschiedenen DatenTypen sein, Hauptsache bei Quelle und Ziel derselbe Aufbau. Meines Wissens auch ein kompletter DB. Quelle und Ziel müssen aber dieselbe Struktur haben (quick & dirty formuliert: dieselbe Reihenfolge der DatenTypen).
 
okay, dann kann ich das auch mal ausprobieren, da ja DB2 eine 1:1 Kopie vom Aufbau wie DB1 (original) sein soll.
muss ich bei scl in step7 und s7-300 etwas beachten? oder einfach im netzwerk eintragen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
okay, dann kann ich das auch mal ausprobieren, da ja DB2 eine 1:1 Kopie vom Aufbau wie DB1 (original) sein soll.
muss ich bei scl in step7 und s7-300 etwas beachten? oder einfach im netzwerk eintragen?
Nee, SCL ist ne Extra Lizenz. Dann musst ne SCL Quelle erstellen und übersetzen.
Glaub aber eh nicht, dass das geht... was sollte da für nen AWL Code rauskommen, bzw. woher soll SCL wissen, wie groß der DB ist?
 
wie kopiere ich denn am besten in step7 den ganzen db2 immer in db1? die artikel sind als 10 UDTs im db1 abgelegt momentan.
Am einfachsten mit Bkocktransfer (SFC 20).
Da du keine Dynamischen Parameter benötigst,
kannst du Quelle & Ziel direkt als Pointer angeben.

also
Quelle: p# DB2.DBX0.0 Byte 100
Ziel: p# DB1.DBX0.0 Byte 100

Wobei DBX0.0 (Startadresse) und Byte 100 (Länge) nur Beispielhaft zu sehen sind
und Deinen Gegebenheiten anzupassen sind.

Achtung: Startadresse + Länge dürfen die Obergrenze des DB nicht überschreiten
-> sonst Fehler.

Gruß

A.
 
hallo,
wollte mich kurz zurückmelden, das projekt hat geklappt.
hab den Datenbaustein DB1 per "online" kopiert (damit ich die aktuellen Werte habe) und dann im offline Projekt gespeichert und den originalen somit überschrieben, diesen dann als hardcopy DB2 kopiert (quelle)
hilfreich war mir dabei diese Beschreibung: klick

dann mit sfc20 wie oben beschrieben die bytes aus dem hardcopy DB2 in den DB1 kopiert.



Danke euch für eure Hilfe. (y)


ich hab noch eine Frage zum blkmove sfc20:
ich habe mich etwas vertan, sind doch ein paar Bytes mehr.. nämlich knapp 12000bytes. die von DB2 in DB1 kopiert werden.
Quelle: p# DB2.DBX0.0 Byte 12000
Ziel: p# DB1.DBX0.0 Byte 12000

wie macht man das am besten? zyklisch? wie lange dauert der kopier vorgang?
was ist wenn ich den Move mit einem taktmerker zb 1hz am "en" anstoße und der Takt zu schnell is, also kürzer als der Kopiervorgang, fängt die cpu dann wieder von vorne an und vergisst die letzten bytes oder wird der move befehl immer fertig gemacht , aber dann zu Lasten der Zykluszeit?
bzw hört der kopiervorgang auf, wenn ich das "en" durch den Taktmerker auf 0 setze obwohl noch nicht alle bytes fertig kopiert?
soll ich lieber den move befehl zb nur alle 20sekunden und dann am "en" für die dauer von ca 2-5 sekunden auf "1" setzen, damit er auch sicher fertig ist nach dieser Zeit mit kopieren?

ich hoffe ich konnte meine Frage einigermaßen deutlich darstellen.

wie lange braucht die cpu um die 12000bytes zu kopieren?
 
Zurück
Oben