*
Kurvenschreiber
Aurufumgebung: Weckalarm OB mit 10ms
Interface: EXCEL, Visu, other direkt auf IDB
Dieser Baustein erstellt nach einem Startimpuls einen Datenbaustein mit aus
Aufzeichnungsdauer und Stützpunktanzahl berechneter Länge. Der Datenbaustein
wird mit den Daten des angegebenen MD gefüllt.
Es können max. 10 DB angelegt werden. Bevor eine neue Messung gestartet werden
kann, müssen diese 10 DB gelöscht werden.
DATE: 19.05.2008
AUTHOR: 4lagig
VERSION: V0.0
// ---------> Interrupt-Daten sichern <--------- //
L DBNO // letzten offenen Globaldatenbaustein ...
T #wDbnoSave // ... sichern
TAR1 #dAr1Save // AR1 sichern
TAR2 #dAr2Save // AR2 sichern
// --------> Startbedingungen ermitteln <------- //
U #xOutOnAir // Aufzeichnung läuft bereits
SPB log // dann aufzeichnen
U #xInStart // Startimpuls
FP #xHelpFlag1
UN #xDbOverflow // bereits 10 Aufzeichnungen gemacht
SPBN late // neuer DB oder Möglichkeit zu löschen
// -------> Datenbausteinnummer prüfen <-------- //
L #wBuffer9 // der letzte Pufferplatz
L 0 // ungleich 0
<>I // heißt 10 DBs angelegt
O // oder
L #iDbCounter // der DB-Zähler
L 10 // ist auf 10
==I
SPBN go // wenn noch Platz ist, ist alles i.O.
S #xDbOverflow // 10-DBs angelegt
SPA late // maximale Anzahl erreicht, erst löschen
// ------> Datenbausteinlänge ermitteln <------ //
go: L #iInTimeWriting // Länge der Aufzeichnung
L #iInTimeStamp // Trigger 10, 20, 30, ... 100ms ...
/I // = Anzahl der Aufzuzeichnenden Werte
L 4 // REAL in Bytes ...
*I // ...Anpassung
T #wDbLength // Datenbausteinlänge
// ----------> Datenbaustein erzeugen <--------- //
CALL "CREAT_DB"
LOW_LIMIT:=W#16#1 // Bereich der DB-Nummer
UP_LIMIT :=W#16#FF // angeben
COUNT :=#wDbLength // Länge übergeben
RET_VAL :=#iCreateReturn // Fehlercode
DB_NUMBER:=#wDbNumber // DB Nummer zur weiterbearbeitung
// --------> Datenbausteinnr. ablegen <--------- //
L #wBuffer8 // shift-Register begin...
T #wBuffer9 //
L #wBuffer7 //
T #wBuffer8 //
L #wBuffer6 //
T #wBuffer7 //
L #wBuffer5 //
T #wBuffer6 //
L #wBuffer4 //
T #wBuffer5 //
L #wBuffer3 //
T #wBuffer4 //
L #wBuffer2 //
T #wBuffer3 //
L #wBuffer1 //
T #wBuffer2 //
L #wBuffer0 //
T #wBuffer1 //
L #wDbNumber //
T #wBuffer0 // ... end
L #iDbCounter // DB-Zähler
+ 1 //
T #iDbCounter // inkrementieren
// -------------> Initialisierung <------------- //
L 0 // 0
T #iDataCounter // für den Wertezähler
L 0 // 0
T #iCycleCounter // für Aufzeichnungszähler
L #iInTimeStamp // Trigger 10, 20, 30, ... 100ms ...
L 10 // 10
/I // dividiert
T #iCycleTimes // macht die Pausen
L #wDbLength // verfügbarer Speicherplatz
+ -4 // -4
T #wDbLength // macht Adressierung
SET // 1
S #xOutOnAir // für Aufzeichnung läuft
// --------------> Daten erfassen <------------- //
log: U #xOutOnAir // Aufzeichnung läuft
SPBN late //
L #iCycleCounter // Aufzeichnungszähler
L 1
+I // inkrementieren
T #iCycleCounter
L #iCycleCounter
L #iCycleTimes // mit Soll
==I // vergleichen
SPBN late // wenn nich, dann nich
L 0 // wenn doch, dann 0
T #iCycleCounter // in Aufzeichnungszähler
L #wDbNumber // DB-Adresse
T #wDbNumberTemp // für Weiterverarbeitung
L #iInMdNumber // MD-Adresse
SLD 3
T #dMdNumber // für Weiterverarbeitung
L #iDataCounter // Adressierungszähler
SLD 3 // Bits maskieren
LAR1 // in AR1 laden
AUF DB [#wDbNumberTemp] // DB öffnen
L MD [#dMdNumber] // Wert
T DBD [AR1,P#0.0] // in DB schreiben
L #iDataCounter // Adressierung
+ 4 // um vier
T #iDataCounter // erhöhen
L #wDbLength
L #iDataCounter // mit Adressierungszähler
<=I // vergleichen
SPBN late
R #xOutOnAir // Aufzeichnung beendet
// ---------> Datenbausteine löschen <---------- //
late: U #xInDeleteDb // löschen angefordert
FP #xHelpFlag2
UN #xOutOnAir // und keine Aufzeichnung aktiv
SPBN end
L 10 // max. angelegte DBs
next: T #iLoop // als Schleifenzähler benutzen
L #wBuffer0 // DB-Adresse auf 0 prüfen
L 0
==I // wenn 0 (=ungültige DB-Adresse)
SPB shif // löschen überspringen
CALL "DEL_DB" // Datenbaustein löschen
DB_NUMBER:=#wBuffer0
RET_VAL :=#iDelReturn
shif: L #wBuffer1 // shift-Register begin...
T #wBuffer0 //
L #wBuffer2 //
T #wBuffer1 //
L #wBuffer3 //
T #wBuffer2 //
L #wBuffer4 //
T #wBuffer3 //
L #wBuffer5 //
T #wBuffer4 //
L #wBuffer6 //
T #wBuffer5 //
L #wBuffer6 //
T #wBuffer7 //
L #wBuffer7 //
T #wBuffer8 //
L #wBuffer9 //
T #wBuffer9 //
L 0 //
T #wBuffer9 // ... end
L #iLoop
LOOP next
SET
R #xDbOverflow // max-Bit rücksetzen
L 0
T #iDbCounter // Datenbausteinzähler zurücksetzen
// -------------> Schlußbehandlung <------------ //
end: LAR1 #dAr1Save // AR1 rücksichern
LAR2 #dAr2Save // AR2 rücksichern
AUF DB [#wDbnoSave] // letzten Globaldatenbaustein öffnen
SET
SAVE // EN0 eins machen
BE