General Computer Program for Two-Plane Balancing of Rigid Rotors
-
Overview
Due to the cross-effect, the two-plane balancing of a rigid rotor is advisable. The standard solution is used for a center-hung rotor, and the static-couple effective solution is employed for an overhung rotor [1,2,3,4]. All of the variables for the program have been completely defined, and the appropriate two-plane balancing procedures for center-hung and overhung rotors have been also explained [1,2,3,4]. For a frontal observer of the rigid rotor the location of the near, N, and far, F, bearings is relative, but the position of the left, L, and right, R, planes does not change, and this fact must be considered for the correct application of the corresponding balancing method to rotative machinery [3].
The program was checked from previous results [1,4] and from new experimental data by means of the online software for the two-plane balance of rotating machinery, developed for the lead phase measuring system with the rotating scale convention [5], avoiding a paradox if the trial weights are attached at 0 or 180 degrees [1], as well as by the two-plane balance program developed for the lead phase measuring system with the fixed-scale convention [2, 6] and utilized for the lag phase measuring system with the rotating scale convention [4].
-
Development
First of all, the Rotor Type (Centerhung or Overhung) and the Balancing Method (Standard or Effective) must be recorded. The program asks the user for the Units of vibration (Vib) with the corresponding angle (Ang) of weight (Wght) and frequency including its value f. The program requires the method for measuring angles, specifically the phase measurement System (Lead Phase or Lag Phase), the phase Convention (if the angles are measured on the inner Rotating Scale or on the outer Fixed Scale) and the scale Direction (if the angles are measured: in the Same rotor’s direction of Rotation or Contrary to the rotor’s direction of Rotation). In practice the question is: if the protractor’s angular scale coincides with the rotor’s direction of rotation or if it is opposite to the rotor’s direction of rotation. Regarding the Balancing Equipment, in the case of the Lead Phase measuring system the stroboscope and the photocell give identical values for the phase angle, but in the case of the Lag Phase measuring system the phase angle is measured using the photocell and its value is independent of the direction of rotation. However, the stroboscope synchronized by the sensor can be used for the Lag Phase with the Fixed Scale Contrary to Rotation or with the Rotating Scale in the Same rotor’s direction of Rotation. The following combinations produce an angle, ang, in a direction contrary to rotation: {(Lead Phase AND Rotating Scale AND Contrary to Rotation) OR (Lead Phase AND Rotating Scale AND Same of Rotation) OR (Lag Phase AND Rotating Scale OR Fixed Scale AND Same of Rotation)}. The following combinations produce an angle, ang’ = 360° – ang = – ang, in the same direction of rotation: {(Lead Phase AND Fixed Scale AND Same of Rotation) OR (Lead Phase AND Fixed Scale AND Contrary to Rotation) OR (Lag Phase AND Rotating Scale OR Fixed Scale AND Contrary to Rotation)}. IF any of the preceding combinations occurs THEN the complex conjugate of the vector operators or vector factors (VL, aVL) and (VR, aVR), in its respective coordinate system must be taken [1,2,4]. Figure 1(a) will help to understand each one of the combinations, and Figure 1(b) shows the vibration vectors, (vib, ang) in the coordinate system (x, y) and (vib, ang’) in the coordinate system (x,y’), for both sets of combinations. According to the experts, the phase angle convention can be extremely confusing, and the lead phase system was not considered [7] (here as lag phase system). The algorithm explained in this paper details for maintenance engineers the system and convention for phase measurement.
Figure 1. (a) Image produced by stroboscope, (b) Vibration vectors in the coordinate systems.
The effect of the trial weights, (WTL,aWTL) and/or (WTR,aWTR), on the bearings’ vibration, (N,aN) and (F,aF), allows the program to Calculate the Initial Balance,(WL,aWL) and (WR,aWR), and from the remaining bearings’ vibration, (NRem,aNRem) and (FRem,aFRem), the necessary additional or Trim Balance, or determines the residual unbalance [4], giving results in polar coordinates for each case.
The listing of the new source code is written in Lazarus (Free Object Pascalsimilar to Delphi)[8] for a computer Dell (Intel Core 2Duo 3 GHz, RAM memory 2 GB, Hard Disk 160 GB, Windows 7 Starter) with a monitor Samsung (Model SyncMaster 920LM) as follows:
{Two Plane Balancing of Rigid Rotors General Computer Program}
{Written in Lazarus by Robustiano Gorgal}
unit TPBunit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil,
Forms, Controls, Graphics,
Dialogs, StdCtrls, Buttons,
LCLType, Math;
type
{ TForm1 }
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Edit1: TEdit; Edit2: TEdit;
Edit3: TEdit; Edit4: TEdit;
Edit5: TEdit; Edit6: TEdit;
Edit7: TEdit; Edit8: TEdit;
Edit9: TEdit; Edit10: TEdit;
Edit11: TEdit; Edit12: TEdit;
Edit13: TEdit; Edit14: TEdit;
Edit15: TEdit; Edit16: TEdit;
Edit17: TEdit; Edit18: TEdit;
Edit19: TEdit; Edit20: TEdit;
Edit21: TEdit;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
GroupBox4: TGroupBox;
GroupBox5: TGroupBox;
GroupBox6: TGroupBox;
GroupBox7: TGroupBox;
GroupBox8: TGroupBox;
GroupBox9: TGroupBox;
GroupBox10: TGroupBox;
GroupBox11: TGroupBox;
GroupBox12: TGroupBox;
GroupBox13: TGroupBox;
GroupBox14: TGroupBox;
GroupBox15: TGroupBox;
GroupBox16: TGroupBox;
Label1: TLabel; Label2: TLabel;
Label3: TLabel; Label4: TLabel;
Label5: TLabel; Label6: TLabel;
Label7: TLabel; Label8: TLabel;
Label9: TLabel; Label10: TLabel;
Label11: TLabel; Label12: TLabel;
Label13: TLabel; Label14: TLabel;
Label15: TLabel; Label16: TLabel;
Label17: TLabel; Label18: TLabel;
Label19: TLabel; Label20: TLabel;
Label21: TLabel; Label22: TLabel;
Label23: TLabel; Label24: TLabel;
Label25: TLabel; Label26: TLabel;
Label27: TLabel; Label28: TLabel;
Label29: TLabel; Label30: TLabel;
Label31: TLabel;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
RadioButton4: TRadioButton;
RadioButton5: TRadioButton;
RadioButton6: TRadioButton;
RadioButton7: TRadioButton;
RadioButton8: TRadioButton;
RadioButton9: TRadioButton;
RadioButton10: TRadioButton;
RadioButton11: TRadioButton;
RadioButton12: TRadioButton;
RadioButton13: TRadioButton;
RadioButton14: TRadioButton;
RadioButton15: TRadioButton;
RadioButton16: TRadioButton;
RadioButton17: TRadioButton;
RadioButton18: TRadioButton;
RadioButton19: TRadioButton;
RadioButton20: TRadioButton;
RadioButton21: TRadioButton;
RadioButton22: TRadioButton;
procedure BitBtn1Click(Sender:
TObject);
private
public
type
Vector = array[1..2] of Double;
var
N, F, WTL, N2, F2, WTR, N3, F3,
A, aA, B, bB, AB, aAbB, NP, FP,
bBF, BN, aAN, AF, D, CL, CR,
VL, VR, WL, WR, V: Vector;
E01, E02, E03, E04, E05, E06,
E07, E08, E09, E10, E11, E12,
E13, E14, E15, E16: Integer;
end;
var
Form1: TForm1;
implementation
{$R*.Ifm}
{ TForm1 }
procedure
TForm1.BitBtn1Click(Sender:
TObject);
var
Flag: Boolean;
Answ: Integer;
procedure dr(var V: Vector);
var
Factor: Double;
begin
Factor:=pi/180.0;
V[2]:=V[2]*Factor;
end;
procedure rd(var V: Vector);
var
Factor: Double;
begin
Factor:=pi/180.0;
V[2]:=V[2]/Factor;
end;
procedure pr(var V: Vector);
begin
V[1]:=V[1]*cos(V[2]);
V[2]:=V[1]*sin(V[2]);
end;
procedure rp(var V: Vector);
begin
V[1]:=sqrt(sqr(V[1])+sqr(V[2]));
V[2]:=arctan2(V[2],V[1]);
end;
procedure vdif(V1, V2: Vector; var
V: Vector);
begin
V[1]:=V1[1]-V2[1];
V[2]:=V1[2]-V2[2];
end;
procedure vmul(V1, V2: Vector;
var V: Vector);
begin
V[1]:=V1[1]*V2[1];
V[2]:=V1[2]+V2[2];
end;
procedure vdiv(V1, V2: Vector; var
V: Vector);
begin
V[1]:=V1[1]/V2[1];
V[2]:=V1[2]-V2[2];
end;
begin
if Label20.Caption = ‘1’ then
begin
Val(Edit1.Text,N[1],E01);
Val(Edit2.Text,N[2],E02);
Val(Edit3.Text,F[1],E03);
Val(Edit4.Text,F[2],E04);
Val(Edit5.Text,N2[1],E05);
Val(Edit6.Text,N2[2],E06);
Val(Edit7.Text,F2[1],E07);
Val(Edit8.Text,F2[2],E08);
Val(Edit9.Text,N3[1],E09);
Val(Edit10.Text,N3[2],E10);
Val(Edit11.Text,F3[1],E11);
Val(Edit12.Text,F3[2],E12);
Val(Edit13.Text,WTL[1],E13);
Val(Edit14.Text,WTL[2],E14);
Val(Edit15.Text,WTR[1],E15);
Val(Edit16.Text,WTR[2],E16);
end;
if Label20.Caption = ‘2’ then
begin
Val(Edit17.Text,N[1],E01);
Val(Edit18.Text,N[2],E02);
Val(Edit19.Text,F[1],E03);
Val(Edit20.Text,F[2],E04);
end;
Flag:= (E01 = 0) And (E02 = 0)
And (E03 = 0) And (E04 = 0) And
(E05 = 0) And (E06 = 0);
Flag:= FlagAnd (E07 = 0)
And (E08 = 0) And (E09 = 0) And
(E10 = 0) And (E11 = 0) And
(E12 = 0);
Flag:= FlagAnd (E13 = 0)
And (E14 = 0) And (E15 = 0) And
(E16 = 0);
if Flag then
begin
if Label20.Caption = ‘2’ then
begin
if RadioButton14.Checked then
begin
dr(N); dr(F);
end;
vmul(B,N,BN); pr(BN);
vmul(bB,F,bBF); pr(bBF);
vmul(aA,N,aAN); pr(aAN);
vmul(A,F,AF); pr(AF);
vdif(bBF,BN,CL);
vdif(aAN,AF,CR);
rp(CL); rp(CR);
vdiv(CL,D,VL);
vdiv(CR,D,VR);
end;
if Label20.Caption = ‘1’ then
begin
if RadioButton14.Checked then
begin
dr(N); dr(F); dr(WTL);
dr(N2); dr(F2); dr(WTR);
dr(N3); dr(F3);
end;
NP:=N; FP:=F;
V[1]:=0.0; V[2]:=0.0;
pr(N); pr(F); pr(N2); pr(F2);
pr(N3); pr(F3);
vdif(N2,N,A); vdif(F2,F,aA);
vdif(F3,F,B); vdif(N3,N,bB);
rp(A); rp(aA); rp(B); rp(bB);
vmul(A,B,AB); vmul(aA,bB, aAbB);
vmul(bB,FP, bBF); vmul(B,NP,BN);
vmul(aA,NP,aAN); vmul(A,FP,AF);
pr(AB); pr(aAbB); pr(bBF);
pr(BN); pr(aAN); pr(AF);
vdif(AB,aAbB,D);
vdif(bBF,BN,CL);
vdif(aAN,AF,CR);
rp(D); rp(CL); rp(CR);
vdiv(CL,D,VL); vdiv(CR,D,VR);
end;
Flag:= (RadioButton5.Checked
And RadioButton8.Checked And
RadioButton10.Checked);
Flag:= FlagOr
(RadioButton5.Checked And
RadioButton8.Checked And
RadioButton9.Checked);
Flag:= FlagOr
(RadioButton6.Checked And
(RadioButton7.Checked Or
RadioButton8.Checked) And
RadioButton9.Checked);
if Flag then
begin
VL[2]:= -VL[2]; VR[2]:= -VR[2];
end;
vmul(VL,WTL,WL); vmul(VR,WTR,WR);
rd(WL); rd(WR);
if RadioButton14.Checked then
begin
if WL[2]>360 then WL[2]:=WL[2]-360;
if WR[2]>360 then WR[2]:=WR[2]-360;
end;
if RadioButton15.Checked then
begin
dr(WL); dr(WR);
end;
if Label20.Caption = ‘1’ then
begin
Label21.Caption:= ‘WL/E=’+
FormatFloat(‘0.###’,WL[1]);
if WL[2] >= 0 then
Label22.Caption:= ‘aWL/E=’+
IntToStr(Round(WL[2])) else
Label22.Caption:= ‘aWL/E=’+
IntToStr(360+Round(WL[2]));
Label23.Caption:= ‘WR/LR=’+
FormatFloat(‘0.###’,WR[1]);
if WR[2] >= 0 then
Label24.Caption:= ‘aWR/L*R=’+
IntToStr(Round(WR[2]))else
Label24.Caption:= ‘aWR/L*R=’+
IntToStr(360+Round(WR[2]));
Label21.Visible:= True;
Label22.Visible:= True;
Label23.Visible:= True;
Label24.Visible:= True;
end;
if Label20.Caption = ‘2’ then
begin
Label27.Caption:= ‘WL/E=’+
FormatFloat(‘0.###’,WL[1]);
if WL[2] >= 0 then
Label28.Caption:= ‘aWL/E=’+
IntToStr(Round(WL[2])) else
Label28.Caption:= ‘aWL/E=’+
IntToStr(360+Round(WL[2]));
Label29.Caption:= ‘WR/LR=’+
FormatFloat(‘0.###’,WR[1]);
if WR[2] >= 0 then
Label30.Caption:= ‘aWR/L*R=’+
IntToStr(Round(WR[2])) else
Label30.Caption:= ‘aWR/L*R=’+
IntToStr(360+Round(WR[2]));
Label27.Visible:= True;
Label28.Visible:= True;
Label29.Visible:= True;
Label30.Visible:= True;
end;
Answ:= QuestionDlg
(‘Question’,‘Trim Balance’,
mtCustom,[mrOK,‘Yes’,mrNo,
‘No’, ‘IsDefault’],”);
if Answ = mrOK then
begin
Edit17.Visible:= True;
Edit18.Visible:= True;
Edit19.Visible:= True;
Edit20.Visible:= True;
Label17.Visible:= True;
Label18.Visible:= True;
Label25.Visible:= True;
Label26.Visible:= True;
Label20.Caption:= ‘2’;
Edit17.SetFocus;
end;end else
ShowMessage(‘Data error’);
end;
end.
program Project1;
{2 Plane Balance}
uses
Forms,
Unit1 in ‘Unit1.pas’ {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1,
Form1);
Application.Run;
end. {Project1}
With the following results:
3. Conclusion
A general computer program for two-plane balancing of rigid rotors has been developed, which is useful for different instruments with particular measuring systems and phase conventions.
References
- José A. Méndez-Adriani, “Considerations on the Field Balancing of the Overhung Rigid Rotors”, The Shock and Vibration Digest, Volume 37 – Number 3, May 2005, pp. 179-187, SAGE Publications.
- José A. Méndez-Adriani, “Rigid Rotor Two-Plane Balancing Solution for the Fixed Scale Convention”, Conference Proceedings of the Vibration Institute, presented in Jacksonville, Florida, USA, June 19-21, 2013, 8 pp.
- José A. Méndez-Adriani., “Invariance of Vector Factors in the Direct Solution for Two-Plane Field Balancing with the Orientation of the Overhung Rigid Rotor”, Uptime Magazine, February/March 2015, pp. 62-64.http://www.reliabilityweb.com
- José A. Méndez-Adriani, “A Two-Plane Balancing Solution for the Lag Phase Measuring System”, Uptime Magazine, October/November, 2016, pp. 52-55. http://www.reliabilityweb.com
- llc, Rotor Two Plane Balancing, Machine Maintenance, http://www.denysschen.com/Balancing/WebBalance/2PlaneBalance.aspx, 2019.
- IRD Mechanalysis, Balancing Systems Division, Balance Programs, Version 1.03.
- Ray Kelm, Dustin Pavelek and Walter Kelm, “Rotor Balancing Tutorial”, 45th Turbomachinery & 32nd Pump Symposia, Houston, Texas, September 12-15, 2016, p. 25.
- Lazarus Team, Lazarus: The Professional Free Pascal RAD IDE, Version 1.8.2, 2018, URL°http://www.lazarus-ide.org, RRID:SCR_014362.