Vererbung möglich bei vielen identischen DP-Slave??

Zuviel Werbung?
-> Hier kostenlos registrieren
Hi nochmal,

ich versuch des jetzt mal, irgentwie hin zu kriegen... jetzt hat mich Ehrgeiz gepackt...
Ich möchte aber auch gerne alles verstehen was ich da mache... deshalb noch ein paar allgemeine Fragen:

wenn ich z.B. bei SFC14 stehen habe : LADDR:=W#16#100 dann steht die 100 für die Anfangsadresse und W steht dafür das Wörter eingelesen werden sollen sowiet klar... aber wofür steht denn dann die 16??? - kann ich mit der vielleicht erkennen wie lange eingelesen werden soll mit diesem SFC, wenn nicht, woher weiss das SFC dann wie viele Daten -in meinem Fall beispielsweise- zu welchem Regler gehöre??

Liebe Grüße

GSOhm
 
W#16# ist das format wenn ein zahl in hex angegeben wird.
100 ist also dezimal 256.
die länge ergibt sich aus der hardwarekonfiguration.
weiterhin musst du das ziel übergeben als anyzeiger. z.b. p#db10.dbx0.0 byte 10

für anhängendes bildchen sähe das dann so aus
Code:
      CALL  SFC   14
       LADDR  :=#W#16#1B0
       RET_VAL:=#retval
       RECORD :=P#Db10.dbx0.0 byte 32
 

Anhänge

  • Zwischenablage02.gif
    Zwischenablage02.gif
    7,3 KB · Aufrufe: 13
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

hab schon wieder die nächste Frage:
@Tigerente: Kann ich die Datenbausteine gleich von UDT1 ableiten oder bringt das Probleme mit sich??

Danke im Vorraus

GSOhm
 
Zuletzt bearbeitet:
Hi noch mal,

ich hab mir grad mal so überlegt: Da ich ja sfc14 und sfc15 sehr oft nutzen möchte, kann ich da nicht mit einer Laufvariale einfach die LADDR und die Record hochzählen??

Liebe Grüße

GSOhm
 
Hi noch mal,

ich hab mir grad mal so überlegt: Da ich ja sfc14 und sfc15 sehr oft nutzen möchte, kann ich da nicht mit einer Laufvariale einfach die LADDR und die Record hochzählen??

Liebe Grüße

GSOhm

Wenn du dir den Link von Volker angeschaut hättest, würdest du nicht so fragen.
Du musst ja eine Möglichkeit haben die Daten eindeutig zu nutzen.
Du kannst keine UDT direkt als Variable verwenden, UDT ist lediglich eine Struktur, die noch einen Speicherbereich braucht.

Grundlagen zu lesen und verstehen ist eben durch nichts zu ersetzen, ausser durch lesen und verstehen.
PLC ist eben nicht C.


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du musst ja eine Möglichkeit haben die Daten eindeutig zu nutzen.
Du kannst keine UDT direkt als Variable verwenden, UDT ist lediglich eine Struktur, die noch einen Speicherbereich braucht.

Entweder stell ich mich so blöd oder ich hab meine Frage falsch formuliert... Ich habe jetzt eine FC wo ich den Aufruf von sfc14 und sfc15 24 mal reinschreiben muss. Geht es nicht das ich jedes mal beim Aufruf meines FC eine Variable hochzähle, welche ich dann in Abhängigkeit zur LADDR- und Recordadresse setzte und diese modulo 24 mache???

Liebe Grüße

GSOhm

PS:. @ Bike: Kannste mir mal sagen welcher Link vom Volker mir da genutzt hätte?

[Änderung: mein Aufruf von SFC14: CALL "DPRD_DAT" SFC14
LADDR:=W#16#146
RET_VAL:=RET_VAL_SFC14
RECORD:= "IO_Regler_08".IO.IN (verweisst Auf meinen DB_8, welchen ich in In und Out gegliedert habe)
]

Und da würde ich dann die 146 und die 08 hochzählen wollen...
 
Zuletzt bearbeitet:
Entweder stell ich mich so blöd oder ich hab meine Frage falsch formuliert... Ich habe jetzt eine FC wo ich den Aufruf von sfc14 und sfc15 24 mal reinschreiben muss. Geht es nicht das ich jedes mal beim Aufruf meines FC eine Variable hochzähle, welche ich dann in Abhängigkeit zur LADDR- und Recordadresse setzte und diese modulo 24 mache???

Liebe Grüße

GSOhm

Das geht durchaus, aber dann liest du nur jeden 24-sten Zyklus deine Daten in den betreffenden Bereich und schreibst sie. Da du ja Regler hast, wenn ich das richtig gelesen hatte wäre das eher schlecht. Ich habs noch nie probiert, ich vermute, es würde sogar in einer Schleife gehen, die beiden SFC scheinen synchron zu arbeiten, also in einem Aufruf fertig zu sein. Was das mit der Zykluszeit macht, müßte man testen. Das Erzeugen der richtigen, dann dynamischen LADDR und besonders des dann ebenfalls dynamischen Records (Du mußt einen Any nutzen, dessen Inhalt di dynamisch änderst.), wird dich aber dann nochmals fordern! Siehe dazu den Beitrag von Volker in der FAQ.

