Articles  

General Computer Program for Two-Plane Balancing of Rigid Rotors

Jose Adriani
Jose Mendez Adriani | Professor, Central University of Venezuela

General Computer Program for Two-Plane Balancing of Rigid Rotors

  1. 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].

  1. 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

  1. 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.
  2. 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.
  3. 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
  4. 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
  5. llc, Rotor Two Plane Balancing, Machine Maintenance, http://www.denysschen.com/Balancing/WebBalance/2PlaneBalance.aspx, 2019.
  6. IRD Mechanalysis, Balancing Systems Division, Balance Programs, Version 1.03.
  7. Ray Kelm, Dustin Pavelek and Walter Kelm, “Rotor Balancing Tutorial”, 45th Turbomachinery & 32nd Pump Symposia, Houston, Texas, September 12-15, 2016, p. 25.
  8. Lazarus Team, Lazarus: The Professional Free Pascal RAD IDE, Version 1.8.2, 2018, URL°http://www.lazarus-ide.org, RRID:SCR_014362.

 

Comments and Questions

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
Notify of

About the Author

Jose Adriani
Jose Mendez Adriani Professor, Central University of Venezuela

José Alberto Méndez-Adriani: Ing Mec (UCV, 1970), MSE Mech Eng (U of Michigan, 1973), FASP (MIT, 1980), ScD Mech Eng (City U of Los Angeles, California, 1989), QVA (IRD Mechanalysis, 1981), CMDB (Entek IRD, 1997), CTDPB (DSS, 2011); industrial practice in the assembly plant (GMC, 1976); Professor Emeritus of Mechanical Engineering and Postgraduate Tutor in Theoretical and Applied Mechanics at the Central University of Venezuela.