Advanced Search

Search Results (Searched for: )

  • tommylight
  • tommylight's Avatar
10 Nov 2024 19:58

How to configure pause/resume over pin 10 of parallel port?

Category: HAL

It all should be possible to configure using the included wizards, did you try them?
Use StepConf for parallel port or PncConf for Mesa boards.
Also, pin 17 is output, so what input are you reffering to?
  • mjones@welfab.ca
  • mjones@welfab.ca
10 Nov 2024 19:54

Mesa, Linuxcnc with step direction servo's for axis and analog servo spindle.

Category: Basic Configuration

Hi Guys, I am having trouble getting my lathe to work.
It is an Old Superslant Hardinge.  It has 4 axis, 2 turrets each with an x and z and each with 8 tool changer.
The problem I have is that I have a working hal that connects to the boards, and all the io's are working.  But the drives both axis and spindle don't do anything.  The axis I know the problem is that im wired for step and direction and the configurator doesn't give a setup for that, and using the step configurator and blending the file is giving me a major headache.as its difficult to see what parts of one I need and what parts I can't have.
I am running 7i76-7i77 and 7i64.
Any suggestions as to how I can make or blend a hal file that will do what I want would be appreciated. 

File Attachment:

File Name: superslant...1-10.hal
File Size:32 KB
 

File Attachment:

File Name: superslant...1-10.ini
File Size:5 KB

File Attachment:

File Name: superslant...1-10.hal
File Size:32 KB

File Attachment:

File Name: superslant...1-10.ini
File Size:5 KB
  • langdons
  • langdons's Avatar
10 Nov 2024 19:38
Replied by langdons on topic New basic setup recommendations

New basic setup recommendations

Category: General LinuxCNC Questions

Perhaps the old PSU is broken.
  • langdons
  • langdons's Avatar
10 Nov 2024 19:37
Replied by langdons on topic New basic setup recommendations

New basic setup recommendations

Category: General LinuxCNC Questions

If you get a new computer working with a parallel port, the old HAL config should be fine.

However, you will probably need to update the port address.

You can find the port address with lspci -v

Ethernet adapters almost certainly add a little latency.

Did you try a different monitor?

Does the old computer make a startup beep?
  • Routerworks
  • Routerworks
10 Nov 2024 19:09
New basic setup recommendations was created by Routerworks

New basic setup recommendations

Category: General LinuxCNC Questions

I have been using linuxcnc for a few years now with a much older Dell dimension e521 computer with an installed parallel port card.  Worked great, very satisfied.  Recently it decided  not to boot, no power to keyboard or mouse.  Changed cmos battery but still won't get past "Dell" logo. No response to keyboard.  Think it's time to replace whole system.
Looking for a used computer perferably with a parallel port or at least a slot for one.  Possibly should converto to ethernet card such as "Mesa 7I96" or something close.
Fortunately I copied by filling setup folder with working ini and hal files.
My question are as follows:
1.) Should I upgrade to a newer version of linuxcnc (using 2.8...)?
2.) I have a new all in one desktop with an ethernot port.  Can't add parallel port.  Do ethernet to parallel port adapters work without timing issues?
3.) What is a stable version to upgrade to (all in one install) or should I stay with my older version?  Is there much gain as it seemed to be working fine.  
4.) Can I use the same ini and hal files with a newer version or do I have to do a whole new setup.  Trying to avoid that as dual Y steppers was a hastle and now I want to add a 4th A axis.

Any comments would be greatly appreciated from those much more experienced at this than myself.

Regards,

Routerworks
  • denhen89
  • denhen89's Avatar
10 Nov 2024 18:45

After switching from wheezy to Debian 12 only X axis runs smooth (sometimes)

Category: General LinuxCNC Questions

