CN migration OS

ca marche a moitié, j ai bien 2 instances, l interface monte bien mais un message d erreur “stepgen-ninja.1 bind failes adress already in use”

Y a pas de copier/merder dans la config ? :innocent: :sweat_smile:, genre deux fois la même adresse ?

Sinon il faut peut être changer le port aussi, car sur le PC ça fait 2 trucs sur le même port

loadrt stepgen-ninja ip_address=« 192.168.51.177:8888;192.168.52.177:8889 »

Il faudrait du coup aussi changer le port sur la carte par le port série

Bravo Thomas

en changeant simplement dans le . hal, je n’ai plus l’erreur. Il faut bien sûr mettre la carte a jour mais la piste semble etre la bonne.

Prochaine etape, verifier que je recupere le bon signal electrique sur les pin de la carte.

Tu ne m’as pas repondu pour Samedi. Tu viens?

@Thomas J’imagine qu il va falloir creer une machine en utilisant l’utilitaire orienté “mesa’ au moins pour avoir ce qui est specifique mesa. J’ai essaye de creer une machine mais ???

As tu une idee quelles options choisir?

Je ne pense pas qu’il soit utile d’utilisé l’utilitaire « mesa » car nous n’avons pas vraiment de carte mesa.

Pour moi c’est plutôt de l’adaptation du fichier existant en suivant la trame exemple donné par stepper-ninja.

Pour le moment, je n’ai pas encore compris comment ca fonctionnait ce qui m’empeche d’avancer. Avec le port parallele, c’est le Pc qui envoie les impulsions vers la breakboard. Avec cette nouvelle architecture, j’imagine que le Pc envoie des ordres X,Y,Z1,Z2 a la carte qui les transforme en impulsion a envoyer a la breakboard.

Je n’ai pas trouvé dans les exemples comment on indiquait à Linuxcnc ce changement de comportement. Dans ma petite tete, je me dit aussi que ce n’est plus a linuxcnc qu il faut dire ou se trouve les differentes Pin mais il faut le dire au pico, ou se trouve la Pin “dir” de l’axe Z1, ou se trouve la pin de l’emergency stop … or dans le config.h du pico on dit quelle Pin est une pin de “pulse”, quelle pin est une pin output, mais on ne dit pas quel est la pin d’output du e-stop, ou la pin de “pulse” de l’axe Z1 par exemple. C’est peut etre linuxcnc qui envoie cette info au pico, mais je n’ai pas non plus trouvé le maping entre ce qu’on trouve au niveau du hal monitor (15 input et 8 putput par carte) et les GPIO du pico ni comment on envoie cette info au pico. Dans les exemples, je n’ai trouvé nul part comment on donne cette info au pico.

Il me semble aussi que l’on a oublie une PIN +3.3V dans le cablage car avec parport, les inters de limite d’axe; de palpeur, de e-stop etaient alimentés en 5V qui nous venait d’un transfo. Avec le Pico je pense que ce sera alimenté en 3V. On a pas recupere le 3.3V sur le pico. Ou alors il faudra changer le transfo 5V en transfo 3V3.

Effectivement c’est dans le pico qu’on fait la correspondance des pins, dans le fichier config.h

#define stepgen_steps {PIN_1, PIN_4, PIN_6, PIN_9, PIN_19}
#define stepgen_dirs {PIN_2, PIN_5, PIN_7, PIN_10, PIN_20}

A partir de là, les pins vont être « utilisées » par paire (une step + une dir) pour chaque instance de stepgen.
Par exemple, la commande ci dessous défini le premier contrôleur moteur de la première instance de stepgen-ninja comme étant X.
net Xpos stepgen-ninja.0.stepgen.0.command
Ce sont donc les PIN_1 et PIN_2 du pico qui seront utilisé pour step et dir respectivement.
Il n’y a pas besoin de déclarer plus que ça dans le fichier HAL

Pour la gestion des I/O, d’après le document ci dessous :

