IMPROVED SYSTEM AND METHOD FOR CONTROLLING THE SPEED AND TENSION OF AN UNWINDING RUNNING WEB

Abstract: A system and method for controlling the speed and tension of a web being unwound from a rotating roll (12) and being run through an inertia-compensated festoon (32) and then to a web-using production process (42) which requires the web to run at a preselected relatively high speed and a preselected relatively low tension. Based on sensing the amount of web stored in the festoon, a brake (16) applies a decreasing braking-force to the running roll as the diameter of the roll decreases. Wen the roll has decreased to an intermediate diameter, where the decreasing tension torque is inadequate to continue to accelerate the roll, a motor (18) engages the roll and increasingly adds assisting web-unwinding torque to the roll as the diameter of the roll continues to decrease. The brake (16) is also used to stop the roll before a subsequent zero-speed web-splice.

Description: S P E C I F I C A T I O N (OUR CASE NO. 10793US01) TO ALL WHOM IT MAY CONCERN: Be it known that we, Roger Cederholm, a citizen of the United States of America and a resident of Roscoe, Illinois; James K. Ward, a citizen of the United States of America and a resident of Rockton, Illinois; and Emil 6. Borys, a citizen of the United States of America and a resident of Rockford, Illinois have invented certain new and useful improvements in an IMPROVED SYSTEM AND METHOD FOR CONTROLLING THE SPEED AND TENSION OF AN UNWINDING RUNNING WEB of which the following is a specification. BACKGROUND OF THE INVENTION The present invention relates to an improved system and method for controlling the speed and tension of a running web being unwound from a roll. More particularly, it relates to an improved system and method for controlling the web speed and tension of an unwinding running web where the web runs from the roll to a web-using process such as, for example, a disposable diaper manufacturing line, which requires non-woven webs to run at a preselected, relatively high speed and at a preselected, relatively low tension. Generally speaking, lines for producing disposable diapers and similar personal hygiene products are run at the highest possible speed to maximize production efficiencies, and the non-woven webs employed in such lines are required to be run at relatively low tensions so as to enable the lines to produce a quality product. Because of this, simple, conventional braked web roll unwind systems, such as those used in other industries, were not adequate for such lines. The recognized inadequacies of the simple brake unwind systems led those working in the art to develop and implement surface belt driven, web-roll unwind systems. While adding a level of sophistication, vis-a-vis simpler braked unwind systems, the "drive" requirements for the surface- belt, web-driven unwind systems were still relatively simple because the surface belt ran against the outside diameter of the web roll and merely had to follow the main line web speed. Most of the early surface belt driven unwind systems utilized a single belt with two unwind positions, and required the operator to perform a "drop and required the operator to perform a "drop splice". Later systems, however, utilized dual belts with "flying splice" capabilities. User dissatisfaction with surface-belt-driven web-unwind systems arose because of the waste generated from the long web tails and because of large web tension disturbances which occurred during splicing. The web materials were also becoming much more sophisticated and were much more difficult to splice reliably. As a result, the webs were required to be run at even lower tensions. Because of the splicing problem, zero-speed splicing systems became the preferred splicing method. Such zero-speed splicing systems utilized a web storage festoon or accumulator so as to decelerate and stop the running web roll, to allow a splice to be made between the running web and the web of a new roll, and then to accelerate the new roll back to line speed without slowing the main process or production line. The ability to splice the web, while the web was stopped, greatly improved splicing reliability. Some zero-speed splicing systems continued to incorporate surface belt drives. But the art, by and large, shifted to center-core-shaft drives as newer web materials became increasingly difficult to unwind, by means of surface-drives, because they were narrower, more delicate, more susceptible to damage and more difficult to wind into a "hard" roll. The use of center-core-shaft drives addressed the problems posed by the newer web materials but added a much higher level of sophistication to the control and braking systems used. More specifically, the center-core-shaft drives had to be designed to accommodate the changing diameter of the unwinding web roll as well as variations in the roundness of the roll. These systems also had to accommodate line acceleration and decelerations, as well as to provide proper accelerations and deceleration parameters during a splice. All of this led to the development and use of center-core- shaft drive systems that were more and more complicated and expensive. SUMMARY OF THE INVENTION In principal aspects, the improved running web speed and tension controlling system and method of the present invention represents a simple, less complicated, more cost effective alternative to the center-core-shaft drive systems presently being used. An important part of this improved system is the use of an inertia-compensated festoon or web accumulator that permits running web to accumulate in and be withdrawn from the festoon without inducing tension variations in the running web. The improved system of the present invention may be used with complex or relatively basic production lines with equal facility. Installation is simple and can be done expeditiously. Additionally, the improved system may be readily repaired if it should, for some reason, malfunction. Accordingly, a primary object of the present invention is to provide an improved method and system for controlling the speed and tension of a web being unwound from a rotating roll, where the web runs from the roll along a predetermined path to and through an inertia-compensated festoon, which has the capacity of storing varying amounts of running web during operation, to a web-using process such as, for example, a disposable diaper manufacturing line, which requires a non-woven web to run at a preselected relatively high speed and a preselected relatively low tension; and which tends to pull the web so as to apply a web unwinding torque to the roll. Another object of the present invention is to provide an improved method, as described, including the steps of: supplying a braking force or torque to the rotating roll when the web begins to unwind from the roll for controlling the speed and tension of the running web; decreasing the braking force applied to the roll as the diameter of the running roll is reduced, due to the web being unwound from the roll, such that the web will run through the process at the preselected speed and tension as the roll unwinds; and when the roll has been unwound to an intermediate diameter where decreasing web- unwinding torque from the web is inadequate to continue to accelerate the mass of the roll and of the other rotating components such that stored web begins to be fed out of the festoon, assisting in unwinding the roll by increasingly adding web- unwinding torque to the roll as the diameter of the roll continues to decrease from the intermediate diameter so that the web will continue to run through the process at the preselected speed and tension as the remaining web is unwound from the roll. Still another object of the present invention is to provide an improved system, as described, where the system comprises: a first-web roll mounted for rotation so that the unwinding running-web runs along a predetermined path from the roll to the process; an inertia-compensated festoon that is disposed in the predetermined path of the running web and that has the capacity for storing varying amounts of running-web during the operation of the process; a brake assembly that is connected with the roll for applying a braking force or torque to the roll; a shaft-drive assembly that is connected with the roll so that, when engaged, the drive assembly can drive or add an assisting, web-unwinding driving force to the roll in a web-unwinding direction; and a controller that controls the operation of the brake assembly and the drive assembly (a) to cause the brake assembly to apply a decreasing braking force to the roll as the diameter of the roll decreases while the web continues to be unwound from the roll such that the web -will run through the process at the preselected speed and tension; and (b) when the roll has been unwound to an intermediate diameter such that the decreasing web- unwinding torque of the web is inadequate to continue to accelerate the mass of the roll and the components rotating therewith such that stored web begins to feed out of the festoon, then to cause the drive assembly to engage the roll and increasingly add web-unwinding torque to the roll to assist in unwinding the web as the diameter of the roll continues to decrease from the intermediate diameter such that the web will continue to run through the process at the preselected speed and tension as the remaining web is unwound from the roll. A further object of the present invention is to provide an improved system and method, as described, where the amount of running web stored in the festoon determines the application of the braking force to be applied to the roll and the adding of the web-unwinding torque, by the drive assembly, to the roll. A still further object of the present invention is to provide an improved system and method, as described, where the controller also causes the brake assembly to bring the running roll to a stop when a web splice is to be made by a zero-speed splicing assembly and then causes the drive assembly, associated with the new web roll, to bring the new running roll up to line speed; and the braking-assembly associated with the new roll, to apply braking force to the new roll so as to control the speed and tension of the web running from the new roll. These and other objects, advantages and benefits of the present invention will become more apparent from the following description of the preferred embodiment of the present invention, which description may be best understood with reference to the accompanying drawing. DESCRIPTION OF THE DRAWING FIGURE 1 is a schematic view of the preferred embodiment of the improved system of the present invention. DESCRIPTION OF THE PREFERRED EMBODIMENT Referring to FIGURE 1, the preferred embodiment of the improved system of the present invention includes a first, conventional roll 12 of web material which may be, for example, a non-woven material. The roll 12 is mounted for rotation about a conventional center-core-shaft 14. A conventional disk-brake assembly 16 is mounted on the shaft 14 and may be used selectively to apply braking force or torque to the shaft 14. The brake assembly may be as disclosed in U.S. Patent No. 5,335,870. For a typical web roll used in a typical production line, a l, 2 or 3 h.p. brake assembly may be used. A conventional shaft-drive assembly 18 is also connected to the center-core-shaft 14 for applying torque to the shaft. The drive assembly may include a 3-phase AC tendency motor or alternatively, a DC motor. A 1, 2 or 3 h.p. motor may be employed, for example, with a typical roll which is used in connection with a typical production line. The motor may be connected with the shaft 14 by means of a V-belt and pulley arrangement. The assemblies 16 and 18 may cooperate as disclosed in U.S. Patent No. 5,335,870. When the roll 12 is rotated, as for example, in the clockwise direction shown in FIGURE l, the web 22 on the roll will be unwound. The unwinding, running web 22 passes around an idler 24 to a conventional zero speed splicing assembly 26. After passing through the assembly 26, the web 22 continues, around another idler 28, to a conventional, inertia-compensated festoon or web accumulating assembly 32. The festoon 32 is capable of storing various quantities of the running web depending on the operation of the system. In simplified form, the festoon 32 includes fixed entry and exit idlers 34 and 36, respectively, and a movable dancer 38. As shown in FIGURE 1, the dancer 38 is movable vertically, with respect to the idlers 34 and 36, depending on the amount or quantity of running-web being stored in the festoon. A larger or greater quantity of running-web 22 is being stored in the festoon when the dancer 38 is at a higher position, that is, the position illustrated in FIGURE 1, than when the dancer is lower, that is, vertically closer to the idlers 34 and 36 as shown at 39. As is typical with such festoons, an air cylinder assembly 40 is used to urge the dancer 38 to its uppermost position. In the conventional manner, the running web 22 passes about the idler 34, the dancer 38, and the idler 36 before passing out of the festoon and then to a conventional web-using process or manufacturing line 42. An example of such a process or line is one for producing disposable diapers or similar personal-hygiene products in which the web 22 is required to run at a relatively high speed and relatively low tension on a relatively continuous basis. Examples of such production line web speeds and tensions are 800-1000 feet per minute and 1-6 pounds, respectively. The system of the present invention also includes at least one other web roll 44 having a web 45 wound therein. In a manner substantially, structurally and functionally identical to that of roll 12, the roll 44 mounted for rotation on a conventional center-core-shaft 46. Similarly, a conventional brake assembly 48 is mounted on the shaft 46 so as to be able to apply a braking force to the roll 44 through the shaft. Like the drive- assembly 18, a drive assembly 52 is also connected with the shaft 46. A conventional controller 54 is connected with the rolls 12, 44, the assemblies 16, 18, 48 and 52, the assembly 26, and the festoon 32 so as to be able to control the system as hereinafter described. During the initial, steady running of the web 22, the tension in the web, resulting from the operation of the line 42, creates what may be called a web "tension torque", or web-unwinding torque, in the web as it is unwound from the roll. In other words, when the roll 12 is being unwound, the roll is being rotated or "driven" by this tension torque. During normal operation, the brake assembly 16 provides a reverse torque or braking force to the core shaft 14, and thus to the roll 12, such that a tension equilibrium is maintained in the web 22, and the web is accordingly maintained at its preselected tension and preselected speed. The amount of braking force being applied at any point of time is controlled by the controller 54 and is based on the sensed-position of the moving dancer 38 in the festoon 32. In other words, a feedback signal from the festoon 32, based on the position of the dancer 38, controls the braking torque or braking force being applied to the shaft 14. In this regard, the more running web being stored in the festoon 32, the greater the braking torque or force being applied to the shaft 16 by the assembly 16. In addition to providing a feedback signal based on the position of the dancer 38, the festoon 32 also provides the controller 54 with a rate- control feedback-signal. Thus, should the amount of web 22 being stored in the festoon increase quickly for some reason, an additional braking force will be applied by the assembly 16. This rate control is, however, generally not used when the amount of running web in the festoon decreases, that is, when the dancer 38 descends toward the rollers 34 and 36 as shown in FIGURE 1. As web 22 continues to unwind from the roll 12, the diameter of the roll decreases. Because the process 42, and hence the speed of the web 22, is maintained at the preselected speed, the rotative or rotational speed of the roll 12 must thus increase in accordance with the known relationship where web speed (feet per minute) is equal to π times the rotative speed (revolutions per minute) of the roll times the diameter (in feet) of the roll. From this relationship, it is apparent that for web speed to be maintained, the rotative speed must continuously increase as the diameter of the roll decreases. More specifically, the rotative speed must increase at an exponential rate in web unwinding systems to maintain a preselected web speed. Hence, an external force(s) must be applied to the roll (or the web) to accelerate (in this case, angularly or rotatively) the mass of the roll 12 and the components of the assembly 16 and 18 that rotate with the shaft 14. When the roll 12 is relatively large in diameter, the rate of change of its rotative speed is relatively small. As the roll unwinds, however, the festoon 32 is gradually "giving up" stored web 22; in other words, the dancer 38 is continuously lowering or descending toward the idlers 34 and 36, and is doing so at an ever increasing rate. The festoon 32 sends position feedback signals, based on the position of the dancer 38 as it descends towards the idlers 34 and 36, to the brake assembly 16, through the controller 54, causing a decreasing brake torque or force to be applied to the shaft 14 so as to balance the ever-decreasing tension torque of the web 22. At some point of roll depletion, the diameter of the roll 12 reaches an intermediate diameter where the decreasing tension torque is not adequate to accelerate the roll and the components that rotate with the roll, as required to maintain web speed and tension. At this point, the dancer 38 has reached an intermediate position, shown at 56 in FIGURE 1, and the controller 54 is programmed to activate the drive assembly 18 such that it "softly" engages the shaft 14, and thus the roll 12. The assembly 18 then begins to add web-unwinding torque to assist the running roll to continue to be accelerated. Once it is engaged, the assembly 18 will continue to assist the running roll by adding more and more web unwinding or drive torque until the running roll is depleted, that is, until a web splice is made. During the time that the assembly 18 is adding drive torque to the shaft, a brake force is still being applied by the braking assembly 16, via the controller 54, so as to keep the dancer 38 within the upper and lower limits of its control range; or in other words, to maintain precisely the preselected speed and preselected tension on the running web 22 as it passes to the process 42. The controller 54 includes conventional controls for sensing when the web 22 is about to be depleted from the roll 12. When a splice is to be made, the controller 54 disengages the drive assembly 18 and actuates the brake assembly 16 so as to bring the running roll to a stop. Then the controller actuates the zero-speed splicer 26 to splice the leading end of the new web 45 to the trailing end of the running web 22 (and of course, to sever the web 22 upstream from the splice if the remaining web is not permitted to run-off the roll) . The controller 54 next engages the drive assembly 52 so that the assembly will rotate the shaft 46 and bring the web 45, which is being unwound from the roll 44, to line speed. Thereafter the new web 45 will begin passing through around the idler 28, through the festoon 32 and to the process 42. When the web 45 reaches line speed, the controller disengages the assembly 52 and causes the braking assembly 48 to control the speed and tension of the web 45, as heretofore described with roll 12 and assembly 16, so as to maintain the web at the preselected speed and tension values. The following copyrighted Computer "C" program is used with the controller 54: / * sigdef.i - variable definition and initialization */ #ιfdef SIGSIMU #defme defvar(n) extern splcVar n[], #defme endvar #defιne definpu (id,n, 1) static unsigned char id, #defme defoutput (ιd,n,i) static unsigned char id, #defιne defsystem(ιd,n, 1) static unsigned char id, (♦define defreserve (id,n, 1) static unsigned char id, #defιne defbtimer(ιd,n,1) \ static unsigned char ιd##_done; \ static unsigned char id; \ static unsigned char ιd##_cons, #defιne defbyted(ιd,n,i) static unsigned char id, #defme defbytev(ιd,n, 1) static unsigned char id; #defιne defbytek(id,n, 1) static unsigned char id; #defιne defbyte (id,n, 1) static unsigned char id, #defιne defwtimer(ιd,n,1) \ static unsigned char ιd##_done; \ static unsigned short id; \ static unsigned short ιd##_cons; #defιne defwσrdd(ιd,n, 1) static unsigned char id, #defιne defwordv(id,n, 1) static unsigned short id; #defme defwordk(id,n, 1) static unsigned short id, #defιne defword(ιd,n, 1) static unsigned short id; #ιfdef SIGINIT #undef defvar #undef endvar #undef definput #undef defoutput #undef defsystem ttundef defreserve ttundef defbtimer #undef defbyted #undef defbytev #undef defbytek #undef defby e #undef defwtimer #undef defwordd ttundef defwordv #undef defwordk #undef defword #defme defvar(n) splcVar n[256] - { ttdefine endvar { • z' ,0,0,0,0, "" } }; #defιne definput (id, ,l) \ { ' i' ,dplcInputBase+v,0,&ιd,ι,#ιd}, #def ne defoutput (id,v,i) \ { 'o' ,dplcOutputBase+v, 0, &ιd, i,#ιd} , #defιne defsystemdd,v, I) \ { 's ' ,dplcSystemBase+v, 0, &ιd, l, #ιd} , #defιne defreserve (id, , I) \ { 'r' ,dplcResrvBase+v, 0, &id, i,#id} , ttdefine defbtimer(id,v, i) \ { 'b' ,dplcBytevBase+v, 0, &id, 0, #id} , \ { 'c' ,dplcBytekBase+v, 0, &id##_cons, i, #id"_cons"} , \ { 'd' ,dplcBDoneBase+v, 0, &id##_done, 0, #id"_dσne"} , ttdefine defbyte (id,v, i) \ { 'a' ,dplcByteBase+v, 0, &id, i, #id} , #define defbytev(id,v, i) \ { 'b' ,dplcBytevBase+v, 0, iid, i, #id} , #define defbytek(id,v, i) \ { 'c' ,dplcBytekBase+v, 0, &id, i, #id} , #define defbyted(id,v, i) \ { 'd 1 ,dplcBDoneBase+v, 0, iid, i,#id} , ttdefine defwtimer(id,v, i) \ { 'w' ,dplcWordvBase+v,0,fcid, 0, #id} , \ { 'x' ,dplcWordkBase+v, 0, &id##_cons, i,#id"_cons"} , \ { 'y' ,dplcWDoneBase+v, 0, £id##_done, i,#id"_done"} , #define defword(id,v, i) \ { 'V ,dplcWordBase+v, 0, &id, i,#id} , #define defwordv(id,v, i) \ { 'w 1 ,dplcWordvBase+v, 0, iid, i,#id} , #define defword (id,v, i) \ { 'x' ,dplcWordkBase+v, 0, iid, i, #id} , #define defwordd(id,v, i) \ { 'y' ,dplcWDoneBase+v, 0, iid, i,#id} , #endif // SIGINIT #else #define defvar(n) extern code splcVar n[]; ttdefine endvar ttdefine definput (id,n, i) static bit unsigned char id \ ® dplcInputBase+15-n+ (n/16) *dplcInputBits; #define defoutput (id,n, i) static bit unsigned char id \ _> dplcOutputBase+lS-n+(n/16) *dplcOutputBits; #define defsystem(id,n, i) static bit unsigned char id ® dplcSystemBase+n; #define defreserve (id,n, i) static bit xinsigned char id ® dplcResrvBase+n; #define defbyted(id,n, i) static bit unsigned char id ® dplcBDoneBase+n; #define defwordd(id,n,i) static bit unsigned char id ® dplcWDoneBase+n; #ifdef SIGSOFT #define defbtimer(id,n,i) \ static bit unsigned char id##_done ® dplcBDoneBase+n; \ extern far unsigned char id; \ extern far unsigned char id##_cons; #define defbytev(id,n, i) extern far unsigned char id; #define defbyte (id, , i) extern far unsigned char id; #define defbyte (id,n, i) extern far unsigned char id; ttdefine defwtimer(id,n,i) \ static bit unsigned char id##_done ® dplcWDoneBase+n; \ extern far unsigned short id; \ extern far unsigned short id##_cons; #define defwordv(id,n,i) extern far unsigned short id; #define defword (id,n, i) extern far unsigned short id; #define defword(id,n, i) extern far unsigned short id; #else ttdefine defbtimer(id,n, i) \ static bit unsigned char id##_done ® dplcBDoneBase+n; \ far unsigned char id <> dplcBytevBase+n; \ far unsigned char id##_cons ® dplcBytekBase+n; #define defbytev(id,n,i) far xinsigned char id ® dplcBytevBase+n; #define defbytek(id,n, i) far unsigned char id ® dplcBytekBase+n; #define defbyte(id,n, i) far unsigned char id <_> dplcByteBase+n; #define defwtimer(id,n,i) \ static bit unsigned char id##_done ® dplcWDoneBase+n; \ far unsigned short id ® dplcWordvBase+2*n; \ far unsigned short id##_cons ® dplcWordkBase+2*n,- #define defwordv(id,n, i) far unsigned short id ® dplcWordvBase+2*n,- #define defwordk(id,n, i) far unsigned short id ® dplcWordkBase+2*n; #define defword(id,n, i) far unsigned short id ® dplcWordBase+2*n; #endif // SIGSOFT #ifdef SIGINIT #undef defvar #undef endvar #undef definput #undef defoutput #undef defsystem #undef defreserve #undef defbtimer #undef defbyted #undef defbytev #undef defbytek #undef defbyte #undef defwtimer ttundef defwordd #undef defwordv #undef defwordk #undef defword #define defvar(n) code splcVar n[2S6] - { #define endvar { ' z' ,0, 0, 0,0, ""} } ; #define definput(id,v,i) \ { 'i' ,dplcInputBase+15-v+(v/16) *dpldnputBits, 0, 0,i,#id} , #define defoutput(id,v,i) \ { 'o' ,dplcOutputBase+15-v+ (v/16) *dplcOutputBits, 0,0, i,#id} , #define defsystem(id,v, i) \ { 's' ,dplcSystemBase+v,0,0,i,#id}, #define defreserve(id,v, i) \ { 'r' ,dplcResrvBase+v, 0, 0,i,#id} , #define defbtimer(id,v,i) \ { 'C ,255,0,_.id##_cons,i,#id ,, _cons"}, #define defbyte (id,v, i) \ { 'b' ,255,0,&id,i,#id}, #define defbytev(id,v,i) \ { 'b' ,255,0,&id,i,#id}, #define defbyte (id,v, i) \ SUBSTITUTE C HF . ET(RULE26) { 'c' ,255,0, &ιd, ι,#ιd}, ttdefine defbyted(id,v, i) \ { 'd' ,dplcBDoneBase+v, 0, 0, 1, #ιd} , #defme defwtimer (id, v, I) \ { 'x' ,254, 0, _ιd##_cons, I, #ιd"_cons" } #defιne defwor (id, v, i) \ { 'w' ,254, 0, &ιd, ι,#id} , #defιne defwordv (id,v, i) \ { 'w' ,254,0, _.ιd,ι,#id} , #defme defwordk(id,v, I) \ { 'x' ,254,0, S.id,ι,#id} , #defme defwordd(id,v, i) \ { ■ y' ,dplc DoneBase+v, 0, 0, i, #id} , #endif // SIGINIT #endif // SIGSIMU /* end of sigdef.i */ // signal . i definitions #include "sigdef.i" defvar (theVar) // inputs definput ι_psι, 0, off) definput i_stop, 1, Off) definput i_enable, 2, Off) definput i_disable, 3, Off) definput i_toggle, 4, off) definput i_manual, 5, Off) definput i_tension, 6, off) definput i_Ldoor, 7, off) definput i_Rdoor, 8 off) definput i_Cenab, 9 off) definput i_Cstop, 10 off) definput i_altref, 11 off) definput i disco, 12 off) // outputs defoutput Air, 0, off) // spindle air defoutput Lbrake, 1 , off) // control brake selects defoutput Rbrake, 2, off) defoutput Enable, 3, off) // splice enable defoutput run, 4, off) // indicators defoutput Rrun, 5, off) defoutput Lcut, 6, off) // cut actuators defoutput Rcut, 7, off) defoutput Nip, 8, off) // perform splice defoutput Tension, 9, off) // enable tension defoutput Wire, 10, off) // heat to wire defoutput Lwire, 11, off) // wire selects defoutput Rwire, 12, off) defoutput motor, 13, off) // control motor selects defoutput Rmotor, 14, off) defoutput Lrotate, 15, off) // platform rotate defoutput (Rrotate, 16, off) defoutput (Stop, 17, off) // unwind stopped defoutput (Break, 18, off) // web break //defoutput (NSplice, 19, off) // not splicing defoutput (Referr, 20, off) // reference error defoutput (Boost, 21, off) // motor enable defoutput (TorqO, 22, off) // high torque defoutput (Alarm, 23, off) // splice alarm // internal bits defsystem _alarm, 0 off) // sounds alarm defsystem _hea , 1 off) // starts wire preheat defsystem _splιce, 2 off) // ready for splice defsystem _zero, 3 on) // zero speed for nip/cut defsystem _stop, 4 on) // zero speed for nip/cut defsystem _change, 5 off) // on to change rolls defsystem _assιst, 6 off) // low torque defsystem _boost, 7 off) // high torque defsystem _manual, 8 off) // wait for boost defsystem _topped, 9 off) // maybe break defsystem _stopt, 10 off) // from customer enable defsystem _end, 11 off) // from autosplice defsystem (s_press, 12 off) // on change spindles defsystem (s_hot, 13 off) // delaying wire change defsystem (s_waιt, 14 off) // wait for boost defsystem (s rotate, 15 off) // wait for table defsystem (d_roll, 29 off) // roll pulse defsystem (d_refa, 30 off) // reference pulse defsystem (d_ref, 31 off) // reference pulse defsystem (s_left, 32 off) // saved selected roll // ladder timers defbtimer (t break, determines web break op defbtimer (t_heat, for wire to heat up defbtimer (t_dwell, after cut before done defbtimer (t_cut, after cut before reset defbtimer (t_boos , after cut before reset defbtimer (t rotate, after cut before reset // pid parameters defbyte <ppb_rev, 0, -64) // reverse action defbyte (ppb_lιm, 1, ■ 65) // limit to saturation defbyte (ppb_edv, 2, -66) // use error derivative defbyte (ppb_drate, 3, -67) // pid derivative rate defbyte (ppb_dead, 4, -68) // deadzone defword (ppw_set, 0, -96) // setpomt position defword (ppw_pfact, 1, -98) // gain defword (ppw_dfact, 2, ■ 100) // deriv factor defword (ppw_ιfact, 3, ■ 102) // integral factor defword (ppw_sfact, 4, ■ 104) // smoothing defword (ppw_wfact, 5, ■106) // an iwmdup defword (ppw_setw, 6, ■ 108) // setpomt weight defword (ppw_sa , 7, •110) // highest output defword (ppw_dιnt, 8, -112) // default integral defword (ppw_lsat, 9, ■ 114) // lowest integral defword (ppw_hsat, 10, ■ 116) // highest integral defword (ppw_top, 11, -118) // dancer topped defword (ppw_stop, 12, -120) // run brake level // torque adjust // position // integral // timeout boost motor // highest deriv // setpomt weight // autosplice parameters // caliper assumption // to redo caliper // reference length // radius offset for heat // radius offset for alarm // to comput variable gam // factor // default // conditioning parameters defbyte (pcb_okct, 16, ■80) // to start line/roll defbyte (pcb_dead, 17, ■81) // dead line test defbyte (pcb_referr, 18, •82) // percentage // pid variables // end of signal.l /* ladder h pic functions */ extern void ladder_func (unsigned char Iplcstart, unsigned char Iplcstep) /* end of ladder.h */ // ladder c pic functions #include "plc.h" #include "signal. i" #include "ladder.h" #def e S IGINIT # clude " signal , i " defproc (ladder) getticks ge ins (theVar) // tension from switch eval (i_tension) update (Tension) endrung // show web break if topped out for too long eval (__topped and not t_break_done) timerif (t_break) endrung eval ( (t_break_done or Break) and j_topped) update (Break) endrung // stop if splice and not enabled eval (j_splιce and not Enable) update (j_end) endrung // show stopped for whatever reason eval (not(j_end or not ι_stop or not i psi or not Tension or Break)) update (Stop) endrung // spindle air when doors closed eval ( (not i_Ldoor) and (not i_Rdoor) ) update (Air) endrung // rotate on button and doors closed until cut done eval ( (i_enable or s_rotate) and Air and i_stop and i_disco and not t_cut_don and not i_disable) timerif (t_rotate) update (s_rotate) endrung // wait for table in place before enable eval (s_rotate and (t_rotate_done or Enable) ) update (Enable) endrung // rotate platforms on not enable if not running roll and eval (not s_rotate and not s_left) update (Lrotate) endrung eval (not s_rotate and s_left) update (Rrotate) endrung // sound alarm eval (j_alarm and not Enable and not (ι_toggle or j_change) ) update (Alarm) update (]_alar ) endrung I i toggle roll on button or change eval (((ι_toggle and j_zero) or j_change) and not s_press) togif (s_left) endrung eval (ι_toggle or _j_change) update (s_press) endrung // show manual splice on button eval ( (ι_manual or _._manual) and Enable and not t_dwell_done) update (j_manual) endrung // start heat on manual or signal until after cut if enabled eval (]_manual or _)_heat) update ( 3 _heat) endrung eval ( (]_ anual or j_heat) and Enable) update (Wire) endrung // show splice on manual until after dwell eval ((]_manual or j_splιce) and not (ι_toggle or t_dwell_done) and Enable) update (_]_splιce) endrung // select correct controls eval (s_left) update (Lbrake) update (Lmotor) update ( run) endrung eval (not s_left) update (Rbrake) update (Rmotor) update (Rrun) endrung // delay wire change while on eval ( (not Wire and s_left) or (Wire and not Rwire) ) update ( wire) endrung eval ((not Wire and not s_left) or (Wire and not Lwire) ) update (Rwire) endrung // timed preheat eval (j_heat and not t_heat_done) timerif (t heat) endrung eval ( (t_heat_done or s_hot ) and Wire) update ιs_hot) endrung // start splice only if hot until cut done eval ((}_splιce and s_hot and Enable)) update (_j_change) endrung // start nip at zero speed and dwell eval (((j_change and _)_zero) or Nip) and not t_dwell_done) timerif (t_dwell) update (Nip) endrung // wait after release for boost eval ( (t_dwell_done or s_waιt) and not t_boost_done) timerif (t_boost) update (s_waιt) endrung // ask boost after dwell eval (t_boost_done or j_boost) update (j_boost) endrung // cut other side on nip eval ( ( (t_dwell_done and Lwire) or Lcut) and not Rcut and not t_cut_done) update (Lcut) eval ( ( (t_dwell_done and Rwire) or Rcut) and not Lcut and not t_cut_done) update (Rcut) eval (Lcut or Rcut) timerif (t_cut) endrung // update not splicing signal // eval ( (not _)_change) or Lcut or Rcut) // update (NSplice) // endrung setouts (theVar) endproc (ladder) // end of ladder.c /* plc.h - first shot at pic generator */ /* pic configuration */ #defme dplcTCBytes 16 #defιne dplcTCWords 16 #defιne dplcBytes 128 ttdefine dplcWords 128 #defιne dplcInputBits 24 ttdefine dplcOutputBits 24 #defιne dplcSystemBits 40 ttdefine dplcDoneBits (dplcTCBytes+dplcTCWords) #defιne dplcResrvBits 8 ttdefine dplcInputBase 0 ttdefine dplcOutputBase (dplcInputBase +dplcInputBιts) ttdefine dplcSystemBase (dplcOutputBase +dplcOutputBιts; ttdefine dplcBDoneBase (dplcSystemBase +dplcSystemBιts) ttdefine dplcWDoneBase (dplcBDoneBase +dplcTCBytes) ttdefine dplcResrvBase 120 ttdefine dplcTotalBits (dplcResrvBase +dplcResrvBιtsι ttif dplcTotalBιts>128 (terror too many bit variables defined ttendif /* pic memory definition */ ttlfdef BORLANDC ttmclude "plcb . h" ttelse ttmclude "plca . h" ttendif ttdefine off 0 ttdefine on 1 ttdefine not ' ttdefine and && ttdefine or | | ttdefine xor " ttdefine setproc (n) n#tt_func (l, 1) ; ttdefine proc(t,n) ntttt_func (1, 0) ; ttdefine step(n) n##_func (0, 1) ; ttdefine dιspatch(t,n) ιf(t) { n() ; continue; } ttdefine defloop (t) while (t) { ttdefine endloop } ttdefine eval(c) lplcstat= (c) ; ttdefine update (b) b=lplcstat, • ttdefine onif (b) ιf(lplcstat) b=l, ttdefine offif (b) ιf(lplcstat) b=0; ttdefine togif (b) ιf(lplcstat) b=!b; ttdefine loadif (k) lplcacc=k, ttdefine saveιf(v) v=lplcacc; ttdefine timerif (t) \ ιf(lplcstat) { \ t+=plcTocks, ttttt_done= (t>=ttt#_cons) , \ } else { t=0; ttt#_done=0; \ } ttdefine endrung if (Iplcstep) if (suspend(&lplcaddr) ) return; ttdefine defproc(n) \ vo d ntttt_func (unsigned char Iplcstart, unsigned char Iplcstep) { \ static near unsigned short lplcaddr, \ static near unsigned char lplcstat; \ static near unsigned short lplcacc; \ Iplcacc; \ if ( (Iplcstart) ' ; .lplcaddr! ; { \ if (Iplcstep) if (suspend(&lplcaddr) ) return; ttdefine endproc (n) \ lplcaddr=0,- \ return; \ } else { if (resume (tlplcaddr) ) lplcstat=0; } \ return; } ttdefine defroot t mam() { \ static near unsigned char lplcstat; \ static near unsigned short Iplcacc; \ Iplcacc; ttdefine endroot return 0; } ttdefine setroot (v) \ initio(v) ; \ starttime () , • ttdefine getins (v) getio(v) ; ttdefine setouts (v) setio(v) ; ttdefine getticks gettimeO ; /* end of plc.h */ /* plc . c - unwind application */ ttinclude <dacs . h> ttinclude <adcs . h> ttinclude "plc . h" ttmclude "ladder . h" ttdefine SIGSOFT ttinclude "signal. i" far unsigned long lace,- far signed long sacc; far unsigned char ρid_dtick far unsigned short pid_mtime far signed short pid_dlast far signed long pid_mteg void doPIDO { unsigned short posit; signed short i,j,k; signed long ace; adc_start (8,0) ; while ( !adc_ready(8) ) ; posιt=adc_value(8) ; // update position, error // raw error/dead error/deriv base in i/j/k if (ppb_edv) k=vpw_error; else k=vpw_posit; vpw_posιt=posi ; ; if (ppb_dead) { ι = _ ; if ( ] < 0 ) ι= - i ; if ( κ=ppb_dead) ] =0 ; } ι=ppw_set - _) ; vpw_error = ] ,- if (posit<ppw_top) j_topped=l ; else j_topped=0 ; if ( ! pιd_dtιck- - ) { pιd_dtιck=ppb_drate , ■ acc=pιd_dlast -k ,• pιd_dlast=k ; k=vpw_derιv ; vpw_derιv=acc; } // dont update if forced dac if (vpb_force) { // motors off if something wrong, } else if ( ( !Stop) I I ( !ι_Cstop) ) { j_assist=0; if (ITension) vpw_corr=0; else vpw_corr=ppw_stop; // boost if needed until moving up } else if (j_boost) { if ( dnt)vpw_derιv>0) { j_boost=0; Torq0=0; } else { vpw_corr=0; Torq0=l; Boost=l; j_assist=l; } // off during roll change } else if (j_change) { Torq0=0; Boost=0; pιd_ιnteg=ppw_dmt+pab_assιst, ■ pιd_integ=pιd_mteg<<16; if (psw_gain) vsw_gain-=psw_dgaιn; // assist off on high integral or top of dancer or disable // boost if too low and going lower } else { sacc=pid_integ>>16; sacc=sacc*vsw_gam; sacc=sacc>>8,- j=sacc&0xffff; if (j_assist) { if (j_topped| I !i_Cenab| I j>paw_assoff) { j_assist=0; Boost=0; sacc=pab_assιst; sacc_=sacc<<16; pid_integ=pid_integ-sacc; } else { if ( (vpw_posit > paw_toolow) &&( ( nt)vpw_deriv<0) ) j_boost=l; } // on for low integral } else if ( ( j <paw_asson) .-i_Cenab._ ! j_topped) { 3 _assist=l ; Boost=l ; sacc=pab_assιst ; sacc = sacc< <16 ,- pιd_integ=pιd_mteg+sacc ; } // derivative term = Dd(0)-Sd(-1) sacc=ppw_dfact, ■ acc-sacc* ( t ) vpw_derιv ,- sacc=k ; sacc=sacc* ( t) ppw_sfact; acc-acc-sacc; // proportional term = W*set-posιtιon (0) if (vpw_error) { sacc=1 ; sacc=sacc<<8 ; acc-acc-sacc; sacc=ppw_setw; sacc=sacc*ppw_set; acc-acc+sacc; // include integral sacc=pιd_mteg/256; acc-acc+sacc; // apply proportional factor acc=acc*ppw_pfact; acc=acc/0xl0000; if (psw_gam) { acc=acc*vsw_gain; acc=acc/0xl00; } // clip at saturation if (ppb_lim) { if (acc<0) i»0; else if (acc>ppw_sat) ι=ppw_sat; else i=acc,- } acc=acc*ppw_wfact; if (ppb_rev) ι=-i; vpw_corr=ι; // apply an iwindup acc=acc<<8; pid_integ=ρid_integ-acc; // and update integral acc= (int)vpw_errσr; acc=acc*ppw_ifact; acc=acc+pιd_ιnteg; // and clip sacc= (mt)ppw_lsat; sacc=sacc<<16; if (acc<sacc) acc-sacc,- else { sacc= (mt)ppw_hsa ; sacc=sacc<<16 ; if (acosacc) acc-sacc; } pιd_ιnteg=acc, • vpw_mteg=pιd_ιnteg> >8 , } dac_set ( 1 , vpw_corr ) , // motor off if web stalled if (j_zero) ( if _assιst_:δ.' (]_boost) ) { if ιpιd_mtιme<paw_tomot) pιd_mtιme+-t-, else { Boost=0, 3_assιst=0; } } else if (vpw_posιt>paw_toolow) pιd_mtιme=0, } else pιd_mtιme=0, } far unsigned short highClock; far unsigned long lastRef, // reference variables far unsigned long refInterval, far unsigned long lastRefA; far unsigned long refAInt, far unsigned long thisTime; // roll data far unsigned long thisBase, far unsigned char thisCount, far unsigned char zCount; far unsigned short rollStub; // portion of ref interval far unsigned char lastCount; void checkDiamO { if ( ( ' j_stop) &.&. (. !j_manual) ) { if ( ! _)_alarm&_t (vsw_radιus< (vsw_splιce+psw_almoff) ) ) j__alarm=l; if (vsw_radιus< (vsw_splιce+psw_hotoff) ) _ . _heat=l; else { 3 _heat=0; j_splιce=0; } if ( ' ] _splιcet_(vsw_radιus<vsw_splιce) ) { if (zCount++>pcb_okct) { zCount=0; mt doRollO { unsigned long t; mt r; r=0; t= (thisTime-thisBase) *256; if (ι_altref) t=t/refAInt; else t=t/refInterval; lacc=t + rollStub + ( (thisCount-lastCount) *256) , rollStub=256-t, t=lacc*psw_refsiz; // mιl*256 circum t=t*10430; // 10000h/2pi SUBSTTTUTE SHEET (RULE 26) t=t/0xl0000 ; lastCount=thιsCount+l , vsw_ rap++ ; if ( j_stop) { if ( zCount + + >pcb__okct ) { _j _stop=0 ; zCount=0 , } / else { if (t<24000) { vsw_radιus=t , • if (psw_gam) { t=t-psw_mιnrad,- t=t*psw_gaιn; t=t/256; vsw_gaιn=t+256 ; r=l, return r; } void doRef ( ) { if (!i_altref) if (j_zero) { if (zCount++>pcb_okct) { j_zero=0; zCount=0; } } } void doRefa ( ) { if (ι_altref) if (j_zero) { if (zCount++>pcb_okct) { j_zero=0; zCount=0; } } static unsigned char CCL4 Oxce; /*capture left*/ static unsigned char CCH4 Oxcf; void doDead{) { unsigned long 1; di() ; l=highClock; CCL4=0 ei() ; 1=1<<8; 1=1+CCH4; 1=1<<8; 1=1+CCL4, if (i_altref) lacc=lastRefA; else lacc=lastRef; lacc=l-lacc; lacc=lacc>>8; if ( ! (lacc>>8) ) if ( (lacc&Oxff) >pcb_dead) { f (i_altref) lastRefA=l; else lastRef=l; } if ( ( _stop) &&( • ]_splιce) S ( ! j_manual) ) :_heat=0; far unsigned short lradius, SUBSTπUTESHEET(RULE26) far unsigned short lwrap; void doTTS ( ) { unsigned char c; if ϋ_altref) lacc=lacc/refAInt; else lacc=lacc/refInterval ; // 1 $10000 6 ' m 60 1000 lacc=lacc*39; // lpm *$100 vsw_web=lacc/0xl00; // m lpm if ( ( ! lradius) && ( ! :_stop) ) { vsw_calιp=psb_acal; lradιus=vsw_radιus; lwrap=vsw_wrap,- } else { if (vsw_radιus<lradιus) { lacc=lradιus,- lacc=lacc-vsw_radιus; if (Iacol00*psb_ιcal) { lacc-lacc*0x10000; lacc=lacc/ (vsw_wrap-lwrap) ; lacc=lacc*10,- vsw_calip=lacc/0xl0000; // in . OOOli lradιus=vsw_radιus; lwrap=vsw_wrap; } } } lacc= (long) vsw_radιus*vsw_radius- (long) vsw_splιce*vsw_splice,- lacc=lacc/ (unsigned short)vsw_calip, • C=0; vsw_tιme=0xffff; if (lacc&OxffffOOOO) { lacc=lacc/0xl00; c=l; } lacc=lacc*1884; lacc=lacc/ (unsigned short)vsw_web; if (c) lacc=lacc*65; // *256/1000 else { lacc=lacc*256/1000; } // /1000 if (! (lacc_.0xff000000) ) ; } void doHertz ( ) { vsw_splice=key_thumb ( ) * 50 ; if ( ! j_stop) { sacc»ref Interval ,• sacc = sacc-ref AInt ; if (sacc<0 ) sacc»-sacc ; sacc=sacc* l00 ,• if ( i_altref ) sacc=sacc/refAInt ,- else sacc=sacc/re Interval ; Referr= ! ( sacopcb_referr) ; } } /* * / ttifndef BORLANDC static unsigned char CCEN ® Oxcl; /'enables*/ static unsigned char CTCON ® Oxel; /'scaling*/ static unsigned char T2CON ® 0xc8 ; static unsigned char CC4EN 3 0xc9; static unsigned char CRCL ® 0xca ; /*capture right*/ SUBSΠTUTESHEET(RULE26) static unsigned char CRCH ® Oxcb static unsigned char CCLl 3> 0xc2 /'capture refer*/ static unsigned char CCH1 3> Oxc3 static unsigned char CCL2 3> 0xc4 /'capture altref static unsigned char CCH2 OxcS static unsigned char CCL3 ® 0xc6 /'capture left*/ static unsigned char CCH3 ® Oxc "7 ; static bit unsigned char EX3 3 Oxba static bit unsigned char EX4 ® Oxbb static bit unsigned char EX5 ® Oxbc static bit unsigned char EX6 ® Oxbd static bit unsigned char T2PS ® Oxcf static bit unsigned char I3FR ® Oxce static bit unsigned char I2FR ® Oxcd static bit unsigned char T2R1 ® Oxce static bit unsigned char T2R0 ® Oxcb static bit unsigned char T2CM ® Oxca static bit unsigned char T2I1 @ 0xc9 static bit unsigned char T2I0 ® 0xc8 static bit unsigned char TF2 ® 0xc6 static bit unsigned char ET2 @ Oxad void startisrsO { CCEN=0X55; CC4EN=0x06; CTCON| =0x80, T2PS=1; T2I1=0, T2I0=1; T2R1=0; T2CM=0; I3FR=1; EX3=1, EX4=1, EX5=1; EX6=1; ET2=1; } void interrupt ιsr_t2oflow() { hιghClock++; TF2=0; } /* void interrupt ιsr_leftroll () /* { vsb_left++; if (s_left) { di () ,- longone.b.h-highClock, • ei () ; longone.b.ll=CCH3; longone.b.l0=CCL3 , • thιsTιme=longone.1,- thιsBase=lastRe ; thιsCount=vsb_ref; d_roll=l; } } void interrupt ιsr_rιghtroll () { vsb_rιght++; if (!s_left) { dι() ; longone.b.h=hιghClock; eι() ; longone.b.ll=CRCH; longone.b.10=CRCL; thιsTιme=longone.1; thιsBase=lastRef; thιsCount=vsb_ref; d roll-l; } */ save thisTime, save thisTime; ; thιsBase=lastRef; 6h.4,u301 thιsBase=lastRef; movx 3>dptr,a mov a,r5 movx ® dptr, a mov dptr , #_vsb_refa , ■ thιsCount=vsb_ref , bb 20h.4,myl299 ;26h.4,u301 mov dpt , tt_vsb_ref , • thιsCount=vsb_ref ,- myl 299: movx a,®dptr mov dptr, #_thisCount movx ® dptr, a pop 2 pop 3 pop 4 pop 5 ttendasm } } /* void interrupt isr_reference () { vsb_ref++; di(); longone.b.h=highClock; ei(); longone. .11=CCH1; longone.b.10=CCL1; refInterval-longone.1-lastRef; lastRef=longone.1; vsb_ref++; d_ref=l; } */ void interrupt isr_reference() { vsb_ref++; d_ref=l; ttasm push 5 push 4 push 3 get lastRef, new lastRef interval is new-old void interrupt isr_refera() { vsb_refa++; d refa=l; interval is new-old } / * * / /* define interrupt service */ begvectors setvector (TF2vect, ιsr_t2oflow) /* timer 2 overflow */ setvector (EX4vect, ιsr_reference) /* port 1.1 */ setvector (EXSvect, ιsr_refera) /* port 1.2 */ setvector (EX3vect,ιsr rightroll) /* port 1.0 */ setvector (EX6vect, ιsr_lef troll) /* port 1.3 */ endvectors /* rtc is on EX2 . port 1 */ ttendif / * * / //static bit unsigned char WDout _ 0xb5 , /* dispatching root */ def root (theVar) , startisrs ( ) ,• adc_start (8,0) ; while ( ! adc_ready ( 8 ) ) ; vpw_posιt=adc_value (8) ; pιd_mteg=ppw_dmt ; pιd_ιnteg=pιd_ιnteg<<16 , vsw_gam=psw_dgaιn ; dac_mιt () ,• setroot (theVar) setproc (ladder) adc_start (8,0) ; while ( ! adc_ready ( 8 ) ) ; vpw_posιt=adc_value (8) ; pιd_mteg=ppw_dmt ; pιd_mteg=pιd_mteg<<16 ,- vsw_gaιn=psw_dgam ,- Referr = l , ■ defloop (on) //WDout=-WDout ; if (clockl28th) { clockl28th-0; doPIDO ; ιsrf_checkPort () ; ιsrf_checkPack() ; continue; } if (clock32th) { clock32th=0; continue; } if (clocklth) { clocklth=0; doTTS() ; dσHertz() ; continue; } if (d_ref) { d_ref=0; doRef() ; continue; } if (d_refa) { d refa=0; SUBSTITUTE SHEET (RUI.E 26) doRefa () , continue, } if (d_roll) { d_roll=0, if (doRollO ) checkDia () , continue; } doDead ( ) , step (ladder) endloop endroot /* end of pic c */ /* plca.h - avocet macros and functions */ ttinclude < ntrpt.h> static bit unsigned char DebugO ® 0x92; /* variable definition macros */ ttdefine dplcBitBytes ( (dplcTotalBιts+7) /8) ttdefine dplcBitBase 0x0020 ttdefine dplcVarBase 0xf800 ttdefine dplcVarSize 0x0100 ttdefine dplcBytevBase OxfβOO ttdefine dplcBytekBase OxfβlO ttdefine dplcWordvBase 0xf820 ttdefine dplcWordkBase 0xf840 ttdefine dplcByteBase 0xf880 ttdefine dplcWordBase 0xf900 /* variable control type */ typedef struct { unsigned char type,numb, _our; far void *addr; short lnit; char name [15] ; } splcVar; /* public variables -- */ extern far unsigned char plcTocks; static bit unsigned char clockl28th ® dplcResrvBase+O static bit unsigned char clock64th @ dplcResrvBase+1 static bit unsigned char clock32th ® dplcResrvBase+2 static bit unsigned char clocklth © dplcResrvBase+3 /* raise support functions */ void ιsrf_jour(short a, short b) //void isrf_log (char c, short d) //void ιsrf_logl (char c, long 1) //void ιsrf_log4 (char c, short d, short e, short f, short g) ; //void ιsrf_dump (short a, short 1) ; //void srf_put (unsigned char d) , //void isr mon() ; void ιsrf_checkPort () , void ιsrf_checkPack() , /* incremental execution functions */ unsigned char resume (near unsigned short *v) , unsigned char suspend(near unsigned short *v) , /* 10 support functions */ void getιo(voιd *v) , void setiofvoid *v) , void mitiotcode splcVar *p) ; /* interrupt support */ ttdefine IEOvect 03h ttdefine TFOvect Obh ttdefine IElvect 13h ttdefine TFlvect lbh ttdefine RIOvect 23h ttdefine TF2vect 2bh ttdefine IADCvect 43h ttdefine EX2vect 4bh ttdefine EX3vect 53h ttdefine EX4vect 5bh ttdefine EXSvect 63h ttdefine EX6vect 6bh ttdefine Rllvect 83h ttdefine CTFvect 8bh /* timer functions */ void startti eO , void gettime () ; void interrupt ιsr_tιck() ; void interrupt ιsr_debug() ; ttdefine begvectors void set_vectors () { \ set_vector(EX2vect, ιsr_tιck) ; ttdefine setvector(v, f) set_vector(v, f) ; //ttdefine endvectors set_vector(IElvect, ιsr_debug) ,- } ttdefine endvectors } /* end of plca . h */ /* plca . c - avocet macros and functions * / tt clude <prom. h> ttinclude <console .h> ttinclude <hexes . h> ttinclude "plc . h" far unsigned char plcTicks far unsigned char plcTocks near unsigned char plc64th near unsigned char plc32th near unsigned char plclth; // misc support functions ttdefine RTCBASE 0x7e40 unsigned char splcRomGet (short a) { unsigned char d, if (a&OxffOO) d=*(far unsigned char*) (RTCBASE+14+ (a&OxOOff) ) , else prom_read(a, &d) , return d, } void splcRomPut (short a, byte d) { if (a&0xff00) *(far unsigned char*) (RTCBASE+14+ (a&OxOOff) ) =d; else { prom_enable() ; prom_wnte (a,d) , prom_dιsable () , } } // mapped address space // 8000..8fff is external ram (xram) // 0800..7fff is code rom // 0400..07ff is code rom 0000..03ff // 0100..03ff is nv ram // 0000..OOff is ram void ιsrf_poker(word a, byte d) { if (a&0x8000) *(far unsigned char*)a=d; else if (a&0x7c00) ; else if (a&0x0300) splcRomPu (a-OxOlOO,d) ; else * (near unsigned char*)a=d; } byte ιsrf_peeker(word a) { byte d; if (a&OxθOOO) d=* (far unsigned char*)a; else if (a&0x7800) d=* (code unsigned char*) a; else if (a&0x0400) d=* (code unsigned char*) (a-0x0400) ; else if (a&0x0300) d=splcRomGet (a-OxOlOO) ; else d=* (near unsigned char*)a,- return d; } void ιsrf_dump(short a, short 1) { byte b; cons_nl () ; while (1) { if ( (a&0x000f)=-0) { cons_nl() ; puthexword(a) ; cons_put('•'); } puthexbyte(ιsrf_peeker(a) ) ; a++; 1-- ; } } void ιsrf_snap() { ιsrf_dump(0x0000,0x0100) ιsrf_dump(0x0100,0x0132) isrf_dump(0xf800, 0x0140) ιsrf_dump(0x8000, 0x0140) } void ιsrf_pu (unsigned char d) { if (d==0x0d) cons_cr(); else cons_put (d) ; . - 53 - I I realtime packet support // packet format [..] // commands // = set base to AA // < modify ©base to D // > peek byte ©base // { modify abase to DD // } peek word ©base // - snap thru port // ' reset static unsigned char S1BUF ® 0x9C; static unsigned char S1CON © 0x9B; static far unsigned char packlx ® OxfffO; static far unsigned char packCmd @ Oxfffl. static far unsigned short packData ® Oxfff2, static far unsigned short packVars ® Oxfff , static far unsigned short* far packJour ® 0xfff6, static far unsigned long packOpto ® Oxfffθ; static far unsigned short packBase @ Oxfffc; static far unsigned char packWix ® Oxfffe; static far unsigned char packSize ® Oxffff; void ιsrf_ our(short a, short b) { *packJour++=a; *packJour++=b; if ( (short)packJour>Oxefff) packJour= (far unsigned short*) 0x8000; } void ιsrf_checkPort 0 { unsigned char b; if (S1CON&1) { SlCON&=0xfe; b=SlBUF; switch (packlx++) { case 0: if (b!=' [') packlx=0; break; case 1: break; case 2 : packCmd= ; packData=0; if (b== ' < ■ ) packlx=4,- else if ( (b!='=')&&(b! ='{') ) packlx=5; brea ; case 3: packData=b; packData=packData<<8; break; case 4: packData=packData+b; break; case 5: if (b!='] ') packlx=0; break; default: packlx=0; } if ( (packlx!=1) &&(packlx!=6) ) ιsrf_put (b) , • } } void ιsrf_checkPack0 { if (packlx) { if (packlx==l) { packlx=2; cons_put ( ' [ ' ) ; } else if (packIx--=6) { switch (packCmd) { case ' = packBase=packData, break, case ' < ιsrf_poker (packBase++,packData) , break, case ' > isrf_pu (isrf_peeker (packBase++) ) , break case ' { ' . ιsrf_poker (packBase++,packData/256) ; isrf_poker (packBase++,packData&Oxff) ; break, • case ' } ' • ιsrf_put (ιsrf_peeker (packBase++) ) , isrf_put (isrf_peeker (packBase++) ) ,- break,- ) , break, } packlx=0; cons_put ('] ') ; } } else { if (packSize) { if (IpackWix) { cons_put ('{') ; packWix=l; } else if (packWιx>packSιze) { cons_put ('} ') ; packWιx=0, • } else ιsrf_put ( * ( far unsigned char* ) (packBase- l+packWιx++) ) } } /* incremental execution functions */ static unsigned char stack ©0x81; unsigned char resume(near unsigned short *v) { near unsigned short *r; r=(near unsigned short*) (stack-1) , *r=*v, return 0; } unsigned char suspend(near unsigned short *v) { near unsigned short *r; r=(near unsigned short*) (stack-1) ; *v=*r; return 1,- } /* IO support functions --- */ static near unsigned char portl ® 0x90 static near unsigned char port3 ® OxbO ssttaattiicc bbiitt uunnssiiggnneedd cchhaarr ppoori t32 ® 0xb2 ιc bit unsigned char port33 @ 0xb3 -ic bit unsigned char port34 ® 0xb4 static bit unsigned char port35 © 0xb5 static near unsigned char port4 © 0xe8 SUBSTTTUTE SHEET (RULE 26) static near unsigned char port5 © Oxf8; static near unsigned short inpsO © 0x20, static near unsigned char mps2 @ 0x22, static near unsigned short outsO ® 0x23, static near unsigned char outs2 © 0x25; static far unsigned short optoi © 0x7e02j static far unsigned short optoo ® 0x7e00; void getιo(voιd *v) { inps2=- ( (portl&Oxf0) | ( (port3&0x3c) »2 ) ) ; // ιnps2=0; inps0=-optoi; void setio (void *v) { if (packOpto) { port5=0xf0| ( (packOpto&OxfO) /16) ; port4=0xf0I ( (packOpto&OxOf) ) ; // portl-=0xlf I (packOpto&OxeO) , ■ // port32= (packOpto&4) >>2; // port33= (packOpto&8) >>3; // port34= (packOpto&16) >>4,- // port35=(packOpto&l) ,- optoo=- ( (packOpto>8) &0xffff) ; } else { port5=0Xf0 I ( (outs2&0xf0) /16) ; port4=0xf0I ( (outs2_.0x0f) ) ; // portl=0xlfJ (σuts2&0xe0) ; //rrot stop break // port3=0xc3&( (outs2&0x3c) >>2) ; // port32= (outs2&4) >>2 ; //alarm // port33= (outs2&8) >>3; //torq // port34= (outs2&16) >4; //boost // port35=(outs2_.l) ,- //referr optoo=~outs0; *(far unsigned char*) (RTCBASE+0x3f) = * (near unsigned char*) (dplcBitBase+(dplcSystemBase+32)/8) ; } } void inιtio(code splcVar *ρ) { code splcVar *v; union { unsigned char dc[2] ; unsigned short ds; } d; far char *z; cons_open(1,BAUD0 6,1) ; z=(far char*)dplcVarBase; d.ds=0; while (d.ds++<dplcVarSize) *z++=0xff; prom_inιt () ; outs0=0; v=(code splcVar*)p; packVars=(unsigned short)p; packSize-0; packJour= (far unsigned short*) 0x8000,; packOpto * 0; packlx=0; while (v->type!='z' ) { d . ds=0 , if ( (v- >mιt ) <0 ) { d.dc [1] =splcRomGet (- (v->mιt) ) , if (v->numb==254) d.ds= (d.ds<<8) +splcRomGe (- (v->ιnιt) +1) ; } else { d.ds=v->ιnιt,- } if ( (v->numb) ==254) *(far unsigned short*) (v->addr) =d.ds; else if ( (v->numb)==255) '(far unsigned char*) (v->addr)=d.dc [l] ,- else { if (d.dc.l]) ♦ (near unsigned char*) (dplcBιtBase+(v->numb/8) ) | = (l<< (v->numb%8) ) , else ♦(near unsigned char*) (dplcBιtBase+ (v->numb/8) ) &=- (l<< (v->numb%8) ) ; } V++ ; } ♦ (near unsigned char*) (dplcBιtBase+ (dplcSystemBase+32) /8) = ♦(far unsigned char*) (RTCBASE+0x3f) ; setio(p) ; getιo(p) ; } /* interrupt support static bit unsigned char IT1 ® 0x8a static bit unsigned char EX1 ® Oxaa static bit unsigned char EX2 © 0xb9 static bit unsigned char I2FR © Oxcd /* timer functions */ static far unsigned char RTCregA ® 0x7e4a,- static far unsigned char RTCregB ® 0x7e4b; static far unsigned char RTCregC © 0x7e4c; ttdefine dplcT cksPer 13 void starttimeO { plc64th=l; plc32th=l; plclth=l; I2FR=0; EX2=1; // IT1-1; // for debug // EX1=1; RTCregA=0x29; RTCregB=0x40; if (RTCregC) plcTicks++; eι() ; } vo d gettimeO { plcTocks=0; while (plcTicks>dplcTιcksPer) { di () ; plcTicks--dplcTicksPer; plcTocks++; ei () ,- } } SUBSTTTUTE SHEET (RULE 26) void interrupt isr_tick ( ) /* { if (RTCregC) plcTicks++; clockl28th=l; if (!--plc64th) { plc64th=2; clock64th=l; if (!--plc32th) { plc32th=2; clock32th=l; if (!--plclth) { plclth=32; clocklth=l; } } } } */ { ttasm push dpi push dph mov dptr, #32332 ,- if (RTCregC) plcTicks++; movx a,©dptr bz myl74 mov dptr, #_plcTicks movx a,©dptr inc a movx ®dptr,a myl74 : setb 2Fh.O clockl28th=l; dbnz _plc64th,myl75 if (!--plc64th) { mov _plc64th,tt2 plc64th=2; clock64th=l, setb 2Fh.l dbnz _plc32th,myl75 if (!--plc32th) { mov _plc32th,#2 plc32th=2; clock32th=l; setb 2Fh.2 dbnz _plclth myl75 if (!--plclth) { mov _plclth,tt32 plclth=32; clocklth=l; setb 2Fh.3 myl75 : ; } } } pop dph pop dpi ttendasm } void interrupt isr_debug() { isrf_sna () ; } /* end of plca.c */ The preferred embodiment of the present invention has now been described. This preferred embodiment constitutes the best mode presently contemplated by the inventors for carrying out their invention. Because the invention may be copied without copying the precise details of the preferred embodiment, the following claims particularly point out and distinctly claim the subject matter which the inventors regard as their invention and wish to protect:

