Sunday, December 29, 2024

Oil debris monitoring system notes

  1.  MS4110 is an example of an oil debris monitoring system
  2. OODM cannot predict failure 
  3. Only gives data on wear particle generation rate
  4. Correlating wear particle generation to failure is system-specific
  5. Metalscan system can isolate ferrous and non-ferrous
  6. Chipcheck system can also identify alloys of the metal using spectroscopy
  7. M50 is bearing grade steel
  8. If detected, don't use the machine
  9. Silver is used as coatings for the bearings
  10. Silver in oil indicates superficial damage
  11. Ferrous particles are detected using eddy current 
  12. Nonferrous particles are detected using permeability-based detection
  13. Usually, opposite phase signals are obtained for ferrous and non-ferrous
  14. The only parameter on the sensor is the phase angle
  15. The interquartile demodulation technique is used to detect the chips.
  16. Data communication is through Modbus or TCP protocol

Saturday, December 21, 2024

Things he did last week

  1.  When going to udupi to eat big poori (chole bhatture), he asked for money to use the weighing machine, . First time he has asked for money was only the previous day with outstretched hands, "Appa kaasu kodu.
  2. Went to udupi to celebrate priya getting regularised in Mistral after probation period in November end.
  3. Priya gave cake , chocolate cake , with congratulations Dr Balaji on Dec 3rd. 
  4. Dec 21, he told "Appa should not sleep near me". 

Sunday, November 24, 2024

Things he did last week

  1.  2024 Novemeber last week

  1. Asked first time a question regarding languages.. What is house in hindhi? Ghar.
  2. He has understood Hindhi, Tamil and ENglish, Kannada are different languages and are the identity of people. Pointed to 4 children in dance class and told he is kannada and he is hindhi. Not sure he meant "He speaks hindhi or he is hindhi"
  3. Took my hand for cracking. Till date he hates me cracking his knuckles.
  4. He tried to cheat by starting for his present square in snakes and ladders game so that he will end up in a square with ladder.
  5. When I refused to buy cake piece in bakery, saying my tummy is big, he told he wants me to buy only 2 and those are for priya and himself.
  6. He mentioned his keral friend in creche has both car and bike and we have only bike. we should also buy car, in the most longing way possible. material desire is not programmed by advertising companies. it is innate.

Monday, November 11, 2024

Lua automation script for simulation of radial magnetic bearings

 -- Using manual4.2 pdf document to write this script

-- Run command:

-- Home Gaming laptop

--runCommand       = C:\femm42\bin\femm.exe -lua-script=C:\06_NAL\2024_RC_AMB\02_elecDesign\2024oct30_radialActuator\2024oct30_FEMMsimulation\2024nov12a_radialAMB.lua

mydir              = "C:\\06_NAL\\2024_RC_AMB\\02_elecDesign\\2024oct30_radialActuator\\2024oct30_FEMMsimulation\\"

outputFemmFilePath = "2024nov12a_ramb.fem";

--mydir = "C:\\Users\\vigne\\OneDrive\\Desktop\\2024nov03_femm\\"

--mydir = "F:\\2024_RC_amb\\02_elecDesign\\02_radialActuator\\2024oct30_FEMMsimulation\\"


-- Vicky computer

-- C:\femm42\bin\femm.exe -lua-script=C:\Users\vigne\OneDrive\Desktop\2024nov03_femm\2024nov07b_radialAMB.lua

-- Office workstation

-- C:\femm42\bin\femm.exe -lua-script=F:\2024_RC_amb\02_elecDesign\02_radialActuator\2024oct30_FEMMsimulation\2024nov07b_radialAMB.lua


-- Reading from manual 4.2.pdf in Vikki house, arcot;

-- Hints from manual

-- block labels denote what material properties and  mesh size are associated with each solution region

-- group mode, is meant to glue different objects together into parts so that entire parts can  be manipulated more easily

-- Prescribed A  boundary condition, the vector potential, A, is prescribed  along a given boundary, can be made zero on the outer od of the ramb stator to make flux not leave the bearing stator.

-- Lua variables are global, unless you specify explicitly that they are local!

-- https://www.codecademy.com/resources/docs/lua/variables


function mirrorAbt_67p5(inp_x1_x2,inp_y1_y2)

-- Get the mirrored point, by rotating to align the mirror line to x axis, getting reflection, and rotating back.

-- First rotate to align the mirror line to x axis

local temp_x1_x2 = inp_x1_x2 * cos(rad(-67.5 )) - inp_y1_y2  * sin(rad(-67.5 ));

local temp_y1_y2 = inp_x1_x2 * sin(rad(-67.5 )) + inp_y1_y2  * cos(rad(-67.5 ));

-- Flip the y axis for mirroring about x axis

temp_y1_y2 = -temp_y1_y2;

-- Rotate back to the original mirror line

local return_x1_x2= temp_x1_x2 * cos(rad(67.5 )) - temp_y1_y2  * sin(rad(67.5 ));

local return_y1_y2= temp_x1_x2 * sin(rad(67.5 )) + temp_y1_y2  * cos(rad(67.5 ));

-- return

return return_x1_x2,return_y1_y2;

end

function createGeometry()

--Create the shaft circle

local angle_increment = 360 / numSegs_noUni;

for i=0,numSegs_noUni-1 do

-- Calculate angles in radians for the start and end points of each segment

local angle1 = i * angle_increment * (pi / 180)

local angle2 = (i + 1) * angle_increment * (pi / 180)

-- Calculate the (x, y) coordinates for the start and end points

local x1 = 0.5*shaftOD_m * cos(angle1)

local y1 = 0.5*shaftOD_m  * sin(angle1)

local x2 = 0.5*shaftOD_m  * cos(angle2)

local y2 = 0.5*shaftOD_m  * sin(angle2)

-- Add nodes at the start and end points

mi_addnode(x1, y1)

mi_addnode(x2, y2)

-- Draw an arc segment between the two nodes to form the circle

mi_addarc(x1, y1, x2, y2, angle_increment, numSegs_noUni)

end

mi_zoomnatural();


--Create the  outer radius of the stator OD

angle_increment = 360 / 2;

for i=0,numSegs_noUni-1 do

-- Calculate angles in radians for the start and end points of each segment

local angle1 = i * angle_increment * (pi / 180)

local angle2 = (i + 1) * angle_increment * (pi / 180)

-- Calculate the (x, y) coordinates for the start and end points

local x1 = 0.5*odOuter_m * cos(angle1)

local y1 = 0.5*odOuter_m * sin(angle1)

local x2 = 0.5*odOuter_m * cos(angle2)

local y2 = 0.5*odOuter_m * sin(angle2)

-- Add nodes at the start and end points

mi_addnode(x1, y1)

mi_addnode(x2, y2)

-- Draw an arc segment between the two nodes to form the circle

mi_addarc(x1, y1, x2, y2, angle_increment, numSegs_noUni)

end

mi_zoomnatural();


--Create the inner radius of the stator  OD

local odInnAngArr_deg={   -22.5+thetaLegSubtOdInner_deg/2, 22.5-thetaLegSubtOdInner_deg/2, 22.5+thetaLegSubtOdInner_deg/2, 67.5-thetaLegSubtOdInner_deg/2, 67.5+thetaLegSubtOdInner_deg/2, 112.5-thetaLegSubtOdInner_deg/2, 112.5+thetaLegSubtOdInner_deg/2, 157.5-thetaLegSubtOdInner_deg/2, 157.5+thetaLegSubtOdInner_deg/2, 202.5-thetaLegSubtOdInner_deg/2, 202.5+thetaLegSubtOdInner_deg/2, 247.5-thetaLegSubtOdInner_deg/2, 247.5+thetaLegSubtOdInner_deg/2, 292.5-thetaLegSubtOdInner_deg/2, 292.5+thetaLegSubtOdInner_deg/2, 337.5-thetaLegSubtOdInner_deg/2, 337.5+thetaLegSubtOdInner_deg/2}

-- Draw the arc segments between legs

for i=1,16,2 do

local x1 = 0.5*odInner_m * cos((pi/180)*odInnAngArr_deg[i])

local y1 = 0.5*odInner_m * sin((pi/180)*odInnAngArr_deg[i])

local x2 = 0.5*odInner_m * cos((pi/180)*odInnAngArr_deg[i+1])

local y2 = 0.5*odInner_m * sin((pi/180)*odInnAngArr_deg[i+1])

-- Add nodes at the start and end points

mi_addnode(x1, y1)

mi_addnode(x2, y2)

-- Draw an arc segment between the two nodes to form the circle

mi_addarc(x1, y1, x2, y2, (odInnAngArr_deg[i+1]-odInnAngArr_deg[i]), numSegs_noUni)

end


--Create the inner radius of the OD

local idInnAngArr_deg={

   -22.5+thetaLegSubtIdInner_deg/2,

22.5-thetaLegSubtIdInner_deg/2,

22.5+thetaLegSubtIdInner_deg/2,

67.5-thetaLegSubtIdInner_deg/2,

67.5+thetaLegSubtIdInner_deg/2,

   112.5-thetaLegSubtIdInner_deg/2,

   112.5+thetaLegSubtIdInner_deg/2,

   157.5-thetaLegSubtIdInner_deg/2,

   157.5+thetaLegSubtIdInner_deg/2,

   202.5-thetaLegSubtIdInner_deg/2,

   202.5+thetaLegSubtIdInner_deg/2,

   247.5-thetaLegSubtIdInner_deg/2,

   247.5+thetaLegSubtIdInner_deg/2,

   292.5-thetaLegSubtIdInner_deg/2,

   292.5+thetaLegSubtIdInner_deg/2,

   337.5-thetaLegSubtIdInner_deg/2,

   337.5+thetaLegSubtIdInner_deg/2

   }

-- Draw the arc segments at the tips of the legs

for i=2,17,2 do

local x1 = 0.5*idInner_m * cos((pi/180)*idInnAngArr_deg[i])

local y1 = 0.5*idInner_m * sin((pi/180)*idInnAngArr_deg[i])

local x2 = 0.5*idInner_m * cos((pi/180)*idInnAngArr_deg[i+1])

local y2 = 0.5*idInner_m * sin((pi/180)*idInnAngArr_deg[i+1])

-- Add nodes at the start and end points

mi_addnode(x1, y1)

mi_addnode(x2, y2)

-- Draw an arc segment between the two nodes to form the circle

mi_addarc(x1, y1, x2, y2, (idInnAngArr_deg[i+1]-idInnAngArr_deg[i]), numSegs_noUni)

end


-- Draw the parallel lines of  the legs

for i=1,16,1 do

local x1 = 0.5*idInner_m * cos((pi/180)*idInnAngArr_deg[i])

local y1 = 0.5*idInner_m * sin((pi/180)*idInnAngArr_deg[i])

local x2 = 0.5*odInner_m * cos((pi/180)*odInnAngArr_deg[i])

local y2 = 0.5*odInner_m * sin((pi/180)*odInnAngArr_deg[i])

-- Add nodes at the start and end points

mi_addnode(x1, y1)

mi_addnode(x2, y2)

-- Draw an arc segment between the two nodes to form the circle

mi_addsegment(x1, y1, x2, y2)

end


-- Create the top quadrant, right leg, left side coil manually first.

local x1coil_TopQuad_RightLeg_LeftSide = 0.01531; local y1coil_TopQuad_RightLeg_LeftSide = 0.07484;

local x2coil_TopQuad_RightLeg_LeftSide = 0.02039; local y2coil_TopQuad_RightLeg_LeftSide = 0.07274;

local x3coil_TopQuad_RightLeg_LeftSide = 0.00642; local y3coil_TopQuad_RightLeg_LeftSide = 0.03901;

local x4coil_TopQuad_RightLeg_LeftSide = 0.00134; local y4coil_TopQuad_RightLeg_LeftSide = 0.04112;

mi_addnode(x1coil_TopQuad_RightLeg_LeftSide,y1coil_TopQuad_RightLeg_LeftSide);

mi_addnode(x2coil_TopQuad_RightLeg_LeftSide,y2coil_TopQuad_RightLeg_LeftSide);

mi_addnode(x3coil_TopQuad_RightLeg_LeftSide,y3coil_TopQuad_RightLeg_LeftSide);

mi_addnode(x4coil_TopQuad_RightLeg_LeftSide,y4coil_TopQuad_RightLeg_LeftSide);

mi_addsegment(x1coil_TopQuad_RightLeg_LeftSide,y1coil_TopQuad_RightLeg_LeftSide,x2coil_TopQuad_RightLeg_LeftSide,y2coil_TopQuad_RightLeg_LeftSide);

mi_addsegment(x2coil_TopQuad_RightLeg_LeftSide,y2coil_TopQuad_RightLeg_LeftSide,x3coil_TopQuad_RightLeg_LeftSide,y3coil_TopQuad_RightLeg_LeftSide);

mi_addsegment(x3coil_TopQuad_RightLeg_LeftSide,y3coil_TopQuad_RightLeg_LeftSide,x4coil_TopQuad_RightLeg_LeftSide,y4coil_TopQuad_RightLeg_LeftSide);

mi_addsegment(x4coil_TopQuad_RightLeg_LeftSide,y4coil_TopQuad_RightLeg_LeftSide,x1coil_TopQuad_RightLeg_LeftSide,y1coil_TopQuad_RightLeg_LeftSide);

-- Get mid points of the coil to select the segments later for rotating.

midPnt_x1_x2 = 0.5*(x1coil_TopQuad_RightLeg_LeftSide+x2coil_TopQuad_RightLeg_LeftSide);

midPnt_x2_x3 = 0.5*(x2coil_TopQuad_RightLeg_LeftSide+x3coil_TopQuad_RightLeg_LeftSide);

midPnt_x3_x4 = 0.5*(x3coil_TopQuad_RightLeg_LeftSide+x4coil_TopQuad_RightLeg_LeftSide);

midPnt_x4_x1 = 0.5*(x4coil_TopQuad_RightLeg_LeftSide+x1coil_TopQuad_RightLeg_LeftSide);

midPnt_y1_y2 = 0.5*(y1coil_TopQuad_RightLeg_LeftSide+y2coil_TopQuad_RightLeg_LeftSide);

midPnt_y2_y3 = 0.5*(y2coil_TopQuad_RightLeg_LeftSide+y3coil_TopQuad_RightLeg_LeftSide);

midPnt_y3_y4 = 0.5*(y3coil_TopQuad_RightLeg_LeftSide+y4coil_TopQuad_RightLeg_LeftSide);

midPnt_y4_y1 = 0.5*(y4coil_TopQuad_RightLeg_LeftSide+y1coil_TopQuad_RightLeg_LeftSide);

-- Mirror left side to get the right side of the top quadrant right leg to make the other side of the top right coil

    mi_clearselected();

mi_selectsegment(midPnt_x1_x2,midPnt_y1_y2);

mi_selectsegment(midPnt_x2_x3,midPnt_y2_y3);

mi_selectsegment(midPnt_x3_x4,midPnt_y3_y4);

mi_selectsegment(midPnt_x4_x1,midPnt_y4_y1);

local mirrorLineSegments = 1;

    mi_mirror(0,0,cos(rad(67.5)),sin(rad(67.5)),mirrorLineSegments )

    

-- Rotate the left side coil 8 times

    mi_clearselected();

mi_selectsegment(midPnt_x1_x2,midPnt_y1_y2);

mi_selectsegment(midPnt_x2_x3,midPnt_y2_y3);

mi_selectsegment(midPnt_x3_x4,midPnt_y3_y4);

mi_selectsegment(midPnt_x4_x1,midPnt_y4_y1);

mi_copyrotate(0,0,45,8,1)

mi_clearselected();

    -- Create the mid point of top quad, right leg, left coil, required for assigning material.

    avg_x_TopQuad_RightLeg_LeftSide  = 0.25*(x1coil_TopQuad_RightLeg_LeftSide+x2coil_TopQuad_RightLeg_LeftSide+x3coil_TopQuad_RightLeg_LeftSide+x4coil_TopQuad_RightLeg_LeftSide);

    avg_y_TopQuad_RightLeg_LeftSide  = 0.25*(y1coil_TopQuad_RightLeg_LeftSide+y2coil_TopQuad_RightLeg_LeftSide+y3coil_TopQuad_RightLeg_LeftSide+y4coil_TopQuad_RightLeg_LeftSide);

-- Rotate to get the mid point of the top quad, right leg, right coil.

    local rotAngleInsideSameCoil_rad = -2*(atan(avg_y_TopQuad_RightLeg_LeftSide/avg_x_TopQuad_RightLeg_LeftSide)-rad(67.5));

    avg_x_TopQuad_RightLeg_RightSide = avg_x_TopQuad_RightLeg_LeftSide * cos((rotAngleInsideSameCoil_rad )) - avg_y_TopQuad_RightLeg_LeftSide * sin((rotAngleInsideSameCoil_rad ));

avg_y_TopQuad_RightLeg_RightSide = avg_x_TopQuad_RightLeg_LeftSide * sin((rotAngleInsideSameCoil_rad )) + avg_y_TopQuad_RightLeg_LeftSide * cos((rotAngleInsideSameCoil_rad ));

print("Top quadrant right leg left coil avg  (" .. avg_x_TopQuad_RightLeg_LeftSide   .. ", " ..  avg_y_TopQuad_RightLeg_LeftSide  .. ")")

print("Rotation angle = " .. deg(rotAngleInsideSameCoil_rad));

print("Top quadrant right leg right coil avg (" .. avg_x_TopQuad_RightLeg_RightSide  .. ", " ..  avg_y_TopQuad_RightLeg_RightSide .. ")")


-- Mirror the mid points to get their coordinates to select them later

mirrored_midPnt_x1_x2,mirrored_midPnt_y1_y2 = mirrorAbt_67p5(midPnt_x1_x2,midPnt_y1_y2);

mirrored_midPnt_x2_x3,mirrored_midPnt_y2_y3 = mirrorAbt_67p5(midPnt_x2_x3,midPnt_y2_y3);

mirrored_midPnt_x3_x4,mirrored_midPnt_y3_y4 = mirrorAbt_67p5(midPnt_x3_x4,midPnt_y3_y4);

mirrored_midPnt_x4_x1,mirrored_midPnt_y4_y1 = mirrorAbt_67p5(midPnt_x4_x1,midPnt_y4_y1);

    -- Rotate the mirrored coil 8 times

    mi_clearselected();

mi_selectsegment(mirrored_midPnt_x1_x2,mirrored_midPnt_y1_y2);

mi_selectsegment(mirrored_midPnt_x2_x3,mirrored_midPnt_y2_y3);

mi_selectsegment(mirrored_midPnt_x3_x4,mirrored_midPnt_y3_y4);

mi_selectsegment(mirrored_midPnt_x4_x1,mirrored_midPnt_y4_y1);

mi_copyrotate(0,0,45,8,1)

mi_clearselected();

-- Get the mid points of the top quad, left leg, left and right coils

    rotAngle_deg = 45;

avg_x_TopQuad_LeftLeg_LeftSide  = avg_x_TopQuad_RightLeg_LeftSide  * cos(rad(rotAngle_deg)) - avg_y_TopQuad_RightLeg_LeftSide  * sin(rad(rotAngle_deg));

avg_y_TopQuad_LeftLeg_LeftSide  = avg_x_TopQuad_RightLeg_LeftSide  * sin(rad(rotAngle_deg)) + avg_y_TopQuad_RightLeg_LeftSide  * cos(rad(rotAngle_deg));

avg_x_TopQuad_LeftLeg_RightSide = avg_x_TopQuad_RightLeg_RightSide * cos(rad(rotAngle_deg)) - avg_y_TopQuad_RightLeg_RightSide * sin(rad(rotAngle_deg));

avg_y_TopQuad_LeftLeg_RightSide = avg_x_TopQuad_RightLeg_RightSide * sin(rad(rotAngle_deg)) + avg_y_TopQuad_RightLeg_RightSide * cos(rad(rotAngle_deg));

print("Top quadrant left leg left side       (" .. avg_x_TopQuad_LeftLeg_LeftSide    .. ", " ..  avg_y_TopQuad_LeftLeg_LeftSide   .. ")")

print("Top quadrant left leg right side      (" .. avg_x_TopQuad_LeftLeg_RightSide   .. ", " ..  avg_y_TopQuad_LeftLeg_RightSide  .. ")")

rotAngle_deg = 90;

avg_x_LeftQuad_TopLeg_LeftSide  = avg_x_TopQuad_RightLeg_LeftSide  * cos(rad(rotAngle_deg))  - avg_y_TopQuad_RightLeg_LeftSide * sin(rad(rotAngle_deg));

avg_y_LeftQuad_TopLeg_LeftSide  = avg_x_TopQuad_RightLeg_LeftSide  * sin(rad(rotAngle_deg))  + avg_y_TopQuad_RightLeg_LeftSide * cos(rad(rotAngle_deg));

avg_x_LeftQuad_TopLeg_RightSide = avg_x_TopQuad_RightLeg_RightSide * cos(rad(rotAngle_deg))  - avg_y_TopQuad_RightLeg_RightSide * sin(rad(rotAngle_deg));

avg_y_LeftQuad_TopLeg_RightSide = avg_x_TopQuad_RightLeg_RightSide * sin(rad(rotAngle_deg))  + avg_y_TopQuad_RightLeg_RightSide * cos(rad(rotAngle_deg));

avg_x_LeftQuad_BotLeg_LeftSide  = avg_x_TopQuad_LeftLeg_LeftSide   * cos(rad(rotAngle_deg))  - avg_y_TopQuad_LeftLeg_LeftSide * sin(rad(rotAngle_deg));

avg_y_LeftQuad_BotLeg_LeftSide  = avg_x_TopQuad_LeftLeg_LeftSide   * sin(rad(rotAngle_deg))  + avg_y_TopQuad_LeftLeg_LeftSide * cos(rad(rotAngle_deg));

avg_x_LeftQuad_BotLeg_RightSide = avg_x_TopQuad_LeftLeg_RightSide  * cos(rad(rotAngle_deg))  - avg_y_TopQuad_LeftLeg_RightSide * sin(rad(rotAngle_deg));

avg_y_LeftQuad_BotLeg_RightSide = avg_x_TopQuad_LeftLeg_RightSide  * sin(rad(rotAngle_deg))  + avg_y_TopQuad_LeftLeg_RightSide * cos(rad(rotAngle_deg));

print("Left quadrant top    leg  left side (" .. avg_x_LeftQuad_TopLeg_LeftSide    .. ", " .. avg_y_LeftQuad_TopLeg_LeftSide  .. ")")

print("Left quadrant top    leg right side (" .. avg_x_LeftQuad_TopLeg_RightSide   .. ", " .. avg_y_LeftQuad_TopLeg_RightSide .. ")")

print("Left quadrant bottom leg  left side (" .. avg_x_LeftQuad_BotLeg_LeftSide    .. ", " .. avg_y_LeftQuad_BotLeg_LeftSide  .. ")")

print("Left quadrant bottom leg right side (" .. avg_x_LeftQuad_BotLeg_RightSide   .. ", " .. avg_y_LeftQuad_BotLeg_RightSide .. ")")

rotAngle_deg = 180;

avg_x_BotQuad_LeftLeg_LeftSide   = avg_x_TopQuad_RightLeg_LeftSide  * cos(rad(rotAngle_deg)) - avg_y_TopQuad_RightLeg_LeftSide  * sin(rad(rotAngle_deg));

avg_y_BotQuad_LeftLeg_LeftSide   = avg_x_TopQuad_RightLeg_LeftSide  * sin(rad(rotAngle_deg)) + avg_y_TopQuad_RightLeg_LeftSide  * cos(rad(rotAngle_deg));

avg_x_BotQuad_LeftLeg_RightSide  = avg_x_TopQuad_RightLeg_RightSide * cos(rad(rotAngle_deg)) - avg_y_TopQuad_RightLeg_RightSide * sin(rad(rotAngle_deg));

avg_y_BotQuad_LeftLeg_RightSide  = avg_x_TopQuad_RightLeg_RightSide * sin(rad(rotAngle_deg)) + avg_y_TopQuad_RightLeg_RightSide * cos(rad(rotAngle_deg));

avg_x_BotQuad_RightLeg_LeftSide  = avg_x_TopQuad_LeftLeg_LeftSide   * cos(rad(rotAngle_deg)) - avg_y_TopQuad_LeftLeg_LeftSide   * sin(rad(rotAngle_deg));

avg_y_BotQuad_RightLeg_LeftSide  = avg_x_TopQuad_LeftLeg_LeftSide   * sin(rad(rotAngle_deg)) + avg_y_TopQuad_LeftLeg_LeftSide   * cos(rad(rotAngle_deg));

avg_x_BotQuad_RightLeg_RightSide = avg_x_TopQuad_LeftLeg_RightSide  * cos(rad(rotAngle_deg)) - avg_y_TopQuad_LeftLeg_RightSide  * sin(rad(rotAngle_deg));

avg_y_BotQuad_RightLeg_RightSide = avg_x_TopQuad_LeftLeg_RightSide  * sin(rad(rotAngle_deg)) + avg_y_TopQuad_LeftLeg_RightSide  * cos(rad(rotAngle_deg));

print("Bottom quadrant  left leg  left side coil avg (" .. avg_x_BotQuad_LeftLeg_LeftSide  .. ", " .. avg_y_BotQuad_LeftLeg_LeftSide   .. ")")

print("Bottom quadrant  left leg right Side coil avg (" .. avg_x_BotQuad_LeftLeg_RightSide .. ", " .. avg_y_BotQuad_LeftLeg_RightSide  .. ")")

print("Bottom quadrant right leg  left side coil avg (" .. avg_x_BotQuad_RightLeg_LeftSide .. ", " .. avg_y_BotQuad_RightLeg_LeftSide  .. ")")

print("Bottom quadrant right leg right Side coil avg (" .. avg_x_BotQuad_RightLeg_LeftSide .. ", " .. avg_y_BotQuad_RightLeg_RightSide .. ")")

rotAngle_deg = 270;

avg_x_RightQuad_TopLeg_LeftSide  = avg_x_TopQuad_LeftLeg_LeftSide   * cos(rad(rotAngle_deg)) - avg_y_TopQuad_LeftLeg_LeftSide  * sin(rad(rotAngle_deg));

avg_y_RightQuad_TopLeg_LeftSide  = avg_x_TopQuad_LeftLeg_LeftSide   * sin(rad(rotAngle_deg)) + avg_y_TopQuad_LeftLeg_LeftSide  * cos(rad(rotAngle_deg));

avg_x_RightQuad_TopLeg_RightSide = avg_x_TopQuad_LeftLeg_RightSide  * cos(rad(rotAngle_deg)) - avg_y_TopQuad_LeftLeg_RightSide * sin(rad(rotAngle_deg));

avg_y_RightQuad_TopLeg_RightSide = avg_x_TopQuad_LeftLeg_RightSide  * sin(rad(rotAngle_deg)) + avg_y_TopQuad_LeftLeg_RightSide * cos(rad(rotAngle_deg));

avg_x_RightQuad_BotLeg_LeftSide  = avg_x_TopQuad_RightLeg_LeftSide  * cos(rad(rotAngle_deg)) - avg_y_TopQuad_RightLeg_LeftSide  * sin(rad(rotAngle_deg));

avg_y_RightQuad_BotLeg_LeftSide  = avg_x_TopQuad_RightLeg_LeftSide  * sin(rad(rotAngle_deg)) + avg_y_TopQuad_RightLeg_LeftSide  * cos(rad(rotAngle_deg));

avg_x_RightQuad_BotLeg_RightSide = avg_x_TopQuad_RightLeg_RightSide * cos(rad(rotAngle_deg)) - avg_y_TopQuad_RightLeg_RightSide * sin(rad(rotAngle_deg));

avg_y_RightQuad_BotLeg_RightSide = avg_x_TopQuad_RightLeg_RightSide * sin(rad(rotAngle_deg)) + avg_y_TopQuad_RightLeg_RightSide * cos(rad(rotAngle_deg));

print("Right quadrant top    leg  left side (" .. avg_x_RightQuad_TopLeg_LeftSide      .. ", " .. avg_y_RightQuad_TopLeg_LeftSide  .. ")")

print("Right quadrant top    leg right side (" .. avg_x_RightQuad_TopLeg_RightSide     .. ", " .. avg_y_RightQuad_TopLeg_RightSide .. ")")

