Bestimmter Datenbereich aus DB auslesen und in LOOP einbinden

torstenklenert

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich hoffe, dass ihr mir vielleicht helfen könntet. Bislang bin ich von eurem Forum sehr überzeugt, habe auch schon viel selbst nachgelesen.
Ich bin gerade dabei meine Technikerarbeit zu machen und bräuchte deshalb etwas "Unterstützung".

Ich habe einen DB142 angelegt in dem ich bestimmte Parameter deklariert habe. In dem FC 142 möchte ich einen bestimmten Datenbereich des DB auslesen und anschließend über Profibus zu einem Festo Gerät zur Parametrierung schicken. Den ersten Teil der Programmierung habe ich erledigt. Nun stehe ich aber vor dem Problem die Daten in einer Schleife auszulesen. Damit ich nicht 200 Parameter erneut Laden muss.

Welche Möglichkeiten habe ich, und wie kann ich das realisieren?

Sieht so aus: (Beispiel)

INDEX_RESET, BYTE, B#16#1
PNU_RESET, WORD, W#16#C4
WERT_RESET, DINT, L#100

Diese "Werte" sind die einzelnen Parameter die ich Laden möchte. Sind wie gesagt ca. 200. Ich denke eher, das es ein Problem ist, das hier drei unterschiedliche Datenbereiche gelesen werden müssen. Beispielsweise der WERT muss DINT sein, schreibt der Hersteller Festo vor.

Habt ihr eine Idee?

Viele Grüße

Ps: Falls notwendig kann ich Auszüge aus meinem Programm nachliefern.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Danke für den Hinweis, wäre es noch möglich mir ein kleines Beispiel aufzuzeigen?

Also nicht die Lösung, aber dass ich ungefähr weiß wie ich so etwas realisieren kann mit dem UDT. Und vor allem, wie so ein Array in Bezug auf meine Fragestellung aussehen muss. Ich muss mich da danach dann erst einlesen.


Vielen Dank!
 
Hi,

in meinem Beispiel fehlt nur noch das Hochzählen der Nr. und setzen des Triggers um den jeweiligen Datensatz zu erhalten, kann man ja z.b. einfach über einen Zähler und einen Timer machen bzw. falls du eine Quittierung vom DP-Slave erhältst.

Gruss Daniel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi!

Dein Beispiel hat mir schon sehr weitergeholfen, ich habe immerhin verstanden wie man UDT's anlegt und diese mit dem DB verknüpft.

Ich bin noch dabei zu verstehen wie das mit den Pointern funktioniert. Ich habs mir gerade erst mal mit C durchgelesen um das Prinzip der Adressierung zu verstehen. Mit SPS / AWL hab ich leider noch nichts passendes gefunden.

Mit dem hochzählen der Nr. meinst du warscheinlich die LOOP Schleife? Bislang wird ja nur ein Datensatz geladen wenn ich den AWL-Code richtig verstanden habe?

Ich bekomme immer eine Quittierung vom DP-Slave bei jeder Parametrierung eines Datensatzes.

Dieser Quittiert in der PNU (Byte3+4), die ersten 5 Bits haben dann 0000. Die restlichen Bits sind nicht relevant.

Beispiel:
2#0000_0

Ich danke dir schon vielmals für deine Mühen, es gibt wirklich nicht viele Foren die einem so weiterhelfen!

Viele Grüße
 
...Mit dem hochzählen der Nr. meinst du warscheinlich die LOOP Schleife? Bislang wird ja nur ein Datensatz geladen wenn ich den AWL-Code richtig verstanden habe?...

Genau, an dem Ausgängen hast Du die mit Nr. und Trigger ausgewählten Daten stehen, über die Quittierung vom Slave kann man die Nummer hochzählen und entsprechend das Bit Trigger setzen.

Gruss Daniel
 
Zurück
Oben