Wert wird Variable nur mit Breakpoint zugewiesen

flyingchris

New member
Beiträge
2
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,

ich verzweifel gerade an einem Demoprojekt von einem Servomotorhersteller (LinMot). Codesys läuft auf einem RPi und über einen ErtherCAT Feldbus wird der Servo gesteuert. Alles klappt problemlos - wenn ich einen Breakpoint an die Stelle setze, an der aus der GVL ein Wert auf eine lokale Variable geschrieben werden soll. Setze ich dort keinen wird der Wert nicht in die lokale Variable geschrieben und das Programm kennt den Zustand des Servos nicht mehr -> bleibt stecken.

Hier mal das Code Snippet:

CoDeSys Capture.JPG

Wenn ich in Zeile 30 einen Breakpoint setze wird nicht nur uiState korrekt gesetzt, sondern auch alle nachfolgenden Zuweisungen. Ohne Breakpoint allerdings nicht. Ich hatte schon versucht davor ein kleines Delay (1-10ms) einzufügen, allerdings ohne Wirkung.
Frage:
Was macht ein Breakpoint genau? Was übersehe ich?

Das Programm ist etwas größer. Wenn ihr einen genaueren Einblick braucht wie das Programm funktioniert verlinke ich mal meinen Post bei Stackoverflow.
 

Frohnius

Well-known member
Beiträge
393
Punkte Reaktionen
129
Ich tippe du überschreibst iwo die GVL... Benutze die Suchfunktion und suche im ganzen Projekt nach deiner GVL...
 
OP
F

flyingchris

New member
Beiträge
2
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
@Frohnius Du hattest Recht. Das Demoprojekt wird nicht mit dem Raspberry Pi als Gerät ausgeliefert. Portiert man das Projekt auf den Raspberry Pi können die Werte des Feldbusses direkt auf lokale Variablen gemappt werden. Soweit so gut.
Im Auslieferungszustand wird aber auch über Code auf den Bus geschrieben und davon gelesen. Dadurch werden dann die gemappten Werte überschrieben. Entfernt man in der main diese beiden Zeilen:

LMAxis_1_Axis.DrvToPlc := FC_LM_ReadEC(LMAxis_1_AdrIN); [...] FC_LM_WriteEC(LMAxis_1_AdrOUT, LMAxis_1_Axis.PlcToDrv);

Werden die gemappten Werte nicht mehr überschrieben und das Programm funktioniert wieder.
Eigentlich einfach. Aber mein Gott da muss man auch erst mal drauf kommen....
 
Oben