ANY Variable am SFC20

bit_schubser

Level-1
Beiträge
40
Reaktionspunkte
7
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Ihr guten Programmierer,

Ich möchte ein TP177B als Diagnose Tool für die Stösselspanner Programmieren.
Da wir mehrere Pressen haben, möchte ich mir ein FB anlegen und von Presse zu Presse verknüpfen.
Der dazugehörige DB wird vom TP beeinflusst (Ventil zurücksetzten bzw. setzten) zwecks verdrehter Spanner.

Nun bekomme ich die ANY Variable nicht an dem SFC20 ohne ein Fehler zu haben.

Ich möchte eine ANY Variable benutzen um nicht 10 Ventile, 30 Signale von den Spanner und 10 Fehler Merker an FB zu haben.

Code:
[FONT=Times New Roman][SIZE=3]OB1[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]CALL FB200, DB200[/SIZE][/FONT]
[SIZE=3][FONT=Times New Roman]     Freigabe : E0.0[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]     Stösselspanner_Ventiele : P#DB84.DBX258.4 BOOL 10[/FONT][/SIZE]

Code:
[FONT=Times New Roman][SIZE=3]FB200[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]INPUT : Freigabe : BOOL[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]INOUT : Stösselspanner_Ventiele : ANY[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]STAT : V_Spanner_01 : BOOL[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]…..[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]STAT : V_Spanner_10: BOOL[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]TEMP : RET_SFC20_1 : INT[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]TEMP : RET_SFC20_2 : INT[/SIZE][/FONT]
 
[FONT=Times New Roman][SIZE=3]U #Freigabe[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]SPBN M01[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]CALL SFC20[/SIZE][/FONT]
[SIZE=3][FONT=Times New Roman]     SRCBLK := [COLOR=red]#Stösselspanner_Ventile[/COLOR]  [/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]     RET_VAL := #RET_SFC20_1[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]     DSTBLK := P#L 12.0 BOOL 10  //Local_Daten vom DB STAT Block[/FONT][/SIZE]
 
[FONT=Times New Roman][SIZE=3][FONT=Times New Roman][SIZE=3]…..  [/SIZE][/FONT]// TP177B[/SIZE][/FONT]
 
[FONT=Times New Roman][SIZE=3]CALL SFC20[/SIZE][/FONT]
[SIZE=3][FONT=Times New Roman]     SRCBLK := P#L 12.0 BOOL 10  //Local_Daten vom DB STAT Block[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]     RET_VAL := #RET_SFC20_1[/FONT][/SIZE]
[SIZE=3][FONT=Times New Roman]     DSTBLK := [COLOR=red]#Stösselspanner_Ventile[/COLOR][/FONT][/SIZE]
 
[FONT=Times New Roman][SIZE=3]M01 : BE[/SIZE][/FONT]

Was hab ich Falsch gemacht, bin Instandhalter mit SPS Kenntnisse.

MfG
Thomas
 
Jo..

Einen Any welche an einem IN Parameter anliegt kannst du nicht direkt an einen FC weitergeben, du musst dir einen Temporären ANY in den Lokaldaten anlegen:

ANY_LOK in Lokaldaten ab L0.0

Code:
L    P##Stösselspanner_Ventile  
L    D [AR1,P#0.0]
T    LD0
L    D [AR1,P#4.0]
T    LD4
L    D [AR1,P#8.0]
T    LW8
 
Einen Any welche an einem IN Parameter anliegt kannst du nicht direkt an einen FC weitergeben, du musst dir einen Temporären ANY in den Lokaldaten anlegen:

ANY_LOK in Lokaldaten ab L0.0

Code:
L    P##Stösselspanner_Ventile  
L    D [AR1,P#0.0]
T    LD0
L    D [AR1,P#4.0]
T    LD4
L    D [AR1,P#8.0]
T    LW8

SRY SRY , Ventile , hab schon geändert.

So. habe eine TEMP Variable vom Typ ANY angelegt ab L0.0
Sobalt die Zeile L D[AR1,P#0.0] abgearbeitet wird, geht die CPU auf STOP

MfG
Thomas
 

Anhänge

  • Neue Bitmap.jpg
    Neue Bitmap.jpg
    79,4 KB · Aufrufe: 30
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Alternativ kannst Du auch beim Kopieren des ANY-Zeigers aus dem IN-Bereich in den TEMP-Bereich des FB zusätzlich zum Adressregister
AR1 mit dem Adressregister AR2 arbeiten. Du brauchst dann nicht mehr direkt mit den Lokaldaten arbeiten.

Siehe dazu das folgende Programmbeispiel:

http://www.sps-forum.de/showpost.php?p=290237&postcount=5

http://www.sps-forum.de/showpost.php?p=290238&postcount=6

Gruß Kai
 
Nachtrag:

1. Multiinstanzfähige FBs

STEP 7 verwendet bei multiinstanzfähigen FBs das Adressregister AR2 als Basisadressregister für die Instanzdaten.

Wenn man in einem multiinstanzfähigen FB das Adressregister AR2 verwenden will, muss man den Inhalt vorher retten und nach der
Verwendung wiederherstellen.

In dem Bereich, in dem man mit dem Adressregister AR2 arbeitet, darf man keinen Zugriff auf Bausteinparameter oder statische
Lokaldaten pogrammieren.

2. Nicht multiinstanzfähige FBs

STEP 7 verwendet bei nicht multiinstanzfähigen FB das Adressregister AR2 nicht.

Bei einem nicht multiinstanzfähigen FB muss in den Eigenschaften des FB der Haken bei Multiinstanzfähigkeit entfernt werden.

In meinem obigen Programmbeispiel habe ich einen nicht multiinstanzfähigen FB verwendet.

Gruß Kai
 

Anhänge

  • Multiinstanz.jpg
    Multiinstanz.jpg
    156,4 KB · Aufrufe: 20
Ist das AR2 retten ein muss, oder gehörts eher zum guten Stil?

Bin mir grad nicht sicher, aber bei uns laufen meines Wissens einige viele Bausteine als MI und würd mich nicht erinnern darin derartiges gefunden zu haben.

Bin aber erst wieder in 2 Wochen in der Arbeit, kann leider jetz nicht nachsehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
das hat Kai doch wirklich sehr schön geschrieben ...
Wenn man in einem multiinstanzfähigen FB das Adressregister AR2 verwenden will, muss man den Inhalt vorher retten und nach der
Verwendung wiederherstellen.
Begründung :
Es könnte ja immerhin sein, dass der Aufrufer (des Multi-FB's) "sein AR2" gerne Zwecks weiterer Verwendung wieder zurück hätte ... :rolleyes:

Gruß
Larry
 
Zurück
Oben