Anda di halaman 1dari 42

U NIVERSITY OF T WENTE , FACULTY OF EEMCS

INTERNSHIP

INX International Ink Co.


Motion sequences of multi-axis systems

Evyatar Bukai - s1573136


Company supervisor: J. Lambert
UT supervisor: J. Broenink
September 14 - December 25, 2015

C ONTENTS
1 Introducing the company

2 Overview

3 CMMP
3.1

3.2

ACR-View programs . . . . . .
3.1.1 Homing routines . . .
3.1.2 Printing program . . .
Printing mode - fully-engaged

6
.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

4 Test sled
4.1

4.2

CAM Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1 Given and calculated constants . . . . . . . . . . . . .
4.1.2 Calculating necessary parameters in order to obtain
and z 2 elevations . . . . . . . . . . . . . . . . . . . . . .
4.1.3 Conditional statements for the printheads path . . .
4.1.4 Final motion profile and plotted path . . . . . . . . . .
ACR-View programs . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.1 Homing routine . . . . . . . . . . . . . . . . . . . . . . .
4.2.2 Printing program . . . . . . . . . . . . . . . . . . . . . .

13
. . . . . . . .
. . . . . . . .
the required
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .

. .
. .
z1
. .
. .
. .
. .
. .
. .

5 Conclusion
Homing routine of linear Axis on the CMMP . . . . . . . . . . . . .
Homing routine of rotary Axis of the CMMP . . . . . . . . . . . . . .
Printing program for the CMMP . . . . . . . . . . . . . . . . . . . . .
Homing routing for the maneuverable printhead on the Test-Sled
Bottle detection for the Test-sled . . . . . . . . . . . . . . . . . . . .
Printing program for the Test-sled . . . . . . . . . . . . . . . . . . .
Test of Mini-Test-sled . . . . . . . . . . . . . . . . . . . . . . . . . . .

14
15
16
18
22
23
23
24

26

6 Appendix
6.1
6.2
6.3
6.4
6.5
6.6
6.7

6
7
8
9

27
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

27
27
29
31
33
33
39

1 I NTRODUCING THE COMPANY


INX International is a global supplier as part of Sakata INX, a $1.3 billion company. The main
focus being on formulations for printing, from basic chemistry to finished end user merchandise, they provide advanced ink systems and services for digital printing operations supporting their products.
Their collaborative R&D facilities, located in more than 50 locations around the globe, lead
to the production of enhanced products, systems and services. In addition to leading in the
ink-jet inks for digital printing industry, they offer a complement of technology, application
and system integration services.
Owning 60% of the worlwide market of prints on aluminum cans, and almost 100% in the
United states, their success does not lie solely on their ink technology. The success of their
products allowing the use of direct object printing has significantly increased by the selfdevelopment of the technologies able to do so.
The facility of INX International in Huntsville, once Innovative Solutions Inc., was acquired
due to their unique and revolutionaries developed technologies in the industry. They are
composed of highly technical staff consisting of Electrical Engineers, Software Engineers,
Printer System Architects, Printing Technology Experts, Motion Control Engineers and more.
Their unique patents for printing on cylindrical objects, alone, made them one of the leaders
in the field of R&D.
The facility recently develloped revolutionary motion machinery using Parker motion systems. In addition to get intuitive and work on their main focus, the PM3 - an ink supplying control system, I was charged with the task to experiment and propose new functionality that could be available through the motion controllers of those systems. The systems I
mostly got to work with were the Continuous Multi-Motion Printer (CMMP and the new nonsymmetrical multi-motion object printing system, the Test-sled - both of which are still under
development and highly confidential. It is important to note that those systems are not yet
available on the market, and the readers discretion is imperative.

2 O VERVIEW
In order for me to get accustomed and get started in the printing industry field, I was given
the opportunity to see and work with many projects in parallel. The company allowed me to
work with many engineers and people within different positions so I get a real feeling of how
does a company in this scale works, have a wide overview over the composition it requires, as
well as get familiarise with the many technologies they developed over the years.
Since INX Internationals main focus is on selling ink, the first weeks I was allowed to go
through the ink production process in the facility located in Prague, Czech Republic. Receiving background knowledge on the end users product was vital in order to later be able
to understand how the many complex systems can process it. Ranging from the studies of
the chemical components they are using in order to produce their fluids/ink while assisting
chemical engineers, to running assisted demos on the available machinery for testing, calibrating and tuning parameters to get an ultimate desired result, I was exposed to highly confidential and crucial information in order to get started with my internship. I was not allowed
to take any detailed notes in this period of my internship, such as the chemical components
and the respective processing of the ink itself.
After my arrival to Huntsville, Alabama, I followed a training week with the presence of many
professionals that arrived from around the country. This week was about servicing already
existing technologies, troubleshooting, tech training, equipment and software overview, issue handling, repairing and replacing components and much more. I was handed many user
guides to study, from their most successful technology - JetINX printing and ink recirculation
system - to the many drivers and software they are using in their daily routines.
The main focus of my internship was aimed at the experimentation with motions of two different systems - the CMMP and the Test-sled. The implemented controllers, drivers and
servo-motors on both of those systems where of Parker Hannifins products. In order to be
able to experiment with those technologies, it was required to get acquainted with them by
learning to use ACR-View software - the communication platform between the user and the
Aries9000-EPL controllers. This also included learning the structured text programming of
the motion control system - ACR-Basic.
The first step for both of the systems was to tune some motion parameters for the best achievable systems performance. This included, withal, tuning the PID gains for the control algorithm, as well as setting up the systems gearing parameters. Those were tuned in order to
meet the systems requirements, and keeping it stable at all times. We considered parameters
such as the rising time, overshoot - which could lead to jerking specific parts of the system,
settling time, as well as steady state error.
We also had to create several motion sequences. Those included homing routines, for repeatability and definition of initial conditions for the maneuverable parts of the system. Those
initial positions allowed us to later on provide information through the possible range of motion of the machine. Hence, by knowing the required motion of our system for successful

printing to be accomplished, we were able to write printing programs relating those motions
and control programs of the inkjet printhead in order to fulfill the instructed tasks.
Some motion sequences involved were straightforward, combining linear and rotational motionsas for the CMMP. For the Test-sled, the requirement of printing on a basseball bat entailed us
to create a non-linear motion sequence on the multi-axis system.
In addition to the experimentation with motion system on the two different machines, the
reader can find in this report a discussion about a different and more efficient, in specific
cases, printing mode for the CMMP - fully-engaged. The calculationx of the motion profile
of the maneuvarable printhead on the Test-sled can also be found, allowing us to follow the
profile of the baseball bat.
At the end of this report, in the Appendix, the reader can find all the motion programs written
for the studied systems. Those programs were tested, and work properly in order to be able
to print images on the different substrates those two offer.

3 CMMP
The CMMP is composed of a printhead mounted on a linear axis and a substrate mounted on
a rotational axis. While a rotational motor rotates the substrate object at a certain velocity, the
printhead prints on the object by controlled jet output of ink while moving linearly in order
to cover the whole objects length. The rotation of the object is continuous, and the printing
of images is done one color layer at a time.

Figure 3.1: CMMP system

3.1 ACR-V IEW PROGRAMS


The functions of the mechanical components of the inkjet printing system are controlled by
the software that drives the printer. With the information we send, processing is taking place
in order to tell the printer what to do, or when to print, mostly with the use of Raster Image
Processing - RIP. The drive electronics responsibility is to interpret the pixels to be printed
in terms of layout of the printhead, the voltage it requires, the timing of the start of printing
- but also its speed and motion over the substrate to be printed on. On multi-axis printing
systems, as we those we are dealing with, placing drops of ink of the right size in the right
place is highly dependent of the overall axis motions of the system.
Considering the CMMP in composed of an ACR controller, combined with Aries servo/stepper
drives, we are using a code-development tool to assist us with their use - ACR-View. In combination with parameter signals obtained from the companys printing control C# codes, and
the processing carried out in the RIP software, we are able to perform adequate systems actions and motions in order to perform satisfactory printing process. We are using ACR-Basic
in order to implement such functionalities.
We will first view several homing routines which will allow us to place our loads, such as the
substrates support or the printhead with its recirculation system, in well-defined points Home positions. This is very important, especially considering the types of encoders implemented on the CMMP. We will then present the printing program that will allow us to perform
adequate actions on the servo-drives in order to obtain the results we expect.

3.1.1 H OMING ROUTINES


As in every modern control systems, the CMMP is equipped with feedback devices that are
used to ensure that the motor/load reaches the commanded position/velocity. Due to its low
cost and ability to provide signals easily interpretable by the implemented systems controller,
an incremental encoder is used on the machine. In contrast with an absolute feedback, relative feedback requires to be used in conjunction with a type of absolute feedback in order to
determine the initial position - limit switch. Knowing this initial position allows us to later on
provide information through the possible range of motion.
It is important to create homing routines, a sequence of moves, that position an axis using
Home Limit inputs - positioning the load in a well-defined point, the Home position. This
position will later be the starting point of every executable operation. When the homing
operation successfully completes, the controller sets the absolute position register to zero,
establishing a zero reference position.
As we are using two axis of the CMMP, we have two homing routines to perform.
Linear-axis homing routine
The homing routine of the linear axis is pretty straight forward.
We will first set a defined pulses per programming unit for the axis. This allows programming
in units other than pulses, for example inches/millimiters. It is obviously greatly dependent
on the lines of the encoder set on the specific motor actuating the axis.
Next we define the JOG profile. As we are having no specific requirements, those have been
chosen so that the load - the PM3 - on the linear axis will not have a significant jerk.
Finally, we simply home the axis by using the JOG HOME command.
The corresponding written program can be found in the APPENDIX section. Please note that
the green text in this section are comments for the user to be able to follow the procedure of
the routines.
Rotational-axis homing routine
The rotary axis is not as simple as we previously saw. We need to take into account several
additional parameters.
First of all we should assign the axis position feedback signal to some slave. We will therefore
attach it to Axis3, for example.
1
Considering the system is composed of a reducing gearbox, with a ratio of 32
between output
and input, and the motor has 8000-line encoder (pulses per revolution), we need to define a
new pulses per programming unit for our rotational axis:

PPU = 8000 32

(3.1)

After clearing all necessary flags for well examination of our homing routine, we reset the ac-

tual position of both the encoder and axis to zero. We then define a JOG profile, as we did in
the homing routine of the linear axis.
The homing routine begins by jogging the motor forward. We do so until there is an hardware position capture from the encoder, which is triggered by a specified source defined by
the hardwares capture register. The trigger causes the hardware to latch the encoder count
of the position feedback encoder of the axis, stores the value in the desired capture register
and sets an interrupt. When the capture is done, we stop the jogging and store Axis3 and the
encoders positions.
Finally, we reset the rotational axis to be the difference between the Axis3 and the encoders
positions (considering the number of counts of the rotary encoder to be 472000), and we jog
an increment of the previous position of AXIS1 (considering the number of counts of the rotary axis).
The corresponding written program can be found in the APPENDIX section.

3.1.2 P RINTING PROGRAM


Every system has its own required motion to be executed in order to print on the designated
object. The nozzles of the printhead are shot via software control. Nevertheless, we require
a specific motion, hardcoded beforehand, in order to print on the wanted substrate. In the
subsections before, we saw homing routines that would allow us to home different axis - what
we could consider being an absolute initial condition for repetitive actions performed by
corresponding actuators. In this subsection, we will go through the printing program itself.
Considering the Test-sled is composed of a similar controller and servo/stepper-drives as the
CMMP, we will see that their printing programs just differ by the actual motions required to
be performed.
This program is applied to each color layer to be printed. The idea is to collect parameters
that we require in order to apply the necessary motion for the printing process. In our case,
considering helical printing, we require the following parameters:
Lines to advance with each revolution - which we will obtain from the selected printing
mode
Resolution of printing - in our case, it is the images vertical DPI (Dots Per Inch)
The rotary speed of the tube-like object/support inch printed per sec
diameterbot t l e

(3.2)

with,
inch printed per sec =

printhead fire freq (by drop size) printhead fire freq (by drop size)
=
horizontal dpi
dpi to print
horizontal interleave
(3.3)

Rotation count, calculated as images vertical dots

printheads range + vertical dots per inch


lines to advance
resolution of printing (images vertical dpi)

(3.4)

Start printing position - the initial position of the printhead


In addition, for appropriate motions on the CMMP, we need to establish a couple of parameters for our linear axis X considering the gearing and ratios with regards to the previous
parameters we will use for the printing process. The following commands were used:
GEAR SRC enables us to specify the gear source for the axis to be Encoder 8
GEAR PPU establishes a relationship between the source encoder and the input shaft of the
electronic gearbox. In our case, it should be the counts of the rotary encoder: 472 000.
GEAR RATIO settles the ratio between the input and output shafts of the electronic gearbox.
In our case, this ratio would be equivalent to the lines we have to advance per revolution,
devided by the images vertical DPI. Also, since we consider our units in mm, the gear ratio of
our axis should be equivalent to:

GearRatio X =

Lines to advance with each rev


Resolution of printing * 25.4

(3.5)

Finally, we can produce the necessary motions for printing on the objects.
We need to move the printhead to the starting position by moving our linear axis, wait for
the layer to be ready to be printed - throughout a flag from the printing control C# code, and
rotate the second/rotary axis with the necessary velocity. The printing takes then place by
allowing both motions to run simultaneously. After the printing is finished, we proceed to
the next layer to be printed - until all required layers are acheived on the object. Once this is
done, we turn off all gearing and terminate the process.
The appropriate program can be found in the APPENDIX section.

3.2 P RINTING MODE - FULLY- ENGAGED


In the following description, we are assuming helical printing on the CMMP. We saw that with
each revolution of the object to be printed on, the printhead advances a certain distance, covering a specific area on that object. We also established that depending on the printing mode,
the various motions of the systems differ in order to successfully print an image on an object.
In this section, we are comparing the usual printing mode with the fully-engaged one, as well

as discuss their use in different printing processes.


The idea of a fully engaged printing process is to further make use of the overall dimensions
of a printhead by minimizing the loss of time spent at the initial and final offsets this printhead would usually perform. The idea behind this process is that there is an optimization
issue when printing an image divided into segments, by considering the number of revolutions a single segment takes to print, in order to obtain the overall number of revolutions for
printing the image. Typically, a printhead would have an initial position prior to the image to
be printed. Assuming the printhead moves in order to begin the printing process, the section
that is started to be printed by the lead-end will not be utterly printed until the lag-end had
passed through that section. Subsequently, this leads at the beginning of each printing process to a big portion of the printhead to not being used - as there is always some preliminary
offset.
Let us take an example in order to better understand the concept. We will assume that we
are having an image, divided into two segments, to be printed on a tube-like object. Each
segment is divided into 4 sections which the printhead should cover. The printhead itself
is assumed to be devided into 4 parts, each part advancing and covering the next segment
with each revolution; hence, for simplicity, each part the printhead is composed of is of equal
width with the sections the segments are composed of. Furthermore, each section is entirely
done printing considering the printhead passed through it 4 times. We consider that each
time step is corresponding to one whole revolution of the tube-like object.

Figure 3.2: Usual printing mode


As we can see from Figure 3.2, the printhead as an initial position at t 1 . At t 2 , the first section
of the first segment of the image is started to be printed by the lead-end of the printhead.
Nevertheless, this section will not be ready, or done, until the lag-end of the printhead passes
through it - so until t 5 . At this time, the printhead passed through the first section of the first
segment 4 times. By following this process, we can easily understand that considering both
our segments, our image will be completely done printing at t 13 . Hence, assuming our con-

10

ditions, the image will be printed in 12 revolutions.

Figure 3.3: Fully


Let us now assume a fully engaged process. From Figure 3.3, it can be observed that we assumed that with each revolution, the printhead advances just 14 the distance it advanced priorly. In order to print the first section of the first segment, we advance 4 revolutions - the first
section is done printing at t 5 . Nevertheless, this process also allowed us to print the remaining 3 sections of the first segment, so that the whole segment was done printing at t 5 . We are
then offsetting the printhead to be ready to print the second segment at t 6 . Segment 2 is done
printing at t 10 . Asssuming our previous conditions, we can say that it took us 9 revolutions to
print the whole image.
From the example, above we can obviously see that in our case, and assuming our conditions,
it takes less time to print our image in a fully engaged mode than not. Obviously, we can not
generalise every case and need to assume the number of segments we have per image, as well
as the number of revolutions it takes us to print the segment. Let us consider Z to be the total
number of revolutions for printing the image, Y the number of revolutions to print a segment

11

(number of parts per segment) and X the number of segments our image is composed of. We
can then write that for the fully-engaged mode:

Z = (Y X ) + (X 1)

(3.6)

Z = Y + (Y X )

(3.7)

And for a non-fully engaged mode:

We can now consider which printing mode will result in a shorter time, or overall revolutions
by our object to be printed on, to complete our printing. Let us remember that we perform
only whole-revolutions. Hence, for an image composed of 8, 9 or 10 sections in total, for
example, the number of revolutions performed will be the same. In the following Figure we
can confirm that, as in our example, for 2 segments per image with 4 revolutions to print a
single segment, the fully-engaged mode results in less overall number of revolutions to be
performed in order to print our image.

Figure 3.4: Number of revolutions required to print an image: usual versus fully-engaged
mode

12

4 T EST SLED
The Test-sled enables us to print on non-symmetrical objects, given its ability to move objects
in different directions. In order for us to print on tube-like objects, helical printing is used.
While our object moves linearly in the x-direction, it rotates in the y-direction; by controlling
the motion of the object with respect to what end result we require, this allows us to print on
the whole surface of the tube-like object in a fast and consistent manner.
Helical printing was used until this day in order to print on objects such as cans. Given their
profile, it was enough for the printing head to be placed statically on the printing machine,
while the object moved and rotated on itself. This obviously worked, due to the fact that the
distance between the printing head and the object itself did not change throughout the whole
process.
Taking a step further, and considering we want to print an object where its profile is not uniform: its radius would be varying, we need to consider yet another motion of our printing
system. It would be possible to think that placing the printhead far enough from the objects
largest radius could be enough to print on its whole length. Nevertheless, considering the
importance of the printheads placement with regards to the quality and end result obtained
- more specifically, the change of the inks characteristics when leaving the nozzles - we could
not expect a proper printing outcome.
A solution that was designed in order to compensate for this issue is placing the printhead on
a varying fixture. By fixing to it two linear motors side by side, the printhead is able to change
the height of its leading, or lagging, ends in order for it to induce a certain angle with respect
to the x-axis. By creating specific motion profiles for the required object to be printed on, this
enables the printhead to follow along the change of profile of the object itself. The distance
between the printhead and this object would now be homogeneous throughout the printing
process.

13

Figure 4.1: Test-sled system

4.1 CAM P ROFILE


In this section we will describe the steps that were necessary in order to acheive the obtention
of the CAM profile for a baseball bat.
The following figures are a schematic of the baseball bats profile, as well as the printheads
dimensions. z 1 and z 2 are the elevations in the z direction of the stepper motors connected
to the printhead. x 0 through x 5 describe the different sections of the bat. r 1 and r 2 represent
the radius between the line crossing the middle of the bat and the distance we would like the
printhead to be from its surface.

14

Figure 4.2: Schematic of the basseball bats profile

Figure 4.3: Printheads dimensions


4.1.1 G IVEN AND CALCULATED CONSTANTS
We will obtain all the necessary calculations in order for us to draw the motion profile of
the printhead. Nevertheless in order to do so, we need to provide constants and calculated
constants from a specific baseball bat profile, as well as several necessary dimensions and
parameters. All constants unit are in mm. Please note, that while those constants are correct
for a specific bat type, those values may differ for different types of bats. The following values
are mainly for example purposes and should be thoroughly checked with the actual used
materials before any implementation into the machine is performed.

15

Constant

Value

d1
d2
OFFSET
x0
x1
Barrel Length
Length of Print
R1
R2
Home Position: z 1h
Home Position: z 2h
Distance from Home Centerline
Initial Print Height: Hi

20.955
56.642
2
0
100
211.68
600.08
866.394
1299.464
-1
-0.9
51.1
38.6225

The following calculated constants are all in mm, except the inflection angle , in degrees.
Again, what is important are the calculations - rather than the values themselves, which are
greatly dependent of the type of the bassebal bat considered.
Constant

Calculation

value

r1
r2
R 10
R 20

x2
x 30
x4
x5

d1
2
d2
2

12.4775
30.321
868.394
1297.464
7.35972
311.68
422.9199
589.1229
700.08

+ OFFSET
+ OFFSET
R 1 + OFFSET
R 2 + OFFSET
1 r 2 |
cos1 1|r
R 1 +R 2
Barrel Length + x 1
x 2 + R 10 sin
x 2 + (R 10 + R 20 ) sin
x 1 + Length of Print

4.1.2 C ALCULATING NECESSARY PARAMETERS IN ORDER TO OBTAIN THE REQUIRED z 1

AND z 2

ELEVATIONS

In order for us to implement a profile into the motors control software, we must create the
required motion. This includes taking into account dimensions and properties that are given
to us, such as the printheads characteristics, or the systems composition, and calculating the
angle the printheads should take at certain x-positions.
What we ultimately require, is the elevations of both motors in the z-direction, z 1 and z 2 , so
that a proper input is provided in order for the motion of the printhead to perform appropriately. In order to find the corresponding z-values for every corresponding x-positions, we
need to calculate several variables. The fixtures and bats physical dimensions were given in
the subsection before.

16

Looking at the baseball bat profile, we can devide it into four sections. The section of the
barrel, where it is straight; before x 2 . The section between x 2 and the inflection point x 30 . The
section between the inflection point x 30 and x 4 . And finally, the section of the handle, where
it is once again straight; after x 4 . It is natural that the printhead would be parallel to the xaxis at the barrels and handles sections. What we are more interested about, are the section
forming the "S-shape" of the bat.
Distance to hard stop of the system:
Distance to hard sensor:
Distance from rail:

0.773"
0.653"
1.371"

and
Offset to biggest bat:
Offset to smallest barrel:
Distance to handle:

0.058"
0.244"
0.946"

Section between x 2 and x 30


With x mp , being the x-position of the midpoint of the printhead, as well as x i , the nozzles
lead x-position, we know that

x2 +

70.5556
70.5556
< x i < x 30 +
2
2
0
x 2 < x mp < x 3

with

x mp = x i 35.278
x = x mp x 2
x
= si n 1 0
R1

(4.1)

So in order to achieve this angle, we need a change in the z axis for the specific motor
distance between pivots
= 40.64si n()
2
z 2 = 40.64si n()

z 1 = si n()

(4.2)

To determine translational move in height, considering Hi the initial printing height,


z mp = R 10 cos() + R 10
Hi mp = Hi + z mp = Hi + (R 10 R 10 cos())

(4.3)

17

So
z 1i = Hi + (R 10 R 10 cos()) 40.64si n()
z 2i = Hi + (R 10 R 10 cos()) + 40.64si n()

(4.4)

Inflection point x 30
Since we know the angle at the inflection point to be , it is pretty straight forward to write
that on x = x 30 or x = inf,
Hi n f = Hi + (R 10 R 10 cos())

(4.5)

Section between x 30 and x 4


As we did for the previous subsection, we can write that

x 30 + 35.278 < x i
x 30

< x 4 + 35.278

< x mp < x 4

and

= si n 1

x 4 x mp
R 20

(4.6)

With
H = R 20 (cos() cos())
Hi mp = Hi + (R 10 R 10 cos()) + R 20 (cos() cos())

(4.7)

So that
z 1i = Hi + (R 10 R 10 cos()) + R 20 (cos() cos()) 40.64si n()
z 2i = Hi + (R 10 R 10 cos()) + R 20 (cos() cos()) + 40.64si n()

(4.8)

4.1.3 C ONDITIONAL STATEMENTS FOR THE PRINTHEAD S PATH


We have now obtained the necessary equations to further invistigate the printheads path.

18

In order for us to draw the path of the printhead, we use conditional statements to create a
motion profile able to perform the appropriate printheads movement with respect to its location on the x-axis. Considering the printhead is having specific dimensions and that just
a fraction of is actually composed of nozzles, we need to take into account the avoidance of
crashes that could occur with the bat.
x mi d posi t i on , being the middle point of the printhead in the x-axis, will be given as an input
and allow us to calculate the necessary values of the elevations.
The reason we write down the possible path of the printhead in conditional statements is because it is the most forward and clear way we could present the calculation of the printheads
elevations providing the parameter values we obtained previously. The reader is advised to
follow the previous diagrams in order to fully understand the obtained results.
Data:
Result: Calculating , the angle formed by the z-axis and R 10 , considering the midpoint
x mi d as x-value
if x mi d > x 2 and x mi d x 30
then
si n 1 xmiRd 0x2
1

else
0
end

Data:
Result: Calculating , the angle formed by the z-axis and R 20 , considering the midpoint
x mi d as x-value
if x mi d > x 30 and x mi d x 4
then
mi d
si n 1 x4 x
R0
2

else
0
end

19

Data: Lx l ead i ng (l ag g i ng )
Result: Calculating Lx l ead i ng (l ag g i ng ) , the x-position of the printheads front and back
side, respectively
if x mi d > x 2 then
if x mi d > x 30 then
if x mi d > x 4 then
x mi d +()45.1
else
x mi d +()45.1 cos
end
else
x mi d +()45.1 cos
end
else
x mi d +()45.1
end

Data: l ead (l ag )
Result: Calculating l ead (l ag ) , the angle formed by the z-axis and R 20 , considering the
lead(lag) x-value
if Lx l ead (l ag ) > x 30 and Lx l ead (l ag ) < x 4
then
sin1

x 4 Lx l ead (l ag )
R 20

else
0
end

Data:
Result: Calculating , the angle formed by the z-axis and R 10 , considering the lag x-value
if x mi d > x 30 and Lx l ag > x 2 and Lx l ag < x 30
then
si n 1

Lx l ag x 2
R 10

else
0
end

20

Data:
Result: Calculating , the angle formed by the z-axis and R 10 , considering the lead x-value
if Lx l ead < x 30 and Lx l ead > x 2
then
x 2
si n 1 Lxl ead
R0
1

else
0
end

Data: Ly l ead (l ag )
Result: Calculating Ly l ead (l ag ) , the y-position of the printheads front and back ends,
respectively
if x mi d > x 30 then
if x mi d > x 4 then
DistanceFromHometoCenterline r 2
else
Hi R 10 (1 cos() R 20 (cos() cos())+()45.1si n
end
else
Hi R 10 (1 cos())+()45.1cos()
end

Data: Hl ead (l ag )
Result: Calculating Hl ead (l ag ) , the height of the lead(lag) end of the printhead
if Lx l ead (l ag ) > x 30 then
Hi R 10 (1 cos()) R 20 (cos(l ead (l ag ) ) cos())
else
Hi R 10 (1 cos())
end

21

Data: z 1(2)
Result: Calculating z 1(2) , the necessary z-value for the first, and second, motors
if x mi d < x 2 then
Hi
else
if x mi d < x 30 then
Hi R 10 (1 cos())+()40.64si n()
else
if x mi d < x 4 then
Hi R 10 (1 cos()) R 20 (cos() cos())+()40.64si n()
else
Hi + (r 1 r 2 )
end
end
end

Data: z 1(2) adjusted


Result: Calculating z 1(2) adjusted, the adjusted necessary z-value for the first, and
second, motors - considering the previously necessary calculated heights of the
printheads ends
if x l ag (l ead ) > Hl ag (l ead ) then
z 1(2) 40.36
45.1 (Ly l ag (l ead ) Hl ag (l ead ) )
else
z 1(2)
end
4.1.4 F INAL MOTION PROFILE AND PLOTTED PATH
We have finally obtained all the considered variables we wanted to plot in order to observe
the printheads motion profile. Considering our previous given constants, and an array of
given x mi d as input, we could draw the final path of the printhead.

22

Figure 4.4: Motion profile of the printhead following the curve of a basseball bat

4.2 ACR-V IEW PROGRAMS


4.2.1 H OMING ROUTINE
As in the CMMP, the test sled is equipped with feedback devices used to ensure the motors
are reaching the commanded positions/velocities. The homing routine of the linear axis is
similar to the one we saw on the CMMP, hence we will only observe the homing routine of
the step motors on the articulating head.
The homing routine would be pretty straightforward in our case.
We will first set a JOG profile, which will not matter much - as we are not having any time
requirements for our routine. This will also include the homing final velocity, JOG HOMVF,
which specifies the velocity of the homing operation at its final approach.
We will then clear some homing flags as with each time we run the homing routine we would
like to start the process anew; those flags would be, for example: Found Home, Home Backup
Enable, Negative Final Direction.
We will instruct the controller to search for the home position in a certain direction, in our
case the negative one. This is due to the fact that this negative direction, for the controller,
would be the positive direction in the z-axis for us. In the case we would have set in the positive direction for the controller, an end-of-travel limit would be activated while reaching our
lowest z-point, and the controller would start searching for Home in the opposite direction.
This would obviously work, but take a longer time - since our home point is almost at the
highest z-point our motors can reach.
A simple if condition would allow us to check the Found Home flag in case we successfully
accomplished the operation.

23

The appropriate program can be found in the APPENDIX section.

4.2.2 P RINTING PROGRAM


Similarly to what we saw previously for the CMMP, the Test-sled requires a program that
would order the printheads to print on the baseball-bats when defined conditions have been
met. As indicated before, the CMMP and Test-sled have a comparable controller, as well as
servo-drives - hence our program will follow the same guidelines. Furthermore, we will use
the previously calculated CAM profile in order to define the appropriate motions of the maneuverable printhead.
We are using three slaves in order to define the four actuation acting in the system. First, Axis0
will be the linear axis, moving the base-ball in a linear motion in the X -direction. Axis1 will
be the rotary axis, allowing the bat to rotate about itself and moving in the Y -direction. Axis2
and Axis3 will define both of our stepper motors, moving the printhead in the Z-direction
and yielding to a specific angle with respect to the X -axis.
Considering this is once again helical printing, we define our five parameters, used from the
C# code relating the printed image and the action done by the printheads nozzles, as we did
for the CMMP. We are also running the head crash detection program in order to avoid crash
with the bat.
Gearing parameters for the X -axis are defined once again; specifying the gear source for the
axis to be Encoder 8, Pulse Per Unit establishing the relationship between the source encoder
and the input shaft of the electronic gearbox - counts of the rotary encoder divided by two:
327680
= 163840, and defining the gear ratio.
2
Next, we are moving the basseball bat to the starting position on the X -axis. Using bits reserved for the uv lamp ON/OFF for each layer from the PrintControl.cs code, we assign the
lamp to the Aries-EPL output 2 or 3 in order to use the curing lamp if available.
We are starting the Z-axis motion part by defining the JOG-profile. The stepper motors allow
us to define high acceleration and deceleration without producing much jerk. Next, we are
allocating memory space for long array references. This allows us to enter the obtained parameters from the CAM profile, and the specific values for both of our stepper motors in the
Z-direction, with respect to the basseball bats X -position.
As our bat is divided into 3 segments, we define it as such using allocated memory for long arrays. The handle is defined as the first segment, of length 266 mm. We then have the segment
where our CAM profile takes place, of length 324 mm - and where we are using the calculated
values in the previous subsection. Finally, we have the barrel of length 115 mm.
We can now finally start the "camming" motion. We do so while jogging Axis1, the rotary axis,
with the necessary rotation counts and speed. The printing process is now similar to the one
we used on the CMMP - the printing is done by layers, and using the c-sharp PrintControl.cs
code to use the necessary parameters and flags for successful and appropriate printing of

24

our image. When all layers have been successfully printed, we clear all previously used flags,
home the stepper motors and turn all gears off.
As we can observe, the main issue and limitation of coding CAM motion in ACR-Basic is hardcoding the CAM table into the program. It would be of more ease to be able to refer to this
CAM table written in an Excel table, for example, so that changing the required motion with
respect to a specific baseball bat would be of less work. Unfortunately, ACR-Basic does not
allow us to do so.
Furthermore, ACR-Basic does not seem to be a user-friendly language code to write. The
use of Bits and Parameters in order to define our actions are slowing coding speed dramatically. Due to this, and in combination to many more downsides of the coding language, it
was decided that the company will slowly shift into a different controller so that a better programming platform can be used. Mostly, and most importantly, the IEC 61131-3 standard for
programmable logic controllers would need to be available.
The appropriate program can be found in the APPENDIX section.

25

5 C ONCLUSION
Receiving background knowledge on the ink used in the printing systems I worked with was
of vital importance. There is a great deal in understanding the process of ink-jets and printheads functionality when dealing with motion required to print an image on a substrate in
a consistent and appropriate manner. The values and features of the end-user products are
a result of many parameters: the quality of the ink used, the technologies of the hardware
mechanisms, the algorithms used for the nozzles jet control, the precision and robustness of
the motions of the system and many more.
Being responsible of the motion created by the substrate, and printhead, thanks to multi-axis
systems was just a cog in a very complex mechanism in order to print an image on an object.
It was important, at first, to make sure all considered parameters in our motion profiles are
correctly tuned on our systems. This allowed us later for better systems performance. Dealing with the systems controllers and defining correct input for the gearing trains and power
transmissions was as important as carefully tuning the PID gains, considering specific requirements, for the control algorithm used. Following, it was possible to create motion sequences.
Homing routines allowed us to return loads, such as the printhead, to a repeatable starting
location. The controller sets the absolute position register to zero when home was reached,
and allowed us for determined use of absolute motion with respect to a reference position. It
was vital to properly code those routines, as every sequence of motions was later on beginning with those.
The motion sequences for the printing programs of the CMMP and Test-Sled involved the use
of parameters obtained from external C-sharp programs. Specific velocity profiles, starting
positions, motion requirements are all inherited from programs relating the printing mode,
images end-product needs and functionality of the printhead/nozzles. Using those, we were
able to create the necessary linear and non-linear motion sequences on those two multi-axis
systems. And, whereas some sequences were straightforward, when dealing with more complex objects to be printed on some elaborated calculations were needed.
After dealing with the controllers interface, ACR-View, it was possible to observe the complexity of coding those motion sequences. After long research, and compatibility check with
the already existing servo-motors available on both our systems, we were able to find a more
suited systems implementation that will both fulfill the requirements for the motions of our
systems, as well as ease their future use.
Instead of the use of the ACR-9000 EPL controller, combined with the Aries-EPL drives on
both of our systems - a combination of the Compax3 drive from Parker-Hannifin with the
MC4N-Mini Ethercat Master controller from TRIO Motion Technology was decided to be implemented on the systems next. This would allow the future coding of the motions of the
different axis on our systems to be done in MotionPerfects interface, a much more straightforward and thoroughgoing platform to deal with introducing the IEC 61131-3 standard for
programmable logic controllers.

26

6 A PPENDIX
6.1 H OMING ROUTINE OF LINEAR A XIS ON THE CMMP
PROGRAM
DETACH : REM cancels the previous created master and slave attachments
ATTACH MASTER2
PPU AXIS0 1000 : REM sets the pulses per programming unit (PPU) for axis
CLR 522 : REM clear MASTER0 KAMR
AXIS0 DRIVE ON
DWL .25 : REM dwell time
AXIS0 JOG ACC(200) : REM defining JOG settings
AXIS0 JOG DEC(200)
AXIS0 JOG VEL(50)
AXIS0 JOG HOMVF (5)
AXIS0 JOG HOME -1
WHILE (NOT BIT16134 AND NOT BIT16135) : REM status flag of Found Home and Failed
to find Home of AXIS0
WEND
IF (BIT16135)
PRINT "Homing failed"
ELSE
PRINT "Homing Axis0 Succeeded"
HomedRightLinear = 1
END IF
ENDP

6.2 H OMING ROUTINE OF ROTARY A XIS OF THE CMMP


PROGRAM
HomedRotary = 0
ATTACH AXIS3 ENC8 STEPPER2
ForestGreen: REM attaches to AXIS3: ENC8 as position feedback, STEPPER2 as the command signal output ATTACH AXIS1
AXIS1 PPU (8000*32)
CLR 16164 : REM clear +Hard Limit Encountered
CLR 8499 : REM clear AXIS1 KAMR
CLR 554 : REM clear MASTER1 KAMR
CLR 16167 : REM clear Failed to find Home of AXIS1

27

AXIS1 JOG OFF


INH -824 : REM wait until jogging is stopped
IF (BIT8497=0) : REM flag Drive Enable Output of AXIS1
AXIS1 DRIVE ON
DWL 0.2
ENDIF
AXIS1 RES : REM set the commanded and actual position to zero
AXIS3 RES
PRINT "HOMING Rotary Axis..."
AXIS1 JOG ACC (10)
AXIS1 JOG DEC (10)
AXIS1 JOG VEL (1)
AXIS1 JOG HOMVF (0.25) : REM set Home Final Velocity
AXIS1 JOG JRK (0)
AXIS1 JOG REN
BIT830=0 : REM turn off jog limits
BIT831=0 : REM JOG lock out off
CLR 16164 : REM clear +Hard Limit Encountered
CLR 8499 : REM clear AXIS1 KAMR
CLR 554 : REM clear MASTER1 KAMR
CLR 16167 : REM clear failed to find home
AXIS1 JOG INC (-0.01)
INH -824 : REM wait until jogging is stopped
AXIS3 INTCAP 16 CAP3 P13060 : REM enable hardware position capture triggered for
AXIS3 at mode10 (trigger when rising of third external is found), hold the captured position in register CAP3, using Hardware Capture flag for AXIS3 to store the captured value
after it is passed from the capture register
AXIS1 JOG FWD : REM JOG forward
INH 873 : REM wait till capture complete
AXIS1 JOG OFF
PRINT P13060 : REM capture position for AXIS3 when marker crossed
IF (BIT 16167) THEN PRINT "FAILED TO HOME"
INH -824 : REM wait until jogging is stopped
PRINT P13060 : REM current position of AXIS3
PRINT P6272
: REM position of ENC8
RES AXIS1 ((P13060 - P6272)/472000) : REM set axis per captured ENC8
PRINT P12546 : REM actual position of AXIS1
RES AXIS3 (-(P13060 - P6272))

28

CLR 16164 : REM clear +Hard Limit Encountered


CLR 8499 : REM clear AXIS1 KAMR
CLR 554 : REM clear MASTER1 KAMR
CLR 16167 : REM clear failed to find home
PRINT P12546
AXIS1 JOG INC (-P12546/256000)
INH -824 : REM wait until jogging is stopped
PRINT P12546
HomedRotary = 1
PRINT "Done Homing Axis1"
ENDP

6.3 P RINTING PROGRAM FOR THE CMMP


PROGRAM
DIM LV(3) : REM allocates memory space for 4 bytes element (32 bit integers) + 4 bytes
DIM DV(1) : REM allocates memory space for 8 bytes per element (64 bit floating point)
+ 4 bytes
LV0 = (472000/20000) : REM rotary counts before engaging gear
LV1 = 0
LV2 = 0
LV3 = 0
DETACH
ATTACH MASTER0
ATTACH SLAVE0 AXIS0 "X"
CLR 16132 : REM Clear +Hard Limit Encountered
CLR 8467 : REM Clear AXIS0 KAMR
CLR 522 : REM Clear MASTER0 KAMR
_LAYERLOOP
LinesToAdvancePerRev = P(18+LV1)
PrintResolution = P(26+LV1)
RotarySpeed = P(34+LV1)
RotationCount = P(42+LV1) + P(58+LV1)
StartPosition = P(50+LV1)
DV0 = LinesToAdvancePerRev / PrintResolution * 25.4

29

INH -824 : REM wait -> flag: JOG active - axis 1


ENC8 RES : REM commanded and actual position to zero
PPU X800 : REM sets the pulses per programming unit (PPU) for axis
GEAR OFF X
GEAR SRC X P6272 : REM SET ENCODER 8 AS X GEAR INPUT SOURCE
GEAR PPU X(472000)
GEAR RATIO X(DV0)
PRINT "Move to position"
IF (BIT8465=0)
DRIVE ON X
DWL 1.0
ENDIF
X(StartPosition) : REM move head
INH -516 : REM flag - Axis0 in motion
WHILE (BIT(144+LV1)=0) : REM hold waiting for layer ready
WEND
GEAR ON X IHPOS (-LV0) : REM Enable gear on source encoder position
PRINT "Turn rotary drive on"
IF (BIT8497=0)
AXIS1 DRIVE ON
DWL 1.0
ENDIF
AXIS1 JOG VEL(RotarySpeed)
AXIS1 JOG INC(RotationCount)
IHPOS -P6272((P(64+LV1) * -472000), 0) : REM wait for encoder8 pos to destination ->
Inhibit on Position (FINISHED WITH LAYER)
GEAR OFF X
INH -789 : REM wait until gear off
IF (P(42+LV1) > P(64+LV1))

30

IHPOS -P6272((P(42+LV1) * -472000), 0)


ENDIF
SET 3842 : SET 3843 : REM EPL output2 / EPL output 3 for EPLD 0
GEAR RES X
LV1 = LV1+1
IF (LV1 < LayerCount)
GOTO LAYERLOOP
ENDIF
GEAR OFF X
INH -789 : REM wait until gear off
CLR 16132 : REM Clear +Hard Limit Encountered
CLR 8467 : REM Clear AXIS0 KAMR
CLR 522 : REM Clear MASTER0 KAMR
IF (BIT8465=0)
DRIVE ON X
DWL 1.0
ENDIF
X(5)
INH -516
INH -824 : REM wait until rotary jog off
REM HALT PROG1
ENDP

6.4 H OMING ROUTING FOR THE MANEUVERABLE PRINTHEAD ON THE T EST-S LED
PROGRAM
SET 5651 : Rem Line numbers
DETACH
CLR 8467 : REM kill motion request of the four Axis
CLR 8499
CLR 8531
CLR 8563
CLR 522 : REM kill moves of Axis0
HEADHOMED=0

31

REM P11=0
AXIS2 jog vel 10
AXIS2 jog acc 1000
AXIS2 jog dec 1000
AXIS3 jog vel 10
AXIS3 jog acc 1000
AXIS3 jog dec 1000
SET 8528 : REM make ACR run stepper Axis 2 in CW / CCW mode
SET 8560 : REM make ACR run stepper AXIS 3 in CW / CCW mode
AXIS2 DRIVE ON
AXIS3 DRIVE ON
AXIS2 JOG HOMVF .5
AXIS3 JOG HOMVF .5
CLR 16198 : REM clear flag Found Home
CLR 16230 : REM clear homed flag
CLR 16216 : REM backup to home disabled - clear Home Backup Enable
CLR 16248 : REM backup to home disabled
CLR 16218 : REM final direction positive - clear Home Negative Final Direction
CLR 16250 : REM final direction positive
CLR 16217 : REM positive edge - clear Home Negative Edge Select
CLR 16249 : REM positive edge
PRINT "HOMING AXIS2 AXIS 3"
AXIS2 JOG HOME -1
AXIS3 JOG HOME -1
WHILE (NOT BIT 16198 OR NOT BIT 16230)
IF (BIT16199 OR BIT16231)
PRINT "HOMING FAILED"
HEADHOMED=0
REM P11=0
ENDIF
WEND

32

ENDP

6.5 B OTTLE DETECTION FOR THE T EST- SLED


PROGRAM
CLR 200
WHILE (BIT11 AND BIT10) : REM looking for crash sensors
WEND
SET 200
PRINT "CRASH SENSOR TRIPPED"
CAM OFF AXIS2 AXIS3
JOG OFF AXIS2 AXIS3
GEAR OFF AXIS0
JOG OFF AXIS1
HALT PROG0
HALT PROG1
ENDP

6.6 P RINTING PROGRAM FOR THE T EST- SLED


ATTACH AXIS2 STEPPER0 STEPPER0
ATTACH AXIS3 STEPPER1 STEPPER1
ATTACH SLAVE1 AXIS2 "Z"
ATTACH SLAVE2 AXIS3 "A"
PROGRAM
DIM LV(3)
DIM DV(1)
LV0 = 327680 / 2
LV1 = 0
DETACH
ATTACH MASTER0
ATTACH SLAVE0 AXIS0 "X"
ATTACH AXIS2 STEPPER0 STEPPER0

33

ATTACH AXIS3 STEPPER1 STEPPER1


ATTACH SLAVE1 AXIS2 "Z"
ATTACH SLAVE2 AXIS3 "A"
CLR 16132 : REM Clear +Hard Limit Encountered
CLR 8467 : REM Clear AXIS0 KAMR
CLR 522 : REM Clear MASTER0 KAMR
REM RUN PROG1 : REM Start checking bottle detect
RUN PROG4 : REM head crash detection
_LAYERLOOP
LinesToAdvancePerRev = P(18+LV1)
PrintResolution = P(26+LV1)
RotarySpeed = P(34+LV1)
RotationCount = P(42+LV1) + P(58+LV1)
StartPosition = P(50+LV1)
DV0 = LinesToAdvancePerRev / PrintResolution * 25.4
INH -824
REM turn off uv lamp
CLR 3842 : CLR 3843
RES AXIS1
ENC8 RES
PPU X1000
GEAR OFF X
GEAR SRC X P6272 : REM set Encoder 8 as X gear input source
GEAR PPU X(163840)
GEAR RATIO X(DV0)
GEAR ON X IHPOS +(LV0)
PRINT "Move to position"
IF (BIT8465=0)
DRIVE ON X
DWL 1.0
ENDIF
X(-StartPosition)
INH -516
IF (BIT133) : REM check if bottle missing
CLR 3842 : CLR 3843
GOTO PROG0EXIT

34

ENDIF
WHILE (BIT(144+LV1)=0) : REM BIT144 BIT151 reserved as ready to go for each layer
WEND
PRINT "Turn rotary drive on"
IF (BIT8497=0)
AXIS1 DRIVE ON
DWL 1.0
ENDIF
IF (BIT(228+LV1)) : REM BIT228 BIT135 reserved as lamp ON/OFF for each layer
SET 3842 : SET 3843 : REM EPLD0 output 2 and 3 for uv lamp
ELSE
CLR 3842 : CLR 3843
ENDIF
: REM CAM profile
SET 5651 : REM line number when listing program
jog vel Z 10
jog acc Z 5000
jog dec Z 5000
jog vel A 10
jog acc A 5000
jog dec A 5000
SET 8528 : REM make ACR run stepper Z axis in CW/CCW mode
SET 8560 : REM make ACR run stepper A axis in CW/CCW mode
JOG ABS Z38.6225 A38.6225 : REM Initial print height = Distance from home to centerline (51.1) - r1 (12.4775)
INH -856 : REM wait while JOG active Z axis
INH -888 : REM wait while JOG active A axis
: REM distance in array is in (mm * 1000)
: REM Z Axis2 array
DIM LA(4)
DIM LA0(2)
LA0(0)=0

35

LA0(1)=0
DIM LA1(325)
LA1(0)=0
LA1(1)=0
LA1(2)=0
.
. Copy/paste calculated values from Excel file
.
LA1(323)=-178396
LA1(324)=-178435
: REM A Axis3 array
DIM LA2(2)
LA2(0)=-178435
LA2(1)=-178435
DIM LA3(325)
LA3(0)=0
LA3(1)=-1
LA3(2)=-10
.
. Copy/paste calculated values from Excel file
.
LA3(323)=-178473
LA3(324)=-178435
: REM CAM axis PPU is 16 000
: REM SEG distance is the distance in (mm * PPU) of the source axis (1000)
: REM SEG distance must equal the total distance of the source move
CAM DIM Z3
CAM DIM A3 : REM allocate cam segments - 3 cam segments
CAM SEG Z(0,50000,LA0) : REM define cam segments - 266 mm X 1000
CAM SEG Z(1,324000,LA1) : REM 324 mm X 1000
CAM SEG Z(2,59000,LA2) : REM 115 mm X 1000
CAM SEG A(0,50000,LA0)
CAM SEG A(1,324000,LA3)
CAM SEG A(2,59000,LA2)
CAM SCALE Z(1/10000) A(1/10000) : REM CAM output scaling (mm)
PRINT "SET CAM SOURCE"

36

CAM SRC Z P12295 A P12295 :CAM ON Z A : REM Start "camming"


PRINT "CAM STARTED ,TURN ON ROTARY AXIS"
AXIS1 JOG VEL(RotarySpeed)
AXIS1 JOG INC(RotationCount)
IHPOS +P6272(P(64+LV1) * 163840,60) : REM printing
GEAR OFF X
INH -789 : REM wait until gear off
PRINT "CAM OFF NORMAL"
IF (P(42+LV1) > P(64+LV1))
IHPOS +P6272(P(42+LV1) * 163840,60)
ENDIF
SET 3842 : SET 3843
GEAR RES X
LV1 = LV1+1
IF (LV1 < LayerCount)
GOTO LAYERLOOP
ENDIF
_PROG0EXIT
CAM SHIFT Z
CAM SHIFT A
CAM OFF Z A
INH -854
INH -886
CLR 8467
CLR 8499
CLR 8531
CLR 8563
CLR 522
HEADHOMED=0
REM P11=0
AXIS2 jog vel 10

37

AXIS2 jog acc 1000


AXIS2 jog dec 1000
AXIS3 jog vel 10
AXIS3 jog acc 1000
AXIS3 jog dec 1000
SET 8528 : REM MAKE ACR RUN STEPPER Axis 2 IN CW / CCW MODE
SET 8560 : REM MAKE ACR RUN STEPPER AXIS 3 IN CW / CCW MODE
AXIS2 DRIVE ON
AXIS3 DRIVE ON
AXIS2 JOG HOMVF .5 : REM HOME Axis 2 AND Axis 3
AXIS3 JOG HOMVF .5
CLR 16198 : REM CLEAR HOMED FLAG
CLR 16230 : REM CLEAR HOMED FLAG
CLR 16216 : REM BACKUP TO HOME DISABLED
CLR 16248 : REM BACKUP TO HOME DISABLED
CLR 16218 : REM FINAL DIRECTION POSITIVE
CLR 16250 : REM FINAL DIRECTION POSITIVE
CLR 16216 : REM POSITIVE EDGE
CLR 16249 : REM POSITIVE EDGE
PRINT "HOMING AXIS2 & AXIS 3"
AXIS2 JOG HOME -1
AXIS3 JOG HOME -1
WHILE (NOT BIT 16198 OR NOT BIT 16230)
IF (BIT16199 OR BIT16231)
PRINT "HOMING FAILED"
HEADHOMED=0
REM P11=0
ENDIF
WEND
AXIS2 JOG ABS 1: AXIS3 JOG ABS 1
INH -856

38

INH -888
AXIS2 JOG RES
AXIS3 JOG RES
AXIS2 JOG REN
AXIS3 JOG REN
AXIS2 RES
AXIS3 RES
GEAR OFF X
INH -789 : REM wait until gear off
CLR 16132 : REM Clear +Hard Limit Encountered
CLR 8467 : REM Clear AXIS0 KAMR
CLR 522 : REM Clear MASTER0 KAMR
IF (BIT8465=0)
DRIVE ON X
DWL 1.0
ENDIF
X(-1850)
INH -516
INH -824 : REM wait until rotary jog off
HALT PROG1
HALT PROG4
ENDP

6.7 T EST OF M INI -T EST- SLED


PROGRAM
_EnableEPLNetwork : REM enable the EPL Link
INH 16648 : REM check for controller to aknowledge EPL card
IF (NOT BIT16649) THEN EPLC ON : REM if EPL not operational., start EPLC network
DWL 0.2
WHILE (BIT16640) : REM wait for EPL network to start
WEND
IF (BIT16649) THEN PRINT "EPL NETWORK OPERATIONAL"
IF (BIT16650) THEN PRINT "EPL NETWORK START FAILED, GOING TO RESET NETWORK"

39

IF (NOT BIT16649)
EPLC OFF : REM reset EPL network
SET ResetEPLNetwork : REM set reset EPL network latched bit
INH -16657 : REM inh until EPL network resets
EPLC ON : REM start it again
INH -16656 : REM inh program until start EPL network has finished
ENDIF
IF ((NOT BIT16649) AND (ResetEPLNetwork))
PRINT "EPL network problem occurred."
HALT
ENDIF
: REM Homing Z-AXIS
_HOMEZ
DRIVE ON Z
JOG VEL Z200 : REM set axes jog parameters used during homing
JOG ACC Z2000
JOG DEC Z2000
HLBIT Z3328 : REM assign hardware limit
HLIM Z3 : REM enable end-of-travel limit checking for Z axis
JOG HOMVF Z40 : REM Set backup to home velocity
REM SET 16208 SET 16209 : REM invert axis2 level of limit inputs
SET 16216 : REM disable backup to home
CLR 16217 : REM look for positive edge of sensor
CLR 16218 : REM final homing direction will be positive
JOG HOME Z1
WHILE (((NOT BIT16198) AND (NOT BIT16199))) : REM stay in this loop until axis2 has
either passed or failed homing process
WEND
REM IF (BIT16199) THEN
REM PRINT "HOME FAILED"
REM HALT
REM END IF
PRINT "HOME ROUTINE COMPLETE"
_MAIN
VEL 330
Z 400 : REM move to print pos.
INH-516 : wait for motion to complete

40

PRINT "Done"
INH 31 : REM wait for input bit 31
PRINT "Done2"
DWL 1
DAC1 OFFSET -10 : REM se lamp intensity, DAC1 offset to 10 Volts - negative numbers
for positive output
CLR 8500 : REM clear the enable drive I/O flag to allow setting the state of direct I/O
commands
PRINT P38144
Z -30 : REM move to final pos.
IHPOS -P38144(250000,0) : REM inh execution until given setpoint (in PPU) is reached
PRINT P38144
SET 41 : REM turn on lamp to output0
INH-516 : REM wait for motion to complete
CLR 41 : REM turn off lamp
Z 400 : REM move to start position
INH -516 : REM wait for motion to complete
GOTO MAIN
ENDP

41

R EFERENCES
[1] E. Knight, C. Lynn, Industrial Inkjet For Dummies, XAAR Special Edition, WileyPublishing, Inc., 2010. ISBN: 978-0-470-92047-3
[2] INX Internation Ink Co., PM3 Servicing, Troubleshooting and Tech Training, July 2015.
[3] Parker Hannifin Co., ACR Programmers Guide, July 2010. Version: 88-028698-01D
[4] Parker Hannifin Co., ACR Command Language Reference, July 2010. Version: 88-02560401H
[5] Parker Hannifin Co., ACR Parameter and Bit Reference, July 2010. Version: 88-02560501H
[6] Parker Hannifin Co., Aries EPL Hardware Installation Guide, October 2008. Version: 88027024-01B
[7] Parker Hannifin Co., Aries User Guide, September 2008. Version: 88-021610-01G

42

Anda mungkin juga menyukai