S5 nach S7 konvertieren, Code vertändnis?

frosch

Level-1
Beiträge
13
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich weiß, das mit dem konvertieren ist hier schon tausend mal beschrieben worden, mir gehts aber weniger um die Konvertierung sondern mehr um ein Verständnisproblem des S5 Codes:

Im S5 Code steht:
Code:
A    DB  10
PN   D    3.15
SU   D    3.15
P    D     3.8
L    KT  300.1
SE   T     57
...
Mein Problem ist das Verstehen der Befehle PN, SU, P
Laut Operationsliste setzt SU unabhängig vom VKE, aber warum wird vorher mit PN ein Bit auf "0" abgefragt? Oder waurm wird hier PN und P benutzt? das könnte man doch auch mit U bzw UN machen?

Im S7 siehts nun so aus:
Code:
      AUF   DB    10
      SET   
      UN    DBX    6.7
      NOT   
      S     DBX    6.7                  // Sendebit setzen
      NOT   
      S     DBX    6.7                  // Sendebit setzen
      SET   
      U     DBX    6.0                  // Busfehler
      L     S5T#30S
      SE    T     57
ist das richtig, bzw wie könnte ich das einfacher machen?

Dann gibt es noch eine weitere Stelle im Prog (DB erstellen), die ich gerne einfacher hätte.

S5:
Code:
L   KF  +30
E   DB   10

in S7 siehts jetzt so aus: (automatisch konvertiert)
Code:
      L     30                          // Laenge des DB10
      T     #conv_akku1
      TAK   
      T     #conv_akku2
      L     STW
      T     #conv_stw
      L     #conv_akku1
      SLW   1
      T     #conv_number_of_dbb
      L     10
      T     #conv_create_db
      L     #conv_stw
      T     STW
      L     #conv_akku2
      L     #conv_akku1
      CALL  "CREAT_DB"
       LOW_LIMIT:=#conv_create_db
       UP_LIMIT :=#conv_create_db
       COUNT    :=#conv_number_of_dbb
       RET_VAL  :=#conv_ret_val
       DB_NUMBER:=#conv_return_db
Wozu wird hier das STW zwischengespeichert? Warum muss hier nach links geschoben werden?

Wäre nett wenn mir jemand was dazu sagen könnte...
Danke!
 
S5-> s7

Hallo,

da der Converter nicht weiss ob das STW benutzt wird sichert er es vor jeder relavanten Operation und schreibt es danach zurück. In den meisten Fällen kannst du das löschen. Das SLW1 ist weil E DB mit Anzahl Worten arbeiten, der SFC hingegen mit Anzahl Bytes. SLW1 ist in diesem Fall einfach *2

André
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo André,

ok, das hab ich nun verstanden, dann kann ich das jetzt so anpassen wie ich es mir auch gedacht hab.

Aber mein erstes Problem mit dem P, PN, und SU das hab ich noch nicht verstanden.

THX
 
Hallo André,
Aber mein erstes Problem mit dem P, PN, und SU das hab ich noch nicht verstanden.
THX
Das war sicher eine 95U,
da konnte man nicht direkt auf ein Datenbit zugreifen sondern es musste immer heißen:

Prüfe Datenbit
Setze Unbedingt Datenbit
Prüfe Nicht Datenbit (Low Abfrage)

Diese Anweisungen mussten auch immer eine Erstabfrage sein.

Noch was anderes,
muss das sein mit dem DB erzeugen? Ich halte davon nicht viel

Und bitte so schreiben:
Code:
U DB10.DBX 6.7
Und das ganze dann Symbolisch!
 
Danke für die schnellen Antworten.

Welche HW verwendet wurde weiß ich nicht, könnte aber ne 95U gewesen sein, da es ein recht kleines Prog ist (ca. 15 Bausteine)

Porblem 1:
kann ich also so lösen:
Code:
      AUF   DB    10
      UN    DBX    6.7
      S     DBX    6.7                  // Sendebit setzen
     
      U     DBX    6.0                  // Busfehler
      L     S5T#30S
      SE    T     57
      ...
ob ich es jetzt so "U DB10.DBX6.7" oder wie oben schreib ist egal, die DBs im S5 sind sowieso nicht Kommentiert. (kein Vorkopf)

