libnodave; .NET; Short Array Daten in DB schreiben

JoEr

Member
Beiträge
10
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo

Nach meinen anfänglichen Problemen mit dem Verbindungsaufbau, welche dank diesem Forum behoben werden konnten hoffe ich Ihr könnt mir auch bei meinem nächsten Problem helfen.

Ich schreib mittels Visual Basic 2010 Express sämtlichen Informationen, welche in einen DB geschrieben werden sollten in ein Short Array (Arraygrösse = 3000). Aktuell bin ich soweit, dass ich dies wie folgt in die SPS schreibe:

Dim help As Byte()
Dim int_Count As Integer


For i = 0 To 3000
help = BitConverter.GetBytes(cla_GlobaleVariablen.srt_intDBSchreiben(i))
ErrResult = LndConnection.writeManyBytes(daveDB, 161, int_Count, int_Len, help)

int_Count = int_Count + 2
Next i

(Teilauszug des Codes)

Das dies dauert ist glaub ich klar. Gibt es eine Möglichkeit, das komplette Short Array on block zu übertragen?

Bin Anfänger was libnodave anbelangt – daher die vielleicht etwas komische Fragestellung – Sorry


Gruss JoEr
 

Jochen Kühner

Well-known member
Beiträge
4.154
Punkte Reaktionen
474
Ja, genau dafür gibts ja write many bytes. So wie du es Jetzt machts sind doch aber die short Werte in der SPS bestimmt falsch? Du musst ja low und highbyte drehen. Du erzeugst am besten eine List<Byte>, dieser fügst du immer das ergebnis von BitConverter.GetBytes hinzu. Zum Schluss kannst du diese Liste mit ToArray in ein Array umwandeln, und dieses dann an writeManyBytes übergeben.

Falls du dir meine Bibliothek noch anschaust, der Typ PlcTag kann auch ein Array sein! Wenn du als Arraygröße 3000 da angibst und dein Wert mit myTag.Controlvalue=cla_GlobaleVariablen.srt_intDBSchreiben.ToArray übergibst gehts da auch!
 
OP
J

JoEr

Member
Beiträge
10
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo

Deine Bibliothek hab ich gefunden und auch darauf verwiesen. in Deinem Beispiel ist myTag dei Variable - korrekt? Wie muss ich diese deklarieren. Den Ansatz hab ich zwar verstanden - wie ich aber dahin komme, respektive wie ich die Variable deklarieren muss ist mir im Moment nicht klar
 

Jochen Kühner

Well-known member
Beiträge
4.154
Punkte Reaktionen
474
So mal ne Erklärung:

Also ne Verbindung über meinen Dialog Konfigurieren kannst du so:

Code:
[COLOR=#2B91AF][FONT=Consolas]Configuration[/FONT][/COLOR][COLOR=black][FONT=Consolas].ShowConfiguration([/FONT][/COLOR][COLOR=#A31515][FONT=Consolas]"myVBExample"[/FONT][/COLOR][COLOR=black][FONT=Consolas], [/FONT][/COLOR][COLOR=blue][FONT=Consolas]True[/FONT][/COLOR][COLOR=black][FONT=Consolas])[/FONT][/COLOR]

dann eine Verbindung erstellen geht so:
Code:
[COLOR=blue][FONT=Consolas]Dim[/FONT][/COLOR][COLOR=black][FONT=Consolas] myConn [/FONT][/COLOR][COLOR=blue][FONT=Consolas]As[/FONT][/COLOR][COLOR=blue][FONT=Consolas]New[/FONT][/COLOR][COLOR=#2B91AF][FONT=Consolas]PLCConnection[/FONT][/COLOR][COLOR=black][FONT=Consolas]([/FONT][/COLOR][COLOR=#A31515][FONT=Consolas]"myVBExample"[/FONT][/COLOR][COLOR=black][FONT=Consolas]) [/FONT][/COLOR]
myConn.Connect()

dann, dein short array kannst du so schreiben:

Code:
 [COLOR=blue]Dim[/COLOR] val1 [COLOR=blue]As[/COLOR] [COLOR=blue]New[/COLOR] Communication.[COLOR=#2b91af]PLCTag[/COLOR]([COLOR=#a31515]"DB161.DBX0.0"[/COLOR])
val1.TagDataType = [COLOR=#2b91af]TagDataType[/COLOR].Int
 val1.ArraySize = 3
val1.Controlvalue = lst
 myConn.WriteValue(val1)
 
Oben