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

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

Thema: libnodave Bit setzen

  1. #11
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 420 Danke für 337 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von foreach Beitrag anzeigen
    So, jetzt habe ich die 7 unteren Bits mal mit 7 Bitfunktionen gesetzt, ich schreibe also nicht mehr auf das komplette Byte.
    Ich hole mir also aus dem einen Byte Bit für Bit raus und schreibe sie in das andere. Meint ihr das mit "Bitfunktionen" ?
    Und trotzdem bleibt er stehen !
    Kann es daran liegen das die 319-3PN/DP SPS eine integrierte CP hat und das es deswegen das Problem gibt.

    U DB1000.DBX13.0
    = DB1000.DBX11.0

    U DB1000.DBX13.1
    = DB1000.DBX11.1

    usw....

    U DB1000.DBX13.6
    = DB1000.DBX11.6


    Schönen FA
    Dann poste doch mal deinen ganzen Code wie du's jetzt machst.
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  2. #12
    foreach ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.11.2012
    Beiträge
    12
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    //Hier mal der ganze Code...

    L DB1000.DBB 11
    L W#16#7F
    UW
    L DB1000.DBB 13
    <>I
    SPB M001
    L 120
    >I
    SPB M002
    L DB1000.DBB 13
    + 1
    SPA M003
    M002: NOP 0
    L DB1000.DBW 6
    + 1
    T DB1000.DBW 6
    L 0
    M003: NOP 0
    //T DB1000.DBB 11
    T DB1000.DBB 13
    U DB1000.DBX 13.0
    = DB1000.DBX 11.0
    U DB1000.DBX 13.1
    = DB1000.DBX 11.1
    U DB1000.DBX 13.2
    = DB1000.DBX 11.2
    U DB1000.DBX 13.3
    = DB1000.DBX 11.3
    U DB1000.DBX 13.4
    = DB1000.DBX 11.4
    U DB1000.DBX 13.5
    = DB1000.DBX 11.5
    U DB1000.DBX 13.6
    = DB1000.DBX 11.6
    // U #TEMP6
    // = DB1000.DBX 11.7
    M001: NOP 0

  3. #13
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 420 Danke für 337 Beiträge

    Standard

    dein code welchen du mit libnodave verwendest?
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  4. #14
    foreach ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.11.2012
    Beiträge
    12
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ich rufe allle paar ms folgende Funktion auf.....


    public int SetBit(int db, int offset, int bitPos, object value)
    {
    //db=1000
    //offset=11
    //bitPos=7
    //value=true

    int result = 0;

    if(Convert.ToBoolean(value) == true)
    {
    result = dc.setBit(libnodave.daveDB, db, offset, bitPos);
    }
    else
    {
    result = dc.clearBit(libnodave.daveDB, db, offset, bitPos);
    }

    return result;
    }

    wobei ich setBit und ClearBit noch aus libnodave heraus exportiert habe (Ich übersetzte das libnodave Projekt jedesmal mit), dmit ich sie aus C# heraus aufrufen konnte.


    [DllImport("libnodave.dll"/*, PreserveSig=false */ )]
    protected static extern int daveSetBit(IntPtr dc, int area, int DBnumber, int byteAdr, int bitAdr);
    public int setBit(int area, int DBnumber, int byteAdr, int bitAdr)
    {
    return daveSetBit(pointer, area, DBnumber, byteAdr, bitAdr);
    }

    [DllImport("libnodave.dll"/*, PreserveSig=false */ )]
    protected static extern int daveClrBit(IntPtr dc, int area, int DBnumber, int byteAdr, int bitAdr);
    public int clearBit(int area, int DBnumber, int byteAdr, int bitAdr)
    {
    return daveClrBit(pointer, area, DBnumber, byteAdr, bitAdr);
    }

  5. #15
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 420 Danke für 337 Beiträge

    Standard

    Also Ich kann bei dir jetzt keinen Fehler entdecken, wüsste aber auch nicht das libnodave da Fehler macht (und kanns mir auch nicht vorstellen)
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  6. #16
    foreach ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    21.11.2012
    Beiträge
    12
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ich glaube auch nicht, daß libnodave einen Fehler macht. Ich vermute, daß die SPS das nicht kann, weil sie noch einen internen Kommunikationsbaustein hat, der das verhindert.
    Wie gesagt eine noch ältere 400er SPS ist 20 Stunden ohne stehenbleiben durchgelaufen.
    Was mich nur wundert ist, daß libnodave aus der 300er SPS die Fehlermeldung 6 bei writeBits rausbekommen hat, als ich versucht habe 3 Bits gleichzeitig zu schreiben (testweise).
    6 bedeutet, daß diese SPS nicht in der Lage ist mehrere Bits gleichzeitig zu schreiben.
    Ich hätte jetzt erwartet, daß sie/oder libnodave eine Fehlermeldung bringt, daß auch ein einziges Bit schreiben schon nicht geht.

    Für unsere Anwendungsfälle ist das zwar alles nicht ganz so tragisch, aber die letzte Sicherheit, daß nichts schief geht haben wir eben nicht.
    Und ich würde es gerne verstehen.

    Danke für eure Hilfe

  7. #17
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also so ganz verstehe ich nicht was du da vorhast.
    Deine Bedingung
    Code:
    L DB1000.DBB 11
    L W#16#7F
    UW
    L DB1000.DBB 13
    <>I
    ist wahr wenn deine PC Anwendung im Zyklus auf das Byte schreibt. Bei alten 300er CPUs wird immer am Zykluskontrollpunkt geschrieben. Bei den 400ern immer und bei den neuen 300ern optional kann auch im Zyklus auf die Daten geschrieben werden.
    Wenn dein Codeschnippsel das einzige ist was die CPU zu tun hat, ist die Wahrscheinlichkeit größer dass eben auch im Zyklus auf die Daten geschrieben wird, als wenn der Programmteil nur 1 Promille vom Gesamtcode ausmacht. Wenn man sein Programm so geschrieben hat dass es wichtig ist auf konsistente Daten zuzugreifen muss man programmtechnisch dafür Sorge tragen dass dies der Fall ist (z.B. durch atomare Befehle zwischenspeichern).

    Wenn es der Fall ist dass "das Programm stoppt" wie du schreibst zeigt es doch eben dass alles wie erwartet funktioniert.

Ähnliche Themen

  1. Bit in einem Word im FB setzen
    Von volvopenta im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 04.10.2012, 20:30
  2. Bit in der SPS setzen mit VB.net 2008 und libnodave
    Von poppycock im Forum Hochsprachen - OPC
    Antworten: 12
    Letzter Beitrag: 17.06.2009, 15:59
  3. s7 200 Bit setzen
    Von Praktikus im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 19.02.2008, 09:39
  4. Libnodave + Excel einzelnes Bit (setzen bzw. abfragen)
    Von Otto im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 21.12.2006, 17:24
  5. SCL Bit setzen
    Von HeinBloed im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 11.12.2006, 15:50

Lesezeichen

Berechtigungen

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