Array Länge wird falsch angezeigt

lieuthnant

Level-2
Beiträge
113
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Liebe Forumler,

Ich arbeite momentan an einem Projekt wobei ich Visual Basic und Twincat3 benutze. Ich habe ein paar Strukturen und Felder in Twincat deklariert. In der Struktur auf Seite von Twincat3 habe ich einem Feld wo ich ein paar Werte schreiben möchte. es funktioniert sehr gut. Jetzt habe ich die gleichen Strukturen auf Seite von READ, welches für das Lesen der Werte der Array zuständig ist, klicke, dann stehen in alle Felder den Wert 0. Wenn ich ein zweites Mal auf dem READ Button klicke, dann werden die werte angezeigt aber nicht richtig.
zum Beispiel, ich gebe 12 Werte von 10 bis 120 in 10er Schritte. (10, 20, 30, 40, 50, 60, 70 80, 90, 100, 110, 120) und es werden (20, 30, 40, 50, 60, 70 80, 90, 100, 110 , 0, 0) angezeigt. Das heisst, der erste Wert wird irgendwie verschluckt.
Manchmal wird das Feld von 12 Werte eine Länge von 13 werte angezeigt. Ich vermute, den Befehl " Marschall" funktioniert nicht richtig.
Dieses Befehl: <StructLayout(LayoutKind.Sequential, Pack:=1)> _Public Class ComplexStruct denke ich mach Probleme, weil die Werte werden abhängen von welchen Werte in Pack steht anders. manchmal habe ich nur Adressen in die Felder statt Werte.
Das Beispiel hatte ich auf der Seite von Beckhoff:
https://infosys.beckhoff.de/index.php?content=../content/1031/tcsample_vb/html/tcadsnet_vb_sample07.htm&id=

Hat jemand schon Erfahrung damit ????

Grüsse
 
Zuviel Werbung?
-> Hier kostenlos registrieren
vielen Dank für die Antwort. Ich habe es schon mit Pack 8 versucht. Das Array gibt in diesem Fall die Werte aber es verschluckt en ersten wert und füllt beide letzten Werte mit 0 auf.
zum Beispiel, ich gebe 12 Werte von 10 bis 120 in 10er Schritte. (10, 20, 30, 40, 50, 60, 70 80, 90, 100, 110, 120) und es werden (20, 30, 40, 50, 60, 70 80, 90, 100, 110 , 0, 0) angezeigt. Das heisst, der erste Wert wird irgendwie verschluckt.
Manchmal wird das Feld von 12 Werte eine Länge von 13 werte angezeigt.
Das Rätsel dabei ist: warum muss ich 2X auf dem READ Button drücken um die Werte des Feldes anzuzeigen oder zu lesen ?
Warum Werden die Werte des Feldes bei Visual Basic nicht angezeigt, wie bei Twincat3. Damit meine ich alle Werte.

Grüße
 
@lieuthnant
Moin moin, wenn der erste Wert fehlt, liegt immer der Verdacht nahe, dass mal der Index 0 und mal 1 als Nr für das erste Feld verwendet wird.
Mich stört viel mehr, dass hinten schon die 120 durch eine 0 ersetzt ist. Erst die allerletzte 0 macht dann wieder Sinn.
Was meinst Du mit "Manchmal"? Je nach benutztem "Hilfsmittel" oder "nicht reproduzierbar"?
Wenn wenigstens "... 2X auf dem READ Button drücken ..." reproduzierbar ist, dann keine Zeit mit rätseln vergurken.
Vor Gericht, auf hoher See und an selbsterklärenden BedienOberflächen mit intuitiver Bedienung ... Du weisst schon.
 
ich habe schon die Werte ausgegeben und zwar einzeln. Zum Beispiel: Alpha.wert[0], Alpha.wert[1], Alpha.wert[2], Alpha.wert[3], Alpha.wert[4], Alpha.wert[5], Alpha.wert[6], Alpha.wert[7], Alpha.wert[8], Alpha.wert[9], Alpha.wert[10] und Alpha.wert[11].
oder sollte ich mit :
Alpha.wert[1], Alpha.wert[2], Alpha.wert[3], Alpha.wert[4], Alpha.wert[5], Alpha.wert[6], Alpha.wert[7], Alpha.wert[8], Alpha.wert[9], Alpha.wert[10] und Alpha.wert[11] und Alpha.wert[12]. ?????
 
Zuviel Werbung?
-> Hier kostenlos registrieren
oder sollte ich mit :
Das hängt bestimmt davon ab, ob Du Alpha.wert als "ARRAY [0..11]" oder als "ARRAY [1..12]" deklariert hast.

