Step 7 For-Schleife in Tia Protal

Beiträge
15
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,
ich will einen For-Schleife bauen um 32 Sensoren durch Modbus RTU zu kommunizieren, meine Frage ist ob man eine For-Schleife auch in FUP bzw KOP schreiben kann (mit der Berücksichtigung dass ich kein langes Programm will ) oder es ist lieber in SCL zu schreiben die Sensoren werden kontinuierlich abgefragt . ich hoffe dass ich meine Frage richtig formuliert habe , danke euch im Voraus
 
Hallo Zusammen,
ich will einen For-Schleife bauen um 32 Sensoren durch Modbus RTU zu kommunizieren, meine Frage ist ob man eine For-Schleife auch in FUP bzw KOP schreiben kann (mit der Berücksichtigung dass ich kein langes Programm will ) oder es ist lieber in SCL zu schreiben die Sensoren werden kontinuierlich abgefragt . ich hoffe dass ich meine Frage richtig formuliert habe , danke euch im Voraus
Eine FOR-Schleife kann man nur in SCL schreiben, man kann aber ab TIA V14 auch ein SCL Netzwerk in einem KOP/FUP Baustein einfügen

1646057387481.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,
ich will einen For-Schleife bauen um 32 Sensoren durch Modbus RTU zu kommunizieren, meine Frage ist ob man eine For-Schleife auch in FUP bzw KOP schreiben kann (mit der Berücksichtigung dass ich kein langes Programm will ) oder es ist lieber in SCL zu schreiben die Sensoren werden kontinuierlich abgefragt . ich hoffe dass ich meine Frage richtig formuliert habe , danke euch im Voraus
ich glaube nicht, dass das in einer Schleife funktioniert... Wenn Du sagen wir mal 1 Sekunde pro Sensor für die Kommunikations brauchst, bist Du bei einer SPS-Zykluszeit von 32 Sekunden...
 
ich glaube nicht, dass das in einer Schleife funktioniert... Wenn Du sagen wir mal 1 Sekunde pro Sensor für die Kommunikations brauchst, bist Du bei einer SPS-Zykluszeit von 32 Sekunden...
Da stimme ich Ducati zu, sinnvoller wäre wohl ein CASE zu verwenden und die Statuswerte der Abfragebausteine dort auszuwerten und so bei erfolgreicher Abfrage den nächsten Teilnehmer zu lesen.....
 
ich habe v16 so hatte ich auch eigentlich vor ,dass ich die in SCl schreiben werde aber es ist mir noch nicht ganz klar wie ich den Modbus Master programmieren werden soll besonders MB-ADDR für die Adressierung der Sensoren.
 
Wie meine Vorredner (oder Schreiber) schon sagten wirst Du mit einer FOR-Schleife oder einem vergleichbarem Konstrukt in FUP oder KOP nicht glücklich werden, da die Kommunikation relativ lange dauert und Du garantiert in eine Zykluszeitüberschreitung läufst.
In SCL könntest Du aber eine Schrittkette mit der CASE-Anweisung erstellen. So lange noch keine Daten vom jeweiligen Sensor empfangen wurden wird halt in jedem Zyklus der selbe Schritt ausgeführt.
 
Zuletzt bearbeitet:
ich danke euch für die Hinweise ich versuche damit zu arbeiten , obwohl ich mit SCL noch nix angefangen habe aber ich nehme mir Ihre Vorschläge ernst danke nochmal
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schrittketten und Schrittzähler kann man auch in FUP und KOP programmieren, dafür muß man kein SCL verwenden. Je nachdem welche SPS man hat, kann man auch indirekte Adressierung in FUP/KOP programmieren.

Harald
 
hallo nochmal ich habe eine For-Schleife in SCL so geschrieben dass für jeden Zyklus einen Sensor von 1 bis 32 durch den MB-Master abgecheckt wird، ich habe die noch nicht probiert da ich immer noch unsicher bin .Danke euch im Voraus
 
hallo nochmal ich habe eine For-Schleife in SCL so geschrieben dass für jeden Zyklus jede Sensor von eins bis 32 durch den MB-Master abgecheckt wird، ich habe die noch nicht probiert da ich immer noch unsicher bin .Danke euch im Voraus
 

Anhänge

  • WhatsApp Image 2022-03-03 at 18.50.47.jpeg
    WhatsApp Image 2022-03-03 at 18.50.47.jpeg
    206,1 KB · Aufrufe: 56
Zuviel Werbung?
-> Hier kostenlos registrieren
- Warum wird #i := #i + 1; nur ausgeführt, wenn "Modbus_Master_DB".DONE = FALSE ist?
- Warum versuchst Du überhaupt, die SchleifenVariable #i in der Schleife zu manipulieren?
- Welchen DatenTyp hat #slaves[]?

