Kinematik Datei - Berechnung für B-Achse hinzufügen

More
18 Mar 2023 10:36 #266979 by zinsade
Hallo in das Forum
In den Kinematik-Dateien werden doch die Berechnungen der Achsen zueinander durchgeführt.
An welcher Stelle kann man der B-Achse eine Formel bzw. eine Berechnung mit auf den Weg geben?

Info zur Maschine:
Mein Antrieb der B-Achse ist ein Kugel-Gewinde-Linearantrieb mit einer Closed-Loop-Stepper Kombi Nema34/HSS86.
Die Drehbewegung wird über einen Kurbeltrieb bzw. Kurbelschwinge realisiert.
Meine Maschine ist ein 6-Achsen Eigenbau Fahrständer.
Sie hat eine 5-Achsen XYZBC- und eine 4-Achsen XYZA Kinematik.
Die A-Achse ist auf der Linken Seite auf dem Starrtisch aufgebaut.
Die B-Achse ist als Schwenktisch auf der rechten Seite neben dem Starrtisch montiert mit der C-Achse darauf.
Verfahrwege:
X 0 bis -802mm
Y 0 bis -394mm
Z 0 bis -394mm
A +-360 Grad unendlich
B 2 bis -92Grad
C +-360 Grad unendlich

Die Antriebe werden über eine 5i25 mit zwei 7i76 gesteuert.
Ich benutze momentan die Version 2.8.4 auf Buster mit Axis-Gui.
Es soll aber nun bald auf die Version 2.9 gehen.

Nach langem Suchen habe ich diesen Thread gefunden:
forum.linuxcnc.org/24-hal-components/290...d-kinematics?start=0
Dort wird die Datei "trivkins.c" verändert und der Z-Achse eine Korrektur mit gegeben.
Die Datei wurde dort in "kk1000skins.c" umbenannt.
Nun sehen in V2.9 die "trivkins" und auch die Anderen wie z.B. die "xyzbc-trt-kins.c" etwas anders aus.
Wahrscheinlich wegen der "Switchkins" Umstellung?.

Nun habe ich nicht wirklich eine Ahnung von Programmieren in C.
Jedoch würde ich mich da gern etwas einarbeiten wollen um das Problem zu lösen.

Meine Vermutung ist, das es diese Datei ist:
V2.9  >linuxcnc-master/src/emc/kinematics/trtfuncs.c<
Oder in welcher Datei und an welcher Stelle muss ich da was ändern oder hinzufügen?

Anbei mal zum Verständnis die Geogebradatei mit Bild und Foto vom Schwenktisch.

Man sieht am Drehpunkt der Achse meinen Versuch das Problem über einen Drehencoder und PID zu lösen, was eigentlich das Beste wäre.
Alle meine Versuche ergaben kein befriedigentes Ergebnis. Die Achse zitterte gewaltig und war nicht ruhig zu bekommen.
Einzig mit sehr geringen P-Werten war sie ruhig, aber unbrauchbar langsam. Da möchte ich jedoch parallel noch weiter experimentieren.
Deshalb nun der Versuch das über die Kinematikdatei lösen zu wollen. 

MfG
Peter
Attachments:

Please Log in or Create an account to join the conversation.

More
18 Mar 2023 11:22 - 18 Mar 2023 11:22 #266981 by Aciera
Für eigene Kinematikmodelle würde ich eine bestehende Kinemaikkomponente wie 'millturn.comp' oder 'xyzab_tdr_kins.comp' im Ordner '/home/user/linuxcnc-dev-march/src/hal/components' anschauen. Diese basieren auf der 'userkins.comp' Vorlage (ebenfalls im gleichen Ordner zu finden.) Vorteil ist, dass du fast keine C-programmierkenntnisse benötigst und die Komponente mit 'halcompile' installiert werden kann.

Hier ist die Dokumentation zur xyzab_tdr_kins: forum.linuxcnc.org/10-advanced-configura...mill?start=80#263694
Last edit: 18 Mar 2023 11:22 by Aciera.

Please Log in or Create an account to join the conversation.

More
18 Mar 2023 12:32 #266990 by zinsade
Vielen Dank,
Das hatte ich mir schon mal übersetzen lassen und auch angeschaut.
Da habe ich aber das gleiche Problem, weil ich den genauen Ort nicht weiß.
Ich muss ja die Linearbewegung meiner B-Achse (Kugelrollspindel-Weg 275mm) in eine Drehbewegung 90 Grad umrechnen lassen.
An welcher Stelle muss die Formel eingebaut werden?

hier?
pos->b = j[4];
und hier?
j[4] = pos->b;

Hast du da mal ein kleines Beispiel?

Gruß Peter

Please Log in or Create an account to join the conversation.

More
18 Mar 2023 16:03 - 18 Mar 2023 16:06 #267011 by Aciera
Ja, genau.

Die FORWARD Kinematik berechnet den Winkelwert 'pos->b' für einen gegebenen Jointwert 'j[4]'. Stellung der Kugelrollspindel wäre der j[4] Wert.
pos->b = deine_funktion(j[4])

Die INVERSE Kinematik berechnet dann die Stellung der Kugelrollspindel für einen gegebenen Winkelwert.
j[4] = deine_inverse_funktion(pos->b)
 
Last edit: 18 Mar 2023 16:06 by Aciera.

Please Log in or Create an account to join the conversation.

More
18 Mar 2023 18:00 - 18 Mar 2023 18:02 #267018 by zinsade
Ah, super.
Dann werde ich mich da mal versuchen rein zu fuchsen.
Dann ist es ja wahrscheinlich die gleiche Stelle in der >trtfuncs.c<
Vorwärts in Zeile 285 > pos->b = joints[JB]; <
und
Rückwärts in Zeile 332 > P.b = pos->b; <

Das wird allerdings eine Weile dauern.
Leider kommt jetzt erstmal die Gartenarbeit und andere Dinge dazwischen.

Vielen Dank!
Gruß Peter
Last edit: 18 Mar 2023 18:02 by zinsade.

Please Log in or Create an account to join the conversation.

More
31 Jan 2025 15:04 #320232 by zinsade
Hallo zusammen,
es geht gerade ein Stückchen weiter.
Die B-Achse meines Schwenktisches wird ja mit einem linearen Kugelrollantrieb angetrieben.
Nun habe ich die Berechnung in der "trtfuncs.c" verändert. Die geänderte Datei ist angehängt.
Für die "trtfuncs.c" gibt es ja die Möglichkeit die Rotationsmittelpunkte der einzelnen Drehachen in der HAL zu definieren.
Das passiert, so glaube ich, in dieser Passage der trtfuncs.c aus der Version Linuxcnc-Version 2.9.3:

// Note: 'principal' joints are used
    double x_rot_point = *(haldata->x_rot_point);
    double y_rot_point = *(haldata->y_rot_point);
    double z_rot_point = *(haldata->z_rot_point);
    double          dx = *(haldata->x_offset);
    double          dz = *(haldata->z_offset);
    double          dt = *(haldata->tool_offset);

Gibt es die Möglichkeit weitere eigene "halpins?" ähnlich des "x-rot-point" einfach selbst zu erstellen?
Die Parameter für die Berechnung müssten wie die Drehpunkte in der HAL dfiniert werden können.

MfG Peter


 
Attachments:

Please Log in or Create an account to join the conversation.

More
31 Jan 2025 17:52 #320244 by Aciera
Ja neue halpins kannst du analog den bestehenden Pins in der selben Datei definieren.

Please Log in or Create an account to join the conversation.

More
27 Feb 2025 16:38 #322801 by zinsade
Ich habe nun einen Ecoder mit 10000 Impulsen pro 90 Grad an die Achse angebaut. Dann habe ich die Achse versucht mit PID Regelung zum laufen zu bringen. Das Ergebnis ist enttäuschend. Ich bekomme die Achse nur ruhig ohne zittern wenn sie sich in Zeitlupe bewegt. Die Achse ist am Ende zwischen ca. -70 und -90 Grad und -20 und 0 Grad total unruhig. Einzig im Bereich zwischen -20 und -70 Grad ist sie halbwegs ruhig. Damit ist leider keine halbwegs vernünftige Bearbeitung möglich. Die Linear-Spindel wird ja durch 34er Stepper mit angebauten Encoder an einem HSS86 Treiber (Closed-Loop) angetrieben. Die B-Achse sieht man im ersten Beitrag hier im Thread.
Nun habe ich eine vielleicht dumme Frage:
Kann man die Achse in open Loop laufen lassen? Also nur gesteuert und nicht geregelt.
Vielleicht kann man ja mit dem Encodersignal irgendwie den Stepgenerator ansteuern?
Ich komme da leider nicht weiter. Hat jemand hier irgend einen Vorschlag?
fragt Peter


 

Please Log in or Create an account to join the conversation.

More
27 Feb 2025 18:50 #322810 by Aciera
Für open loop kannst du den stepgen als position feedback verwenden. ZB:
net a-pos-fb     <= hm2_7i76e.0.stepgen.04.position-fb
net a-pos-fb     => joint.3.motor-pos-fb

Please Log in or Create an account to join the conversation.

More
28 Feb 2025 15:55 #322873 by zinsade
Die beiden Pins waren schon bei mir verbunden:
net b-pos-fb     joint.3.motor-pos-fb   <=  hm2_5i25.0.stepgen.03.position-fb
Die hm2_5i25.0.encoder.01.position stimmt nicht mit der joint.3.pos-cmd überein.
Die Werte laufen auch nicht parallel zu einander. Die Werte nähern sich an bei 0, -30, -45, -60 und -90 Grad und driften dazwischen ab.
Das liegt meiner Meinung daran, dass die Rund-Achse B ja über einen Linearantrieb angetrieben wird, dessen Länge 270mm beträgt.
Wie bekomme ich den Encoder(hm2_5i25.0.encoder.01.position) so integriert, das am Ende der encoder-wert mit dem joint.3.motor-pos-fb Wert übereinstimmt?Ich hänge mal meine Hal hier an.
    
###########################
    #---V4.hal---2025-02-15---#
    ###########################
    #--------------------
    #---- => Load Realtime-Modules for >V3BSTEPBCA.hal<
    #---- => Module laden fue >V3BSTEPBCA.hal<
    # --- Kinematik laden
loadrt [KINS]KINEMATICS
    #autoconverted  trivkins
    #loadrt [KINS]KINEMATICS
    #autoconverted  maxkins
    # --- EMCMOT/TRAJ laden
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS 
    # PCI Treiber und configuration laden fue mesa 5i25/7i76
loadrt hostmot2
    # --------- fue beide 7i76 Mode 2 >..._port_0=2x2x< einstellen-----------
loadrt hm2_pci config=" num_encoders=2 num_pwmgens=0 num_3pwmgens=0 num_stepgens=10 sserial_port_0=2x2x"
addf hm2_5i25.0.read servo-thread
addf hm2_5i25.0.write servo-thread
setp hm2_5i25.0.watchdog.timeout_ns 10000000
    #
    #----Encoder laden --- 
    # fue das Handrad => 0
    # fue den Spindelencoder => 1
    # fue den B-Achs-Encoder => 01
loadrt encoder num_chan=2
addf encoder.capture-position servo-thread
addf encoder.update-counters servo-thread
    #addf encoder.0.capture-position servo-thread
    #addf hm2_5i25.0.encoder.01.capture-position servo-thread    
    #addf encoder.0.update-counters servo-thread
    #----
addf motion-command-handler servo-thread
addf motion-controller servo-thread
    #--------------------
    #---- => Load Realtime-Modules for Jogwheel
    #---- => Module fue Handrad laden 
loadrt mux8
addf mux8.0 servo-thread

loadrt ilowpass
addf ilowpass.0 servo-thread

loadrt or2 count=6
addf or2.0  servo-thread
addf or2.1  servo-thread
addf or2.2  servo-thread
addf or2.3  servo-thread
addf or2.4  servo-thread
addf or2.5  servo-thread

loadrt     and2     names=and2_jogtaster1,and2_jogtaster2,and2_Taster_u_Wkz
addf     and2_jogtaster1     servo-thread
addf     and2_jogtaster2     servo-thread
addf     and2_Taster_u_Wkz    servo-thread


    #--------------------
    #---- => Load Realtime-Modules for Spindel
    #---- => Realtime-Module fue Spindel laden
    #loadrt pid num_chan=2             
    #addf pid.0.do-pid-calcs servo-thread 
    #addf pid.1.do-pid-calcs servo-thread


    #addf pid.s.do-pid-calcs servo-thread

    #loadrt orient count=1
    #addf orient.0 servo-thread

#loadrt mux2 count=1        
#addf mux2.0 servo-thread

#loadrt near count=1
#addf near.0 servo-thread

#loadrt edge count=1
#addf edge.0 servo-thread

loadrt abs count=1
addf abs.0 servo-thread

    #--------------------
    ################################################################################
    # external output signals / externe Ausgänge 7i76
    #=======================================================================
    # --- SPINDLE-ON ---
    #setp hm2_5i25.0.gpio.006.is_output true
    #net spindle-on hm2_5i25.0.gpio.006.out        --- Status offen
    #=======================================================================
    # --- SPINDLE-CW ---
    #setp hm2_5i25.0.gpio.007.is_output true
    #net spindle-cw hm2_5i25.0.gpio.007.out        --- Status offen
    #=======================================================================
    # --- SPINDLE-CCW ---
    #setp hm2_5i25.0.gpio.008.is_output true
    #net spindle-ccw hm2_5i25.0.gpio.008.out    --- Status offen
    #=======================================================================
    # --- SPINDLE-BRAKE ---
    #setp hm2_5i25.0.gpio.009.is_output true
    #net spindle-brake hm2_5i25.0.gpio.009.out    --- Status offen
    #=======================================================================
################################################################################
    # external input signals / externe Eingänge 7i76
    #=======================================================================
    # --- MAX-X ---Endschalter X-         --- Status OK
net max-x     <=  hm2_5i25.0.7i76.0.0.input-00-not
    # --- MIN-X ---Endschalter X+         --- Status OK
net min-x     <=  hm2_5i25.0.7i76.0.0.input-01-not
    #=======================================================================
    # --- MIN-Y ---Endschalter Y-         --- Status OK
net min-y     <=  hm2_5i25.0.7i76.0.0.input-02-not
    # --- MAX-Y ---Endschalter Y+         --- Status OK
net max-y     <=  hm2_5i25.0.7i76.0.0.input-03-not
    #=======================================================================
    # --- MAX-Z ---Endschalter Z-         --- Status OK
net max-z     <=  hm2_5i25.0.7i76.0.0.input-04-not
    # --- MIN-Z ---Endschalter Z+         --- Status OK
net min-z     <=  hm2_5i25.0.7i76.0.0.input-05-not
    #=======================================================================
    # --- MAX-B ---Endschalter B-         --- Status OK
net max-b     <=  hm2_5i25.0.7i76.0.0.input-06-not
    # --- MIN-B ---Endschalter B+         --- Status OK
net min-b     <=  hm2_5i25.0.7i76.0.0.input-07-not
    #=======================================================================
    # --- HOME-X ---Referenzpunkt X-Achse     --- Status OK
net home-x     <=  hm2_5i25.0.7i76.0.0.input-10
    # --- HOME-Y ---Referenzpunkt Y-Achse     --- Status OK
net home-y     <=  hm2_5i25.0.7i76.0.0.input-11
    # --- HOME-Z ---Referenzpunkt Z-Achse     --- Status OK
net home-z     <=  hm2_5i25.0.7i76.0.0.input-12
    # --- HOME-A ---Referenzpunkt A-Achse     --- Status OK
net home-a     <=  hm2_5i25.0.7i76.0.0.input-13
    # --- HOME-B ---Referenzpunkt B-Achse     --- Status OK
net home-b     <=  hm2_5i25.0.7i76.0.0.input-14
    #net home-b     <=  hm2_5i25.0.encoder.01.input-index
    #setp hm2_5i25.0.encoder.01.countermode 0
    # --- HOME-C ---Referenzpunkt C-Achse     --- Status OK
net home-c     <=  hm2_5i25.0.7i76.0.0.input-15
    #=======================================================================
    # --- Toolsensor --- Werkzeugsensor    --- Status OK
        #        hm2_5i25.0.7i76.0.2.input-03-not
    #=======================================================================
    # --- Touchprobe --- Messtasterschalter    --- Status OK
         #        hm2_5i25.0.7i76.0.2.input-06-not
    #=======================================================================
    # --- ESTOP-EXT ---Not-Halt-Taster     --- Status OK
net estop-ext     <=  hm2_5i25.0.7i76.0.0.input-08
    #=======================================================================
    # --- Alarm ---Entstufe            --- Status offen
    #net alarm     <=  hm2_5i25.0.7i76.0.0.input-XX
    #=======================================================================
    # --- Laserlichtschranke ---ueber ULN2003A    --- Status OK
    #net Laser-an    <=  hm2_5i25.0.7i76.0.2.output-13 # --- wird mit M105 eingeschaltet.
    #net Laser-aus   <=  hm2_5i25.0.7i76.0.2.output-13 # --- wird mit M104 ausgeschaltet.
    # --- Touchprobe --- Laserlichtschranke    --- Status OK
        #        hm2_5i25.0.7i76.0.2.input-07-not
    #=======================================================================
    # --- Staubsauger ---SchaltsteckdoseA    --- Status OK
    #net SteckdoseA     <=  hm2_5i25.0.7i76.0.2.output-14 # --- wird ueber M100 aus und mit M101 eingeschaltet.
    #=======================================================================
    # --- Licht Bearbeitungsraum ---SchaltsteckdoseB    --- Status OK
    #net SteckdoseB     <=  hm2_5i25.0.7i76.0.2.output-15 # --- wird ueber M102 aus und mit M103 eingeschaltet.
    #=======================================================================
    ################################################################################
    #--------------------
    # ************************
    #   AXIS X / X Achse     *
    # ************************
    # Step Gen signals/setup
setp   hm2_5i25.0.stepgen.00.dirsetup        [JOINT_0]DIRSETUP
setp   hm2_5i25.0.stepgen.00.dirhold         [JOINT_0]DIRHOLD
setp   hm2_5i25.0.stepgen.00.steplen         [JOINT_0]STEPLEN
setp   hm2_5i25.0.stepgen.00.stepspace       [JOINT_0]STEPSPACE
setp   hm2_5i25.0.stepgen.00.position-scale  [JOINT_0]STEP_SCALE
setp   hm2_5i25.0.stepgen.00.step_type        0
setp   hm2_5i25.0.stepgen.00.control-type     0
setp   hm2_5i25.0.stepgen.00.maxaccel         [JOINT_0]STEPGEN_MAXACCEL
setp   hm2_5i25.0.stepgen.00.maxvel           [JOINT_0]STEPGEN_MAXVEL
net x-pos-fb     joint.0.motor-pos-fb   <=  hm2_5i25.0.stepgen.00.position-fb
net x-pos-cmd    joint.0.motor-pos-cmd  =>  hm2_5i25.0.stepgen.00.position-cmd
net x-enable     joint.0.amp-enable-out =>  hm2_5i25.0.stepgen.00.enable
    # ---setup home / limit switch signals---OK
net home-x    =>  joint.0.home-sw-in
net min-x     =>  joint.0.neg-lim-sw-in
net max-x     =>  joint.0.pos-lim-sw-in
    #--------------------
    # ************************
    #   AXIS Y / Y Achse     *
    # ************************
    # Step Gen signals/setup
setp   hm2_5i25.0.stepgen.01.dirsetup        [JOINT_1]DIRSETUP
setp   hm2_5i25.0.stepgen.01.dirhold         [JOINT_1]DIRHOLD
setp   hm2_5i25.0.stepgen.01.steplen         [JOINT_1]STEPLEN
setp   hm2_5i25.0.stepgen.01.stepspace       [JOINT_1]STEPSPACE
setp   hm2_5i25.0.stepgen.01.position-scale  [JOINT_1]STEP_SCALE
setp   hm2_5i25.0.stepgen.01.step_type        0
setp   hm2_5i25.0.stepgen.01.control-type     0
setp   hm2_5i25.0.stepgen.01.maxaccel         [JOINT_1]STEPGEN_MAXACCEL
setp   hm2_5i25.0.stepgen.01.maxvel           [JOINT_1]STEPGEN_MAXVEL
net y-pos-fb     joint.1.motor-pos-fb   <=  hm2_5i25.0.stepgen.01.position-fb
net y-pos-cmd    joint.1.motor-pos-cmd  =>  hm2_5i25.0.stepgen.01.position-cmd
net y-enable     joint.1.amp-enable-out =>  hm2_5i25.0.stepgen.01.enable
    # ---setup home / limit switch signals---OK
net home-y     =>  joint.1.home-sw-in
net min-y      =>  joint.1.neg-lim-sw-in
net max-y      =>  joint.1.pos-lim-sw-in
    #--------------------
    # ************************
    #   AXIS Z / Z Achse     *
    # ************************
    # Step Gen signals/setup
setp   hm2_5i25.0.stepgen.02.dirsetup        [JOINT_2]DIRSETUP
setp   hm2_5i25.0.stepgen.02.dirhold         [JOINT_2]DIRHOLD
setp   hm2_5i25.0.stepgen.02.steplen         [JOINT_2]STEPLEN
setp   hm2_5i25.0.stepgen.02.stepspace       [JOINT_2]STEPSPACE
setp   hm2_5i25.0.stepgen.02.position-scale  [JOINT_2]STEP_SCALE
setp   hm2_5i25.0.stepgen.02.step_type        0
setp   hm2_5i25.0.stepgen.02.control-type     0
setp   hm2_5i25.0.stepgen.02.maxaccel         [JOINT_2]STEPGEN_MAXACCEL
setp   hm2_5i25.0.stepgen.02.maxvel           [JOINT_2]STEPGEN_MAXVEL
net z-pos-fb     joint.2.motor-pos-fb   <=  hm2_5i25.0.stepgen.02.position-fb
net z-pos-cmd    joint.2.motor-pos-cmd  =>  hm2_5i25.0.stepgen.02.position-cmd
net z-enable     joint.2.amp-enable-out =>  hm2_5i25.0.stepgen.02.enable
    # ---setup home / limit switch signals---OK
net home-z       =>  joint.2.home-sw-in
net min-z        =>  joint.2.neg-lim-sw-in
net max-z        =>  joint.2.pos-lim-sw-in
    #--------------------
    # ************************
    #   AXIS B / B Achse     *
    # ************************
    # Step Gen signals/setup

setp   hm2_5i25.0.stepgen.03.dirsetup        [JOINT_3]DIRSETUP
setp   hm2_5i25.0.stepgen.03.dirhold         [JOINT_3]DIRHOLD
setp   hm2_5i25.0.stepgen.03.steplen         [JOINT_3]STEPLEN
setp   hm2_5i25.0.stepgen.03.stepspace       [JOINT_3]STEPSPACE
setp   hm2_5i25.0.stepgen.03.position-scale  [JOINT_3]STEP_SCALE
setp   hm2_5i25.0.stepgen.03.step_type        0
setp   hm2_5i25.0.stepgen.03.control-type     0
setp   hm2_5i25.0.stepgen.03.maxaccel        [JOINT_3]STEPGEN_MAXACCEL
setp   hm2_5i25.0.stepgen.03.maxvel          [JOINT_3]STEPGEN_MAXVEL

# ---Encoder signals setup---------------------------------------------
setp    hm2_5i25.0.encoder.01.counter-mode    [JOINT_3]ENCODER_01_COUNTER_MODE
setp    hm2_5i25.0.encoder.01.filter        [JOINT_3]ENCODER_01_FILTER
setp    hm2_5i25.0.encoder.01.index-invert    [JOINT_3]ENCODER_01_INDEX_INVERT
setp    hm2_5i25.0.encoder.01.index-mask    [JOINT_3]ENCODER_01_INDEX_MASK
setp    hm2_5i25.0.encoder.01.index-mask-invert    [JOINT_3]ENCODER_01_INDEX_MASK_INVERT
setp       hm2_5i25.0.encoder.01.scale         [JOINT_3]ENCODER_01_SCALE
    
net b-pos-fb    <= hm2_5i25.0.stepgen.03.position-fb
net b-pos-fb    => joint.3.motor-pos-fb

    #net encoder-pos-b hm2_5i25.0.encoder.01.position => hm2_5i25.0.stepgen.03.position-fb
    #net encoder-vel-b hm2_5i25.0.encoder.01.velocity => hm2_5i25.0.stepgen.03.velocity-fb

net b-pos-fb     joint.3.motor-pos-fb   <=  hm2_5i25.0.stepgen.03.position-fb
net b-pos-cmd    joint.3.motor-pos-cmd  =>  hm2_5i25.0.stepgen.03.position-cmd
net b-enable     joint.3.amp-enable-out =>  hm2_5i25.0.stepgen.03.enable

    # ---setup home / limit switch signals---OK
net home-b     =>  joint.3.home-sw-in
net min-b      =>  joint.3.neg-lim-sw-in
net max-b      =>  joint.3.pos-lim-sw-in
    #--------------------
    # ************************
    #   AXIS C / C Achse     *
    # ************************
    # Step Gen signals/setup
setp   hm2_5i25.0.stepgen.04.dirsetup        [JOINT_4]DIRSETUP
setp   hm2_5i25.0.stepgen.04.dirhold         [JOINT_4]DIRHOLD
setp   hm2_5i25.0.stepgen.04.steplen         [JOINT_4]STEPLEN
setp   hm2_5i25.0.stepgen.04.stepspace       [JOINT_4]STEPSPACE
setp   hm2_5i25.0.stepgen.04.position-scale  [JOINT_4]STEP_SCALE
setp   hm2_5i25.0.stepgen.04.step_type        0
setp   hm2_5i25.0.stepgen.04.control-type     0
setp   hm2_5i25.0.stepgen.04.maxaccel         [JOINT_4]STEPGEN_MAXACCEL
setp   hm2_5i25.0.stepgen.04.maxvel           [JOINT_4]STEPGEN_MAXVEL
net c-pos-fb     joint.4.motor-pos-fb   <=  hm2_5i25.0.stepgen.04.position-fb
net c-pos-cmd    joint.4.motor-pos-cmd  =>  hm2_5i25.0.stepgen.04.position-cmd
net c-enable     joint.4.amp-enable-out =>  hm2_5i25.0.stepgen.04.enable
    # ---setup home / limit switch signals---OK
net home-c     =>  joint.4.home-sw-in
    #--------------------
    # ************************
    #   AXIS A / A Achse     *
    # ************************
    # Step Gen signals/setup
setp   hm2_5i25.0.stepgen.05.dirsetup        [JOINT_5]DIRSETUP
setp   hm2_5i25.0.stepgen.05.dirhold         [JOINT_5]DIRHOLD
setp   hm2_5i25.0.stepgen.05.steplen         [JOINT_5]STEPLEN
setp   hm2_5i25.0.stepgen.05.stepspace       [JOINT_5]STEPSPACE
setp   hm2_5i25.0.stepgen.05.position-scale  [JOINT_5]STEP_SCALE
setp   hm2_5i25.0.stepgen.05.step_type        0
setp   hm2_5i25.0.stepgen.05.control-type     0
setp   hm2_5i25.0.stepgen.05.maxaccel         [JOINT_5]STEPGEN_MAXACCEL
setp   hm2_5i25.0.stepgen.05.maxvel           [JOINT_5]STEPGEN_MAXVEL
net a-pos-fb     joint.5.motor-pos-fb   <=  hm2_5i25.0.stepgen.05.position-fb
net a-pos-cmd    joint.5.motor-pos-cmd  =>  hm2_5i25.0.stepgen.05.position-cmd
net a-enable     joint.5.amp-enable-out =>  hm2_5i25.0.stepgen.05.enable
    # ---setup home / limit switch signals---OK
net home-a     =>  joint.5.home-sw-in
    #--------------------
    ################################################################################
    #--------------------
    # --- connect miscellaneous signals ---
    # --- Verbindung diverser Signale   ---
    # --- zum HAL User interface        ---
    # *************************************

    # ---HALUI signals---
    #--------------------
    #net joint-select-x        halui.axis.x.select
net x-is-homed            halui.joint.0.is-homed
net jog-x-pos             halui.axis.x.plus
net jog-x-neg             halui.axis.x.minus
net jog-x-analog          halui.axis.x.analog
    #--------------------
    #net joint-select-y        halui.axis.y.select
net y-is-homed            halui.joint.1.is-homed
net jog-y-pos             halui.axis.y.plus
net jog-y-neg             halui.axis.y.minus
net jog-y-analog          halui.axis.y.analog
    #--------------------
    #net joint-select-z        halui.axis.z.select
net z-is-homed            halui.joint.2.is-homed
net jog-z-pos             halui.axis.z.plus
net jog-z-neg             halui.axis.z.minus
net jog-z-analog          halui.axis.z.analog
    #--------------------
    #net joint-select-a        halui.axis.a.select
net a-is-homed            halui.joint.5.is-homed
net jog-a-pos             halui.axis.a.plus
net jog-a-neg             halui.axis.a.minus
net jog-a-analog          halui.axis.a.analog
    #
     #--------------------
    #net joint-select-b        halui.axis.b.select
net b-is-homed            halui.joint.3.is-homed
net jog-b-pos             halui.axis.b.plus
net jog-b-neg             halui.axis.b.minus
net jog-b-analog          halui.axis.b.analog
    #--------------------
    #net joint-select-c        halui.axis.c.select
net c-is-homed            halui.joint.4.is-homed
net jog-c-pos             halui.axis.c.plus
net jog-c-neg             halui.axis.c.minus
net jog-c-analog          halui.axis.c.analog
    #--------------------
net jog-selected-pos      halui.axis.selected.plus
net jog-selected-neg      halui.axis.selected.minus
    #--------------------
net spindle-manual-cw     halui.spindle.0.forward
net spindle-manual-ccw    halui.spindle.0.reverse
net spindle-manual-stop   halui.spindle.0.stop
    #--------------------
net machine-is-on         halui.machine.is-on
net jog-speed             halui.axis.jog-speed 
net MDI-mode              halui.mode.is-mdi
    #--------------------

    #  ---coolant signals                ---noch nicht vorhanden

net coolant-mist      <=  iocontrol.0.coolant-mist
net coolant-flood     <=  iocontrol.0.coolant-flood

    #  ---motion control signals---

net in-position               <=  motion.in-position
net machine-is-enabled        <=  motion.motion-enabled

    #  ---estop signals---OK

net estop-out     <=  iocontrol.0.user-enable-out
net estop-ext     =>  iocontrol.0.emc-enable-in

    ################################################################################
    #******************************
    #  Touchprobe / Toolsetter
    #  Messtaster / Werkzeugvermessung
    #******************************
    #--------------------
    #=======================================================================
    # --- Laserlichtschranke ---ueber ULN2003A--- Status OK
    #     net Laser-an    <=  hm2_5i25.0.7i76.0.2.output-13
    # --- Touchprobe --- Laserlichtschranke    --- Status OK
        #     hm2_5i25.0.7i76.0.2.input-07-not
    #=======================================================================
    # --- Touchprobe --- Messtasterschalter    --- Status OK
    #    Mit EasyProbe !
    #     hm2_5i25.0.7i76.0.2.input-06-not
    #=======================================================================    
    # Lasersensor Entprellen
loadrt dbounce names=dbounce_laser
addf dbounce_laser servo-thread
setp dbounce_laser.delay 8
net Laser-in dbounce_laser.in <= hm2_5i25.0.7i76.0.2.input-07-not
#net Laser-out or2.4.in1 <= dbounce_laser.out
#net probe-input => motion.probe-input <= or2.4.out

    #=======================================================================
    ################################################################################
    #**********************************************************************
    #   Analogeingaenge 7i76 fue Potis 10K Eilgang / Vorschub / Spindel    *
    #**********************************************************************
    #---- Analog Eingaenge 7i76 Nr.2 Eingaenge 00 01 02
    #---- Analog Inputs 7i76 No.2 Inputs 00 01 02
    #--------------------
loadrt conv_float_s32 names=conv_float_s32.feed,conv_float_s32.rapid,conv_float_s32.spindel
addf conv_float_s32.feed servo-thread
addf conv_float_s32.rapid servo-thread
addf conv_float_s32.spindel servo-thread
    #--------------------
    #--- Vorschubregler - Regelbereich 0 bis 150% - (regelbarer Widerstand 10Kohm an 7i76 mit 24V)
    #--- Feed override - control range 0 to 150% - (adjustable resistance 10Kohm on 7i76 with 24V)
setp halui.feed-override.scale 0.01
setp halui.feed-override.direct-value true
setp hm2_5i25.0.7i76.0.2.analogin0-scalemax 152
    #setp hm2_5i25.0.7i76.0.2.analogin0-scalemax 228
net halui.feedanalog <= hm2_5i25.0.7i76.0.2.analogin0 => conv_float_s32.feed.in
net feedanalog conv_float_s32.feed.out => halui.feed-override.counts
    #--------------------
    #--- Eilgangregler - Regelbereich 0 bis 100% - (regelbarer Widerstand 10Kohm an 7i76 mit 24V)
    #--- Rappid override - control range 0 to 100% - (adjustable resistance 10Kohm on 7i76 with 24V)
setp halui.rapid-override.scale 0.01
setp halui.rapid-override.direct-value true
setp hm2_5i25.0.7i76.0.2.analogin1-scalemax 150
    #setp hm2_5i25.0.7i76.0.2.analogin1-scalemax 228
net halui.maxrapidanalog <= hm2_5i25.0.7i76.0.2.analogin1 => conv_float_s32.rapid.in
net maxrapidanalog conv_float_s32.rapid.out => halui.rapid-override.counts
    # --------------------------------Spindelcontrol noch nicht in Funktion---------
    #--- Spindeldrehzahlregler - Regelbereich 50 bis 150% - (regelbarer Widerstand 5Kohm an 7i76 mit 24V)
    #--- Spindel override - control range 50 to 150% - (adjustable resistance 5Kohm on 7i76 with 24V)
setp halui.spindle.0.override.direct-value false
setp halui.spindle.0.override.count-enable true
setp halui.spindle.0.override.scale 0.025
net spindleanalog conv_float_s32.spindel.out => halui.spindle.0.override.counts
setp hm2_5i25.0.7i76.0.2.analogin2-scalemax 200
net halui.spindleanalog <= hm2_5i25.0.7i76.0.2.analogin2 => conv_float_s32.spindel.in
    #--------------------
    #*************************
    #   Analogeingaenge Ende   *
    #*************************
    ################################################################################
    #*******************
    #*    Handrad      *
    #*******************
    #--------------------
    # --- Wenn das Handrad ein Quadratursignal pro Klick ausgibt ---
    # --- "x4-mode" auf 1 setzen ---
    # --- Wenn kein Quadratursignal pro Klick ausgegeben wird ---
    # --- "x4-mode" auf 0 setzen ---
setp encoder.0.x4-mode 0
    #--------------------
    # ---   Geschwindigkeitsmodus an(1) oder aus(0) ---
    # ---   Mode 0 ist Standardwert / default - Maschine laeuft nach ---
    # ---   Mode 1 = Maschine stoppt sofort mit Handrad Stillstand ---
setp joint.0.jog-vel-mode 1
setp joint.1.jog-vel-mode 1
setp joint.2.jog-vel-mode 1
setp joint.3.jog-vel-mode 1
setp joint.4.jog-vel-mode 1
setp joint.5.jog-vel-mode 1
    #--------------------
    # --- Die 4 Drehschalter Eingaenge ueber "or2" fuer ---
    # --- die 3 "mux8" Decoder Eingaenge aufbereiten ---
net increment1 or2.0.in0             <=  hm2_5i25.0.7i76.0.0.input-17
net increment2 or2.1.in1             <=  hm2_5i25.0.7i76.0.0.input-18
net increment3 or2.0.in1 or2.1.in0         <=  hm2_5i25.0.7i76.0.0.input-19
net increment4 or2.2.in1             <=  hm2_5i25.0.7i76.0.0.input-20
    #--------------------
    # --- mux8 laden
    # --- loadrt mux8
    # --- addf mux8.0 servo-thread
    # --- Parameter fue "mux8" setzen - Das gewuenschte Increment wird ---
    # --- mit 1000 (scale von ilopass) multipliziert. ---
setp mux8.0.in1 0.001
setp mux8.0.in2 0.0001
setp mux8.0.in3 0.00001
setp mux8.0.in4 0.000001
    #--------------------
    # --- "or2" Ausgaenge mit "mux8" verbinden
net scale0 or2.0.out => mux8.0.sel0
net scale1 or2.1.out => mux8.0.sel1
net scale2 or2.2.out => mux8.0.sel2
    # --- "mux8" Ausgang ueber "mpg-scale" mit "joint.N.jog-scale @axN@.jog-scale" verbinden
net mpg-scale <= mux8.0.out
net mpg-scale => joint.0.jog-scale axis.x.jog-scale
net mpg-scale => joint.1.jog-scale axis.y.jog-scale
net mpg-scale => joint.2.jog-scale axis.z.jog-scale
net mpg-scale => joint.3.jog-scale axis.b.jog-scale
net mpg-scale => joint.4.jog-scale axis.c.jog-scale
net mpg-scale => joint.5.jog-scale axis.a.jog-scale
    #--------------------
    # --- Handradimpulse der Phasen A+B an den "mpg-encoder" anschliessen --
net mpg-A encoder.0.phase-A         <=  hm2_5i25.0.7i76.0.0.input-29
net mpg-B encoder.0.phase-B         <=  hm2_5i25.0.7i76.0.0.input-28-not
    #--------------------
    # --- Die Achsenanwahl ---
net mpg-x halui.axis.x.select axis.x.jog-enable <= hm2_5i25.0.7i76.0.0.input-23
net mpg-y halui.axis.y.select axis.y.jog-enable <= hm2_5i25.0.7i76.0.0.input-24
net mpg-z halui.axis.z.select axis.z.jog-enable <= hm2_5i25.0.7i76.0.0.input-25
net mpg-b halui.axis.b.select axis.b.jog-enable <= hm2_5i25.0.7i76.0.0.input-31
net mpg-c halui.axis.c.select axis.c.jog-enable <= hm2_5i25.0.7i76.0.0.input-22
net mpg-a halui.axis.a.select axis.a.jog-enable <= hm2_5i25.0.7i76.0.0.input-30
    #--------------------
    # --- scale-Wert von ilopass wird mit dem increment multipliziert ---
    # --- und als Parameter an "mux8" übergeben - Standartwert = 1000 ---
setp ilowpass.0.scale 1000
    # --- Intensitaet von "ilowpass" Standartwert = 0.01
setp ilowpass.0.gain 0.01
    #--------------------
    # --- Der Ausgang von "encoder.0.counts" sendet an "ilowpass.0.in" -----
net mpg-out ilowpass.0.in <= encoder.0.counts
    #--------------------
    # --- Der Ausgang von "ilowpass" sendet an jede Achse
    # --- den modifizierten Wert von "jog-counts"
    # --- Nur die angewaelte Achse wird bewegt.
net encoder-counts  <= ilowpass.0.out
net encoder-counts => joint.0.jog-counts axis.x.jog-counts
net encoder-counts => joint.1.jog-counts axis.y.jog-counts
net encoder-counts => joint.2.jog-counts axis.z.jog-counts
net encoder-counts => joint.3.jog-counts axis.b.jog-counts
net encoder-counts => joint.4.jog-counts axis.c.jog-counts
net encoder-counts => joint.5.jog-counts axis.a.jog-counts
    #--------------------
    # Auswahl zwischen Jogtaster oder Handrad ueber "or2" und "and2"
    # net tasterfreigabe-0 or2.3.in0     <=  hm2_5i25.0.7i76.0.0.input-16
