C/C++ libnodave komplettes Programm aus S7 sichern/einspielen

nekron

Level-2
Beiträge
332
Reaktionspunkte
30
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi ...

hat jemand zufällig sowas schon mal gemacht ? (Das komplette Programm ausgelesen und als Binärdaten o.ae. gespeichert bzw. zurückgeladen)

Theoretisch kann libnodave das, in C# hab ich da auch schon zumindest Bausteine gelesen, aber in Purem C/C++ (dort wo es laufen muss gibts kein DotNET)

danke
michael
 
In der von mir modifizierten Version von libnodave gibts dafür davePutProgramBlock und daveGetProgramBlock. Der Code dafür stammt größtenteils aus dem Beispielprogramm welches bei libnodave dabei ist! Ich wollte es nur als funktionen in der DLL.
Die DLL gibts auf meiner Codplexseite, die kannst du natürlich auch in C/C++ verwenden (ohne C#)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Jochen,

hast du dazu vielleicht irgendwo mal ein beispiel in C mit einem VS-Projekt gemacht ? Entweder bin ich zu blöd, aber mein letztes mal reines C war in VS5/6, ich bekomm da im Moment nur Fehler ;(

Ich glaube es hat sich erledigt, ich bin auf dem besten Wege :)

Danke
michael
 
Zuletzt bearbeitet:
Nochwas: beim zurückspielen von SDBs muss man anscheinend die Reihenfolge beachten! Jetzt frag mich aber nicht, wie die Reihenfolge aussieht!
 
Die SDBs interessieren mich zum Glück nicht die Bohne ...

Die Original libnodave kann aber nur Bausteine lesen oder ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
jo soweit ich weis... das schreiben gibts da zwar auch, aber nicht in der lib sondern in einem extra programm!

deweiteren hab ich in der doUpload funktion noch folgendes gefixt:

*len+=netLen;

wird zu

*len=netLen;

warum weiss ich nicht mehr, glaube aber das sonst große bausteine nicht funktioniert haben.
Also mit meiner Modifizierten libnodave hab Ich auf jeden Fall down und upload an div SPSen getestet und es funzt!
 
Kannst dir auch hier mein Tool (Tools | JFK-Solutions) : Backup Restore Blocks ansehen, das nutzt die beiden Down und Upload funktionen.

Ist halt in CSharp, aber damit kannst du halt vorher testen ob der Up/Download mit meiner DLL funzt, und falls bei dir was nicht funzt, weißt du ob der Fehler in deinem Code oder meiner DLL liegt!
 
Das würde ich gerne nutzen bzw. ein bisserl Automatisieren, jedoch gibt es auf dem Zielsystem kein DotNET ...

Das Lesen funktioniert soweit auch, jedoch beim Schreiben hakts ...

Code:
void saveBlocksOfType(daveConnection * dc, int blockType) {
    int j, i, len;
    HANDLE fd;
    unsigned long res;
    char blockName [20];
    uc blockBuffer[200000],*bb;
    daveBlockEntry dbe[1024];   
    j=daveListBlocksOfType(dc, blockType, dbe);
    if (j<0) {
 return;
    }
    for (i=0; i<j; i++) {
 printf("%s%d  %d %d",
     daveBlockName(blockType),
     dbe[i].number, dbe[i].type[0],dbe[i].type[1]); 
 bb=blockBuffer;
    sprintf(blockName,"%s%d.mc7",daveBlockName(blockType), dbe[i].number); 
    fd = CreateFile(blockName,
            GENERIC_READ, 
            FILE_SHARE_READ, 
            NULL, 
            OPEN_EXISTING,
      FILE_ATTRIBUTE_NORMAL, 
            NULL);
    if (ReadFile(fd, blockBuffer, sizeof(blockBuffer) - 1, &len, NULL))
    {
            printf(" ... File Size: %d\n",len);
            davePutProgramBlock(dc,blockType,dbe[i].number,&blockBuffer,&len);
    }
    CloseHandle(fd);
    }
}

Hast du vielleicht eine Idee warum das schief geht ?

danke
michael
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das würde ich gerne nutzen bzw. ein bisserl Automatisieren, jedoch gibt es auf dem Zielsystem kein DotNET ...

Das hab Ich schon kappiert, mir gings drum, das du mit den gleichen Bausteinen welche du von deinem Zielsystem lesen bzw schreiben willst, den von deinem Entwicklungsrechner mit meiner Software machst, um zu schauen obs mit der Bibliothek überhaupt funktioniert! So kannst du einen fehler in meinem Code ausschließen!
 
Müsstest du an ReadFile nicht auch die Adresse von blockBuffer übergeben ?? d.h. &blockBuffer

Oder
blockBuffer ist schon ein Pointer, weiß nicht mehr so genau wie das in C ist, dann müsste das & doch bei PutProgrammBlock weg...
 
Zurück
Oben