hilfe für vbs neuling

el_bob

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo und guen tag @all,

ich bin noch komplett neu in vbs, hab mich aber schon ein paar tage mit vba beschäftigt.

ich habe folgende aufgabe zu lösen: über wincc flexible müssen werte aus einer s7 gelesen werden und in csv format gespeichert werden.diese csv daten werden in ein vorbereitetes excel protokoll eingelesen und dann gedruckt.

das problem ist jetzt, das die werte aus der s7 schwanken können. d.h. mal werden 12 ausgelesen, mal 50 oder 49. das kann beliebig angegeben werden und ist auch zweckmäßig.

ich müsste also nun einen code in vbs schreiben der (vermutlich mit einer schleife) die werte nimmt, in cvs format speichert, und das vorbereitete excel dokument öffnet, also einfach auf den speicherort zugreift. von da ab komm ich allein weiter.

hat jemand von euch einen vorschlag wie der code in vbs aussehen müsste? und wäre es sinnvoll wenn meine werte ein array wären auf das vbs zugreift? :confused:

hoffe auf eure hilfe, denn meine schleifen funktionieren nicht!!

schöne grüße

sascha
 
... ich persönlich halte den Weg, dass zu zeigen, was man hat und daran weiter zu arbeiten für den besseren Weg - vor Allem in diesem Fall ...
Wenn also deine Routinen, die du geschrieben hast, nicht funktionieren dann stell sie uns doch mal vor und dann sehen wir weiter ...
Gut ist es auch immer, wenn man konkrete Fragen stellt ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dim i,s, fso,f,ts,DataSet,FName

For Each i In SmartTags("Variable_2")
s=s&i+1
FName="d:\"+CStr(Date)+".csv"
DataSet = CStr(Now)+","+CStr(Variable_2) 'Variable_2 ist als array hinterlegt
Set fso =CreateObject("Scripting.FilesystemObject)
If Not fso.FileExists(FName) Then
fso.CreateTextFile FName
End If
Set f = fso.GetFile(FName)
Set ts = f.OpenAsTextStream(8,-2)
ts.WriteLine DataSet
ts.close
Next
Set ts = Nothing
Set f = Nothing
Set fso = Nothing


das ist der code den ich zu letzt geschrieben hab. war aber mehr oder weniger ein versuch. konnte ihn auch noch nicht ausprobieren, da ich grad kommunikationsprobleme zwischen wincc flexible und dem simatik manager hab.

konkrete frage......
wie gebe ich eine von betätigung zu betätigung schwankende anzahl von messwerten in eine csv datei aus?
 
... ich würde die Anzahl von Daten als Variable mit übergeben - braucht du sowieso, damit du die DataSet-Variable korrekt beschreiben kannst :
Code:
[FONT=Times New Roman][SIZE=3]DataSet = CStr(Now) & ";"[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]for i = 1 to Anzahl[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]   DataSet = DataSet & [/SIZE][/FONT][FONT=Times New Roman][SIZE=3]CStr(Variable_2(i)) & ";"[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]next[/SIZE][/FONT]
was willst du mit dieser Zeile :
Code:
[FONT=Times New Roman][SIZE=3]For Each i In SmartTags("Variable_2")
s = s & i+1[/SIZE][/FONT]
vom Code her würde ich für den datei-Zugriff andere Befehle nehmen - keine Ahnung ob deine Befehle funktionieren würden ...
Code:
Dim i,fso,f,DataSet,FName
[COLOR=#0000ff][COLOR=#0000ff]Const[/COLOR][/COLOR] ForReading = 1, ForWriting = 2, ForAppending = 8
 
[COLOR=#0000ff][COLOR=#0000ff]FName="d:\"+CStr(Date)+".csv"

Set[/COLOR][/COLOR] fso = CreateObject ("Scripting.FileSystemObject")
[COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Not[/COLOR][/COLOR] fso.FileExists ([COLOR=#0000ff]FName[/COLOR]) [COLOR=#0000ff][COLOR=#0000ff]Then
[/COLOR][/COLOR][COLOR=#0000ff][COLOR=#0000ff]   Set[/COLOR][/COLOR] f = fs.OpenTextFile(FName, ForWriting, [COLOR=#0000ff][COLOR=#0000ff]true[/COLOR][/COLOR])
[COLOR=#0000ff][COLOR=#0000ff]Else
[/COLOR][/COLOR][COLOR=#0000ff][COLOR=#0000ff]   Set[/COLOR][/COLOR] f = fso.OpenTextFile(FName, ForAppending)
[COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] 
 
[FONT=Times New Roman][SIZE=3]DataSet = CStr(Now) & ";"[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]for i = 1 to Anzahl[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]   DataSet = DataSet & [/SIZE][/FONT][FONT=Times New Roman][SIZE=3]CStr(Variable_2(i)) & ";"[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]next[/SIZE][/FONT]

 
[FONT=Times New Roman][SIZE=3]f.WriteLine DataSet
f.close[/SIZE][/FONT]
... allerdings ungetestet ... :rolleyes:

Gruß
LL
 
hallo,

also soweit geht das was du da gemacht hast larry....danke schonmal soweit.

nur schreibt er mir keine daten in die csv sondern das datum und die uhrzeit also Cstr(Now) halt.

mit
For Each i In SmartTags("Variable_2")
s = s & i+1

wollt ich erreichen das er die messwerte durchläuft und sie mir in einer neuen variable aufzeichnet. Variable_2 ist der name der Variable die die messwerte im Baustein DB20 aufzeichnet (als array)......

ich dachte ich kann in der schleife sagen das er die messwerte aufzeichnet um sie auzugeben!?

wie denkst du darüber? du bist da erfahrener als ich!

grüße bob
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... das Problem sollte ja die Codesequenz ...
Code:
[FONT=Times New Roman][SIZE=3]DataSet = CStr(Now) & ";"[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]for i = 1 to Anzahl[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]   DataSet = DataSet & [/SIZE][/FONT][FONT=Times New Roman][SIZE=3]CStr(Variable_2(i)) & ";"[/SIZE][/FONT]
[FONT=Times New Roman][SIZE=3]next[/SIZE][/FONT]
... erledigen
Variable_2 muß natürlich mit der SPS verbunden sein und Werte beinhalten und aktualisiert werden. Mach mal einen Screenshot der Flex-Variablen-Deklaration dieser Variablen.
Was wird in die Zeile geschrieben ? Nur das Datum und sonst nichts ?
Ist die Variable Anzahl als Flex-Variable deklariert und setzt du die in der SPS entsprechend ?

Gruß
LL
 
schönen guten morgen,

ich muss dir leider sagen das ich keine ahnung davon hab wie so eine programmierung einer sps funktioniert. möchte es aber lernen sobald die ganze sache hier läuft und ich bissl luft hab. habe den zuständigen programmiere mal befragt. die variable_2 ist laut seiner aussage korrekt deklariert und wird auch in die sps eingelesen. bei uns im büro halt noch simulationsweise!

hab mal en screenshot angehängt. is in nem word dokument weil von anderem rechner.

zu deiner ersten frage...ja das skript schreibt mir nur das datum in die csv....komischerweise aber nicht wenn man eine andere variable in die zeile
DataSet = CStr(Now) & ";" + CStr(Variable_5) & ";"
einfüg. hier variable5. variable 5 besteht aber nur aus einem wert der aus dem Datenbaustein kommt. variable 2 (max100werte aus datenebaustein DB20)ließt er einfach nicht aus.....

hoffe ich habs dir gut rüber gebracht.....
 

Anhänge

  • Dok1.doc
    96 KB · Aufrufe: 17
Hallo,

also erstmal :
Ist die Variable Anzahl als Flex-Variable deklariert und setzt du die in der SPS entsprechend ?
dann :
- Variablen nennt man nicht Variable_2 - man kann sie auch verwendungsbezogen benennen.
- Wie wird die "Variable_2" aktualisiert ? Du mußt hier "zyklisch fortlaufend" und nicht "Zyklisch bei Verwendung" eintragen. Das gilt auch für die Variable Anzahl ...
- wie triggerst du das Script - also was bewirkt, das es aufgerufen wird ?

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo

bei
Zitat von Larry Laffer
Ist die Variable Anzahl als Flex-Variable deklariert und setzt du die in der SPS entsprechend ?

wo finde ich das raus?

-aktualisiert wird die variable_2 durch FB12(kann dir nicht genau sagen was das ist) der die Messwerte in den DB20 ,der unter Variable_2 steht, schreibt.
- ich hab jetzt noch folgendes gemacht...
WinCC Flexible - Kommunikation - Variablen - Variable_2 - "rechtsklick" - Eigenschaften - Allgemein - Erfassungsart in "zyklisch fortlaufend" geändert
- das skript wird durch einen button vom panel aus gestartet

aber so langsam hab ich das gefühl das vb script mit dem volumen von Variable_2 bzw. dem Volumen der Daten im Baustein DB 20 nicht klarkommt. wenn ich die Schleife weg lass und Variablen mit nur einem Messwert ausgeben lass funktioniert alles prächtig.....
 
Zuletzt bearbeitet:
:confused::confused::confused: ... die Variable "Anzahl" aus meinem Script ist eine Variable, die du erzeugen ´(als Flex-Variable und nicht als Script-Variable) und in der SPS sinnvoll mit Werten versorgen mußt. Ansonsten steht da Null drin und die Schleife wird nicht bearbeitet ...

Das mit dem Array bekommt Flex schon hin - keine Sorge ...

Gruß
LL
 
Zurück
Oben