WinCC VBS Vergleich von Variablen falsch funktioniert

AWolf

Level-1
Beiträge
17
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
also hier ist das Stück von dem Code:
Es gibt ein Batchnummer mit dem Format XXXXXX
Es muss das letzte Symbol abgelesen werden und um eins erhöht werden.
Das letzte Symbol darf in dem Bereich 1..9 oder A..Z liegen.
Benutzt wird Chr Tabelle https://www.vbsedit.com/html/c60e2712-20e6-40f2-8fe2-cfb74ca6bca1.asp
Der Vergleich funktioniert aber nicht, der Compiler springt immer in andere Schleife, obwohl die Zahl in einem anderen Bereich liegt.
Was kann man hier machen?
Ich habe schon die Reihenfolge geändert, aber das funktioniert nur teilweise. Heißt, dann werden die anderen Schleifen nicht durchgelaufen.
Gibt es eine sicherere Methode, mit der man den Vergleich durchführen könnte?

Code:
If HMIRuntime.Tags("noCountUp_batchnumber").Read = 1 Then
	VarBatch = HMIRuntime.Tags("batchnumber").Read
	VarLength = Len(VarBatch)
	VarTemp1 = Right(VarBatch,VarLength-5)
	AscVarTemp = Asc(VarTemp1)
	IntTemp = Int(AscVarTemp)  [B]' Hier habe zusätzlich in INT umgewandelt, da dachte dass an dem Problem liegt[/B]
	If IntTemp=57 Then
	    IntTemp = 65  
	    VarTemp1 = Chr(IntTemp)
	Elseif (IntTemp>=1 & IntTemp<49) Or (IntTemp>57 & IntTemp<65) Or IntTemp>=90 Then [B]' Hier springt der immer, egal was ich eingegeben habe[/B]
		MsgBox "The Batch number is in wrong area! " & " VarTemp = " & VarTemp1 & " IntVarTemp = " & IntTemp
		Exit Sub
	Elseif IntTemp>=65 & IntTemp<90 Then
		IntTemp = IntTemp+1
		VarTemp1 = Chr(IntTemp)
 	Elseif IntTemp>=49 & IntTemp<57 Then
		MsgBox "ASCVarTemp zwischen 49 und 57 " & IntTemp
		IntTemp = IntTemp+1
		VarTemp1 = Chr(IntTemp)
 	End If
 	VarBatch = Mid(VarBatch,1,5)& VarTemp1
	HMIRuntime.Tags("batchnumber").Write VarBatch
	Else
	MsgBox "noCountUp = 0" 
End If
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi danke! Was ich blöd finde, dass in VBS bei MsgBox oder Mid z.B. & benutzt wird.
Habe selber neben Or Abfrage & geschrieben :ROFLMAO:
Das Thema kann somit zu
 
Es gibt ein Batchnummer mit dem Format XXXXXX
Es muss das letzte Symbol abgelesen werden und um eins erhöht werden.
Das letzte Symbol darf in dem Bereich 1..9 oder A..Z liegen.
Mit Format XXXXXX meinst Du, dass die Variable 6 Stellen hat???
Mid(var, 1, 5) ist dann gleichbedeutend mit Left(var, 5) und liefert die ersten 5 von 6 Zeichen.
Right(var, len(var)-5) ist gleichbedeutend mit Right(var, 1) und liefert das letzte Zeichen.
Du willst das 6. Zeichen prüfen und um 1 erhöhen.
Was soll denn passieren, wenn das letzte Zeichen vor der Erhöhung '9' ist? Soll es auf 'A' erhöht werden?
Was soll denn passieren, wenn das letzte Zeichen vor der Erhöhung 'Z' ist? Soll es auf '1' erhöht werden?
Was soll mit KleinBuchstaben gemacht werden? Kommentarlos in GrossBuchstaben wandeln und akzeptieren oder "meckern"?

Versuch's mal mit ...
Code:
Const cZeichen$ = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim xVar$, xPos&
xVar$ = "XXXXX0"

xPos& = InStr(cZeichen$, Right$(xVar$, 1))
If xPos& Then
    Mid$(xVar$, 6, 1) = Mid$(cZeichen$, xPos& Mod Len(cZeichen$) + 1, 1)
Else
    Stop ' Fehler, unzulässiges Zeichen! Hier FehlerBehandlung nach Deiner Wahl!
    xVar$ = "FEHLER"
    End If
…, ob das so halbwegs das ist, was Du Dir vorstellst!

Gruss, Heinileini

PS:
Was soll das Programm im Fehlerfall tun? MsgBox mit Meldung und nach dem quittieren was? Business as usual? Aber was wäre das dann?
Ich frage Dir so blöd Löcher in den Bauch, weil ich es nicht schaffe, aus Deinem Code herauszulesen, was Du eigentlich tun willst.
 
Zuletzt bearbeitet:
Hi danke! Was ich blöd finde, dass in VBS bei MsgBox oder Mid z.B. & benutzt wird.
Naja, MsgBox (oder der Text der MsgBox) ist eben ein String-Datentyp - ebenso arbeitet Mid mit Strings.
Insofern ist es logisch das bei Stirngs der &-Operator ([FONT=Verdana, Arial, Helvetica]string concatenation) verwendet wird. Das ist eher als Verkettungs-Befehl und nicht Verknüpfungsbefehl zu sehen.[/FONT]

[FONT=Verdana, Arial, Helvetica]Anderswo bei den logische Verknüpfungen kommt dann AND/OR zum Einsatz. [/FONT]
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt habe ich's durchschaut - glaube ich.

Code:
Const cZeichen$ = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
If HMIRuntime.Tags("noCountUp_batchnumber").Read = 1 Then
    VarBatch = HMIRuntime.Tags("batchnumber").Read

    If Len(VarBatch) <> 6 Then VarBatch = "FEHLEQ"
    xPos& = InStr(cZeichen$, Right$(VarBatch, 1))
    If xPos& > 0 And xPos& < Len(cZeichen$) Then
        Mid$(VarBatch, 6, 1) = Mid$(cZeichen$, xPos& + 1, 1)
    Else
        MsgBox "The Batch number is in wrong area! " & " The last character is '" & Right$(VarBatch, 1) & "' (" & Asc(Right$(VarBatch, 1)) & ")"
        Exit Sub
        End If

    HMIRuntime.Tags("batchnumber").Write VarBatch
Else
    MsgBox "noCountUp = 0"
    End If
… dürfte das sein, was Du haben möchtest.

Gruss, Heinileini

PS:
In dieser Version wird 'Z' vor dem Erhöhen um 1 abgewiesen.
 
Zuletzt bearbeitet:
Zurück
Oben