AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein 'Adressfehler beim Auslesen einer Simatic S7-200'
Thema durchsuchen
Ansicht
Themen-Optionen

'Adressfehler beim Auslesen einer Simatic S7-200'

Ein Thema von schwigi · begonnen am 30. Jul 2007 · letzter Beitrag vom 7. Aug 2007
Antwort Antwort
schwigi

Registriert seit: 24. Jul 2007
Ort: Rottweil
10 Beiträge
 
#1

'Adressfehler beim Auslesen einer Simatic S7-200'

  Alt 30. Jul 2007, 18:32


Hallo,

kennt sich irgendjemand mit PRODAVE aus ?
ich habe ein kleines Problem bei der Kommunikation mit einer S7-200 (über PC_PPI-Kabel).
Ich will mit PRODAVE S7 mini einen Datenbereich aus einer S7-200 auslesen.
Dazu habe ich ein Delphiprogramm erstellt. Beim Aufruf des Auslesebefehls kommen zwar die gewünschten Daten, gleichzeitig bekomme ich aber als Returncode den Fehler 8105H -> Adressfehler. Dadurch bekomme ich beim Beenden des Programmes eine Zugriffsverletzungsfehler.

Hier meine Deklarationen / Aufrufe:

plc_adr_table[0] := 2; //adresse
plc_adr_table[1] := 0; //segment id
plc_adr_table[2] := 2; //rack nr
plc_adr_table[3] := 0; //slot nr

strcopy(plc_name,'S7ONLINE');
res1 := Load_Tool(1,addr(plc_name),addr(plc_adr_table[0]));
res2 := as200_vs_field_read(null, max_buffer, buffer );
res3 := unload_Tool;

Ergebnis: res1 und res3 = 0 res2 = 8105

Ich hab schon allerhand probiert ohne gewünschten Erfolg !

kann mir jemand einen Tip geben ?

Danke
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#2

Re: 'Adressfehler beim Auslesen einer Simatic S7-200'

  Alt 31. Jul 2007, 07:54
mit den delphi tags würde der code übersichtlicher sein ...

welcher variable typ ist den plc_name? und hast du für den auch speicher reserviert? (den ein strcopy reserviert keinen speicher, sondern kopiert nur speicher)

was ist max_buffer, und wie reservierst dafür speicher?


zeig mal den ganzen code bitte
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
schwigi

Registriert seit: 24. Jul 2007
Ort: Rottweil
10 Beiträge
 
#3

Re: 'Adressfehler beim Auslesen einer Simatic S7-200'

  Alt 2. Aug 2007, 19:30
Hallo,

hier ist der komplette Code:


Delphi-Quellcode:
unit US200;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids;

type
  TFS200 = class(TForm)
    TestGrid: TStringGrid;
    procedure FormActivate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FS200: TFS200;
  plc_adr_table : array[0..15] of byte;
  plc_name : array[0..255] of char;
  null, max_maschinen, max_buffer, res1,res2,res3 : integer;
  buffer : array[0..50] of byte;
  mzaehler : array[0..25] of word;
const
  max_buffer1 = 10;

implementation

{$R *.dfm}

function Load_tool ( no :Byte;
                     name:{Pointer}PChar;
                     adr:{pointer}PChar):integer;
stdcall;
external 'w95_s7m.dllname 'load_tool';

function as200_vs_field_read ( no :integer;
                     var anz:integer;
                     var buffer):integer;
stdcall;
external 'w95_s7m.dllname 'as200_vs_field_read';

//function as200_ag_zustand ( var buffer):integer;
//stdcall;
//external 'w95_s7m.dll' name 'as200_ag_zustand';

function Unload_tool:integer;
stdcall;
external 'w95_s7m.dllname 'unload_tool';



procedure TFS200.FormActivate(Sender: TObject);
var
  i,j : integer;
  state : char;
begin

   max_maschinen := 10;
   max_buffer := max_maschinen * 2;
   null := 0;

   plc_adr_table[0] := 2; //adresse
   plc_adr_table[1] := 0; //segment id
   plc_adr_table[2] := 2; //rack nr
   plc_adr_table[3] := 0; //slot nr
   plc_adr_table[4] := 0; //adresse
   plc_adr_table[5] := 0; //segment id
   plc_adr_table[6] := 2; //rack nr
   plc_adr_table[7] := 0; //slot nr

   strcopy(plc_name,'S7ONLINE');
   res1 := Load_Tool(1,addr(plc_name),addr(plc_adr_table[0]));
   res2 := as200_vs_field_read(null, max_buffer, buffer );
   res3 := unload_Tool;

   j := 0;

// Die Bytes zu WORDS zusammensetzen
   for i:=0 to max_maschinen do
   begin
      mzaehler[i] := 0;
      mzaehler[i] := buffer[j] shl 8;
      mzaehler[i] := mzaehler[i] + buffer[j+1];
      inc(j);
      inc(j);
   end;

   FS200.Close;
end;

end.
Danke deine Hilfe

Das mit den DELPHI Tags wurde schon erwähnt. Nächstes Mal bitte selber einpflegen. Mfg, Jelly
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: 'Adressfehler beim Auslesen einer Simatic S7-200'

  Alt 2. Aug 2007, 20:31
Probier mal
res2 := as200_vs_field_read(null, max_buffer, buffer[0] ); Hantiert as200_vs_field_read wirklich mit Bytes? Da waere ich mir nicht so sicher. Verlaengere mal das Array buffer auf 80 Bytes.
null ist ein selten daemlicher Name und auch bereits in Delphi belegt.
  Mit Zitat antworten Zitat
schwigi

Registriert seit: 24. Jul 2007
Ort: Rottweil
10 Beiträge
 
#5

Re: 'Adressfehler beim Auslesen einer Simatic S7-200'

  Alt 6. Aug 2007, 11:17
Hallo,

danke für die Tips.
Ich habe beide ausprobiert, leider ohne Erfolg.
Hast du sonst noch eine Idee, was ich machen könnte ?
  Mit Zitat antworten Zitat
kolbaschedder

Registriert seit: 24. Aug 2006
Ort: Schwäbisch Gmünd
55 Beiträge
 
Delphi 2006 Professional
 
#6

Re: 'Adressfehler beim Auslesen einer Simatic S7-200'

  Alt 6. Aug 2007, 11:40
Hallo,

Ich kann dir mal meine Prodave-Import Unit zur Verfügung stellen. Bei mir hat sie damals ganz gut funktioniert. Allerdings bin ich inzwischen auf die freie LibNoDave umgestiegen.

MfG

Kolbaschedder
Angehängte Dateien
Dateityp: pas prodave_185.pas (9,2 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
schwigi

Registriert seit: 24. Jul 2007
Ort: Rottweil
10 Beiträge
 
#7

Re: 'Adressfehler beim Auslesen einer Simatic S7-200'

  Alt 7. Aug 2007, 18:20


Hallo Kolbaschedder;

Danke für die "Prodave-Import Unit".
Mit dieser funktioniert die Sache fantastisch. Warum es vorher den Addresfehler gegeben hat, weiss ich noch nicht. Ich versuch es noch herauszufinden.

Auch allen anderen die mir Tips gegeben haben - Vielen Dank

Gruss Schwigi
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz