358 Digitale Eingänge Erfassen und Auswerten

Hector

Level-1
Beiträge
11
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Vorraussetzungen:
CPU 314, Speicherkarte 128kB, 11x DigitaleEingabeKarten (32 Polig), 1x IM365, 1x Touchpanel MP277

Anforderungen:
352 Digitale Pins von elektronik-Karten müssen auf Auslösung überwacht werden.
176 dieser Pins liefern bei Auslösung ein statisches High Signal von 24V
176 weitere Pins liefern bei Auslösung einen Impuls (24V), der im Idealfall 50ms lang ist, jedoch in der realität durch Alterung der Bauteile meist kürzer Ausfällt im Bereich von 10-30ms.

Immer 2 Pins (statisch + Impuls) sind einer speziellen Elektronik-Karte zugewiesen. Sinn dahinter ist, das es oft vorkommt, das ein Meldepfand (Impuls oder Statisch) ausfallen kann und somit sichergestellt wird, das aufjedenfall eine Fehlermeldung die Karte richtig verlässt.

Realbedingungen:
Es kommt leider oft vor, das diese Fehlermeldung auf der Karte nur einige Minuten andauerd und dann wieder verschwindet. Jedoch darf diese Karte, sollte sie einmal einen Fehler abgesetzt haben (egal wie lange er gedauert hat) nichtmehr benutzt werden.

Hilfestellung:
Ich benötige nun Hilfe bei der Programmierung. S7 ist für mich Neuland und ich bin ein wirklicher Laie....
Ich brauche Hilfe beim Einlesen aller Eingänge (jede EingabeKarte hat ja einen Adressbereich). Wie realisiere ich das, bzw wie kann ich jedem EingangsPin an den 11 DI-Karten eine feste Bezeichnung zuteilen damit ich später im Programm leichter damit arbeiten kann?
Ebenfalls brauche ich Hilfe bei der Auswertung der Eingänge.
Sprich die eigentliche Logik. Immer 2 Eingangspins stehen ja für eine "Karte" die bei einem Fehler nicht verwendet werden darf!
Ist dies der Fall, soll es am Touchpannel angezeigt werden und nur dort wieder quittiert werden können.

Ich hoffe Ihr könnt mir weiterhelfen.

vielen Dank
Hector
 
Vorraussetzungen:
CPU 314, Speicherkarte 128kB, 11x DigitaleEingabeKarten (32 Polig), 1x IM365, 1x Touchpanel MP277

Anforderungen:
352 Digitale Pins von elektronik-Karten müssen auf Auslösung überwacht werden.
176 dieser Pins liefern bei Auslösung ein statisches High Signal von 24V
176 weitere Pins liefern bei Auslösung einen Impuls (24V), der im Idealfall 50ms lang ist, jedoch in der realität durch Alterung der Bauteile meist kürzer Ausfällt im Bereich von 10-30ms.

Immer 2 Pins (statisch + Impuls) sind einer speziellen Elektronik-Karte zugewiesen. Sinn dahinter ist, das es oft vorkommt, das ein Meldepfand (Impuls oder Statisch) ausfallen kann und somit sichergestellt wird, das aufjedenfall eine Fehlermeldung die Karte richtig verlässt.

Realbedingungen:
Es kommt leider oft vor, das diese Fehlermeldung auf der Karte nur einige Minuten andauerd und dann wieder verschwindet. Jedoch darf diese Karte, sollte sie einmal einen Fehler abgesetzt haben (egal wie lange er gedauert hat) nichtmehr benutzt werden.

Hilfestellung:
Ich benötige nun Hilfe bei der Programmierung. S7 ist für mich Neuland und ich bin ein wirklicher Laie....
Ich brauche Hilfe beim Einlesen aller Eingänge (jede EingabeKarte hat ja einen Adressbereich). Wie realisiere ich das, bzw wie kann ich jedem EingangsPin an den 11 DI-Karten eine feste Bezeichnung zuteilen damit ich später im Programm leichter damit arbeiten kann?

Dies kannst du einfach über den Symbolik Editor machen. Dort kannst du jedem Eingang einen Namen zuordnen.

Ebenfalls brauche ich Hilfe bei der Auswertung der Eingänge.
Sprich die eigentliche Logik. Immer 2 Eingangspins stehen ja für eine "Karte" die bei einem Fehler nicht verwendet werden darf!
Ist dies der Fall, soll es am Touchpannel angezeigt werden und nur dort wieder quittiert werden können.

