- Beiträge
- 6.686
- Reaktionspunkte
- 1.687
-> Hier kostenlos registrieren
Ja Harald, stimmt. Sorry, hatte ich fälschlich "uminterpretiert".... nicht den 3. Datensatz (Zeile) sondern den 3. Teilstring in der Zeile. ...
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Ja Harald, stimmt. Sorry, hatte ich fälschlich "uminterpretiert".... nicht den 3. Datensatz (Zeile) sondern den 3. Teilstring in der Zeile. ...
Daher stellt sich nicht das Problem, daß HMI-Variablen-Arrays immer bei Index 0 beginnen. Daß er da womöglich 30 unnütze HMI-Variablen zuviel hat (für den im Skript nie vorkommenden Index 0)ja es gibt in der Hmi wirklich die Variablen DB_FZ_Daten_Test_Fahrzeug{0}_FZdaten{0} - DB_FZ_Daten_Test_Fahrzeug{30}_FZdaten{30}![]()
Stimmt ... ist mir gar nicht aufgefallen ... aber Ja : der korrekte und wahrscheinlich auch gemeinte Befehl müßte demnach ASC heißen ...Ich sehe da keine Kommas, das soll doch ein CSV sein? Falls der Bindestrich das "Komma" sein soll: Wie soll das "Y" denn bitte in eine Zahl gewandelt werden?
CByte(Mid(Pin_String,j,1))
SmartTags("DB_FZ_Daten_Test_Fahrzeug{"+CStr(i)+"}_FZdaten{"+CStr(j)+"}") = Mid(Pin_String,j,1)
Pin_String = splitdata(2)
For j=1 To 30 Step 1
if j > Len(Pin_String) Then char = " " Else char = Mid(Pin_String,j,1)
SmartTags("DB_FZ_Daten_Test_Fahrzeug{"+CStr(i)+"}_FZdaten{"+CStr(j)+"}") = char ' ggfs Asc(char), falls SmartTag doch numerisch sein muss
Next
das hört sich schon so an, als wollte er die ASCII-kodierten Zahlen sehen, demnach wäre wie oben schon geschrieben das "CByte" durch "ASC" zu ersetzen,d.h. ich bekomme nur den ersten Char
Der Text ist durch das Forum verstümmelt (mehrfache Leerzeichen werden in der Anzeige entfernt, den original-Text kann man beim Zitieren sehen), in einer Code-Box sieht das so aus:Die CSV sieht folgender maßen aus
550-40-8Y28202172745458ZAAB F4N !
650-30-8Y28202178745458ZAAB F4N !
……
550-40-8Y28202172745458ZAAB F4N !
650-30-8Y28202178745458ZAAB F4N !
……
123456789012345678901234567890 <-- splitdata(2) wird also genau 30 Zeichen enthalten
CByte()
in der j-Schleife. Da die VBS Runtime Errors nicht abgefangen werden (kein On Error Resume Next
vorhanden), heißt das, daß das Skript abgebrochen wird. Möglicherweise kann der OP die Runtime Error Systemmeldungen nicht sehen? (keine Meldeanzeige für Systemmeldungen vorhanden?)CByte()
würde der Code vermutlich das tun was es soll, wenn die HMI-Variablen DB_FZ_Daten_Test_Fahrzeug{0}_FZdaten{1} ... DB_FZ_Daten_Test_Fahrzeug{30}_FZdaten{30} vom Typ Char sind.i=0 ' +--- Ergebnisse in erster Zeile der Datei
' |
Do While Not f.AtEndOfStream '<> True 'String ' v
Line = f.ReadLine
SKID="DB_FZ_Daten_Test_Fahrzeug{"+CStr(i)+"}_SKID_NR" ' "DB_FZ_Daten_Test_Fahrzeug{0}_SKID_NR"
STP="DB_FZ_Daten_Test_Fahrzeug{"+CStr(i)+"}_Stellplatz" ' "DB_FZ_Daten_Test_Fahrzeug{0}_Stellplatz"
splitdata = Split(Line, "-")
SmartTags(SKID) = CInt(splitdata(0)) ' SmartTags("DB_FZ_Daten_Test_Fahrzeug{0}_SKID_NR") = 550
SmartTags(STP) = CInt(splitdata(1)) ' SmartTags("DB_FZ_Daten_Test_Fahrzeug{0}_Stellplatz") = 40
Pin_String = splitdata(2) ' Pin_String = "8Y28202172745458ZAAB F4N !" (das sind genau 30 Zeichen)
For j=1 To 30 Step 1
SmartTags("DB_FZ_Daten_Test_Fahrzeug{"+CStr(i)+"}_FZdaten{"+CStr(j)+"}") = CByte(Mid(Pin_String,j,1))
Next ' SmartTags("DB_FZ_Daten_Test_Fahrzeug{0}_FZdaten{1}") = CByte("8")
' SmartTags("DB_FZ_Daten_Test_Fahrzeug{0}_FZdaten{2}") = CByte("Y") --> RT Error
' ...
' SmartTags("DB_FZ_Daten_Test_Fahrzeug{0}_FZdaten{30}") = CByte("!") --> RT Error
i=i+1
Loop
CInt()
ist unnötig, das würde der VBS-Code sowieso machen, wenn die HMI-Variable ein Int ist.CByte()
wird der Code beim "Y" in Runtime Error gehen! For j=1 To 30 Step 1
SmartTags("DB_FZ_Daten_Test_Fahrzeug{" & CStr(i) & "}_FZdaten{" & CStr(j) & "}") = Mid(Pin_String,j,1)
Next
Split(Line, "-")
wird nicht überwacht).Wie soll das "Y" denn bitte in eine Zahl gewandelt werden?
CByte(Mid(Pin_String,j,1))
Einfach auf jegliche Umwandlung verzichten, wenn doch eigentlich nichts gewandelt, sondern nur zerlegt werden muss/soll.
Code:SmartTags("DB_FZ_Daten_Test_Fahrzeug{"+CStr(i)+"}_FZdaten{"+CStr(j)+"}") = Mid(Pin_String,j,1)
Soll es offensichtlichIch sehe da keine Kommas, das soll doch ein CSV sein? Falls der Bindestrich das "Komma" sein soll: ...
und ich hatte es vor Deinem Hinweis auch regelmässig nicht zur Kenntnis genommen.Code:splitdata = Split(Line, "-")
Falls jemand mein Problem doch noch irgendwie gelöst bekommt wäre toll da ich den seperaten DB den ich jetzt verwende bei unseren Kunden Anmelden muss und das eine Bewertungsschleife nach sioch zieht die ca 6 Wochen dauert.
Man muß dafür keinen separaten DB verwenden. Dürftest Du denn wenigstens an den originalen DB nur für die Übergabe vom HMI hinten eine zusätzliche Struktur anhängen? (falls das Weglassen des CByte() nicht Deine Lösung ist)das mit der String Übergabe in der SPS war meine letzte option wollte eigentlich alles an einem Ort haben. Die String übergabe funktioniert auch habe das schon getestet. Es ist halt nur unschön nen Sepreaten DB dafür zu nutzen da der org. DB von der Strucktur nicht verändert werden darf.
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen