rs-plc-aa
Level-1
- Beiträge
- 727
- Reaktionspunkte
- 57
-> Hier kostenlos registrieren
Hab noch mal nachgeschaut... Hier noch mal das komplette Netzwerk 1:
Die Netzwerke 2 - n beinhalten dann jeweils nur die nachfolgenden SFC 17/18 Aufrufe und die Zuweisung der Begleitwerte. Beispiel Netzwerk 2:
Das geht dann einfach so weiter...
Testen kann ich das erst wieder heute nachmittag, aber so wie es jetzt gepostet ist läufts aktuell und funktioniert NICHT -> Begleitwert ist immer = 0
An SD soll ja der Anyzeiger mitteilen wo die Begleitwerte liegen -> in dem Fall im STAT-Bereich des Instanzdatenbausteins, diese werden vor Aufruf der nächsten Störung immer neu versorgt (Begleitwert1, 2 und 3)
Ich weiss einfach nicht was da nicht gehen soll...
Ersetze ich an SD den Any #Begleitwerte durch #begleitwert1 (direkt aus STAT) dann funktioniert es, habe dann allerdings nur einen Wert statt 3 (manchmal brauche ich 2, den dritten habe ich als reserve schon mal vorgesehen...)
Also muss es irgendwie an dem Zeiger hängen...
Code:
// Den Begleitwerten einmalig den passenden Instanzdatenbaustein zuweisen
// Hierzu einen ANY_Pointer verwenden:
// Pointer im Format für die Begleitwerte der Alarm_S und SQ SFCs bilden
L B#16#10 // TYP (Teil1): 10h für s7
T LB 0
L B#16#2 // TYP (Teil2): BYTE
T LB 1
L 12 // Anzahl (Bytes) ab Startadresse
T LW 2
L #DI_Number // Nummer des Datenbausteins (IN:INT)
T LW 4
L 1170 // Startadresse im DB (Beginn STAT-Bereich)
SLD 3 // Pointer erzeugen
T LD 6
L B#16#85 // Speicherbereichstyp: 85h für Instanz-DB
T LB 6
// Der hiermit erzeugte Pointer liegt nun im TEMP-Bereich ab Adresse 0
// Dort eine Variable #Begleitwerte des Typs ANY anlegen und bei SD zuweisen.
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Abbilder der DBs Alarm_S_Bits und Alarm_SQ_Bits temporär zwischenspeichern
L #DB_Nr_Alarm_S_Bits
T #DB_Nr_Alarm_S_Bits_Int
AUF DB [#DB_Nr_Alarm_S_Bits_Int]
L DBD 0
T #Abbild_AlmS_Bits_DBD0 // Inhalt des DBD 0 lokal gespeichert
L DBD 4
T #Abbild_AlmS_Bits_DBD4 // Inhalt des DBD 4 lokal gespeichert
L DBD 8
T #Abbild_AlmS_Bits_DBD8 // Inhalt des DBD 8 lokal gespeichert
L DBD 12
T #Abbild_AlmS_Bits_DBD12 // Inhalt des DBD 12 lokal gespeichert
L #DB_Nr_Alarm_SQ_Bits
T #DB_Nr_Alarm_SQ_Bits_Int
AUF DB [#DB_Nr_Alarm_SQ_Bits_Int]
L DBD 0
T #Abbild_AlmSQ_Bits_DBD0 // Inhalt des DBD 0 lokal gespeichert
L DBD 4
T #Abbild_AlmSQ_Bits_DBD4 // Inhalt des DBD 4 lokal gespeichert
L DBD 8
T #Abbild_AlmSQ_Bits_DBD8 // Inhalt des DBD 8 lokal gespeichert
L DBD 12
T #Abbild_AlmSQ_Bits_DBD12 // Inhalt des DBD 12 lokal gespeichert
// /////////////////////////////////////////////////////////////////////////////////////////////////////////
// *********************************************************************************************************
// eigentlicher Beginn Netzwerk 1 ...
// *********************************************************************************************************
L #T_MOT_OUT_C
T #begleitwert1
L L#0 // falls ein Wert ausreicht die restlichen 2 mit "0" auffüllen
T #begleitwert2
T #begleitwert3
// Störung 1
CALL "ALARM_S"
SIG :=L16.0 // Meldungsauslösendes Bit aus jeweiligem DB lokal gespeichert
ID :=W#16#EEEE // Bleibt konstant gleich
EV_ID :=#Stoerung001 // Variable aus IN-Bereich welcher die Meldungsnummer zugeordnet ist
SD :=#Begleitwerte // Pointer auf die Begleitwerte im STAT-Bereich (siehe oben)
RET_VAL:=#retval // Rückgabewert für Fehlercodes
Code:
L #T_OEL_C
T #begleitwert1
L L#0
T #begleitwert2
T #begleitwert3
// Störung 2
CALL "ALARM_S"
SIG :=L16.1
ID :=W#16#EEEE
EV_ID :=#Stoerung002
SD :=#Begleitwerte
RET_VAL:=#retval
Testen kann ich das erst wieder heute nachmittag, aber so wie es jetzt gepostet ist läufts aktuell und funktioniert NICHT -> Begleitwert ist immer = 0
An SD soll ja der Anyzeiger mitteilen wo die Begleitwerte liegen -> in dem Fall im STAT-Bereich des Instanzdatenbausteins, diese werden vor Aufruf der nächsten Störung immer neu versorgt (Begleitwert1, 2 und 3)
Ich weiss einfach nicht was da nicht gehen soll...
Ersetze ich an SD den Any #Begleitwerte durch #begleitwert1 (direkt aus STAT) dann funktioniert es, habe dann allerdings nur einen Wert statt 3 (manchmal brauche ich 2, den dritten habe ich als reserve schon mal vorgesehen...)
Also muss es irgendwie an dem Zeiger hängen...