Kop

shakesbier

Level-1
Beiträge
35
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute...

Kennt sich einer von euch in der Programmiersprache KOP aus?

Ich versuch da grade was ganz simples und bekomm es nicht hin:

ich hab einen Zähler und will den hoch zählen lassen, dafür wird aber eine steigende Flanke benötigt, diese realisier ich durch eine state machine, die je nach status der laufvariablen einen boolschen wert setzt oder rücksetzt.
ich hab zwar dann einen boolschen wert, der auf TRUE und FALSE geht, aber dennoch zählt mein Baustein nur einmal hoch....
Komm leider um KOP nicht herum und komm aber nicht weiter...

Wär cool wenn mir da jemand helfen kann.
 
die CTU, CTD und CTUD von CoDeSys haben die Flankenauswertung schon integriert und ja, das sollte auch mit KOP zu realisieren gehen.

mach mal nen screenshot, damit wir wissen, was du da gebaut hast
 
also bin nochmal einen schritt zurück gegangen und wollte einfach nur diesen Zählerbaustein laufen lassen, und dann sieht das grade so aus:


Zaehler.jpg


hoff des hat geklappt... blick grade nicht,wie ich den screenshot einfüg

Zaehler.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
switch ist ja am zähler immer true! da kann ja gar keine flanke erkannt werden!

bau dir zum test z.b. einen takt - 1Hz oder sowas und schalte den auf deinen zähler auf.
 
das Problem ist, dass ich den nachher auch nicht verwenden kann....
ich wollte das über eine State-Machine machen:

also wenn eine Integer-Variable 0 ist, soll sie 1 werden und dann soll ein Zähler hochgezählt werden... aber ich komm ja schon nicht mal drauf, wie ich das realisieren könnte, dass der Wert einer Varaiblen in Abhängigkeit eines Zustands verändert wird.. ich kann irgendwie immer nur einen Baustein mit "EN"-Eingang verwenden....

kannst du mir vllt. auch da mal schnell weiter helfen? ich bin eigentlich Strukturierter-Text gewohnt... so ist das schon alles sehr seltsam
 
Zuviel Werbung?
-> Hier kostenlos registrieren
jetzt aber mal eine prinzipielle Frage:

Wenn ich eine Interne Variable ( also kein Ausgäng) in der Applikaion setze, dann wird diese doch sofort gesetzt, oder?
Im Strukturiertem Text kann ich das mal so machen...

Weil das war mein gedanke: ich setze die Variable "switch" auf TRUE, dies merkt mein Zähler und bevor der neue Zyklus beginnt setze ich die Variable wieder auf "FALSE"... wenn ich das mit im Online-Modus durch Einzelschritte nachverfolge geht das eben auch so, aber auch da zählt mein Zähler nicht hoch.. ich wollte eben die Eigenschaft ausnutzen, dass das Programm zyklisch arbeitet.... aber dann hab ich da wohl einen denkfehler...

hab mir eben mal die "state-machine" nochmal gebastelt, bei der das in der einzelschrittversion eben auch wieder die steigende Flanke am eingang des Zählerbausteins gibt, aber dennoch zählt er nicht hoch?!?

Zaehler2.jpg


Zaehler3.jpg
 
jetzt aber mal eine prinzipielle Frage:

Wenn ich eine Interne Variable ( also kein Ausgäng) in der Applikaion setze, dann wird diese doch sofort gesetzt, oder?
Im Strukturiertem Text kann ich das mal so machen...

Hallo,
dein Zähler hat das Problem, dass er keinen BOOL-Impuls (Flankenwechsel) bekommt.
Wie würdest du denn das vorliegende Problem, in ST lösen ? So geht es dann auch in KOP ...

Gruß
Larry
 
vielen dank schonmal euch beiden
o.k... jetzt hab ich´s auch.... weiss jetzt auch woran an der State-machine der fehler liegt, aber wie kann ich dann den Zähler überhaupt laufen lassen?
also ich habs jetzt doch mal in ST versucht und da gehts echt auch garnicht.
nimm normal keinen Zähl-Baustein, sondern normale IF-Anweisung für Zähler.
aber wie kann ich dann mit variablen einen Zähler zum laufen bringen? Grade, wenn ich dann mal eine WHILE-Schleife machen will, dafür brauch ich das ja, oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...Weil das war mein gedanke: ich setze die Variable "switch" auf TRUE, dies merkt mein Zähler und bevor der neue Zyklus beginnt setze ich die Variable wieder auf "FALSE"... wenn ich das mit im Online-Modus durch Einzelschritte nachverfolge geht das eben auch so, aber auch da zählt mein Zähler nicht hoch.. ich wollte eben die Eigenschaft ausnutzen, dass das Programm zyklisch arbeitet.... aber dann hab ich da wohl einen denkfehler...
Geh' das Ganze doch mal Zeile für Zeile, Zyklus für Zyklus durch:
1. switch auf true setzen - Ergebnis switch ist true
2. Zähler aufrufen (zähleingang "switch"= true), wie war er beim vorigen Aufruf dieses Zählers? -> false=Plus 1, true=unverändert
3. switch auf false setzen - Ergebnis switch ist false

