TIA Taktmerker in Software Units

Stoky

Level-2
Beiträge
415
Reaktionspunkte
67
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen liebe Forenfreunde,

ich bin gerade dabei unsere Programmstruktur auf TIA 19 und Software Units umzubauen. Dabei bin ich darüber gestolpert, dass man in Software Units keine Merker verwenden kann. Die SPS (Siemens 1516 TF) lässt für das Taktmerkerbyte (Blinktakte) aber nur Merker zu und keine DB Variablen.

Soweit ich das testen konnte scheint es auch keinen Weg zu geben aus dem "normalen" Programmordner in dem Merker erlaubt sind auf DBs in Software Units zuzugreifen, um die Merker einfach umzulegen. Zumindest habe ich keinen gefunden.

Kennt ihr irgendeinen Weg um doch, von miraus über Umwege, auf die Taktmerker zugreifen zu können? Sonst muss ich mir die wohl selbst basteln.

Gruß Stoky
 
D.h. wenn Units verwendet werden, kann man diese nicht einfach auf einen allgemeinen Austausch DB umlegen auf den alle Zugriff haben? Schade..
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denke mal, dass dein jeweiliger Baustein ja nicht alle Takte benötigt. Warum also nicht den Takt dann auf die Baustein-Schnittstelle legen ?
Hier etwas mit einem globalen Baustein zu machen, auch wenn es ein DB ist, finde ich persönlich nicht so toll ...
 
Ich denke mal, dass dein jeweiliger Baustein ja nicht alle Takte benötigt. Warum also nicht den Takt dann auf die Baustein-Schnittstelle legen ?
Hier etwas mit einem globalen Baustein zu machen, auch wenn es ein DB ist, finde ich persönlich nicht so toll ...
Das ist ja grundsätzlich richtig und auch im Normalfall unsere Vorgehensweise. Aktuell ist es so, dass die unterschiedlichen Taktmerker oft als Eingang an FBs etc. gehen. Die Taktmerker sind aber dennoch an diversen Stellen im Programm, z.B. als Ansteuerung für einen Leuchtdrucktaster vorhanden. Damit ich jetzt nicht 50mal nen Takt neu basteln muss sollte das aber eine zentrale Variable sein. Bisher ging das so mit den Merkern. Jetzt muss es mit einem Global DB in der Globaldaten Unit gehen auf die alle anderen Units eine Relation haben, damit man von jedem Programmteil darauf zugreifen kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Entschuldige bitte, aber in einer 1500er noch Merker zu verwenden ist nicht mehr wirklich zeitgemäß.

Meine Standard-Strategie für Takte und Impulse ist ein FB, der zum Start von OB1 aufgerufen wird, und mir Impulse erzeugt, die dann in einem Global-DB landen.
 
Entschuldige bitte, aber in einer 1500er noch Merker zu verwenden ist nicht mehr wirklich zeitgemäß.

Meine Standard-Strategie für Takte und Impulse ist ein FB, der zum Start von OB1 aufgerufen wird, und mir Impulse erzeugt, die dann in einem Global-DB landen.
Ist ja jetzt nicht so, dass ich die benutzen würde, wenn Siemens mich an der Stelle eine DB Adresse angeben lassen würde...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Entschuldige bitte, aber in einer 1500er noch Merker zu verwenden ist nicht mehr wirklich zeitgemäß.
Deine Meinung musst du Siemens erzählen. Vielleicht hast du auch eine Idee, wo Siemens die Hardware-Taktbits hinlegen soll ...
 
Gab es da nicht diesen ganzen Hokuspokus wegen "Hardware-unabhängiger Programmierung"
Naja, eine S7-1500 mit Software Units ist halt nicht sonderlich hardwareunabhängig. Stellt man eine 1500ér auf eine andere Hardwareplattform um, dann ist das Taktmerkerbyte wohl das kleinste Problem ( eher Systemfunktionen, Kommunikationen usw. usw. ).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ob jetzt 1512, 1516 oder 1518 ist an der Stelle egal und quasi beliebig austauschbar (mit Einschränkungen bei ein paar Einstellungen in der Hardwarekonfiguration). Software Units gehen ohnehin nicht auf 1200er Steuerungen. Und Taktmerker haben die 1500er soweit ich weiß alle. Das macht also keinerlei Probleme. Zudem bei Zykluszeiten von 2-3ms mache ich mir keine Gedanken um ein paar Mikrosekunden mehr.
 