stepgen-ninja.0.input.gpX - (BIT, OUT) - Digital input state (X = pin number)
stepgen-ninja.0.output.gpX - (BIT, IN) - Digital output control (X = pin number)

Le pin number provenant du fichier config.h

Pour la partie alim, il me semblait que cela était gérer par la breakout board. Il est prévu une alim 5V sur la carte pour alimenter le pico.

@pinatl , je suis finalement passé en coup de vent à l’ACoLab cet après midi.

J’en ai profiter pour prendre le nouveau PC de la CN pour essayer de faire fonctionner la carte réseau. J’ai réussi à me débarrasser des erreurs dans dmesg par contre la carte ne prends qu’une adresse IPv6.

Je suis à cours d’idée. Ma dernière chance serait de faire un update complet de Debian pour passer de 12 (bookworm) à 13 (trixie). Cet update n’étant pas réversible, y voit tu un problème potentiel ?

Pas de pb, si il faut faire machine arrière je repartirai de zero, je suis habitué.

Merci pour tes eclaircissements pour les pins. J avoue que le coup de la paire dans l’ ordre de déclaration du config.h je n y aurais pas pense. Si je suis ton raisonnement ça répond aussi a mon problème de mappings des io. En fait c est en fonction de l ordre de déclaration dans config.h. la stepgen 0.input.0 est la première pin déclarée dans config h de la première carte. C est ça?

Malgré de nombreux essais, je n’arrive pas à faire fonctionner la nouvelle carte réseau sur le PC et me déclare vaincu. :face_with_crossed_out_eyes:

Mince, pas fun. Pourrions nous nous voir un mercredi ou samedi avant ou apres les vacances (pas aujourd’hui) pour décider de la suite a donner. Perso avant d investir dans une nouvelle carte, j’aimerais bien mettre en evidence avec mon Pc que le systeme fonctionne. Je n’ai toujours pas reussi cette étape qui me parait importante.

Il me semble qu il faudra un tout petit peu modifier le cablage a cause du 3.5V. Je ne vois pas comment la breakboard gererait ca. C’est la raison pour laquelle la phase ce validation me parait incontournable avant de toucher a la machine.

question subsidiaire : As tu monté en version de debian? devons nous faire un re-image?

J’ai effectivement fait la mise à jour vers Debian 13 (Trixie) mais je ne pense pas qu’il soit nécessaire de réinstaller LunixCNC.

En electronique numérique à partir du moment le niveau du signal est supérieur à Vcc/2 (tension d’alimentation), cela est considérer comme un niveau haut. Comme 3.3V est supérieur à 2.5V, ça devrait coller.

As tu essayé de branché un +5V sur une des pin d’entrée pour voir si ça remontait dans LinuxCNC ?

Est ce que le 20/12 te conviendrait ?

Ce n’est pas le niveau du seuil en sortie dont je parle mais du niveau maxi en entrée. La tension appliquée sur une broche GPIO ne doit jamais dépasser 3,3 V (ni descendre sous 0 V).

Malheureusement oui avant de me rappeler que sur un Pi on ne devait pas depasser 3.3V. Ca n’a pas duré longtemps mais on verra. J’ai ensuite essayé avec 3.3V sur une autre PIN et ca ne remonte pas dans le moniteur “hal” de linuxcnc.

Oui c’est noté dans mon agenda,.14:30 ca te va?

A priori les entrées du Pico 2 sont compatible avec le 5V. page 1335 du document ci dessous

et page 22 de celui-ci

ben j’ai pas reussi a trouver la compatibilité 5V par contre j’ai trouvé le 3.3V. Mais si tu dis que ca accepte le 5V, ca nous arrange pas mal.

Là, c’est très facile d’utiliser un simple pont diviseur avec 2 résistances

Avec une 330 ohms + une 220 ohms, sous 5V, ça fait une charge de 9.0mA, et aux bornes de la 330 ohms tu as 3V

