Standardbausteine für Step5

mitchih

Level-2
Beiträge
806
Reaktionspunkte
32
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich bin auf der Suche nach einigen Standardbausteinen für ein Step 5 projekt.

Folgendes soll gemacht werden:

Anzeige der Störnummer über die Anzahl der Blinktakte einer Lampe:

1x Blinken = Störung 1
1x Blinken = Störung 2
usw...


Zusätzlich sollen die Störungen in einem Schieberegister weggespeichert werden, um zu sehen welche Störungen als letztes vorhanden waren.

Hat jemand soetwas zufällig noch??
Dann brauche ich nicht das RAd neu erfinden.
 
Hallo mitchih,

ich glaube einen Standard-Baustein für Deine Aufgabe gibt es nicht. Aber es ist nicht so schwer,
hier eben einen neuen Baustein zu schreiben. Nur mal so auf die schnelle:
Code:
FB 1                                  BIB=

NETZWERK   1            
     NAME :STOER                              ;

0005      :A   DB 1                           ;Arbeits-DB fuer Stoerauswertung
0006      :UN  D 0.0                          ;Liegt eine neue Stoerung an?
0008      :SPB =KNST                          ;Nein, dann weiter
0009      :L   DW 1                           ;Nummer der neuen Stoerung
000A      :T   DW 2                           ;Zaehler fuers Blinken
000B      :                                   ;
000C      :L   DH 000E EC01                   ;Adresse DB1
000F      :LIR   1                            ;Absolute Adresse DB1 in Akku1
0010      :SLD   4                            ;Auf 20-Bit erweitern
0011      :ADD DH 0000 0013                   ;Quelle ist in DW 19
0014      :TAK                                ;Absolute Adresse zurueckholen
0015      :ADD DH 0000 0014                   ;Ziel ist in DW 20
0018      :TNW   1                            ;DW 19 nach DW 20 kopieren
0019      :TNW   1                            ;DW 18 nach DW 19 kopieren
001A      :TNW   1                            ;DW 17 nach DW 18 kopieren
001B      :TNW   1                            ;DW 16 nach DW 17 kopieren
001C      :TNW   1                            ;DW 15 nach DW 16 kopieren
001D      :TNW   1                            ;DW 14 nach DW 15 kopieren
001E      :TNW   1                            ;DW 13 nach DW 14 kopieren
001F      :TNW   1                            ;DW 12 nach DW 13 kopieren
0020      :TNW   1                            ;DW 11 nach DW 12 kopieren
0021      :TNW   1                            ;DW 10 nach DW 11 kopieren
0022      :                                   ;
0023      :L   DW 1                           ;Aktuelle Stoerung
0024      :T   DW 10                          ;ins DW 10 kopieren
0025      :RU  D 0.0                          ;Neue Stoerung loeschen
0027      :                                   ;
0028 KNST :                                   ;
0029      :U   D 0.1                          ;Blinken EIN
002B      :SPB =WEIT                          ;
002C      :                                   ;
002D      :L   DW 2                           ;Zaehler Blinken
002E      :L   KB 0                           ;
002F      :!=F                                ;runtergezaehlt ?
0030      :SPB =WEIT                          ;
0031      :                                   ;
0032      :L   DW 2                           ;Zaehler Blinken
0033      :D     1                            ;minus 1
0034      :T   DW 2                           ;
0035      :                                   ;
0036      :SU  D 0.1                          ;Blinken EIN
0038      :SPA =NEXT                          ;
0039      :                                   ;
003A WEIT :                                   ;
003B      :RU  D 0.1                          ;Blinken AUS
003D NEXT :BE                                 ;
Wenn Du bei einer neuen Stoerung D 0.0 setzt und im DW 1 die Nummer der Störung versorgst,
sollte es funktionieren.
Im DW 10 steht dann die neueste Störung und bis DW 20 ist dann das Schieberegister.

Grüße
Gebs
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo mitchih,

ich glaube einen Standard-Baustein für Deine Aufgabe gibt es nicht. Aber es ist nicht so schwer,
hier eben einen neuen Baustein zu schreiben. Nur mal so auf die schnelle:
Code:
FB 1                                  BIB=

NETZWERK   1            
     NAME :STOER                              ;

0005      :A   DB 1                           ;Arbeits-DB fuer Stoerauswertung
0006      :UN  D 0.0                          ;Liegt eine neue Stoerung an?
0008      :SPB =KNST                          ;Nein, dann weiter
0009      :L   DW 1                           ;Nummer der neuen Stoerung
000A      :T   DW 2                           ;Zaehler fuers Blinken
000B      :                                   ;
000C      :L   DH 000E EC01                   ;Adresse DB1
000F      :LIR   1                            ;Absolute Adresse DB1 in Akku1
0010      :SLD   4                            ;Auf 20-Bit erweitern
0011      :ADD DH 0000 0013                   ;Quelle ist in DW 19
0014      :TAK                                ;Absolute Adresse zurueckholen
0015      :ADD DH 0000 0014                   ;Ziel ist in DW 20
0018      :TNW   1                            ;DW 19 nach DW 20 kopieren
0019      :TNW   1                            ;DW 18 nach DW 19 kopieren
001A      :TNW   1                            ;DW 17 nach DW 18 kopieren
001B      :TNW   1                            ;DW 16 nach DW 17 kopieren
001C      :TNW   1                            ;DW 15 nach DW 16 kopieren
001D      :TNW   1                            ;DW 14 nach DW 15 kopieren
001E      :TNW   1                            ;DW 13 nach DW 14 kopieren
001F      :TNW   1                            ;DW 12 nach DW 13 kopieren
0020      :TNW   1                            ;DW 11 nach DW 12 kopieren
0021      :TNW   1                            ;DW 10 nach DW 11 kopieren
0022      :                                   ;
0023      :L   DW 1                           ;Aktuelle Stoerung
0024      :T   DW 10                          ;ins DW 10 kopieren
0025      :RU  D 0.0                          ;Neue Stoerung loeschen
0027      :                                   ;
0028 KNST :                                   ;
0029      :U   D 0.1                          ;Blinken EIN
002B      :SPB =WEIT                          ;
002C      :                                   ;
002D      :L   DW 2                           ;Zaehler Blinken
002E      :L   KB 0                           ;
002F      :!=F                                ;runtergezaehlt ?
0030      :SPB =WEIT                          ;
0031      :                                   ;
0032      :L   DW 2                           ;Zaehler Blinken
0033      :D     1                            ;minus 1
0034      :T   DW 2                           ;
0035      :                                   ;
0036      :SU  D 0.1                          ;Blinken EIN
0038      :SPA =NEXT                          ;
0039      :                                   ;
003A WEIT :                                   ;
003B      :RU  D 0.1                          ;Blinken AUS
003D NEXT :BE                                 ;
Wenn Du bei einer neuen Stoerung D 0.0 setzt und im DW 1 die Nummer der Störung versorgst,
sollte es funktionieren.
Im DW 10 steht dann die neueste Störung und bis DW 20 ist dann das Schieberegister.

Grüße
Gebs

Vielen Dank. Habe noch ein paar Fragen bzgl des Codes, denn ich möchte nicht einfach einen Baustein einspielen ohne zu wissen was er genau macht und wie er funktioniert. Leider ist es wie gesagt schon lange her das ich derart tief in die S5 gucken musste. Wird mal wieder Zeit :ROFLMAO: Sonst vergesse ich noch alles

000C :L DH 000E EC01 ;Adresse DB1

Warum nimmt man dort nicht A DB1??? Ich meine zu wissen das so ein DB aufgeschlagen wird, bzw. woher bekommt man die Adressen??

000F :LIR 1 ;Absolute Adresse DB1 in Akku1

muss es nicht LIR 0 heißen??? für Akku 1 und LIR 2 für AKKU 2??

Was bedeutet der Befehl TNW ich kann Ihn im Tabellenheft nicht finden.
was hat es mit dem auf 20 Bit erweitern auf Sich ist das wegen der indirekten Adressierung ähnlich wie bei Step 7 ??
Der Baustein soll in 2 Typen CPU`s eingesetzt werden_:
1. CPU 102 AG100U
2. CPU 928B 135U
kann ich in der CPU 102 auch selber Funktionsbausteine schreiben?? Im Tabllenheft finde ich nämlich keine Auführungszeiten für die Befehle??

Vielen Dank für eure Hilfe
 
Alles Unsinn

Hallo,

mitchih schrieb:
000C :L DH 000E EC01 ;Adresse DB1

Warum nimmt man dort nicht A DB1??? Ich meine zu wissen das so ein DB aufgeschlagen wird, bzw. woher bekommt man die Adressen??

Vergesse den Code von Gebs, der funktioniert nur auf S5-CPUs mit 20 Bit Adressbreiten und ausserdem wird im Codebeispiel eigentlich der Adresszähler zwischen den TNW nicht erhöht. Da fehlt jeglicher Sinn, unzählige TNW 1 aneinander zu reihen, ohne die absoluten Adressen in den Akkus 1 und 2 zu dekrementieren. Einfach Unsinn, der Code. Für TNW ermittelt man aus BS34 erstmal die Basisadresse des DB im AG-Speicher und addiert darauf den Offset auf den gewünschten Datenbereich im DB.

mitchih schrieb:
]Was bedeutet der Befehl TNW ich kann Ihn im Tabellenheft nicht finden.

TNW = Transferiere wortweise über absolute Speicheradressen. Und im Tabellenheft der CPU 102 wirst Du das auch niemals finden, die 102 kennt diesen Befehl nicht ..

Gruß

Question_mark
 
Der Baustein soll in 2 Typen CPU`s eingesetzt werden_:
1. CPU 102 AG100U
2. CPU 928B 135U
kann ich in der CPU 102 auch selber Funktionsbausteine schreiben?? Im Tabllenheft finde ich nämlich keine Auführungszeiten für die Befehle??

Gerätehandbuch S5-100U - Kapitel 7.3.4 Funktionsbausteine (FB), Seite 7-11:

Ab der CPU 102 lassen sich Funktionsbausteine mit einem erweiterten Operationsvorrat vom Anwender programmieren. Aber erst ab der CPU 103 lassen sich Funktionsbausteine parametrieren und können beim Bausteinaufruf Aktualparameter übergeben werden.

ID1091978 Automatisierungsgerät S5-100U Gerätehandbuch

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
der funktioniert nur auf S5-CPUs mit 20 Bit Adressbreiten
stimmt

und ausserdem wird im Codebeispiel eigentlich der Adresszähler zwischen den TNW nicht erhöht. Da fehlt jeglicher Sinn, unzählige TNW 1 aneinander zu reihen, ohne die absoluten Adressen in den Akkus 1 und 2 zu dekrementieren.
durch das TNW werden die AKKUs 1 und 2 automatisch dekrementiert. Nimm Dir mal 'ne 948er und probiere es aus!

BS34 erstmal die Basisadresse des DB im AG-Speicher
Das funktioniert aber auch nicht auf allen CPUs. Bei einigen ist das BS34 der Koppelmerkerbereich.
Bei der S5 muss man leider für (fast) jede CPU einen eigenen Code schreiben. Ich hab' halt
Code für den von mir am meisten eingesetzten CPU-Typ geschrieben, da ich ja nicht wusste, welche CPU
mitchih einsetzt.

Grüße
Gebs
 
Zuletzt bearbeitet:
Zurück
Oben