Parallel port stepper control and etherCAT I/O

More
4 years 1 day ago #255399 by O.R
I made test configuration with Stepconf Wizard, modified the .HAL file and made by hand ethercat-conf.xml file. Now there is some problem when i try to start linuxcnc.

Here is error:
Code:
Error report created by /usr/lib/tcltk/linuxcnc/show_errors.tcl: Print file information: RUN_IN_PLACE=no LINUXCNC_DIR= LINUXCNC_BIN_DIR=/usr/bin LINUXCNC_TCL_DIR=/usr/lib/tcltk/linuxcnc LINUXCNC_SCRIPT_DIR= LINUXCNC_RTLIB_DIR=/usr/lib/linuxcnc/modules LINUXCNC_CONFIG_DIR= LINUXCNC_LANG_DIR=/usr/lib/tcltk/linuxcnc/msgs INIVAR=inivar HALCMD=halcmd LINUXCNC_EMCSH=/usr/bin/wish8.6 LINUXCNC - 2.8.4-1-gb7824717b Machine configuration directory is '/home/sorvi/linuxcnc/configs/Lathe' Machine configuration file is 'Lathe.ini' INIFILE=/home/sorvi/linuxcnc/configs/Lathe/Lathe.ini VERSION=1.1 PARAMETER_FILE=linuxcnc.var TASK=milltask HALUI= DISPLAY=axis COORDINATES=X Z KINEMATICS=trivkins coordinates=XZ Starting LinuxCNC... Starting LinuxCNC server program: linuxcncsvr Loading Real Time OS, RTAPI, and HAL_LIB modules Starting LinuxCNC IO program: io Found file(REL): ./Lathe.hal Shutting down and cleaning up LinuxCNC... Removing HAL_LIB, RTAPI, and Real Time OS modules Removing NML shared memory segments Debug file information: Note: Using POSIX realtime Failed to open /dev/EtherCAT0: Permission denied LCEC: requesting master 0 (index 0) failed lcec: rtapi_app_main: Invalid argument (-22) ./Lathe.hal:7: waitpid failed /usr/bin/rtapi_app lcec ./Lathe.hal:7: /usr/bin/rtapi_app exited without becoming ready ./Lathe.hal:7: insmod for lcec failed, returned -1 3358 Stopping realtime threads Unloading hal components Note: Using POSIX realtime ----------------------------------------------------------------------- Info report created by linuxcnc_info: The file:    /tmp/linuxcnc_info.txt can be posted to a forum or a web site like:      http://pastebin.com in order to provide information about the linuxcnc system and configuration.                 Date: Sat 29 Oct 22:23:43 EEST 2022             UTC Date: Sat 29 Oct 19:23:43 UTC 2022         this program: /usr/bin/linuxcnc_info               uptime: 22:23:43 up 2:52, 1 user, load average: 0.68, 0.72, 0.64      lsb_release -sa: Debian Debian GNU/Linux 10 (buster) 10 buster       which linuxcnc: /usr/bin/linuxcnc                  pwd: /home/sorvi/linuxcnc/configs/Lathe                 USER: sorvi              LOGNAME: sorvi                 HOME: /home/sorvi               EDITOR:               VISUAL:             LANGUAGE: en_GB:en                 TERM: dumb            COLORTERM:              DISPLAY: :0.0              DESKTOP: lightdm-xsession         display size: 1280x1024 pixels (338x270 millimeters)                 PATH: /usr/bin:/home/sorvi/linuxcnc/configs/Lathe/bin:/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games uname items:          nodename -n: debian       kernel-name -s: Linux       kernel-vers -v: #1 SMP PREEMPT RT Debian 4.19.249-2 (2022-06-30)           machine -m: x86_64         processor -p: unknown          platform -i: unknown       oper system -o: GNU/Linux /proc items:              cmdline: BOOT_IMAGE=/boot/vmlinuz-4.19.0-21-rt-amd64 root=UUID=f9777791-97e7-4eba-bfb6-7699707f4799 ro initrd=/install/gtk/initrd.gz quiet           model name: Intel(R) Atom(TM) CPU 330 @ 1.60GHz                cores: 2              cpu MHz: 1595.960              parport: 0000-0000 : parport0 0000-0000 : parport0               serial: Versions:                  gcc: gcc (Debian 8.3.0-6) 8.3.0               python: Python 2.7.16                  git: git version 2.20.1           git commit: NA                  tcl: 8.6                   tk: 8.6                glade: not_in_PATH           glade-gtk2: not_in_PATH linuxcnc_var all:      LINUXCNCVERSION: 2.8.4-1-gb7824717b LINUXCNC_AUX_GLADEVCP: /usr/share/linuxcnc/aux_gladevcp LINUXCNC_AUX_EXAMPLES: /usr/share/linuxcnc/aux_examples             REALTIME: /etc/init.d/realtime                  RTS: uspace           HALLIB_DIR: /usr/share/linuxcnc/hallib dpkg -l '*linuxcnc*': Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name                Version              Architecture Description +++-===================-====================-============-===================================================================== un  linuxcnc            <none>               <none>       (no description available) un  linuxcnc-dev        <none>               <none>       (no description available) un  linuxcnc-doc        <none>               <none>       (no description available) ii  linuxcnc-doc-en     1:2.8.4.1.gb7824717b all          motion controller for CNC machines and robots (English documentation) ii  linuxcnc-doc-es     1:2.8.4.1.gb7824717b all          controlador de movimiento para máquinas CNC y robots (Español). ii  linuxcnc-doc-fr     1:2.8.4.1.gb7824717b all          motion controller for CNC machines and robots (French documentation) un  linuxcnc-sim        <none>               <none>       (no description available) un  linuxcnc-sim-dev    <none>               <none>       (no description available) ii  linuxcnc-uspace     1:2.8.4.1.gb7824717b amd64        motion controller for CNC machines and robots ii  linuxcnc-uspace-dev 1:2.8.4.1.gb7824717b amd64        PC based motion controller for real-time Linux

Here is my HAL file:
Code:
# Generated by stepconf 1.1 at Sat Oct 29 20:03:48 2022 # If you make changes to this file, they will be # overwritten when you run stepconf again loadrt [KINS]KINEMATICS loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS loadusr -W lcec_conf /home/sorvi/Desktop/Lathe/ethercat-conf.xml loadrt lcec loadrt hal_parport cfg="0 out" setp parport.0.reset-time 5000 loadrt stepgen step_type=0,0 addf parport.0.read base-thread addf stepgen.make-pulses base-thread addf parport.0.write base-thread addf parport.0.reset base-thread addf lcec.read-all servo-thread addf stepgen.capture-position servo-thread addf motion-command-handler servo-thread addf motion-controller servo-thread addf stepgen.update-freq servo-thread addf lcec.write-all servo-thread net spindle-cmd-rpm     <= spindle.0.speed-out net spindle-cmd-rpm-abs <= spindle.0.speed-out-abs net spindle-cmd-rps     <= spindle.0.speed-out-rps net spindle-cmd-rps-abs <= spindle.0.speed-out-rps-abs net spindle-at-speed    => spindle.0.at-speed net xstep           => parport.0.pin-02-out setp parport.0.pin-02-out-reset 1 net xdir            => parport.0.pin-03-out net zstep           => parport.0.pin-06-out setp parport.0.pin-06-out-reset 1 net zdir            => parport.0.pin-07-out setp stepgen.0.position-scale [JOINT_0]SCALE setp stepgen.0.steplen 1 setp stepgen.0.stepspace 0 setp stepgen.0.dirhold 70000 setp stepgen.0.dirsetup 70000 setp stepgen.0.maxaccel [JOINT_0]STEPGEN_MAXACCEL net xpos-cmd joint.0.motor-pos-cmd => stepgen.0.position-cmd net xpos-fb stepgen.0.position-fb => joint.0.motor-pos-fb net xstep <= stepgen.0.step net xdir <= stepgen.0.dir net xenable joint.0.amp-enable-out => stepgen.0.enable setp stepgen.1.position-scale [JOINT_1]SCALE setp stepgen.1.steplen 1 setp stepgen.1.stepspace 0 setp stepgen.1.dirhold 70000 setp stepgen.1.dirsetup 70000 setp stepgen.1.maxaccel [JOINT_1]STEPGEN_MAXACCEL net zpos-cmd joint.1.motor-pos-cmd => stepgen.1.position-cmd net zpos-fb stepgen.1.position-fb => joint.1.motor-pos-fb net zstep <= stepgen.1.step net zdir <= stepgen.1.dir net zenable joint.1.amp-enable-out => stepgen.1.enable net estop-out <= iocontrol.0.user-enable-out net estop-out => iocontrol.0.emc-enable-in loadusr -W hal_manualtoolchange net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared

Here is my .XML file
Code:
<masters> <master idx="0" appTimePeriod="1000000" refClockSyncCycles="5"> <slave idx="0" type="EK1100"/> <slave idx="1" type="EL2004"/>     <slave idx="2" type="EL1004"/> <slave idx="3" type="EL1124"/> </master> </masters>

Please Log in to join the conversation.