net tasterfreigabe-1 or2.3.in1            <=  hm2_5i25.0.7i76.0.0.input-21
net jogtasterfreigabe or2.3.out         => and2_jogtaster1.in0 and2_jogtaster2.in0
net jogtasterfrei-0 and2_jogtaster1.in1     <=  hm2_5i25.0.7i76.0.0.input-26
net jogtasterfrei-1 and2_jogtaster2.in1     <=  hm2_5i25.0.7i76.0.0.input-27

    #--------------------
    # --- Jogtaster - Positive Richtung ---
    #net jog-selected-pos  <= and2_jogtaster1.out
net jog-selected-neg  <= and2_jogtaster1.out
    # --- Jogtaster - Negative Richtung ---
    #net jog-selected-neg  <= and2_jogtaster2.out
net jog-selected-pos  <= and2_jogtaster2.out
    #--------------------
    # ---Jog Geschwindigkeit in mm/min --- Standartwert = 2000
sets jog-speed 2000
    #--------------------
    #*********************************
    #   --- Handrad --- FIN / ENDE   *
    #*********************************
    ################################################################################
    #
    #*******************
    #  SPINDLE S       *
    #*******************

loadrt pid names=pid.s
addf pid.s.do-pid-calcs       servo-thread

setp   pid.s.Pgain     [SPINDLE_0]P
setp   pid.s.Igain     [SPINDLE_0]I
setp   pid.s.Dgain     [SPINDLE_0]D
setp   pid.s.bias      [SPINDLE_0]BIAS
setp   pid.s.FF0       [SPINDLE_0]FF0
setp   pid.s.FF1       [SPINDLE_0]FF1
setp   pid.s.FF2       [SPINDLE_0]FF2
setp   pid.s.deadband  [SPINDLE_0]DEADBAND
setp   pid.s.maxoutput [SPINDLE_0]MAX_OUTPUT
setp   pid.s.error-previous-target true

net spindle-index-enable      <=> pid.s.index-enable
net spindle-enable            =>  pid.s.enable
net spindle-vel-cmd-rpm-abs     =>  pid.s.command
net spindle-vel-fb-rpm-abs      =>  pid.s.feedback
net spindle-output            <=  pid.s.output

    # ---digital potentionmeter output signals/setup--------------------------------

setp   hm2_5i25.0.7i76.0.0.spinout-minlim    [SPINDLE_0]OUTPUT_MIN_LIMIT
setp   hm2_5i25.0.7i76.0.0.spinout-maxlim    [SPINDLE_0]OUTPUT_MAX_LIMIT
setp   hm2_5i25.0.7i76.0.0.spinout-scalemax  [SPINDLE_0]OUTPUT_SCALE

net spindle-output      => hm2_5i25.0.7i76.0.0.spinout
net spindle-enable      => hm2_5i25.0.7i76.0.0.spinena
    #net spindle-ccw         => hm2_5i25.0.7i76.0.0.spindir
net spindle-cw         => hm2_5i25.0.7i76.0.0.spindir

    #net spindle-enable      => hm2_5i25.0.7i76.0.0.output-00
    #net spindle-ccw         => hm2_5i25.0.7i76.0.0.output-01
    #net spindle-cw         => hm2_5i25.0.7i76.0.0.output-02

    # ---Encoder feedback signals/setup---------------------------------------------

    #setp    hm2_5i25.0.encoder.00.counter-mode 0
    #setp    hm2_5i25.0.encoder.00.filter 1
    #setp    hm2_5i25.0.encoder.00.index-invert 0
    #setp    hm2_5i25.0.encoder.00.index-mask 0
    #setp    hm2_5i25.0.encoder.00.index-mask-invert 0
    #setp    hm2_5i25.0.encoder.00.scale  [SPINDLE_0]ENCODER_SCALE

    #net spindle-revs             <=   hm2_5i25.0.encoder.00.position
    #net spindle-vel-fb-rps       <=   hm2_5i25.0.encoder.00.velocity
    #net spindle-index-enable     <=>  hm2_5i25.0.encoder.00.index-enable

    # ---setup spindle control signals----------------------------------------------

net spindle-vel-cmd-rps        <=  spindle.0.speed-out-rps
net spindle-vel-cmd-rps-abs    <=  spindle.0.speed-out-rps-abs
net spindle-vel-cmd-rpm        <=  spindle.0.speed-out
net spindle-vel-cmd-rpm-abs    <=  spindle.0.speed-out-abs
net spindle-enable             <=  spindle.0.on
net spindle-cw                 <=  spindle.0.forward
net spindle-ccw                <=  spindle.0.reverse
net spindle-brake              <=  spindle.0.brake
net spindle-revs               =>  spindle.0.revs
net spindle-at-speed           =>  spindle.0.at-speed
net spindle-vel-fb-rps         =>  spindle.0.speed-in
net spindle-index-enable      <=>  spindle.0.index-enable

    # ---Setup spindle at speed signals---------------------------------------------
sets spindle-at-speed true
    #--------------------
    #------------------------------SPINDLE --- FIN / ENDE --------------------------
    #--------------------

#  ---Signale zum manuellen Werkzeugwechsel---

net tool-change-request    <= iocontrol.0.tool-change
net tool-change-confirmed  => iocontrol.0.tool-changed
net tool-number            <= iocontrol.0.tool-prep-number

#  ---Nutze externen Dialog zum Werkzeugwechsel---

loadusr -W hal_manualtoolchange
net tool-change-request    =>  hal_manualtoolchange.change
net tool-change-confirmed  <=  hal_manualtoolchange.changed
net tool-number            =>  hal_manualtoolchange.number

#  ---ignoriere Anfragen zu Werkzeug-Vorbereitungen---
net tool-prepare-loopback   iocontrol.0.tool-prepare      =>  iocontrol.0.tool-prepared





    #------------------------------HAL --- FIN / ENDE ------------------------------

Please Log in or Create an account to join the conversation.

Time to create page: 0.086 seconds
Powered by Kunena Forum