nächster Zyklus:
4. switch auf true setzen - Ergebnis switch ist true
5. Zähler aufrufen (zähleingang "switch"= true), wie war er beim vorigen Aufruf dieses Zählers? -> false=Plus 1, true=unverändert
6. switch auf false setzen - Ergebnis switch ist false
Siehst Du, wo der Hase begraben ist?
Der Zähler bekommt den Zustandswechsel von switch gar nicht mit, weil er zwischendurch ja nicht aufgerufen wird:
dein "problem" ist, dass sich dein zustand nicht ändert!
 
danke... danke.. danke 1000 mal danke euch allen.... so ein blöder denkfehler
jetzt hab ich es gecheckt....
aber jetzt stellt sich mir dann doch die Frage wie ich in KOP eine WHILE-Schleife realisier!? könnt ihr mir da noch helfen?

ich hätte einfach am anfang meines Programmteils, welcher durchloffen werden soll einen Zähler eingebaut, der mir nach erreichen der durchläufe einen Sprung über das Codesegment hinweg macht, aber das geht dann ja schon doppelt nicht. wie realisiert man dann schleifen in KOP?

Grüße
 
...
aber jetzt stellt sich mir dann doch die Frage wie ich in KOP eine WHILE-Schleife realisier!? könnt ihr mir da noch helfen?

ich hätte einfach am anfang meines Programmteils, welcher durchloffen werden soll einen Zähler eingebaut, der mir nach erreichen der durchläufe einen Sprung über das Codesegment hinweg macht, aber das geht dann ja schon doppelt nicht. wie realisiert man dann schleifen in KOP?

Grüße
Mach doch einen eigenen Zähler:
Zählvariable=0
Schleifenbeginn:
Code
Zählvariable=Zählvariable+1
Zählvariable<Schleifendurchläufe?
Ja - springe Schleifenbeginn
weiter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ahh... so gehts, aber kann des sein, dass ein Programm in KOP ein wesentlich längeres wird, als wenn man es in einer anderen Sprache realisieren würde?

Hätte auch noch ne Frage: Mit was für einer Sprach arbeitet ihr lieber/ kennt ihr jemand, der in AWL oder KOP arbeitet?
Mich würde mal da noch interessieren, was andere so denken, welche sprache eigentlich eine gute Sprache ist. Mir ist bewusst, dass man das auch nicht immer so sagen kann, so wird eine Person, die aus der Software-Schiene kommt wahrschienlich eher ST bevorzugen und eine Person, die aus der Hardware-Schiene eher KOP, oder seht ihr das anders?

Grüße
 
hat alles seine vor- und nachteile und eben auch seine einsatzgebiete.
die auswahl der richtigen sprache für eine aufgabe ist kein beliebtheitsbewettbewerb sondern sollte sich auf der frage gründen: mit welchen sprachlichen konstruktionen ist das problem am einfachsten, übersichtlichsten und am besten dokumentierbar zu lösen.

(ich programmiere: AWL, SCL, KOP, (Graph und CFC nach bedarf), C#, (VB, SQL) )
 
Logische Bit-Verknüpfung

guten morgen...

hätte wieder eine Frage zu KOP, diesesmal aber nicht CoDeSys, sonder TwidoSuite / TwidoSoft... aber wenn jemand für meine Frage eine Lösung in CoDeSys wüsste könnte mir das auch schon hilfreich sein...

ich habe eine Systemvariable vom Typ WORD und ich will nur das erste Bit dieser Wortes setzten, ohne den Rest der Variablen zu beeinflussen. Dafür würde ich eine Maske mit der Bitfolge "1111111111111111" nehmen und sie logisch UND-Verknüpfen mit dem zu veränderndem Wort. Jetzt stellt sich mir aber die Frage, wie ich das realisieren kann. Besitze keinen Baustein bisher, der mir das ermöglicht.... kennt von euch jemand eine lösung?

Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...
ich habe eine Systemvariable vom Typ WORD und ich will nur das erste Bit dieser Wortes setzten, ohne den Rest der Variablen zu beeinflussen. Dafür würde ich eine Maske mit der Bitfolge "1111111111111111" nehmen und sie logisch UND-Verknüpfen mit dem zu veränderndem Wort. Jetzt stellt sich mir aber die Frage, wie ich das realisieren kann. Besitze keinen Baustein bisher, der mir das ermöglicht.... kennt von euch jemand eine lösung?
Wenn Du das so machst, hast Du das gleiche WORD wie vorher.
Du benötigst eine ODER-Verknüpfung mit einem WORD, bei dem die Stellen 1 sind, die Du setzen willst. In diesem Fall also 0000000000000001.

Einen extra Baustein brauchst du dafür sicher nicht - eine einfache ODER-Verknüpfung reicht.
 
Zuletzt bearbeitet:
stimmt, aber ich weiss grade eher nicht, wie man sowas bei Twido realisiert:

ich kann zwar einem Wort (%KW0) den Wert "0000000000000001" zuweisen, weiss aber nicht, wie ich dann dieses Wort mit einem anderem verknüpfen kann..
kann leider den Befehl "%SW76 | %KW0" nicht in den baustein eingeben.. aber vllt. gibts da noch ne andere möglichkeit
 
In der Hilfe unter "Twido-SPS-Programmierhandbuch" -> "Basis-Anweisungen" -> "Numerische Verarbeitung" -> "Logische Anweisungen":
In etwa so:
 

Anhänge

  • Twido1.jpg
    Twido1.jpg
    13,8 KB · Aufrufe: 20
Zuletzt bearbeitet:
Zurück
Oben