libnodave mehrere doppelwörter

Praseodym

Level-1
Beiträge
21
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
Code:
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.
 
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
 
danke

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

übrigens, super komponente !


danke, praseodym
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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
 
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...
 
Zurück
Oben