TIA tempVariable

Xplod13

Level-2
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe Problem mit tempVariable(DINT) welche auf Input für FB geschrieben wird.

tempVariable ist immer 2NW vor NW mit FB initialisiert. (MOVE 0 -> tempVar)

Falls ich Bedienung erfüllt schreibe ich auf tempVar mit S_CONV ein wert. (z.b. 25)

Im mein fall ist Bedienung nicht erfüllt und ich brauche 0 auf FB schreiben.

tempVarieble hat überall wert 0 wenn ich im Online Programm beobachte.

Wenn ich ein Instance Datenbaustein von FB wo wird tempVar auf Input geschrieben öffne sehe ich wert 0.
Wenn ich aber Trace gestartet habe dort sehe ich auf input VariableinProgrammnummerWert 25.

Laut Messystem wo ich Programmnummer schicke wurde auch 25 geschickt.

Danke für eure Hilfe.



Tia Portal V15.1

CPU 1515F-2 Firmware V2.5
 
Magst du deine Beschreibung mal mit dem zugehörigen Programm ausschmücken? Idealerweise lesbare Screenshots während des Online beobachtens?
 
Ich habe Problem mit tempVariable(DINT) welche auf Input für FB geschrieben wird.
Bedeutet das, dass die tempVariable beim Aufruf des FB an einen Eingang verschaltet wurde?

tempVariable ist immer 2NW vor NW mit FB initialisiert. (MOVE 0 -> tempVar)
ok

Falls ich Bedienung erfüllt schreibe ich auf tempVar mit S_CONV ein wert. (z.b. 25)
Passiert das im Netzwerk zwischen der Initialisierung und dem FB-Aufruf?

Im mein fall ist Bedienung nicht erfüllt und ich brauche 0 auf FB schreiben.
ok

tempVarieble hat überall wert 0 wenn ich im Online Programm beobachte.
ok

Wenn ich ein Instance Datenbaustein von FB wo wird tempVar auf Input geschrieben öffne sehe ich wert 0.
ok

Wenn ich aber Trace gestartet habe dort sehe ich auf input VariableinProgrammnummerWert 25.
Was bedeutet "inProgrammnummer"?

Laut Messystem wo ich Programmnummer schicke wurde auch 25 geschickt.
???
Danke für eure Hilfe.



Tia Portal V15.1

CPU 1515F-2 Firmware V2.5
Danke für die Software/Steuerungs-Informationen.

Kannst Du vom Aufruf des FB, der internen Verarbeitung und dem Trace mal Screenshots schicken?

VG

MFreiberger
 
UDP: Ja ich füge die Bilder ein. Erst jetzt habe ich die Möglichkeit. Es ist gestern passiert darum einige Online Bild habe ich von Trace und IDB wenn ich die 2 werte vergleichen wollte.

Da sind noch 2 Bilder von Offline Programm. Es geht um die Variable tempProgrammnummerDINT. Die Variable ist nur 2 mal geschrieben 1Mal als Initialisierung und 2Mal wenn Bedienungen erfüllt sind.
Im mein Fall brauche ich Wert 0 auf Input für FB17. bedienungen sind nicht erfüllt und Wenn es noch online war war überall wart 0. Wert 25 habe ich erst bei Trace gesehen.

Es passiert auch nicht oft. Der Fehler passiert ungefähr 1Mal pro Monat. Jetzt läuft alles wieder gut. Darum ist die Fehlersuche so schwierig für mich.

PN/DP: Sorry mein Englisch ist noch schlechter als Deutsch.
- Mein Problem ist dass statt wert 0 wert 25 über FB17 geschickt wurde.
- Kommunikation ist über Profinet -> Keyence XG-X2000 Series
- Es gibt kein ersichtliches Grund warum 25 statt 0 geschickt wurde. Ich vermute dass 25 war letztes mal drauf wenn Bedienung erfüllt war.
- beim Fehlersuche habe ich überall gesehen dass wert 0 drinnen steht. Außer Trace im Trace ist sichtbar dass wert 25 dort steht. und war kurzzeitig auch 0 und wieder 25. Anlage ist im der zeit gestanden. Kein Wert Änderung durch Programm möglich.

MFreiberger:
Bedeutet das, dass die tempVariable beim Aufruf des FB an einen Eingang verschaltet wurde?
Ja, auf Eingang "inProgrammnummer"
Passiert das im Netzwerk zwischen der Initialisierung und dem FB-Aufruf?
Ja, im Screenshoot.
Was bedeutet "inProgrammnummer"?
Eingangsvariable für FB17
Fehler wurde durch Messsystem Keyence XG-X2000 erkannt. Messsystem erwartet Wert 0 hat aber 25 bekommen.
 

Anhänge

  • 20220504_125123.jpg
    20220504_125123.jpg
    2,3 MB · Aufrufe: 53
  • FB.PNG
    FB.PNG
    47,9 KB · Aufrufe: 57
  • Initialisierung.PNG
    Initialisierung.PNG
    22,2 KB · Aufrufe: 57
Zuviel Werbung?
-> Hier kostenlos registrieren
Na, dann würde ich mal tracen, wann
"MessstationDB".AktuellerPlatzDrehtellerGueltig
und
"MessstationDB".Platzdaten["MessstationDB".AktuellerPlatzindesDrehtellerInMessstaion].Arbeitsdaten.Belegt
gleichzeitig anstehen.

Wird im Baustein "MessstationMesssystem" die Variable irgendwo (fälschlicherweise, da Input) geschrieben?

VG

MFreiberger
 
INPUT-Variablen von FB-Instanzen behalten ihren zuletzt zugewiesenen Wert. Das heißt, wenn ihnen nichts zugewiesen wird, dann steht da der zuletzt zugewiesene Wert drin.

Harald
 
INPUT-Variablen von FB-Instanzen behalten ihren zuletzt zugewiesenen Wert. Das heißt, wenn ihnen nichts zugewiesen wird, dann steht da der zuletzt zugewiesene Wert drin.

Harald
Aber laut des Screenshots "Initialisierung.PNG" sollte eigentlich immer eine 0 geschrieben werden. Wenn die Bedingung erfüllt ist, die Programmnummer.
Eigentlich wird die Variable "tempProgramnummerDint" ja zyklisch beschrieben und damit der INPUT auch. Oder habe ich etwas übersehen?

Mario
 
Zuviel Werbung?
-> Hier kostenlos registrieren
MFreiberger:
Ja, das war auch mal eine Empfehlung von Kollegen. Problem ist das ich nicht weiß wann das wieder auftaucht. Kann erst um 3Monaten wieder auftauchen. Habe ich auch ein Trigger für Trace programmiert wenn ich was anderes als 0 an die variable inProgrammnummer bei dieser fall schicke. Trigger hat nicht gestartet.

Nein, wird nicht in FB17 die Variable geschrieben. Ist nur 1Mal zum Lesen verwenden.

PN/DP:
Es ist laut Programm immer Eingang beschrieben.
 
Wird die Variable (oder die interne vom FB) vielleicht irgendwo anders noch beschrieben?

Wird NW13 immer aufgerufen oder wird vielleicht durch Sprünge das Netzwerk manchmal nicht aufgerufen?

Wird der FB mehrfach aufgerufen? Wenn ja, für jeden FB eigene IDBs verwendet?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eigentlich wird die Variable "tempProgramnummerDint" ja zyklisch beschrieben und damit der INPUT auch.
Ich hatte mir die Bilder nicht genau angeschaut und irgendwie aus der Textbeschreibung interpretiert, daß evtl. manchmal nichts zugewiesen wird.

Könnte es sein, daß der String mit der Programmnummer manchmal fehlerhaft oder (noch) nicht komplett ist und deshalb der S_CONV nichts oder eine 0 an #tempProgramnummerDint zuweist? Das wird ja nicht abgefangen. Ich würde das Programmnummer-Konvertieren in einem extra Programmzweig programmieren (besser beobachtbar) und in dem Netzwerk 13 nur die bedingte Zuweisung machen.

Harald
 
Müsste doch der gleiche Trigger sein, wie für den INPUT-Wert. Und den hast Du ja offensichtlich in einem Trace aufgezeichnet :unsure:
Meinst dass wenn Input-Wert ist 0 dann Trigger=True? Das hilft nicht weil es kann Wert 0 so wie auch Wert 25 10000Mal dort geschrieben und es wird funktioniert. Und dann irgendwann weiß ich nicht warum nicht. Wenn so was passiert kann ich natürlich Trace starten so wie gestern. Ich werde ich nicht wissen wie die Werte von der Fehler waren.

UDP:
Nein, das habe ich und Kollegen mehrmals nachkontrolliert und die Variable wird nicht irgendwo anders beschrieben.

NW13 wird immer aufgerufen. im Programm habe ich keine Spring befehle.
 
Meinst dass wenn Input-Wert ist 0 dann Trigger=True? Das hilft nicht weil es kann Wert 0 so wie auch Wert 25 10000Mal dort geschrieben und es wird funktioniert. Und dann irgendwann weiß ich nicht warum nicht. Wenn so was passiert kann ich natürlich Trace starten so wie gestern. Ich werde ich nicht wissen wie die Werte von der Fehler waren.
Ich meine, Du hast ja einen Trace davon, wann und wie die INPUT-Variable den Wert ändert. Wieso nicht einfach die beiden Bits mit reinnehmen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kannst du mal bitte Screenshots von den Querverweißlisten von tempString, tempProgrammnummerDINT, FB17 und dem IDB "Messsystem" machen?

In welchem Baustein wird der FB17 aufgerufen? In einem FB? Weil der IDB aussieht, als ob es kein eigener Instanz-DB ist, sondern als Struktur im aufrufenden Baustein. Das kann nur funktionieren, wenn der aufrufende Baustein ein FB ist und kein FC und die Struktur dann im Stat Bereich liegt und nicht mehrfach verwendet wird. Oder ich verschaue mich grade auf dem Bild und es ist ein eigener IDB.

/edit: Im Screenshot mit dem Trace beobachtest du MessstatioIDB (DB52) aber im Programm heißt der IDB am FB 17 nur Messystem. Sicher das hier auf die gleiche Variable geschaut wird? Vom Namen her sind es verschiedene Objekte.
 
Könnte es sein, daß der String mit der Programmnummer manchmal fehlerhaft oder (noch) nicht komplett ist und deshalb der S_CONV nichts oder eine 0 an #tempProgramnummerDint zuweist? Das wird ja nicht abgefangen. Ich würde das Programmnummer-Konvertieren in einem extra Programmzweig programmieren (besser beobachtbar) und in dem Netzwerk 13 nur die bedingte Zuweisung machen.

Harald
Ja das ist möglich aber bis jetzt habe nicht gesehen dass String Fehlerhaft ist. Ist immer K01 - K42. Falls es fehlerhaft ist, kriege Probleme schon früher im die Anlage. Trotzdem bei dieser fall ist Bedienung "MessstationDB".Platzdaten["MessstationDB".AktuellerPlatzindesDrehtellerInMessstaion].Arbeitsdaten.Belegt nicht erfüllt und zu s_CONV kommt Programm gar nicht.

D.h.: Im neue Netzwert zb. NW12 Konvertierung Programmieren und im NW13 nur bedingte Zuweisung machen?

Ich meine, Du hast ja einen Trace davon, wann und wie die INPUT-Variable den Wert ändert. Wieso nicht einfach die beiden Bits mit reinnehmen?
Aha, ja das ist kein Problem die 2 Variablen in Trace hinzufügen. Aber was passiert vor die Fehler sehe ich nicht erst wenn ich Trace starte.

Kannst du mal bitte Screenshots von den Querverweißlisten von tempString, tempProgrammnummerDINT, FB17 und dem IDB "Messsystem" machen?

