# MP277 Protokoll auf USB & PW-Level HMI zu SPS



## Springbock (21 Dezember 2009)

Hallo zusammen.

Das Forum konnte mir bereits in vielen Problemen behilflich sein, jedoch bei diesen zwei Fragen wurde ich nicht noch nicht fündig:

Ich würde gerne einen Chargentrennung auf einen USB-Stick protokolieren. Es sollte die Füllmenge dokumentiert werden, welche der Tankwagen gebracht hat. Zusätzlich sollte die BATCH-Nr., die Uhrzeit & das Datum zu der jeweiligen Füllmenge protokoliert werden.

Das Protokoll sollte ca. so Aussehen

Batch NR. Datum Uhrzeit Füllmenge
002 21.12.09 15:00 5000
001 20.12.09 14:00 4800


Diese Daten sollten immer nach dem Befüllen des Tanks auf dem USB-Stick gespeichert werden. Z.B. auf die Flanke der Vollmeldesonde oder nach dem beenden des Füllprogramms.
Am liebsten als CSV sonst als Text-Datei auf dem USB-Stick, der am Panel angeschlossen ist.

Ich habe das Forum nach ähnlichen Problemen durchsucht, konnte jedoch nichts Passendes finden. Nun meine Frage. Geht das überhaupt? Wenn ja, wie mache ich das am besten. 


Meine zweite Frage ist:
Ich würde gerne das PW-Level, das gerade auf dem HMI aktiv ist, der SPS übergeben. Z.B. Administrator PW-Level 9. Gibt es eine Variable „Passwortlevel“ und wie übergebe ich deren Inhalt der SPS?

System Info:

CPU Speed 7(VIPA), MP277 10“ Touch, WinCC Flex 2008 SP1, USB-Stick am HMI


----------



## Blockmove (21 Dezember 2009)

Das MP277 ist scriptfähig.
Damit kannst du CSV-Dateien erstellen und auch auf einen Stick kopieren.
Zu beachten ist eigentlich "nur", dass das MP unter Windows CE läuft und somit die Script-Befehle zum File-Zugriff andere sind als bei der PC-Runtime.
Hier im Forum findest du Beispiele dazu.
Schau mal hier:
http://www.sps-forum.de/showthread.php?t=3028

Gruß
Dieter


----------



## Springbock (22 Dezember 2009)

Vielen Dank für den Link, Ich muss leider sagen, kenne mich wenig bis überhaupt nicht aus in VB, könntest du mir vielleicht noch diese Fragen beantworten? 

Dim f,fs,datei,datum,laenge

Set f= CreateObject("filectl.file")
Set fs = CreateObject("filectl.filesystem")

'abfrage ob ein verzeichnis existiert
'If fs.dir("storage card2\daten") = "" Then fs.mkdir("storage card2\daten")

datei="storage card2\Log_Hydrowatt.csv"
datum="20"&Right(Date,2)&"."&Mid(Date,4,2)&"."&Left(Date,2)

If fs.dir(datei) = "" Then 
    f.open datei, 2 <= Was bedeuetet diese "2"
    f.LinePrint "Statistik Hydrowatt HD-Pumpe"
    f.LinePrint "Datum (JJJJ.MM.TT);"&"Uhrzeit;"&"Schaltspiele;"&"Betriebsstunden [h];"&"Pumpe auf Druck [h];"&"Bollfilter"
    f.LinePrint "Datum;"&"Zeit;"&"Schaltsp.;"&"Betr.Std[h];"&"P.auf Druck[h];"&"Bollfilter"
    f.Close
End If

f.open datei, 8 <= Was bedeuetet diese "8"
f.LinePrint Datum&";"&Time&";"&Schaltspiele_Hydrowatt_täglich&";"& Betriebsstunden_hydrowatt_heute&";"& Betriebsstunden_hydrowatt_druck_heute&";"&Schaltspiele_Bollfilter_täglich 

