Advanced Search

Search Results (Searched for: )

  • andrax
  • andrax's Avatar
Today 17:33

Technical questions about CIA402 and homecomp.comp on A6

Category: EtherCAT

I have continued to work on this issue.
Since I don't know “C,” I asked chatgpt for help. Unfortunately, with limited success. On the one hand, chatgpt provides good suggestions for implementation, but on the other hand, it suffers from Alzheimer's. It constantly forgets important components when creating the code. 
So it's useless as a programming aid.
Nevertheless, after many attempts, I managed to create a code that basically corresponds to my ideas of the logical sequence. Unfortunately, it cannot be created and crashes with massive errors. 
Could someone please help me troubleshoot this?
component cia402_safety_homecomp "cia402 homing module";

description """
A homing module for cia402 devices buildable with halcompile.
This module should be used with the provided cia402.comp

\\fBHOMING_BASE\\fR must be #defined and must point to a valid homing.c file,
an example of a customized homing module is built. This module
creates input hal pins joint.n.request-cia-homing that enables an
alternate joint homing state machine for requested joints. A hal output
pin joint.N.is_cia-homing verifies selection"

If \\fBHOMING_BASE\\fR is not #defined, an actual homing scheme is
\\fBnot\\fR implemented but all necessary functions are included as
skeleton code. (All joints are effectively homed at all times and
cannot be unhomed).

See the source code file: src/emc/motion/homing.c for the baseline
implementation that includes all functions for the default \\fBhomemod\\fR
module.

This cia402 homing component can be built and installed with
halcompile and then substituted for the default homing module
(\\fBhomemod\\fR) using:
Sor by inifile setting: \\fB[EMCMOT]HOMEMOD=user_homecomp\\fR

\\fBNote:\\fR If using a deb install:
1) halcompile is provided by the package linuxcnc-uspace-dev
""";

pin out bit is_module = 1; // required by halcompile
pin out bit homing_error; // new pin to signal homing error
pin in float cia_homing_timer1; // Timer for homing start timeout
pin in float cia_homing_timer2; // Timer for movement check timeout

license "GPL";
author "me and chatgpt";
option homemod;
option extra_setup;


/* To incorporate default homing.c file from a local git src tree:
** enable #define HOMING_BASE set to the path to the current homing.c file.
*/

#define HOMING_BASE /home/ich/linuxcnc/Sicherung/cia402/homing.c
#define STR(s) #s
#define XSTR(s) STR(s)

#include "motion.h"
#include "homing.h"

static char *home_parms;
RTAPI_MP_STRING(home_parms, "Example home parms");

// EXTRA_SETUP executed before rtapi_app_main()
EXTRA_SETUP()
{
    rtapi_print_msg(RTAPI_MSG_ERR, "HomeComp Started\n");
    return 0;
}

//=====================================================================
#ifdef HOMING_BASE
#define USE_HOMING_BASE XSTR(HOMING_BASE)

// Disable duplicate symbols from homing.c
#define CUSTOM_HOMEMODULE
#include USE_HOMING_BASE

// CIA Status Word
typedef union
{
    struct
    {
        unsigned char ReadyToSwitchOn : 1;
        unsigned char SwitchOn : 1;
        unsigned char OperationEnabled : 1;
        unsigned char Fault : 1;
        unsigned char VoltageEnabled : 1;
        unsigned char QuickStop : 1;
        unsigned char SwitchOnDisabled : 1;
        unsigned char Warning : 1;
        unsigned char keep1 : 1;
        unsigned char Remote : 1;
        unsigned char TargetReached : 1;
        unsigned char bit11 : 1;
        unsigned char HomingCompletedOutput : 1;
        unsigned char keep2 : 1;
        unsigned char keep3 : 1;
        unsigned char HomingComplete : 1;
    } b;
    hal_u32_t Word;
} Status_t;

typedef struct
{
    bool request_cia_homing;
    bool is_cia_homing;
    bool start_cia_homing;
    // CIA402 pins
    Status_t Status;
    float timer1; // Timer for start timeout
    float timer2; // Timer for movement check
    int step;     // safety state machine step
} cia_home_local_data;

static cia_home_local_data ciaH[EMCMOT_MAX_JOINTS];

// Data for per-joint CIA-Homing HAL pins
typedef struct
{
    hal_bit_t *request_cia_homing;
    hal_bit_t *is_cia_homing;
    hal_bit_t *start_cia_homing;
    hal_bit_t *homing_error;
    hal_u32_t *statusword;
    hal_float_t *timer1;
    hal_float_t *timer2;
} cia_one_joint_home_data_t;

typedef struct
{
    cia_one_joint_home_data_t cia_jhd[EMCMOT_MAX_JOINTS];
} cia_all_joints_home_data_t;

static cia_all_joints_home_data_t *cia_joint_home_data = 0;

//-------------------------------------------------------------
static int cia_makepins(int id, int njoints)
{
    int jno, retval;
    cia_one_joint_home_data_t *addr;

    cia_joint_home_data = hal_malloc(sizeof(cia_all_joints_home_data_t));
    if (!cia_joint_home_data)
    {
        rtapi_print_msg(RTAPI_MSG_ERR, "HOMING: malloc failed\n");
        return -1;
    }

    retval = 0;
    for (jno = 0; jno < njoints; jno++)
    {
        addr = &(cia_joint_home_data->cia_jhd[jno]);

        retval += hal_pin_bit_newf(HAL_IN, &(addr->request_cia_homing), id,
                                   "joint.%d.request-cia-homing", jno);
        retval += hal_pin_bit_newf(HAL_OUT, &(addr->is_cia_homing), id,
                                   "joint.%d.is-cia-homing", jno);
        retval += hal_pin_bit_newf(HAL_IO, &(addr->start_cia_homing), id,
                                   "joint.%d.start-cia-homing", jno);
        retval += hal_pin_bit_newf(HAL_OUT, &(addr->homing_error), id,
                                   "joint.%d.homing-error", jno);
        retval += hal_pin_u32_newf(HAL_IN, &(addr->statusword), id,
                                   "joint.%d.cia-statusword", jno);
        retval += hal_pin_float_newf(HAL_IN, &(addr->timer1), id,
                                     "joint.%d.homing-timer1", jno);
        retval += hal_pin_float_newf(HAL_IN, &(addr->timer2), id,
                                     "joint.%d.homing-timer2", jno);
    }
    return retval;
}

//-------------------------------------------------------------
static void cia_read_homing_in_pins(int njoints)
{
    int jno;
    cia_one_joint_home_data_t *addr;
    for (jno = 0; jno < njoints; jno++)
    {
        addr = &(cia_joint_home_data->cia_jhd[jno]);
        ciaH[jno].request_cia_homing = *(addr->request_cia_homing);
        ciaH[jno].Status.Word = *(addr->statusword);
        ciaH[jno].timer1 = *(addr->timer1);
        ciaH[jno].timer2 = *(addr->timer2);
    }
}

//-------------------------------------------------------------
static void cia_write_homing_out_pins(int njoints)
{
    int jno;
    cia_one_joint_home_data_t *addr;
    for (jno = 0; jno < njoints; jno++)
    {
        addr = &(cia_joint_home_data->cia_jhd[jno]);
        *(addr->is_cia_homing) = ciaH[jno].is_cia_homing;
        *(addr->start_cia_homing) = ciaH[jno].start_cia_homing;
        *(addr->homing_error) = homing_error; // global error flag
    }
}

//-------------------------------------------------------------
static int cia_1joint_state_machine(int joint_num)
{
    typedef enum
    {
        CIA_IDLE = 0,
        CIA_BEGIN = 1,
        CIA_START_WAIT = 2,
        CIA_RUNNING = 3,
        CIA_FINISHED = 4,
    } cia_home_state_t;

    static cia_home_state_t chomestate[EMCMOT_MAX_JOINTS] = {0};
    static float t_start[EMCMOT_MAX_JOINTS] = {0};
    static float t_run[EMCMOT_MAX_JOINTS] = {0};
    cia_home_state_t nextcstate;

    if (H[joint_num].home_state == HOME_IDLE)
        return 0;

    if ((H[joint_num].home_state == HOME_START) && (chomestate[joint_num] == CIA_IDLE))
    {
        H[joint_num].homing = 1;
        H[joint_num].homed = 0;
        chomestate[joint_num] = CIA_BEGIN;
        ciaH[joint_num].step = 0;
        t_start[joint_num] = 0;
        t_run[joint_num] = 0;
        homing_error = 0;
    }

    switch (chomestate[joint_num])
    {
    case CIA_BEGIN:
        // initialize parameters
        rtapi_print("CIA homing: init parameters\n");
        t_start[joint_num] = 0;
        t_run[joint_num] = 0;
        chomestate[joint_num] = CIA_START_WAIT;
        break;

    case CIA_START_WAIT:
        t_start[joint_num] += H[joint_num].servo_period;
        // check if CIA402 bit9 (Remote) set to start homing
        if (ciaH[joint_num].Status.b.Remote)
        {
            chomestate[joint_num] = CIA_RUNNING;
        }
        else if (t_start[joint_num] > ciaH[joint_num].timer1)
        {
            rtapi_print("CIA homing: start timeout\n");
            homing_error = 1;
            H[joint_num].homing = 0;
            H[joint_num].home_state = HOME_IDLE;
            chomestate[joint_num] = CIA_IDLE;
            return 0;
        }
        break;

    case CIA_RUNNING:
        t_run[joint_num] += H[joint_num].servo_period;
        // safety check: axis movement
        if (!H[joint_num].joint_moving) // Example: joint_moving needs to be replaced by real check
        {
            rtapi_print("CIA homing: axis not moving, error\n");
            homing_error = 1;
            H[joint_num].homing = 0;
            H[joint_num].home_state = HOME_IDLE;
            chomestate[joint_num] = CIA_IDLE;
            return 0;
        }
        // check for CIA homing completion
        if (ciaH[joint_num].Status.b.HomingCompletedOutput &&
            ciaH[joint_num].Status.b.HomingComplete)
        {
            chomestate[joint_num] = CIA_FINISHED;
        }
        else if (t_run[joint_num] > ciaH[joint_num].timer2)
        {
            rtapi_print("CIA homing: movement timeout\n");
            homing_error = 1;
            H[joint_num].homing = 0;
            H[joint_num].home_state = HOME_IDLE;
            chomestate[joint_num] = CIA_IDLE;
            return 0;
        }
        break;

    case CIA_FINISHED:
        rtapi_print("CIA homing complete\n");
        ciaH[joint_num].start_cia_homing = 0;
        H[joint_num].homing = 0;
        H[joint_num].homed = 1;
        H[joint_num].home_state = HOME_IDLE;
        chomestate[joint_num] = CIA_IDLE;
        return 0;

    case CIA_IDLE:
    default:
        break;
    }
    ciaH[joint_num].is_cia_homing = (chomestate[joint_num] != CIA_IDLE);
    return 1;
}

//-------------------------------------------------------------
// Augment base functions
int homing_init(int id, double servo_period, int n_joints, int n_extrajoints, emcmot_joint_t *pjoints)
{
    int retval = base_homing_init(id, servo_period, n_joints, n_extrajoints, pjoints);
    retval += cia_makepins(id, n_joints);
    return retval;
}

void read_homing_in_pins(int njoints)
{
    base_read_homing_in_pins(njoints);
    cia_read_homing_in_pins(njoints);
}

void write_homing_out_pins(int njoints)
{
    base_write_homing_out_pins(njoints);
    cia_write_homing_out_pins(njoints);
}

// do_homing with CIA safety
bool do_homing(void)
{
    int joint_num;
    int homing_flag = 0;
    bool beginning_allhomed = get_allhomed();

    do_homing_sequence();
    for (joint_num = 0; joint_num < all_joints; joint_num++)
    {
        if (!H[joint_num].joint_in_sequence) continue;
        if (!GET_JOINT_ACTIVE_FLAG(&joints[joint_num])) continue;

        if (ciaH[joint_num].is_cia_homing)
            homing_flag += cia_1joint_state_machine(joint_num);
        else
            homing_flag += base_1joint_state_machine(joint_num);
    }

    homing_active = (homing_flag > 0) ? 1 : 0;

    if (!beginning_allhomed && get_allhomed())
    {
        homing_active = 0;
        return 1;
    }

    return 0;
}

