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

Ergebnis 1 bis 9 von 9

Thema: WCCF Arrays Aktualierung

  1. #1
    Registriert seit
    17.10.2005
    Ort
    Wohnort
    Beiträge
    37
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi

    WCCF RT-PC über TCP/IP, es geht um Arrays of int (externe Variablen)
    die z.T in Schlaufen in Scripts ausgelesen werden.
    Erfassungsart ist auf Zyklisch bei verwendung gestellt.
    Meine Frage wäre weis jemand wie die übertragen werden?
    Ich meine wird das Array komplett als Block eingelesen/übertragen oder werden die ints einzel beim aufruf/verwendung aktualisiert?
    Wenn als Block wie groß ist eine Blockgröße?

    naja beeinflussen kann man es ja nicht, aber vielleicht weis jemand darüber was. Wäre mir eine hilfe.
    besten Dank im vorraus
    mathgi
    ____________________________________________________________

    Viele Worte können nicht das beschreiben was Keiner wissen kann!
    ____________________________________________________________
    Zitieren Zitieren WCCF Arrays Aktualierung  

  2. #2
    Registriert seit
    14.08.2007
    Ort
    Erlangen
    Beiträge
    31
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    es wird immer das gesamte Array geschrieben bei jedem schleifendurchlauf. Ichdenk beim Lesen ist es ähnlich.
    Ich empfehl meist eine Interne Arrayvar noch anzulegen. Die PLC.Array var als erstes in die Interne übertragen, diese bearbeiten und dann in einem Wieder runterschreiben.

    so nach dem Motto

    InternesArray = extArray

    prog
    schleife
    ...
    ...
    prog

    extArray = IntArray

    macht zwei zugriffe und geht schnell

    In den anderen (dir beschriebenem Fall) würde jeder durchlauf eine Übertragung sein da die Arrayvar als eine Variable als ganzes angesehen wird.

    sorry für die kryptische schreibweise aber scripts sind nich ganz so mein ding

    gruß
    Aranel
    Ein Problem ist halb gelöst, wenn es klar formuliert ist.
    John Dewey
    (20.10.1859 - 1.6.1952)

  3. #3
    Registriert seit
    17.10.2005
    Ort
    Wohnort
    Beiträge
    37
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Daumen hoch

    hi Aranel

    hört sich logisch an.. nur leider funktioniert es nicht.
    mein Script
    Code:
    dim i, InternesArray
    
    InternesArray = SmartTags("ExternesArray")
    
    FOR i = 0 to 10
    
      ShowSystemAlarm InternesArray(i)
    
    NEXT
    und da ist alles leer. Sorry aber des geht leider nicht.
    Code:
    dim i
    
    FOR i = 0 to 10
    
      ShowSystemAlarm SmartTags("ExternesArray")(i)
    
    NEXT
    wo hingegen dies funktioniert.

    Was nun!?!
    ____________________________________________________________

    Viele Worte können nicht das beschreiben was Keiner wissen kann!
    ____________________________________________________________

  4. #4
    Registriert seit
    14.08.2007
    Ort
    Erlangen
    Beiträge
    31
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Das lesen bereitet kein Problem da er nur auf das interne Abbild zugreift
    falsche Denke gehabt

    so sollte es dann gehen:

    Dim I, IntArray(10)

    For I = 0 To 9
    IntArray(I)= SmartTags("Array_PLC")(I)
    Next
    ReDim I(0)
    For I = 0 To 9
    IntArray(I)= (SmartTags("Tag")+IntArray(I))
    Next

    SmartTags("Array_PLC")=IntArray

    damit liest du das Array ein und bearbeitest es dann intern bevor du es in einem Rutsch runterknallst. Hab das grad mit unserm Skriptguru getestet
    Ein Problem ist halb gelöst, wenn es klar formuliert ist.
    John Dewey
    (20.10.1859 - 1.6.1952)

  5. #5
    Registriert seit
    17.10.2005
    Ort
    Wohnort
    Beiträge
    37
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Idee

    ok Danke
    doch zurück zu meiner Anfangsfrage.

    Code:
    DIM i, Wert
    FOR i = 0 TO 10
        Wert = SmartTags("ExternesArray")(i)
    
        [Weiterer Programmcode, u.a. Funktionsaufrufe usw.]
           :
    
    NEXT
    hätte ich folgenden Code, dann wäre jetzt meine Schlussfolgerung, ist es bei lesezugriffen nur ein zugriff auf das interne abbild.=> egal (zeitlich gesehen) wann, wie, wie oft...

    Was mich wundert dass dieser Teil funktionieren soll
    SmartTags("Array_PLC")=IntArray

    da es ja andersherum nicht geht
    IntArray = SmartTags("Array_PLC")

    auch schaffe ich es nicht dass ich das Array_PLC an eine Funktion übergebe, -- Schade

    Ok der tiefer Hintergrund meines Themas war wohl dass ich nach optimierungsmöglichkeiten in meinem Script gesucht habe.
    trotzdem Danke
    ____________________________________________________________

    Viele Worte können nicht das beschreiben was Keiner wissen kann!
    ____________________________________________________________

  6. #6
    Registriert seit
    14.08.2007
    Ort
    Erlangen
    Beiträge
    31
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    mich hat das auch gewundert, aber ich denk da das Lesen in der Schleife geht ohne das die Lauzeit hochläuft ist das ganz ok wenn auch nicht wirklich verständlich. Mir wurde gesagt das dieses " SmartTags("Array_PLC")=IntArray" nur in dieser Richtung geht und auch gehen soll.

    Die Schlussfolgerung daß er auf das "interne Abbild" zugreift ist so richtig. Die Variable wird komplett aktualisiert und steht dann im Gerät zur Verfügung, während beim Schreiben eben das geänderte Array sofort (auch nach einer Änderung) runtergeschrieben wird. Das macht eben leider den "Umweg" über die interne Arrayvar. notwendig.
    Ein Problem ist halb gelöst, wenn es klar formuliert ist.
    John Dewey
    (20.10.1859 - 1.6.1952)

  7. Folgender Benutzer sagt Danke zu Aranel Calafalas für den nützlichen Beitrag:

    mathgi (03.12.2007)

  8. #7
    Registriert seit
    12.05.2007
    Beiträge
    416
    Danke
    14
    Erhielt 45 Danke für 40 Beiträge

    Standard

    Hatte das selbe Problem! Variablenüberlast oder so in der Art.

    Bei mir siehts jetzt so aus.

    For Index = 0 To AktionAdresseMaximal
    SmartTags("Ecm1\Rezeptur\AblaufExtern")(Index) = SmartTags("EcmRezeptur\Edit\AblaufIntern")(Index)

    'Verzoegerung da Uebertrageung zur Steuerung zu langsam ist (Variablenueberlast!)

    For Verzoegerung = 1 To 10000
    'Pause
    Next
    Next

  9. #8
    Registriert seit
    14.08.2007
    Ort
    Erlangen
    Beiträge
    31
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    das geht sicher auch Xhasx, aber damit läuft das script dann sehr lange und der rest könnt fast zum stehen kommen
    Das Problem ist dabei immer noch das "unnotwendigerweise" für jeden einzelnen geänderten Wert das ganze Array geschrieben wird. Wenn es nicht allzugroß ist kein Problem.
    Ein Problem ist halb gelöst, wenn es klar formuliert ist.
    John Dewey
    (20.10.1859 - 1.6.1952)

  10. #9
    Registriert seit
    12.05.2007
    Beiträge
    416
    Danke
    14
    Erhielt 45 Danke für 40 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das Skript ist groß - glaub mir! Insgesamt 6 Arrays á 500 Realwerte. Ich beahaupte mal das ganze geschieht unter einer Sekunde! Was mir bei einem Rezepturdownload reicht. Wenn das natürlch zyklisch geschehen soll...

Ähnliche Themen

  1. Arrays in PC Worx
    Von Daywalker im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 13.08.2010, 15:01
  2. Antworten: 2
    Letzter Beitrag: 23.06.2010, 11:18
  3. WCCF-2007 - geperrte Benutzer
    Von ssound1de im Forum HMI
    Antworten: 4
    Letzter Beitrag: 20.10.2009, 09:21
  4. Antworten: 6
    Letzter Beitrag: 23.04.2009, 13:15
  5. arrays mit udt...
    Von Jochen Kühner im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 01.12.2005, 14:27

Lesezeichen

Berechtigungen

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