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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Schnelle Datenübertragung mit DotNetSiemensPLCToolBoxLibrary (LibNoDave)

  1. #1
    Registriert seit
    06.04.2013
    Beiträge
    208
    Danke
    10
    Erhielt 5 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich hab mit der DotNetSiemensPLCToolBoxLibrary einen Datenaustausch zwischen Siemens 840d sl (CPU 317F-3 PN/DP) und einer Beckhoffsteuerung (TwinCAT 2) aufgebaut.

    Es werden 4 Arrays(2 x 30DWORD, 2x 20DWORD) + Lifebit von der Beckhoffsteuerung in DB800 und ein Array(30 DWORD) vom DB800 zur Beckhoffsteuerung übertragen.

    Für ein Array benötige ich ca. 15 ms, in Summe ca. 70 - 100 ms.

    Ich möchte aber gern in Summe auf 15 - 25 ms (PLC Zykluszeit) kommen.

    Wenn ich im selben Programm mehrere Verbindungen zur Steuerung erstelle, verändert sich die Zeit nicht. Starte ich jedoch mehrere Programme, welche jeweils nur ein Array lesen, liegt die Zeit bei ca. 30 ms.


    Wie schaff ich es in einem Programm auf diese Übertragungszeit zu kommen?

    Danke!


    Geändert von Hans54216 (21.09.2015 um 14:23 Uhr)
    Zitieren Zitieren Schnelle Datenübertragung mit DotNetSiemensPLCToolBoxLibrary (LibNoDave)  

  2. #2
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Läuft denn dein Code auch parallel wenn du es im selben Program machst? Poste doch mal etwas davon!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  3. #3
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Noch zur Info: Du kannst aber nicht sagen zu welchem Zeitpunkt deines SPS Zyklus die Daten gelesen werden! Falls du das brauchst musst du über die Vartab-Funktionen lesen!!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  4. #4
    Hans54216 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.04.2013
    Beiträge
    208
    Danke
    10
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Wie verhält sich die Vartab-Funktion bezüglich der Übertragungsgeschwindigkeit?

    Wenn ich den "ReadSpeedtest" ausführe kommt zwar nur eine leicht erhöhte Zeit für die Übertragung raus, jedoch friert das Tool mehrere Sekunden ein. Laut Hinweis wird ja nur die Übertragungszeit und nicht die Anfrage gemessen.
    Kann ich dann davon ausgehen, dass die Funktion in Summe mehrere Sekunden benötigt?

  5. #5
    Hans54216 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.04.2013
    Beiträge
    208
    Danke
    10
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Läuft denn dein Code auch parallel wenn du es im selben Program machst? Poste doch mal etwas davon!



    Code:
    public partial class FormTestNeu1_2 : Form
    {
        private static Dictionary<string, CTestNeu1_2> DataHandles = new Dictionary<string, CTestNeu1_2>();
        
        public FormTestNeu1_2()
        {
            InitializeComponent();
            FileTransfer();
        }
                
        private void FileTransfer()
        {
            DataHandles.Add("Wert", new CTestNeu1_2(
                        Properties.Settings.Default.TwinCAT_NetID,
                        Properties.Settings.Default.TwinCAT_Port,
                        Properties.Settings.Default.TwinCAT_Wert_Path,
                        Properties.Settings.Default.S7Var_Wert,
                        "Wert",
                        true));
        
            DataHandles.Add("Wert2", new CTestNeu1_2(
                        Properties.Settings.Default.TwinCAT_NetID,
                        Properties.Settings.Default.TwinCAT_Port,
                        Properties.Settings.Default.TwinCAT_Wert2_Path,
                        Properties.Settings.Default.S7Var_Wert2,
                        "Wert2",
                        true));
            ...
            DataHandles["Wert"].StartDataTransfer();
            DataHandles["Wert2"].StartDataTransfer();
            DataHandles["Status"].StartDataTransfer();
            DataHandles["Status2"].StartDataTransfer();
            DataHandles["Output"].StartDataTransfer();
        }
        ...
        
    public class CTestNeu1_2
    {
    ...
        public CTestNeu1_2(string _AmsNetID, int _Port, string _SymbolName, string _S7FormatAdress, string _SiemensConnectionName, bool _read)
        {
            WriteToSiemens = _read;
            Port = _Port;
            AmsNetID = _AmsNetID;
            SymbolName = _SymbolName;
            S7FormatAdress = _S7FormatAdress;
            S7Connect.ConnectionName = _SiemensConnectionName;
        }
        
        private bool _DataTransferStarted = false;
        public void StartDataTransfer()
        {
            if (_DataTransferStarted)
                return;
    
    
    
    
            Thread ThreadHandle = new Thread(new ThreadStart(DataHandle));
            ThreadHandle.IsBackground = true;
            ThreadHandle.Start();
            _DataTransferStarted = true;
        }
        
        private void DataHandle()
        {
           ...
           while (!AbortRequestedStep)
           {
              if (WriteToSiemens)
              {
                 //Beckhoff PLC Variablen lesen
                 firstTime2 = Environment.TickCount;
                 oBuffer = tcClientAdmin.ReadAny(_SymbolInfo.indexGroup, _SymbolInfo.indexOffset, _SymbolInfo.type, _SymbolInfo.args);
                 timeBeckhoff = Environment.TickCount - firstTime2;
                 
                 
                 //Siemens schreiben in DB
                 firstTime2 = Environment.TickCount;
                 if (oBuffer != null)
                     VerbindungsinformationenSiemens = S7Connect.writeDB(S7FormatAdress, (int[])oBuffer, _SymbolInfo.args[0]);
                 else
                     VerbindungsinformationenSiemens = string.Empty;
                 timeSiemens = Environment.TickCount - firstTime2;
              }
              ...
           }
        }
    Geändert von Hans54216 (22.09.2015 um 09:44 Uhr)

  6. #6
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Wie misst du denn die Zeit die alle request brauchen?

    Wie wär's denn 4 Tasks zu starten, und dann mit Task.WhenAll zu warten...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  7. #7
    Hans54216 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.04.2013
    Beiträge
    208
    Danke
    10
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Ich hab jetzt mal eine Versuchsreihe erstellt:

    Code:
    public Form1()
    {
        connect("Wert");
        connect("Wert2");
        connect("Status");
        connect("Status2");
        lWert = getPLCTags("P#DB801.DBX400.0 DINT 30", new int[] { 1 });
        lWert2 = getPLCTags("P#DB801.DBX520.0 DINT 20", new int[] { 1 });
        lStatus = getPLCTags("P#DB801.DBX800.0 DWORD 30", new int[] { 1 });
        lStatus2 = getPLCTags("P#DB801.DBX920.0 DWORD 20", new int[] { 1 });
    
        int firstTime = Environment.TickCount;
        Parallel.Invoke(Task1, Task2, Task3, Task4);
        string time = (Environment.TickCount - firstTime).ToString();
        Console.WriteLine("Time Elapsed TickCount: " + time);
    }
    
    
    static void Task1()
    {
         myConn["Wert"].WriteValues(lWert, true);
    }

    Eine Verbindung ohne Optimierung | mit Optimierung | vier Verbindungen ohne Optimierung | mit Optimierung

    Eine Verbindung ohne Optimierung.png Eine Verbindung mit Optimierung.png Vier Verbindungen ohne Optimierung.png Vier Verbindungen mit Optimierung.png


    Jetzt stellt sich mir nur die Frage, wie viel in ein PDU rein geht, um die richtige Anzahl an Verbindungen zur Steuerung aufzubauen.

  8. #8
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Wenn nur aus einem Bereich gelesen werden soll: 22Bytes, siehe: PDU größe und TCP/IP frame
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  9. Folgender Benutzer sagt Danke zu Jochen Kühner für den nützlichen Beitrag:

    Hans54216 (24.09.2015)

  10. #9
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Ich hab hier gepostet: Allgemein Toolbox Library Kuehner. wie Ich das mit dem Parallelen lesen machen würde...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  11. #10
    Hans54216 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.04.2013
    Beiträge
    208
    Danke
    10
    Erhielt 5 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Wenn nur aus einem Bereich gelesen werden soll: 22Bytes, siehe: PDU größe und TCP/IP frame
    "240 und 480 Bytes PDU-Size. Davon geht der Overhead weg und es bleiben beim Lesen aus einem Bereich 222 bzw. 462 Bytes übrig"


    Vielen Dank für deine Hilfe!!

Ähnliche Themen

  1. DotNetSiemensPLCToolBoxLibrary -> nun mit Full-Manged TCP Connection
    Von Jochen Kühner im Forum Hochsprachen - OPC
    Antworten: 0
    Letzter Beitrag: 09.02.2015, 23:29
  2. Antworten: 0
    Letzter Beitrag: 22.03.2014, 15:48
  3. Drahtlose Datenübertragung mit KM6551
    Von hellrazz im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 14.01.2011, 14:50
  4. Datenübertragung mit t_send
    Von Papa_Bene im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 29.09.2010, 12:26
  5. Probleme mit DB und Datenübertragung
    Von tigger im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 26.04.2010, 12:57

Stichworte

Lesezeichen

Berechtigungen

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