Advanced Search

Search Results (Searched for: )

  • PCW
  • PCW's Avatar
Today 19:48
Replied by PCW on topic Trying to set up position control mode

Trying to set up position control mode

Category: HAL

The wiring does not look right to me, Don't those drives have differential inputs?

If they are differential, the 7I95 Step/Dir connections are wrong.
  • Konstantin
  • Konstantin
Today 19:31
Replied by Konstantin on topic CiA 402 Folder Missing

CiA 402 Folder Missing

Category: EtherCAT

The cables I use are standard CAT5e patch cords, 1.5m long and the excess length is in loops.

The topology is as follows - one cables from the computer is connected to the first servo drives and all the others are daisy chained.

About the name of pin that @3404gerber mentioned. I was thinking if should I change the pin name from 'cia' to 'custom' but you have a working configuration with 'cia' in the name. Why should it be different with my cia402 home component? Perhaps, the name was updated after you got it working.
  • jblanscett
  • jblanscett
Today 19:23
Replied by jblanscett on topic Trying to set up position control mode

Trying to set up position control mode

Category: HAL

I checked on the drive side and it looks clean as well.
  • tommylight
  • tommylight's Avatar
Today 18:44

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

Category: General LinuxCNC Questions

You are welcomed, always.
Be mindful of the wiring and shielding, since your machine was working fine, i doubt you have interfernce from VFD/spindle as they do produce a lot of EMI, so try to arrange spindle and high voltage wiring as far from low power/signal wiring, also use ferrite beads on the spindle motor wires near the VFD.
  • tommylight
  • tommylight's Avatar
Today 18:37
Replied by tommylight on topic Maho MH-400 Retofit

Maho MH-400 Retofit

Category: Deutsch

Apparently not, despite having the same model.
The one you linked has motors on all axis and ballscrews, the one here from explanation has a single motor and a gearbox to switch between axis.
Can you post some pictures of the machine?
  • Jensner
  • Jensner
Today 18:26

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

Category: General LinuxCNC Questions

OK sounds nice.
I also didn`t think that this cards realy break.
So i will test this card on my new mill if it`s ready and hope it will work in a new envirement.

Thanks Tommy 
  • tommylight
  • tommylight's Avatar
Today 18:20
Replied by tommylight on topic Trying to set up position control mode

Trying to set up position control mode

Category: HAL

We have also looked at the signals from an oscilloscope and are getting nice clear step waves.

Check at the drive side.
  • tommylight
  • tommylight's Avatar
Today 18:19

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

Category: General LinuxCNC Questions


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

No they do not break, at least none of over 70 or 80 or more i have in daily use, they never break, never fail, in over 15 years.
Most of them are on huge industrial machines, some on plasma machines that are the worst environment regarding EMI, i have Mesa 7i92 wired through 6 meters of cable to plasma source with no BOB, directly to Mesa inputs, etc etc.
They always, always fail due to miss wiring or lack of proper shielding/grounding.
  • Bari
  • Bari's Avatar
Today 18:17
Robot Arm and Controller was created by Bari

Robot Arm and Controller

Category: CNC Machines

www.frtech.fr/

www.frtech.fr/Robotcontrolsystem

I heard that this controller runs on Linux. I only saw the web based interface to the controller so I did not reach a command line to be able to check. The robot arm is very jittery through some motions. I read on some other forum that the way they fixed it was to replace the motors and drives and run it with LinuxCNC. I can easily do this but I am wondering if anyone else here has worked with these robots or controllers before and what their experiences were. Does this actually run Linux?
 
  • 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”.
Displaying 1 - 15 out of 18635 results.
Time to create page: 0.211 seconds
Powered by Kunena Forum