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

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

Thema: Libnodave Timer und Counter

  1. #11
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Earny Beitrag anzeigen
    Hallo Paul,

    ich habe auch keine davePutSecondsAt-Funktion gefunden. Wenn diese Funktion nicht existiert, dann müsste die Codierung aufwändig in VB programmiert werden. Das will ich mir nicht antun.

    Vielleicht ist folgender Weg einfacher.
    Wenn du Zeitwerte in die S7 schreiben willst, dann könntest Du auch den Wert in ms durch Libnodave in ein Doppelwort schreiben und den Wert dann in der S7 durch die FC40 (IEC-Time nach S5T) in das S5T-Format wandeln. Wenn Du das S7-Programm nicht verändern darfst, scheidet dieser Weg allerdings auch aus.

    Oder Du lässt das mit den S5T-Timern ganz bleiben und ersetzt sie durch IEC-Timer.

    Gruß
    Earny
    Also wie oben auch schon geschrieben, Habe Ich in meiner erweiterteten libnodave.net.cs eine funktion für s5 zeiten implementiert. Aber hier auch noch mal der Code. (Der könnte bestimmt noch optimiert werden, aber er geht!)

    Code:
    public static void putS5Timeat(byte[] b, int pos, TimeSpan value)
        {
            byte basis;
            int wert;
            if (value.TotalMilliseconds <= 999*10)
            {
                basis = 0;
                wert = Convert.ToInt32(value.TotalMilliseconds)/10;
            }
            else if (value.TotalMilliseconds <= 999*100)
            {
                basis = 1;
                wert = Convert.ToInt32(value.TotalMilliseconds)/100;
            }
            else if (value.TotalMilliseconds <= 999*1000)
            {
                basis = 2;
                wert = Convert.ToInt32(value.TotalMilliseconds)/1000;
            }
            else if (value.TotalMilliseconds <= 999*10000)
            {
                basis = 3;
                wert = Convert.ToInt32(value.TotalMilliseconds)/10000;
            }
            else
            {
                basis = 3;
                wert = 999;
            }
    
            int p1, p2, p3;
    
            p3 = (wert/100);
            p2 = ((wert - p3*100)/10);
            p1 = (wert - p3*100 - p2*10);
    
            b[pos] = Convert.ToByte(basis << 4 | p3);
            b[pos + 1] = Convert.ToByte((p2 << 4 | p1));
        }
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  2. #12
    Paul.Juergen ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.06.2010
    Ort
    NRW
    Beiträge
    8
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ich habe auch keine davePutSecondsAt-Funktion gefunden. Wenn diese Funktion nicht existiert, dann müsste die Codierung aufwändig in VB programmiert werden. Das will ich mir nicht antun.
    Hallo Earny du hast vollkommen recht!

    Vielleicht ist folgender Weg einfacher.
    Wenn du Zeitwerte in die S7 schreiben willst, dann könntest Du auch den Wert in ms durch Libnodave in ein Doppelwort schreiben und den Wert dann in der S7 durch die FC40 (IEC-Time nach S5T) in das S5T-Format wandeln. Wenn Du das S7-Programm nicht verändern darfst, scheidet dieser Weg allerdings auch aus.
    Ja stimmt eine vernünftige und logische Möglichkeit, werde das auch so wohl machen.
    Aber trotzdem möchte ich das Problem mit VB lösen, einfach um zu wissen ob und wie das geht... Danke für den Tipp!

  3. #13
    Paul.Juergen ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.06.2010
    Ort
    NRW
    Beiträge
    8
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also wie oben auch schon geschrieben, Habe Ich in meiner erweiterteten libnodave.net.cs eine funktion für s5 zeiten implementiert. Aber hier auch noch mal der Code. (Der könnte bestimmt noch optimiert werden, aber er geht!)
    Hallo Jochen,

    Ok werde mich gleich mal ans Visual Studio setzen und das umschreiben in VB..

    Zu deiner LibnodaveConnectionLibrary habe ich noch eine Frage:
    Wollte zum Test für die S5 Zeiten die gets5 puts5 Befehle integrieren.
    Habe die LibnodaveConnectionLibrary.dll unter Verweise in das VB-Projekt hinzugefügt.
    Anschließend habe ich ein LibnodaveConnectionLibrary.vb Modul in das Projekt integriert.
    In diesem Projekt habe ich dann den Text:

    PublicModule LibnodaveConnectionLibrary
    PublicDeclareFunction getS5Timefrom Lib"LibNoDaveConnectionLibrary.dll" (ByVal b() AsByte, ByVal pos AsInteger) As System.TimeSpan
    EndModule

    integriert. Anschließend verwende ich die ein Private Sub im Ablauf Modul mit folgendem Code:

    PrivateSub buttonclick usw

    Dim buf(99) AsByte
    Dim zeit As TimeSpan

    res = daveReadBytes(dc, daveDB, 4, 0, 2, buf(0))
    zeit = gets5timefrom(buf, 0)

    EndSub

    Nur so geht mir der Debugger bei zeit = ... an und sagt dass die gets5time Funktion nicht in LibnodaveConnectionLibrary.dll gefunden wurde...

    Geändert von Paul.Juergen (02.07.2010 um 15:43 Uhr)

  4. #14
    Paul.Juergen ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.06.2010
    Ort
    NRW
    Beiträge
    8
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Code:
    
    Dim a, c AsInteger
    Dim basis AsByte
    Dim wert AsInteger
    Dim b(99) AsByte
    Dim pos AsInteger
    Dim value AsNew TimeSpan(0, 0, 0, a, c)
    TextBox9.Text = Convert.ToString(value)
    'public static void putS5Timeat(byte[] b, int pos, TimeSpan value)
    If (value.TotalMilliseconds <= 999 * 10) Then
    basis = 0
    wert = Convert.ToInt32(value.TotalMilliseconds) / 10
    ElseIf (value.TotalMilliseconds <= 999 * 100) Then
    basis = 1
    wert = Convert.ToInt32(value.TotalMilliseconds) / 100
    ElseIf (value.TotalMilliseconds <= 999 * 1000) Then
    basis = 2
    wert = Convert.ToInt32(value.TotalMilliseconds) / 1000
    ElseIf (value.TotalMilliseconds <= 999 * 10000) Then
    basis = 3
    wert = Convert.ToInt32(value.TotalMilliseconds) / 10000
    Else
    basis = 3
    wert = 999
    EndIf
    
    Dim p1, p2, p3 AsInteger
    p3 = (wert / 100)
    p2 = ((wert - p3 * 100) / 10)
    p1 = (wert - p3 * 100 - p2 * 10)
    b(pos) = Convert.ToByte(basis << 4 Or p3)
    b(pos + 1) = Convert.ToByte((p2 << 4 Or p1))
    TextBox7.Text = b(0)
    TextBox8.Text = b(1)
    
    Getestet mit 1s200ms funktioniert!
    Getestet mit 1s20ms funktioniert!
    Getestet mit 20s200ms funktioniert!
    Getestet mit 1s180ms funktioniert nicht- Fehler: Der Wert für ein unsigniertes Byte war zu groß oder zu klein.

  5. #15
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von Paul.Juergen Beitrag anzeigen
    Hallo Jochen,

    Ok werde mich gleich mal ans Visual Studio setzen und das umschreiben in VB..

    Zu deiner LibnodaveConnectionLibrary habe ich noch eine Frage:
    Wollte zum Test für die S5 Zeiten die gets5 puts5 Befehle integrieren.
    Habe die LibnodaveConnectionLibrary.dll unter Verweise in das VB-Projekt hinzugefügt.
    Anschließend habe ich ein LibnodaveConnectionLibrary.vb Modul in das Projekt integriert.
    In diesem Projekt habe ich dann den Text:

    PublicModule LibnodaveConnectionLibrary
    PublicDeclareFunction getS5Timefrom Lib"LibNoDaveConnectionLibrary.dll" (ByVal b() AsByte, ByVal pos AsInteger) As System.TimeSpan
    EndModule

    integriert. Anschließend verwende ich die ein Private Sub im Ablauf Modul mit folgendem Code:

    PrivateSub buttonclick usw

    Dim buf(99) AsByte
    Dim zeit As TimeSpan

    res = daveReadBytes(dc, daveDB, 4, 0, 2, buf(0))
    zeit = gets5timefrom(buf, 0)

    EndSub

    Nur so geht mir der Debugger bei zeit = ... an und sagt dass die gets5time Funktion nicht in LibnodaveConnectionLibrary.dll gefunden wurde...

    Die funktion existiert auch nicht direkt in der dll. Ich habe bei mir die libnodave.net.dll welche bei libnodave dabei ist erweitert um diese funktionen. Wenn du die libnodave connection library verwendest, brauchst du diese funktionen aber nicht direkt, da diese library ein wrapper auf einer höheren ebene sein soll, das man sich nicht mit den ganzen sachen rumschlagen muss welche man bei libnodave beachten muss (pdu größe, umwandlung der datentypen, usw...). Also wenn du die funktionen willst welche ich in die libnodave.net.cs eingebaut habe, einfach nur diese kompielieren (da ist glaub bei libnodave eine batch dafür dabei!). Aber Achtung, Ich habe in diese auch schon funktionen meiner erweiterten libnodave.dll eingebaut (Routing), welche die orginale libnodave.dll nicht hat! Falls du meine Connection lib verwenden willst, liegt dieser auch ein VB.NET Beispielprogramm bei!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  6. #16
    Paul.Juergen ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.06.2010
    Ort
    NRW
    Beiträge
    8
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ok danke für die Aufklärung Jochen

    Hast du noch eine Ahnung warum genau der Wert 1s180ms zum Absturz führt- Nach dem Code oben ?...

  7. #17
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Paul.Juergen Beitrag anzeigen
    Ok danke für die Aufklärung Jochen

    Hast du noch eine Ahnung warum genau der Wert 1s180ms zum Absturz führt- Nach dem Code oben ?...

    Nö.... Musst halt mal haltepunkte in der funktion setzen und sehen was schiefläuft... Also meine c-Sharp Funktion geht auch mit 1s180ms!

    Nimm doch einfach meine libnodave.net.cs dann hast du die funktion...

    Mfg.
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

Ähnliche Themen

  1. libnodave-java-0.1 Counter und timer
    Von bresner1 im Forum Hochsprachen - OPC
    Antworten: 0
    Letzter Beitrag: 16.09.2011, 10:41
  2. libnodave timer/counter schreiben
    Von b0den im Forum Hochsprachen - OPC
    Antworten: 7
    Letzter Beitrag: 16.05.2008, 10:59
  3. Antworten: 3
    Letzter Beitrag: 28.04.2008, 09:03
  4. timer und counter im template FB
    Von Johannes F im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 07.01.2008, 18:54
  5. Libnodave Timer Counter
    Von lorenz2512 im Forum Hochsprachen - OPC
    Antworten: 7
    Letzter Beitrag: 30.10.2005, 15:15

Lesezeichen

Berechtigungen

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