Hallo,
Habe folgenden VBA Code den ich in C# umändern möchte und da es
keinen Converter gibt der das machen kann muss ich Euch fragen.
Dieser Code erstellt einen Ordner in Windows mit dem Inhalt aus dieser Variable: "PDE_FolderName"
Public Sub Ordner_erstellen()
'Diese Modul erstellt einen Ordner
Dim strNr As String
Dim strText As String
Dim strPfad As String
Dim strOrdner As String
Dim oFSO As Object
strNr = thisProject.Variables.Item("PDE_FolderName").Value
strText = Format(CStr(strNr), "000000000000") 'String 12 für den Ordnernamen
'Exportpfad
strPfad = "D:\S7_Export\AppData" ' Pfad einstellen
strOrdner = strText
Set oFSO = CreateObject("Scripting.FileSystemObject")
If oFSO.FolderExists(strPfad) Then
If Not oFSO.FolderExists(strPfad & "\" & strOrdner) Then
oFSO.CreateFolder (strPfad & "\" & strOrdner)
'Rückmeldung Ordner erstellt mit Value = 0
thisProject.Variables.Item("PDE_CreateFolder").Value = 0
End If
Else
'Exportpfad nicht vorhanden mit Value = 1
thisProject.Variables.Item("PDE_NoFolder").Value = 1
End If
Set oFSO = Nothing
End Sub
Ich habe etwas begonnen kann es aber nicht fertig stellen.
Die in Pluszeichen eingerahmten Zeilen weiß ich nicht um zu schreiben.
Wer von Euch ist so nett und würde das für mich machen.
private void _container_Changed(object sender, ChangedEventArgs e)
{
string strNr;
string strText;
string strPfad;
string strOrdner;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
strNr = thisProject.Variables.Item("PDE_FolderName").Value;
strText = Strings.Format((string)strNr, "000000000000"); // String 12 für den Ordnernamen
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Exportpfad
strPfad = @"D:\S7_Export\AppData"; // Pfad einstellen
strOrdner = strText;
try
{
if (Directory.Exists(strPfad))
{
// Try to create the directory.
Directory.CreateDirectory(strPfad + "\\" + strOrdner);
+++++++++++++++++++++++++++++++++++++++++++++
'Rückmeldung Ordner erstellt mit Value = 0
thisProject.Variables.Item("PDE_CreateFolder").Value = 0
+++++++++++++++++++++++++++++++++++++++++++++
}
}
catch (Exception)
{
+++++++++++++++++++++++++++++++++++
'Exportpfad nicht vorhanden mit Value = 1
thisProject.Variables.Item("PDE_NoFolder").Value = 1
+++++++++++++++++++++++++++++++++++
}
}
Es wäre super wenn einer von Euch bereit ist und mir diese Zeilen übersetzt.
Vielen Dank im voraus.
Mfg Tommylik
Hallo Tommylik,
dass kann man nicht ohne Hintergrundwissen umschreiben.
Da die mit plus eingerahmten Zeilen eine Änderung in S7 (Vermutlich Tia Portal) ist. Es verändert deine S7 Variablen.
Die beiden Variablen:
PDE_CreateFolder wird auf 0 gesetzt
PDE_NoFolder wird auf 1 gesetzt
d.h. du musst uns zeigen, wie du die oben genannten Variablen aus Tia Portal im Programm integriert hast.
Wenn Tia Portal komplett aus der Aktion fällt würde man dies vermutlich komplett wegfallen lassen, da man über if Abfragen raus bekommt, ob der Ordner vorhanden ist.
Gruß Thomas
Hallo Thomas,
Vielen Dank für deine Antwort.
Na klar sollst du bekommen.
Es ist noch S7 Ver. 5.6 wir haben kein TIA
Das ist das ganze Skript. wird über die Visu gemacht.
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
Attribute VB_Name = "thisProject"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Option Explicit
' Definition der Container mit Onlinevariablen für
' jeden Zugriff auf Runtimevariablen aus dem VBA-Skript heraus.
Public PDE_Container As OnlineVariable
Private Sub Project_Active()
Set PDE_Container = thisProject.OnlineVariables.CreateOnlineVariables("PDE")
PDE_Container.Add "PDE_PraegeCode"
PDE_Container.Add "PDE_FolderName"
PDE_Container.Add "PDE_CreateFolder"
PDE_Container.Add "PDE_NoFolder"
PDE_Container.Add "PDE_NoFile"
PDE_Container.Add "PDE_FileCopy"
PDE_Container.Define
End Sub
Private Sub Project_Inactive()
PDE_Container.Undefine
thisProject.OnlineVariables.DeleteOnlineVariables ("PDE")
End Sub
Public Sub Ordner_erstellen()
'Diese Modul erstellt einen Ordner
Dim strNr As String
Dim strText As String
Dim strPfad As String
Dim strOrdner As String
Dim oFSO As Object
strNr = thisProject.Variables.Item("PDE_FolderName").Value
strText = Format(CStr(strNr), "000000000000") 'String 12 für den Ordnernamen
'Exportpfad
strPfad = "D:\S7_Export\AppData" ' Pfad einstellen
strOrdner = strText
Set oFSO = CreateObject("Scripting.FileSystemObject")
If oFSO.FolderExists(strPfad) Then
If Not oFSO.FolderExists(strPfad & "\" & strOrdner) Then
oFSO.CreateFolder (strPfad & "\" & strOrdner)
'SPS Trigger rücksetzen.
thisProject.Variables.Item("PDE_CreateFolder").Value = 0
End If
Else
'SPS informieren wenn Exportpfad nicht vorhanden.
thisProject.Variables.Item("PDE_NoFolder").Value = 1
End If
Set oFSO = Nothing
End Sub
Public Sub FileCopy()
Dim strNrO As Variant
Dim strNrD As Variant
Dim strOrdner As String
Dim strDatei As String
Dim oFSO As Object
strNrO = thisProject.Variables.Item("PDE_FolderName").Value
strNrD = thisProject.Variables.Item("PDE_PraegeCode").Value
strOrdner = Format(CStr(strNrO), "000000000000") 'String 12 für den Ordnernamen
strDatei = Format(CStr(strNrD), "00000000000") 'String 11 für den Dateinamen
Set oFSO = CreateObject("Scripting.FileSystemObject")
'Fehlerroutine: Datei nicht vorhanden
If oFSO.FileExists("\\TOX210R01\AppData\" & strDatei & "TOX210R01.txt") = False Then
'File doesn't exist
thisProject.Variables.Item("PDE_NoFile").Value = 1
Else
'File exist
oFSO.CopyFile "\\TOX210R01\AppData\" & strDatei & "TOX210R01.txt", "D:\S7_Export\AppData\" & strOrdner & "\"
End If
thisProject.Variables.Item("PDE_FileCopy").Value = 0 'SPS Trigger rücksetzen.
Set oFSO = Nothing
End Sub
Vielen Dank nochmal für deine Antwort.
Mfg Tommylik
Hallo Tommylik,
vielen Dank dafür.
So wie ich das sehe werden die Variablen "PDE_PraegeCode" "PDE_FolderName" "PDE_CreateFolder" "PDE_NoFolder" "PDE_NoFile" "PDE_FileCopy" in der VISU benutzt, d.h. du musst ja eine Schnittstelle zwischen der S7 und C# aufbauen, um diese auszutauschen. Ist eine Schnittstelle in deinem Programm schon vorhanden?
Hallo Thomas,
Vielen Dank für deine Antwort.
So funktioniert es zur Zeit mit VBA.
Also die Visu ist Zenon von Copa Data und wenn die Runtime von Zenon startet dann wird alles aus dem VBA Projekt "thisprojekt" mit gestartet und steht zur Verfügung.
Wenn dann z.B. die SPS den Merker PDE_CreateFolder auf True setzt dann wird der Ordner
mit dem Inhalt aus der String Variable PDE_FolderName in Windows erstellt.
Ich denke das Zenon RT die Schnittstelle ist. Im Zenon Editor wurden die Variablen
angelegt die dann durch den Onlinecontainer an VBA übergeben werden.
Public PDE_Container As OnlineVariable
Oder was meinst du genau mit Schnittstelle?? Und welches Programm von mir meinst du?
Das VBA Programm war schon immer da und das was ich vorhin gepostet habe ist das einzige was ich für C# begonnen habe. Mit Sicherheit entspricht es nicht der Logik mit dem Skript zu beginnen der den Ordner erstellt wenn man noch keinen Anfang hat.
Aber das war das einzige was ich geschafft habe zu übersetzen alles andere übersteigt meinen Horizont.
Vielen Dank nochmal für deine Hilfe.
Mfg Tommylik
Ich denke das Zenon RT die Schnittstelle ist. Im Zenon Editor wurden die Variablen
angelegt die dann durch den Onlinecontainer an VBA übergeben werden.
Korrekt, dass denke ich auch. Und du musst ja nun auf den Onlinecontainer mit C# zugreifen. Und diese Schnittstelle kenne ich nicht. Da musst du dich informieren.
Google doch mal nach API von Zenon.
Hallo Thomas,
Vielen Dank für deine Antwort.
Ich habe nach API von Zenon gegoogelt aber nichts gefunden.
Ich habe aber das hier gefunden.
Wenn man mit dem Visual Studio arbeitet dann braucht man anscheinend die
Dann habe ich das noch
Das C# Beispiel AddVariable hat Ähnlichkeiten mit dem VBA Projekt aber ich verstehe noch weniger.
Du liest das wahrscheinlich wie einen spannenden Roman.
Hilft dir das weiter?
Vielen Dank nochmal für deine Hilfe.
Mfg Tommylik
Tommylik, das Forum ist kein kostenloser Quellcode Generator.
Wenn Du möchtest, dass Dir das jemand programmiert, dann verwende bitte die Jobbörse dafür und entlohne denjenigen.
Siehe auch [Hinweis] Wie poste ich richtig?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo Abt,
Das ist mir auch klar, aber gegen eine höffliche bitte weil ich etwas nicht kann sollte nichts dagegen sprechen. Und wenn dann jemand freiwillig hilft sollte das auch in Ordnung sein.
Wenn niemand auf meine Bitte reagiert dann habe ich noch die Möglichkeit wie du gesagt hast.
Da aber so etwas ein paar Hundert Euro kostet kommt das für mich nicht in Frage.
Und niemand macht so etwas für 10€.
@ Thomas
Vielen Dank nochmal für deine Hilfe.
Wir können dieses Thema hiermit schließen.
Mfg Tommylik
Und niemand macht so etwas für 10€.
...aber kostenlos, oder wie?
Verstehe die Logik nicht 😉
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo Tommylik,
da bist du leider auf der falschen Fährte. Das was du da gefunden hast ist scheinbar eine Entwicklungsumgebung, damit du dir Plugins in das Tool Zenon einbauen kannst.
Ich mein rein theoretisch kann man sich darüber einen Plugin bauen, welches dann die Schnittstelle herstellt zu dem Container. Aber dies wäre oversized. Daher musst du in der Richtung nochmal weitersuchen. API oder Interface oder ähnliches.
Bist du dir denn sicher, dass das Tool eine Schnittstelle zu C# bereit stellt? Oder bist du einfach mal mit C# angefangen?
Hallo tommylik,
ich habe in einem anderen Forum schon angemerkt dass du kaum jemanden finden wirst der dir einfach einen Code umschreiben wird vorallem da ZenOn etwas spezifischer ist und hier wohl kaum jemand direkt damit gearbeitet hat (oder eher wenige).
Habe trotzdem mal eine Basisversion für dich hinterlassen und hoffe dass du damit arbeiten kannst:
https://www.sps-forum.de/hochsprachen-opc/102385-wie-vba-scripte-mit-der-s7-verbinden-3.html
Es handelt sich eben um ein AddIn für die Entwicklungsumgebung von ZenOn und eigenen Bibliotheken dahinter.