Hallo Zusammen,
ich stehe gerade vor einem Problem, bei dem ich nicht weiter komme: Ich möchte von $pos_act die X-, Y- und Z-Werte per Ethercat übertragen. Die Signale/Variablen sind soweit angelegt und funktionieren auch, jedoch schaffe ich es nicht die Werte zu zuordnen. Ich versuche in der sps.sub die Werte den Variablen per PositionX = $pos_act.x zu zuweisen, das sorgt aber nur dafür, dass der Submitinterpreter abschmiert.
Habt Ihr evtl. eine Lösung dazu?
Aktuelle Position an Ausgang übertragen
- Bastico
- Erledigt
-
-
zyklische Signale/Variablen wie z.B $pos_act werden im sps.sub nicht zyklisch ausgewertet
-
hättest Du eine Idee, wie ich das realisieren könnte?
-
versuch es mal im config.dat
-
Hab meinen Fehler gefunden: $pos_act wird scheinbar erst beschrieben, wenn eine SAK-Fahrt gemacht wurde. Bis dahin meckert der Submitinterperter dann. Jetzt werden die Variablen erst zugewiesen, wenn die SAK-Fahrt gemacht wurde und alles läuft.
-
Hallo
Dein eigentliches Problem hat wahrscheinlich nichts mit der SAK-Fahrt zu tun, sondern, dass $BASE und $TOOL noch ungültig sind und damit auch $POS_ACT. Daher würde ich im Submit immer auf Gültigkeit (siehe VARSTATE Funktion) der beiden prüfen.
Fubini
-
IF ( ($ACT_TOOL>=0) AND ($ACT_BASE>=0)) THEN
ACT_POSITION = $POS_ACT
; XXXX
IF( (ACT_POSITION.x <= XXXXXXX.x + 20) AND (ACT_POSITION.x >= XXXXXXX.x - 20) ) ) THEN
$OUT[137] = TRUE
ELSE
$OUT[137] = FALSE
ENDIF -
Also wenn Du $POS_ACT.x/.y/.z auf eine Signalvereinbarung schreibst, dann hast Du immer das Problem, dass die Signalvereinbarungen immer vom Typ Unsigned (Byte/Word/DWord) sind.
Ich mach das meistens soJetzt musst Du den Positionswert in den Wertebereich schieben. Am besten indem Du
CodeINT POSX_INT ;$POS_ACT nur lesen, wenn die Werte auch Initialisiert (ALSO $TOOL und $BASE nicht ? sind) IF(VARSTATE("POS_ACT.X") == #INITIALIZED) THEN POSX_INT = $POS_ACT.X *10 ENDIF
65535 entsprechen dann also 6553.5mm was eigentlich genügen sollte. Eine Nachkommastelle sollte auch reichen
Damit Du keinen Überlauf durch negative Positionswerte verursachst, muss Du dann noch einen Offset von 32767 (=Wertebereich bei Signed Word) dazugebenUnd dann wenn alles passt auf das Signal schreiben
Auf der SPS muss Du dann das Signal mit einem Offset von -32767 versehen und danach noch durch 10 dividieren und das war's auch schon.
Im Beispiel hab ich das nur mit X gemacht. Für die anderen Koordinaten musst Du das natürlich auch programmieren.
Es kann gut sein, dass ich im Code irgendwas vergessen habe, da ich das gerade aus dem Kopf zusammengeschrieben hab.
Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren
Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen