Step 7 Zahlen zusammen führen

Nessy

Level-1
Beiträge
26
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Mahlzeit aus China,

ich habe folgendes Problem. Von einem Handscanner (Datalogic PM9500) bekomme ich folgende Daten:
Z.B.:
DB18.DBB 9 "Kennnr".KNR_5 ZEICHEN '1'
DB18.DBB 10 "Kennnr".KNR_6 ZEICHEN '2'
DB18.DBB 11 "Kennnr".KNR_7 ZEICHEN '3'
DB18.DBB 12 "Kennnr".KNR_8 ZEICHEN '4'
DB18.DBB 13 "Kennnr".KNR_9 ZEICHEN '5'
DB18.DBB 14 "Kennnr".KNR_10 ZEICHEN '6'
DB18.DBB 15 "Kennnr".KNR_11 ZEICHEN '7'
DB18.DBB 16 "Kennnr".KNR_12 ZEICHEN '8'

diese Werte werden an einen Schrauber übergeben. Läuft.
Aber nun sollen diese Werte auch noch an ein Hallennetz übergeben werden.
Und zwar so:

DB18.DBD 0 "Kennnr".Scanner Kennnummer wurde von EHB übernommen ZEICHEN DW#16#12345678

Ich müsste also die Werte in den DB 18 DBD 0 transferieren. Aber wie?

Das klappt nicht (Skript):

If SmartTags("KNR\KNR_UBERN") = True Then (wird auch true!)
SmartTags("KNR\Kennnr.Scanner") = SmartTags("KNR\Kennnr.KNR_5")& SmartTags("KNR\Kennnr.KNR_6")& SmartTags("KNR\Kennnr.KNR_7")& SmartTags("KNR\Kennnr.KNR_8")& SmartTags("KNR\Kennnr.KNR_9")& SmartTags("KNR\Kennnr.KNR_10")& SmartTags("KNR\Kennnr.KNR_11")& SmartTags("KNR\Kennnr.KNR_12")
End If

If Err.Number <> 0 Then
ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
Err.Clear
Exit Sub
End If

Da sollen die Zahlen (keine Buchstaben) rein:
DB18.DBD 0

OOKII46 jhVD28dLOYYuTxz9HkPXp1iOV1eMpwYEQRAEQRAEQfBc f8DJO1DUBsGKEoAAAAASUVORK5CYII=




Hat jemand eine Idee?

Gruß aus dem kalten Nordchina
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    85,3 KB · Aufrufe: 25
Zuletzt bearbeitet:
Moin Nessy,

Du schreibst im Step7-Forum, hast aber einen Code aus einem WinCC flexible-Script.
Mach es doch einfach in der SPS.
Allerdings willst Du anscheinend 8 Byte in ein 4-Byte breiten Datentypen kopieren (DBD = Doppelwort = 4 Byte)!?

In der SPS:

L DB18.DBD9 // warum eigentlich mit einer ungeraden Byteadresse beginnen?
T DB18.DBD0

L DB18.DBD13
T DB18.DBD4

VG

MFreiberger


Noch ein Hinweis: In Deiner IF-Abfrage fragst Du den Zustand einer boolschen Variablen ab. Aber: die boolsche Variable liefern schon die Bedigungsinformation (TRUE/FALSE). Daher kannst Du auch einfach direkt die Variable abfragen:

Code:
[COLOR=#333333][FONT=Verdana]If SmartTags("KNR\KNR_UBERN")[/FONT][/COLOR][COLOR=#d3d3d3][FONT=Verdana] = True[/FONT][/COLOR][COLOR=#333333][FONT=Verdana] Then (wird auch true!)[/FONT][/COLOR]
[COLOR=#333333][FONT=Verdana]SmartTags("KNR\Kennnr.Scanner") = SmartTags("KNR\Kennnr.KNR_5")& SmartTags("KNR\Kennnr.KNR_6")& SmartTags("KNR\Kennnr.KNR_7")& SmartTags("KNR\Kennnr.KNR_8")& SmartTags("KNR\Kennnr.KNR_9")& SmartTags("KNR\Kennnr.KNR_10")& SmartTags("KNR\Kennnr.KNR_11")& SmartTags("KNR\Kennnr.KNR_12")[/FONT][/COLOR]
[COLOR=#333333][FONT=Verdana]End If[/FONT][/COLOR]
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Nessy,

nachdem dein Handscanner nun anscheinend Funktioniert, willst du nun das Array of Char ( was dein Handscanner dir ja sendet) in ein anderes Format bringen. Evtl solltest du dir bitte mal Überlegen was dein Ziel ist. Sollen die Daten als Dint ? Oder BCd oder Zeichen übertragen werden? Wenn du über ein Dworf gehen willst was du ja hast gehen bei Zeichen nur 4 Rein weil ein Zeichen ein Byte benötigt, willst du eher BCd würde das ganz gut passen weil hier eine Zahl nur einen Nippel 4 Bit braucht.
wenn du über Zeichen (Chars) gehen willst wirst du wohl oder übel noch ein Dword „opfern“ müssen. Evtl wenn es S7 kompatibel bleibt dann wäre wohl ein String das Schönere Format.


Gruß Tia
 
Code:
Dim myZf

If SmartTags("KNR\KNR_UBERN") Then
    myZf = SmartTags("KNR\Kennnr.KNR_5") & SmartTags("KNR\Kennnr.KNR_6") _
         & SmartTags("KNR\Kennnr.KNR_7") & SmartTags("KNR\Kennnr.KNR_8")  _
         & SmartTags("KNR\Kennnr.KNR_9") & SmartTags("KNR\Kennnr.KNR_10") _
         & SmartTags("KNR\Kennnr.KNR_11") & SmartTags("KNR\Kennnr.KNR_12")
    SmartTags("KNR\Kennnr.Scanner") = [COLOR="#0000FF"]CInt[/COLOR](myZf)
End If

Harald
 
DB18.DBD 0 "Kennnr".Scanner Kennnummer wurde von EHB übernommen ZEICHEN DW#16#12345678
1) Das sieht aus, als ob Du den numerischen Wert der Zeichenkette im BCD-Format haben willst. (Anzeige nicht ZEICHEN sondern HEX, Datentyp DWORD)
2) Warum willst Du die Wandlung der Zeichenkette zu DINT in der WinCCflex-HMI machen?
Es ist bestimmt besser, wenn die Wandlung auch dann funktioniert, wenn die HMI nicht angeschlossen ist oder nicht läuft.
Also besser in der SPS programmieren. Da ist es auch einfacher, die Zeichenkette in BCD zu wandeln - da kannst Du die Funktion ATH (FC94) aus den TI-S7 Converting Blocks verwenden:
Code:
CALL  "ATH"  //FC94
 IN     :=P#DB18.DBX9.0
 N      :=W#16#8
 RET_VAL:=#tempWord
 OUT    :=DB18.DBD0

PS:
Falls Du das Ergebnis nicht im BCD-Format sondern einfach dezimal brauchst, dann verwende anstatt ATH die IEC-Standard-Funktion STRNG_DI (FC37)

Harald
 
Zuletzt bearbeitet:
Zurück
Oben