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

Ergebnis 1 bis 6 von 6

Thema: Mit libnodave FCs in S7-315 übertragen

  1. #1
    Registriert seit
    08.09.2011
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen,
    ich beschäftige mich seit kurzem mit libnodave und komme mit den Funktionen ganz gut zurecht. Ich gerne FCs auf die CPU schreiben.
    Ich hab in der Doku dazu nichts gefunden. Jedoch hab ich hier im Forum schon öfters davon gelesen.

    Ist es überhaupt möglich mit Libnodave FCs in die CPU zu schreiben?

    Und wenn ja, wie bzw. wo in Libnodave finde ich ein Beispiel oder eine Erklärung?

    Danke schonmal im Vorraus

    MfG
    Zitieren Zitieren Mit libnodave FCs in S7-315 übertragen  

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

    Standard

    Jo...

    In libnodave gibt es ein Beispielprogramm "testmpiload", welches genau diesen zweck erfüllen sollte!

    Ich hab diese Funktion auch mal in meine gänderte libnodave eingebaut, jedoch nie in meine Connection Lib, da Ich bisher nicht zum testen gekommen bin!

    So hab Ichs drinn, keine garantie obs funzt:

    Code:
    int DECL2 davePutProgramBlock(daveConnection * dc, int blockType, int number, char* buffer, int * length) {
    #define maxPBlockLen 0xDe    // real maximum 222 bytes
    
        int res=0;
        int cnt=0;
        int size=0;
        int blockNumber,rawLen,netLen,blockCont;
    
        uc pup[]= {            // Load request
            0x1A,0,1,0,0,0,0,0,9,
            0x5F,0x30,0x42,0x30,0x30,0x30,0x30,0x34,0x50, // block type code and number
            //     _    0    B   0     0    0    0    4    P
            //        SDB        
            0x0D,
            0x31,0x30,0x30,0x30,0x32,0x30,0x38,0x30,0x30,0x30,0x31,0x31,0x30,0    // file length and netto length
            //     1   0     0    0    2    0    8    0    0    0    1    1    0
        };
    
        PDU p,p2;
    
        uc pablock[]= {    // parameters for parts of a block
            0x1B,0
        };
    
        uc progBlock[maxPBlockLen + 4]= {
            0,maxPBlockLen,0,0xFB,    // This seems to be a fix prefix for program blocks
        };
    
        memcpy(progBlock+4,buffer,maxPBlockLen);
    
        rawLen=daveGetU16from(progBlock+14);
        netLen=daveGetU16from(progBlock+38);
    
        pup[17]='P';
        paInsert[19]='P';
        sprintf((char*)pup+19,"1%06d%06d",rawLen,netLen);
    
        p.header=dc->msgOut+dc->PDUstartO;
        _daveInitPDUheader(&p, 1);
        _daveAddParam(&p, pup, sizeof(pup)-1);
    
        res=_daveExchange(dc, &p);
        if (res==daveResOK) {
            res=_daveSetupReceivedPDU(dc, &p2);
            if (daveGetDebug() & daveDebugPDU) {
                _daveDumpPDU(&p2);
            }
            res=daveGetPDUerror(&p2);
    
            if (res==0) {
                blockCont=1;
                res=daveGetResponse(dc);
                res=_daveSetupReceivedPDU(dc, &p2);
    
                cnt = 0;
    
                do {
                    res=0;
                    res=_daveSetupReceivedPDU(dc, &p2);
    
                    number=((PDUHeader*)p2.header)->number;
                    if (p2.param[0]==0x1B) {
                        //READFILE
                        memcpy(progBlock+4,buffer+cnt,maxPBlockLen);
    
                        p.header=dc->msgOut+dc->PDUstartO;
                        _daveInitPDUheader(&p, 3);
                        size = maxPBlockLen;
    
                        if (*length > (cnt+1) * maxPBlockLen)  
                            pablock[1]=1;
                        else
                        {
                            size = *length - (cnt * maxPBlockLen);
                            pablock[1]=0;    //last block
                            blockCont=0;
                        }
                        //if (res==maxPBlockLen) pablock[1]=1;    //more blocks
                        //else {
                        //    pablock[1]=0;    //last block
                        //    blockCont=0;
                        //}    
                        progBlock[1]=res;
                        _daveAddParam(&p, pablock, sizeof(pablock));
                        _daveAddData(&p, progBlock, size + 4 /* size of block) */);
                        ((PDUHeader*)p.header)->number=number;
                        if (daveGetDebug() & daveDebugPDU) {
                            _daveDumpPDU(&p);
                        }
                        _daveExchange(dc,&p);
                    }    
                } while (blockCont);  
    
                res=_daveSetupReceivedPDU(dc, &p2);
                if (daveGetDebug() & daveDebugPDU) {
                    _daveDumpPDU(&p2);
                }
                number=((PDUHeader*)p2.header)->number;
                if (p2.param[0]==0x1C) {
                    p.header=dc->msgOut+dc->PDUstartO;
    
                    _daveInitPDUheader(&p, 3);
                    _daveAddParam(&p, p2.param,1);
                    ((PDUHeader*)p.header)->number=number;
                    _daveExchange(dc,&p);
    
                    p.header=dc->msgOut+dc->PDUstartO;
                    _daveInitPDUheader(&p, 1);
                    _daveAddParam(&p, paInsert, sizeof(paInsert));
                    res=_daveExchange(dc, &p);
                    res=_daveSetupReceivedPDU(dc, &p2);
                    res=daveGetPDUerror(&p2);
                }
            } else {
                printf("CPU doesn't accept load request:%04X\n",res);
            }    
            return res;
        }
        return res;
    }
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  3. #3
    Mibra ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.09.2011
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke Jochen für die schnelle Antwort!

    Ich werde mir sobald ich Zeit habe deinen Code mal genauer anschaun.
    Ich dachte immer, dass mit "Programblock" ein OB gemeint ist und kein FB.
    Aber scheinbar geht beides.

    Was ich nicht gefunden habe ist wie kann ich eine AWL Funktion in die S7 übertragen?
    Bzw. wie und wo übergibt man in "testMPIload" die Bausteinnummer und -inhalt?

    Ich möchte z.B.: eine AWL-Funktion mit folgendem Inhalt:

    Code:
    AUF   DB320
    AUF   DI 11
    U     DIX 10.0
    =     DBX. 0.2
    Danke schonmal im Vorraus.

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

    Standard

    Zitat Zitat von Mibra Beitrag anzeigen
    Danke Jochen für die schnelle Antwort!

    Ich werde mir sobald ich Zeit habe deinen Code mal genauer anschaun.
    Ich dachte immer, dass mit "Programblock" ein OB gemeint ist und kein FB.
    Aber scheinbar geht beides.

    Was ich nicht gefunden habe ist wie kann ich eine AWL Funktion in die S7 übertragen?
    Bzw. wie und wo übergibt man in "testMPIload" die Bausteinnummer und -inhalt?

    Ich möchte z.B.: eine AWL-Funktion mit folgendem Inhalt:

    Code:
    AUF   DB320
    AUF   DI 11
    U     DIX 10.0
    =     DBX. 0.2
    Danke schonmal im Vorraus.
    Du musst den AWL Code erst mal in MC7 Code umwandeln. Das macht libnodave nicht!!!

    Ich hab das mal angefangen in meiner Lib zu realisieren, das ist aber noch lang nicht fertig! Nur der WEG MC7->AWL ist fertig, der bringt dir jedoch nichts!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  5. #5
    Mibra ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.09.2011
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi,
    ok, "MC7-Code" sagt mir nichts.
    Kannst du evtl hier ein paar links zu dem Thema posten, dann
    kann ich mir des mal genauer anschaun.

    MfG und danke!

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Mibra Beitrag anzeigen
    Hi,
    ok, "MC7-Code" sagt mir nichts.
    Kannst du evtl hier ein paar links zu dem Thema posten, dann
    kann ich mir des mal genauer anschaun.

    MfG und danke!
    Die AWL Anweisungen werden in HEX-Code übersetzt, wobei jede Anweisung einen bestimmten COde hat. Mehr Infos gibts hier: http://www.sps-forum.de/showthread.php?t=27703

    Wie gesagt, Bausteine von der CPU laden, und wieder in AWL Code übersetzten kannst du mit meiner Bibliothek machen (http://siemensplctoolboxlib.codeplex.com/) aber anderstrum ists noch nicht drinn! (Nur angefangen).
    ---------------------------------------------
    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. OP 17 übertragen?????
    Von CZach001 im Forum HMI
    Antworten: 3
    Letzter Beitrag: 19.10.2011, 07:34
  2. Antworten: 0
    Letzter Beitrag: 09.09.2010, 00:27
  3. ÄÖnderungen am libnodave.net.cs File von libnodave
    Von Jochen Kühner im Forum Hochsprachen - OPC
    Antworten: 5
    Letzter Beitrag: 12.05.2010, 16:56
  4. LibNoDave unter VB.Net ohne libnodave.net.dll
    Von Earny im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 09.03.2010, 18:57
  5. Bausteine mit Libnodave übertragen
    Von ronnie.b im Forum Hochsprachen - OPC
    Antworten: 0
    Letzter Beitrag: 08.03.2008, 10:58

Stichworte

Lesezeichen

Berechtigungen

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