f.Close

Wie ist der Intervall dieser Aufzeichnung definiert, erkenne dies anhand dieses Codes nicht.

Mersi


----------



## rostiger Nagel (22 Dezember 2009)

Hallo Springbock,
der volker hat das hier mal schön erklärt: http://www.sps-forum.de/showthread.php?t=15348

*dateimodus
*1 = lesen
2 = schreiben
8 = anhängen

gruß helmut


----------



## Blockmove (22 Dezember 2009)

Springbock schrieb:


> Wie ist der Intervall dieser Aufzeichnung definiert, erkenne dies anhand dieses Codes nicht.


 
Du musst das Script durch irgendein Ereignis aufrufen. Entweder zeitgesteuert oder per Taste oder Variablenwertänderung. Damit legst du Zeitpunkt und Häufigkeit fest.

Gruß
Dieter


----------



## Springbock (23 Dezember 2009)

muss zugeben, habe etwas mühe mit dem Skript, habe mich bis jetzt einfach zu wenig mit VB auseinander gesetzt. 

Deshalb bin ich mal auf die Siemens-Hompage und habe dieses Beispiel heruntergeladen:

Das Skript rufe ich per Button auf. Anzeigen möchte 3x mal die Variable DB100 DBW100, habe sie auch so benannt im WinCC Flex

Hier nochmals einige Fragen, vielleicht könnt ihr mir nochmals helfen.

Beispiel Siemens das ich ein wenig angepasst habe (Anstatt Memory-Card habe ich den USB Stich als Ablageort gewählt)

Dim fs, f, FName, Dataset, Header, Storage_Path, strName, strTemp, arr, strDir

' Ablagepfad festlegen 
' Define Storage path
Storage_Path = "\Storage Card USB\" <= Habe ich den Pfad USB-Stick richtig definiert, weil wenn ich den Button drücke, habe ich das Gefühl USB-Stick wird nicht angesprochen (USB mit LED, sollte doch zumindest blinken wenn er zugreifft?) 

' Archivierungspfad (Eingangsparameter) und Dateiname zusammensetzen -> Archiv_01_d_m_yyyy

' Combine archivepath (input parameter) and filename -> Archiv_01_d_m_yyyy
FName = Storage_Path & "\Archiv_" & CStr(DatePart("d",Date)) & "_" & CStr(DatePart("m",Date)) & "_" & CStr(DatePart("yyyy",Date)) & ".csv"<= Dieser Archivierungspfad sollte ja generiert werden, habe ich so 1:1 von Siemens, geschieht jedoch nicht, denke aber das Problem liegt bei der Frage 1 von mir

der Rest des Skripts muss ich ja noch nicht beachten, da bereits der Zugriff auf den Stick und generierung des Ablagepfad nicht korrekt ausgeführt werden.
' Tabellenkopf zusammenstellen 
' Create table header 
Header = "Storage time;DB 100 DBW_100;DB 100 DBW_100;DB 100 DBW_100" & Chr(10)

' FileSystemObject erstellen
' Create FileSystemObject
Set fs = CreateObject("FileCtl.FileSystem") 

' Prüfen ob eine MMC Karte vorhanden ist
' Checking if a MMC Card available
strDir = fs.dir ("\Storage Card USB") 
If strDir = "" Then 'Ablagepfad nicht vorhanden / directory not exists, card not available
Call ShowSystemAlarm ("Keine Speicherkarte vorhanden / No Storage-Card available")
Else

'Prüfen ob Ablagepfad vorhanden, wenn nicht -> erzeugen.
'Checks storage path availably, if not -> create
Script_Storage_Path Storage_Path ' Übergabe des Ablagepfades aus dem Script "Script_Storage_Path" / Handing over of the storage path from the script "Script_Storage_Path"

' FileObject erstellen
' Create FileObject
Set f = CreateObject("FileCtl.File")
' Datei öffnen bzw. erstellen, wenn sie noch nicht existiert
' Open File or create file if it does not exist 
f.open FName, 8

