Na zum Üben!
Pack deine FBs in einen übergeordneten FB und erstell dann in der Variablendeklaration einzelne Instanzen deines UnterFB's mit verschiedenen Namen, z.b. Takt_1, Takt_2 etc.. Als Typ gibst du den Namen deines UnterFBs an. Dann kümmert sich das Programm /der Compiler um die Adressen und nicht du. So wie man es von einer modernen Umgebung erwartet.
Ich wollte ja auch eigentlich darauf hinaus, dass ich beim Aufruf des FBs im FC dem Callbefehl irgendwie mit auf den Weg gebe, welchen Bereich des InstanzDBs und/oder des DB199 er verarzten soll.
Ist das überhaupt in der Form möglich.
Gruß Wilhelm
Hat jemand von Euch ne Ahnung davon, ob ieC-Timer soviel Recourcen verbraten, oder ob man als lieber Programmierer doch lieber globale
Adressen nimmt?
meinem Freundin schläft schon!
Hallo!
Leider hast du nicht deinen ganzen Code hereingestellt aber was ich so bei der Variablendekleration gesehen habe wird dein Programm nicht funktionieren wenn du es Öfters aufrufst bzw in einem anderen Baustein auch Lokaldaten verwendest.
Bei Flanken muss der Hilfsmerker eine Statische Variable sein sonst wird der Lokaldatenbereich in einem anderen Baustein überschrieben und deine Flanke funktioniert nicht mehr.
Zu Multiinstanzen:
In der Suche findet man da schon sehr viel dazu aber kurz:
Du legst dir einen Übergeordneten FB an. in diesem kannst du dann in den Statischen Variablen eine Variable mit zb myTime anlegen und bei datentype wählst du FB aus und schreibst deine FB nummer von dem timer dazu.
Dann brauchst du nur mehr im programm call #myTimer schreiben und du hast eine Multiinstanz kreiert.
Die Daten von deinem Zeit FB werden danach in deinem Instanzdatenbaustein vom Übergeordneten FB abgelegt. Also du brauchst da nicht selber einen DB basteln und mit Pointern darauf zugreifen.
godi
Hallo!
Habe jetzt mal kurz in dein Programm hineingeschaut.
Da mit der Multiinstanz hast du mich falsch verstanden.
Den FB 1 darfst du nicht mit UC aufrufen da du mit dem Aufruf keine Parameter übergibst und somit auch keinen Instanzdatenbaustein für deinen FB 1 erzeugst. Du musst das mit CALL machen.
Die Multiinstanzdeklaration stimmt in deinem FB1 aber du darfst dann den FB2 nicht direkt aufrufen sondern über die Variable. Also in deinem Fall CALL #Takt_1
Dann werden die Variablen die du in deinem FB 2 verwendest im Instanzdatenbaustein von deinem FB1 gespeichert.
Dein Taktprogramm habe ich nur kurz überflogen. Sollte soweit funktionieren nur kann man da sicher noch einiges optimieren bzw anders machen.
Aber du kannst ja wenn du an der Hardware bist ja selber herumprobieren.
godi
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?