Avec 330 ohms + 150 ohms, la tension sera de 3.4 volts.. Un simple potentiomètre de quelques centaines d’ohms ou 1K fait aussi parfaitement le job…

Sinon, il existe des ‹ level shifter › pour quelques queues de cerises.

Ok pour 14h30 :+1:

Log

LINUXCNC - 2.9.4
Machine configuration directory is '/home/pierre/stepper-ninja/hal-driver/test_config'
Machine configuration file is 'stepper-ninja.ini'
Starting LinuxCNC...
emc/iotask/ioControl.cc 786: can't load tool table.
linuxcnc TPMOD=tpmod HOMEMOD=homemod EMCMOT=motmod
Note: Using POSIX realtime
Found file(REL): ./stepper-ninja.hal
stepgen-ninja: module_init
stepgen-ninja: tx_size: 41
stepgen-ninja: rx_size: 48
Parsed IP: 192.168.52.177, Port: 8888
stepgen-ninja.0: init_socket
stepgen-ninja.0: binding to 192.168.52.177:8888
stepgen-ninja.0: init_socket ready..
stepgen-ninja.0: hal_export_funct for watchdog-process: 0 init...
stepgen-ninja.0: hal_export_funct for watchdog-process: 0
stepgen-ninja.0: hal_export_funct for process-send 0 init...
stepgen-ninja.0: hal_export_funct for process_send: 0
stepgen-ninja.0: hal_export_funct for process-recv: 0 init...
stepgen-ninja.0: hal_export_funct for process_recv: 0
stepgen-ninja: component ready.
Found file(lib): /usr/share/linuxcnc/hallib/axis_manualtoolchange.hal
Found file(lib): /usr/share/linuxcnc/hallib/simulated_home.hal
MOTION: setting Traj cycle time to 1000000 nsecs
MOTION: setting Servo cycle time to 1000000 nsecs
Max frequency: 172.4130 KHz
max pulse_width: 4000nS
min pulse_width: 60nS
total_cycles: 200000
high_cycles: 580
pio_index: 261
stepgen-ninja.0: No transmission, check connection settings and restart Linuxcnc
stepgen-ninja.0: No transmission, check connection settings and restart Linuxcnc

note: MAXV     max: 166.667 units/sec 10000.002 units/min
note: LJOG     max: 166.667 units/sec 10000.002 units/min
note: LJOG default: 166.667 units/sec 10000.002 units/min
note: jog_order='XYZ'
note: jog_invert=set()
Shutting down and cleaning up LinuxCNC...
task: 8309 cycles, min=0.000012, max=0.009368, avg=0.001103, 0 latency excursions (> 10x expected cycle time of 0.001000s)
stepgen-ninja.0: Exiting component
MOTION: cleanup_module() started.
MOTION: cleanup_module() finished.
Note: Using POSIX realtime

stepper-ninja.hal

loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS 
loadrt stepgen-ninja ip_address="192.168.52.177:8888"

addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf stepgen-ninja.0.watchdog-process servo-thread
addf stepgen-ninja.0.process-send servo-thread
addf stepgen-ninja.0.process-recv servo-thread

net Xpos joint.0.motor-pos-cmd 
net Ypos joint.1.motor-pos-cmd 
net Zpos joint.2.motor-pos-cmd

net Xpos stepgen-ninja.0.stepgen.0.command
net Ypos stepgen-ninja.0.stepgen.1.command
net Zpos stepgen-ninja.0.stepgen.2.command

net Xfdb stepgen-ninja.0.stepgen.0.feedback joint.0.motor-pos-fb
net Yfdb stepgen-ninja.0.stepgen.1.feedback joint.1.motor-pos-fb
net Zfdb stepgen-ninja.0.stepgen.2.feedback joint.2.motor-pos-fb

setp stepgen-ninja.0.stepgen.0.step-scale [JOINT_0]INPUT_SCALE
setp stepgen-ninja.0.stepgen.1.step-scale [JOINT_1]INPUT_SCALE
setp stepgen-ninja.0.stepgen.2.step-scale [JOINT_2]INPUT_SCALE

# ************ stepgen settings ******************************
setp stepgen-ninja.0.stepgen.0.enable 1
setp stepgen-ninja.0.stepgen.1.enable 1
setp stepgen-ninja.0.stepgen.2.enable 1
setp stepgen-ninja.0.stepgen.3.enable 1

setp stepgen-ninja.0.stepgen.pulse-width [STEPGEN-NINJA]PULSE_WIDTH   # nanosec

# ************ PWM setting **************************
#setp stepgen-ninja.0.pwm.max-scale [STEPGEN-NINJA]PWM_MAXIMUM_SCALE
#setp stepgen-ninja.0.pwm.min-limit [STEPGEN-NINJA]PWM_MINIMUM_LIMIT
#setp stepgen-ninja.0.pwm.frequency [STEPGEN-NINJA]PWM_FREQUENCY

# ************ encoder setting **********************
#setp stepgen-ninja.0.encoder.0.scale [STEPGEN-NINJA]ENCODER_0_SCALE

setp axis.x.jog-scale 0.01
setp axis.y.jog-scale 0.01
setp axis.z.jog-scale 0.01

#net encoder-counts <= stepgen-ninja.0.encoder.0.scaled-count
#net encoder-counts => axis.x.jog-counts
#net encoder-counts => axis.y.jog-counts
#net encoder-counts => axis.z.jog-counts

net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared
net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed

net estop-loop-in iocontrol.0.user-enable-out stepgen-ninja.0.io-ready-in 
net estop-loop-out iocontrol.0.emc-enable-in stepgen-ninja.0.io-ready-out

stepper-ninja.ini

# EMC controller parameters for a simulated machine.

# General note: Comments can either be preceded with a # or ; - either is
# acceptable, although # is in keeping with most linux config files.

# General section -------------------------------------------------------------
[EMC]
# Version of this INI file
VERSION = 1.1

# Name of machine, for use with display, etc.
MACHINE = LinuxCNC-HAL-SIM-AXIS

# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
# DEBUG = 0x7FFFFFFF
DEBUG = 0

# Sections for display options ------------------------------------------------
[DISPLAY]

# Name of display program, e.g., axis
DISPLAY = axis

# Cycle time, in seconds, that display will sleep between polls
CYCLE_TIME = 0.100

# Path to help file
HELP_FILE = doc/help.txt

# Initial display setting for position, RELATIVE or MACHINE
POSITION_OFFSET = RELATIVE

# Initial display setting for position, COMMANDED or ACTUAL
POSITION_FEEDBACK = ACTUAL

# Highest value that will be allowed for feed override, 1.0 = 100%
MAX_FEED_OVERRIDE = 1.2
MAX_SPINDLE_OVERRIDE = 1.0
# Prefix to be used
PROGRAM_PREFIX = /home/violazsolt/linuxcnc/nc_files

# Introductory graphic
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 0

#EDITOR = gedit

