Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 6 von 6

Thema: SFC14/SFC17 Problem mit RECORD

  1. #1
    Registriert seit
    25.01.2012
    Beiträge
    125
    Danke
    28
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich bin gerade dabei ein bereits bestehenden und funktionierenden Baustein, der ursprünglich für 1200/1500er CPU's mit optimierten Busteinzugriff erstellt wurde, auch für 300/400er CPU's lauffähig zu machen.

    An sich ist es, außer dem Entfernen des optimierten Zugriffes für den FB und dessen verwendeten DI bzw. einen globalen DB, kein größerer Aufwand...dachte ich

    Intern verwendet der FB den SFC14/15 und SFC20. Zur Ausgabe der gelesenen bzw. geschriebenen Daten besitzt der FB eine Struktur "Data" als In/Output Variable. InData, OutData und Memory sind jeweils Byte Arrays von 64. "Hardware_IO" der hexadezimale Wert der E/A Adresse des 64 Byte Moduls aus der Hardware-Config.

    Das seltsame ist jetzt, dass er mir beim SFC14 und SFC20 immer an der RECORD Variable meckert "Ungültige Parameterzuweisung". Allerdings verstehe ich nicht wieso!?

    So verwende ich die SFC's:

    Code:
    #Ret_Val_SFC15 := DPWR_DAT(LADDR:=#Hardware_IO, RECORD := #Data.OutData);
    #Ret_Val_SFC14 := DPRD_DAT(LADDR:= #Hardware_IO, RECORD =>#Data.Memory);
    #Ret_Val_SFC20 :=BLKMOV(SRCBLK:=#Data.#Memory, DSTBLK=>#Data.InData);
    SFC15 funktioniert dabei ohne irgendeine Fehlermeldung, wohingegen er mir bei SFC14 und SFC20 RECORD bzw. DSTBLK nicht zuweisen lässt.

    Er akzeptiert es nur (und es funktioniert auch), wenn ich den globalen DB direkt verwende, der am In/Output "Data" steht.
    Also:

    Code:
    #Ret_Val_SFC14 := DPRD_DAT(LADDR:= #Hardware_IO, RECORD =>"CommunicationDB".Data.Memory);
    #Ret_Val_SFC20 :=BLKMOV(SRCBLK:=#Data.#Memory, DSTBLK=>"CommunicationDB".Data.InData);
    Dies ist allerdings keine Lösung für mich, da ich den Baustein gerne in eine Bibliothek packen möchte und das mit globalen Datenzugriff nicht funktioniert.

    Was mache ich falsch?

    Viele Grüße
    Software:
    STEP 7 5.5 + SP4 + HF6
    TIA Portal V13 SP1 Update 4
    TwinCAT V3.1
    Hardware:
    S7-400 CPU 414-3 PN/DP
    CPU 1516-3 PN/DP
    CX5020-0110
    Zitieren Zitieren SFC14/SFC17 Problem mit RECORD  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Wie sieht denn Deine Deklaration der INPUTS und der Struktur Data genau aus?
    Nennt die Fehlermeldung "Ungültige Parameterzuweisung" vielleicht noch irgendwelche Details?
    Vielleicht muß der FB (oder UDT?) zunächst einmal gespeichert und übersetzt werden, bevor der STRUCT (oder UDT?) verwendet werden kann?

    Ich habe jetzt kein TIA greifbar, doch in SCL classic gibt es kein Problem:
    Code:
    FUNCTION_BLOCK FBxxx
    
    VAR_INPUT
        Hardware_IO : WORD ;
    END_VAR
    
    VAR_IN_OUT
        Data : STRUCT
            InData  : ARRAY[0..63] OF BYTE ;
            OutData : ARRAY[0..63] OF BYTE ;
            Memory  : ARRAY[0..63] OF BYTE ;
        END_STRUCT ;
    END_VAR
    
    VAR_TEMP
        Ret_Val_SFC14 : INT ;
        Ret_Val_SFC15 : INT ;
        Ret_Val_SFC20 : INT ;
    END_VAR
    
        Ret_Val_SFC15 := DPWR_DAT(LADDR := Hardware_IO, RECORD := Data.OutData);
        Ret_Val_SFC14 := DPRD_DAT(LADDR := Hardware_IO, RECORD := Data.Memory);
        Ret_Val_SFC20 := BLKMOV(SRCBLK := Data.Memory, DSTBLK := Data.InData);
    
    END_FUNCTION_BLOCK
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    TimeOUT ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.01.2012
    Beiträge
    125
    Danke
    28
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also mein In/Output ist eine UDT. Die UDT besteht aus:

    OutData - Array [0..63] of Byte
    InData - Array [0..63] of Byte
    Memory - Array [0..63] of Byte

    Den Baustein, welchen ich an den In/Output schreibe besteht aus der gleichen UDT
    Er zeigt mir außer "Ungültige Parameterzuweisung" nichts anderes an.

    Das seltsame ist auch, dass die Zuweisung vorher genau so problemlos funktioniert hat.

    Auch wenn ich meinen In/Output so abändere (eine reine Struktur raus machen), wie bei dir im Beispiel, bekomme ich immer noch den selben Fehler.

    Seltsamerweise aber keine Probleme bei der SFC15, mit den Elementen aus der Struktur bzw. der UDT
    Geändert von TimeOUT (28.04.2014 um 14:06 Uhr)
    Software:
    STEP 7 5.5 + SP4 + HF6
    TIA Portal V13 SP1 Update 4
    TwinCAT V3.1
    Hardware:
    S7-400 CPU 414-3 PN/DP
    CPU 1516-3 PN/DP
    CX5020-0110

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Gibt es in TIA sowas wie eine Baustein-Konsistenzprüfung oder Alles-übersetzen?
    Du könntest auch mal versuchen, mein obiges SCL-classic-Beispiel oder eine eigene SCL-Quelle in TIA zu importieren.

    Muß dieser Output-Zuweisungsoperator unbedingt => sein oder kann man auch := verwenden?

    ( Dein UDT an IN_OUT ist hoffentlich kein "von einem UDT abgeleiteter DB" (da gibt es schon immer Schwierigkeiten), sondern eine UDT- oder STRUCT-Variable, welche zusammen mit anderen Variablen in einem DB deklariert wurde. )

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    TimeOUT ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.01.2012
    Beiträge
    125
    Danke
    28
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das Problem scheint wohl an dem In/Output zu liegen.
    Ich habe die Struktur mal im STAT_Bereich deklariert und aus dem In/Output gelöscht.
    Dann nimmt er ohne zu meckern die RECORD und DSTBLK Zuweisung an und führt den Bustein auch korrekt aus.

    Würde im Notfall auch gehen, allerdings gefällt mir das nicht so sehr und ich kann mir einfach nicht vorstellen, dass es auch nicht anders möglich ist (siehe dein Beispiel)

    Die Zuweisung "=>" macht er autom. in TIA. ":=" lässt er nicht zu
    Software:
    STEP 7 5.5 + SP4 + HF6
    TIA Portal V13 SP1 Update 4
    TwinCAT V3.1
    Hardware:
    S7-400 CPU 414-3 PN/DP
    CPU 1516-3 PN/DP
    CX5020-0110

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Dann ist das wohl ein TIA-Feature... frage doch mal den Siemens Support, ob das so gewollt ist

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 14.12.2011, 08:34
  2. ANY Pointer als RECORD
    Von akus0n im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 22.09.2010, 09:00
  3. Problem mit SFC17 - Fehlermeldungsprojektierung
    Von Andreas- im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 10.09.2009, 08:44
  4. SFC14 mit AS-Interface-Gateway
    Von McMeta im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 19.08.2009, 14:51
  5. Antworten: 0
    Letzter Beitrag: 01.09.2004, 13:01

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •