Step 7 DB erweitern

Freezy

Level-2
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich muss einen DB erweitern (Bereich 1 ist Send, Bereich 2 ist Get) dieser DB wird empfangen und gesendet über AG send/AG receive zu einer anderen Steuerung.
Ich muss nun mitten im DB neue Reserven einfügen, das ist soweit kein Problem. Aber wie aktualisiere ich die alten Zuweisungen vom Get Bereich, da dieser ja verschoben wurde
 
Das einfachste und sicherste ist wenn beide Programme dieselbe Daten mittels ein UDT deklariert sind.

Also, anstatt
SEND := P#db99.dbx10.0 byte 240

sondern
SEND := "Dataexchange".A_nach_B_data

und in beide Steuerungen A und B gibt es dieselbe "Dataexchange" DB mit dieselbe Deklarationen mittels UDT "A_nach_B_data" (und "B_nach_A_data").
Dann werden die Daten in beide Steuerungen korrekt angespasst.
Und man kann das Einhalt von die UDTs anpassen so dass die Daten schon mit sinnvolle Namen und Datentypen deklariert sind.

Wenn man die Programme völlig Symbolisch erstellt hat, und Symbolische Addressierung gewählt hat, dann verschiebt sich die Adressen überall automatisch. Du musst eventuell ein Bausteinskonzistenzprüfung durchführen um alle Bausteine zu aktualisieren.

N.B. Die UDT ist nicht zwingend erforderlich. Die Datenbereiche auf beide Seiten müssen nur identisch sind. Und mann darf die bestehende Daten (Namen und Typen) nicht ändern, nur neue einfügen.
Aber mit ein UDT den man in beide Steuerungen teilt werdenTippfehler vermeidet.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das einfachste und sicherste ist wenn beide Programme dieselbe Daten mittels ein UDT deklariert sind.

Also, anstatt
SEND := P#db99.dbx10.0 byte 240

sondern
SEND := "Dataexchange".A_nach_B_data

und in beide Steuerungen A und B gibt es dieselbe "Dataexchange" DB mit dieselbe Deklarationen mittels UDT "A_nach_B_data" (und "B_nach_A_data").
Dann werden die Daten in beide Steuerungen korrekt angespasst.
Und man kann das Einhalt von die UDTs anpassen so dass die Daten schon mit sinnvolle Namen und Datentypen deklariert sind.

Wenn man die Programme völlig Symbolisch erstellt hat, und Symbolische Addressierung gewählt hat, dann verschiebt sich die Adressen überall automatisch. Du musst eventuell ein Bausteinskonzistenzprüfung durchführen um alle Bausteine zu aktualisieren.

N.B. Die UDT ist nicht zwingend erforderlich. Die Datenbereiche auf beide Seiten müssen nur identisch sind. Und mann darf die bestehende Daten (Namen und Typen) nicht ändern, nur neue einfügen.
Aber mit ein UDT den man in beide Steuerungen teilt werdenTippfehler vermeidet.
Wenn namen unterschiedlich sind sollte das doch eig egal sein oder nicht? Da ich es ja über den any pointer in den Bereich schreibe/ vom Bereich lese.

Das muss ich dann mal schauen, das meiste ist symbolisch adressiert, aber es gibt leider auch manchmal Bit abfragen eines Wortes… das verschiebt sich dann leider nicht automatisch

Aber danke für die Antwort:)
 
Aber wie aktualisiere ich die alten Zuweisungen vom Get Bereich, da dieser ja verschoben wurde
Woher wissen wir, wie Dein Programm programmiert ist und was Du wie anpassen musst?
Warum verwendest Du den Begriff "Get"? Du meinst ganz sicher nicht PUT und GET, weil die verwenden nicht AG_SEND/AG_RECV

In Zukunft für SEND und RECV 2 verschiedene DB verwenden, dann können die Bereiche immer verlängert werden. Das kannst Du auch jetzt machen, wo Du das Programm sowieso anfassen musst.

Wenn wir ins Detail gehen sollen, dann müsstest Du uns zunächst verraten, welche SPS Du mit welcher Software programmierst.

Harald
 
Woher wissen wir, wie Dein Programm programmiert ist und was Du wie anpassen musst?
Warum verwendest Du den Begriff "Get"? Du meinst ganz sicher nicht PUT und GET, weil die verwenden nicht AG_SEND/AG_RECV

In Zukunft für SEND und RECV 2 verschiedene DB verwenden, dann können die Bereiche immer verlängert werden. Das kannst Du auch jetzt machen, wo Du das Programm sowieso anfassen musst.

Wenn wir ins Detail gehen sollen, dann müsstest Du uns zunächst verraten, welche SPS Du mit welcher Software programmierst.

Harald
Get passt schon, so ist das im db „deklariert“
Eine 300er Steuerung. Aber groß ändern will ich da eigentlich nichts, da es einfach viel chaotisch ist… das Programm ist schon 20 Jahre alt.
Ag send bereich ist zb ab .dbx 0.0 bis .dbx 50.0
Und ag receive von dbx 50.0 bis dbx 100.0

Ich habe das ganze nicht gemacht 😅 gibt da mit Sicherheit bessere Lösungen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit 'GET' meint man normal die GET Baustein (und dementsprechende PUT Baustein) von das Standardbibliotek.
Das 'GET' ist eber nicht resiviert. Man kann andere Bausteine oder Bereiche innerhalb von die Bausteine 'GET' nennen, und wenn man will kan man die Standardbausteine andere Namen vergeben. Ist aber schlectem Stil.
 
In nem fremden Programm mitten in nem DB was einzufügen ist nie ne gute Idee. Schon gleich garnicht wenn mann keine Ahnung ähhh Erfahrung damit hat 😉
Also wenn das ne wichtige Anlage/Maschine ist, würd ich die Finger davon lassen...
Da musst auf 1000 Dinge aufpassen. Und wenn das Programm grösser ist, viel Spaß beim Suchen, ob da wie wo drauf rumgepointert wird....

Am sichersten wärs, für die zusätzlichen Daten nen neuen DB mit zusätzlichen Kommunikationsbausteinen aufzumachen...
 
Man kann auch die Send- und Get-Bereiche vergrößern, ohne die Adressen in dem DB zu verschieben und braucht dann auch nicht das bestehende Programm anpassen, was womöglich undurchsichtig in "Send" und "Get" zugreift.

Den Bereich 1 "Send" würde ich gar nicht anfassen, sondern einen zweiten DB für das größere neue "Send" anlegen, da würde ich vor dem Senden den Bereich 1 hineinkopieren. Und den Bereich 2 "Get" kann man direkt vergrößern oder ebenfalls einen neuen Bereich in einem neuen DB anlegen und nach RECV.NDR die empfangenen Daten in den ursprünglichen Bereich 2 kopieren.

Harald
 
Zurück
Oben