Step 7 Eingabefeld TP1200 nur Zahlen und Buchstaben erlauben, keine Sonderzeichen

DennisBerger

Level-2
Beiträge
474
Reaktionspunkte
63
Zuviel Werbung?
-> Hier kostenlos registrieren
Eingabefeld Barcodescan auf Zahlen, Buchstaben, Sonderzeichen auswerten

Titel
Eingabefeld Barcodescan auf Zahlen, Buchstaben, Sonderzeichen auswerten

Hallo,
wir scannen einen Barcode in ein Eingabefeld und weisen den Scan dann einer Variable per Schaltfläche manuell zu.
(3 scans für Auftragsnummer, Artikelnummer, Stückzahl)


Beispiel für 3 Werte die gescannt und manuell zugewiesen werden:
Auftragsnummer (immer nur Zahlen): 1412020
Stückzahl (nur Zahlen): 1000
Artikelnummer (alles): Typ-1KE 3/8

wenn der Bediener aber den Artikelnummer-Scan der falschen Variable (Stückzahl oder Auftragsnummer) per Schaltfläche zuordnet weil er sich nach dem Scan am Display verklickt, soll das vom SPS Programm / Display bemerkt werden und ein Merker gesetzt werden...
entweder Fehlermeldung oder Zuweisung nicht möglich.


Screenshots:

Ein-Ausgabefeld für den Barcodescan (string)
barcodefeld.JPG

Ausgabefeld bzw Variable in welche der obige gescannte Barcode per touchbutton zugeordnet wird
Auftragsnummer:
Auftragsnummer.JPG


die Übertragungs des Scans vom USB Barcodeleser an die entsprechende Variable wird momentan rein über WinCC erledigt.
siehe screenshots von den Eigenschaften der Schaltflächen für die Zuweisung:

barc-1.JPG

barc-3.JPG


Hardware:
S7-300
TP1200

Software
Step7 V5.6
WinCC V13

Wie kann man das am besten umsetzen?

danke schon mal

editiert, da Auftragsnummer nun doch auch nur aus Zahlen besteht.
 
Zuletzt bearbeitet:
Hallo Dennis,

was hälst du von ...

+ Aufruf eines Scripts bei Wertänderung von "Barcode"
+ Im Script wird der String "Barcode" auf Gültigkeit geprüft und automatisch der richtigen Zielvariable zugewiesen
(Setzt natürlich voraus, dass Auftragsnummer und Artikelnummer eindeutig formatiert sind)


Gruß, Fred
 
Zuviel Werbung?
-> Hier kostenlos registrieren
danke, ja ich denke mit script würde das gehen..
das script müsste dann prüfen:

dass bei Variable
"Stückzahl " nur Zahlen sind
und bei
"Auftragsnummer " bzw Planauftrag nur Zahlen und Buchstaben bzw keine Sonderzeichen..
(Artikelnummer wäre ja egal)

wenn das korrekt ist, denn string aus Barcode dann in die jeweilige Variable schieben.
wie hier
barc-3.JPG

ich kenne mich mit scripten aber leider nicht aus.. wüsste nicht wie ich das machen soll..

wenn da jemand mir helfen könnte wäre das super.
 
Zuletzt bearbeitet:
Hallo Dennis,

dass bei Variable
"Stückzahl " nur Zahlen sind
und bei
"Auftragsnummer " bzw Planauftrag nur Zahlen und Buchstaben bzw keine Sonderzeichen..
(Artikelnummer wäre ja egal)

eine letzte Frage: Enthält die Artikelnummer IMMER mindestens EIN Sonderzeichen?
Wenn ja, dann hier auf die Schnelle mal ein paar VBScript-Befehle/Code-Fragmente, die zur Anwendung kommen würden:

+ IsNumeric(Barcode) -> prüft, ob der Inhalt von "Barcode" eine Zahl ist => wenn ja, dann Zuweisung zu "Stückzahl"
+ For-Schleife (Index z.B. 'charNo'), in der mit specialChars = "/#*+-'?%$§"!():," und InStr(Barcode, Mid(specialChars, charNo, 1)) > 0 der Inhalt von Barcode auf vorhandene Sonderzeichen geprüft wird => wenn nein, dann Zuweisung zu "Auftragsnummer"
+ alle anderen Barcode-Inhalte => Zuweisung zu "Artikelnummer"


Gruß, Fred
 
Hi Fred,
sorry für späte Antwort und danke für deine Hilfe..

hab mich heute nochmal schlau gemacht...
also im Barcodescan der Auftragsnummer und der Stückzahl stehen immer nur Zahlen.
Nur bei Artikelnummer sind Buchstaben und Zeichen beim Barcodescan vorhanden, diese dürfen dann nach dem scan nicht der Auftragsnummer oder der Stückzahlvariable zuweisbar sein.

Auftragsnummer & Stückzahl = Zahlen
Artikelnummer: Buchstaben + Zahlen + Zeichen

Es muss nur ausgeschlossen werden, dass der Bediener die Artnr falsch zuweist, andersrum ist nicht so wichtig.

Kannst mir da weiterhelfen?

das mit den Schaltflächen und manueller Zuweisung soll bestehen bleiben.
Es wird also in ein Ein-Ausgabefeld gescannt und der Wert dann jeweils für sich der Variable Stueckzahl, Artikelnummer, Auftragsnummer zugewiesen. (es wird also auch 3x gescannt)

Wenn der Bediener fälschlicherweise die gescannte Artikelnummer an die Variable Stückzahl oder Auftragsnummer zuweisen will, soll das Script den Fehler bemerken und einen Merker setzen

danke dir
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen Dennis.

Auftragsnummer & Stückzahl = Zahlen
Artikelnummer: Buchstaben + Zahlen + Zeichen
Detailfrage hierzu: Sind die Ziffern der Auftragsnummer nach einem bestimmten Muster formatiert?

das mit den Schaltflächen und manueller Zuweisung soll bestehen bleiben.
Hat dies einen bestimmten Grund? Gerade diese manuelle Zuweisung kann doch fehlerhaft sein...

Wenn der Bediener fälschlicherweise die gescannte Artikelnummer an die Variable Stückzahl oder Auftragsnummer zuweisen will, soll das Script den Fehler bemerken und einen Merker setzen
Wenn es also wirklich nur darauf ankommt, in der Artikelnummer und der Stückzahl Buchstaben und Sonderzeichen zu verhindern, dann reicht "IsNumeric".


Gruß, Fred
 
Hi Fred,

Auftragsnummer ist meistens 6 oder mehrstellig also zb 238789 oder

Stückzahl normalerweise 2-4 stellig (pro Auftrag) also 10-9999 (könnte aber in Ausnahmen eventuell auch mal max 5 stellig sein)

Artikelnummer immer ähnliches Muster wie T12-3/8-A

Momentan ist es so, dass wenn der Bediener die Stückzahl oder Auftragsnummer falsch in die Artikelnummer zuweist, das Programm nicht startet, da im TP1200 eine csv datei hinterlegt ist in der die Programmparameter mit der Artikelnummer hinterlegt sind, diese würde dann nicht gefunden werden und der Ablauf nicht starten.


Ideal wäre natürlich wenn das Script alleine erkennen würde wo welcher Scan in welche Variable zugewiesen werden muss.
also wenn es ein Abfrage geben würde wie zb
numeric und kleiner als 6 Stellen -> schreibe Scan in Variable Stückzahl
numeric und grösser/gleich als 6 Stellen -> schreibe Scan in Variable Auftragsnummer
numeric + alpha -> schreibe Scan in Variable Artikelnummer

wenn mir da weiterhelfen könntest wäre das klasse...

ideal wären beide Möglichkeiten ... also einmal nur manuell wie bisher über Schaltflächen und isnumeric
und einmal die automatische Übertragung wie in diesem Post hier.
(ich weiss nämlich nicht ob die Prod.Manager eine Änderung des Bedienungsablaufs akzeptieren, deshalb vielleicht beide Möglichkeiten)

