TIA Adressierung mit :P

Credofire

Level-1
Beiträge
640
Reaktionspunkte
35
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,
als Anfänger habe ich mal wieder ein kleines Problem, welches ich nicht mit eigenen Unterlagen lösen kann.

Ich habe in einem FC einmal die Ausgabe %A3.3 und gleich dahinter %A3.3:p.
Was bedeutet nun das :p? Hat das was mit positiver Flanke zu tun?

Vielen Dank
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verstehe gerade nicht den Sinn dahinter. Einmal beschreibe ich den Ausgang mittels des Programmablaufes und beschreibe es im Anschluss direkt und umgehe damit quasi mein Programm? Welchen Zweck könnte das erfüllen?
Hatte gerade noch was dazu gefunden, dass man bei analogen Verarbeitungen den direkten Zugriff nutzt um quasi den gerade aktuellsten Wert zu bekommen.
 
Ob das Sinn macht, kann man aus den Angaben schwer sagen.
Dein Programm umgehst du damit nicht, nur der Ausgang wird sofort beschrieben und nicht erst am Zyklusende.

Hi

stimmt.

Lesen von / Schreiben auf die Peripherie dauert wesentlich länger wie aus dem / in das Prozessabbild. Lesen von der Peripherie bedeutet, dass die CPU über den Rückwandbus mit der Baugruppe redet und das dauert einfach tausende mal länger als aus dem RAM ein paar Bytes zu holen. Beim Schreiben ist das ganz ähnlich. Und dabei ist es jetzt total egal, ob wir von einer SPS oder einem 40 Jahre alten PC oder einem top modernen Gamer-PC reden. Je weiter weg vom ACCU1 / EAX du kommst, desto länger dauert es. Und im Lauf der letzten Dekaden sind die Prozessoren zwar um den Faktor 1000 schneller getaktet worden, aber andererseits sind immer mehr Stufen / Caches / Bussysteme dazwischen.

Wozu das Ganze?

Früher, als Speicher noch knapp und teuer war -- jetzt ist er bei Siemens nur noch teuer -- gab es CPUen, die konnten mehr Peripherie stecken als sie E und A hatten. Noch früher, durfte bestimme Peripherie nur auf Adressen "gesteckt" werden die kein Prozessabbild hatten. Also diese ururalten Analogdigitalwandler zu Zeiten von Step5 -- frühe 90 -- waren so langsam, dass sie für eine Wandlung mehrere hundert Zyklen (ca 100ms) verbraten haben. Deswegen wäre es unvorteilhaft für das Gesamtsystem, wenn in jedem Zyklus versucht wird einen Wert zu holen. Man hätte ja doch nur immer den alten bekommen. Also hat man damals ein einzelnes BUSY Flag direkt von der Peripherie gelesen und erst wenn dieses weg ging, dann hat man den Wandlerwert dirket von der Peripherie gelesen. Diese Aufrufe steckte man dann noch in eine Zyklische Ablaufebene, die nur alle 100ms dran kam, und somit war das System insgesamt schneller, weil es keine nutzlosen Arbeiten gemacht hat.

Die Zeiten sind vorbei (jetzt lassen wir die Systeme nur noch nutzlose Arbeiten machen). Der komplette Adressraum einer 1200/1500er CPU ist vom Prozessabbild abgedeckt. Die AD-Wandler sind zwar deutlich schneller als früher, aber sie sind (siehe oben) immer noch deutlich weiter weg vom Prozessorregister als das RAM. Ein Peripheriezugriff ist somit um Faktor 10-1000 langsamer als der in E, A, M oder einen DB.
Zum Beginn des Zyklus werden die konfigurierten Baugruppen gelesen. Dann wird die Ablaufebene ausgeführt. Am Ende des Zyklus werden die konfigurierten Baugruppen geschrieben.
Da sich kaum einer die Mühe macht Baugruppen kein Abbild mehr zu geben (geht das überhaupt noch -- muss ich morgen mal ausprobieren), kostet es die Kommunikationzeit am Rückwandbus sowieso. Aus diesem Blickwinkel: Peripheriezugriff ist sinnlos.

Aber wenn du jetzt einen kleine 314 hast, dann kann es eben sein, dass du eben doch mehr Peripherie hast wie E und A. Damit wird diese Peripherie aber nicht durch den Zyklusbeginn entsorgt / Zyklusende versorgt. D.h. hier musst du einen Peripheriezugriff verwenden, den anderen gibt es nicht.

Und dritter Fall: Angenommen dein OB1 hat eine Zykluszeit von 600ms. Du musst aber einen Ausgang eine Folge von 10 Impulsen zu 200µs herausschießen lassen. Wenn du jetzt in einer Schleife 10 mal auf den A3.3 := TRUE; A3.3 := FALSE; schreibst, dann passiert am Ausgang gar nichts, denn der wird ja erst am Zyklusende den Wert des letzten Schreibens ausgeben. Aber mit A3.3:p := TRUE; A3.3:p := FALSE; bekommst du das hin, musst allerdings Vorkehrungen treffen, dass die Impulse/Pausen die richtige Länge haben (ziemlich schwierig das).


Fazit: Normalerweise braucht man keinen Peripheriezugriff. Aber irgendwer hat ein Problem, das sich damit lösen lässt.


'n schön' Tach auch
HB
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich nutze generell die :p auf der 1200 um Onboard Ausgänge sehr schnell ansprechen zu können....

Probiert mal ohne :p eine doppelte Sieben Segment anzeige zu Multiplexen.

Das Gute Siemens KP8 kann man auch schön mit :p ansprechen dann kann es noch mehr Farben als im Datenblatt angegeben ;-)

Grüße

Owler
 
Zurück
Oben