Sonstiges 840D NCU PLC in Stop durch BCD Wandlungsfehler oder durch Speichermangel?

TEF12

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen, eventuell hat jemand eine Idee?
Steuerung Sinumerik 840D / NCU 573.3 6FC5357-0BB35 / PLC 317-2DP 2AJ10

DMG-Maschine mit automatischen Palettenwechsler, PLC geht sporadisch in Stop, Meldung BCD-Wandlungsfehler.
Sieht so aus als würde in dem Augenblick, wenn der Palettenwechsel vollzogen wurde und die Palettendaten geschrieben werden sollen, die PLC in Stop geht.
Seltsamerweise funktioniert der Palettenwechsel+Umschreiben der Daten im manuellen Wechsel zu 100%.
Daher mein Gedanke eventuell in Automatik zu viel los in der PLC!? Die Speicher der PLC scheinen hoch gefüllt zu sein, siehe Bilder.
Kann die Steuerung damit überhaupt noch zuverlässig arbeiten?
Vielen Dank für Hinweise!
 

Anhänge

  • 20191114_071723.jpg
    20191114_071723.jpg
    230,1 KB · Aufrufe: 33
  • 20191114_070043.jpg
    20191114_070043.jpg
    183,8 KB · Aufrufe: 31
  • 20190506_124115.jpg
    20190506_124115.jpg
    285,7 KB · Aufrufe: 31
  • 20190506_123731.jpg
    20190506_123731.jpg
    339,8 KB · Aufrufe: 30
Meldung BCD-Wandlungsfehler.
Seltsamerweise funktioniert der Palettenwechsel+Umschreiben der Daten im manuellen Wechsel zu 100%.
Daher mein Gedanke eventuell in Automatik zu viel los in der PLC!? Die Speicher der PLC scheinen hoch gefüllt zu sein, siehe Bilder.
Kann die Steuerung damit überhaupt noch zuverlässig arbeiten?
Genau das ist der Grund dafür, dass wir hier im Forum regelmässig die Nase rümpfen, wenn jemand auf der Suche nach einer Möglichkeit ist, z.B. Arrays "dynamisch" anzulegen.
Definitiv ja, die PLC kann auch mit einem randvoll gefüllten Speicher noch zuverlässig und reproduzierbar arbeiten! Eben weil die Einflüsse, die daran rütteln könnten, gar nicht zulässig sind.
Rekursive Aufrufe von ProgrammTeilen, StringLängen oder ArrayGrössen oder DatenPufferKapazitäten z.B. für TelegrammSchnittstellen, die sich erst zur ProgrammLaufzeit ergeben, gibt es nicht.
GarbageCollection im DatenSpeicher gibt es auch nicht - nur im ProgrammSpeicher und dort auch nur durch den Mann am PG ausgelöst und nicht etwa automatisch "bei Bedarf".
Lediglich bedingte Aufrufe von FBs/FCs können zum Überlauf des StackBereichs führen, sind aber vermeidbar und ggfs vorab testbar, so dass man nicht mit unliebsamen Überraschungen leben muss.

BCD-WandlungsFehler sind ein ganz anderes Thema.
Wird in eine BCD-Zahl gewandelt, so kann die zu wandelnde DualZahl zu gross oder zu klein (= negativ) sein.
Wird eine BCD-Zahl in eine DualZahl gewandelt, so scheitert die Wandlung, wenn sie gar keine BCD-Zahl ist, sondern (nicht zulässige) "PseudoTetraden" enthält.
PseudoTetraden sind diejenigen BitKombinationen, die in der HexDarstellung als Buchstaben (A..F) angezeigt werden.
Der Hinweis von Onkel Dagobert ist gut, weil leicht vergessen wird, dass S5-Timer mit BCD-Zahlen ('0000' .. '3999' aber >= '4000' oder Buchstaben nicht zulässig) "gefüttert" werden.
Einen unmittelbaren Zusammenhang mit der BetriebsArt (Automatik/manuell) kann ich mir nicht vorstellen, wohl aber einen ProgrammierFehler, der sich BetriebsArten-abhängig bemerkbar macht.
Sporadische auftretende Fehler bei z.B. unterschiedlichen AusführungsZeiten von irgendetwas deuten meist darauf hin, dass sich der Programmierer auf einen zufällig korrekten zeitlichen Ablauf von irgendwelchen Signalen verlassen hat, statt z.B. durch HandshakeSignale einen logisch korrekten Ablauf zu erzwingen.
 
