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

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 32

Thema: Help with the libnodave library

  1. #1
    Registriert seit
    07.06.2011
    Beiträge
    24
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi, I am new in this forum, as I am new at using libnodave and C++. I was wondering if someone could help me figure out how to use the writebytes class to write into a S7-300's Datablocks. I can see how to write into the Flag memory but not the Datablocks. Any help is greatly appreciated. Thank you,

    Van
    Zitieren Zitieren Help with the libnodave library  

  2. #2
    Registriert seit
    27.11.2005
    Ort
    im Osten
    Beiträge
    1.183
    Danke
    141
    Erhielt 271 Danke für 248 Beiträge

    Standard

    Example from the Libnodave Documentation:
    Write a sequence of bytes from a buffer to PLC memory. int daveWriteBytes(daveConnection * dc, int area, int DB, int start, int len, void * buffer);
    Parameters:

    dc: A pointer to a daveConnection structure representing an established connection.
    area: A constant that specifies a memory area in the PLC.
    DB: The number of a data block. Only meaningful if area is daveDB. Use 0 oterwise.
    start: The address of the first byte in the block.
    len: The number of bytes to write.
    buffer: A pointer to some memory space with the writedata.
    Example:
    res=davewriteBytes(dc, daveDB, 0, 4, 2, buffer) -> write 2 Bytes from "buffer" to DB0.DBW4
    Geändert von MW (07.06.2011 um 22:47 Uhr)
    Es ist nicht schwierig, mit noch nicht erreichten Zielen zu Leben; schwierig ist, ohne Ziele zu Leben !
    (Günther Kraftschik)

  3. #3
    vanvanero ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.06.2011
    Beiträge
    24
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    okay, thank you for your reply
    Geändert von vanvanero (07.06.2011 um 22:49 Uhr)

  4. #4
    vanvanero ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.06.2011
    Beiträge
    24
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    So.......here is where I'm at with your help:

    if(doWriteDB) {
    printf("Writing to DataBlock memory.\n");
    wait();
    daveWriteBytes(dc, daveDB, 1, 0, 2, NULL);
    a=daveGetU16(dc)
    printf("DB1: DW0: %d\n",a);
    wait();
    }//doWriteDB

    // Here I want to write 2 into DataBlock 1. Then I want to ouput in the program the change. Is this correct?
    Geändert von vanvanero (07.06.2011 um 22:49 Uhr)

  5. #5
    Registriert seit
    27.11.2005
    Ort
    im Osten
    Beiträge
    1.183
    Danke
    141
    Erhielt 271 Danke für 248 Beiträge

    Standard

    you have to change anything

    Zitat Zitat von vanvanero Beitrag anzeigen
    if(doWriteDB) {
    printf("Writing to DataBlock memory.\n");
    wait();
    daveWriteBytes(dc, daveDB, 1, 0, 2, NULL); --> you must transfer your Data to the Function (not "NULL")
    a=daveGetU16(dc) --> befor you can show the actual Data from the PLC you must read ("readbytes") them from the PLC after the write function.
    printf("DB1: DW0: %d\n",a);
    wait();
    }//doWriteDB
    Es ist nicht schwierig, mit noch nicht erreichten Zielen zu Leben; schwierig ist, ohne Ziele zu Leben !
    (Günther Kraftschik)

  6. #6
    vanvanero ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.06.2011
    Beiträge
    24
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    so..... can I say:

    daveWriteBytes(dc, daveDB, 1, 0, 2, &a); ??

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

    Standard

    Zitat Zitat von vanvanero Beitrag anzeigen
    so..... can I say:

    daveWriteBytes(dc, daveDB, 1, 0, 2, &a); ??
    excerpt from testMPI.c:

    if(doWrite) {
    printf("Now we write back these data after incrementing the integers by 1,2 and 3 and the float by 1.1.\n");
    wait();
    /*
    Attention! you need to daveSwapIed little endian variables before using them as a buffer for
    daveWriteBytes() or before copying them into a buffer for daveWriteBytes()!
    */
    a=daveSwapIed_32(a+1);
    // a was read from the PLC before.
    // ...a+1 increments a
    // and SwapIed_32() swaps the bytes (If Endianness Different, i.e. use it on any system, but on B.E., it is a NOP).
    // the next instruction will write it to the PLC:
    daveWriteBytes(dc,daveFlags,0,0,4,&a);
    //daveWriteBytes(dc,daveDB,42,17,4,&a); would write it to data block 42, starting with DBB 17.
    // note the a is an int (32bit) and len (4) happens to be the byte size of a!
    b=daveSwapIed_32(b+2);
    daveWriteBytes(dc,daveFlags,0,4,4,&b);
    c=daveSwapIed_32(c+3);
    daveWriteBytes(dc,daveFlags,0,8,4,&c);
    d=toPLCfloat(d+1.1);
    daveWriteBytes(dc,daveFlags,0,12,4,&d);
    /*
    * Read back and show the new values, so users may notice the difference:
    */
    // what follows is just proof reading !
    daveReadBytes(dc,daveFlags,0,0,16,NULL);
    // Now the internal buffer has been filled by daveReadBytes
    // There are 16 bytes in the buffer...
    // ...and the 4 operations that follow will consume 4 bytes each
    a=daveGetU32(dc);
    b=daveGetU32(dc);
    c=daveGetU32(dc);
    d=daveGetFloat(dc);
    printf("FD0: %d\n",a);
    printf("FD4: %d\n",b);
    printf("FD8: %d\n",c);
    printf("FD12: %f\n",d);
    } // doWrite
    Geändert von Zottel (08.06.2011 um 00:41 Uhr)

  8. #8
    vanvanero ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.06.2011
    Beiträge
    24
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    can you tell me the difference between:


    DB1: DW0:
    and
    DB1: DW1:



    Thanks, I am making much progress from your help, by the way, so thank you.

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

    Standard

    The DW0 is put together with DBB0 and DBB1
    DB1 conatins DBB1 und DBB2
    Normaly you should use a even DW Number to read.
    The reading and writing is faster


    bike

  10. #10
    vanvanero ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.06.2011
    Beiträge
    24
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Bike,

    Thank you, how do I address these memory areas (DW0, DW1, DBB0, DBB1) through the code that has been provided in this thread?

    van

Ähnliche Themen

  1. .Net Library PLCCom S7
    Von Indi.An-er im Forum Werbung und Produktneuheiten
    Antworten: 5
    Letzter Beitrag: 28.09.2010, 13:41
  2. LibNodave mit Routing und Connection Library...
    Von Jochen Kühner im Forum Hochsprachen - OPC
    Antworten: 0
    Letzter Beitrag: 21.06.2010, 11:49
  3. Symbol Library
    Von K-SYSTEM-D im Forum Hochsprachen - OPC
    Antworten: 7
    Letzter Beitrag: 08.06.2010, 18:03
  4. LibNoDave und Connection Library mit Routing...
    Von Jochen Kühner im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 27.05.2010, 08:06
  5. FB in library???
    Von rene im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 24.10.2007, 08:22

Lesezeichen

Berechtigungen

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