print("Right quadrant bottom leg  left side (" .. avg_x_RightQuad_BotLeg_LeftSide      .. ", " .. avg_y_RightQuad_BotLeg_LeftSide  .. ")")

print("Right quadrant bottom leg right side (" .. avg_x_RightQuad_BotLeg_RightSide    .. ", " .. avg_y_RightQuad_BotLeg_RightSide .. ")")


end



-- -----------------------------------------------------------------------------------------------------------

showconsole()


--clearconsole()

--hideconsole()

--quit()

newdocument(0) --magnetics problem

setcompatibilitymode(0) -- set compatability mode to FEMM 4.2, the latest.


-- Page 86/161 femm manual

mi_probdef(0,"meters","planar",1E-8,40e-3)

-- 0 Hz DC

-- 40e-3 is the depth into the plane of the paper

-- Problem type: "planar" or "axi"


messagebox("Balaji The GREATESTEST\nRadial active magnetic bearing simulation\n Nov10a\n Flux and rotor forces for a given current")


-- Geometry parameters

legWidth_m   = 12e-3;

odOuter_m    = 200e-3;

odInner_m    = 160e-3;

idInner_m    = 60e-3;

shaftOD_m    = 59e-3;

asslyHoles_m = 6e-3;

Nperleg_turns= 50;

numSegs_noUni= 8;-- number of segments in the circle, for getting smooth circles.

-- Angle of subtended by one leg 

-- legWidth_m = 2*R*sin(theta/2), From right angle triangle with hypotenuse as radius

thetaLegSubtOdInner_rad = 2*asin(legWidth_m/(odInner_m));

thetaLegSubtOdOuter_rad = 2*asin(legWidth_m/(odOuter_m));

thetaLegSubtIdInner_rad = 2*asin(legWidth_m/(idInner_m));

thetaLegSubtOdInner_deg = thetaLegSubtOdInner_rad*180/pi;

thetaLegSubtOdOuter_deg = thetaLegSubtOdOuter_rad*180/pi;

thetaLegSubtIdInner_deg = thetaLegSubtIdInner_rad*180/pi;


-- Create the Geometry

createGeometry()


-- Use the inbuilt materials

mi_getmaterial('Air')

mi_getmaterial('18 AWG')

mi_getmaterial('Cold rolled low carbon strip steel')

mi_getmaterial('M-43 Steel')-- EN24 is 4340 USA/ASTM in equivalent american grading chart


-- Create block labels

mi_addblocklabel(0.035,0)-- Air

mi_addblocklabel(avg_x_TopQuad_RightLeg_LeftSide   ,  avg_y_TopQuad_RightLeg_LeftSide );-- copper windings

mi_addblocklabel(avg_x_TopQuad_RightLeg_RightSide  ,  avg_y_TopQuad_RightLeg_RightSide);-- copper windings

mi_addblocklabel(avg_x_TopQuad_LeftLeg_LeftSide    ,  avg_y_TopQuad_LeftLeg_LeftSide  );-- copper windings

mi_addblocklabel(avg_x_TopQuad_LeftLeg_RightSide   ,  avg_y_TopQuad_LeftLeg_RightSide );-- copper windings

mi_addblocklabel(avg_x_LeftQuad_TopLeg_LeftSide    ,  avg_y_LeftQuad_TopLeg_LeftSide  );-- copper windings

mi_addblocklabel(avg_x_LeftQuad_TopLeg_RightSide   ,  avg_y_LeftQuad_TopLeg_RightSide );-- copper windings

mi_addblocklabel(avg_x_LeftQuad_BotLeg_LeftSide    ,  avg_y_LeftQuad_BotLeg_LeftSide  );-- copper windings

mi_addblocklabel(avg_x_LeftQuad_BotLeg_RightSide   ,  avg_y_LeftQuad_BotLeg_RightSide );-- copper windings

mi_addblocklabel(avg_x_BotQuad_LeftLeg_LeftSide    ,  avg_y_BotQuad_LeftLeg_LeftSide  );-- copper windings

mi_addblocklabel(avg_x_BotQuad_LeftLeg_RightSide   ,  avg_y_BotQuad_LeftLeg_RightSide );-- copper windings

mi_addblocklabel(avg_x_BotQuad_RightLeg_LeftSide   ,  avg_y_BotQuad_RightLeg_LeftSide );-- copper windings

mi_addblocklabel(avg_x_BotQuad_RightLeg_RightSide  ,  avg_y_BotQuad_RightLeg_RightSide);-- copper windings

mi_addblocklabel(avg_x_RightQuad_TopLeg_LeftSide   ,  avg_y_RightQuad_TopLeg_LeftSide );-- copper windings

mi_addblocklabel(avg_x_RightQuad_TopLeg_RightSide  ,  avg_y_RightQuad_TopLeg_RightSide);-- copper windings

mi_addblocklabel(avg_x_RightQuad_BotLeg_LeftSide   ,  avg_y_RightQuad_BotLeg_LeftSide );-- copper windings

mi_addblocklabel(avg_x_RightQuad_BotLeg_RightSide  ,  avg_y_RightQuad_BotLeg_RightSide);-- copper windings

mi_addblocklabel(0.09,0)-- Laminations stack

mi_addblocklabel(0,0)-- Steel EN24 shaft


--Add a "circuit property" so that we can calculate the properties of the

--coil as seen from the terminals.

seriesConnection   = 1;

parallelConnection = 0;

iTopAct_Ampere     = 1;

iLeftAct_Ampere    = -1;

iBottomAct_Ampere  = 1;

iRightAct_Ampere   = 1;


--iTopAct_Ampere  = tonumber(prompt("Enter current in top actuator:"));

nTurns             = 50;

mi_addcircprop('topCoil',     iTopAct_Ampere   , seriesConnection);