' Wenn Datei 0 Byte groß, dann ist sie neu
' If file is 0 byte the file is new
If fs.FileLen(FName) = 0 Then 
f.lineprint(Header)
' =0 => Tabellenkopf muss eingefügt werden
' =0 => Table header must be inserted
End If 

' Werte der Variablen in die Archivdatei schreiben (Tag_x)
' Write values of variables in archive file (Tag_x)
Dataset = CStr(Now) & ";" & CStr(SmartTags("DB 100 DBW_100")) & ";" & CStr(SmartTags("DB 100 DBW_100")) & ";" & CStr(SmartTags("DB 100 DBW_100")) 'Create the Dataset'

f.LinePrint(Dataset) 'Write the Dataset in File' 
f.Close 'Datei wieder schließen / Close File' 
End If


----------



## rostiger Nagel (23 Dezember 2009)

Laut WinFlex hilfe sollte eine Datei angabe so sein


> Wenn Sie als Ablageort eine Speicherkarte verwenden, dann geben Sie den Ablageort wie folgt an: "\StorageCard\<Dateiname>".


 
Dann habe ich mal einen Stick bei mir ins Panel gesteckt und mal geschaut
wie die Bezeichnung aus CE aussieht, da steht dann


> Storage Card USB


 
vlt. musst du das USB anhängen

wie du es vor deiner Änderung noch nicht geschrieben hattest


----------



## Springbock (23 Dezember 2009)

mir ist nicht ganz klar was du meinst

vorlage siemens:

' Prüfen ob eine MMC Karte vorhanden ist
' Checking if a MMC Card available
strDir = fs.dir ("\Storage Card MMC")

Nun habe ich das MMC einfach durch USB ersetzt. (Pfad noch kontroliert bei meldearchiv = \Storage Card USB\)

aber funktioniert einfach nicht.


----------



## rostiger Nagel (23 Dezember 2009)

ich hab jetzt gerade mal beim PC System probiert da wird die Pfadangabe
mit Laufwerksbuchstaben gemacht. MP277 muß ich gerade noch einmal forschen.


----------



## McMeta (23 Dezember 2009)

war der stick beim startet des panels gesteckt?
wenn nein, probier das mal. hatte auch erst probleme das der stick nicht erkannt wurde wenn er nachträglich gesteckt wurde.
dies wird aber komischerweise behoben wenn man dann einmal unter win ce in der eingabeaufforderung auf den stick zugreift


----------



## Springbock (23 Dezember 2009)

Habe ich ausprobiert, wars aber nicht.


----------



## rostiger Nagel (23 Dezember 2009)

vielleicht solltest du dich vom Siemens Beispiel trennen.
Versuche doch erstmal mit einer Systemfunktion Daten auf deinen Stick
zu schreiben. Als Beispiel, erstelle ein Rezept und Exportiere dieses mit
der Systemfunktion "Exportiere Datensatz" auf deinen Speicherstick.

Wenn das Funktioniert wissen wir erstmal das der Speicherstick
mit dem Panel arbeitet. Dann vlt. mit Beispiel von Volker aus dem
FAQ einfach erstmal einen Text in eine Datei schreiben.


----------



## Springbock (23 Dezember 2009)

habe ich schnell probiert und das funktioniert. ich habe Bitmeldungen auf den Stick gespeichert. Dies funktioniert wunderbar


----------



## rostiger Nagel (23 Dezember 2009)

Dann ist doch wahrscheinlich ein bock in deinem script, sind wir doch
schon einmal einen schritt weiter.


----------



## Springbock (23 Dezember 2009)

so es funktioniert

("\Storage Card USB") <= so steht es jetzt im skript

vorhin hatte ich ("\Storage Card USB\")

trozdem danke Helmut

hoffe kann dir auch einmal behilflich sein


----------

