# Kop



## shakesbier (25 Oktober 2010)

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.


----------



## vierlagig (25 Oktober 2010)

codesys? allen bradley? oder doch abb oder moeller?

kop heißt zwar kop, aber die funktionen sind überall irgendwie anders...


----------



## shakesbier (25 Oktober 2010)

CoDeSys... und TwidoSoft....
schaffs in beidem nicht... bin grade am verzweifeln...
Es heißt zwar, dass jedes Programm mit jeder Programmiersprache zu realisieren wäre, aber stimmt das wicklich?

Grüße


----------



## vierlagig (25 Oktober 2010)

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


----------



## shakesbier (25 Oktober 2010)

also bin nochmal einen schritt zurück gegangen und wollte einfach *nur *diesen Zählerbaustein laufen lassen, und dann sieht das grade so aus:






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


----------



## vierlagig (25 Oktober 2010)

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.


----------



## shakesbier (25 Oktober 2010)

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


----------



## vierlagig (25 Oktober 2010)

dein "problem" ist, dass sich dein zustand nicht ändert!


----------



## shakesbier (25 Oktober 2010)

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?!?


----------



## Larry Laffer (25 Oktober 2010)

shakesbier schrieb:


> 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


----------



## shakesbier (25 Oktober 2010)

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?


----------



## hucki (25 Oktober 2010)

shakesbier schrieb:


> ...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
> 
> ...


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:





vierlagig schrieb:


> dein "problem" ist, dass sich dein zustand nicht ändert!


----------



## shakesbier (25 Oktober 2010)

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


----------



## hucki (25 Oktober 2010)

shakesbier schrieb:


> ...
> 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?
> ...


Mach doch einen eigenen Zähler:


> Zählvariable=0
> Schleifenbeginn:
> Code
> Zählvariable=Zählvariable+1
> ...


----------



## shakesbier (25 Oktober 2010)

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


----------



## vierlagig (25 Oktober 2010)

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) )


----------



## shakesbier (26 Oktober 2010)

*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


----------



## hucki (26 Oktober 2010)

shakesbier schrieb:


> ...
> 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.


----------



## shakesbier (26 Oktober 2010)

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


----------



## hucki (26 Oktober 2010)

In der Hilfe unter "Twido-SPS-Programmierhandbuch" -> "Basis-Anweisungen" -> "Numerische Verarbeitung" -> "Logische Anweisungen":
In etwa so:


----------



## shakesbier (26 Oktober 2010)

und wiedermal ein danke....
hab die Hilfe nur auf englisch, da weiss ich immer nicht ganz, nach was genau ich suchen muss, danke..


----------



## hucki (26 Oktober 2010)

shakesbier schrieb:


> ... hab die Hilfe nur auf englisch, ...


Warum lädst Du Dir nicht die deutsche Software runter?
Hab' ich vorhin auch nur gemacht, weil's mich interessierte, wie das Ganze bei Telemecanique/Schneider aussieht.
Letztendlich sind die Befehle ja meistens ähnlich.


----------



## shakesbier (26 Oktober 2010)

wo hast du das runter geladen? auf der hompage von schneider?
wenn ich das da downloaden wollte brauchte ich ein benutzerkonto, oder hast du eins?
oder kennst du ne andere seite, wo man das auf deutsch runter laden kann?


----------



## hucki (26 Oktober 2010)

shakesbier schrieb:


> wo hast du das runter geladen? auf der hompage von schneider?
> wenn ich das da downloaden wollte brauchte ich ein benutzerkonto, oder hast du eins?...


Was meinst Du, ist in meinem vorigen Post das blau unterstrichene?


Also ich hab' da kein Benutzerkonto gebraucht.


----------



## shakesbier (26 Oktober 2010)

den link hatte ich übersehn.. sorry, aber runterladen geht echt nicht... naja... mal kucken... geh nachher noch zu meiner freundin, vllt. klappts da  aber danke dir schonmal. hatte gedacht, da braucht man ein benutzerkonto


----------



## hucki (26 Oktober 2010)

Wenn ich auf den Ordner hinter der dt. Suite vom 4.Aug.2009 klicke, geht diese Unterseite bei mir auf, wo dann der Download ist.

Ist aber ohne Registrierung nur eine (voll funktionsfähige?) 30-tägige Demoversion!


----------



## shakesbier (27 Oktober 2010)

weiss jemand zufällig, ob man auf dieser TWIDO Variablen vom Datentyp "String" oder "Array" oder "Char" definieren kann? Sieht nicht so aus, oder täusch ich mich da?


----------



## schloeri (1 November 2010)

*Was möchtest Du denn zählen!*

Ich glaube uns allen ist nicht klar was Du eigentlich zählen willst?
Hierbei ist es wichtig unabhängig von KOP, FUP oder ST, daß am Eingang des Counters eine steigende Flanke erkannt werden muss!

--> Mindestens eine Zyklus muss eine logisch 'NUll' anliegen!

Wenn Du Deine gezeigten Programme mal debuggst wirst Du merken, daß an Deinem Counter immer logisch 'Eins anliegt! Dann kann er auch nur ein mal zählen, oder?

Aber wenn Du das Bit einer State Machine Nutzen willst, wird dies doch auch sicher mal wierder zurückgesetzt, oder? Beim nächsten Setzen erfolgt dann auch ein Zählen. Und das ist bei allen Zählern IEC 61131 so!

Probier doch einfach mal eine boolsche Variable (Wie in Deinem ersten Programm) vor Deinem Counter aus, ohne diese irgendwo als Spule zu verwenden.
Dann toggelts Du diese an/aus/an/aus, dann siehst Du das der Zähler zählt und wenn Du das ganze dann nch mit nem Taktmerker (nur zum Test)
belegst, dann läuft das.


----------



## shakesbier (10 November 2010)

hallo liebe leute....

hab da mal wieder ne frage zu TwidoSuite:

was bedeutet diese Anweisung:

%MW2[%MW3]:=%KW4[%MW5]


kann mir da jemand weiter helfen?

Danke schonmal


----------

