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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Problem mit ARRAY - STRUCT

  1. #1
    Registriert seit
    30.07.2007
    Beiträge
    118
    Danke
    14
    Erhielt 6 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo allerseits,
    vorweg - ich habe noch nicht viel mit ARRAY und STRUCT zu tun gehabt und tu mich etwas schwer damit...
    Ich habe eine Funktion mit folgenden Eingängen:

    VAR_INPUT
    X : REAL;
    XY : ARRAY[1..10,0..1] OF REAL;
    Pts : INT;
    END_VAR

    Ich bekomme es in S7 KOP/FUP nicht hin, den Eingang XY richtig zu bedienen. Bisher habe ich zwei Wege versucht:
    1.) per SCL das Array in einem DB 10 "Punkte" mit den notwendigen Daten erzeugt/gefüllt; S7 bietet mir jetzt (in KOP/FUP) am Eingang XY den DB mit der symbolischen Bezeichnung "Punkte" an. Die Datenpunkte heißen im DB WERT[x,y]. Wenn ich den DB "Punkte" übernehmen will kommt die Fehlermeldung "Aktualdatentyp ARRAY passt nicht zu formalem Typ STRUCT des Formalparameters XY". Funktioniert auch nicht mit "Punkte".WERT... in diversen Varianten.
    2.) per SCL einen UDT mit den XY-Daten gefüllt und daraus den DB mit den jetzt sichtbaren Datenpaaren erzeugt. Ergebnis wie oben.
    Wie muß die richtige Syntax für Eingang XY lauten? "Punkte".WERT[X,Y] geht auch nicht
    Der DB sieht so aus...
    [IMG]file:///C:/Temp/moz-screenshot.png[/IMG][IMG]file:///C:/Temp/moz-screenshot-1.png[/IMG]
    Hat jemand einen/den Tipp für mich?
    Oder ist mein Herangehen hier völlig falsch?
    Gruß, Jörg
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: bmp DB.bmp (34,8 KB, 72x aufgerufen)
    Zitieren Zitieren Problem mit ARRAY - STRUCT  

  2. #2
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi,

    wenn ich mir den Baustein so anschaue würde ich sagen das ist der LINEAR_INT aus der oscat.lib oder?

    bei dem LINEAR_INT wurde der Eingang XY auf UDT16 "XY_LINEAR_INT" geändert. Also ist die Vorgehensweise jetzt etwas anders:

    1. Neuen DB-Anlegen
    2. Variable z.B. "XY" vom Typ UDT16 anlegen
    3. Datenbausteinsymbol vergeben z.B. "DB Werte"
    4. Baustein aufrufen und als XY Parameter "DB Werte".XY schreiben

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  3. Folgender Benutzer sagt Danke zu dalbi für den nützlichen Beitrag:

    PN/DP (27.09.2010)

  4. #3
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi,

    Zitat Zitat von Jörg_24 Beitrag anzeigen
    ...VAR_INPUT
    X : REAL;
    XY : ARRAY[1..10,0..1] OF REAL;
    Pts : INT;
    END_VAR...
    falls es doch so ist geht es vom Prinzip her genau so.

    1. Neuen DB-Anlegen
    2. Variable z.B. "XY" vom Typ ARRAY[1..10,0..1] OF REAL anlegen
    3. Datenbausteinsymbol vergeben z.B. "DB Werte"
    4. Baustein aufrufen und als XY Parameter "DB Werte".XY schreiben

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  5. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard

    Wenn die Funktion als Eingangsparameter ein ARRAY[1..10,0..1] OF REAL erwartet,
    dann muß man beim Aufruf auch genau so ein komplettes ARRAY[1..10,0..1] OF REAL
    übergeben. Nur ein einzelnes Element oder ein Struct oder ein anders deklariertes
    Array kann dann nicht übergeben werden. Die Übergabe geht auch nur symbolisch.

    Du müßtest also beim FC-Aufruf an XY übergeben: "Punkte".WERT und im DB deklarieren
    Code:
    WERT ARRAY[1..10,0..1]
         REAL
    Leider zeigt Dein Screenshot nicht, wie Du WERT deklariert hast.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    ich schliesse mich den Ausführungen von PN/DP voll an. Allerdings kann ich mir nicht vorstellen, dass das was du machst das ist, was du machen möchtest. Vielleicht fängst du das Ganze mal so rum an.

    Gruß
    Larry

  7. #6
    Jörg_24 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.07.2007
    Beiträge
    118
    Danke
    14
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Hallo Leute,
    danke erst mal für die Tipps. Wir sprechen zwar die gleiche Sprache aber ich bekomme es trotz allem nicht hin...
    (Es geht um die Funktion LINEAR_INT.)
    Hier noch mal ein Screenshot von meinem Problem - ich denke/hoffe es wird nur ein banaler Fehler sein.../ Programmeinstellung???

    Gruß, Jörg
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren Knoten im Hirn...  

  8. #7
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi,

    welche Version der oscat.lib ist das? Mach doch mal aus XY kein Array of Real sondern, schreib da UDT16 hin. Diesen vorher aus der oscat.lib in das Projekt kopieren.

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  9. #8
    Jörg_24 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.07.2007
    Beiträge
    118
    Danke
    14
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Hi Daniel,
    ...ist die Version 3.11. FC153 und UDT16 habe ich grad noch mal neu aus der Lib rausgezogen und getestet - keine Änderung.
    Wenn ich IN-Var. XY als UDT16 deklariere kommt automatisch der Typ des UDT16 (XY_LINEAR_INT) und es wird wieder ein Array daraus. Ist ja wahrscheinlich auch so gewollt. - b.r. (bin ratlos)

    // was soll der DB aus deiner ursprünglichen Anleitung für eine Struktur haben? Manuell angelegt mit den Array[1..20,0..1] in REAL oder vom UDT16 erzeugt? Hab ich beides schon mehrfach durch ...//

    Gruß, Jörg
    Zitieren Zitieren b.r.  

  10. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard

    Hallo Jörg,

    wenn Du Dein Array im DB1 exakt so deklarierst, wie der IN-Parameter XY der FC "LINEAR_INT" deklariert ist,
    dann klappt auch das symbolische Anbinden des Array problemlos.

    Weiter oben hast Du geschrieben:
    VAR_INPUT
    X : REAL;
    XY : ARRAY[1..10,0..1] OF REAL;
    ...

    Wieso deklariert Du nun Dein Array XY im DB1 als ARRAY[1..20,0..1] OF REAL?

    Und wieso Du als IN-Parameter für Deinen Test-FC1 ein STRUCT OF ARRAY[1..20,0..1] OF REAL deklarierst,
    weißt wohl nur Du. Dies hat aber erstmal nichts mit dem Aufruf des FC "LINEAR_INT" zu tun.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren exakt programmieren  

  11. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Jörg_24 (26.09.2010)

  12. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wie kannst Du ohne Tippfehler ein Array im DB1 exakt so deklarieren, wie es der FC "LINEAR_INT" erwartet?

    * öffne den FC "LINEAR_INT"
    * markiere links oben im Deklarationsbereich das "IN"
    * markiere nun oben rechts unter Name das "XY"
    * Bearbeiten > Kopieren
    * öffne den DB1
    * markiere in der linken Spalte das "+0.0"
    * Bearbeiten > Einfügen
    * DB1 speichern
    * den Aufruf-FC (FC1) öffnen
    * den Aufruf des FC "LINEAR_INT" einfügen
    * am Input XY des FC "LINEAR_INT" "DBWERTE".XY dranschreiben (DB1 hat den symbolischen Name: "DBWERTE")

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  13. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Jörg_24 (26.09.2010)

Ähnliche Themen

  1. Datentyp ARRAY und STRUCT
    Von Quoellfrisch im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 06.12.2015, 19:40
  2. Antworten: 2
    Letzter Beitrag: 15.02.2011, 19:38
  3. Problem ARRAY of STRUCT S7 -> WinCC flex 2008
    Von sps-concept im Forum HMI
    Antworten: 4
    Letzter Beitrag: 19.02.2010, 18:49
  4. Codesys Array of Word -> Beliebiges Struct
    Von MSB im Forum CODESYS und IEC61131
    Antworten: 8
    Letzter Beitrag: 01.01.2008, 21:47
  5. Problem mit lesen von struct
    Von cyberlight im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 01.07.2005, 07:35

Lesezeichen

Berechtigungen

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