Hello,
since yesterday morning i am trying to get my machine to work. All started when i wanted to do a job for someone and could not access the rclone onedrive or actually i could, but the files could not be opened. (input/output error) Also, the PC was very slow, but i thought i will just send the files through mail so that i get the job done first and then take care of the slow pc, but even loading gmail took years. I somehow got the job done and then i decided that it might be smart to upgrade from wheezy with Linuxcnc 2.8.4 to some newer version (2.9.2 / 2.9.3).

The problem: After upgrading to Debian and using the same config, the motors does not work, they do some ultra small laggy moves, but the X-Axis is somehow moving perfectly fine after the homing sequence is done. Y (slave axis) and Z axis are making some strange noises every couple seconds, sometimes a bit quicker depending on some changes like changes of base period or so. I have tried so many things since the upgrade to Debian, that i actually cannot tell you exactly everything i did, but i will write down everything i remember:

1. I didnt want to format the pc that was attached to the cnc router, so i took a pc that was working perfectly fine some time ago on that same machine, with latencys below 8000
2. I installed Debian, did some isolcpus settings that showed me good latencys in the latency test. I was thinking everything works fine so i also do the Onedrive setup and then i thought i will attach the pcs to the machine, setup the correct parport addresses for both parallel cards and continue to work, but this was not the case, because then the problem started with the strange movements of the stepper motors, but after homing X-Axis worked perfectly
3. After trying PREEMPT and RT kernel i still had the same problem
4. I took the SSD out and attached it to the original PC that was attached earlier, that was so slow and where i had the onedrive Output/input error. I dont know if that can be done without any problem, but the pc started up perfectly and i just changed the isolcpus setting, because its a different cpu with 4 instead of 6 cores. Also i did the isolcpus, because without the latency went up pretty quickly - after isolcpus it looked good.
Unfortunately same problem, strange axis movement, sometimes i got a latency error message when starting linuxcnc.
5. decided to format the pc, but this time i used the Linuxcnc 2.9.2 installed iso. Same problem
- please keep in mind, 2 different pcs, with the exact same problems, but both pcs were working fine on that machine and on a other machine
6. I though this might be a problem with the LPT cards (not sure why, but if you are totally lost you just try everything you can), so i tried to use only one, or changed the slots and also i have tried to use the other LPT cable that is only used when i use the different config for the Rotary Axis (the second LPT card is there just for the Rotary axis configs (seperate A and C axis). Same problem, nothing changed
7. the last thing i tried was to use a older Linuxcnc installed ISO, the 2.8.4 (as i remember correctly, but at least it was 2.8.x) - same problem

So, i am that much lost and thinking how it is possible that 2 PCS that were working perfectly fine with the same machine (and also for a different machine), with thesame configs, do not anymore work. Also, switching LPT cards and cables do no changes.

The last thing that comes in my mind that i could try is to install wheezy again, but i cant imagine this will change the problem. The machine is a pretty simple CNC router with slave axis, no mpg, no special buttons or so, so i really dont care if its 2.8 version or 2.9. It was running PERFECTLY FINE with 2.8.4 on wheezy. I just wanted to fix onedrive and the slow pc problem.

I can imagine that it will be difficult to help me out, but maybe someone had some similar problem and might have some ideas what i could try
Here a video ( www.youtube.com/shorts/kfr2WJ-MDAc ) where you can see:
X axis moving perfectly fine,
then the Y axis  and then Z axis. (totally laggy)

Thanks in advance
Br,
Denis
  • rammfr
  • rammfr
10 Nov 2024 18:40 - 10 Nov 2024 18:45
Replied by rammfr on topic Ethercat, EL6751 and CANOpen

Ethercat, EL6751 and CANOpen

Category: EtherCAT

Wow, this would be great!Here are 2 projects:
  • profibus_latest was working without any SDOs, see ethercat-config from my previous posted project. But here I do have the described timing issues.
  • profibus_mit_startup is the thing I tried today. I do not get a working sdo config... I simply exported 'startup' of the el6731 in Twincat as csv, then  I added the sdos to the ethercat config.

In the end I do want a ethercat config for 4 servostar axis, ids 11,12,13,14

BR Franz
  • Lcvette
  • Lcvette's Avatar
10 Nov 2024 18:30

probe basic - toolpath/file preview loading error

Category: QtPyVCP

Adding my two cents here...

I get a similar error message when trying to load a g-code file in PB.  No issues with the backplot but the attached error message pops up when I load the file.

I think I narrowed it down to the tool number being >199.

When I commented out the T407, T823, and T642 it loaded with no complaints.  And when I edited the file it would load fine at T199 (other two commented out) but puked when changed to T200.

I can load the tools in/out of my ATC using the PB interface, and call them up via MDI with no errors.

I can work around this for a short time by renumbering tools, but this is going to be annoying since I imported my F360 library to LCNC and I've got tools up to the 1100-range in the table.

it appears to be a linuxcnc error, i can replicate in axis and it throws an interp error, happened somewhere between 2.9.3-83-g1d5d02d836 and 2.9.3-2099-g9f5a1c8f50
github.com/LinuxCNC/linuxcnc/issues/3174
  • nick_namsep
  • nick_namsep
10 Nov 2024 18:16
Replied by nick_namsep on topic General Questions about using ethercat

General Questions about using ethercat

Category: EtherCAT

Thanks for the response, and indeed i am new to Linuxcnc and Ethercat. In the past i have made my own controllers etc but i want to use a bit better of a system that is why i want to switch to servo instead of stepper etc. But what i am trying to figure out is if i need a motion controller? and if so what is it used for etc etc i kinda wanna learn the ropes from using ethercat as well as linuxcnc but before buying some really expensive servo's etc just thought about putting the question out here. But thanks for the replies i will look into the video's!
  • okielaxplyr
  • okielaxplyr
10 Nov 2024 17:58
Replied by okielaxplyr on topic PNCconfig error

PNCconfig error

Category: General LinuxCNC Questions

it is working as it should now. Not sure why. If it errors again I will post the file.
  • jurod
  • jurod's Avatar
10 Nov 2024 17:46 - 11 Nov 2024 16:50

Remap 3D Cubic Spline Interpolation code by Python

Category: O Codes (subroutines) and NGCGUI

Very well. Thanks.
I also made adjustments for the XYZA and XYZBC axes.

Axes XYZA:
#! /usr/bin/python3
"""
3-D spline interpolation
(with graph drawing by matplotlib)
"""
import matplotlib.pyplot as plt
import sys
import os
import traceback

class SplineInterpolation:
    def __init__(self, ts, ds):
        """ Initialization

        :param list ts: item number list of given points
        :param list ds: coordinate list of given points
        """
        self.ts, self.ds = ts, ds
        self.n = len(self.ts) - 1
        h = self.__calc_h()
        w = self.__calc_w(h)
        matrix = self.__gen_matrix(h, w)
        v = [0] + self.__gauss_jordan(matrix) + [0]
        self.b = self.__calc_b(v)
        self.a = self.__calc_a(v)
        self.d = self.__calc_d()
        self.c = self.__calc_c(v)

    def interpolate(self, t):
        """ Interpolation

        :param  float t: value for a interpolate target
        :return float  : computated y-value
        """
        try:
            i = self.__search_i(t)
            return self.a[i] * (t - self.ts[i]) ** 3 \
                 + self.b[i] * (t - self.ts[i]) ** 2 \
                 + self.c[i] * (t - self.ts[i]) \
                 + self.d[i]
        except Exception as e:
            raise

    def __calc_h(self):
        """ H calculation

        :return list: h-values
        """
        try:
            return [self.ts[i + 1] - self.ts[i] for i in range(self.n)]
        except Exception as e:
            raise

    def __calc_w(self, h):
        """ W calculation

        :param  list h: h-values
        :return list  : w-values
        """
        try:
            return [
                6 * ((self.ds[i + 1] - self.ds[i]) / h[i]
                   - (self.ds[i] - self.ds[i - 1]) / h[i - 1])
                for i in range(1, self.n)
            ]
        except Exception as e:
            raise

    def __gen_matrix(self, h, w):
        """ Matrix generation

        :param  list   h: h-values
        :param  list   w: w-values
        :return list mtx: generated 2-D matrix
        """
        mtx = [[0 for _ in range(self.n)] for _ in range(self.n - 1)]
        try:
            for i in range(self.n - 1):
                mtx[i][i]     = 2 * (h[i] + h[i + 1])
                mtx[i][-1]    = w[i]
                if i == 0:
                    continue
                mtx[i - 1][i] = h[i]
                mtx[i][i - 1] = h[i]
            return mtx
        except Exception as e:
            raise

    def __gauss_jordan(self, matrix):
        """ Solving of simultaneous linear equations
            with Gauss-Jordan's method

        :param  list mtx: list of 2-D matrix
        :return list   v: answers list of simultaneous linear equations
        """
        v = []
        n = self.n - 1
        try:
            for k in range(n):
                p = matrix[k][k]
                for j in range(k, n + 1):
                    matrix[k][j] /= p
                for i in range(n):
                    if i == k:
                        continue
                    d = matrix[i][k]
                    for j in range(k, n + 1):
                        matrix[i][j] -= d * matrix[k][j]
            for row in matrix:
                v.append(row[-1])
            return v
        except Exception as e:
            raise

    def __calc_a(self, v):
        """ A calculation

        :param  list v: v-values
        :return list  : a-values
        """
        try:
            return [
                (v[i + 1] - v[i])
              / (6 * (self.ts[i + 1] - self.ts[i]))
                for i in range(self.n)
            ]
        except Exception as e:
            raise

    def __calc_b(self, v):
        """ B calculation

        :param  list v: v-values
        :return list  : b-values
        """
        try:
            return [v[i] / 2.0 for i in range(self.n)]
        except Exception as e:
            raise

    def __calc_c(self, v):
        """ C calculation

        :param  list v: v-values
        :return list  : c-values
        """
        try:
            return [
                (self.ds[i + 1] - self.ds[i]) / (self.ts[i + 1] - self.ts[i]) \
              - (self.ts[i + 1] - self.ts[i]) * (2 * v[i] + v[i + 1]) / 6
                for i in range(self.n)
            ]
        except Exception as e:
            raise

    def __calc_d(self):
        """ D calculation

        :return list: c-values
        """
        try:
            return self.ds
        except Exception as e:
            raise

    def __search_i(self, t):
        """ Index searching

        :param float t: t-value
        :return  int i: index
        """
        i, j = 0, len(self.ts) - 1
        try:
            while i < j:
                k = (i + j) // 2
                if self.ts[k] < t:
                    i = k + 1
                else:
                    j = k
            if i > 0:
                i -= 1
            return i
        except Exception as e:
            raise


class Graph:
    def __init__(self, xs_0, ys_0, zs_0, xs_1, ys_1, zs_1):
        self.xs_0, self.ys_0, self.zs_0, self.xs_1, self.ys_1, self.zs_1 = xs_0, ys_0, zs_0, xs_1, ys_1, zs_1

    def plot2d(self):
        try:
            plt.title("2-D Spline Interpolation in XY/XZ")
            plt.scatter(
                self.xs_1, self.ys_1, c = "g",
                label = "interpolated points XY", marker = "+"
            )
            plt.scatter(
                self.xs_0, self.ys_0, c = "r",
                label = "given points XY"
            )

            plt.scatter(
                self.xs_1, self.zs_1, c = "b",
                label = "interpolated points XZ", marker = "+"
            )
            plt.scatter(
                self.xs_0, self.zs_0, c = "k",
                label = "given points XZ"
            )
            plt.xlabel("x")
            plt.ylabel("y,z")
            plt.legend(loc = 2)
            plt.grid(color = "gray", linestyle = "--")
            #plt.show()
            #plt.savefig("spline_interpolation.png")
        except Exception as e:
            raise


    def plot3d(self):
        ax = plt.figure().add_subplot(projection='3d')

        x = self.xs_1
        y = self.ys_1
        z = self.zs_1

        ax.scatter(x, y, z, c='b', label='Interpolated points')
        ax.scatter(X, Y, Z, c='r', label='Given points')

        # Make legend, set axes limits and labels
        ax.legend()
        ax.set_xlim(min(X),max(X))
        ax.set_ylim(min(Y),max(Y))
        ax.set_zlim(min(Z),max(Z))
        ax.set_xlabel('X')
        ax.set_ylabel('Y')
        ax.set_zlabel('Z')

        # Customize the view angle so it's easier to see that the scatter points lie
        # on the plane y=0
        ax.view_init(elev=20., azim=-35)

        plt.show()


if __name__ == '__main__':
    # (N + 1) points
    T,X,Y,Z,A = [],[],[],[],[]
    fileName  = './points_input.txt'
    import csv
    with open(fileName, 'r') as f:
        reader = csv.reader(f)
        point_data = list(reader)
        for line in point_data:
            X.append(float(line[0]))
            Y.append(float(line[1]))
            Z.append(float(line[2]))
            A.append(float(line[3]))

    print('X:', X)
    print('Y:', Y)
    print('Z:', Z)
    print('A:', A)
    n=0
    for x in X:
        T.append(n+1.0)   
        n += 1
    print('T: ', T)
        
    #T = [1.0,2.0,3.0,4.0,5.0,6.0]
    #X = [0.0, 2.0, 3.0, 5.0, 7.0, 8.0]
    #Y = [0.8, 2.8, 3.2, 1.9, 4.5, 2.5]
    #Z = [-0.5, 1.8, 2.2, 0.9, 3.5, -1.5]

    S   = 0.1        # Step for interpolation
    S_1 = 1 / S      # Inverse of S
    xs_g, ys_g, zs_g, as_g = [], [], [], []  # List for graph
    try:
        # 3-D spline interpolation
        si = SplineInterpolation(T, X)
        for t in [t / S_1 for t in range(int(T[0] / S), int(T[-1] / S) + 1)]:
            x= si.interpolate(t)
            #print("{:8.4f}, {:8.4f}".format(t, x))
            xs_g.append(x)        
        si = SplineInterpolation(T, Y)
        for t in [t / S_1 for t in range(int(T[0] / S), int(T[-1] / S) + 1)]:
            y = si.interpolate(t)
            #print("{:8.4f}, {:8.4f}".format(t, y))
            ys_g.append(y)
        si = SplineInterpolation(T, Z)
        for t in [t / S_1 for t in range(int(T[0] / S), int(T[-1] / S) + 1)]:
            z = si.interpolate(t)
            #print("{:8.4f}, {:8.4f}".format(t, z))
            zs_g.append(z)
        si = SplineInterpolation(T, A)
        for t in [t / S_1 for t in range(int(T[0] / S), int(T[-1] / S) + 1)]:
            a = si.interpolate(t)
            #print("{:8.4f}, {:8.4f}".format(t, z))
            as_g.append(a)

        # Write output to file
        file_out = 'output_file.txt'
        print('Writing output to ',file_out)
        n=0
        output = open(file_out, 'w')
        for x in xs_g:
            string=("G1 X{:4.2f} Y{:4.2f} Z{:4.2f} A{:4.2f}\n".format(xs_g[n], ys_g[n], zs_g[n], as_g[n]))
            output.write(string)
            n += 1
        # Closing file
        output.close()

        # Graph drawing
        g = Graph(X, Y, Z, xs_g, ys_g, zs_g)
        g.plot2d()
        g.plot3d()

    except Exception as e:
        traceback.print_exc()
        sys.exit(1)

Axes XYZBC:
#! /usr/bin/python3
"""
3-D spline interpolation
(with graph drawing by matplotlib)
"""
import matplotlib.pyplot as plt
import sys
import os
import traceback

class SplineInterpolation:
    def __init__(self, ts, ds):
        """ Initialization

        :param list ts: item number list of given points
        :param list ds: coordinate list of given points
        """
        self.ts, self.ds = ts, ds
        self.n = len(self.ts) - 1
        h = self.__calc_h()
        w = self.__calc_w(h)
        matrix = self.__gen_matrix(h, w)
        v = [0] + self.__gauss_jordan(matrix) + [0]
        self.b = self.__calc_b(v)
        self.a = self.__calc_a(v)
        self.d = self.__calc_d()
        self.c = self.__calc_c(v)

    def interpolate(self, t):
        """ Interpolation

        :param  float t: value for a interpolate target
        :return float  : computated y-value
        """
        try:
            i = self.__search_i(t)
            return self.a[i] * (t - self.ts[i]) ** 3 \
                 + self.b[i] * (t - self.ts[i]) ** 2 \
                 + self.c[i] * (t - self.ts[i]) \
                 + self.d[i]
        except Exception as e:
            raise

    def __calc_h(self):
        """ H calculation

        :return list: h-values
        """
        try:
            return [self.ts[i + 1] - self.ts[i] for i in range(self.n)]
        except Exception as e:
            raise

    def __calc_w(self, h):
        """ W calculation

        :param  list h: h-values
        :return list  : w-values
        """
        try:
            return [
                6 * ((self.ds[i + 1] - self.ds[i]) / h[i]
                   - (self.ds[i] - self.ds[i - 1]) / h[i - 1])
                for i in range(1, self.n)
            ]
        except Exception as e:
            raise

    def __gen_matrix(self, h, w):
        """ Matrix generation

        :param  list   h: h-values
        :param  list   w: w-values
        :return list mtx: generated 2-D matrix
        """
        mtx = [[0 for _ in range(self.n)] for _ in range(self.n - 1)]
        try:
            for i in range(self.n - 1):
                mtx[i][i]     = 2 * (h[i] + h[i + 1])
                mtx[i][-1]    = w[i]
                if i == 0:
                    continue
                mtx[i - 1][i] = h[i]
                mtx[i][i - 1] = h[i]
            return mtx
        except Exception as e:
            raise

    def __gauss_jordan(self, matrix):
        """ Solving of simultaneous linear equations
            with Gauss-Jordan's method

        :param  list mtx: list of 2-D matrix
        :return list   v: answers list of simultaneous linear equations
        """
        v = []
        n = self.n - 1
        try:
            for k in range(n):
                p = matrix[k][k]
                for j in range(k, n + 1):
                    matrix[k][j] /= p
                for i in range(n):
                    if i == k:
                        continue
                    d = matrix[i][k]
                    for j in range(k, n + 1):
                        matrix[i][j] -= d * matrix[k][j]
            for row in matrix:
                v.append(row[-1])
            return v
        except Exception as e:
            raise

    def __calc_a(self, v):
        """ A calculation

        :param  list v: v-values
        :return list  : a-values
        """
        try:
            return [
                (v[i + 1] - v[i])
              / (6 * (self.ts[i + 1] - self.ts[i]))
                for i in range(self.n)
            ]
        except Exception as e:
            raise

    def __calc_b(self, v):
        """ B calculation

        :param  list v: v-values
        :return list  : b-values
        """
        try:
            return [v[i] / 2.0 for i in range(self.n)]
        except Exception as e:
            raise

    def __calc_c(self, v):
        """ C calculation

        :param  list v: v-values
        :return list  : c-values
        """
        try:
            return [
                (self.ds[i + 1] - self.ds[i]) / (self.ts[i + 1] - self.ts[i]) \
              - (self.ts[i + 1] - self.ts[i]) * (2 * v[i] + v[i + 1]) / 6
                for i in range(self.n)
            ]
        except Exception as e:
            raise

    def __calc_d(self):
        """ D calculation

        :return list: c-values
        """
        try:
            return self.ds
        except Exception as e:
            raise

    def __search_i(self, t):
        """ Index searching

        :param float t: t-value
        :return  int i: index
        """
        i, j = 0, len(self.ts) - 1
        try:
            while i < j:
                k = (i + j) // 2
                if self.ts[k] < t:
                    i = k + 1
                else:
                    j = k
            if i > 0:
                i -= 1
            return i
        except Exception as e:
            raise


class Graph:
    def __init__(self, xs_0, ys_0, zs_0, xs_1, ys_1, zs_1):
        self.xs_0, self.ys_0, self.zs_0, self.xs_1, self.ys_1, self.zs_1 = xs_0, ys_0, zs_0, xs_1, ys_1, zs_1

    def plot2d(self):
        try:
            plt.title("2-D Spline Interpolation in XY/XZ")
            plt.scatter(
                self.xs_1, self.ys_1, c = "g",
                label = "interpolated points XY", marker = "+"
            )
            plt.scatter(
                self.xs_0, self.ys_0, c = "r",
                label = "given points XY"
            )

            plt.scatter(
                self.xs_1, self.zs_1, c = "b",
                label = "interpolated points XZ", marker = "+"
            )
            plt.scatter(
                self.xs_0, self.zs_0, c = "k",
                label = "given points XZ"
            )
            plt.xlabel("x")
            plt.ylabel("y,z")
            plt.legend(loc = 2)
            plt.grid(color = "gray", linestyle = "--")
            #plt.show()
            #plt.savefig("spline_interpolation.png")
        except Exception as e:
            raise


    def plot3d(self):
        ax = plt.figure().add_subplot(projection='3d')

        x = self.xs_1
        y = self.ys_1
        z = self.zs_1

        ax.scatter(x, y, z, c='b', label='Interpolated points')
        ax.scatter(X, Y, Z, c='r', label='Given points')

        # Make legend, set axes limits and labels
        ax.legend()
        ax.set_xlim(min(X),max(X))
        ax.set_ylim(min(Y),max(Y))
        ax.set_zlim(min(Z),max(Z))
        ax.set_xlabel('X')
        ax.set_ylabel('Y')
        ax.set_zlabel('Z')

        # Customize the view angle so it's easier to see that the scatter points lie
        # on the plane y=0
        ax.view_init(elev=20., azim=-35)

        plt.show()


if __name__ == '__main__':
    # (N + 1) points
    T,X,Y,Z,B,C = [],[],[],[],[],[]
    fileName  = './points_input.txt'
    import csv
    with open(fileName, 'r') as f:
        reader = csv.reader(f)
        point_data = list(reader)
        for line in point_data:
            X.append(float(line[0]))
            Y.append(float(line[1]))
            Z.append(float(line[2]))
            B.append(float(line[3]))
            C.append(float(line[4]))

    print('X:', X)
    print('Y:', Y)
    print('Z:', Z)
    print('B:', B)
    print('C:', C)
    n=0
    for x in X:
        T.append(n+1.0)   
        n += 1
    print('T: ', T)
        
    #T = [1.0,2.0,3.0,4.0,5.0,6.0]
    #X = [0.0, 2.0, 3.0, 5.0, 7.0, 8.0]
    #Y = [0.8, 2.8, 3.2, 1.9, 4.5, 2.5]
    #Z = [-0.5, 1.8, 2.2, 0.9, 3.5, -1.5]

    S   = 0.1        # Step for interpolation
    S_1 = 1 / S      # Inverse of S
    xs_g, ys_g, zs_g, bs_g, cs_g = [], [], [], [], []  # List for graph
    try:
        # 3-D spline interpolation
        si = SplineInterpolation(T, X)
        for t in [t / S_1 for t in range(int(T[0] / S), int(T[-1] / S) + 1)]:
            x= si.interpolate(t)
            #print("{:8.4f}, {:8.4f}".format(t, x))
            xs_g.append(x)        
        si = SplineInterpolation(T, Y)
        for t in [t / S_1 for t in range(int(T[0] / S), int(T[-1] / S) + 1)]:
            y = si.interpolate(t)
            #print("{:8.4f}, {:8.4f}".format(t, y))
            ys_g.append(y)
        si = SplineInterpolation(T, Z)
        for t in [t / S_1 for t in range(int(T[0] / S), int(T[-1] / S) + 1)]:
            z = si.interpolate(t)
            #print("{:8.4f}, {:8.4f}".format(t, z))
            zs_g.append(z)
        si = SplineInterpolation(T, B)
        for t in [t / S_1 for t in range(int(T[0] / S), int(T[-1] / S) + 1)]:
            b = si.interpolate(t)
            #print("{:8.4f}, {:8.4f}".format(t, b))
            bs_g.append(b)
        si = SplineInterpolation(T, C)
        for t in [t / S_1 for t in range(int(T[0] / S), int(T[-1] / S) + 1)]:
            c = si.interpolate(t)
            #print("{:8.4f}, {:8.4f}".format(t, c))
            cs_g.append(c)

        # Write output to file
        file_out = 'output_file.txt'
        print('Writing output to ',file_out)
        n=0
        output = open(file_out, 'w')
        for x in xs_g:
            string=("G1 X{:4.2f} Y{:4.2f} Z{:4.2f} B{:4.2f} C{:4.2f}\n".format(xs_g[n], ys_g[n], zs_g[n], bs_g[n], cs_g[n]))
            output.write(string)
            n += 1
        # Closing file
        output.close()

        # Graph drawing
        g = Graph(X, Y, Z, xs_g, ys_g, zs_g)
        g.plot2d()
        g.plot3d()

    except Exception as e:
        traceback.print_exc()
        sys.exit(1)
  • langdons
  • langdons's Avatar
10 Nov 2024 16:27

How to configure pause/resume over pin 10 of parallel port?

Category: HAL

The PMDX board is configured (with jumpers) to ignore the input value of pin 17.
The data buffer is set to out (from PC to motor drivers) and is always enabled, regardless of E-Stop signal form the E-Stop button.
  • langdons
  • langdons's Avatar
10 Nov 2024 16:20

How to configure pause/resume over pin 10 of parallel port?

Category: HAL

I have a CNC machine that uses a PMDX-122 breakout board.
It is connected to my PC via a parallel port PCIe card and a parallel port cable.
The PC runs LinuxCNC on Debian.

LinuxCNC can communicate with the breakout board without problem.

How can I configure my HAL config file so LinuxCNC pauses whatever it is doing when the PC recieves a signal on pin 10 on the parallel port and resumes whatever it was doing when the PC stops recieving a signal on pin 10 after a slight delay (to allow the router bit to accelerate)?

I would also like to configure the home switches.
Pins 11, 12, 13, and 15 are available for miscellaneous communication to the PC.
  • PCW
  • PCW's Avatar
10 Nov 2024 15:16
Replied by PCW on topic hm2/hm2_7i92.0: Error finishing read!

hm2/hm2_7i92.0: Error finishing read!

Category: Driver Boards

31 s32 RW 235371 servo-thread.tmax

So the maximum servo thread time is ~ 1/4 of the servo period so looks fine.
  • PCW
  • PCW's Avatar
10 Nov 2024 14:39

Raspberry Pi4B and Mesa7C80 setup for a beginner

Category: Driver Boards

You can actually ignore all the inmux setup in the manual
and not have any inmux related statements in the configuration
string.

One of the best ways to determine the pin/parameter names is with halcmd or halshow
for example, this command in a terminal when LinuxCNC is running:

halcmd show pin hm2

Will show all hardware pins, while:

halcmd show pin *inmux*

will show all inmux pins

You can also do this with halshow, You can launch halshow from axis
with Machine --> Show Hal Configuration. The "Watch" tab of halshow
allows you to monitor pins in real time.
 
Displaying 21496 - 21510 out of 22463 results.
Time to create page: 0.462 seconds
Powered by Kunena Forum