Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 37

Thema: Siemens Logo Programmierhilfe

  1. #1
    Registriert seit
    09.10.2012
    Beiträge
    202
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi Leute,

    ich habe ein Programm geschrieben, das aber leider nicht so einfach gelöst ist. Deshalb wollte ich nach einer besseren Lösung fragen.

    Funktionsbeschreibung des Programms:

    Wenn Sensor 1 und Sensor 2 schalten, sollen erstmal 4 Impulse gezählt werden, danach sollen 100 weitere Impulse gezählt werden und anschließend für 4 Impulse Ausgang Q1 geöffnet werden.
    Jetzt das Problem: Wenn in der Zwischenzeit, die 100 Impulse schon von einem Zähler abgezählt werden und Sensor 1 und Sensor 2 wieder betätigt werden, sollen wieder erstmal 4 Impulse gezählt werden, danach weitere 100 Impulse, dann anschließend Ausgang Q1 für 4 Impulse geöffnet werden (dann wieder zu)
    Und das könnte ja mehrmals passieren, so in der Art Kreislauf. Es soll also jedesmal wenn Sensor 1 + Sensor 2 betätigt wird der Ausgang Q1 nach den Impulsen geöffnet werden, egal wie oft hintereinander.

    Habe jetzt mal das Programm zum Ausprobieren geschrieben, allerdings habe ich nur 4 Zähler genommen damit es übersichtlich wird. In Wirklichkeit würden die 4 Zhäler wahrscheinlich nicht reichen, sondern ca. 30 - 50 oder mehr. Und das wäre halt ziemlich lange. Frage ist, ob es dazu eine einfachere Lösung gibt.


    LG
    EMZ
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren Siemens Logo Programmierhilfe  

  2. #2
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.716
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Hallo EMZ,

    da hab' ich wohl Deine Funktionsbeschreibung gestern in der PN nicht ganz richtig verstanden.
    Sorry.



    Also zu Deiner Vorstellung der Programmfunktion:
    Üblicherweise löst man sowas mit einem Schieberegister. Man gibt am Anfang einen Impuls (Bit) ein und nach x Takten (in Deinem Fall 100) kommt der Impuls am Ausgang an. Der Vorteil gegenüber Zählern - man kann jederzeit einen neuen Impuls eingeben, auch wenn einer gerade im Schieberegister "unterwegs" ist. Und jeder dieser eingegebenen Impulse kommt immer nach den x Takten (in Deinem Fall 100) am Ausgang an.

    Ich hab' Dir dazu mal 'n Versuchsprogramm erstellt:




    Jetzt hast Du da allerdings bei der Logo 2 Probleme:
    1. Es gibt nur 4 Schieberegister und das auch nur bei der 0BA7. 0BA4 bis 0BA6 haben nur eins, noch ältere gar keins.
    2. Wenn Du mit dem Testprogramm etwas herumprobierst, wirst Du feststellen, das Du bei der Übergabe der Bits vom 1. zum 2. Schieberegister auch noch eine Stelle "verlierst", weil die Schieberegisterbits 1.8 und 2.1 immer den gleichen Zustand haben.
    Somit kannst Du einen Impuls also nur max. 29 Takte weiterschieben, bis er am Ende der vorhandenen Schieberegister ankommt.

    Du wolltest aber 100 Takte. Genau genommen 105 Takte, da ja immer erst 4 Takte ein, dann 100 Takte aus und beim nächsten Takt wieder ein.
    Da nach den 100 Impulsen auch wieder 4 Takte, genau wie am Anfang, eingeschaltet sein soll, kannst Du die 4 Anfangstakte einfach mit durchschieben, so dass Du auch am Ende wieder 4 Eintakte hast. Ansonsten müsstest Du nur den Startimpuls durch schieben und jeweils am Start und am Ende separat die gewünschten Eintakte zählen.


    Zählen wir jedoch als 1. mal die Startimpulse, dass benötigst Du so oder so:




    Dann brauchst Du ein eigenes Schieberegister:
    Ich hab' zuerst mal geschaut, wie so ein Schieberegister aufgebaut ist. Es besteht aus hintereinander geschalteten D-Flipflops. Ein solches D-Flipflop besteht aus min. 4 NANDs. Bei 105 Stellen wären das schon allein 420 Bausteine. Damit ist selbst bei der 0BA7 die Grenze der möglichen Bausteine im Programm überschritten und diese Variante scheidet somit aus.
    Ob man ein Schieberegister auch mit RS-Flipflops bauen kann, hab' ich nicht weiter recherchiert, da es bei 105 Takten sicher ähnlich aufwendig wird.
    Dann also vlt. was "Analoges". Dazu ein paar Vorbetrachtungen. Wenn ein Bit in einem Binärwert um eine Stelle nach links verschoben wird, so wird z.B. aus 'ner 1 eine 2, aus 'ner 2 eine 4 oder aus 'ner 8 eine 16. Es entspricht also einer Multiplikation mit 2. Wird dagegen das höchste Bit aus dem Wert herausgeschoben, veringert sich der Wert um 2^x, wobei x der herausgeschobenen Bitstelle (begonnen bei 0) entspricht.
    Analogwerte können bei der Logo bis 32.767 berechnet werden. Das sind 15 Bits (Bit 0 - 14). Das 16. Bit dient übrigens, wie üblich, als Vorzeichen.
    Allerdings können bei Schwellwertschaltern nur Grenzwerte bis 20.000 eingestellt werden. Da aber bei der gesetzten Bitstelle 14 Werte von 2^14 = 16.384 bis 2^15-1 = 32.767 vorkommen, muss man als Grenzwert für Ein und Aus den gleichen Wert wählen und der entspricht dann dem Wert, bis zu dem der Schwellwertschalter aus ist. Das wäre 2^14-1 = 16.383.

    Das Ganze hab' ich also mit den Analogbausteinen, die das Rechnen ermöglichen, versucht nachzubauen. Es entstand ein 15-Bit-Schieberegister:




    So, jetzt noch alles in einem Programm vervielfältigen bzw. verknüpfen und dabei noch auf die Reihenfolge der analogen Schieberegister achten, damit man da nicht auch bei der Übergabe eine Bitstelle "verliert" und dann kommt z.B. sowas heraus:



    Hinweis: Bei 'ner realen Logo dürfen (hier die analogen) Bausteinausgänge nicht unbeschaltet bleiben. Der Simulation ist das egal. Daher hab' ich das einfach weg gelassen, um nicht vom eigentlichen Programm abzulenken.


    Die letzten 15 Bits hab' ich mal mit den vorhandenen Schieberegistern gemacht. Bei denen ist es etwas einfacher, ein beliebiges der 8 Bits abzufragen, auch wenn es mitten im Schieberegister ist. Da hier aber nach der Abfrage des 105. Bits die Bits dann auch ausgeschoben werden, hätte man das auch mit dem analogen Schieberegister machen können und müßte dann nur die Werte von Schwellwertschalter und abzuziehendem Wert anpassen.
    Ist was zum Üben.
    (Damit sollte das Programm dann auch auf 'ner 0BA6 laufen. Älter geht u.a. wegen der nicht vorhandenen "Arithmetischen Anweisung" nicht.)

    Ich hatte noch versucht, die wiederkehrende Logik der analogen Schieberegister in ein UDF auszulagern und dieses dann mehrfach aufzurufen. Allerding hatte die Logo-Software anscheinend Probleme mit den Baustein-Verweisen innerhalb der UDFs, so dass ich das (erst mal) wieder verworfen habe. Aber eigentlich ist das ja eine typische Anwendung für UDFs.


    Ach' übrigens -> schönes Projekt!
    Da mußte ich meine Gehirngrütze doch ganz schön umrühren.
    Angehängte Dateien Angehängte Dateien

  3. #3
    EMZ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.10.2012
    Beiträge
    202
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Erstmals Danke für deine Hilfe.
    Aber ich glaube das Programm entspricht nicht ganz meinen Vorstellungen.
    Oder ich check da nicht ganz durch. Weil ist schon bisschen anspruchsvoll.

    Also, ich mein wenn Sensor 1 + Sensor 2 betätigt wurden, sollen erst von dort an 100 Impulse (oder können auch zum testen weniger sein die Zahl spielt vorerst keine Rolle) gezählt werden, und dann erst der Ausgang Q1 angehen. Nachdem dann Ausgang Q1 an ist, sollen einfach nochmals 4 Impulse gezählt werden, damit der Ausgang wieder ausgeht.
    Soll in der Zwischenzeit , in der die 100 Impulse z.B. über einen Geber gezählt werden, nochmal der Fall vorkommen, dass Sensor 1 + Sensor 2 betätigt werden, dann sollen parallel die 100 Impulse gezählt werden und dann der Eingang wieder nach 100 Impulsen für 4 Impulse angehen.

    LG
    EMZ

  4. #4
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.716
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Macht doch das Programm.
    Es gibt Dir bei Betätigung von Sensor 1 + 2 die nächsten 4 Impulse vom B005 aus (so wie Du's oben noch wolltest), dann die nächsten 100 Impulse Pause und dann wieder 4 Impulse.
    Wenn Du's nicht als Impulsausgabe willst, sondern als Dauersignal, läßt Du einfach die Freigabe B010 weg, dann hast Du jeweils ein Dauersignal.

    Willst Du die Einschaltung am Anfang nun doch nicht mehr, läßt Du nur das Startsignal durch das Schieberegister laufen und schaltest den Rückwärts-Zähler damit erst am Ende ein.

    Im Prinzip nur Abwandlungen.


    Hast Du mal mit dem versuch des Schieberegisters experimentiert?
    Da kann man doch das Prinzip ganz gut erkennen.

  5. #5
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.716
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Hab' Dir das Programm mal auf die Schnelle nach Deiner neuen Beschreibung angepaßt, ich hoffe diesmal wie von Dir gewollt:



    Es geht nur noch die Startmeldung (1 Impuls, grün) durch das Schieberegister, dann nach weiteren 100 Impulsen ist es durch und schaltet den Ausgang und Zähler (orange) für die gewünschte Anzahl von 4 Impulsen ein und zwar dauerhaft. Die beiden vorher benötigten Bausteine (rot) für Impulse am Anfang und am Ende (B009) sowie Ausgabe als Impulse (B010) hab' ich mal sicherheitshalber drin gelassen, auch wenn sie hier nicht unbedingt benötigt werden.


    Du kannst beliebig oft Deine beiden Starteingänge einschalten, immer 100 Impulse später (wenn ich mich nicht verzählt habe) wird der Ausgang für 4 Impulse eingeschaltet.
    Ich hoffe, Du erkennst jetzt das Prinzip.
    Angehängte Dateien Angehängte Dateien
    Geändert von hucki (18.08.2013 um 23:39 Uhr)

  6. #6
    EMZ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.10.2012
    Beiträge
    202
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke dir Perfekt. Ich werde mich erstmals in das Programm einlesen müssen. Aber das erst wenn ich wieder vom Urlaub da bin, reise nämlich gleich ab.

    Eine Frage fällt mir jetzt schon ein. Wie kann ich die Impulszahl verändern? Sodass z.B. anstatt 100 Impulsen 430 Impulse gezählt werden sollen.


    LG
    EMZ

  7. #7
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.716
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Dann mußt Du die Größe des Schieberegisters verändern. Du brauchst halt für jeden Impuls eine Speicherzelle.
    Hast Du Dir die Beschreibung zum Schieberegister angesehen? Mit jedem Takt/Impuls wird der ganze Speicherinhalt um eine Stelle verschoben. Bei einem 8bit Schieberegister braucht es also 8 Takte, damit ein Eingangssignal am Ausgang ankommt. Bei 15 Bit 15 Takte. Oben hab' ich schon ein 105 Bit Schieberegister gebaut und bei 430 Impulsen brauchst du wieviele Bits?

    Bei 430 Impulsen könntest du aber schon an die Grenzen der Logo gelangen. Das ist dann doch eher etwas für ausgewachsene SPSen.


    Übrigens könnte man die 4 Impulse auch gleich am Anfang zählen und mit durchs Register schicken. Das spart die Zählung am Ausgang.
    Dazu müßten nur 2 Verbindungen aus meiner ersten Programmversion gelöscht werden und Du hättest auch die gewünschte Funktionalität.
    Einmal die Ausgabe der Startimpulse (grün) und die Ausgabe als Impulse (rot):

    ->


    Na denn, schönen Urlaub!
    Angehängte Dateien Angehängte Dateien

  8. #8
    Registriert seit
    21.05.2008
    Beiträge
    98
    Danke
    8
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Respekt, Respekt!


  9. #9
    EMZ ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.10.2012
    Beiträge
    202
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hi hucki,

    bin wieder im Heimatland. So also ich hab mal ne Frage zu deinem Hinweis:

    Hinweis: Bei 'ner realen Logo dürfen (hier die analogen) Bausteinausgänge nicht unbeschaltet bleiben. Der Simulation ist das egal. Daher hab' ich das einfach weg gelassen, um nicht vom eigentlichen Programm abzulenken.

    Heißt das, dass ich allen einzelnen Analogbausteinen einen Analogausgang zuweisen muss?


    Und ich habe jetzt zwar nachgeschaut, aber ich weiß nicht, wie ich die Impulszahl ändern kann. An welchen Baustein muss ich dazu den Parameter ändern?

    LG

    EMZ

  10. #10
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.716
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von EMZ Beitrag anzeigen
    bin wieder im Heimatland.
    Wünsche einen schönen Urlaub gehabt zu haben.




    Zitat Zitat von EMZ Beitrag anzeigen
    So also ich hab mal ne Frage zu deinem Hinweis:
    Zitat Zitat von hucki Beitrag anzeigen
    Hinweis: Bei 'ner realen Logo dürfen (hier die analogen) Bausteinausgänge nicht unbeschaltet bleiben. Der Simulation ist das egal. Daher hab' ich das einfach weg gelassen, um nicht vom eigentlichen Programm abzulenken.
    Heißt das, dass ich allen einzelnen Analogbausteinen einen Analogausgang zuweisen muss?
    Das wäre eine Möglichkeit. Meistens nimmt man analoge Merker dafür. Wenn die knapp werden sollten, kann man z.B. mit dem Analogkomperator als Dummy 2 Analogbausteine abschließen und diesen wiederum mit einer offenen Klemme. Davon sind mehr verfügbar.
    Letztendlich darf kein Baustein einen unbeschalteten Ausgang besitzen, es sei denn, es ist ein Ausgang, ein Merker oder eine offene Klemme.




    Zitat Zitat von EMZ Beitrag anzeigen
    Und ich habe jetzt zwar nachgeschaut, aber ich weiß nicht, wie ich die Impulszahl ändern kann. An welchen Baustein muss ich dazu den Parameter ändern?
    Es gibt keinen Parameter, den Du einfach ändern kannst. Über die Anzahl der Schiebestellen (Bits) werden die notwendigen Impulse, die ein Signal vom Eingang bis zum Ausgang benötigt, bestimmt.
    Du mußt also Schiebestellen im Programm hinzufügen oder rauslöschen.

    Das ist wie 'ne Taktstraße in der Autofabrik. Du schiebst vorne den Auftrag, ein Auto zusammen zu bauen, rein und dann sind x-Arbeitsschritte (die vorher im Zusammenbau-Programm festgelegt wurden) nötig, damit der fertige Auftrag hinten rauskommt. Wenn dieser Auftrag den 1. Schritt absolviert hat, kann man jederzeit wieder einen neuen Auftrag einschieben und auch der braucht die vorgegebenen Schritte, um hinten fertig raus zu kommen.
    Stellst Du fest, das nicht 100 Schritte nötig sind, um das Auto fertig zu stellen, sondern 110, müssen halt die nötigen Arbeitsschritte in die Taktstrasse eingefügt werden.

    Die integrierten Schieberegister der Logo! haben max. 8 Bit, wobei man in den Eigenschaften festlegen kann, welches Bit den Ausgang darstellt.
    Das von mir selbst erstellte Register "besitzt" max. 15 Bits. Wieviele es tatsächlich sind, wird über den Wert des Schwellwertschalters und der anschließenden arithmetischen Anweisung bestimmt. Bei letzterer ist der Wert 2^x(Bits) und beim Schwellwertschalter muss man davon dann Eins abziehen.

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 18.08.2013, 16:19
  2. Antworten: 1
    Letzter Beitrag: 30.01.2012, 13:06
  3. programmierhilfe
    Von holschin im Forum Suche - Biete
    Antworten: 1
    Letzter Beitrag: 09.12.2009, 09:31
  4. Antworten: 11
    Letzter Beitrag: 16.12.2008, 12:16
  5. Programmierhilfe Siemens Logo
    Von Micha* im Forum Sonstige Steuerungen
    Antworten: 19
    Letzter Beitrag: 10.08.2008, 19:05

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •