Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: Hochladen von Bausteinen in eine S7 300 SPS

  1. #11
    Registriert seit
    11.11.2010
    Beiträge
    4
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich arbeite momentan mit der Kommandoschnittstelle,
    und benutze dafür Visual C# Express 2010.

    Momentan bin ich soweit dass ich mir alle vorhandenen Projekte auflisten lassen kann. Daraus ein Projekt auswählen und dieses dann nochmals zu Selektieren.

    Dies erledige ich momentan nur mittels einer Konsolenanwendung.
    Da ich ersteinmal die Grundfunktion fertig stellen möchte bevor ich das ganze in eine Windows Form Anwendung baue.

    Irgendwie werd ich aus der Hilfe zur Kommandoschnittstelle nicht weiter schlau. Oder ich seh den ganzen Wald vor lauter Bäumen nicht.

    Ich würde mir nun gerne aus einem ausgewählten Programm,
    die AWL Quelle generieren, und eine Referenzdatei.
    Die Referenzdatei soll am besten alle Querverweise zeigen.

    Könnte mir vll. jemand einen Tipp geben welche Befehle ich benötige um mir diese Dateien erstellen zu lassen?

    Mein Bisheriger Code ist folgender:
    Code:
    using S7HCOM_XLib;
    using SimaticLib;
    .
    .
    .
    staticvoid Main()
    {
    Simatic S = newSimatic();
     
    foreach (S7Project Proj in S.Projects)
    {
       Console.WriteLine(Proj.Name);
    }
    
    string sPrjName = "";
    Console.WriteLine("Projektname eingeben");
    sPrjName = Console.ReadLine();
     
    foreach (S7Program Proj_Select in S.Projects[sPrjName].Programs)
    {
       Console.WriteLine(Proj_Select.Name);
    }
     
    string sPrjName_Select = "";
    Console.WriteLine("Selektiertes Projekt eingeben");
    sPrjName_Select = Console.ReadLine();
     
    .
    .
    .
    // Nun würde ich mir gerne aus dem Ausgewählten Projekt die oben erwähnten
    // Dateien erstellen lassen
     
    
    
    Ich hoffe ich Poste diesen Beitrag richtig, es war der einzigste wo bereits C# angesprochen wurde. Zumindest habe ich durch die SuFu nichts gefunden.

    Beste Grüße
    Bernhard

  2. #12
    Registriert seit
    29.03.2004
    Beiträge
    5.742
    Danke
    143
    Erhielt 1.688 Danke für 1.226 Beiträge

    Standard

    Hi,
    das mit dieser Funktion habe ich das mal getestet:
    Code:
            static void exportBlocks(string projectName, string programName, string blockContName, S7BlockType type)
            {
                Simatic S = new Simatic();
                string filename;
    
                Console.WriteLine("Blocks overall: " + S.Projects[projectName].Programs[programName].Next[blockContName].Next.Count);
    
                foreach (S7Block bl in S.Projects[projectName].Programs[programName].Next[blockContName].Next)
                {
                    if (bl.ConcreteType == type) // z.B. S7BlockType.S7DB
                    {
                        filename = "C:\\Temp\\export\\" + bl.Name + ".awl";
                        Console.WriteLine("Exporting source to: " + filename);
                        try
                        {          
                            bl.GenerateSource(filename, S7GenerateSourceFlags.S7GSFDoOverwrite);                        
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("Error: " + ex);
                        }
                    }
                }
            }
    Aufzurufen wäre das mit:
    Code:
    exportBlocks("MyProject", "S7-Programm", "Bausteine", S7BlockType.S7FC);
    um alle FCs zu exportieren.

  3. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    EIT (11.11.2010)

  4. #13
    Registriert seit
    11.11.2010
    Beiträge
    4
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi Thomas,

    wow genial Dankeschön für die Blitzantwort.

    Werd das ganze gleich morgen Testen. Deine Antwort ist ja schon so gut wie die ganze Lösung. Ein Tipp hätte mir eigentlich gereicht, aber du ersparst mir einige "grübel" Arbeit.

    Nochmals Dankeschön, der Rest sollte ich ja dann das kleinere Übel sein

  5. #14
    Registriert seit
    11.11.2010
    Beiträge
    4
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi zusammen,

    da es das letzte mal mit dem Code so gut funktioniert hat,
    steh ich nun entweder komplett auf dem Schlauch oder ich kapier es einfach nicht.

    Code:
    publicvoid vCreateRefData(string sProjectName, string sProgramName)
    {
    List<string> Error = new List<string>(); //Liste die alle Fehler enthält
     
    Simatic S = new Simatic();
    S7ProgramClass ProgramClass = new S7ProgramClass();
     
    S.Projects[sProjectName].Programs[sProgramName]....??
     
    try
    {
         ProgramClass.IS7Program3_ExportProgramStructure("D:\\REFDATA.dif", true, 0);.....??
    }
    catch (Exception ex)
    {
         ERROR.Add(ex.ToString());
    }
    
    Aufruf mit
    Code:
    vCreateRefData(sChosenProjektName, sChosenProgramName);
    
    Ich weis dass hier noch ein bisschen was fehlt. Aber das is das wo ich auf dem "Schlauch" stehe.
    Und zwar muss ich ja zuerst definieren welches Projekt und Unterprogramm ich auswähle.
    Hätte gedacht ich mache das mit:
    Code:
    S.Projects[sProjectName].Programs[sProgramName]
    
    Aber nun steh ich vor dem Ende....
    Wie erkläre ich "Program.IS7Program3_ExportProgramStructure()" dass er das ausgewählte Projekt und das unterprojekt auswählt und daraus die Referenzdaten erstellt?

    Desweitern werden zur erstellung der Referenzdaten ja die "ColumnFlags" genutzt. Das wäre ja z.B. "S7XXCSymbols" oder "S7XXCSymbolComments" und in der beschreibung steht man solle ihr eine "(Ver-Oder-ung)" übergeben. Wie kann ich mir hier denn die Übergabe vorstellen?

    Sorry für die vielen Fragen,

    aber vll. hat jemand die Geduld mir ein bisschen auf die Sprünge zu helfen.

    Beste Grüße
    Geändert von EIT (07.12.2010 um 18:07 Uhr)

  6. #15
    Registriert seit
    11.11.2010
    Beiträge
    4
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    EDIT:

    hab die Lösung selber gefunden, ich weiß zwar nicht
    ob es die optimale Lösung ist, aber es funktioniert zumindest

    Code:
    publicvoid vCreateRefData(string sProjectName, string sProgramName)
    {
    List<string> ERROR = newList<string>();
    foreach (S7Program Program in S.Projects[sProjectName].Programs)
    {
    if (Program.Name == sProgramName)
    {
    try
    {
    Program.ExportProgramStructure("D:\\REFDATAEXPORT.dif", true, 0);
    }
    catch (Exception ex)
    {
    ERROR.Add(ex.ToString());
    } 
    } 
    }
    
    es werden mir nun die Referenzdaten exportiert.
    Falls jemand eine andere Lösung ohne "foreach" und "if" hat.
    Bitte lasst es mich wissen.

    Beste Grüße
    Bernhard

  7. #16
    Registriert seit
    31.05.2011
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Unglücklich

    [..........
    Geändert von stmu (06.07.2011 um 12:28 Uhr)
    Zitieren Zitieren Anfänger in c#  

  8. #17
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard

    Zitat Zitat von stmu Beitrag anzeigen
    Hallo,

    kann mir bitte mal jemand ein c# programm zeigen, welches ohne OLE-Fehler (VS200 funktioniert um damit Bausteile zu laden?

    Vielen Dank!
    Hast du schon einen Versuch gemacht, den du uns zeigen kannst?
    Dann können wir sehen wo dein Problem bzw dein Fehler liegt.


    bike

  9. #18
    Registriert seit
    31.05.2011
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ..........
    Geändert von stmu (06.07.2011 um 12:27 Uhr)
    Zitieren Zitieren Danke für die schnelle Antwort !!!!!  

  10. #19
    Registriert seit
    29.03.2004
    Beiträge
    5.742
    Danke
    143
    Erhielt 1.688 Danke für 1.226 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von stmu Beitrag anzeigen
    Folgendes habe ich programmiert:
    exportBlocks("Rack_101", "Rack_101", "Bausteine", S7BlockType.S7FC);
    }

    staticvoid exportBlocks(string projectName, string programName, string blockContName, S7BlockType type)
    Passen den der Projektname und der Programmname?

    In deinem Fall würde das Projekt "Rack_101" und der Programmordner ebenfalls "Rack_101" heißen. Kann durchaus sein, aber ich ändere den Programmordnernamen eigentlich selten, und per Default legt der Step7 Manager diese mit Namen "S7-Programm" und evtl. einer angehängten Nummer an.

    Und mein Code ist nur ein Beispiel wie es grundsätzlich geht. Deine Fehlerbehandlungen musst du schon selber drumzustricken.
    Wenn du das passend gemacht hättest, würde es in der Exception sicher eine aussagekräftigere Meldung geben.

  11. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    bike (31.05.2011)

Ähnliche Themen

  1. Liste mit SFB und SFC Bausteinen
    Von mrdoc im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 14.05.2013, 07:11
  2. Variablendeklaration in den Bausteinen
    Von Simon_ im Forum CODESYS und IEC61131
    Antworten: 11
    Letzter Beitrag: 07.09.2010, 09:59
  3. Problem beim Baustein Hochladen in Simatic 5.4
    Von mac_hawk im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 04.04.2010, 16:58
  4. Kommunikationsproblem mit T-Bausteinen
    Von sixt im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 27.08.2009, 13:52
  5. Fehler von SFC Bausteinen
    Von fubu16 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 18.08.2005, 13:35

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •