Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Regelung über eine virtuelle Achse

Jimbo200
2017-04-10
2017-09-15
  • Jimbo200 - 2017-04-10

    Hallo,
    ich betreibe einen Schrittmotor mit einer Nanotec SMCI36 Motorsteuerung, die ich in Codesys über eine CANopen Verbindung als SMCI47S eingebunden habe.
    Der Roboterarm, den ich damit bewegen möchte, verfügt über einen Encoder, dessen Auflösung jedoch nicht mit der SMCI36 Motorsteuerung kompatibel ist, weswegen ich die Regelung der Achse über eine virtuelle Achse mit dem Encoder des Roboterarms durchführen möchte. Laut dem Handbuch scheint SM_Drive_PosControl hierfür gut geeignet zu sein. Leider wird mir anhand des Beispiels nicht klar, wie dies über CANopen zu realisieren ist. Hätte jemand eine Idee, wie ich mein Vorhaben realisieren kann?

    Danke schon mal im Voraus

     
  • Jimbo200 - 2017-04-12

    Hallo,
    ich habe das Mapping wie im Bild zu sehen vorgenommen. Durch das Mapping von "Application.DriveA1V.in.dwActPosition" auf "Position actual value" wird der Istwert in der virtuellen Achse übernommen. Leider führt der Motor durch das Mapping von "Application.DriveA1V.out.iSetVelocity" auf "vl target velocity" keine Bewegung aus, wenn ich der virtuellen Achse mit MC_MoveAbsolute eine Position vor gebe. Nur wenn ich mit SMC_FollowVelocity die variable fSetVelocity der virtuellen Achse (DriveA1V) auf die reale Achse (DriveA1) gebe wird der Motor in Bewegung gesetzt.
    Des weiteren wird die Position nicht richtig geregelt. Es scheint als ob die virtuelle Achse unabhängig von dem empfangenen Istwert den Sollwert auf die vorgegebene Position bringen möchte. Hab ich vielleicht die Funktionsweise von SM_Drive_PosControl falsch verstanden oder ist meine Vorgehensweise nicht korrekt?

    IMG: Bild1.png

     
  • eschwellinger

    eschwellinger - 2017-09-15

    Hallo,

    sorry das ich jetzt erst Antworte,
    bei der SoftMotion musst das Mapping nicht von Hand machen, sondern das passiert alles in den SM Treibern.
    Wenn du die reale Achse koppel willst mit einer virtuellen gibt's mehrere Möglichkeiten:
    1. MC_GearIn 1:1koppeln (Echte Achse mit virtueller)
    2.Logical Achse unterhalb der SoftMotion Achse anhängen.
    Die kann z.B dann statt rotatorisch wie die original Achse - > lineaxr skaliert sein usw..

    Grüße
    Edwin

    IMG: AddLogicalAxis.jpg

    IMG: Logical.jpg

     

Log in to post a comment.