TIA V14 SP1 - Crash beim Übersetzen von folgendem Code

-ASDF-

Level-1
Beiträge
235
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum,

Wie der Titel schon aussagt, stürzt mein TIA-Portal immer ab, wenn ich einen FB mit folgendem Code übersetzen will.

Code:
    Static                                    
    TONs    Array[0..800] of TON_TIME           
    byte    Int    0       
    bit    Int    0     

FOR #byte := 0 TO 99 BY 1 DO
    FOR #bit := 0 TO 7 BY 1 DO
        #TONs[#byte * 8 + #bit](IN := PEEK_BOOL(area := 16#82, dbNumber := 0, byteOffset := #byte, bitOffset := #bit),
                                PT := t#5s);
        
        POKE_BOOL(area := 16#81,
                  dbNumber := 0,
                  byteOffset := #byte,
                  bitOffset := #bit,
                  value := #TONs[#byte * 8 + #bit].Q);
    END_FOR;
END_FOR;

Es liegt an folgendem Codeteil:
Code:
        #TONs[COLOR=#ff0000][SIZE=3][B][#byte * 8 + #bit][/B][/SIZE][/COLOR](IN := PEEK_BOOL(area := 16#82, dbNumber := 0, byteOffset := #byte, bitOffset := #bit),
                                PT := t#5s);

Ist das schon bekannt?
 
Achja, die Lösung ist das Array mit mehr Dimensionen zu deklarieren:

Code:
	TONs	Array[0..100, 0..7] of TON_TIME			
	byte	Int	0		
	bit	Int	0	


FOR #byte := 0 TO 99 BY 1 DO
    FOR #bit := 0 TO 7 BY 1 DO
        #TONs[#byte,#bit](IN := PEEK_BOOL(area := 16#82, dbNumber := 0, byteOffset := #byte, bitOffset := #bit),
                                PT := t#5s);
        POKE_BOOL(area := 16#81,
                  dbNumber := 0,
                  byteOffset := #byte,
                  bitOffset := #bit,
                  value := #TONs[#byte,#bit].Q);
    END_FOR;
END_FOR;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielleicht war den Grund das du ein Variabel "byte" deklariert hast, und "byte" ist ein reservierter Name. Und vielleicht wurde das nie getestet von die TIA programmierer.
Obwohl, du hast ja auch "byte" in den fungierende code ??
 
Moin,
Code:
        #TONs[COLOR=#ff0000][SIZE=3][B][#byte * 8 + #bit][/B][/SIZE][/COLOR](IN := PEEK_BOOL(area := 16#82, dbNumber := 0, byteOffset := #byte, bitOffset := #bit),
                                PT := t#5s);
Hattest du mal versucht das zu klammern?

Code:
        #TONs[COLOR=#ff0000][SIZE=3][B][(#byte * 8) + #bit][/B][/SIZE][/COLOR](IN := PEEK_BOOL(area := 16#82, dbNumber := 0, byteOffset := #byte, bitOffset := #bit),
                                PT := t#5s);

oder gar:
Code:
        #TONs[COLOR=#ff0000][SIZE=3][B][((#byte * 8) + #bit)][/B][/SIZE][/COLOR](IN := PEEK_BOOL(area := 16#82, dbNumber := 0, byteOffset := #byte, bitOffset := #bit),
                                PT := t#5s);
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
Code:
        #TONs[COLOR=#ff0000][SIZE=3][B][#byte * 8 + #bit][/B][/SIZE][/COLOR](IN := PEEK_BOOL(area := 16#82, dbNumber := 0, byteOffset := #byte, bitOffset := #bit),
                                PT := t#5s);
Hattest du mal versucht das zu klammern?

Code:
        #TONs[COLOR=#ff0000][SIZE=3][B][(#byte * 8) + #bit][/B][/SIZE][/COLOR](IN := PEEK_BOOL(area := 16#82, dbNumber := 0, byteOffset := #byte, bitOffset := #bit),
                                PT := t#5s);

oder gar:
Code:
        #TONs[COLOR=#ff0000][SIZE=3][B][((#byte * 8) + #bit)][/B][/SIZE][/COLOR](IN := PEEK_BOOL(area := 16#82, dbNumber := 0, byteOffset := #byte, bitOffset := #bit),
                                PT := t#5s);


Die Klammern hatte ich auch versucht, hatte aber nichts geändert.
 
Mit einer Hilfsvariable funktioniert es auch.
#hm := #byte * 8 + #bit;
#TONs[#hm] (....

Absturz passiert auch nur wenn das ein Array mit Funktionsbausteinen ist.

Am besten den Report an Siemens schicken damit sie das beheben.
Das dreiste von Siemens ist ja, dass die eine auftretende Exception (die hier vom Siemens Programm explizit generiert wurde, das kann man im Stacktrace sehen) beim Übersetzen einfach unbehandelt lassen und das Programm bewusst abstürzen lassen anstatt diese abzufangen, sodass wenigstens das Projekt und ggf. ungespeicherte Daten erhalten bleiben. Wahrscheinlich erhoffen sie sich dadurch entsprechende Fehlerberichte zu erhalten was sie beim Abfangen wohl nicht bekämen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du bist aber optimistisch :p

Ich meine jetzt nicht nur das Logfile vom Absturz schicken, sondern über den Support einen Fall aufmachen mit Codebeispiel usw. Solche Bugs werden laut meiner Erfahrung bisher von Siemens immer behoben, und wenn es in V15 SP1 ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Einen ganzen Schwung von Eingangssignalen um 5 Sekunden verzögern
Könnte sein, daß der TE sowas ähnliches machen wollte, allerdings macht der Code das nicht. Dazu hätte er bei "PEEK_BOOL(area := 16#81" schreiben müssen - ist das ein Fehler im Code oder absichtlich?? Für mich hat der Code so nicht mehr Sinn als eine Programmierübung, um auszuprobieren, wie man mit möglichst wenig Schreibarbeit möglichst undurchsichtigen Code erzeugen kann ;)

Harald
 
Darf ich trotzdem fragen was man mit dem abenteuerlichen Code machen kann?

Mit dem Code simuliere ich verzögerte Eingangsbits anhand von den entsprechenden Ausgangsbits.
Wenn A0.0 = True wird 5 sek. verzögert E0.0 = True, Simuliert werden damit einfache Rückmeldungen von meinen Aktoren.
 
Zuletzt bearbeitet:
Könnte sein, daß der TE sowas ähnliches machen wollte, allerdings macht der Code das nicht. Dazu hätte er bei "PEEK_BOOL(area := 16#81" schreiben müssen - ist das ein Fehler im Code oder absichtlich?? Für mich hat der Code so nicht mehr Sinn als eine Programmierübung, um auszuprobieren, wie man mit möglichst wenig Schreibarbeit möglichst undurchsichtigen Code erzeugen kann ;)

Harald

"PEEK_BOOL(area := 16#81" damit werden die Ausgangsbits gelesen (also in meinem Code mit 16#82)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich meine jetzt nicht nur das Logfile vom Absturz schicken, sondern über den Support einen Fall aufmachen mit Codebeispiel usw. Solche Bugs werden laut meiner Erfahrung bisher von Siemens immer behoben, und wenn es in V15 SP1 ist.

Alles klar. Das werde ich die Tage dann wohl tun!
 
Zurück
Oben