SFC14 Any als Deklarationsvariable

sirbarny

Level-2
Beiträge
170
Reaktionspunkte
26
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich möchte mir einen Baustein vorbereiten, den ich immer wieder aufrufen kann.
Die SFC14 verlangt beim Record einen ANY. Ich weiß wie ein ANY aussieht wenn ich ihn fest vergebe. Wie muss er gestaltet werden wenn ich ihn als Daklarationsvariable verwenden möchte?

Danke
sir
 

Anhänge

  • SFC14.png
    SFC14.png
    11,6 KB · Aufrufe: 46
Soweit ich das im Kopf hab kannst du den Any als In-Parameter in deinem FC deklarieren. Das kopierst du dann als Temp-Variable und parametrierst ihn an den SFC.

Aber warum machst du das überhaupt? Gehts dir darum, die LADDR nicht in Hex angeben zu müssen? Dazu empfehle ich einen Move vor dem SFC14 von Int nach Word und gut is.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Peripherie 6 Byte einlesen (Status von FU)
Daten konsistent über Record ausgeben in einen DB.
z.B. P#db60.dbx0.0 Byte 6
Der Baustein wird noch umfangreicher. Dann möchte ich den Baustein für 16 Antriebe verwenden und den Baustein immer wieder aufrufen und nur noch beschalten. Aber ich weiß nicht wie ich den Any indirekt zuweisen kann.
 
Du musst Dir Deinen ANY-Pointer am besten im Baustein selbst zusammensetzen und dann an den SFC antragen.
 
Hier mal ein Beispiel:

IN:
Kommunikations_DB_Nr = INT

TEMP:
Zeiger1 = ANY // Kommunikations-DB DBX24.0 10 Byte

L #Kommunikations_DB_Nr
T #Kommunikations_DB

AUF DB [#Kommunikations_DB]

L L#0 // Zeiger löschen
T LD 0
T LD 4
T LW 8
L B#16#10 // Sytax-ID "10hex"
T LB 0
L B#16#2 // Datentyp "Byte"
T LB 1
L 10 // Wiederholfaktor (Länge)
T LW 2
L #Kommunikations_DB_Nr // DB-Nummer
T LW 4
L 24 // Adresse im DB
T LW 8
L LD 6
SLD 3 // um 3 Stellen nach links schieben
T LD 6
L B#16#84
T LB 6

CALL "DPRD_DAT"
LADDR :=#PEW_PAW_Adresse_1
RET_VAL:=DBW4
RECORD :=#Zeiger1
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja gut, aber du musst doch in der Variablentabelle der Variable #Zeiger 1
einen Datentyp zuweisen. Wenn ich hier any auswähle bleibt die Variable im Programm rot mit der Meldung:
unzulässige Parameterversorgung für Record
Irgendwie steh ich im Moment auf dem Schlauch.

CALL "DPRD_DAT"
LADDR :=#PEW_PAW_Adresse_1
RET_VAL:=DBW4
RECORD :=#Zeiger1
 
Ja gut, aber du musst doch in der Variablentabelle der Variable #Zeiger 1
einen Datentyp zuweisen. Wenn ich hier any auswähle bleibt die Variable im Programm rot mit der Meldung:
unzulässige Parameterversorgung für Record
Irgendwie steh ich im Moment auf dem Schlauch.

CALL "DPRD_DAT"
LADDR :=#PEW_PAW_Adresse_1
RET_VAL:=DBW4
RECORD :=#Zeiger1

Lege #Zeiger1 mal als Temp an, Any kann man nicht einfach von Input auf den Eingang eines weiteren Bausteins durchreichen. Du mußt dann den ankommenden Any von Input auf den Temp-Zeiger umkopieren.

Etwa so, nur kopiere ich hier von Temp auf IN/OUT (in einem FB), also in die andere Richtung:

Code:
      TAR2  #AR2BACKUP
      L     P##anyRCV       //ein Any in IN/OUT
      LAR2  
      L     #AR2BACKUP
      +AR2  
      L     P##anyTemp    //ein Any in Temp
      LAR1  
      L     DBW [AR2,P#0.0]
      T     LW [AR1,P#0.0]
      L     DBW [AR2,P#2.0]
      T     LW [AR1,P#2.0]
      L     DBW [AR2,P#4.0]
      T     LW [AR1,P#4.0]
      T     #wDB               //kannst du weglassen
      L     DBD [AR2,P#6.0]
      T     LD [AR1,P#6.0]
      T     #dwAdr            //kannst du weglassen 
      LAR2  #AR2BACKUP
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich möchte mir einen Baustein vorbereiten, den ich immer wieder aufrufen kann.
Die SFC14 verlangt beim Record einen ANY. Ich weiß wie ein ANY aussieht wenn ich ihn fest vergebe. Wie muss er gestaltet werden wenn ich ihn als Daklarationsvariable verwenden möchte?

Danke
sir

Wenn Ich das richtig sehe willst du in deinem Baustein doch die 3 Statusworte eines Sew Umrichters verarbeiten? Erzeug dir doch dann einen Strukt in den Lokaldaten mit dem Aufbau der Statusworte, und leg diesen an den Ausgsnt von dprd_dat
 
Danke Jochen. Du hast mich schon verstanden. Soweit bin ich schon.
Aber ich hätte die Statusworte gerne in einem DB und würde die Daten gerne direkt dahin schreiben.
Eigentlich könnte ich die Worte auch mit:

L PEW 256
TAW
T DB60.dbw0

usw. übertragen, aber ich dachte mit SFC wäre es professioneller.

Die Steuerworte würde ich dann mit SFC15 genauso behandeln.
Deklarationsvariable ==> DB-Bereich ==> SEW Movigear.

sir
 
Danke Jochen. Du hast mich schon verstanden. Soweit bin ich schon.
Aber ich hätte die Statusworte gerne in einem DB und würde die Daten gerne direkt dahin schreiben.
Eigentlich könnte ich die Worte auch mit:

L PEW 256
TAW
T DB60.dbw0

usw. übertragen, aber ich dachte mit SFC wäre es professioneller.

Die Steuerworte würde ich dann mit SFC15 genauso behandeln.
Deklarationsvariable ==> DB-Bereich ==> SEW Movigear.

sir

Dann hats dir Ralle ja richtig beschrieben, du must in dem Lokaldaten einen Any anlegen, und den any welcher in deinen in parametern eingetragen wurde in den any in den lokaldaten umspeichern!
 
Zurück
Oben