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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: problem mit schreiben von libnodave zu eine cp315-2dp/pd

  1. #1
    Registriert seit
    08.04.2008
    Beiträge
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wir wollen durch libnodave 0.8.4.4 data lesen und schreiben von vb nach ein siemens s7 315-2dp/pd. Wir haben es shon geschaft data zu lesen aus ein merkerword. Nun wollen wir data wieder zuruck schreiben auf die selben platz aber wir kreigen eine fehler in dem folgende code:
    Code:
      [DllImport("C:\\libnodave.dll"/*, PreserveSig=false */ )]
                protected static extern int daveWriteBytes(IntPtr dc, int area, int DBnumber, int start, int len, byte[] buffer);
    
                public int writeBytes(int area, int DBnumber, int start, int len, byte[] buffer)
                {
                    return daveWriteBytes(pointer, area, DBnumber, start, len, buffer);
                }
    den fehler die wir kreigen ist dem folgende: Attempted to read or write protected memory, this is often an indication that other memory is corrupt.
    In step7 können wir aber sehen das der plc nicht protected ist.
    Kan jemand uns helfen.
    Angehängte Dateien Angehängte Dateien
    Geändert von fldrgn (09.04.2008 um 10:40 Uhr)
    Zitieren Zitieren problem mit schreiben von libnodave zu eine cp315-2dp/pd  

  2. #2
    Registriert seit
    19.09.2005
    Ort
    Freudenstadt
    Beiträge
    811
    Danke
    64
    Erhielt 101 Danke für 64 Beiträge

    Standard

    Zitat Zitat von fldrgn Beitrag anzeigen
    Wir wollen durch libnodave 0.8.4.4 data lesen und schreiben von vb ...

    code:
    Code:
      [DllImport("C:\\libnodave.dll"/*, PreserveSig=false */ )]
                protected static extern int daveWriteBytes(IntPtr dc, int area, int DBnumber, int start, int len, byte[] buffer);
    
                public int writeBytes(int area, int DBnumber, int start, int len, byte[] buffer)
                {
                    return daveWriteBytes(pointer, area, DBnumber, start, len, buffer);
                }
    Für mich sieht das eher nach C(++/#) aus als nach vb ...

    Wenn das unter .net läuft, dann solltet Ihr euch die entsprechenden Beispiele im Unterverzeichnis C-Sharp von libnodave mal anschauen, denn .net reagiert AFAIK allergisch auf die Übergabe von Pointern zwischen managed und unmanaged Code.

    [edit]
    OK, hab gerade gesehen, das ist schon aus den Beispielen ...

    Hat "pointer" einen gültigen Wert ?
    Ist "buffer" so groß, wie "len" behauptet ?
    [/edit]

    Gruß Axel
    Geändert von afk (09.04.2008 um 12:12 Uhr)
    Man muß sparn wo mn knn!

  3. #3
    fldrgn ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.04.2008
    Beiträge
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    danke fur das snelle antwort.
    Den pointer werd ins program selber angemacht und wer können shon ein merkerword lesen. Den pointer muss dan doch gut sein?
    Den buffer had kein begrenzende wert.

  4. #4
    Registriert seit
    19.09.2005
    Ort
    Freudenstadt
    Beiträge
    811
    Danke
    64
    Erhielt 101 Danke für 64 Beiträge

    Standard

    Zitat Zitat von fldrgn Beitrag anzeigen
    Den pointer werd ins program selber angemacht und wer können shon ein merkerword lesen. Den pointer muss dan doch gut sein?
    So denke ich auch.

    Zitat Zitat von fldrgn Beitrag anzeigen
    Den buffer had kein begrenzende wert.
    Wie ? Der muß doch irgendeine Größe haben.
    Wenn nicht, dann ist auch kein Speicher für den Buffer reserviert, und damit klar, woher die Fehlermeldung kommt ...


    Gruß Axel
    Man muß sparn wo mn knn!

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

    Standard

    der is auch deklariert aber wirr haben ihn keine feste werde gegeben.
    beispiel: Public byte[] B1; // Buffer
    Dadurch kan er alle speicher gebrauchen den er notig had oder habben wir das falsch?

  6. #6
    Registriert seit
    19.09.2005
    Ort
    Freudenstadt
    Beiträge
    811
    Danke
    64
    Erhielt 101 Danke für 64 Beiträge

    Standard

    Zitat Zitat von fldrgn Beitrag anzeigen
    Dadurch kan er alle speicher gebrauchen den er notig had oder habben wir das falsch?
    Ganz falsch, der Speicher muß schon vor dem Funktionsaufruf reserviert sein, und die zu schreibenden Werte müssen auch schon drin stehen.

    Woher sollte libnodave denn sonst wissen, was in die SPS geschrieben werden soll ?


    Gruß Axel
    Man muß sparn wo mn knn!

  7. Folgender Benutzer sagt Danke zu afk für den nützlichen Beitrag:

    fldrgn (10.04.2008)

  8. #7
    fldrgn ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.04.2008
    Beiträge
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    da hast du ganz recht. wir können jetzt shon schreiben aber die data komt nog nicht gut an.
    Selber denken wir das es vielicht in volgende code nicht ganz gut geht. Kan jemand uns sagen ob diese codes güt geschrieben sind?
    Code:
    [DllImport("C:\\libnodave.dll"/*, PreserveSig=false */ )]
    protected static extern int davePut16(IntPtr dc, byte[] buffer, int value);
    public int put16(byte[] buffer, int value)
    {
        return davePut16(pointer, buffer, value);
    }
    bin niederlander also mein deutsch is ganz slecht

  9. #8
    Registriert seit
    19.09.2005
    Ort
    Freudenstadt
    Beiträge
    811
    Danke
    64
    Erhielt 101 Danke für 64 Beiträge

    Standard

    Zitat Zitat von fldrgn Beitrag anzeigen
    da hast du ganz recht. wir können jetzt shon schreiben aber die data komt nog nicht gut an.
    Selber denken wir das es vielicht in volgende code nicht ganz gut geht. Kan jemand uns sagen ob diese codes güt geschrieben sind?
    Code:
    [DllImport("C:\\libnodave.dll"/*, PreserveSig=false */ )]
    protected static extern int davePut16(IntPtr dc, byte[] buffer, int value);
    public int put16(byte[] buffer, int value)
    {
        return davePut16(pointer, buffer, value);
    }
    Wenn die Fehlermeldung aus dem ersten Beitrag beim Aufruf der "davePut..."-Funktionen mit einem Buffer, für den noch kein Speicher reserviert ist, wundert mich das nicht.

    Alle libnodave-Funktionen, an die ein Buffer übergeben wird, erwarten, daß der Speicher für diesen Buffer schon reserviert ist. Das Anwendungsprogramm muß die Speicherverwaltung übernehmen, libnodave macht das nur für die eigenen, internen Buffer.

    Der Code der "davePut..."-Funktionen macht also genau das, was er soll, er muß aber mit korrekt initialisierten Parametern aufgerufen werden.

    Ich würde es mal so versuchen: Public byte[500] B1; // Buffer


    Gruß Axel
    Geändert von afk (10.04.2008 um 10:58 Uhr) Grund: Wechstaben verbuchselt ...
    Man muß sparn wo mn knn!

  10. #9
    fldrgn ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.04.2008
    Beiträge
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    dem Public byte[500] B1; // Buffer habden wir shon ins program geschrieben. Das soll also das problem nicht sein. Wir kriegen auch kein fehler zu sehen aber den data den wir inlesen komt nicht an wen wir den data namelich wieder probieren aus zu lesen zeigt es 0 an
    Geändert von fldrgn (10.04.2008 um 11:50 Uhr)
    bin niederlander also mein deutsch is ganz slecht

  11. #10
    Registriert seit
    19.09.2005
    Ort
    Freudenstadt
    Beiträge
    811
    Danke
    64
    Erhielt 101 Danke für 64 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Gibt es jetzt noch ein Problem, oder funktioniert jetzt alles ?

    Gruß Axel
    Man muß sparn wo mn knn!

Ähnliche Themen

  1. Libnodave PAW schreiben
    Von FeigeKalle im Forum Hochsprachen - OPC
    Antworten: 9
    Letzter Beitrag: 04.02.2011, 14:45
  2. Antworten: 0
    Letzter Beitrag: 09.09.2010, 00:27
  3. In eine Datei schreiben
    Von Bensen83 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 20.03.2010, 15:30
  4. mit libnodave in db schreiben
    Von mike97714 im Forum Hochsprachen - OPC
    Antworten: 3
    Letzter Beitrag: 30.06.2009, 08:33
  5. Antworten: 3
    Letzter Beitrag: 23.05.2005, 11:34

Lesezeichen

Berechtigungen

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