Ich hoffe Ihr könnt mir weiterhelfen.

vielen Dank
Hector

Du kannst doch einfach wenn einer der 2 Eingangspins kommt, ein Bit in einem Db setzen welches aussagt das die Karte gestört ist. Über das Touchpanel setzt du dieses Bit wieder zurück.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Jochen,

vielen Dank für deinen ersten Lösungsvorschlag:

1. Wo finde ich den Symbolik Editor und wie kann ich zB. den DI1 Pin von Karte 1 und den DI1 Pin von Karte 2 etc unterscheiden?

2. Wie würdest du diese Abfrage ob einer der beiden Eingänge kommt realisieren? Machst du das im OB1, wenn ja wie würdest du das programmieren - Bsp. wäre super!

3. Wie verweise ich den dann auf das Bit in dem DB?

4. Wie kann ich das realisieren das auch sehr sehr kurze Impule von wenigen ms auch noch sicher erfasst werden können? Die SPS hat ja ne gewisse Zykluszeit die sie braucht bis sie die Eingänge wieder erneut einliest....

Sorry, wie gesagt bin ein echter Laie....
 
Hallo Jochen,

vielen Dank für deinen ersten Lösungsvorschlag:

1. Wo finde ich den Symbolik Editor und wie kann ich zB. den DI1 Pin von Karte 1 und den DI1 Pin von Karte 2 etc unterscheiden?

Diese haben ja unterschiedliche Eingangsadressen.

2. Wie würdest du diese Abfrage ob einer der beiden Eingänge kommt realisieren? Machst du das im OB1, wenn ja wie würdest du das programmieren - Bsp. wäre super!

3. Wie verweise ich den dann auf das Bit in dem DB?

U EINGANG1
O EINGANG2
S DB1.DBX0.0

4. Wie kann ich das realisieren das auch sehr sehr kurze Impule von wenigen ms auch noch sicher erfasst werden können? Die SPS hat ja ne gewisse Zykluszeit die sie braucht bis sie die Eingänge wieder erneut einliest....

Sorry, wie gesagt bin ein echter Laie....
Wenn die Impules kürze sind als deine Zykluszeit brauchst du alarmfähige Eingangskarten.

Also, Ich denke ganz ohne Programmierkentnisse wird das ein schwieriges Projekt...
 
Ja so ein bisschen Grundkurs SPS/Step 7 würde dir schon helfen..

Versuch das erstmal in der HW-Konfig zusammenzubauen, dann siehste auch direkt welcher Eingang welche Adresse bekommt.

Das mit den Impulsen könnte man z.B. über einen schnelleren Interrupt abfragen.

Muss denn das Programm noch mehr können oder werden da nur die Eingänge überwacht?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein es muss nur die Eingänge überwachen können.
Und anhand dessen dann eine Meldung am Touchpannel abgeben, das die entsprechenede Karte nicht verwendet werden darf.
Durch Quittieren am Touchpannel soll die Meldung dann wieder gelöscht werden....
 
Also ich werde es jetzt so machen:
Im OB1 prüfe ich für jede "Elektronik-Karte" die beiden Eingangspins.
Wenn einer von beiden "1" ist, wird ein FlipFlop gesetzt.
Dieses FlipFlop setzt mir ein Bit in einem DB1.
Zurückgesetzt wird das Bit im DB1 über eine Taste am Touchpannel.

Die Frage ist ob es reicht den Dynamischen Pin, der nur als Impuls anliegt auf "High" abzufragen, oder ob ich einen Flankenwechsel betrachten muss?

Ist es Sinnvoll im OB1 für jede Karte ein eigenes "Netzwerk" zu erstellen?
Oder sollte ich dafür Funktionsbausteine nehmen und diese nur im OB1 aufrufen?
Ich muss halt darauf schauen das das Programm sehr schnell abgearbeitet wird, um auch kurze Impulse erfassen zu können....

Wieviele Bits kann ich in meinem DB1 deklarieren und wie ist die übliche Bezeichnung für die Bits?

Wie verweise ich vom OB1 auf den DB1?
 
