Sebastian
Level-1
- Beiträge
- 4
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo zusammen,
ich habe das Problem, dass ich Analogdaten nach entsprechender Wandlung in REAL-Werte alle 100ms in einen DB schreiben muss. Start und Ende der Aufzeichnung werden durch Ereignisse gesteuert (das Funktioniert auch soweit).
Als Steuerung benutze ich eine VIPA CPU 315 SB/DPM und zum Programmieren STEP 7 V5.3 SP1.
Ich habe mir einen FC geschrieben der von einem FB aus alle 100ms aufgerufen wird und dann dort bei jedem Aufruf einen REAL-Wert in einen zuvor definierten DB schreiben soll. Den DB habe ich als Array mit 500 REAL-Werten definiert (Definition aus Siemensunterlagen, daher sicherlich fehlerfrei). Der FC bekommt als Übergabewert leidglich die Adresse, die in dem FB nach jedem Aufruf des FCs um 4 (INT) erhöht wird. Vor dem Start jeder Aufzeichnung wird die Adresse immer wieder auf 0 gesetzt.
Den OB121 (fängt Programmierfehler ab) habe ich auch eingefügt, da die Steuerung sonst sofort in STOP geht, wenn der Aufruf T DBD [AR1,P#0.0] abgearbeitet wird. Die Steuerung gibt einen Fehler aus, der auf eine unerlaubte Adressierung hinweist. Bei der Erstellung des FCs habe ich micht weitestgehend an ein Beispiel von volker gehalten (https://www.sps-forum.de/threads/6364), doch leider bekomme ich außer der Fehlermeldung kein Ergebnis zustande.
Noch einige Fragen:
Vielen Dank schonmal vorab für die Hilfestellungen!!!
mfg Sebastian
ich habe das Problem, dass ich Analogdaten nach entsprechender Wandlung in REAL-Werte alle 100ms in einen DB schreiben muss. Start und Ende der Aufzeichnung werden durch Ereignisse gesteuert (das Funktioniert auch soweit).
Als Steuerung benutze ich eine VIPA CPU 315 SB/DPM und zum Programmieren STEP 7 V5.3 SP1.
Ich habe mir einen FC geschrieben der von einem FB aus alle 100ms aufgerufen wird und dann dort bei jedem Aufruf einen REAL-Wert in einen zuvor definierten DB schreiben soll. Den DB habe ich als Array mit 500 REAL-Werten definiert (Definition aus Siemensunterlagen, daher sicherlich fehlerfrei). Der FC bekommt als Übergabewert leidglich die Adresse, die in dem FB nach jedem Aufruf des FCs um 4 (INT) erhöht wird. Vor dem Start jeder Aufzeichnung wird die Adresse immer wieder auf 0 gesetzt.
Code:
AUF "Vak5_1" // DB30 öffnen
L #adresse // IN-Variable in INT
T #akt_ADR // TEMP-Variable in INT
L #akt_ADR
SLD 3 // INT-Wert zu Pointer wandeln
LAR1
L "Trending".Vac5_1 // Realwert laden (so möglich???)
T DBD [AR1,P#0.0] // schreiben von DB30
BE // zum Testen eingefügt!
AUF "Vak5_2" // DB31 öffnen
L "Trending".Vac5_2 // Realwert laden
T DBD [AR1,P#0.0] // schreiben von DB31
AUF "Vak13_1" // DB32 öffnen
L "Trending".Vac13_1 // Realwert laden
T DBD [AR1,P#0.0] // schreiben von DB32
AUF "Vak13_2" // DB33 öffnen
L "Trending".Vac13_2 // Realwert laden
T DBD [AR1,P#0.0] // schreiben von DB33
AUF "Vak13_3" // DB34 öffnen
L "Trending".Vac13_3 // Realwert laden
T DBD [AR1,P#0.0] // schreiben von DB34
Den OB121 (fängt Programmierfehler ab) habe ich auch eingefügt, da die Steuerung sonst sofort in STOP geht, wenn der Aufruf T DBD [AR1,P#0.0] abgearbeitet wird. Die Steuerung gibt einen Fehler aus, der auf eine unerlaubte Adressierung hinweist. Bei der Erstellung des FCs habe ich micht weitestgehend an ein Beispiel von volker gehalten (https://www.sps-forum.de/threads/6364), doch leider bekomme ich außer der Fehlermeldung kein Ergebnis zustande.
Noch einige Fragen:
- Darf des Beschreiben des DBs in einem FC geschehen, oder führt dies schon zu Problemen.
- Darf ich den Messwert mit dem Aufruf L "Trending".Vac5_1 laden oder funktioniert das nicht so einfach (es steht dort definitiev ein REAL-Wert drin!)
- Kann ich, wie in dem Beispiel oben, mehrere DBs hintereinander öffnen und gleich beschreiben (die Adresse ist für alle DBs die gleiche) oder muss ich dies in unterschiedlichen FCs machen.
Vielen Dank schonmal vorab für die Hilfestellungen!!!
mfg Sebastian