2016-08-05 8 views
0

Ich entwickle eine Anwendung in VB 2010, wobei ich einen Befehl an die SPS über die serielle Schnittstelle senden und die Daten von PLC in String erhalten.Trennen von Strings fester Länge von dynamischen String Vb.net

Ich habe entfernt unerwünschte Inhalte der Zeichenfolge von der SPS empfangen und die endgültige Zeichenfolge in ReturnStr als unten:

Dim WriteStr, ChkWrite As String 
Dim ReadStr, ReturnStr, ChkRecd, ChkCalc As String 
Dim ChkComp As Integer 

    WriteStr = String.Concat("01", cmd, Add, Points) 
    ChkWrite = Check(WriteStr) 

    Try 
     sp.WriteLine(":" & WriteStr & ChkWrite & vbCr) 
     ReadStr = sp.ReadLine() 
    Catch ReadErr As Exception 
     Return "0" 
    End Try 

    ChkRecd = ReadStr.Substring((((CInt("&H" & Points)) * 4) + 7), 2) 
    ChkCalc = Check(ReadStr.Substring(1, ((Len(ReadStr) - 4)))) 
    ChkComp = String.Compare(ChkRecd, ChkCalc) 

    If ChkComp <> 0 Then 
     Return "0" 
    End If 

    ReturnStr = (ReadStr.Substring(7)).Remove(CInt("&H" & (Points)) * 4) 
    Return ReturnStr 

ReturnStr kehrt String etwas wie 006600D000C9006D0013B003A00014C00349, die ich in die Menge geteilt werden soll von Jeweils 4 Zeichen.

Meine Frage ist ReturnStr Daten von unbestimmter Länge (in Vielfachen von 4) enthalten kann, so wie gehe ich über die Spaltung Strings aus solchen String und Anzeigewert jeder Teilkette in Etikett in Form wie folgt aus:

lblPt1.Text = CInt("&h" & (ReturnStr.Substring(0, 4))) 
lblPt2.Text = CInt("&h" & (ReturnStr.Substring(4, 4))) 
lblPt3.Text = CInt("&h" & (ReturnStr.Substring(8, 4))) 
lblPt4.Text = CInt("&h" & (ReturnStr.Substring(12, 4))) 
lblPt5.Text = CInt("&h" & (ReturnStr.Substring(16, 4))) 
lblPt6.Text = CInt("&h" & (ReturnStr.Substring(20, 4))) 
lblPt7.Text = CInt("&h" & (ReturnStr.Substring(24, 4))) 
lblPt8.Text = CInt("&h" & (ReturnStr.Substring(28, 4))) 
+5

Es gibt [einige] (http://stackoverflow.com/questions/8774392/how-to-split-a-string-by-x-amount-of-characters) [Beispiele] (http://stackoverflow.com/questions/7376987/how-to-split-a-string-into-a-fixed-length-string-array) [in] (http://stackoverflow.com/questions/30385540/how-do -i-split-a-string-alle-7-zeichen-in-vb? noredirect = 1 & lq = 1) die Website. –

Antwort

0
Dim s = "006600D000C9006D0013B003A00014C00349" 
Dim a = From i In Enumerable.Range(0, s.Length \ 4) Select Mid(s, i * 4, 4) 

aktualisieren

Für die aktualisierte Frage

Dim labels = { lblPt1, lblPt2, lblPt3, lblPt4, lblPt5, lblPt6, lblPt7, lblPt8 } 
' or query them from Me.Controls.OfType(Of Label) or just use ListBox or better conrol 
ReturnStr = ReturnStr.PadRight(labels.Length * 4) 

For i = 0 To labels.Length - 1 
    labels(i).Text = Val("&h" & Mid(ReturnStr, i * 4, 4)) 
Next 
Verwandte Themen