vielen vielen dank schon mal

:sm24:
 
Zuletzt bearbeitet:
numeric und kleiner als 6 Stellen -> schreibe Scan in Variable Stückzahl
numeric und grösser/gleich als 6 Stellen -> schreibe Scan in Variable Auftragsnummer
numeric + alpha -> schreibe Scan in Variable Artikelnummer

wenn mir da weiterhelfen könntest wäre das klasse...
:confused:
Echt jetzt?

Ungefährer Algoritmus:
Code:
If IsNumeric(Eingabe) then
   If Eingabe < 100000 then
      // Zuweisung Stückzahl
      Stückzahl = Eingabe
   else
      // Zuweisung Auftragsnummer
      Auftragsnummer = Eingabe
   end if
else
   // Zuweisung Artikelnummer
   Artikelnummer = Eingabe
end if
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi hucki und Fred

hab leider kaum Erfahrung in VB :(
hatte das komplizierter gedacht als das script von dir dann letzendlich wirkt, dachte brauche zb move oder copy anstatt nur dem = bei der Übertragung..


edit: mein Fehler gefunden..
probiere ich (nochmals) aus jetzt
 
Zuletzt bearbeitet:
Muss mich nochmal melden,
leider sind nun an einer Anlage doch zwei Produkte aufgetaucht welche bei Artikelnummer nur Zahlen haben... :rolleyes: soviel zu "alles genormt..."

nun möchte ich diese 2 ausklammern per script..
hab auch mal gegoogelt nach VB script usw.. und ausprobiert....
aber irgendwie funktioniert es nicht..
syntax fehler beim Übersetzen kommt keiner... aber ich vermute es liegt an meiner and not und or ..
das war aber das einzige was ich im web gefunden habe.. sind wahrscheinlich die falschen Codes.. ?

vielleicht könnt ihr ja das u.s. script korrigieren..

danke

Die Artikelnummern sind 03336 und 5072114000000

Code:
If IsNumeric(Barcode) Then   
If Barcode < 10000 And Not 03336 And Not 5072114000000  Then
      Stueckzahl = Barcode    
  Else


   If Barcode >10000  And Not 5072114000000  Then
      Auftragsnummer = Barcode
Else


   If Barcode = 03336  Or 5072114000000 Then
       Artikelnummer = Barcode
    
End If
End If
End If

Else
   Artikelnummer = Barcode 
 
End If


End Sub
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
...Die Artikelnummern sind 03336 und 5072114000000...
Nicht so unnötig kompliziert:
Code:
If IsNumeric(Barcode) Then   
   If Barcode = 03336 Or Barcode = 5072114000000  Then
      Artikelnummer = Barcode
   ElseIf Barcode < 100000 Then
      Stueckzahl = Barcode
   Else
      Auftragsnummer = Barcode
   End If
Else
      Artikelnummer = Barcode
End If

PS:
Die führende 0 beim ersten Artikelnummer-Vergleich ist überflüssig.
Eventuell musst Du prüfen, ob sie ggf. überhaupt mit in die Artikelnummer eingetragen wird.
Falls nicht (was ich vermute), muss sie dort mit rein?
 
Zuletzt bearbeitet:
danke hucki
probier ich gleich mal aus...

hab eben solange meinen code geändert und ausprobiert.. das mit and not ist wohl falsch..

hier mein nun funktionierender (und komplizierterer Code):
Code:
If IsNumeric(Barcode) Then   
If Barcode < 10000 And Barcode <> 03336 And Barcode <> 5072114000000 Then
       Stueckzahl = Barcode
    
  Else
   If Barcode > 10000 And Barcode <> 03336 And Barcode <> 5072114000000 Then
       Auftragsnummer = Barcode
Else
   If Barcode = 03336  Or Barcode = 5072114000000 Then
       Artikelnummer = Barcode
    
End If
End If
End If
   
Else
   Artikelnummer = Barcode

End If


End Sub

Wäre das prinzipiell auch okay?


ich probiere jetzt aber mal deinen kürzeren Code aus,

danke dir.


P.s. wegen der 0
im Barcode wird sie eingelesen.
Wir haben eine csv Datei als Rezeptur in der auch die Art Nummer so drin steht also 03336, in dieser sind dann alle Parameter und Zeiten hinterlegt.
Per Barcode wird vom Auftrag dann die Art. Nummer gescannt und mit der CSV Datei verglichen ob der Artikel vorhanden ist..
deshalb müssen die gleich sein.. sonst kommt "Datensatz nicht vorhanden" Fehler.
In der csv Datei ist diese Zelle als "Text" formatiert, da Excel ansonsten die 0 löschen würde.
Wenn du dazu Tipps oder Hinweise hast, gern her damit ;)