//=====================================================================
// EXPORT_SYMBOLS
EXPORT_SYMBOL(homeMotFunctions);
EXPORT_SYMBOL(homing_init);
EXPORT_SYMBOL(do_homing);
EXPORT_SYMBOL(get_allhomed);
EXPORT_SYMBOL(get_homed);
EXPORT_SYMBOL(get_home_is_idle);
EXPORT_SYMBOL(get_home_is_synchronized);
EXPORT_SYMBOL(get_home_needs_unlock_first);
EXPORT_SYMBOL(get_home_sequence);
EXPORT_SYMBOL(get_homing);
EXPORT_SYMBOL(get_homing_at_index_search_wait);
EXPORT_SYMBOL(get_homing_is_active);
EXPORT_SYMBOL(get_index_enable);
EXPORT_SYMBOL(read_homing_in_pins);
EXPORT_SYMBOL(do_home_joint);
EXPORT_SYMBOL(do_cancel_homing);
EXPORT_SYMBOL(set_unhomed);
EXPORT_SYMBOL(set_joint_homing_params);
EXPORT_SYMBOL(update_joint_homing_params);
EXPORT_SYMBOL(write_homing_out_pins);

// Clean up optional
#undef XSTR
#undef STR
#undef HOMING_BASE
#undef USE_HOMING_BASE
#undef CUSTOM_HOMEMODULE

#endif // HOMING_BASE
  • Jensner
  • Jensner
Today 17:33

After Month of machining without any problems -Positionerror and no more moving

Category: General LinuxCNC Questions

OK, looks, like the old MESA Card has an issue.
I reconnected the old one and same problem.
Now I installed the second one and everything works fine.

So it's a new experience that MESA cards can also break down sometimes. 

Thanks a lot to all.
Next project ist coming with upgrade to an ATC Spindle with a Cabinet.

best regards.
Jens 
  • jblanscett
  • jblanscett
Today 17:22
Replied by jblanscett on topic Trying to set up position control mode

Trying to set up position control mode

Category: HAL

Yes, we are the same team. I have attached photos. We have also looked at the signals from an oscilloscope and are getting nice clear step waves.

Thanks for the quick reply!
  • andrax
  • andrax's Avatar
Today 17:21
Replied by andrax on topic CiA 402 Folder Missing

CiA 402 Folder Missing

Category: EtherCAT

You have a lot of synchronization errors.
What kind of cable are you using?
What is your topology?
Do you have EMC problems?

[70592.094690] EtherCAT ERROR 0-0: AL status message 0x001A: “Synchronization error”.
  • DerKlotz
  • DerKlotz
Today 17:04 - Today 17:32

Need to install newest Linux Debian Bookworm with the newest Linuxcnc preempt-rt

Category: Installing LinuxCNC

This worked pretty good for me and i can easy install python3-probe basic and Python3 qtpyvcp.... perfect

There i still a but... if you have a look at the attached photo why do i have no mm after my coordinates or depth? Ist the axis_mm from the sim
  • Dudelbert
  • Dudelbert
Today 16:31

Considering a Full Rewire on a Working Schaublin 125 CNC

Category: Turning

Hi,

@Rotary: I tried the minimal HAL you provided. I had to change the number of encoders from 5 to 4, but then it starts up fine as well. However, it does not change the Smart Serial problem—only channel 4 detects any cards.

The one 7i84 that was detected but gave undervoltage errors now works flawlessly. I did not change anything, so I am not sure why it did not work two days ago, but I will take the small win.

I also made some images of the wiring. I am not sure how clear they are. All the yellow cables are 24V, the red ones are 5V, and the black ones are GND.
  • tommylight
  • tommylight's Avatar
Today 16:27
Replied by tommylight on topic Trying to set up position control mode

Trying to set up position control mode

Category: HAL

I suspect interference, so pictures of the wiring from Mesa to drives might help.
-
Why are there two posts with the same hardware and same issues by two members?
Are you the same team?
If yes, continue here.
Thank you.
  • tommylight
  • tommylight's Avatar
Today 16:17
Replied by tommylight on topic Mesa StepGen ouputs with Yaskawa servos

Mesa StepGen ouputs with Yaskawa servos

Category: Driver Boards

I suspect interference, so pictures of the wiring from Mesa to drives might help.
  • PCW
  • PCW's Avatar
Today 16:05

After Month of machining without any problems -Positionerror and no more moving

Category: General LinuxCNC Questions

Sounds like a hardware or wiring issue with the drives or 7I96S step/dir outputs, as there is no motion
and no obvious errors.

Is there a common enable for the drives?

Can you increase the following error limits and try jogging in each direction to see if the DIR outputs
are  at valid voltage levels and change direction on reversals?



 
  • Jensner
  • Jensner
Today 16:03

After Month of machining without any problems -Positionerror and no more moving

Category: General LinuxCNC Questions

Short Update.
Fortunately, I had a second MESA 7I96s here. I flashed it to the right firmware and installed it.
After that, it seems that everything works fine now.

Will replug the old one just to check if there was no connection-problem.
I will give a feedback how it will go.

 
  • jblanscett
  • jblanscett
Today 15:45
Trying to set up position control mode was created by jblanscett

Trying to set up position control mode

Category: HAL

Hi all,

We are working on a retrofit of an older Fryer lathe. We are using a Mesa 7i95 board and are trying to connect our SGDH-10AE Yaskawa drivers to the board in position control mode. We have managed to make the axes move in what seems like position control, but when changing the jog speed in AXIS, it also changes where the motion stops. I believe that I have made a mistake, or many, in trying to set up our HAL code. We generated the HAL code from Pnfconf and then made adjustments to try to change the Stepgen to position control mode. I was hoping that we could get some help in looking at our Hal and Ini files to see where we may have gone wrong. Or if someone has successfully implemented it, we could look at their files to see if we can figure it out. 

Thanks!

Jblanscett
  • Jensner
  • Jensner
Today 15:26 - Today 15:40

After Month of machining without any problems -Positionerror and no more moving

Category: General LinuxCNC Questions

I tried to copy the whole starting-log out of the Terminal, but i can`t becouse i got the error-message "there are too many links in this post...." 

So i attached an file.
 

File Attachment:

File Name: Error-Log.txt
File Size:6 KB


Also here the readhmid from the MESA 7i96s
 

File Attachment:

File Name: MESA7i96s_...hmid.txt
File Size:7 KB
  • Jensner
  • Jensner
Today 15:19 - Today 15:31

After Month of machining without any problems -Positionerror and no more moving

Category: General LinuxCNC Questions

Hi andy,

there is no movement at all.
At the wizard i testet every axle (X, Y, Z) and not just one moved.
At the HAL-Scope i could see the feedrates on every axle, but no movement. 

Every tim I try to do the reference, i get this error
Motor 2 Positionssfehler

In the Terminal is the following:
[qtpyvcp.actions.machine_actions][INFO]  Homing all axes (machine_actions.py:640)
Motor 2 Positionssfehler
emc/task/taskintf.cc 976: Error on joint 2, command number 96
[qtpyvcp.plugins.notifications][ERROR]  Motor 2 Positionssfehler (notifications.py:139)
 
  • hmearns
  • hmearns
Today 15:17
Replied by hmearns on topic Mesa StepGen ouputs with Yaskawa servos

Mesa StepGen ouputs with Yaskawa servos

Category: Driver Boards

Johnbl,

I am working on a lathe with SGDH-10AE drives and a Mesa 7i95 using step and direction with position control on the drive. Would you be willing to supply your hal, ini files from Linuxcnc and your parameter files from your drive?

We have some control over the drives and have the step and direction wired up as suggested here. Our linuxcnc is not working as we would like and the drive isn't producing consistent results. I think the pulses are coming out of the 7i95 too quickly. we do have some level of speed control through jog limit, but not what we would like and for some reason we don't get consistent distances depending on speed. We are having to tune the drive for position control which I thought would not be required initially. We aren't using feedback to the mesa, only internal to the drive.

Thanks,

Howard
Displaying 1 - 15 out of 283234 results.
Time to create page: 2.248 seconds
Powered by Kunena Forum