Problem 2: (Herausforderung 2, Probleme gibt's ja nicht ;-)

Warum der ursprünliche Programmierer hier den DB automatisch (S5: OB 21 und OB22) bei Neustart und Spannungswiederkehr erzeugt weiß ich nicht, ich könnte ihn auch selbst anlegen und nur im (S7: OB 100 und OB 101) löschen bzw mit FILL überschreiben. oder 15 mal ein DW mit Inhalt "0" drüberschreiben

Korrigiert mich wenn ich da falsch liege.

mfg
Frosch
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich sehe auch keinen Grund einen DB von 30 Worten jedesmal neu zu erzeugen.
Da kannst du auch alle Werte rücksetzen bzw. mit "0" überschreiben
Allerdings weiss ich auch nicht, was mit den Werten aus DB10 gemacht wird
 
Es gab S5-SPS, da durfte ein DB nicht mit auf den Eprom, da er sonst read-only war. Wollte man also Daten in einem DB ablegen können und ein Eprom sollte Verwendung finden, mußte man den DB zur Laufzeit, also z.Bsp. beim Hochlauf der SPS erzeugen. Das kam dann oft in alle S5-Programme, da man so nicht darüber nachdenken mußte, welche SPS das nun wie macht. PN, SU und P waren häufig ganz üble Befehle, da sie unendlich viel Zykluszeit geschluckt haben und auch nicht auf jeder S5 genutzt werden konnten. Wenigsten das ist ja heute bei den DB-Zugriffen nicht mehr so.
 
PN, SU und P waren häufig ganz üble Befehle, da sie unendlich viel Zykluszeit geschluckt haben und auch nicht auf jeder S5 genutzt werden konnten.
Hallo Ralle,

was heißt ganz üble Befehle?
Sonst konntest halt bei einer 95er nicht auf ein Datenbit zugreifen.
Oder musstest immer den Umweg über Schmiermerker machen.
Code:
   U E 0.0
   = M 201.0
   L MW 200
   AUF DB 10
   T DW 0
 
// Alternativ
   AUF DB 10
   UN E 0.0
   SPB NO
   SU D 0.0
NO: NOP 0
Aber im Punkt Zykluszeit hast absolut recht.
Das ging wirklich an die Ressourcen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
OK, das hab ich jetzt verstanden, und weiß nun auch den Hintergrund - Danke!

In einem Kommentar hat ich jetzt was über die HW gelesen:
115F

Wenn ich das noch richtig weiß steht "F" für Fehlersicher - oder?

Ohh je, welchen Ärger hab ich mir jetzt eingehandelt?!?

Frosch
 
Zuletzt bearbeitet:
Wenn ich das noch richtig weiß steht "F" für Fehlersicher - oder?

Da hast du allerding recht.

Wenn du die Fehlersicherheit mit S7 realisieren willst brauchst als Software Distributed Safty und eine fehlersichere SPS z.B. 315F-2DP.
 
..
Wenn ich das noch richtig weiß steht "F" für Fehlersicher - oder?

Ohh je, welchen Ärger hab ich mir jetzt eingehandelt?!?

Frosch
F := Fehlersicher
Du solltest erstmal feststellen, ob damit auch Sicherheitsfunktionen geschaltet wurden. Was ist das denn für eine Maschine, die damit angesteuert wurde?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

das ist irgendwas in einem Kraftwerk, man kann Kommentare wie z.B.
- Brenner zündbereit
- Zündflamme
- Trommelniveau
- Feuerraumdruck
lesen

Im ganzen Programm findet sich immer wieder mal ein Zähler:
Code:
//  LPLZ-SEQUEZ
      L     MW     0
      L     1
      +I    
      T     MW     0
hat das was bei S5 mit der Fehlersicherheit zu tun? Eine S7 315F hab ich schon mal programmiert, aber nur NotAus-Kreise, die je nach Betriebsart unterschiedlich waren.

Was hat man bei einer S5 F machen müssen, bzw. woran erkenn' ich denn den fehlersicheren Teil des Programms?

mfG
Frosch
 
Zuletzt bearbeitet:
das ist irgendwas in einem Kraftwerk

Sieht nach einer Brennersteuerung aus. Da wirst du um eine F-CPU nicht herum kommen.
 
Zurück
Oben