// OB1:
U E 0.0
= L 20.0
BLD 103
U M 255.1
= L 20.1
BLD 103
CALL FB 1 , DB1
start_reset :=L20.0
takt :=L20.1
datenbaustein:=DB100
daten :=850
db_max :=6400
led_ende :=A0.0
// FB1:
//Es soll der Taktmerker z. B. ein M255.1 verwendet werden, um zur eingestellten
//Zeit die abgeholten Daten (INT-Zahl) um 1 zu erhöhen und in einen
//lobal-Datenbaustein einzutragen, also x+1 bis x+max. Die originalen Daten
//(INT-Zahl) sollen nicht verändert werden.
// #datenbaustein: einen schon erstellen Datenbaustein angeben
// #db_max: max. Anzahl der Datensätze in INT (Bitweise)
// #led_ende: LED leuchtet, sobald zum ersten Mal DB-Ende erreicht wird
// #daten: irgendeine INT-Zahl als Anfangswert, hier einfach 850
IN:
start_reset, BOOL
takt, BOOL
datenbaustein, BLOCK_DB
daten, INT
db_max, INT
OUT:
led_ende, BOOL
STAT:
mw_dateninhalt, INT
m_index_anfang, BOOL
m_daten_geholt, BOOL
TEMP:
m_flanke_takt, BOOL
md_db_index, DINT
// Programm starten:
UN #start_reset
SPB NULL
L #md_db_index
L 0
==D
S #m_index_anfang
U #start_reset
U #takt
FP #m_flanke_takt
U #m_index_anfang
SPBN ENDE
UN #m_daten_geholt
SPB HOLE
L #mw_dateninhalt
L 1
+I
T #mw_dateninhalt
AUF #datenbaustein
L #mw_dateninhalt
T DBW [#md_db_index]
L #md_db_index
L 16
+D
T #md_db_index
L #md_db_index
L #db_max
==D
R #m_index_anfang
S #led_ende
SPB NULL
BE
HOLE: L #daten
T #mw_dateninhalt
S #m_daten_geholt
R #led_ende
BE
NULL: L 0
T #md_db_index
L #daten
T #mw_dateninhalt
ENDE: BE