Du brauchst also eine abfrage ob beide Signale beim Flankenwechsel von Low nach High gleichzeitig anliegen.
Der welchsel von 1 auf 0 ist etwas schwieriger, da kannste ja nur abfragen ob der Impuls noch an, ist wenn der Statische auf 0 ist.
Ein Fehler am Statischen Signal abzufragen wirste so nicht hinbekommen.. erst wieder wenn du eine Flanke von 0 nach 1 am Impuls hast, sprich wenn die Karte das nächste mal auslöst.

Gibt es die möglichkeit die Karten z.B. über einen Ausgang zu testen? z.B. das du alle *sek für 10ms einen Ausgang wegschaltest und dann auch der entsprechnende Eingang abfallen muss.
Soetwas wird z.B. bei Fehlersicheren Eingängen gemacht, die Sensorversorgung wird kurz abgeschaltet und dann muss der Eingang auf Low welchseln.
Theoretisch könne man sich so auch den Impuls Eingang sparen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein diese Möglichkeit habe ich nicht.
Und nein ich muss nicht abfragen ob beide einen Flankenwechsel haben.
Ich muss sicherstellen das das Auslösesignal erfasst wird!

Das Auslösesignal ist einmal statisch und einmal Dynamisch.
Du kannst dir das so vorstellen, das es eine Erzeugungseinheit auf der Karte gibt, die mir das statische Fehler Signal erzeugt. Dieses Signal wird dann noch parallel über eine Art Taktgenerator gegeben, der mir einen EINMALIGEN Impuls von 50ms zum statischen Signal zusätzlich liefert/abschickt.

Da es aber aufgrund von Alterungsbedingungen passieren kann, das zB der Statische Ausgang defekt ist oder zB der Taktgenerator Defekt ist, dass also einer der beiden Ausgänge nicht richtig funktioniert, muss ich beide Überprüfen und erfassen können.
Oftmals kommt es auch nur vor, das der Taktgenerator spinnt und mir einen kurzen Impuls ausgibt, obwohl kein Fehler auf der Karte vorliegt. (Der Statische bleibt auf LOW). Diese sporadischen Fehler sollte die SPS eben auch erfassen können....
 
Zuerst würde mich die Hardware interessieren.
Dann kann über die Auswertung nachgedacht werden.
Wie ist die Karte angeschlossen?
Werden da echt 352 Drähte verwendet oder ist es eine Buskopplung? :confused:
Wenn Bus, dann kannst du die Eingänge direkt in einen DB kopieren und über Wort oder Doppelwortoperation prüfen welcher Eingang seinen Signalzustand geändert hat und dann daraus dir deine Meldung generieren.


bike
 
Es werden 352 Drähte direkt auf die Digitalen Eingänge der 11 Eingabe-Baugruppen (32 Polig) verdrahtet....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Signalzeit...

Du kannst halt ein Signal nur sicher erfassen wenn es länger als die zykluszeit anliegt, oder du alarmfähig baugruppen nimmst. Aber auch bei diesen musst du nachschauen wie lange ein signal mindestens anliegen muss das diese es mitbekommt (denke aber das diese zeitspanne sehr klein ist!)

ich denke aber wenn die komplette aufgabe der sps nur das erfassen dieser signale ist, die zykluszeit nicht sehr groß wird.
 
Dann würde ich in einer Schleife prüfen ob ein Eingangswort bzw Dword <> 0 ist, dann dieses/diese Bit suche und daraus eine Meldung generieren.

Wie willst du programmieren? KOP, FUP, AWL oder SCL?

Je nachdem wie kannst/musst du dir die Schleife bauen.

Stichworte sind z.B. Vergleich und Sprungleiste.


Doch wie schon andere geschrieben haben, etwas Grundlagen musst du dir auf die Schnelle noch aneignen.

bike
 
Vielen Vielen Dank für eure Hilfestellungen.
Ja ich weis, ich bin schon dabei mich durch PDFs und Bücher durchzukämpfen.

Also nochmal zum allg. Verständniss für mich:

Ich schreibe in meinen OB1 folgende Anweisungen:

(MeldeNr_1 = E0.0 etc) -> Symbolliste angelegt!

//Karte1
U MeldeNr_1 (Statisch)
O MeldeNr_2 (Dynamisch)
S DB1.DBX0.0 (AuslöseBit im DB)

//Karte2
U MeldeNr_3 (Statisch)
O MeldeNr_4 (Dynamisch)
S DB1.DBX0.1 (AuslöseBit im DB)

.
.
.