danke
 
Zuletzt bearbeitet:
Wäre das prinzipiell auch okay?
Prinzipiell ist erst mal alles okay, was funktioniert.


Du solltest natürlich aber auch mit zeitlichem Abstand noch nachvollziehen können, was Du da gemacht hast.
Und da hilft "möglichst einfach" ungemein.
;)


Da is' übrigens noch ein PS für die Optik der Artikelnummer:
Die führende 0 beim ersten Artikelnummer-Vergleich ist überflüssig.
Eventuell musst Du prüfen, ob sie ggf. überhaupt mit in die Artikelnummer eingetragen wird.
Falls nicht (was ich vermute), muss sie dort mit rein?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das stimmt... irgendwann blick ich es nicht mehr.. ich war ja froh, dass es läuft :D
ist schon interessant wie man vorher kompliziert denkt und dann einen schönen code wie von dir sieht und sich sagt: hmm ist doch logisch und einfach eigentlich..
:cool:

mein ps. von oben:
P.s. wegen der 0 bei zb Art Nr. 03336
im Barcode auf dem Auftragsblatt für den Bediener ist sie vorhanden und wird so eingelesen.
Wir haben eine csv Datei als Rezeptur in der auch die Art Nummer so drin steht also 03336, in dieser sind dann alle Parameter und Zeiten hinterlegt.

Per Barcodeleser wird bei einem neuen Auftrag vom Auftragsblatt dann die Artikel Nummer, Stückzahl, Auftragsnummer gescannt und in der HMI mit der CSV Datei verglichen ob die Artikelnummer vorhanden ist und die Parameter für die Anlage geladen.

deshalb müssen die gleich sein.. sonst kommt "Datensatz nicht vorhanden" Fehler.

In der csv Datei ist diese Zelle als "Text" formatiert, da Excel ansonsten die 0 löschen würde.

Wenn du dazu Tipps oder Hinweise hast, gern her damit :wink:

danke
 
Zuletzt bearbeitet:
Momentan trägt es die 0 mit ein
also ich scanne den Barcode 03336
und im Eingabefeld des Barcodescan steht 03336
(früher hat dann der Bediener dies manuell per Schaltfläche der Artikelnummer zugewiesen, dadurch passierten aber Fehler)

Nun durch das Script von dir wird immer automatisch alles den 3 Variablen zugewiesen. echt perfekt.

die 0336 wird dann auch so der Variable Artikelnummer 03336 im Ausgabefeld auf dem Display angezeigt.

Beobachtungstabelle
Code:
"DB_Barcode".Artikelnummer    P#DB630.DBX32.0    String    '03336'
 
Ja wunderbar... dann kann ich jetzt Feierabend machen und Urlaub :D

danke nochmal an alle :s12:

und schon mal frohe Weihnachten. ;) :sm24:
 
Zuletzt bearbeitet:
Du könntest den Code vermutlich sogar noch weiter zusammen fassen:
Code:
If Barcode = 3336 Or Barcode = 5072114000000 Or NOT IsNumeric(Barcode) Then
   Artikelnummer = Barcode
ElseIf Barcode < 100000 Then
   Stueckzahl = Barcode
Else
   Auftragsnummer = Barcode
End If
 
Zurück
Oben