In welchem Baustein wird der FB17 aufgerufen? In einem FB? Weil der IDB aussieht, als ob es kein eigener Instanz-DB ist, sondern als Struktur im aufrufenden Baustein. Das kann nur funktionieren, wenn der aufrufende Baustein ein FB ist und kein FC und die Struktur dann im Stat Bereich liegt und nicht mehrfach verwendet wird. Oder ich verschaue mich grade auf dem Bild und es ist ein eigener IDB.

/edit: Im Screenshot mit dem Trace beobachtest du MessstatioIDB (DB52) aber im Programm heißt der IDB am FB 17 nur Messystem. Sicher das hier auf die gleiche Variable geschaut wird? Vom Namen her sind es verschiedene Objekte.
Anbei Screens.
FB17 ist im FB35 aufgerufen und FB35 im OB1
MesssystemInstance(FB17) ist Multiinstance was sich im MessstationIDB(FB35) befindet.
Ja das ist richtig: In MessstationIDB(FB35) ist im Statischen Bereich Multiinstance MesssystemInstance(FB17) und input inProgrammnummer.
 

Anhänge

  • FB17.PNG
    FB17.PNG
    44,7 KB · Aufrufe: 10
  • Instance.PNG
    Instance.PNG
    10,2 KB · Aufrufe: 9
  • tempProgrammnummerDINT.PNG
    tempProgrammnummerDINT.PNG
    18,6 KB · Aufrufe: 10
  • tempString.PNG
    tempString.PNG
    11,3 KB · Aufrufe: 10
Aha, ja das ist kein Problem die 2 Variablen in Trace hinzufügen. Aber was passiert vor die Fehler sehe ich nicht erst wenn ich Trace starte.
Aber dann weißt Du schon einmal, ab der INPUT-Wert korrekt ist (d.h. die Bedinungen erfüllt waren).
Wenn die Bedingungen zum falschen Zeitpunkt erfüllt sind, weißt Du dann aber, dass Du die Bedingungen untersuchen musst und brauchst nicht weiter nach einem Fehler des INPUT-Wertes zu suchen, der wahrscheinlich gar nicht besteht.

Mario
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber dann weißt Du schon einmal, ab der INPUT-Wert korrekt ist (d.h. die Bedinungen erfüllt waren).
Wenn die Bedingungen zum falschen Zeitpunkt erfüllt sind, weißt Du dann aber, dass Du die Bedingungen untersuchen musst und brauchst nicht weiter nach einem Fehler des INPUT-Wertes zu suchen, der wahrscheinlich gar nicht besteht.

Mario
Ja hast du recht, aber auch wenn die 2 Bedienungen erfüllt sind, wird dort trotzdem K00 konvertiert was im Effekt nur Wert 0 ist. Es muss doch was anderes sein.
 
Ich kann das hier gerade nicht wirklich herauslesen : es geht ja, soweit ich das verstanden habe, um den TempString ...?
Ist dieser vor seiner ersten Verwendung initialisiert worden ? Also ihm ein fester Wert (Leerstring) zugewiesen worden ?
Mit einer un-initialisierten Variablen kann RIGHT nicht so ganz viel anfangen ...
 
Ich kann das hier gerade nicht wirklich herauslesen : es geht ja, soweit ich das verstanden habe, um den TempString ...?
Ist dieser vor seiner ersten Verwendung initialisiert worden ? Also ihm ein fester Wert (Leerstring) zugewiesen worden ?
Mit einer un-initialisierten Variablen kann RIGHT nicht so ganz viel anfangen ...
Es geht um tempProgrammnummerDINT aber ja tempString ist auch Bestandteil der Funktion.
Nein, tempString ist nicht vor ersten Verwendung initialisiert. Ich gehe davon auf dass alle Temp Variablen bei Zyklus Anfang initialisiert sind.
Jetzt die Anlage und Programm funktioniert so wie oben im Screenshots ist. Ohne initialisierten tempString.
Wenn der Fehler auftaucht ist Bedienung vor RIGHT nicht erfüllt und RIGHT ist aus.
 
Zurück
Oben