INCREMENTS = 1mm, .1mm, .01mm, .001mm
[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image
PROGRAM_EXTENSION = .py Python Script

png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python

# Task controller section -----------------------------------------------------
[TASK]

# Name of task controller program, e.g., milltask
TASK = milltask

# Cycle time, in seconds, that task controller will sleep between polls
CYCLE_TIME = 0.001

# Part program interpreter section --------------------------------------------
[RS274NGC]

# File containing interpreter variables
PARAMETER_FILE = sim_mm.var

# Motion control section ------------------------------------------------------
[EMCMOT]

EMCMOT = motmod

# Timeout for comm to emcmot, in seconds
COMM_TIMEOUT = 1.0

# BASE_PERIOD is unused in this configuration but specified in core_sim.hal
BASE_PERIOD = 0
# Servo task period, in nano-seconds
SERVO_PERIOD = 1000000

# section for main IO controller parameters -----------------------------------
[EMCIO]

# Name of IO controller program, e.g., io
EMCIO = io

# cycle time, in seconds
CYCLE_TIME = 0.100

# tool table file
TOOL_TABLE = sim_mm.tbl
TOOL_CHANGE_POSITION = 0 0 50.8

# Hardware Abstraction Layer section --------------------------------------------------
[HAL]

# The run script first uses halcmd to execute any HALFILE
# files, and then to execute any individual HALCMD commands.
#

# list of hal config files to run through halcmd
# files are executed in the order in which they appear
HALUI = halui
HALFILE = stepper-ninja.hal
HALFILE = axis_manualtoolchange.hal
HALFILE = simulated_home.hal

# list of halcmd commands to execute
# commands are executed in the order in which they appear
#HALCMD = save neta

# Single file that is executed after the GUI has started.  Only supported by
# AXIS at this time (only AXIS creates a HAL component of its own)
POSTGUI_HALFILE = test_postgui.hal

# Trajectory planner section --------------------------------------------------
[TRAJ]
COORDINATES = X Y Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
DEFAULT_LINEAR_VELOCITY = 166.6667
MAX_LINEAR_VELOCITY = 166.6667
DEFAULT_LINEAR_ACCELERATION = 1000
MAX_LINEAR_ACCELERATION = 1000
POSITION_FILE = position_mm.txt

[KINS]
KINEMATICS = trivkins
JOINTS = 3

[STEPGEN-NINJA]
# step pulse width
PULSE_WIDTH = 2900
STEPGEN_3_SCALE = 6400
# scale factor for encoder
ENCODER_0_SCALE = 0.25
# pwm output fequency
PWM_FREQUENCY = 10000
# pwm output scale (maximum value for a full scale output)
PWM_MAXIMUM_SCALE = 12500
# pwm output minimum duty cycle (minimum value to output)
PWM_MINIMUM_DUTY = 255

# Axes sections ---------------
[AXIS_X]
MAX_VELOCITY = 255
MAX_ACCELERATION = 1000
MIN_LIMIT = -254
MAX_LIMIT = 254

[AXIS_Y]
MAX_VELOCITY = 255
MAX_ACCELERATION = 1000
MIN_LIMIT = -254
MAX_LIMIT = 254

[AXIS_Z]
MAX_VELOCITY = 256
MAX_ACCELERATION = 1000
MIN_LIMIT = -50.8
MAX_LIMIT = 101.6

# Joints sections -------------
[JOINT_0]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 255
MAX_ACCELERATION = 1000
BACKLASH = 0.000
INPUT_SCALE = 1000
OUTPUT_SCALE = 1.000
MIN_LIMIT = -254
MAX_LIMIT = 254
FERROR = 1.27
MIN_FERROR = .254
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 127
HOME_LATCH_VEL = 25.4
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 1
HOME_IS_SHARED = 1

[JOINT_1]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 255
MAX_ACCELERATION = 1000
BACKLASH = 0.000
INPUT_SCALE = 1000
OUTPUT_SCALE = 1.000
MIN_LIMIT = -254
MAX_LIMIT = 254
FERROR = 1.27
MIN_FERROR = .254
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 127
HOME_LATCH_VEL = 25.4
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 1

[JOINT_2]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 255
MAX_ACCELERATION = 1000
BACKLASH = 0.000
INPUT_SCALE = 1000
OUTPUT_SCALE = 1.000
MIN_LIMIT = -50.8
MAX_LIMIT = 101.6
FERROR = 1.27
MIN_FERROR = .254
HOME_OFFSET = 25.4
HOME_SEARCH_VEL = 127
HOME_LATCH_VEL = 25.4
HOME_USE_INDEX = NO
HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 0
HOME_IS_SHARED = 1

Une piste pour peut être y comprendre quelque chose.

HAL Driver Errors: Check dmesg for UDP connection issues:

dmesg | grep stepgen-ninja

A lancer en parallèle que LinuxCNC dans un antre terminal