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

Ergebnis 1 bis 8 von 8

Thema: Libnodave daveReadBytes Verständnis Problem

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

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    mittlerweile bin ich mit meinem Latein am Ende... Ich habe einfach ein Verständnis Problem mit der Funktion daveReadBytes.
    Ich möchte mit daveReadBytes alle Ausgänge auf einmal aus lesen, scheiter aber an dem Auswerten des Ergebnis.

    Es wird eine 0BA7 verwendet und programmiert wird in C.

    Mein Versuch, der aber leider nur Mist ausgiebt:
    Code:
               res = daveReadBytes(dc, daveOutputs, 0, 0, 2, NULL);
    
                if (res == 0){
                    printf("A1: %d\n", daveGetU8(dc));
                    printf("A2: %d\n", daveGetU8(dc));
                    usw. ...
                    ...
                }
                else {
                    printf("No result found.\n");
                }
    Bisher habe ich mit daveReadBits die Ausgänge ausgelesen, möchte aber das ganze etwas performater gestallten mit weniger abfragen.

    Wie es bisher funktioniert:
    Code:
    for (i=0; i<=15; i++) {
        res=daveReadBits(dc, daveOutputs, 0, i, 1,NULL);
        if (res==0) printf("A%d: %d\n", i, daveGetU8(dc));
    }
    Kann mir jemand etwas auf die Sprünge helfen? Danke schon einmal im voraus.
    Zitieren Zitieren Libnodave daveReadBytes Verständnis Problem  

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

    Standard

    Wenn du daveGetU8 aufrufst, erhälst du ein Byte vom puffer, d.h. darin sind due Zustände von 8 Ausgangs Bits
    Das scheint nur bei DaveReadBits anderst zu sein!
    Du musst dein Byt dann entsprechend maskieren

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

    msfreak (03.01.2015)

  4. #3
    msfreak ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.05.2013
    Beiträge
    4
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die Antwort.

    Genau an dem Punk komme ich nicht weiter, wie maskiere ich den das Byte das da zurückgegeben wird, so das ich den Zustand des Ausgangs erhalte?

  5. #4
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Code:
    by8ausg=daveGetU8(dc);
    bit0=(by8ausg and 1);
    bit1=(by8ausg and 2);
    ...
    bit7=(by8ausg and 128 ;
    
    if(by8ausg and 1) bit0=1; else bit0=0;
    ...
    if(by8ausg and 128 ) bit7=1; else bit7=0;

  6. Folgender Benutzer sagt Danke zu Zottel für den nützlichen Beitrag:

    msfreak (03.01.2015)

  7. #5
    msfreak ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.05.2013
    Beiträge
    4
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die Unterstützung, ihr habt mir geholfen.

    So funktioniert der Code jetzt bei mir. Danke.

    Code:
    by8ausg = daveGetU8(dc);
    
    if(by8ausg & 1) bit0=1;else bit0=0;
    if(by8ausg & 2) bit1=1;else bit1=0;
    ...
    if(by8ausg & 128) bit7=1;else bit7=0;

  8. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von msfreak Beitrag anzeigen
    Code:
    if(by8ausg & 1) bit0=1;else bit0=0;
    Wenn man schon in C programmiert, warum sucht man sich dann die absolut umständlichste, uneffektivste und fehleranfälligste Variante aus?
    C besteht nicht nur aus IF, ELSE und Strichpunkt. C ist eigentlich dafür bekannt, das man sehr performant programmieren kann, wenn man die Programmiersprache beherrscht.

    Code:
    //dies ist schon eindeutig und ausreichend:
    bit0 = by8ausg & 1;
    
    //falls das als zu schwer lesbar aussieht, geht auch dies:
    bit0 = by8ausg & 1 ? 1 : 0;
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #7
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Im errsten Fall hätten bit0 ... bit7 0 oder den Wert des Bits (1...12, im zweiten Fall immer 0 oder 1. Da stellt sich die Frage, wie es gewollt ist.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  10. #8
    msfreak ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.05.2013
    Beiträge
    4
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich habe mich für die zweite Variante entschieden, macht das ganze wirklich etwas übersichtlicher. Danke für den Hinweis.

    Zitat Zitat von PN/DP Beitrag anzeigen
    Code:
    //falls das als zu schwer lesbar aussieht, geht auch dies:
    bit0 = by8ausg & 1 ? 1 : 0;
    Harald

Ähnliche Themen

  1. Verständnis Retain Persistent
    Von vollmi im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 26.03.2012, 10:53
  2. Antworten: 0
    Letzter Beitrag: 09.09.2010, 00:27
  3. S5 zu S7, Verständnis Frage zu LIR/TIR
    Von mordillo im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 04.12.2009, 08:24
  4. Verständnis Frage: PID Kaskade
    Von mst im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 16.06.2009, 19:20
  5. daveReadBytes schreibt nicht in den Buffer (Excel VBA)
    Von Martin Glarner im Forum Hochsprachen - OPC
    Antworten: 20
    Letzter Beitrag: 02.12.2005, 10:21

Stichworte

Lesezeichen

Berechtigungen

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