WCCF Arrays Aktualierung

mathgi

Level-2
Beiträge
46
Reaktionspunkte
2
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
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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!?!
 
Das lesen bereitet kein Problem da er nur auf das interne Abbild zugreift ;)
falsche Denke gehabt :rolleyes:

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 ;)
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
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
 
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.
 
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...
 
Zurück
Oben