oder hast du dir das anders gedacht?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein.
Du schreibst dir eine Funktion in einen FC oder FB und diesen rufst du im OB 1 auf oder in einem Zeit OB.

Und dann nicht UND verknüpfungen sondern die Auswertung machst du über Vergleichen der Signalzustände

z.B:
L ED 0
L 0
><D
= M0.0 // Fehler in ED 0

Oder mit indirekter Adressierung über eine Schleife


bike
 
Zuletzt bearbeitet:
Sorry wenn ich bei solchen Elementaren Aussagen schon ins Schwanken gerade, aber das ist echt neuland....

Also vlt kannst du mir das an einem BSP mal erklären:

- Karte1 liefert an folgende Eingänge die Meldungen:
E0.0 (Fehlermeldung Antivalenzstörung)
E0.1 (Fehlermeldung Antivalenzstörung DYNAMISCH)

- Karte 2
E1.0 (Fehlermeldung Differenz)
E1.1 (Fehlermeldung Differenz DYNAMISCH)


Im Touchpannel will ich beide Karten grafisch Darstellen, die dann rot angezeigt werden sollen, wenn auf der jeweiligen Karte ein Fehler ist, also brauch ich ja Pro Karte einen eigenen Merker oder Bit.
 
Habe ich doch schon im vorherigen Schrieb gezeigt.
Es muss doch erst etwas geschehen, wenn das ED <> 0 ist.
Mit der Info, dass M0.0 = 1 kannst die Auswertung starten.
So wie es machen willst, hast du eine Wust von UND Verknüpfungen.
Ich weiß jetzt nicht wie die sich auf die Zykluszeit auswirkt, jedoch ist so, wie du es machen willst kein so echt guter Stil.

bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
bike.

Er möchte nicht wissen ob 32 Karten defekt sein könnten, sondern WELCHE.

Somit ist sein

U Eingang1
U Eingang2
= DB1.DBX0.0

gar nicht so schlecht.

Am Panel müssen dann nur 352 Tasten her, die jwls als Funktion haben RÜCKSETZEN DB1.DBX0.0 - DBXn.n

Edit: @ Bike. Habe nochmal gelesen, nun hab ich verstanden was du meinst ;) Nehme alles zurück, lasse es aber stehen

MfG

Marcel
 
Ja ich möchte genau wissen welche Karte den Fehler liefert!

><D was bedeutet das?

Würde es dann so gehen:
Melde_Nr_x ist in der Symbolliste den Eingängen zugeordnen (MeldeNr_1 ; E0.0 etc)

//Karte1
L MeldeNr_1 (Statisch)
L 0
><D
= DB1.DBX0.0 (AuslöseBit_0 im DB)

L MeldeNr_2 (Dynamisch)
L 0
><D
= DB1.DBX0.0 (AuslöseBit_0 im DB)

//Karte2
L MeldeNr_3 (Statisch)
L 0
><D
= DB1.DBX0.1 (AuslöseBit_1 im DB)

L MeldeNr_4 (Dynamisch)
L 0
><D
= DB1.DBX0.1 (AuslöseBit_1 im DB)
 
Zuletzt bearbeitet:
Ja ich möchte genau wissen welche Karte den Fehler liefert!

><D was bedeutet das?

Würde es dann so gehen:
Melde_Nr_x ist in der Symbolliste den Eingängen zugeordnen (MeldeNr_1 ; E0.0 etc)

//Karte1
L MeldeNr_1 (Statisch)
L 0
><D
= DB1.DBX0.0 (AuslöseBit_0 im DB)

L MeldeNr_2 (Dynamisch)
L 0
><D
= DB1.DBX0.0 (AuslöseBit_0 im DB)

//Karte2
L MeldeNr_3 (Statisch)
L 0
><D
= DB1.DBX0.1 (AuslöseBit_1 im DB)

L MeldeNr_4 (Dynamisch)
L 0
><D
= DB1.DBX0.1 (AuslöseBit_1 im DB)

Ja es würde gehen, doch bei deiner Abtastrate ist nicht sicher ob du immer die 50ms Signale mitbekommst.
Außerdem wirst du so Probleme mit dem Quittieren am OP haben.

Hast du Vergleich als Stichwort im Simatic manger gesucht?
Dann würdest du wissen, dass das ein DoppelIntvergleich auf ungleich ist.

Warum willst du nicht suchen und nachlesen?
Die Stichworte hast du doch.

bike
 
Zurück
Oben