Primzahlen mit Kontaktplan (Ladder Logic) berechnen

Ich bin aufgrund eines Postings in einer anderen Newsgroup auf dieses nette Programm aufmerksam geworden:

formatting link

Für Steuerungsaufgaben sieht Ladder Logic generell nützlich aus. Allerdings fehlt mir bei dem Programm einiges, so z.B. könnte ich mir vorstellen, daß es bei komplexeren Steuerungen sinnvoll sein kann, wenn man einzelne Module entwirft, die man dann als Block wiederverwenden kann. So ein ellenlanges einzelnes Programm ist nicht gerade übersichtlich. Und ein Timing-Diagramm, wie man es von FPGA-Simulatoren her kennt, wäre schön. Der Editor ist auch nicht der Hit, z.B. verschieben von Elementen ist nicht möglich.

Ich konnte es nicht lassen und habe mal versucht, einen Primzahlgenerator zu programmieren, da ich gelesen haben, daß Ladder Logic Turing Vollständig sein soll. Ist auch gar nicht so kompliziert, aber ein wenig umständlich. Hängt wohl von der Anwendung ab: Einfache Steueraufgaben mag man leichter mit Ladder Logic als in normalen Programmiersprachen implementieren können, da die implizite Perallelverarbeitung die Beschreibung leichter macht, aber klassische Programmieraufgaben, die in normalen Programmiersprachen einfach sind, kann man nur umständlich in Ladder Logic umsetzen. Aber vielleicht hat ja einer eine bessere Implementierung. Das Programm gibt die Primzahlen von 2 bis 100 auf dem seriellen Port aus (wegen einem Programmfehler in LDmicro mit einer initialen 0, ich habe dem Autor aber schon informiert). Hier der Text-Export:

|| || || Rclock [counter =100]--- || || || || || || || || || || [Cpc ==] {counter := } || 2 ||----[ 1 ]----------------------------------------{ 2 MOV}--|| || || || || || || || || || [Cpc ==] {divisor := } || 3 ||----[ 2 ]----------------------------------------{ 2 MOV}--|| || || || || || || || || || [Cpc ==] [divisor >=] {Cpc := } || 4 ||----[ 3 ]-------[ counter ]---------------------{ 9 MOV}--|| || || || || || || || || || [Cpc ==] {DIV fraction := } || 5 ||----[ 4 ]-----------------------------{ counter / divisor}-------|| || || || || || || || || || [Cpc ==] {MUL mul := } || 6 ||----[ 5 ]----------------------------{ fraction * divisor}-------|| || || || || || || || || || [Cpc ==] [mul == ] {Cpc := } || 7 ||----[ 6 ]--------[ counter]----------------------{ 10 MOV}--|| || || || || || || || || || [Cpc ==] _ {ADD divisor :=} || 8 ||----[ 7 ]---------[OSR_/ ]-------------{ divisor + 1 }--------|| || || || || || || || || || [Cpc ==] {Cpc := } || 9 ||----[ 8 ]----------------------------------------{ 3 MOV}--|| || || || || || || || || || [Cpc ==] counter ||

10 ||----[ 9 ]-----------------{"\3\r\n"}------------ || || || || || || || || || || [Cpc ==] _ {ADD counter :=} || 11 ||----[ 10 ]---------[OSR_/ ]-------------{ counter + 1 }--------|| || || || || || || || || || [Cpc ==] {Cpc := } || 12 ||----[ 11 ]----------------------------------------{ 2 MOV}--|| || || || || || || || || || Rclock Tclock_on Tclock_off Rclock || 13 ||-------]/[--------[TON 10.00 ms]---[TOF 10.00 ms]---------( )-------|| || || || || || || ||------[END]---------------------------------------------------------|| || || || ||

Hier die ld-Datei:

LDmicro0.1 MICRO=Microchip PIC16F628 18-PDIP or 18-SOIC CYCLE=1000 CRYSTAL=4000000 BAUD=2400

IO LIST END

PROGRAM RUNG CONTACTS Rclock 0 LEQ counter 100 CTU Cpc 100 END RUNG EQU Cpc 1 MOVE counter 2 END RUNG EQU Cpc 2 MOVE divisor 2 END RUNG EQU Cpc 3 GEQ divisor counter MOVE Cpc 9 END RUNG EQU Cpc 4 DIV fraction counter divisor END RUNG EQU Cpc 5 MUL mul fraction divisor END RUNG EQU Cpc 6 EQU mul counter MOVE Cpc 10 END RUNG EQU Cpc 7 OSR ADD divisor divisor 1 END RUNG EQU Cpc 8 MOVE Cpc 3 END RUNG EQU Cpc 9 FORMATTED_STRING counter 6 92 51 92 114 92 110 END RUNG EQU Cpc 10 OSR ADD counter counter 1 END RUNG EQU Cpc 11 MOVE Cpc 2 END RUNG CONTACTS Rclock 1 TON Tclock_on 10000 TOF Tclock_off 10000 COIL Rclock 0 0 0 END

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss
Loading thread data ...

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.