Sercos Interpolation

hokie said:
The Kollmorgans only needed the velocity if you ran a SERCOS update greater than 2ms.
I find this interesting. I would think that the need to download the velocity would be greater at longer coarse updates. What made downloading the velocities a pain? I am interested incase I want to implement Sercos or something like it. I prefer to avoid the pain parts.

Agreed higher orders of interpolation, require more points/delay.
The delays may be OK for many applications but if the system is responding to an input and changing the motion profile this delay may be a killer.

Though I have never seen an application where it was really nessessary.
Have you ever had an application that required a higher order derivative? Then it is necessary/

In extreme cases (high end machine tool) the SERCOS rate can drop to 0.25ms making it a non-factor.
I was aware of the higher update rates. At 0.25ms one doesn't really need to interpolate but the velocity, acceleration and maybe even the jerk may be necessary for feed forwards.

This is .pdf that shows how bad second order interpolation is
ftp://ftp.deltacompsys.com/public/NG/Mathcad%20-%20Second%20Order%20Interp%20NG.pdf
cubic interpolation is MUCH MUCH better. What gets me is that not all of the cubic interpolation scheme are equal and yet the Sercos manufacturers don't to boast about their interpolation methods. They are kept secret. If someone figures out one of the method for doing cubic interpolation I will show all of mine. You can see that for the most part you are right. It doesn't make much difference but there is one method what is must smoother than the rest at computing jerk. So what is in your motion controller?
 
Peter Nachtwey said:
I find this interesting. I would think that the need to download the velocity would be greater at longer coarse updates. What made downloading the velocities a pain? I am interested incase I want to implement Sercos or something like it. I prefer to avoid the pain parts.

No other sercos drive requires this. Why have a special case for one drive manuf.

The methods of handling the interpolation between points is a differentiater between the different drive products and all do not handle this equally well.

From the stand point of developing a sercos controller you do not have to worry about these things (because you do not have any method to influence them). You just send position commands at the sercos interrupt, that is it. It is the responsiblity of the drive to handle the feedforward and the interpolation between points.
 
When you speak about cubic interpolation I guess you think about cubic polynomial for motion profile:

q(t) = a3*t^3+a2*t^2+a1*t+a0

velocity: q'(t) = 3*a3*t^2+2*a2*t+a1

acceleration: q''(t) = 6*a3*t+2*a2

Since four coefficients are available, it is possible to impose initial and final position, initial and final velocity. Since acceleration is linear function, initial and final acceleration will have discontinuities.

If continuous acceleration is also required, I think that profile is called "spline".
 
Hokie said:
No other sercos drive requires this. Why have a special case for one drive manuf.
I didn't know that.

The methods of handling the interpolation between points is a differentiater between the different drive products and all do not handle this equally well.
I believe that. I never onced believed that all Sercos is created equal. There are too many ways of doing cubic interpolation.

From the stand point of developing a sercos controller you do not have to worry about these things (because you do not have any method to influence them).
Yes, you do. If the least common denominator is used then all will suffer.

You just send position commands at the sercos interrupt, that is it. It is the responsiblity of the drive to handle the feedforward and the interpolation between points.
So I have a question. What if the target is moving to 2 and the last few position are 1.999917, 1.999982, 1.999999, 2.0, 2.0, 2.0, 2.0, .....
What happens when the drive gets to 2.0? Will the velocity, acceleration and jerk be 0? You can see from the data that the motor should be stopped at 2.0 . A cubic interpolation using only points will weave over and under 2.0 as long as one of the four points is not 2.0.

At least the Kollmorgan system lets you specifiy a velocity of 0 when the drive reaches 2.0. I think the Kollmorgan guys didn't take if far enough. They should have downloaded the position, velocity and acceleration so the motor is really stopped when it gets to 2.0. The problem I would face is that my version, with position, velocities, accelerations etc, would be a very big pain in the a$$ in your view and probably others.

Note the data comes from one of my Mathcad worksheets. The jerk is +4000 at this point the position are taken at 2 millisecond increments. pos(t)=2+(4000/6)*t^3 for t = -0.006 to t=0. Then p(t)=2 for all t>0


Pandiani said:
When you speak about cubic interpolation I guess you think about cubic polynomial for motion profile:

q(t) = a3*t^3+a2*t^2+a1*t+a0