Claims: I CLAIM : 1. An improved method for controlling the speed and the tension of a web being unwound from a first, rotating roll where the web runs from the roll along a predetermined path through an inertia- compensated festoon, which has the capacity of storing varying amounts of running web during the operation of a web-using process without inducing tension variations into the web, and to the web- using process which requires the web to run at a preselected relatively high speed and at a preselected relatively low tension and which tends to pull the web so as to apply a web-unwinding torque to the roll; the method including the steps of: applying a brake force to the rotating roll, when the web begins to unwind from the roll; decreasing the braking force applied to the roll as the diameter of the roll is reduced, due to the web being unwound from the roll, so that the web will run through the process at the preselected speed and tension as the roll unwinds; and when the roll has been unwound to an intermediate diameter where the decreasing web- unwinding torque is inadequate to continue to accelerate the mass of the roll assisting in rotating the roll in a web-unwinding direction by increasingly adding web-unwinding torque to the roll as the diameter of the roll continues to decrease from the intermediate diameter so that the web will continue to run through the process at the preselected speed and tension as the remaining web is unwound from the roll. 2. The improved method of Claim 1 where the amount of running web stored in the festoon determines the application of the brake force being applied to the roll and the adding of the assisting web-unwinding torque to the roll. 3. The improved method of Claim 2 where the roll includes a first, center-core-shaft on which it is mounted and which rotates with the roll; where a first brake-assembly is connected with the core shaft and includes components which rotate with the core shaft; and where a first drive-assembly is connected with the core shaft and includes components which rotate with the core shaft; where the brake assembly applies braking force to the core shaft; and where the drive assembly adds the assisting web-unwinding torque to the core shaft. 4. The improved method of Claim 3 where a second, then non-running roll is positioned for rotation adjacent to the beginning of the predetermined path of the web running from the first running-roll; where a zero-speed web-splicing assembly is positioned adjacent to the predetermined path, downstream from the rolls, and when actuated, serves to splice the leading end of the web wound on the non-running roll with the web being unwound from the running roll; where the second roll includes a second centrr-core-shaft and is mounted on the second center-core-shaft for rotation with the second roll; where a second shaft brake-assembly is connected with the second core-shaft and includes components which rotate with the second core-shaft; where a second shaft drive-assembly is also connected with the second core-shaft and includes components which rotate with the second core-shaft; where, when a web splice is to be made, the method includes the further steps of: increasing the braking force of the first brake-assembly on the second core-shaft of the first running-roll and disengaging the first drive-assembly so that the first running-roll will stop rotating; splicing the trailing end portion of the web on the first roll with the leading end portion of the web on the second roll in the splicing assembly; engaging the second drive-assembly with the second core-shaft so that after the web splice has been made by the splicing assembly, the second roll will be accelerated to line speed by the second drive- assembly and thereafter disengaging the second drive-assembly; and applying braking force, by the second brake-assembly, to the second core-shaft to control the running of the web from the second, now- running roll so that the web will run through the process at the preselected speed and tension. 5. The improved method of Claim 4 where the amount of web stored on the festoon determines the application of the braking force being applied to the running roll, before the diameter of the running roll is unwound to its intermediate diameter and the adding of assisting web-unwinding torque to the running roll before the running roll is stopped for web splicing. 6. An improved system for controlling the speed and tension of a web running through a web- using production process which requires the web to run at a preselected relatively high speed and at a preselected low tension and which tends to pull the web so as to apply a web-unwinding torque to the roll, the system comprising: a first roll mounted for rotation about its central longitudinal axis and having the web wound about its longitudinal axis, with the web, which is being unwound from the roll, running along a predetermined path from the roll to the process; an inertia-compensated festoon disposed in the predetermined path so that the running web passes through the festoon, with the festoon having the capacity for storing varying amounts of running web during the operation of the process without inducing tension variations into the web; a first shaft brake-assembly connected with the roll for applying a braking force to the roll; a first shaft-drive assembly connected with the roll so that when engaged, the drive assembly will drive the roll in a web unwinding direction; means for controlling the operations of the brake assembly and of the drive assembly, with the control means causing the brake assembly to apply a decreasing braking force to the roll as the diameter of the roll decreases, due to the web being unwound therefrom, so that the running web will run through the process at the preselected speed and tension, and with the control means causing the drive assembly to engage the roll when the web on the roll has been unwound to an intermediate diameter where the decreasing web-unwinding torque is inadequate to continue to accelerate the mass of the roll so that the drive assembly will increasingly add assisting web-unwinding torque to the roll as the diameter of the roll continues to decrease so that the web will continue to run through the process at the preselected speed and tension as remaining web is unwound from the roll. 7. The improved system of Claim 5 wherein the control-means includes means for sensing the amount of web stored in the festoon; and wherein the sensed amount of web determines the application of the braking force by the brake assembly on the roll and the addition of assisting web-unwinding torque by the drive assembly to the roll. 8. The improved system of Claim 7 wherein the first roll includes a first center-core-shaft on which it is mounted and which rotates with the roll; wherein the first brake assembly is connected with the first core-shaft, and includes components which rotate with the core shaft; and wherein the first drive-assembly is connected with the first core- shaft and includes components that rotate with the core shaft; wherein the first brake-assembly applies braking force to the first core-shaft; and wherein the first drive-assembly adds assisting web- unwinding torque to the first core-shaft. 9. The improved system of Claim 8 wherein a second, then non-running roll, which includes a second center-core-shaft, is positioned for rotation with the second central core shaft; wherein the second roll is adjacent to the beginning of the predetermined path of the web running from the first running-roll; wherein a zero-speed web-splicing assembly is positioned adjacent to the predetermined path, downstream from the rolls and when actuated, serves to splice the leading end of the web wound on the non-running roll with the web being unwound from the running roll; wherein a second shaft-brake assembly is connected with the second core-shaft and includes components which rotate with the second core-shaft; wherein a second shaft drive-assembly is also connected with the second core-shaft and includes components which rotate with the second core shaft; wherein when a web splice is to be made, the control means increases the braking force of the brake assembly on the core-shaft of the running roll and disengages the drive assembly from the core-shaft of the running roll so that the running roll will stop rotating; wherein the control means causes the splicing assembly to splice the trailing-end portion of the web on the running roll to the leading-end portion of the web on the non- running roll; wherein after a web splice has then been made by the splicing assembly, the control means causes the drive assembly to accelerate the non-running, roll to line speed, after which the control means disengages that drive assembly; and wherein the control means causes the braking assembly associated with the now-running roll to apply braking force to control the running of the web from the now-running roll so that web will continue to run through the process at the preselected speed and tension. 10. The improved system of Claim 9 wherein the control means includes means for sensing the amount of web stored in the festoon; and wherein the sensed amount of web determines the application of braking force to the running roll and the addition of assisting web-unwinding torque by the drive assembly of the running roll.

Inventors: BORYS EMIL G, CEDERHOLM ROGER, WARD JAMES K, BORYS, EMIL, G., CEDERHOLM, ROGER, WARD, JAMES, K.
Applicants: BORYS EMIL G, CEDERHOLM ROGER, MARTIN AUTOMATIC INC, WARD JAMES K, BORYS, EMIL, G., CEDERHOLM, ROGER, MARTIN AUTOMATIC INC., WARD, JAMES, K.
Application year: 1997
Main classification: B65H19
IPC codes: B65H23