Guten Morgen

Definitiv ja, die PLC kann auch mit einem randvoll gefüllten Speicher noch zuverlässig und reproduzierbar arbeiten! Eben weil die Einflüsse, die daran rütteln könnten, gar nicht zulässig sind.

Das ist gut zu wissen und beruhigend.

Der Hinweis von Onkel Dagobert ist gut, weil leicht vergessen wird, dass S5-Timer mit BCD-Zahlen ('0000' .. '3999' aber >= '4000' oder Buchstaben nicht zulässig) "gefüttert" werden.

Werde mich als erstes morgen auf die Suche nach einen S5-Timer im FB187 machen. Mal schauen ob ich mir, wenn denn vorhanden, den Timerwert anzeigen lassen kann.

... dass sich der Programmierer auf einen zufällig korrekten zeitlichen Ablauf von irgendwelchen Signalen verlassen hat, statt z.B. durch HandshakeSignale einen logisch korrekten Ablauf zu erzwingen.

Ich habe es gottseidank nicht verbrochen ...
Als Elektriker in der Instandhaltung, mit moderaten Programmierkennntnissen, bekomme ich leider dann und wann mal so ein Problem aufgedrückt.
Die Maschinen kommen ja so wie sie sind, oft auch ohne S7-Projekt weil wohl geheim, also auch ohne Kommentare.
Jeder Hersteller (Programmierer) scheint wohl seine eigene "Programmiertaktik" zu haben, da wird mir schwindelig.
Ok, habe jetzt aber auch kein Step 7 studiert ;)

Danke für die Info!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
.. Werde mich als erstes morgen auf die Suche nach einen S5-Timer im FB187 machen. ..
Wenn du im Diagnose-Fenster auf "Baustein öffnen" klickst, dürfte das die Suche stark vereinfachen. Step7 öffnet den Baustein und springt zur Fehlerstelle. In meiner Step7-Version nennt sich die Schaltfläche "Gehe zu". An den S5-Timer hatte ich gedacht, da es mir kürzlich selbst einmal passiert war. Ich hatte bei einer Inbetriebnahme kurzerhand mal schnell einen S5-Timer eingefügt und diesen versehentlich mit einer "Time" versorgt, anstatt mit einer "S5-Time".


Arbeitsspeicher 99% normal? ..
"Ungünstig" wäre hierfür ein passender Begriff. Falls du Änderungen an dem Programm vornehmen musst, so wirst du den geänderten Baustein vermutlich nicht in die Steuerung laden können, da übergangsweise der alte und der neue Baustein im Arbeitsspeicher Platz finden müssen. Du musst dann den Online-Baustein zunächst löschen. Erst dann wird der Platz für die Änderungen frei. Die Steuerung geht dabei auf Stopp, so fern der betroffene Baustein bearbeitet wird.


 
Zuletzt bearbeitet:
Ich hatte vor Jahren mal ein ähnliches Problem mit einem mech. BCD-codierten Schalter. Dort konnte man mit einem Rädchen den Zahlenwert ändern. Der Wert kam über 8 oder 12 Bit direkt auf eine Eingangskarte, ein BCD-Wandler im SPS-Programm machte aus den Eingängen eine INT. Wenn man nun an diesem Schalter drehte, kam es sporadisch vor, dass ein ungültiger BCD-Code (ganz kurz beim Umschalten) erzeugt wurde. Siehe dazu Post 4 von Heinileini. Es wurde also eine kurze Wartezeit eingebaut. Erst wenn sich der Wert am Eingang 100-200ms nicht ändert, wird er gewandelt. Damit war das Problem behoben.
Bei deiner Beschreibung hatte ich das igendwie gleich vor Augen, denn im Handbetrieb beim Test, ändert sich vielleicht die Nummer nicht, im Automatikbetrieb aber schon.
 
Nur ein Update:
Ein Techniker von Siemens war kurz vor Ort. Leider ist während seiner Anwesenheit der Fehler natürlich nicht aufgetreten.
Ein paar seiner Verdächtigen werden wohl in einem neuen DB180 geschrieben, den Rest schaut er sich in seiner Firma an.
Er kommt die Tage nochmal.
Heute hab ich mal kurz (ohne anstehenden Fehler) in den FB187 geschaut, siehe Bild. Sorry, ist zu hoch für mich, hoffe das
der Siemens-Mensch uns schnell wieder besucht.
Danke an alle Schreiber :)
 

Anhänge

  • 20191121_072413_resized_1.jpg
    20191121_072413_resized_1.jpg
    387,5 KB · Aufrufe: 28
Warum wird eigentlich der Ersteller des PLC Programms nicht befragt ? oder dazu verpflichtet den Fehler zu beseitigen ?
Immerhin besteht dann die Gefahr, dass demnächst hier im Forum der gleiche Thread ein zweites Mal erscheint, diesmal eingestellt vom Ersteller. Wollen wir das denn wirklich? :ROFLMAO:

Oft hat man die Ursache eines Fehlverhaltens schneller gefunden, als den Verursacher. Ob der Verursacher sich verantwortlich fühlt und dann die Ursache schneller findet und dann auch noch ebenso korrekt (oder noch korrekter?) beseitigt ... na ja, da hat wohl jeder hier im Forum schon seine Erfahrungen gesammelt. ;)

Das Bild in #8 zeigt u.a. die AWL-Anweisung ITB und hat mich veranlasst, die Anweisungen
ITB (INT to BCD)
BTI (BCD to INT)
DTB (DINT to BCD)
BTD (BCD to DINT)
nachzulesen. Ich hatte leider in #4 behauptet, negative Zahlen seien nicht zulässig.
Bei den o.g. Anweisungen ist das nicht so. Bei INT (Befehle ITB und BTI) ist der zulässige WerteBereich ±999 und bei DINT (Befehle DTB und BTD) ±9999999.
Die höchstwertige Tetrade enthält in der BCD-Form 0hex als positives Vorzeichen und Fhex als negatives Vorzeichen, wenn mit den Befehlen ITB oder DTB in BCD gewandelt wurde.
Aber bei der Wandlung von BCD in Dual werten die Befehle BTI und BTD nur das höchstwertige Bit aus, nicht die komplette höchstwertige Tetrade.
D.h. bei Umwandlung aus BCD akzeptieren die Befehle BTI und BTD die HexadezimalWerte 8 .. F in der höchstwertigen Tetrade gleichermassen als negatives Vorzeichen und die Werte 0 .. 7 als positives Vorzeichen.
Die "nutzlosen" weil "verbotenen" Pseudotetraden im BCD-Code verleiten oft dazu, sie mit Bedeutungen zu belegen, die strenggenommen nichts mit BCD-Code zu tun haben.
Siehe Vorzeichen bei den vier o.g. Befehlen.

Aber es kommt noch schlimmer. Spätestens, wenn die BCD-Zahlen aus "nicht-Siemens-Systemen" angeliefert werden, muss man damit rechnen, dass ...
- die PseudoTetraden noch mit weiteren Bedeutungen als '+' oder '-' belegt sein können,
- die PseudoTetraden nicht nur in der höchstwertigen Tetrade auftreten können (sondern z.B. als DezimalKomma oder TrennZeichen mitten zwischen den Ziffern),
- die Vorzeichen '+' und '-' durch andere Werte dargestellt werden, als oben bei den Siemens-AWL-Anweisungen beschrieben!
Addiert bzw. odert man zu einer PseudoTetrade 32dez alias 20hex hinzu und interpretiert das Ergebnis als ASCII-Code, so sieht man eine gängige Interpretation der PseudoTetraden:

hex dez .... dez .hex . ASCII
.A: 10 + 32 = 42 = 2A = '*'
.B: 11 + 32 = 43 = 2B = '+'
.C: 12 + 32 = 44 = 2C = ','
.D: 13 + 32 = 45 = 2D = '-'
.E: 14 + 32 = 46 = 2E = '.'
.F: 15 + 32 = 47 = 2F = '/'
oder noch häufiger die Interpretation als "DunkelSteuerung" alias "LeerZeichen":
.F: 15 + 17 = 32 = 20 = ' '

Gruss, Heinileini
 
Zurück
Oben