TIA Wachendorf Anzeige per SCl inkrementieren?

D4K!ZZ4

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

ich stehe vor einem kleinem Problem.

Und zwar soll ich eine Wachendorf anzeige bei einer Pos Flanke entweder um 1 oder 2 Stück inkrementieren.

Jetz dachte ich schon an sowas wie:

Wachendorf_Zählsgang := true;
Wachendorf_Zählsgang := false;
Wachendorf_Zählsgang := true;
Wachendorf_Zählsgang := false;

Aber im Endeffekt ist das ja Bullshit da ja am Ende des Zykluses nur false überbleibt :ROFLMAO:

Ich steh irgendwie grad auf dem Schlauch wie ich das lösen könnte.

Hat von euch jemand eine Idee

Danke schon mal.

Gruß Chris

edit:

Grade kommt mir in den Sinn es mit einer Schleife zu realisieren.
Werden Schleifen je Zyklus um 1 inkrementiert oder passiert der komplete Durchlauf je Zyklus?

Ich bin noch neu auf dem Gebiet und muss mich da erst rein Denken :D

Grüße
 
Zuletzt bearbeitet:
Das komplette Programm wird einmal pro Zyklus durchlaufen. Egal ob FUP, KOP, AWL, SCL oder so etwas.

Nur wenn Du im Programm Zeilen überspringst (aus welchen Gründen auch immer), werden sie nicht ausgeführt. Das macht die SPS aber nicht von sich aus, sondern auf Deine Programmierung hin.

Wenn Du also z.B. eine FOR-Schleife programmierst, dann wird die auch in einem/jedem Zyklus komplett durchlaufen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Zuerst in die Dokumentation des Wachendorff-Teils schauen, wie lang ein Zähl-Impuls und wie lang die Pause dazwischen mindestens sein müssen. ggf. aus der Angabe der max Zählfrequenz errechnen.

Als zweites: Was hast Du für eine SPS? Hat die womöglich nur Relais-Ausgänge? Wie ist die max Schaltfrequenz der Ausgänge?

Dann im Programm mit Timern und/oder Schrittkette die Ausgangsimpuls(e) formen. Vielleicht reicht es, in 4 aufeinanderfolgenden OB1-Zyklen einfach 1, 0, 1, 0 auszugeben. Schneller als die OB1-Zyklen würde ich es nicht machen, wenn keine unbedingte Notwendigkeit besteht.

Bei mehreren Ausgangszuweisungen in einem OB1-Zyklus "gewinnt" die letzte Zuweisung, weil wegen dem Prozessabbild (PAA) nur einmal je Zyklus der Wert an die Ausgangsbaugruppe ausgegeben wird.
Will man unbedingt direkt sofort schalten, dann muß man direkt auf die Peripherie PAB.. (bzw. %adresse:p) schreiben. Dies könnte aber zu schnell für das Zähler-Teil sein.

Schleifen sollte man nicht verwenden, um auf irgendwas zu warten, weil sonst allerhöchstwahrscheinlich die Zykluszeitüberwachung zuschlägt. Länger dauernde Sachen muß man auf mehrere Programm-Zyklen aufteilen.

Harald
 
Hallo,

ich kann per DIP schalter einstellen ob die Eingangsfrequenz über oder unter 50Hz ist am Zähleigang.

Die Absolute Grenzfrequenz unter voll Belastunge aller Ausgänge und Eingänge der Anzeige liegt bei 12Khz auf Einstellung HiFreq.

Ich hab ganz normale Transistor Ausgänge. Keine Relais.

Wie muss ich das verstehen direkt auf die Peripherie schreiben. Wird dann parallel zum Zyklus in die Ausgänge geschrieben?

Edit:

eine extra Schrittkette würde da natürlich funktionieren.

Aber irgendwie hätte ich das ganz gerne in meinem Zähl Code implementiert.

Edit:

Wenn ich mit der peripherie arbeite würde mein "grundsätzliche falscher" Ansatz von oben quasi funktionieren wenn die Eingangsfrequenz des Zählers das mit macht, verstehe ich das richtig?
 
Zuletzt bearbeitet:
Du hast uns immer noch nicht verraten, welche SPS Du programmieren willst.
Ich gehe jetzt mal von einer Siemens-CPU aus welche man mit SCL programmieren kann.

Wie muss ich das verstehen direkt auf die Peripherie schreiben. Wird dann parallel zum Zyklus in die Ausgänge geschrieben?
Ja, der Ausgang schaltet dann sofort.

Wenn ich mit der peripherie arbeite würde mein "grundsätzliche falscher" Ansatz von oben quasi funktionieren wenn die Eingangsfrequenz des Zählers das mit macht, verstehe ich das richtig?
Ja.
Allerdings kann man (höchstwahrscheinlich) keinen einzelnen Peripherie-Ausgang adressieren und damit nicht alleine schalten, sondern nur zusammen mit den anderen Ausgängen der selben Byte- oder Word-Adresse.
Du müßtest
- das Peripherieausgangsbyte(oder -word) lesen - das geht aber nicht, also nimm das PAA vom Zyklusbeginn
- das Bit Deines Ausgangs setzen
- das Byte an die Peripherie schreiben --> der Ausgang schaltet sofort Ein
- die Mindest-Pulsdauer warten (0.1ms .. 1ms) Wie? - das kommt auf Deine CPU drauf an.
- das Bit Deines Ausgangs rücksetzen
- das Byte an die Peripherie schreiben --> der Ausgang schaltet sofort Aus
- ... (ggf. weitere Pulse und Pausen erzeugen)
Dies ist ziemlich aufwendig und sicherlich nicht nötig.

Hier mal ein Beispiel wie es über mehrere OB1-Zyklen ganz einfach gemacht werden kann:
Code:
// Ausgabeimpulse erzeugen mit Rückwärtszähler. Zähler setzen auf: Anzahl_Impulse * 2
// Zählausgang bei ungeraden Zählerständen Ein / bei geraden Zählerständen Aus

IF Ereignis1_Flanke THEN
  AusgabeCountdown := 2 ;  // 2 = 1 Impuls + 1 wegen sofort_decrement
END_IF ;

IF Ereignis2_Flanke THEN
  AusgabeCountdown := 4 ;  // 4 = 2 Impulse + 1 Pause + 1 wegen sofort_decrement
END_IF ;

// jeden Zyklus den Rückwärtszähler decrementieren
IF AusgabeCountdown <> 0 THEN
  AusgabeCountdown := AusgabeCountdown - 1 ;
END_IF ;

// Zählausgang bei ungeraden Zählerständen einschalten
Wachendorf_Zaehlausgang := WORD_TO_BOOL(INT_TO_WORD(AusgabeCountdown) AND 1) ;

Harald
 
Zurück
Oben