Hi Markus,
ich musste erst mal überlegen...das ist jetzt ca. 4 Jahre her, da wusste ich einiges nicht mehr so genau...
Der Reihe nach:
1. Das "Reshape":
Ich kriege die Daten aus der DLL als U8-Werte, d.h. ein Array of U8 mit z.B. immer 40 Elementen. Die ersten 2 Elemente sind Digitale Eingänge (2x 8Bit), die nächsten 14 repräsentieren analoge Eingänge (bei denen high und low-Bytes sortiert werden müssen und manche mit 1/1000 skaliert werden müssen), die nächsten 4 sind wieder DI (werden oben angefügt) und die restlichen sind ebenfalls DI, allerdings in nem separaten Block, der Fehlermeldungen repräsentiert. 2+14+4=20, d.h. ich hab noch 20 Byte (also 20x 8 Bit = 160 Bit) für die Fehlermeldungen oder weitere Daten (Reserve). Ich brauch hier aber nur noch 96 Bit, die ich vorher für Fehlermeldungen definiert habe.
Die Verteilung der 96 Fehlerbits siehst du im Bild hier:
Im ersten Schritt werden die 20 Byte (20x U8) in boolesches 2D-Array gewandelt (20x8x1Bit). Dann werden diese Elemente des 2D per Reshape in ein 1D mit 96 Elementen überführt, der Rest wird verworfen, weil ich's nicht brauche. Das Abscheiden erfolgt, damit ich genauso viele Elemente hab wie im vordefinierten Array of Cluster "Fehlerliste SPS", dann kann man per Autoindexing in das jeweilige "Data"-Feld im Cluster schreiben! Den Inhalt der Fehlerliste siehst du im Hilfefenster!
2. "geteilt durch 1000"
siehe oben, dient der Skalierung
3. Integers an SPS
Die SPS verfügt über eine nachgeordnete numerische Steuerung, diese kann nur mit Integerzahlen rechnen. Zum Arbeiten benötigt sie einige Parameter, die stehen in dem Cluster, siehe nachfolgendes Bild! Das Cluster hab ich mir selber erstellt, es wird über ein Konfigmenü (LV-FP) befüllt und dann der SPS übergeben.
So, genug erzählt...ich musste mich schon an viel mehr Details erinnern, als ich eigentlich wollte...Wichtig ist eigentlich nur: Du vereinbarst mit der SPS-Seite die Datenstruktur und die Adresse, den Rest muss man dann zusammenbauen oder aufdröseln...
Gruss
Achim