Wird an einer anderen ProgrammStelle etwas in #slaves[] geschrieben?
Was meinst Du mit "durch den MB-Master abgecheckt"?
 
Zuletzt bearbeitet:
ich habe eine For-Schleife in SCL so geschrieben dass für jeden Zyklus jede Sensor von eins bis 32 durch den MB-Master abgecheckt wird،
Falsch, Du fragst lediglich ob die Modbusmaster-Instanz DONE ist und setzt dann jeden Array-Member slaves[ i ] auf 1, oder gar keinen.

Bei SPS macht es keinen Sinn, innerhalb eines Zyklus auf etwas zu warten. Das wird die Zykluszeit-Überwachung auslösen. Eine SPS wartet, indem sie ganz viele andere Sachen macht und nur einmal im Zyklus kurz schaut, ob denn das erwartete Ereignis inzwischen eingetroffen ist.
Es macht auch keinen Sinn, in einer Schleife etwas abzufragen, was sich innerhalb der Schleifenlaufzeit gar nicht ändert. Das hat in jedem Durchlauf den selben Wert wie im ersten Durchlauf und kann durch eine einzige Abfrage ersetzt werden.

PS: In TIA ist es "eigentlich" nicht möglich, den Schleifenzähler zu manipulieren. Kommt da keine Compilerwarnung? (oder gilt das nicht für S7-300 ???)

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die Rückmeldung ich habe eigentlich 32 Sensor und will die mit Modbus RTU checken ich habe in meinem erstem Netzwerk schon Bereit de MB_COMM_LOAD und die zweite Netzwerk habe ich MB_Master gebaut die Kommunikation sollte mit allen Sensoren durch geführt von daher habe ich mir gedacht dass es mit einem For-Schleife machbar ist indem nach jedem Zyklus ein Sensor angesprochen wird ich habe zwei fälle die entscheidend sind wo keine Brandfall gibt werden die Sensoren gecheckt und bei dem Brandfall soll ich die Differenzdruck auslesen . ich bin ganz neue in dem Bereich deswegen ist mir das bisschen aufwendig
1:Slaves habe ich als Array of Word gegeben
2: ich arbeite mit S7 1200 und RS 485 als CM
ich habe mit der For-Schleife eigentlich vor dass nach jedem Zyklus einen Sensor zu kommunizieren
ich hoffe dass ist mein Problem richtig formuliert habe
Danke für Ihre Hinweise
 
ich habe mit der For-Schleife eigentlich vor dass nach jedem Zyklus einen Sensor zu kommunizieren
Eine FOR-Schleife wird immer in einem Zyklus komplett abgearbeitet!

Sie ist für Dich daher folglich die falsche Wahl.

1. Du musst Deine Variable #i statisch erstellen
2. Du initialisierst #i einmalig beim Anlauf der CPU mit der Nummer des 1. Sensor.
3. Im Zyklus fragst Du den aktuellen Sensor #i einmalig ab.
4. Jedes Mal, wenn der Sensor erfolgreich abgefragt wurde (Flanke), erhöhst Du #i um 1.
5. Wenn #i höher ist, als Dein größter Sensor, fängst Du wieder von vorne an.
6. FOR brauchst Du dafür nicht.
 
... dass es mit einem For-Schleife machbar ist indem nach jedem Zyklus ein Sensor angesprochen wird ich habe zwei fälle die entscheidend sind wo keine Brandfall gibt werden die Sensoren gecheckt und bei dem Brandfall soll ich die Differenzdruck auslesen .
Mit "nach jedem Zyklus" meinst Du den PC-Zyklus ("OB1-Zyklus") oder einen Durchlauf durch die For-Schleife?
Was meinst Du mit "gecheckt"???
Wo/wie adressierst Du jeweils 1 der 32 Sensoren? Wo/wie 1 der 32 DifferenzDrücke?
Welche Bedeutung soll die 1 haben, die Du ggfs in #slaves[] einträgst (und nie wieder löschst)?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Heinileini mit (gecheckt) meinte ich Überprüfen des Slave-Status / mit Zyklus meinte ich ("OB1-Zyklus")/ die 1 steht da eigentlich falsch ich wollte durch die Anweisung eigentlich dass die Slaves der Werte von die Laufvariable bekommen wenn i=1 ist sollte den Slave der die Adresse 1 hat angesprochen und so weiter .
ich arbeite erst mit dem Hinweis von hucki ich glaube der hat mein Problem schon erkannt .
danke euch alle ich hoffe ich könnte damit weiter kommen wenn es klappt sage euch Bescheid.
ich wünsche euch allen einen schönen Abend
 
Zurück
Oben