velocity: q'(t) = 3*a3*t^2+2*a2*t+a1

acceleration: q''(t) = 6*a3*t+2*a2

Since four coefficients are available, it is possible to impose initial and final position, initial and final velocity. Since acceleration is linear function, initial and final acceleration will have discontinuities.
Yes, that would be the way Kollmorgan says they do it. What are the equations for computing a0, a1, a2, and a3?

If continuous acceleration is also required, I think that profile is called "spline".
A spline is different from cubic interpolation.
A cubic spline ( cam table ) is continous and smooth at the second derivative. ( acceleration ). The interpolations methods are not. The interpolation method use 'local' data like the point and velocity at two points as you and Kollmorgan suggest. A spline takes into account all the points and must solve the simulataneous equations so that all the acclerations are smooth and continuous. The math people have a term for this. We have cases where 5000+ simulataneous equations must be worked out on the spline. Obviously solving 5000+ simulataneous equations is not something that is solved in one scan, we us ae a back ground. where as a cubic interpolation is easy to solve.
 
What's all this talk about VELOCITY. (Indramat perspective)...are not servo drives always controlling 'position', and NOT velocity. Sure, you have a velocity mode in the motion controller, but, primarily, its position that rules the roost, from where I sit.
 
If you take the third derivative to get 4 equations in four unknowns (the fourth is q'''= 6a3) you can substitute and get:

a3= q'''/6
a2= (q''-q'''t)/2
a1= q'-q''t+(q'''t^2)/2
a0= q -q't + (q''t^2)/2 -(q'''t^3)/6

Is that what you're looking for?
 
jdbrandt said:
What's all this talk about VELOCITY. (Indramat perspective)...are not servo drives always controlling 'position', and NOT velocity.
Sure, you have a velocity mode in the motion controller, but, primarily, its position that rules the roost, from where I sit.
If the PID only used the current interpolated positon as a set point or target then there would ALWAYS be an error when moving, at least until the integrator winds up. However, on point to point moves the integrator doesn't have time to wind up so there are errors.

Feed forwards minimize errors because they estimate the required control output. To use feed forwards the drive must calculate the velocity, acceleration and perhaps the jerk from the last four points.

Also, when the master controller sends the final point in the motion profile, how does the drive or slave know that it should be stopped with the velocity=0 and acceleratioin=0. To the drive the destination point is just another point?

tim2 said:
If you take the third derivative to get 4 equations in four unknowns (the fourth is q'''= 6a3) you can substitute and get:

a3= q'''/6
a2= (q''-q'''t)/2
a1= q'-q''t+(q'''t^2)/2
a0= q -q't + (q''t^2)/2 -(q'''t^3)/6