Also folgende Vorgehensweise funktioniert:
- Im Standardprogramm das Merkerbyte in einen Global DB (hier DB Taktmerker) umkopieren
- In der Software Unit in der die Blinktakte gebraucht werden kann dann eine Relation auf diesen Global DB erfolgen
- Es kann dann in der Unit einfach per "DB Taktmerker".Takt_0_5_Hz auf den DB zugegriffen werden

Taktmerker Relation.png

Ob das jetzt weniger aufwändig ist, als die Blinktakte selbst zu programmieren muss denke ich jeder für sich entscheiden.

Ich hab die Problematik, dass man in der Hardwarekonfiguration nur einen Typ Merkerbyte und kein Byte aus einem Global DB angeben kann, auch direkt an unseren Ansprechpartner im Siemens APC weitergegeben.

Frohes Schaffen noch ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Falls das mal irgendwer braucht hier meine finale Lösung:

Da wir keinen OB1 mehr außerhalb von Software Units haben wollen haben wir uns gegen ein Umlegen der Taktmerker entschieden. Da wir aber auch nicht wollen, dass der Blinktakt so stark schwankt wie der OB1 Zyklus (die CPU hat Motion Control und Sicherheitsprogramm) habe ich mich gegen die Variante mit zwei Timern entschieden. Unregelmäßigkeiten im Takt fallen bei blinkenden Tastern unangenehm auf. Stattdessen nutze ich nun einen Takt OB (SynchronousCycle) der einmal pro Bus Takt (meist 4ms) aufgerufen wird. Da der Bus Takt auch mal anders eingestellt werden kann lese ich den aus und Zähle einmal pro OB Aufruf hoch. Sobald das Ergebnis aus Zähler mal Bus Taktzeit die halbe Blinktakt Periodendauer erreicht schalte ich das Blinktakt Bit um. Sobald die komplette Periodendauer erreicht wird setze ich den Zähler zurück. Das Ergebnis ist dann auch OB1 Zyklus asynchron. Hat allerdings natürlich nur die Genauigkeit des OB Taktes. Für uns sind 4ms Genauigkeit aber vollkommen ausreichend.

2024-05-31_09h47_18.png
 
Entschuldige bitte, aber in einer 1500er noch Merker zu verwenden ist nicht mehr wirklich zeitgemäß.

Meine Standard-Strategie für Takte und Impulse ist ein FB, der zum Start von OB1 aufgerufen wird, und mir Impulse erzeugt, die dann in einem Global-DB landen.
Eigentlich gehört die Takterzeugung in jedes Modul, das einen braucht. Sonst ist die Software halt nicht modular, weil sich ein Modul nicht in ein anderes (evtl. fremdes) Projekt kopieren lässt. Das trifft natürlich auf alle nummerierten Betriebsmittel zu, die man daher alle nicht verwenden sollte (Merker, Timer, Zähler u.s.w.). Über z.B. die TON/TOF kann man das lokal in jedem FB machen, wenn es gebraucht wird, bzw. einen kleinen FB dafür schreiben (siehe oben).
 
Guten Morgen liebe Forenfreunde,

ich bin gerade dabei unsere Programmstruktur auf TIA 19 und Software Units umzubauen. Dabei bin ich darüber gestolpert, dass man in Software Units keine Merker verwenden kann. Die SPS (Siemens 1516 TF) lässt für das Taktmerkerbyte (Blinktakte) aber nur Merker zu und keine DB Variablen.

Soweit ich das testen konnte scheint es auch keinen Weg zu geben aus dem "normalen" Programmordner in dem Merker erlaubt sind auf DBs in Software Units zuzugreifen, um die Merker einfach umzulegen. Zumindest habe ich keinen gefunden.

Kennt ihr irgendeinen Weg um doch, von miraus über Umwege, auf die Taktmerker zugreifen zu können? Sonst muss ich mir die wohl selbst basteln.

Gruß Stoky
Den "normalen" Ordner brauchst du bei Software Units eigentlich nicht. Es gibt dann typischerweise eine Software Unit, die die Koordination übernimmt ("Machine Control"). Die konventionellen Ordner sind dann leer.
Merker sind da sinnfrei, weil die Software Unit dann nicht mehr unabhängig ist. Beispiel: Kopieren einer Software Unit in ein anderes Projekt., ohne was zu ändern (sollte der Normalfall sein)
 
Zurück
Oben