# libnodave mehrere doppelwörter



## Praseodym (7 Mai 2007)

Moin Moin, ich bastel immer nen bisschen mit der libary rum, ist echt klasse, aber eine frage habe ich mal.

ist es irgendwie möglich einen ganzenbereich sagen wir mal db20.dbd0 bis db20.dbd60 in die steueuerung zuschreiben, oder muss ich das immer in doppelwortschritten machen ? mit z.b. tnodave.writedword?

danke erstmal

praseodym


----------



## afk (7 Mai 2007)

Praseodym schrieb:


> mit z.b. tnodave.writedword?


Daraus schließe ich, daß Du mit meiner Komponente in Delphi arbeitest, richtig ?

Schau Dir in dem Fall doch mal die Methode TNoDave.WriteBytes an, die schreibt einen ganzen Speicherbereich "am Stück" in die SPS, wobei die Blockgröße des Kommunikationsprotokolls berücksichtigt wird, und das Ganze automatisch in entsprechend vielen "Häppchen" übertragen wird.


Gruß Axel


----------



## Praseodym (8 Mai 2007)

*Supa, aber...*

Supi, das fuzt auch, abba wie addiere ich denn jetzt die wörter miteinander, so das ich den pointer auf den bereich zeigen lassen kann wo die "wörter" drinne liegen ? oder wie machst du das ? hättest nen kleines beispiel ?

praseodym

```
var
  Form1: TForm1;
  mybuffer: ^integer;
  zahl: integer;
implementation
{$R *.dfm}

[INDENT]procedure TForm1.FormCreate(Sender: TObject);
begin
zahl:= 65535;
mybuffer:=@zahl;
nodave1.Active:=true;
nodave1.WriteBytes(mybuffer);
end;
[/INDENT][INDENT]procedure TForm1.FormDestroy(Sender: TObject);
begin
nodave1.Destroy;
end;
[/INDENT]end.
```


----------



## afk (8 Mai 2007)

Praseodym schrieb:


> wie addiere ich denn jetzt die wörter miteinander, so das ich den pointer auf den bereich zeigen lassen kann wo die "wörter" drinne liegen ?


Bei lauter Werten vom Typ Doppelwort kannst Du einfach ein Array von diesem Typ nehmen und den Zeiger auf's erste Feld an WriteBytes übergeben.

Wenn es verschiedene Datentypen sind, dann mit GetMem den notwendigen Speicher reservieren, mit ein wenig Zeigerarithmetik die Werte da reinschreiben und den Zeiger auf diesen Speicherbereich an WriteBytes übergeben. Vergiß nicht, den Speicher mit FreeMem wieder freizugeben, wenn Du ihn nicht mehr brauchst, sonst ist deine Applikation ein "Speicherfresser".


Gruß Axel


----------



## Praseodym (8 Mai 2007)

*danke*

super, klasse! ersteinmal vielen dank, werde das nachher gleich einmal ausprobieren !!

übrigens, super komponente !


danke, praseodym


----------



## marcengbarth (3 September 2007)

Ich hänge mich hier mal...



> übrigens, super komponente !


Dem schließe ich mich an!!!

Aber eine kleine Verbesserung hätte ich noch. Das mit den Zeigern finde ich beim Schreiben so umständlich.

Wäre es denn nicht einfacher, wenn das beim Schreiben wie auch beim Lesen funktionieren würde. Also mit WriteInt, WriteDInt, WriteBit usw. in einen Buffer schreiben und den dann gesammelt mit WriteBytes(...) an die SPS schicken.

Gruß
  Marc


----------



## afk (3 September 2007)

marcengbarth schrieb:


> Wäre es denn nicht einfacher, wenn das beim Schreiben wie auch beim Lesen funktionieren würde. Also mit WriteInt, WriteDInt, WriteBit usw. in einen Buffer schreiben und den dann gesammelt mit WriteBytes(...) an die SPS schicken.


Die Write...-Methoden schreiben immer direkt in die SPS, weil bei einer Visu z.B häufig ein einzelner Wert in die SPS geschrieben wird, wenn der Bediener beispielsweise einen Sollwert ändert, zusammenhängende Datenbereiche aber eher selten beschrieben werden. 

Trotzdem danke für die Anregung, ich schau mir bei nächster Gelegenheit mal an, ob sich das irgendwie realisieren läßt.


Gruß Axel


----------



## marcengbarth (3 September 2007)

> Die Write...-Methoden schreiben immer direkt in die SPS, weil bei einer Visu z.B häufig ein einzelner Wert in die SPS geschrieben wird, wenn der Bediener beispielsweise einen Sollwert ändert, zusammenhängende Datenbereiche aber eher selten beschrieben werden.


Ja, das ist klar und ist auch echt gut so und muss ja auch so bleiben. Man müsste vielleicht neue Methoden anlegen, um in einen Buffer zu schreiben. 
Mal sehen, vielleicht hab ich abends etwas Zeit, dann schau ich mir die Sourcen mal an...


----------