PS: Meine Erläuterungen oben sind eher theoretischer Natur, der Ansatz im nächsten Beitrag von Aventinus ist der richtige Weg, wenn es im das erstellen eines FB für den Regler geht, diesen FB ruft man dann so oft auf, wie er benötigt wird.
 
Zuletzt bearbeitet:
Möchtest du jetzt eine FC schreiben, in der du deine EA-Daten der 24 Regler liest bzw. schreibst?
Wo bearbeitst du dann die Regler?

Ich denke, der Ansatz ist nicht zielführend.
Ich würde einen FB mit folgendem Aufbau schreiben:
NW1: Einlesen der Eingangsdaten mit SFC14
NW2 - NWx: Bearbeitung des Reglers
NW(x+1): Schreiben der Ausgangsdaten mit SFC15

Der FB bekommt unter Anderem einen IN-Parameter mit der EA-Adresse des Reglers und im Stat-Bereich deine von den UDT´s abgeleiteten Variablen für die Ein- und Ausgangsdaten.
Dann musst du in NW1 und NW(x+1) nur die EA-Adresse und deine Variablen für die EA-Daten angeben. Wie die die Funktionalität des Reglers programmierst ist eine andere Baustelle.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das geht durchaus, aber dann liest du nur jeden 24-sten Zyklus deine Daten in den betreffenden Bereich und schreibst sie. Da du ja Regler hast, wenn ich das richtig gelesen hatte wäre das eher schlecht. Ich habs noch nie probiert, ich vermute, es würde sogar in einer Schleife gehen, die beiden SFC scheinen synchron zu arbeiten, also in einem Aufruf fertig zu sein. Was das mit der Zykluszeit macht, müßte man testen. Das Erzeugen der richtigen, dann dynamischen LADDR und besonders des dann ebenfalls dynamischen Records (Du mußt einen Any nutzen, dessen Inhalt di dynamisch änderst.), wird dich aber dann nochmals fordern! Siehe dazu den Beitrag von Volker in der FAQ.

Das müsste in einer Schleife schon funktionieren und sollte für die Zykluszeit auch kein Problem sein. Aber wie gesagt, ich würde es vom Aufbau her anders machen.
 
@ aventinus: Toll, Vielen Dank, ich glaube das das der richtige Weg zum Ziel ist... Muss nur mal gucken wie es mit der Umsetztung aussieht :rolleyes:

Naja wird schon klappen!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mal eben gucken ob ich das richtig verstanden habe: ich mache einen FBX in dem ich nach und nach die EA/Adressen meiner Regler durch gehe, gebe diese dann in einen FBY In dem ich dann erst SFC14 (LESEN) - VERARBEITUNG - SFC15 (AUSGABE) mache, dann wieder in meinen FBX gehe und dieser nun die nächste EA/Adressen übergibt.... usw.

stimmt das soweit???
 
Zuletzt bearbeitet:
nicht wirklich.
du schreibst einem fb in dem alles was EIN regler braucht drinsteht. im beispiel fb10
zu diesem fb10 gehört die udt10 die im fb10 genutzt wird.

diesen fb10 rufst du für jeden rgler auf. hier fb1.
im stat-bereich des fb1 deklarierst du regler vom typ fb10

im ob 1 oder 35 rufst du diesen fb1 auf mit dem db10 (db10 wird dabei automatisch erzeugt)
im db10 stehen nu alle regler untereinander

anhang ist eine awl-quelle die du importieren kannst
 

Anhänge

  • regler.AWL.txt
    3 KB · Aufrufe: 24
Wow supi, so langsam versteh selbst ich was ihr mir sagen wollt... Vielen Dank auch an dich Volker!!! Ich hoffe nach dieser supi Erklärung ist der Groschen entgültig gefallen!!

Liebe Grüße

GSOhm
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ Boxy: danke, super das du versuchst das ganze etwas mit c++ zu erklären das ist für mich sehr hilfreich!!!


Liebe Grüße

GSOhm

Danke, danke ...
Ich kann dich verstehen, du denkst gerade immer noch in C++ und nicht in Siemens :D

Geht mir gerade beim Umstieg von Siemens auf Bosch ebenfalls so.
Also von Step 7 auf CoDeSys.

Aber hast Du dir nicht schon einmal überlegt das ganze in SCL zu machen ???
 
Man supi,

eure Hilfe war spitze! Hab jetzt glaube ich komplett durchgeblickt!! :ROFLMAO: Habe heute noch einige AHA-Erlebnisse gehabt, hab die Parallelen zur C++ Vererbung gesehen, toll! Wirklich sehr hilfreiches Publikum hier... ...ich hoffe ich werde auch mal in der Lage sein (auch wenn in weiter Ferne) hier meinen sinnvollen Beitrag zu leisten!

Ganz liebe Grüße

GSOhm
 
Ja wollt ich eigentlich in SCl machen, aber der Firmenstandard ist AWL, und damit ich nicht hinterher der einzige bin der das Programm versteht, wurde ich gebeten mich doch bitte an AWL zu halten.:x Naja, das leben ist kein Ponnyhof, auch wenn es so riecht *ROFL*

Liebe Grüße

GSOhm
 
Zurück
Oben