More
4 years 1 day ago #255407 by rodw
Code:
Failed to open /dev/EtherCAT0: Permission denied

You missed the last steps in the sticky. Do everything at the end where it says
Code:
To ensure the ethercat port has permissions on startup. Create a udev rule
 

Please Log in to join the conversation.

More
4 years 23 hours ago #255437 by O.R
Now there is permission for eth0 and Linuxcnc starts. Linuxcnc shows notifiaction "LCEC: Invalid appTimePeriod of 1000000 for master 0 (should be 1048000)." I tought 1000000 is more than enough, should i rise Servo period or is there some other problem?

Please Log in to join the conversation.

More
4 years 22 hours ago #255442 by tommylight

Now there is permission for eth0 and Linuxcnc starts. Linuxcnc shows notifiaction "LCEC: Invalid appTimePeriod of 1000000 for master 0 (should be 1048000)." I tought 1000000 is more than enough, should i rise Servo period or is there some other problem?
It is telling you exactly what it should be, 1048000.
Although not sure if that is regarding the LinuxCNC or the ethercat master, but it is easier to set it in the ini file for LinuxCNC and give it a try.
it is named
servo_period under the [EMCMOT] section.

Please Log in to join the conversation.

More
4 years 20 hours ago #255460 by db1981
the apptimeperiod in the ethercat_conf.xml file has to match the Servo Period from the INI file.

Please Log in to join the conversation.

More
4 years 17 hours ago #255481 by O.R
I changed apptimeperiod and Servo Period to 1048000 and no error messages. I made simply HAL configuration led blink test with EL1004 and it seems to work. 

Is there some kind of pulse counter in LinuxCNC for encoder testing, i thought i will next test the EL1124 if it could handle my linear encoder. I thought i would compare pulse counts in different axis speeds and see if there is any pulse count difference in same movement distance.

Please Log in to join the conversation.

More
4 years 16 hours ago #255484 by db1981
oh..

counting encoders or linear scales with digital inputs will not work.
For this usecase the ec system is not designed.
You will need an counter in hardware like EL5101 or EL5152 etc..
Counting with D Inputs is to slow for this. The Ethercat cycle time is ~ 1ms/ 1 khz.
This means that you only will get new data in 1ms steps. For an encoder with an physical resolution of 0.005 , this will in best case allow an max speed of 5 per second.
But to get this, the high level has to be present at the right position in the 1ms cylce (when input data is read out) and has to be long enought to get recognized...
Additional an normal Input like el1124 etc. has no distributed clocks, caused by this them are useless for interpolation, because the readout is not at the same position in time....

Normaly an hardware counter (EL5xxx / par port) runs at >= 100 khz, to be able to count all pulses.

Please Log in to join the conversation.

More
4 years 16 hours ago #255490 by O.R
Ok, CORBETT mentioned that " Another user here on the forum named Dan (sqmathlete) has gotten the EL1124's to work with an encoder. " so that's why thought i could also try EL1124 for encoder.

Please Log in to join the conversation.

More
4 years 13 hours ago #255522 by CORBETT
db1981
Dominik, you're the Man... Always glad to see you here    I have more questions for you in the future, just too busy tonight.

O.R
Dominik is 100% correct about the hardware encoding and using the EL5xxx terminals, but you can add the "encoder" component to LCNC in HAL for "software" encoding.

You are keeping your existing stepper setup with the base-thread.  Simply add the "Encoder" component to LCNC and tie the EL1124 pins to the "encoder" pins in LCNC.  Like I said before this is way slower than using the EL5151, as this way is "software" encoding rather than "hardware" encoding like Dominik was explaining.
I am busy working but will check back at some point.  Dominik or Tom will be able to explain the encoder component that you need to add in your HAL file if I am not back in time.
*EDIT*
I forgot to add that Dan would have had to do it this way, there is no other way than using the "encoder" component while using a EL1124 that I could think of. 


ROD WEBSTER
Rod if you see this, since last night I have built 8 complete systems without fail.  Super quick to do even compared to EC-Debianize way.  I still get tripped up not doing a "sudo update-ethercat-config".

Please Log in to join the conversation.

More
3 years 11 months ago #255628 by CORBETT
O.R
I went back and re-read Dominiks post and yeah, he is right about the speed for digital input, which that is what I had mentioned in the beginning.  I knew you would only get slow speed at best as it was my problem, and why I got the EL5151 problem worked out eventually.  You can still try the LCNC software component way to see if it will even work, but you are going to be stuck with getting a EL5151 or 5101 for each axis in the long run.

Please Log in to join the conversation.

Time to create page: 2.978 seconds
Powered by Kunena Forum