Code:
#FB 48
#N GET-BCD1
;****************************************************************************
; COPYRIGHT 1994
; Projekt Dr. Kohl - 95 - Dorsten
; Stand: 03.02.1995
; Stand: 15.02.1996, rev.
; Funktionsbaustein: Kodierschalter-Abfrage Pumpe P3
;****************************************************************************
#UB Mengenabfrage
A DB 181 Arbeits-Datenbaustein
L DW 51 Schrittzaehler
L KB 1
<F
SPB = RSET Wert ist ungueltig
TAK
L KB 5
<=F
SPB = WEIT
;----------------------------------------------------------------------------
RSET L KB 1
T DW 51 Schrittzaehler
U (P3-DU-GB Durchlaufmerker
R (P3-DU-GB
WEIT B DW 51
SP0 SPA = SP0
SPA = SP1 Ausgang 10E3 f. Menge setzen
SPA = SP2 Menge 10E3 lesen, 10E2 setzen
SPA = SP3 Menge 10E2 lesen, 10E1 setzen
SPA = SP4 Menge 10E1 lesen, 10E0 setzen
SPA = SP5 Menge 10E0 lesen, danach Ende
;----------------------------------------------------------------------------
SP1 L KF +0
T AW 25 Ausgaenge vorsorglich loeschen
UN <P3-W10E3
S <P3-W10E3 Menge 10E3 setzen
SPA = ZIS6
;----------------------------------------------------------------------------
SP2 UN (P3-DU-GB
S (P3-DU-GB
BEB
L EB 13
L KH 000F
UW
SLW 12
T DW 52 Register Mengen-Sollwert
U <P3-W10E3
R <P3-W10E3
S <P3-W10E2 Menge 10E2 setzen
SPA = ZIS6
;----------------------------------------------------------------------------
SP3 UN (P3-DU-GB
S (P3-DU-GB
BEB
L EB 13
L KH 000F
UW
SLW 8
L DW 52 Register Mengen-Sollwert
OW
T DW 52
U <P3-W10E2
R <P3-W10E2
S <P3-W10E1 Menge 10E1 setzen
SPA = ZIS6
;----------------------------------------------------------------------------
SP4 UN (P3-DU-GB
S (P3-DU-GB
BEB
L EB 13
L KH 000F
UW
SLW 4
L DW 52 Register Mengen-Sollwert
OW
T DW 52
U <P3-W10E1
R <P3-W10E1
S <P3-W10E0 Menge 10E0 setzen
ZIS6 SPA = ZINC
;----------------------------------------------------------------------------
SP5 UN (P3-DU-GB
S (P3-DU-GB
BEB
L EB 13
L KH 000F
UW
L DW 52 Register Mengen-Sollwert
OW
T DW 52
SPA OB 220
DED BCD --> DUAL
T DW 53 Mengen-Sollwert in >>KF<<
U <P3-W10E0
R <P3-W10E0
;
SPA FB 91 Zaehler laden und starten
U (IMMER_EINS
R (P3-FR-GB Freigabe fuer FB 48 loeschen
R (P3-DU-GB
S (P3-ME-GB
S (FR:RESET Anwahl zuruecksetzen
S (P3-FR-SB
L KB 1
T DW 51
L DW 52 Register Mengen-Sollwert
L KH 0000
!=F
R (P3-ME-GB
BEA
;----------------------------------------------------------------------------
ZINC L DW 51 Schrittzaehler
I 1
T DW 51 Schrittzaehler
U (P3-DU-GB
R (P3-DU-GB
;----------------------------------------------------------------------------
BE
;
Der Baustein wurde damals auf einer S5-135U mit einer CPU928B eingesetzt.
Anders als in der Anfrage von Hobby programmierer wurde nicht eine analoge Information abgefragt, sondern der BCD-Code eines jeden Schaltersegmentes im digitalen Format, d.h. die Schaltersegmente müssen über Dioden entkoppelt werden (kann z.B. bei der Fa. Siebert so bezogen werden), damit kann ein 4 poliger "Bus" gebildet werden. An diesen "Bus" können beliebig viele Schaltersegmente gekoppelt werden, für jedes Schaltersegment muss ein Ausgang vorgesehen werden. Beispiel:
Es sollen 3 Stück 4-stellige BCD-Steller abgefragt werden, damit werden auf der SPS 4 digitale Eingänge und 12 digitale Ausgänge erforderlich.
Der Baustein FB48 holt die Information bei Bedarf, wenn die Pumpe gestartet werden soll. Die 4 Stellen des BCD-Stellers erfordern 5 Schritte in der Abfrage. Insgesamt läuft der Baustein 9 Zyklen, der Trick mit der Untersetzung liegt in der Anwendung eines Durchlaufmerkers (hier (P3-DU-GB), der z.B. im Schritt 2 noch nicht gesetzt ist und damit das VKE setzt, was zu einem Abbruch der Bausteinbearbeitung führt. Im Nächsten Zyklus ist diese Bedingung nicht mehr vorhanden und damit wird der Schritt vollständig bearbeitet. Die Information wird hier über EB13 eingelesen, d.h. E 13.0 steht für den Wert 1, E 13.1 für den Wert 2, E 13.2 für den Wert 4 und E 13.3 für den Wert 8, daher die Maskierung mit "000F". In 4 Schritten wird so die BCD-Zahl zusammengesetzt, der Aufruf von OB 220 (Schritt 5) ist spezifisch für die CPU928B, nach DED steht der abgefragte Wert eines 4-stelligen BCD-Stellers im INT-Format zur Verfügung.
Ich habe den Quelltext so wie er hier steht aus dem Projekt kopiert. Ich denke, es sollte keine Schwierigkeit sein, den Baustein nach Step7 zu portieren und nach eigenem Geschmack zu veredeln.
Gruß Barnee