Vielleicht zeigst Du mal wie das Array in Twincat deklariert ist und den Code wie Du es mit VB ausliest.

Harald
 
ich habe schon die Werte ausgegeben und zwar einzeln. Zum Beispiel: Alpha.wert[0], Alpha.wert[1], Alpha.wert[2], Alpha.wert[3], Alpha.wert[4], Alpha.wert[5], Alpha.wert[6], Alpha.wert[7], Alpha.wert[8], Alpha.wert[9], Alpha.wert[10] und Alpha.wert[11].
oder sollte ich mit :
Alpha.wert[1], Alpha.wert[2], Alpha.wert[3], Alpha.wert[4], Alpha.wert[5], Alpha.wert[6], Alpha.wert[7], Alpha.wert[8], Alpha.wert[9], Alpha.wert[10] und Alpha.wert[11] und Alpha.wert[12]. ?????
Du sitzt viel näher dran am Problem! Du sagst, Du hast schon einzeln ausgegeben - z.B. Alpha.wert(0) ... Alpha.wert(11) - und? Mit welchem Ergebnis?
Wenn ...[0] = 10 und ...[11] = 120, dann ist die Situation eigentlich schon klar. Guck vielleicht mal in VisualBasicHilfe und im Programm unter "option base" nach und/oder im Programm bei DIM ..., wie das Array angelegt ist.
PS: vielleicht findest Du das Gesuchte unter REDIM?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
hier ist das Code von der Visual Basic Seite:

Private hPCToBeckhoff As Integer
Public PCToBeckhoffStruct As PcToBeckhoff = New PcToBeckhoff

<MarshalAs(UnmanagedType.ByValArray, SizeConst:=96)> Public XPositionen(12) As Double
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=96)> Public YPositionen(12) As Double

Die Funktion zum lesen:

Private Sub btnRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRead.Click


Try


hPCToBeckhoff = tcAds.CreateVariableHandle("GVL.SchnittstelleZuBeckhoff")
PCToBeckhoffStruct = (tcAds.ReadAny(hPCToBeckhoff, GetType(PcToBeckhoff)))
tbPositionen.Text = String.Format("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}", PCToBeckhoffStruct.XPositionen(0).ToString, PCToBeckhoffStruct.XPositionen(1).ToString, PCToBeckhoffStruct.XPositionen(2).ToString, PCToBeckhoffStruct.XPositionen(3).ToString, PCToBeckhoffStruct.XPositionen(4).ToString, PCToBeckhoffStruct.XPositionen(5).ToString, PCToBeckhoffStruct.XPositionen(6).ToString, PCToBeckhoffStruct.XPositionen(7).ToString, PCToBeckhoffStruct.XPositionen(8).ToString, PCToBeckhoffStruct.XPositionen(9).ToString, PCToBeckhoffStruct.XPositionen(10).ToString, PCToBeckhoffStruct.XPositionen(11).ToString)



Catch ex As Exception
MessageBox.Show(ex.Message)


End Try


End Sub
---------------------------------------------------------------------------------

Auf der Beckhoff deklariere ich ein Array von 12 Elemente. und das ist alles
Dann schreibe ich werte in das Array und ich sehe die Werte, die ich online geschrieben habe.
 
Hier ist es so ruhig geworden ... warten wir noch auf die göttliiche Eingebung?
Mein ratloser Ratschlag zum planlosen Ausprobieren lautet:
- das Array so an legen, dass es bei Index 0 anfängt
- die Daten aber erst ab Index 1 aufwärts belegen
- das Array 15 lang machen, also 0 bis 14 (oder noch länger)
- auf der "EmpfängerSeite" erstmal so tun, als ob alle 15 FeldVariablen benutzt würden
- gucken, ob jetzt irgendwo alle (und wenn ja, wo die) Zahlen 10, 20, ... , 110, 120 ankommen
Und dann: bitte berichten!!!
Häwenaissuiikend!
 
Vielen Dank an Alle für die Hilfe. Es funktioniert jetzt. Beim Lesen und Schreiben wird die ganze Struktur gelesen und nicht nur der Array. Da das Array in einer Struktur deklariert war und die Struktur enthält auch andere Elemente, dann wurden die Elemente auch mitgelesen. Nach Änderung der Zuordnung, spricht das Array wird oben in der Struktur, funktioniert dies jetzt.
An Alle noch vielen Dank

Grüße
 
Zurück
Oben