Is that what you're looking for?
No, I am looking for the equations to compute a0,a1,a2,a3 in terms of the last four positions downloaded to the slave.
Computing q''', q'', q' and q as a function of the last four positions downloaded from the master will do.
 
If there are four positions available, that is sufficient to calculate third order polynomial, since we need to obtain four coefficients. Finding exact equations by solving system of 4 equations with 4 unknowns is just plain tedious. My approach would be to form matrices:

Code:
A=[
t0^3, t0^2, t0, 1;
t1^3, t1^2, t1, 1;
t2^3, t2^2, t2, 1;
t3^3, t3^2, t3, 1;
];
 
B=[
q0;
q1;
q2;
q3;
];
 
and final result would be:
 
inverse(A)*B

Or, if you want to calculate by hand, I think much smarter approach would be to use polynomial formula I gave in my .pdf file if points are equally spaced (which is almost always true).

But if someone wants equations, here they are:
 
jdbrandt said:
What's all this talk about VELOCITY. (Indramat perspective)...are not servo drives always controlling 'position', and NOT velocity. Sure, you have a velocity mode in the motion controller, but, primarily, its position that rules the roost, from where I sit.

Couldn't you do more with a position command, torque comand, and acceleration? And maybe the torque could expected torque...

Scratch all that, how about position, acceleration and mass?

Not trying to derail the math lesson...feel free to ignore this simple minded post...
:geek:
 
It depends quite a bit on how rigid your system is. But I digress.

Let's take jdbrandt's point first of all. The Indramat drives he is talking about are ultimately velocity controlled drives. The position loop correction is a velocity signal. So, unless you want the position loop to have to develop all the velocity command you need to come up with commanded velocity somehow. This is one of the points of this thread; how do you get that velocity.

As for your suggestion about adding torque/acceleration, that would certainly make things better. However, that only goes as far as adding a feed forward to accelerate the total inertial load. It doesn't address any motor-to-load torsion effects. This is where jerk comes in.

Then along with this is the general interpolation question. the drive is closing the position loop more than once per SERCOS update. So the drive needs to fill in the points in between. As already stated a straight linear interpolation won't correctly follow the actual path since the actual path is very likely not linear.

So if you want to use any of these feed forward values and you want to stay on the correct profile you either need all the values generated by the motion controller or you need to regenerate them in the drive. It seems most manufacturers choose to do the latter.

I think most of the SERCOS control community comes is involved with the very high end machinery business. These are physically stiff and stout systems. The vibration modes are high enough that accounting for mass acceleration is probably all you need to worry about. Just add enough command side jerk so you don't excite these vibrations and you will be OK.

The general motion control industry (guys like Peter) get involved with much more varied physical systems. Peter and his group don't develop 5th order motion profiles and 3rd[/sub] order feed forwards just for the fun of it. They are there to address specific physical needs in the systems they control; physical needs they run into quite often. The way Indramat addressed the same issue (being a motor/drive company) is to develop high torque frameless motors. Now you are back to acceleration being all that is needed.

It's not like it would be hard to incorporate the things Peter is talking about. The motion controller by requirement is already generating instantaneous command values of position, velocity, acceleration and jerk. You just can't get at them in most cases. Some drives are already back-calculating these same values in order to properly interpolate between SERCOS update points. Why not drop the pretenses and support transfer of all the values? In almost all cases SERCOS is fast enough to support the added data load. In fact, in virtual master application, you could go with a more course SERCOS update rate if the drive knew what was coming ahead of time. It's just going to take someone, on one side or the other, to decide to support this and others will most likely follow.

Keith
 
OkiePC said:
Couldn't you do more with a position command, torque comand, and acceleration? And maybe the torque could expected torque...

Scratch all that, how about position, acceleration and mass?

Not trying to derail the math lesson...feel free to ignore this simple minded post...
:geek:
A position and acceleration would be better than just positions. This way the master can indicate to the drive that the next segment is a constant velocity segment by downloading a 0 for the acceleration. The drive has no idea of what the master is really trying to do when only positions are downloaded.

How is the master going do know what the mass is?

As already stated a straight linear interpolation won't correctly follow the actual path since the actual path is very likely not linear.
but is could be. The slave just doesn't know until it sees 4 points with a constant distance between them.

think most of the SERCOS control community comes is involved with the very high end machinery business. These are physically stiff and stout systems. The vibration modes are high enough that accounting for mass acceleration is probably all you need to worry about. Just add enough command side jerk so you don't excite these vibrations and you will be OK.
Yes. Those following the feed forward threads can see the more rigid the system is the smaller the acceleration feed forwards need to be. In some cases they can be ignored.

The general motion control industry (guys like Peter) get involved with much more varied physical systems. Peter and his group don't develop 5th order motion profiles and 3rd[/sub] order feed forwards just for the fun of it.

Not for the fun of it. We did it because in some cases it is necessary. The higher order gains and feed forward make all the difference between success and failure. The only alternative at times is to redesign the machinery to make it much stiffer. Fixing it in electronics is much cheaper.

It's just going to take someone, on one side or the other, to decide to support this and others will most likely follow
But they haven't. You saw hokie's complaint about the Kollmorgan drives because they had to download velocities too. Think of the flack then if someone like me tried to introduce accelerations. What if I made a controller and no-one used the extra features? Then it would be another me too controller. I thought the Kollmorgan method was a better way.

What I have learned is that people by Sercos without really knowing what it is doing and that attempts to use special features will be met with resistance. Hokie seemed to be the only one that realized that not all Sercos devices are created equal.

Now for the math quiz part. Here is my solution for doing a 3rd order interpolation between the last two points of 4.

Find the equations for interpolating between the last two points of four.
Assume the time between the points are equally and are given at times
-2*DT, -DT, 0 and DT where DT is the time difference between each point, 0.002 seconds.
The points are then X(-2*DT),X(-DT),X(0),X(DT).
The interpolation is done between X(0) and X(DT).
X(DT) is the latest point downloaded from the master

The position formula is
x(t)=A+B*t+C*t^2+D^3

Finding the coefficients for A,B,C, and D requires solving four equations with four unknowns,

A+B*(-2*DT)+C*(-2*DT)^2+D*(-2*DT)^3=X(-2*DT)
A+B*(-1*DT)+C*(-1*DT)^2+D*(-1*DT)^3=X(-1*DT)
A =X(0)
A+B*( 1*DT)+C*( 1*DT)^2+D*( 1*DT)^3=X(1*DT)

Actually A is known to be the position at time 0 so now there are three equations to solve.
Substitute X(0) for A

X(0)+B*(-2*DT)+C*(-2*DT)^2+D*(-2*DT)^3=X(-2*DT)
X(0)+B*(-1*DT)+C*(-1*DT)^2+D*(-1*DT)^3=X(-1*DT)
X(0)+B*( 1*DT)+C*( 1*DT)^2+D*( 1*DT)^3=X(1*DT)

Subtract x(0) from both sides on all rows.

B*(-2*DT)+C*(-2*DT)^2+D*(-2*DT)^3=X(-2*DT)-X(0)
B*(-1*DT)+C*(-1*DT)^2+D*(-1*DT)^3=X(-1*DT)-X(0)
B*( 1*DT)+C*( 1*DT)^2+D*( 1*DT)^3=X( 1*DT)-X(0)

Simplify the coefficients raised to a power.

-2*B*DT+4*C*DT^2-8*D*DT^3=X(-2*DT)-X(0)
-1*B*DT+1*C*DT^2-1*D*DT^3=X(-1*DT)-X(0)
1*B*DT+1*C*DT^2+1*D*DT^3=X( 1*DT)-X(0)

Subtract one half of row one from row two
add one half of row one to row three

-2*B*DT+4*C*DT^2-8*D*DT^3=X(-2*DT)-X(0)
-1*C*DT^2+3*D*DT^3=X(-1*DT)-X(0)-0.5*(X(-2*DT)-X(0))
3*C*DT^2-3*D*DT^3=X( 1*DT)-X(0)+0.5*(X(-2*DT)-X(0))

Add 3 times row 2 to row 3

-2*B*DT+4*C*DT^2-8*D*DT^3=X(-2*DT)-X(0)
-1*C*DT^2+3*D*DT^3=X(-1*DT)-X(0)-0.5*(X(-2*DT)-X(0))
6*D*DT^3=X( 1*DT)-X(0)+0.5*(X(-2*DT)-X(0))+3*(X(-1*DT)-X(0)-0.5*(X(-2*DT)-X(0)))

Solve for D

D=X( 1*DT)-X(0)+0.5*(X(-2*DT)-X(0))+3*(X(-1*DT)-X(0)-0.5*(X(-2*DT)-X(0)))/(6*DT^3)

Collect X(?) terms
D=(X(DT)*(1)+ X(0)*(-1-0.5-3+1.5)+X(-DT)*(3)+X(-2*DT)*(0.5-1.5))/(6*DT^3)
Simplify
D=(X(DT)-3*X(0)+3*X(-DT)-X(-2*DT))/(6*DT^3) // This is the jerk divided by 6 at time 0

Use row 2 to solve for C

-1*C*DT^2+3*D*DT^3=X(-1*DT)-X(0)-0.5*(X(-2*DT)-X(0))

Substitute (X(DT)-3*X(0)+3*X(-DT)-X(-2*DT))/(6*DT^3) for D

-1*C*DT^2+3*(X(DT)-3*X(0)+3*X(-DT)-X(-2*DT))/(6*DT^3)*DT^3=X(-1*DT)-X(0)-0.5*(X(-2*DT)-X(0))

Simplify

-1*C*DT^2+0.5*(X(DT)-3*X(0)+3*X(-DT)-X(-2*DT))=X(-1*DT)-X(0)-0.5*(X(-2*DT)-X(0))

Subtract 0.5*(X(DT)-3*X(0)+3*X(-DT)-X(-2*DT)) from both sides

-1*C*DT^2=X(-1*DT)-X(0)-0.5*(X(-2*DT)-X(0))-0.5*(X(DT)-3*X(0)+3*X(-DT)-X(-2*DT))

Multiply both sides by -1

C*DT^2=-X(-1*DT)+X(0)+0.5*(X(-2*DT)-X(0))+0.5*(X(DT)-3*X(0)+3*X(-DT)-X(-2*DT))

Collect the X terms

C*DT^2=((0.5)*X(DT)+(1-0.5-1.5)*X(0)+(-1+1.5)*X(-DT)+(0.5-0.5)*X(-2*DT)

Simplify constants

C*DT^2=(0.5*X(DT)-X(0)+0.5*X(-DT))

Finally divide by DT^2

C=(0.5*X(DT)-X(0)+0.5*X(-DT))/DT^2 // This is the acceleration divided by 2

Use row 1 to solve for B

-2*B*DT+4*C*DT^2-8*D*DT^3=X(-2*DT)-X(0)

Move the C and D terms to the right side

-2*B*DT=X(-2*DT)-X(0)-4*C*DT^2+8*D*DT^3

Divide both sides by -2

B*DT=-0.5*X(-2*DT)+0.5*X(0)+2*C*DT^2-4*D*DT^3

Substitute for C and D

B*DT=-0.5*X(-2*DT)+0.5*X(0)+2*((0.5*X(DT)-X(0)+0.5*X(-DT))/DT^2)*DT^2-4*((X(DT)-3*X(0)+3*X(-DT)-X(-2*DT))/(6*DT^3))*DT^3

Simplify powers of DT and coefficients

B*DT=-0.5*X(-2*DT)+0.5*X(0)+(X(DT)-2*X(0)+X(-DT))-(4/6)*(X(DT)-3*X(0)+3*X(-DT)-X(-2*DT))

Must scale so all the positions can be divided by 6. Since there will be a denominator might as well divide both sides by DT

B=(-3*X(-2*DT)+3*X(0)+(6*X(DT)-12*X(0)+6*X(-DT))-4*X(DT)+12*X(0)-12*X(-DT)+4(-2*DT))/(6*DT)

Collect the X terms

B=((6-4)*X(DT)+(3-12+12)*X(0)+(6-12)*X(-DT)+(-3+4)*X(-2*DT))/(6*DT)

Simplify

A=X(0)
B=(2*X(DT)+3*X(0)-6*X(-DT)+*X(-2*DT))/(6*DT) // This is the velocity at time 0
C=(0.5*X(DT)-X(0)+0.5*X(-DT))/DT^2 // This is the acceleration divided by 2 at time 0
D=(X(DT)-3*X(0)+3*X(-DT)-X(-2*DT))/(6*DT^3) // This is the jerk divided by 6 at time 0

It took about 1 hour to solve this by hand. It takes a few seconds using Mathcad. I expected someone with Mathcad, like Norm, to solve this within the first hour but that didn't happen. It looks like a few other unsuccessfully tried so solve this by hand. It isn't hard, it isn't mathemagic. It is just a little tedious but this is what mathematicians did before there were computers and math spread sheets. Note is really is important to go slowly step by step. I made no errors during a the computations and I didn't cheat by looking at Mathcad.

Finally, I would have thought there would be more interest in interpolation in general. I see threads from time to time about having to interpolate data from non-linear devices.
 
Originally posted by Peter Nachtwey:

You saw hokie's complaint about the Kollmorgan drives because they had to download velocities too. Think of the flack then if someone like me tried to introduce accelerations.

I think this is a case where the motion controller manufacturers are going to have to lead from the front. My guess is the reason hokie got so bent out of shape is that the drive required a velocity value but the motion controller didn't provide a velocity command. If, on the flip side, the motion controller provided access to instantaneous profile values but no one used them no one is bent out of shape. As I said, changing the MDT is really not that big a deal. The MDT list is an S parameter, which everyone SHOULD support. The drive manufacturers, on the other hand, can't require somehting the motion controller manufacturers don't support or the end users WILL be in a bind.


Originally posted by Peter Nachtwey:

What I have learned is that people by Sercos without really knowing what it is doing and that attempts to use special features will be met with resistance.

Again, that is because the applications most SERCOS users are dealing with don't require the highly dynamic profiles that you often see. I would suspect the majority of SERCOS applications are in the machine tool and printing/converting fields. In the machine tool industry the physical machine is very stiff for reasons other than motion control. In addition, while the axes need to be very tightly coupled, the motions aren't highly dynamic. You can only remove metal so fast. In the printing and converting arenas the positioning dynamics are again not that crazy. The most dynamic applications are probably printing registration applications. But in many cases, once registration is achieved the corrections aren't all that crazy. So SERCOS provides these users with everything they need to make their applications work. Why would they want special features? To them it's just another field they need to know to skip over.

Contrast this with the test case you were telling me about where you were running motion profiles with a 16 msec cycle time. This is not your typical SERCOS application. Using the 'default' 2msec SERCOS update rate you would be half way through your move before you had enough information to calculate the jerk value. Yes, I know you can increase the SERCOS cycle rate. But unless you are a SERCOS III user there is only so far you can go.

The problem, as I'm sure you are aware, is when people try to use SERCOS in applications where it is not well suited. And it comes back to people not really knowing how it really works, as you said.
 
kamenges said:
I think this is a case where the motion controller manufacturers are going to have to lead from the front. My guess is the reason hokie got so bent out of shape is that the drive required a velocity value but the motion controller didn't provide a velocity command. If, on the flip side, the motion controller provided access to instantaneous profile values but no one used them no one is bent out of shape. As I said, changing the MDT is really not that big a deal. The MDT list is an S parameter, which everyone SHOULD support. The drive manufacturers, on the other hand, can't require somehting the motion controller manufacturers don't support or the end users WILL be in a bind.

The SERCOS interface is defined by a standard. The S parameter for velocity command is not defined to have influene in the case of position mode. If important enough someone could push to have velocity and acceleration command to work with position mode. Though most likely if you company does not have gmbh in the name you would have little influence on the SERCOS spec.:) In the end a standard is a standard.


kamenges said:
Again, that is because the applications most SERCOS users are dealing with don't require the highly dynamic profiles that you often see. I would suspect the majority of SERCOS applications are in the machine tool and printing/converting fields. In the machine tool industry the physical machine is very stiff for reasons other than motion control. In addition, while the axes need to be very tightly coupled, the motions aren't highly dynamic. You can only remove metal so fast. In the printing and converting arenas the positioning dynamics are again not that crazy. The most dynamic applications are probably printing registration applications. But in many cases, once registration is achieved the corrections aren't all that crazy. So SERCOS provides these users with everything they need to make their applications work. Why would they want special features? To them it's just another field they need to know to skip over.

This is a relatively uninformed statement. SERCOS is used often in Machine tool and Printing. Both high end applications that require tight sync between axes.
The packaging industry is a prime example of applications with dynamic profiles on relative unstiff machines. The packaging servo machine (US / Europe) is dominated by SERCOS (or similiar type digital buses), particularly on the most extreme applciations.
 
Originally posted by hokie:

The SERCOS interface is defined by a standard. The S parameter for velocity command is not defined to have influene in the case of position mode.

This is true. But there is nothing preventing me from putting a P parameter in the MDT. P parameters are device specific and not strictly governed by the standard. If anyone is going to try and include additional functionality that is most likely where they will start.


Originally posted by hokie:

This is a relatively uninformed statement.

Which part? Immediately after you wrote this you restated something I had written in the text you quoted. Since you restated it I suspect this isn't the uninformed part. So I suspect it is the packaging machines being 'realtively unstiff' part. Unstiff (that would be compliant for the rest of us) relative to what? Keep in mind that stiffness only has significant meaning when taken in context with the masses and forces involved. So while a packaging machine may not be as stiff as a machine tool it is also not seeing the same forces that a machine tool is. Also, while I have not see all the packaging machines on the market yet, I hav yet to see one that needs to hold the tolerances of a machine tool.

Keith
 

Similar Topics

Good afternoon all, We have a carton machine with 7 Ultra3000 sercos drives controlling various servo motors. From what I understand, It has...
Replies
0
Views
446
The CP led indicator flashes red for a split second then back to green. Other two led indicators stay green at all times. I’ve checked...
Replies
1
Views
1,514
Hi you all!!! How do i download the backup in a drive ultra 3000 sercos? I tried to do this through the ultraware software, but it...
Replies
3
Views
1,058
Trying to configure the 2nd drive on this machine. It is being difficult. I have the gains speed encoder data all with good data. when I try to...
Replies
8
Views
1,857
Hi all, My first post 🍻. I'm Jay from the UK. We are in the process of upgrading our hardware to 1756-L83ES, most of our lines use...
Replies
2
Views
1,678
Back
Top Bottom