mi_addcircprop('leftCoil',    iLeftAct_Ampere  , seriesConnection);

mi_addcircprop('bottomCoil',  iBottomAct_Ampere, seriesConnection);

mi_addcircprop('rightCoil',   iRightAct_Ampere , seriesConnection);


-- Select block labels and apply materials

meshSize = 1000e-6;

mi_selectlabel(0.035,0)-- Air

mi_setblockprop('Air',0,meshSize,'<None>',0,0,0)

mi_clearselected();


-- Assign coil and winding direction

mi_selectlabel(avg_x_TopQuad_RightLeg_LeftSide   ,  avg_y_TopQuad_RightLeg_LeftSide ); mi_setblockprop('18 AWG',0,meshSize,'topCoil'    ,0,0, nTurns);  mi_clearselected();

mi_selectlabel(avg_x_TopQuad_RightLeg_RightSide  ,  avg_y_TopQuad_RightLeg_RightSide); mi_setblockprop('18 AWG',0,meshSize,'topCoil'    ,0,0,-nTurns);  mi_clearselected();

mi_selectlabel(avg_x_TopQuad_LeftLeg_LeftSide    ,  avg_y_TopQuad_LeftLeg_LeftSide  ); mi_setblockprop('18 AWG',0,meshSize,'topCoil'    ,0,0,-nTurns);  mi_clearselected();

mi_selectlabel(avg_x_TopQuad_LeftLeg_RightSide   ,  avg_y_TopQuad_LeftLeg_RightSide ); mi_setblockprop('18 AWG',0,meshSize,'topCoil'    ,0,0, nTurns);  mi_clearselected();


mi_selectlabel(avg_x_LeftQuad_TopLeg_LeftSide    ,  avg_y_LeftQuad_TopLeg_LeftSide  ); mi_setblockprop('18 AWG',0,meshSize,'leftCoil'   ,0,0, nTurns);  mi_clearselected();

mi_selectlabel(avg_x_LeftQuad_TopLeg_RightSide   ,  avg_y_LeftQuad_TopLeg_RightSide ); mi_setblockprop('18 AWG',0,meshSize,'leftCoil'   ,0,0,-nTurns);  mi_clearselected();

mi_selectlabel(avg_x_LeftQuad_BotLeg_LeftSide    ,  avg_y_LeftQuad_BotLeg_LeftSide  ); mi_setblockprop('18 AWG',0,meshSize,'leftCoil'   ,0,0,-nTurns);  mi_clearselected();

mi_selectlabel(avg_x_LeftQuad_BotLeg_RightSide   ,  avg_y_LeftQuad_BotLeg_RightSide ); mi_setblockprop('18 AWG',0,meshSize,'leftCoil'   ,0,0, nTurns);  mi_clearselected();


mi_selectlabel(avg_x_BotQuad_LeftLeg_LeftSide    ,  avg_y_BotQuad_LeftLeg_LeftSide  ); mi_setblockprop('18 AWG',0,meshSize,'bottomCoil' ,0,0, nTurns);  mi_clearselected();

mi_selectlabel(avg_x_BotQuad_LeftLeg_RightSide   ,  avg_y_BotQuad_LeftLeg_RightSide ); mi_setblockprop('18 AWG',0,meshSize,'bottomCoil' ,0,0,-nTurns);  mi_clearselected();

mi_selectlabel(avg_x_BotQuad_RightLeg_LeftSide   ,  avg_y_BotQuad_RightLeg_LeftSide ); mi_setblockprop('18 AWG',0,meshSize,'bottomCoil' ,0,0,-nTurns);  mi_clearselected();

mi_selectlabel(avg_x_BotQuad_RightLeg_RightSide  ,  avg_y_BotQuad_RightLeg_RightSide); mi_setblockprop('18 AWG',0,meshSize,'bottomCoil' ,0,0, nTurns);  mi_clearselected();


mi_selectlabel(avg_x_RightQuad_TopLeg_LeftSide   ,  avg_y_RightQuad_TopLeg_LeftSide ); mi_setblockprop('18 AWG',0,meshSize,'rightCoil'  ,0,0, nTurns);  mi_clearselected();

mi_selectlabel(avg_x_RightQuad_TopLeg_RightSide  ,  avg_y_RightQuad_TopLeg_RightSide); mi_setblockprop('18 AWG',0,meshSize,'rightCoil'  ,0,0,-nTurns);  mi_clearselected();

mi_selectlabel(avg_x_RightQuad_BotLeg_LeftSide   ,  avg_y_RightQuad_BotLeg_LeftSide ); mi_setblockprop('18 AWG',0,meshSize,'rightCoil'  ,0,0,-nTurns);  mi_clearselected();

mi_selectlabel(avg_x_RightQuad_BotLeg_RightSide  ,  avg_y_RightQuad_BotLeg_RightSide); mi_setblockprop('18 AWG',0,meshSize,'rightCoil'  ,0,0, nTurns);  mi_clearselected();


mi_selectlabel(0.09,0)-- Laminations stack

mi_setblockprop('Cold rolled low carbon strip steel',0,meshSize,'<None>',0,0,0)

mi_clearselected();


mi_selectlabel(0,0)-- Steel EN24 shaft

mi_setblockprop('M-43 Steel',0,meshSize,'<None>',0,0,0)

mi_clearselected();


-- Add boundary condition, dirichlet at the outer rim of the amb

mi_addboundprop("A=0",0,0,0,0,0,0,0,0,0);

mi_selectarcsegment(0,odOuter_m*0.5)

notHiddenInPostProcessor = 0;

boundaryGroupNum = 1;

mi_setarcsegmentprop(1,'A=0',notHiddenInPostProcessor,boundaryGroupNum);

mi_clearselected();


mi_selectarcsegment(0,-odOuter_m*0.5)

mi_setarcsegmentprop(1,'A=0',notHiddenInPostProcessor,boundaryGroupNum);

mi_clearselected();


-- Save before solving

mi_saveas(mydir .. outputFemmFilePath)


-- --Now,analyze the problem and load the solution when the analysis is finished

mi_analyze()

mi_loadsolution()



-- Outputplots :

----------------

-- Show the flux density plot

-- Parameters: legend (1 to show, 0 to hide), gscale (0 for color, 1 for grayscale), upper_B, lower_B, type (0 for B, 1 for H)

colour = 0;

showPlot = 0;

upperB_Tesla = 1.6;

lowerB_Tesla = 0;

fluxDensityPlot = 0;

fluxIntensityPlot = 1;

--mo_showvector(1) 

mo_showdensityplot(showPlot, colour, upperB_Tesla, lowerB_Tesla, fluxDensityPlot)

--mo_savebitmap("fluxDensity_plot.png")

pause()


--mo_showdensityplot(showPlot, colour, upperB_Tesla, lowerB_Tesla, fluxIntensityPlot)

--mo_savebitmap("fluxIntensity_plot.png")

pause()


-- Contour along the top 90 degree sector of the shaft

-- Left side of y axis

mo_seteditmode("contour")

mo_addcontour(-0.5*shaftOD_m*sin(45/57.3),0.5*shaftOD_m*cos(45/57.3))

mo_addcontour(-0.5*shaftOD_m*sin(35/57.3),0.5*shaftOD_m*cos(35/57.3))

mo_addcontour(-0.5*shaftOD_m*sin(25/57.3),0.5*shaftOD_m*cos(25/57.3))

mo_addcontour(-0.5*shaftOD_m*sin(15/57.3),0.5*shaftOD_m*cos(15/57.3))

mo_addcontour(-0.5*shaftOD_m*sin(05/57.3),0.5*shaftOD_m*cos(05/57.3))

-- Right side of y axis

mo_addcontour( 0.5*shaftOD_m*sin(45/57.3),0.5*shaftOD_m*cos(45/57.3))

mo_addcontour( 0.5*shaftOD_m*sin(35/57.3),0.5*shaftOD_m*cos(35/57.3))

mo_addcontour( 0.5*shaftOD_m*sin(25/57.3),0.5*shaftOD_m*cos(25/57.3))

mo_addcontour( 0.5*shaftOD_m*sin(15/57.3),0.5*shaftOD_m*cos(15/57.3))

mo_addcontour( 0.5*shaftOD_m*sin(05/57.3),0.5*shaftOD_m*cos(05/57.3))

mo_makeplot(2,200,mydir .. "top90degSect_shaft_Potential.emf")

-- --pause()

-- --quit()

 

----If wetop90degSect_shaft were interested in the flux density at specific positions, 

----we could inquire at specific points directly:

--b0=mo_getb(0.0114,0.0266);

--messagebox('Flux density at the tip of the top left  leg is ' .. b0[1] .. 'Tesla');

--b1=mo_getb(-0.0114,0.0266);

--messagebox('Flux density at the tip of the top right leg is ' .. b1[1] .. 'Tesla');

--

----The program will report the terminal properties of the circuit:

----current, voltage, and flux linkage 

--vals = mo_getcircuitproperties('topCoil');

----If we were interested in inductance, it could be obtained by

----dividing flux linkage by current

--L = 1000*vals[2]/vals[0];

--messagebox('The self-inductance of the coil is  ' .. L .. 'mHenry');

 




Friday, September 6, 2024

Sulzer Frank Gas turbine controls notes

 Saw video on 10-Aug-2024

  1. 1939  ABB Switzerland - 4MW gas turbine had 17.4% efficiency
  2. Installed by Prof  Stodola
  3. ran till 2002
  4. acquired by Alstom in 2005
  5. V94.2 Industrial grade gas turbine with silo type combustor
  6. bearings: Siemens bearings of gas turbines are sealed
  7. Alstom bearings are accessible during operation
  8. Combustion can be diffusion flame or premixed flame.
  9. diffusion : only outer perphery of yellow flame touches oxygen. inside CH4 is unburnt.
  10. Premixed: CH4+O2 already thoroughly mixed, blue flame
  11. VIGV =  to vary the air mass flow rate to control
  12. EGT: not enter unstable combustion zone.
  13. sero actuator valves pid are tuned to have one overshoot and no undershoots, used in the fuel supply lines.
  14. TUning of pid controllers are done at 50% open position
  15. in case control signal to the control valve is interrupted like cable cut, the spring loaded valve must close the line in 200 ms
  16. double side block and bleed are required before opening fuel gas pipelines for repair
  17. lvms: vibration diagonostics for insity balancing of turbines
  18. temperature should drop when bleed valve closes
  19. startup burner is diffusion burner
  20. run up premixed burner
  21. power producing turbines are of 3 manufacturers
    1. ge= frame 9
    2. siemens = v94.2
    3. alstom =13e2
  22. fame = fatty acid material esters in pipe lines that use vegetable oil attack seals of ball valves.

Sunday, March 31, 2024

MIktex download and update error

 


Default download for miktex from ctan mirror:

https://mirror.niser.ac.in/ctan/systems/win32/miktex/setup/windows-x64/basic-miktex-24.1-x64.exe

The above mirror is not working most of the time.

So changed the mirror by manually changing the ctan mirror in the url to:

https://in.mirrors.cicku.me/ctan/systems/win32/miktex/setup/windows-x64/basic-miktex-24.1-x64.exe


When updating from miktex console, Got errror that update not possible due to ctan server not replying. Error message was time out error

code="28", url="https://in.mirrors.cicku.me/ctan/systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma"


Changed the ctan mirror miktex uses from NISER server to CICKU

mpm --set-repository="https://in.mirrors.cicku.me/ctan/systems/win32/miktex/tm/packages/"